Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!wuarchive!uunet!validgh!dgh From: dgh@validgh.com (David G. Hough on validgh) Newsgroups: comp.lang.fortran Subject: making xlf more like f77 Message-ID: <390@validgh.com> Date: 26 May 91 14:09:35 GMT Organization: validgh, PO Box 20370, San Jose, CA 95160 Lines: 94 Persons struggling to get RS/6000 xlf to work more like f77 may find the following helpful. I'm no expert in shell and awk scripts; the following work for me but may be far from optimal for you. They primarily deal with 1) sending .F files through cpp 2) different notions of free form input 3) problems accepting complex*16 function headers The testing regime in which this is installed compiles only one source file at a time into a .o or else links one or more .o's into an executable. You also need to link with a home-brew library that will define familiar but nonstandard functions like etime(3f). Some of these problems may have disappeared with more recent versions of xlf than we have installed. ------------------------------------------------------------------------------------ xlf.sh ------------------------------------------------------------------------------------ #!/bin/sh # echo `pwd` xlf.sh 1.12 91/04/08 $0 $* lastparam=$0 tmpdir=. f77=xlf preproc='cat' cppopts=' -P -D_IBMR2 -D_AIX' for i in $* ; do case $i in -w66) echo ignore -w66 ;; -D*|-I*) cppopts="$cppopts $i" ;; -*) f77="$f77 $i" ;; *.o) f77="$f77 $i" ; if test $lastparam = -o ; then doto=$i ; fi ;; *.F) suffixfile=$i ; suffix=".F" ; preproc='cpp' ;; *.f) suffixfile=$i ; suffix=".f" ;; *.?) suffixfile=$i ; f77="$f77 $i" ;; *) f77="$f77 $i" ;; esac lastparam=$i done if test $preproc = 'cpp' ; then preproc="/lib/cpp $cppopts" ; fi case $suffixfile in *.[fF]) tmpdir=`dirname $doto` ; tmpfil=`basename $suffixfile $suffix`.f ; echo $preproc $suffixfile $tmpdir/$tmpfil ; f77="$f77 $tmpdir/$tmpfil" ; awk '{print substr($0,1,72)}' < $suffixfile | $preproc | sed 's/[rR][eE][aA][lL][ ]*\*4[ ]*[fF][uU][nN][cC][tT][iI][oO][nN]/realfunction/g' | sed 's/[rR][eE][aA][lL][ ]*\*8[ ]*[fF][uU][nN][cC][tT][iI][oO][nN]/doubleprecisionfunction/g' | sed 's/[cC][oO][mM][pP][lL][eE][xX][ ]*\*8[ ]*[fF][uU][nN][cC][tT][iI][oO][nN]/complexfunction/g' | sed 's/[cC][oO][mM][pP][lL][eE][xX][ ]*\*16[ ]*[fF][uU][nN][cC][tT][iI][oO][nN]/doublecomplexfunction/g' | awk -f /valid/src/xlf/xlf.awk | cat > $tmpdir/$tmpfil ;; esac f77="$f77 -qextname" echo $f77 $f77 ------------------------------------------------------------------------------------ xlf.awk: ------------------------------------------------------------------------------------ # # function to fold Fortran source at column 72 for benefit of xlf # { # eliminate leading tabs if (substr($0,1,1) == " ") r = " " substr($0,2) else r = $0 s=substr(r,1,1) if ((s == " ") && (length(r) > 72)) { print substr(r,1,72) print " +" substr(r,73) } else { print r } } ------------------------------------------------------------------------------------- -- David Hough dgh@validgh.com uunet!validgh!dgh na.hough@na-net.ornl.gov