--- MITgcm/tools/f90mkdepend 2008/05/08 19:45:38 1.2 +++ MITgcm/tools/f90mkdepend 2010/05/03 14:35:01 1.6 @@ -1,27 +1,38 @@ -#!/bin/csh -f +#!/bin/bash +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/f90mkdepend,v 1.6 2010/05/03 14:35:01 jahn Exp $ +# $Name: $ # # Generate some make file dependency entries for a Fortran 90 file that employs "use". -# Note: We assume that the name of a module and the same of source are the same. # -set flist = ( `echo *.F90 *.F *.h` ) -foreach filename ( $flist ) -set dirlist = ( . ) - -# Try and find some use statements -set modreflist = `cat $filename | grep '[ *] use ' | awk '{print $2}' | sed s'/,//'` - -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 +# 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 + +for filename in *.F90 *.F *.h; do + # quick check for "use" to speed up processing + if grep -i '^ *use ' $filename > /dev/null; then + # extract module name in lower case + modreflist=$(grep -i '^ *use ' $filename | awk '{print tolower($2)}' | sed 's/,.*$//') + + echo "$filename => $modreflist" >> f90mkdepend.log + + # 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 +