quantum-espresso/install/moduledep.sh

55 lines
2.1 KiB
Bash
Raw Normal View History

#!/bin/sh
# moduledep.sh -- script that computes dependencies on Fortran 90 modules
# make sure there is no locale setting creating unneeded differences.
LC_ALL=C
export LC_ALL
# files whose dependencies must be computed
2024-09-16 00:41:41 +08:00
sources=`echo *.f90 io/*.f90 utilities/*.f90 -s |
sed 's/\*\.f90//g'` # remove the "*.f90" that remains
# # when there are no such files
if test "$sources" = "" ; then exit ; fi
# files that may contain modules
# extra directories can be specified on the command line
sources_all="$sources"
for dir in $*
do
sources_all="$sources_all `echo $dir/*.f90`"
done
sources_all=`echo $sources_all |
sed 's/[^ ]*\*\.f90//g'` # remove the "dir/*.f90" that remain
# # when there are no such files
rm -f moduledep.tmp1 moduledep.tmp2 # destroy previous contents
# create list of module dependencies
# each line is of the form:
# file_name.o : @module_name@
# cast all module names to lowercase because Fortran is case insensitive
egrep -H -i "^ *use " $sources | # look for "USE name"
sed 's/f90:/o /
s/,/ /' | # replace extension, insert space
# # and remove trailing comma
awk '{print $1 " : @" tolower($3) "@"}' | # create dependency entry
sort | uniq > moduledep.tmp1 # remove duplicates
# create list of available modules
# for each module, create a line of the form:
# s/@module_name@/file_name/g
egrep -H -i "^ *module " $sources_all | # look for "MODULE name"
sed 's/f90:/o /
s/\//\\\//g' | # replace extension, insert
# # space and escape slashes
awk '{print "s/@" tolower($3) "@/" $1 "/" }' | # create substitution line
sort | uniq > moduledep.tmp2 # remove duplicates
# replace module names with file names
# by applying the file of substitution patterns just created
sed -f moduledep.tmp2 moduledep.tmp1 |
awk '{if ($1 != $3) print}' | # remove self dependencies
sort | uniq # remove duplicates
rm -f moduledep.tmp1 moduledep.tmp2 # remove temporary files