fc 3.3 KB

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