Pristine Ack-5.5
[Ack-5.5.git] / lang / fortran / fc
1 #!/bin/sh
2 PATH=/v/bin:/bin:/usr/bin
3 # f77-style shell script to compile and load fortran, C, and assembly codes
4
5 #       usage:  f77 [-O] [-o absfile] [-c] files [-l library]
6
7 #               -o objfile      Override default executable name a.out.
8
9 #               -c              Do not call linker, leave relocatables in *.o.
10
11 #               -S              leave assembler output on file.s
12
13 #               -l library      (passed to ld).
14
15 #               -u              complain about undeclared variables
16
17 #               -w              omit all warning messages
18
19 #               -w66            omit Fortran 66 compatibility warning messages
20
21 #               files           FORTRAN source files ending in .f .
22 #                               C source files ending in .c .
23 #                               Assembly language files ending in .s .
24 #                               efl source files ending in .e .
25
26 #               -D def          passed to C compiler (for .c files)
27
28 #               -I includepath  passed to C compiler (for .c files)
29
30 #               -Ntnnn          allow nnn entries in table t
31
32 s=/tmp/stderr_$$
33 t=/tmp/f77_$$.o
34 CC=${CC_f2c:-'/v/bin/lcc -Wfdouble=8,4,1'}
35 EFL=${EFL:-/v/bin/efl}
36 EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
37 F2C=${F2C:-/v/bin/f2c}
38 F2CFLAGS=${F2CFLAGS:='-ARw8'}
39 rc=0
40 trap "rm -f $s $t; exit \$rc" 0
41 lib=/lib/num/lib.lo
42 OUTF=a.out
43 cOPT=1
44 set -- `getopt cD:gI:N:Oo:Suw6 "$@"`
45 case $? in 0);; *) exit 1;; esac
46 CCFLAGS=
47 while
48         test X"$1" != X--
49 do
50         case "$1"
51         in
52         -c)     cOPT=0
53                 shift
54                 ;;
55
56         -D)     CCFLAGS="$CCFLAGS -D$2"
57                 shift 2
58                 ;;
59
60         -g)     CFLAGS="$CFLAGS -g"
61                 shift;;
62
63         -I)     CCFLAGS="$CCFLAGS -I$2"
64                 shift 2
65                 ;;
66
67         -o)     OUTF=$2
68                 shift 2
69                 ;;
70
71         -O)     case $2 in -1) O=-O1;; -2) O=-O2;; -3) O=-O3;; *) O=-O;; esac
72                 case $O in -O);; *) shift;; esac
73                 # lcc ignores -O...
74                 shift
75                 ;;
76
77         -u)     F2CFLAGS="$F2CFLAGS -u"
78                 shift
79                 ;;
80
81         -w)     F2CFLAGS="$F2CFLAGS -w"
82                 case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
83                         case $2 in -6) shift;; esac;; esac
84                 shift
85                 ;;
86
87         -N)     F2CFLAGS="$F2CFLAGS $1""$2"
88                 shift 2
89                 ;;
90
91         -S)     CFLAGS="$CFLAGS -S"
92                 cOPT=0
93                 shift
94                 ;;
95
96         *)
97                 echo "invalid parameter $1" 1>&2
98                 shift
99                 ;;
100         esac
101 done
102 shift
103 while
104         test -n "$1"
105 do
106         case "$1"
107         in
108         *.[fF])
109                 case "$1" in *.f) f=".f";; *.F) f=".F";; esac
110                 b=`basename $1 $f`
111                 $F2C $F2CFLAGS $1
112                 case $? in 0);; *) exit;; esac
113                 $CC -c $CFLAGS $b.c 2>$s
114                 rc=$?
115                 sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
116                 case $rc in 0);; *) exit;; esac
117                 OFILES="$OFILES $b.o"
118                 rm $b.c
119                 case $cOPT in 1) cOPT=2;; esac
120                 shift
121                 ;;
122         *.e)
123                 b=`basename $1 .e`
124                 $EFL $EFLFLAGS $1 >$b.f
125                 case $? in 0);; *) exit;; esac
126                 $F2C $F2CFLAGS $b.f
127                 case $? in 0);; *) exit;; esac
128                 $CC -c $CFLAGS $b.c
129                 case $? in 0);; *) exit;; esac
130                 OFILES="$OFILES $b.o"
131                 rm $b.[cf]
132                 case $cOPT in 1) cOPT=2;; esac
133                 shift
134                 ;;
135         *.s)
136                 echo $1: 1>&2
137                 OFILE=`basename $1 .s`.o
138                 ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
139                 case $? in 0);; *) exit;; esac
140                 OFILES="$OFILES $OFILE"
141                 case $cOPT in 1) cOPT=2;; esac
142                 shift
143                 ;;
144         *.c)
145                 echo $1: 1>&2
146                 OFILE=`basename $1 .c`.o
147                 $CC -c $CFLAGS $CCFLAGS $1
148                 rc=$?; case $rc in 0);; *) exit;; esac
149                 OFILES="$OFILES $OFILE"
150                 case $cOPT in 1) cOPT=2;; esac
151                 shift
152                 ;;
153         *.o)
154                 OFILES="$OFILES $1"
155                 case $cOPT in 1) cOPT=2;; esac
156                 shift
157                 ;;
158         -l)
159                 OFILES="$OFILES -l$2"
160                 shift 2
161                 case $cOPT in 1) cOPT=2;; esac
162                 ;;
163         -l*)
164                 OFILES="$OFILES $1"
165                 shift
166                 case $cOPT in 1) cOPT=2;; esac
167                 ;;
168         -o)
169                 OUTF=$2; shift 2;;
170         *)
171                 OFILES="$OFILES $1"
172                 shift
173                 case $cOPT in 1) cOPT=2;; esac
174                 ;;
175         esac
176 done
177
178 case $cOPT in 2) $CC -o $OUTF -u MAIN__ $OFILES -lf2c -lm;; esac
179 rc=$?
180 exit $rc