#!/bin/sh

# This fc1 script invoke f2c and pass the output to cc
# it includes the undocumented -Nn option of f2c
# adapted from the netlib distribution 'fc' by G. Masini 04-18-00
#


# 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.

#               -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 .
#                               Object files ending in .o .

#                               f2c prototype files ending in .P ; such
#                               files only affect subsequent files.

#               -D def          passed to C compiler (for .f files)

#               -I includepath  passed to C compiler (for .c files)
#                               and to f2c

#               -Ntnnn          allow nnn entries in table t

#               -P              emit .P files

#               -U def          passed to C compiler (for .c files)
#                               to remove def

s=/tmp/stderr_$$
t=/tmp/f77_$$.o
CC=${CC_f2c:-'cc'}
F2C=${F2C:-/usr/local/bin/f2c}
F2CFLAGS=${F2CFLAGS:='-ARw8 -Nn802 -Nq300 -Nx400'}
rc=0
trap "rm -f $s $t; exit \$rc" 0
OUTF=a.out
OUTO=
cOPT=1
set -- `getopt cCD:gI:L:N:OU:o:Suw6 "$@"`
case $? in 0);; *) rc=$?; exit;; esac
CFLAGSF2C=${CFLAGSF2C:-'-I/usr/local/include'}
OFILES=
while
        test X"$1" != X--
do
        case "$1"
        in
        -C)     F2CFLAGS="$F2CFLAGS -C"
                shift;;

        -c)     cOPT=0
                shift
                ;;
        -D)     CFLAGS="$CFLAGS -D$2"
                shift 2
                ;;

        -g)     CFLAGS="$CFLAGS -g"
                F2CFLAGS="$F2CFLAGS -g"
                shift;;

        -I)     F2CFLAGS="$F2CFLAGS -I$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 -O"
                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
                ;;

        *)
                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
        *.[f])
                f=".f"
				b=`basename $1 .f`
                $F2C $F2CFLAGS $1
                rc=$?
                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
                ;;
        -o)
                case $cOPT in 0) CFLAGS="$CFLAGS -o $2";; *) OUTF=$2;; esac
                shift 2;;
        *)
                OFILES="$OFILES $1"
                shift
                case $cOPT in 1) cOPT=2;; esac
                ;;
        esac
done

case $cOPT in 2) $CC -o $OUTF -u MAIN__ -L/usr/local/lib $OFILES -lf2c -lm;; esac
rc=$?
exit $rc
