--- MITgcm/tools/f90mkdepend 2008/05/13 19:02:00 1.3 +++ MITgcm/tools/f90mkdepend 2010/04/30 19:55:17 1.4 @@ -1,37 +1,38 @@ -#!/bin/csh -f -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/f90mkdepend,v 1.3 2008/05/13 19:02:00 jahn Exp $ +#!/bin/bash +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/f90mkdepend,v 1.4 2010/04/30 19:55:17 jahn Exp $ # $Name: $ # # Generate some make file dependency entries for a Fortran 90 file that employs "use". +# +# For every "use" statement, generate a dependency on lowercase(modulename).o +# # Note: We assume that the name of a module and the same of source are the same. # The name of the source file should be all lower case (except for the extension). -# + +# don't complain if *.F90 doesn't match any files +shopt -s nullglob + cat /dev/null > f90mkdepend.log -set flist = ( `echo *.F90 *.F *.h` ) -foreach filename ( $flist ) - set dirlist = ( . ) - - # Try and find some use statements - cat $filename | grep -i '^ *use ' >> f90mkdepend.log - set modreflist = `cat $filename | grep -i '^ *use ' | awk '{print tolower($2)}' | sed s'/,.*$//'` +for filename in *.F90 *.F *.h; do + # quick check for "use" to speed up processing + if grep -q -i '^ *use ' $filename; then + # extract module name in lower case + modreflist=$(grep -i '^ *use ' $filename | awk '{sub(/,.*/,"",$2); print tolower($2)}') - if ("x$modreflist" != x) then echo "$filename => $modreflist" >> f90mkdepend.log - endif - set depfiles = ( ) - foreach m ( $modreflist ) - set depfile = ( ) - foreach d ( $dirlist ) - if ( -f $m.F90 || -f $m.F ) then - if ( $depfile == "" ) then - set depfile = ( $m.o ) - endif - endif - end - set depfiles = ( $depfiles $depfile ) - end - set ext=`echo ${filename:e} | sed -e 's/F/f/'` - echo ${filename:r}.${ext}: $depfiles -end + # change .F90 into .f90, .F into .f for target + preprocessed=$(echo $filename | sed -e 's/\.F$/.f/' -e 's/\.F90$/.f90/') + + depline="$preprocessed:" + for m in $modreflist; do + # ignore modules that don't have an appropriately named source file + if [ -f $m.F90 ] || [ -f $m.F ]; then + depline="$depline $m.o" + fi + done + echo $depline + fi +done +