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