-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathmakedeps.sh
executable file
·189 lines (172 loc) · 7.38 KB
/
makedeps.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/bin/sh
# compute dependencies for the PWscf directory tree
# make sure there is no locale setting creating unneeded differences.
LC_ALL=C
export LC_ALL
# ensure that command echo understands escape characters
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi
# run from directory where this script is
cd `dirname $0`
TOPDIR=`pwd`
if test $# = 0
then
# this is the list of all directories for which we want to find dependencies
# upon include files *.h or *.fh or modules. Note that libraries that are
# externally maintained should not go into this list
dirs=" LAXlib FFTXlib/src UtilXlib \
dft-d3 \
KS_Solvers/Davidson KS_Solvers/Davidson_RCI KS_Solvers/CG \
KS_Solvers/PPCG KS_Solvers/ParO KS_Solvers/DENSE KS_Solvers/RMM \
upflib XClib Modules LR_Modules PW/src CPV/src PW/tools PP/src PWCOND/src \
PHonon/Gamma PHonon/PH PHonon/FD HP/src atomic/src \
EPW/src XSpectra/src NEB/src TDDFPT/src \
GWW/pw4gww GWW/gww GWW/head GWW/bse GWW/simple \
GWW/simple_bse GWW/simple_ip QEHeat/src ACFDT/src KCW/src KCW/PP \
thermo_pw/src thermo_pw/lib thermo_pw/tools thermo_pw/qe"
elif
test $1 = "-addson"
then
echo "The script for adding new dependencies is running"
echo "Usage: $0 -addson DIR DEPENDENCY_DIRS"
echo "$0 assumes that the new dependencies are in $TOPDIR/../"
dirs=$2
shift
shift
add_deps=$*
echo "dependencies in $add_deps will be searched for $dirs"
else
dirs=$*
fi
for dir in $dirs; do
# the following command removes a trailing slash
DIR=`echo ${dir%/}`
# the following would also work
#DIR=`echo $dir | sed "s,/$,,"`
# set inter-directory dependencies - only directories containing
# modules that are used, or files that are included, by routines
# in directory DIR should be listed in DEPENDS
# (directory DIR itself should not be listed in DEPENDS)
LEVEL1=..
LEVEL2=../..
# default
DEPENDS="$LEVEL1/include"
# for convenience, used later
DEPEND1="$LEVEL1/include $LEVEL1/FFTXlib/src $LEVEL1/XClib $LEVEL1/LAXlib \
$LEVEL1/UtilXlib $LEVEL1/upflib"
DEPEND3="$LEVEL2/include $LEVEL2/FFTXlib/src $LEVEL2/LAXlib $LEVEL2/UtilXlib"
DEPEND2="$DEPEND3 $LEVEL2/upflib $LEVEL2/XClib $LEVEL2/Modules"
case $DIR in
upflib )
DEPENDS="$LEVEL1/include $LEVEL1/UtilXlib" ;;
XClib )
DEPENDS="$LEVEL1/include $LEVEL1/upflib" ;;
Modules )
DEPENDS="$DEPEND1" ;;
dft-d3 )
DEPENDS="$LEVEL1/include $LEVEL1/UtilXlib $LEVEL1/Modules" ;;
LR_Modules )
DEPENDS="$DEPEND1 $LEVEL1/Modules $LEVEL1/PW/src" ;;
ACFDT/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH $LEVEL2/LR_Modules" ;;
atomic/src | GWW/gww )
DEPENDS="$DEPEND2" ;;
PW/src | CPV/src )
DEPENDS="$DEPEND2 $LEVEL2/KS_Solvers/Davidson $LEVEL2/KS_Solvers/CG $LEVEL2/KS_Solvers/PPCG $LEVEL2/KS_Solvers/ParO $LEVEL2/KS_Solvers/DENSE $LEVEL2/KS_Solvers/RMM $LEVEL2/dft-d3" ;;
KS_Solvers/Davidson | KS_Solvers/Davidson_RCI | KS_Solvers/CG | KS_Solvers/PPCG | KS_Solvers/ParO | KS_Solvers/DENSE | KS_Solvers/RMM )
DEPENDS="$DEPEND3" ;;
PP/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/dft-d3" ;;
PW/tools | PWCOND/src | GWW/pw4gww | NEB/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src" ;;
PHonon/PH )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules $LEVEL2/dft-d3" ;;
PHonon/FD | PHonon/PH | PHonon/Gamma | HP/src | TDDFPT/src | XSpectra/src | GIPAW/src | KCW/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules" ;;
KCW/PP )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules $LEVEL1/src" ;;
EPW/src | QEHeat/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/LR_Modules $LEVEL2/PHonon/PH $LEVEL2/Modules" ;;
GWW/head )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH $LEVEL2/LR_Modules" ;;
GWW/bse )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH $LEVEL2/LR_Modules $LEVEL2/GWW/pw4gww $LEVEL2/GWW/gww" ;;
GWW/simple )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/GWW/pw4gww $LEVEL2/GWW/gww" ;;
GWW/simple_bse )
DEPENDS="$DEPEND2 $LEVEL2/GWW/gww" ;;
GWW/simple_ip)
DEPENDS="$DEPEND2" ;;
thermo_pw/lib )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH $LEVEL2/LR_Modules" ;;
thermo_pw/qe )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/dft-d3 $LEVEL2/PHonon/PH \
$LEVEL2/LR_Modules $LEVEL2/thermo_pw/lib " ;;
thermo_pw/src )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH
$LEVEL2/LR_Modules $LEVEL2/PP/src \
$LEVEL2/thermo_pw/lib $LEVEL2/thermo_pw/qe " ;;
thermo_pw/tools )
DEPENDS="$DEPEND2 $LEVEL2/PW/src $LEVEL2/PHonon/PH \
$LEVEL2/LR_Modules $LEVEL2/PP/src \
$LEVEL2/thermo_pw/qe \
$LEVEL2/thermo_pw/lib" ;;
*)
# if addson needs a make.depend file
DEPENDS="$DEPENDS $add_deps"
esac
# list of all system modules
sysdeps="iso_c_binding iso_fortran_env f90_unix_io f90_unix_env \
f90_unix_proc ifcore ifport git-rev.h"
# list of all external library modules or include files
libdeps="mpi omp_lib hdf5 mkl_dfti mkl_dfti.f90 fftw3.f03 fftw3.f \
xc_version.h xc_f03_lib_m elpa elpa1 \
mbd w90_io fox_dom fox_wxml m_common_io \
device_fbuff_m device_memcpy_m device_auxfunc_m"
# list of all cuda-related modules
cudadeps="cublas cudafor curand cufft flops_tracker cusolverdn \
zhegvdx_gpu dsyevd_gpu dsygvdx_gpu eigsolve_vars \
nvtx_inters"
# generate dependencies file (only for directories that are present)
if test -d $TOPDIR/../$DIR
then
cd $TOPDIR/../$DIR
cat > make.depend << EOF
#####################################################################
# Automatically generated file - if you notice lines looking like
# some_file.o: @some_module@
# figure out why "some_module", referenced in "some_file.o", is not
# found: check spelling, presence in one of the DEPEND* directories
# as defined in file "install/makedeps.sh"; if "some_module" is an
# external module, add it to the module lists "sysdeps", "libdeps",
# "cudadeps" defined in "install/makedeps.sh".
# Finally, from the top QE directory, run "make depend" to regenerate
# the files - DO NOT EDIT MANUALLY (unless you know what you are doing)
####################################################################
EOF
$TOPDIR/moduledep.sh $DEPENDS >> make.depend
$TOPDIR/includedep.sh $DEPENDS >> make.depend
# remove unwanted dependency upon system and library modules
for no_dep in $sysdeps $libdeps $cudadeps; do
echo "/@$no_dep@/d" >> removedeps.tmp
done
sed -f removedeps.tmp make.depend > tmp; mv tmp make.depend
/bin/rm removedeps.tmp
# check for missing dependencies
missing=`grep @ make.depend | grep -v @some_module@`
if test "$missing" != "";
then
notfound=1
$ECHO "\nWARNING! dependencies not found in directory $DIR:"
grep @ make.depend
$ECHO "File $DIR/make.depend is broken"
else
$ECHO -n "\rdirectory $DIR : ok"
fi
else
$ECHO "\ndirectory $DIR : not present in $TOPDIR"
fi
done
if test "$notfound" = ""
then
$ECHO "\nall dependencies updated successfully"
fi