1 |
#!/bin/csh -f |
#!/bin/bash |
2 |
|
# $Header$ |
3 |
|
# $Name$ |
4 |
# |
# |
5 |
# Generate some make file dependency entries for a Fortran 90 file that employs "use". |
# 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. |
|
6 |
# |
# |
7 |
set flist = ( `echo *.F90 *.F *.h` ) |
# For every "use" statement, generate a dependency on lowercase(modulename).o |
8 |
foreach filename ( $flist ) |
# |
9 |
set dirlist = ( . ) |
# Note: We assume that the name of a module and the same of source are the same. |
10 |
|
# The name of the source file should be all lower case (except for the extension). |
11 |
# Try and find some use statements |
|
12 |
set modreflist = `cat $filename | grep '[ *] use ' | awk '{print $2}' | sed s'/,//'` |
# don't complain if *.F90 doesn't match any files |
13 |
|
shopt -s nullglob |
14 |
set depfiles = ( ) |
|
15 |
foreach m ( $modreflist ) |
cat /dev/null > f90mkdepend.log |
16 |
set depfile = ( ) |
|
17 |
foreach d ( $dirlist ) |
for filename in *.F90 *.F *.h; do |
18 |
if ( -f $m.F90 || -f $m.F ) then |
# quick check for "use" to speed up processing |
19 |
if ( $depfile == "" ) then |
if grep -i '^ *use ' $filename > /dev/null; then |
20 |
set depfile = ( $m.o ) |
# extract module name in lower case |
21 |
endif |
modreflist=$(grep -i '^ *use ' $filename | awk '{print tolower($2)}' | sed 's/,.*$//') |
22 |
endif |
|
23 |
end |
echo "$filename => $modreflist" >> f90mkdepend.log |
24 |
set depfiles = ( $depfiles $depfile ) |
|
25 |
end |
# change .F90 into .f90, .F into .f for target |
26 |
set ext=`echo ${filename:e} | sed -e 's/F/f/'` |
preprocessed=$(echo $filename | sed -e 's/\.F$/.f/' -e 's/\.F90$/.f90/') |
27 |
echo ${filename:r}.${ext}: $depfiles |
|
28 |
end |
depline="$preprocessed:" |
29 |
|
for m in $modreflist; do |
30 |
|
# ignore modules that don't have an appropriately named source file |
31 |
|
if [ -f $m.F90 ] || [ -f $m.F ]; then |
32 |
|
depline="$depline $m.o" |
33 |
|
elif [ -f ${m%_mod}.F90 ] || [ -f ${m%_mod}.F ]; then |
34 |
|
# source file name is module name without "_mod" |
35 |
|
depline="$depline ${m%_mod}.o" |
36 |
|
else |
37 |
|
echo "WARNING: f90mkdepend: no source file found for module $m" 1>&2 |
38 |
|
fi |
39 |
|
done |
40 |
|
echo $depline |
41 |
|
fi |
42 |
|
done |
43 |
|
|