aboutsummaryrefslogtreecommitdiff
path: root/unix/f2c/fc
diff options
context:
space:
mode:
Diffstat (limited to 'unix/f2c/fc')
-rw-r--r--unix/f2c/fc366
1 files changed, 366 insertions, 0 deletions
diff --git a/unix/f2c/fc b/unix/f2c/fc
new file mode 100644
index 00000000..1f71e598
--- /dev/null
+++ b/unix/f2c/fc
@@ -0,0 +1,366 @@
+#! /bin/sh
+
+# NOTE: you may need to adjust the references to /usr/local/... below
+# (or remove them if they're not needed on your system).
+# You may need to add something like "-Olimit 2000" to the -O
+# processing below or change it to something more suitable for your
+# system. See also the comments starting with ### below.
+
+# Note that with some shells, invocations of the form
+# CFLAGS='system-specific stuff' fc ...
+# may be useful as way to pass system-specific stuff to the C compiler.
+# The script below simply appends to the initial CFLAGS value.
+
+PATH=/usr/local/bin:/bin:/usr/bin
+
+# f77-style shell script to compile and load fortran, C, and assembly codes
+
+# usage: f77 [options] files [-l library]
+
+# Options:
+
+# -o objfile Override default executable name a.out.
+
+# -a use automatic variable storage (on the stack)
+# by default -- rather than static storage
+
+# -c Do not call linker, leave relocatables in *.o.
+
+# -C Check that subscripts are in bounds.
+
+# -S leave assembler output on file.s
+
+# -L libdir (passed to ld)
+
+# -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 .
+# FORTRAN with cpp preprocessor directives
+# ending in .F .
+# C source files ending in .c .
+# Assembly language files ending in .s .
+# efl source files ending in .e .
+# RATFOR files ending in .r .
+# Object files ending in .o .
+# Shared libraries ending in .so .
+
+# f2c prototype files ending in .P ; such
+# files only affect subsequent files.
+
+# -D def passed to C compiler (for .c files)
+# or to cpp (for .F files)
+
+# -I includepath passed to C compiler (for .c files)
+# or to cpp (for .F files), and to f2c
+
+# -m xxx passed to C compiler as -mxxx
+
+# -N tnnn allow nnn entries in table t
+
+# -P emit .P files
+
+# -r8 promote real to double precision and
+# complex to double complex
+
+# -s strip executable
+
+# -trapuv Initialize floating-point variables to
+# signaling NaNs (on machines with IEEE
+# arithmetic) unless they appear in save,
+# common, or data statements. Initialize
+# other kinds of variables to values that
+# may attract attention if used without
+# being assigned proper values.
+
+# -U def passed to C compiler (for .c files)
+# or to cpp (for .F files) to remove def
+
+# -v show current f2c version
+# --version same as -v
+
+s=/tmp/stderr_$$
+t=/tmp/f77_$$.o
+### On some systems (e.g., IRIX), -common prevents complaints
+### about multiple definitions of COMMON blocks.
+#CC=${CC_f2c:-'cc -common'}
+CC=${CC_f2c:-'cc'}
+EFL=${EFL:-efl}
+EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
+RATFOR=${RATFOR:-ratfor}
+RFLAGS=${RFLAGS:-'-6&'}
+F2C=${F2C:-/usr/local/bin/f2c}
+show_fc_help=0
+case $1 in
+ --help) show_fc_help=1;;
+ --version) show_fc_help=2;;
+ '-?') show_fc_help=1;;
+ -h) show_fc_help=1;;
+ -v) show_fc_help=2;;
+ esac
+case $show_fc_help in
+ 1)
+ echo 'f77 script based on f2c'
+ echo 'For usage details, see comments at the beginning of' $0 .
+ echo 'For pointers to f2c documentation, invoke' $F2C --help
+ exit 0;;
+ 2)
+ echo $0 'script based on f2c:'; $F2C -v
+ exit 0;;
+ esac
+F2CFLAGS=${F2CFLAGS:='-ARw8 -Nn802 -Nq300 -Nx400'}
+CPP=${CPP:-/lib/cpp}
+rc=0
+trap "rm -f $s $t; exit \$rc" 0
+OUTF=a.out
+OUTO=
+cOPT=1
+set -- `getopt acCD:gI:L:m:N:O:U:o:r:sSt:uw6 "$@"`
+case $? in 0);; *) rc=$?; exit;; esac
+CPPFLAGS=${CPPFLAGS:-'-I/usr/local/include'}
+CFLAGSF2C=${CFLAGSF2C:-'-I/usr/local/include'}
+OFILES=
+trapuv=
+strip=
+LIBS="-lf2c -lm"
+while
+ test X"$1" != X--
+do
+ case "$1"
+ in
+ -a) F2CFLAGS="$F2CFLAGS -a"
+ shift;;
+
+ -C) F2CFLAGS="$F2CFLAGS -C"
+ shift;;
+
+ -c) cOPT=0
+ shift
+ ;;
+
+ -D) CPPFLAGS="$CPPFLAGS -D$2"
+ shift 2
+ ;;
+
+ -g) CFLAGS="$CFLAGS -g"
+ F2CFLAGS="$F2CFLAGS -g"
+ shift;;
+
+ -I) CPPFLAGS="$CPPFLAGS -I$2"
+ F2CFLAGS="$F2CFLAGS -I$2"
+ shift 2
+ ;;
+
+ -m) CC="$CC -m$2"
+ shift 2
+ ;;
+
+ -U) CPPFLAGS="$CPPFLAGS -U$2"
+ shift 2
+ ;;
+
+ -o) OUTF=$2
+ OUTO=$2
+ shift 2
+ ;;
+
+ -O) case $2 in 1) O=-O1;; 2) O=-O2;; 3) O=-O3;; *) O=-O;; esac
+ case $O in -O);; *) shift;; esac
+ CFLAGS="$CFLAGS $O"
+# CFLAGS="$CFLAGS $O -Olimit 2000"
+ shift
+ ;;
+
+ -r) case $2 in 8) F2CFLAGS="$F2CFLAGS -r8";;
+ *) echo "Ignoring -r$2";; esac
+ shift; shift
+ ;;
+
+ -s) strip=1
+ 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
+ ;;
+
+ -L) OFILES="$OFILES $1$2"
+ shift 2
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+
+ -L*) OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+
+ -N) F2CFLAGS="$F2CFLAGS $1""$2"
+ shift 2
+ ;;
+
+ -P) F2CFLAGS="$F2CFLAGS $1"
+ shift
+ ;;
+
+
+ -S) CFLAGS="$CFLAGS -S"
+ cOPT=0
+ shift
+ ;;
+
+ -t)
+ case $2 in
+ rapuv)
+ F2CFLAGS="$F2CFLAGS -trapuv"
+ trapuv=1
+# LIBS="$LIBS -lfpe"
+ shift 2;;
+ *)
+ echo "invalid parameter $1" 1>&2
+ shift;;
+ esac
+ ;;
+
+ '') echo $0: 'unexpected null argument'; exit 1;;
+
+ *)
+ echo "invalid parameter $1" 1>&2
+ shift
+ ;;
+ esac
+done
+shift
+case $cOPT in 0) case $OUTO in '');; *) CFLAGS="$CFLAGS -o $OUTO";; esac;; esac
+while
+ test -n "$1"
+do
+ case "$1"
+ in
+ *.[fF])
+ case "$1" in *.f) f=".f";; *.F) f=".F";; esac
+ case "$1" in
+ *.f) b=`basename $1 .f`
+ $F2C $F2CFLAGS $1
+ rc=$?
+ ;;
+ *.F) b=`basename $1 .F`
+ $CPP $CPPFLAGS $1 >$b.i
+ rc=$?
+ case $rc in 0)
+ $F2C $F2CFLAGS <$b.i >$b.c
+ rc=$?
+ ;;esac
+ rm $b.i
+ ;;
+ esac
+ case $rc in 0);; *) exit;; esac
+ $CC -c $CFLAGSF2C $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);; *) rc=$?; exit;; esac
+ $F2C $F2CFLAGS $b.f
+ case $? in 0);; *) rc=$?; exit;; esac
+ $CC -c $CFLAGSF2C $CFLAGS $b.c
+ case $? in 0);; *) rc=$?; exit;; esac
+ OFILES="$OFILES $b.o"
+ rm $b.[cf]
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ *.r)
+ b=`basename $1 .r`
+ $RATFOR $RFLAGS $1 >$b.f
+ case $? in 0);; *) rc=$?; exit;; esac
+ $F2C $F2CFLAGS $b.f
+ case $? in 0);; *) rc=$?; exit;; esac
+ $CC -c $CFLAGSF2C $CFLAGS $b.c
+ case $? in 0);; *) rc=$?; 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:-as} -o $OFILE $AFLAGS $1
+ case $? in 0);; *) rc=$?; 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 $CFLAGSF2C $CPPFLAGS $CFLAGS $1
+ rc=$?; case $rc in 0);; *) rc=$?; 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
+ ;;
+ *.so)
+ OFILES="$OFILES $1"
+ case $cOPT in 1) cOPT=2;; esac
+ shift
+ ;;
+ -[lL])
+ OFILES="$OFILES $1$2"
+ shift 2
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -[lL]*)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ -o)
+ case $cOPT in 0) CFLAGS="$CFLAGS -o $2";; *) OUTF=$2;; esac
+ shift 2;;
+ *.P)
+ F2CFLAGS="$F2CFLAGS $1"
+ shift
+ ;;
+ *)
+ OFILES="$OFILES $1"
+ shift
+ case $cOPT in 1) cOPT=2;; esac
+ ;;
+ esac
+done
+
+### On some (IRIX) systems, -Wl,-dont_warn_unused prevents complaints
+### about unnecessary -l options.
+
+case $cOPT in 2)
+# case $trapuv in 1) OFILES="$OFILES -lfpe";; esac
+# $CC -Wl,-dont_warn_unused -o $OUTF -u MAIN__ -L/usr/local/lib $OFILES $LIBS
+ $CC -o $OUTF -u MAIN__ -L/usr/local/lib $OFILES $LIBS
+ case $strip in 1) strip $OUTF;; esac
+ ;; esac
+rc=$?
+exit $rc