- update to version 20210928
* README: add a paragraph about the size of integers and a simple
change to f2c.h that is appropriate when sizeof(int) == 4 and
sizeof(long) == 8.
* xsum.c: trivial change to banish a pedantic compiler warning.
- change versioning to date as all other major distros are doing
- add f77 script (fc)
- run spec-cleaner
OBS-URL: https://build.opensuse.org/request/show/987747
OBS-URL: https://build.opensuse.org/package/show/devel:languages:misc/f2c?expand=0&rev=10
367 lines
7.6 KiB
Bash
367 lines
7.6 KiB
Bash
#! /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
|