#! /bin/sh

# @configure_input@

# This is a slightly modified version of the "fc" script distributed
# with f2c.  It uses f2c and cc to act as a Fortran compiler.

# 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 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 .
#
#				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
#
#		-Ntnnn		allow nnn entries in table t

# default programs

: ${CC:=@CC@}
: ${CPP:=@CPP@}
: ${EFL:=@EFL@}
: ${RATFOR:=@RATFOR@}
: ${F2C:=@F2C@}

# default flags

: ${F2CFLAGS:='-Rw8 -Nn802'}
: ${EFLFLAGS:='system=portable deltastno=10'}
: ${RFLAGS:='-6&'}

: ${F2CDIR:=@F2CDIR@}

rc=0
trap "exit \$rc" 0
OUTF=a.out
cOPT=1

set -- `getopt cCD:gI:N:Oo:Suw6 "$@"`
case $? in 0);; *) rc=$?; exit;; esac

while
	test X"$1" != X--
do
	case "$1"
	in
	-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
		;;

	-o)	OUTF=$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"
		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
		;;

	*)
		echo "invalid parameter $1" 1>&2
		shift
		;;
	esac
done
shift
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 $CFLAGS -I $F2CDIR/include $b.c
		rc=$?
		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 $CFLAGS -I $F2CDIR/include $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 $CFLAGS -I $F2CDIR/include $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 $CPPFLAGS $CFLAGS -I $F2CDIR/include $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
		;;
	-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;;
	*.P)
		F2CFLAGS="$F2CFLAGS $1"
		shift
		;;
	*)
		OFILES="$OFILES $1"
		shift
		case $cOPT in 1) cOPT=2;; esac
		;;
	esac
done

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