Warning, /tools/genmake2 is written in an unsupported language. File is not indexed.
view on githubraw file Latest commit 0ecb64d3 on 2026-02-09 20:10:41 UTC
3185ed66f0 Ed H*0001 #! /usr/bin/env bash
6aec5d9846 Ed H*0002 #
0003 # Makefile generator for MITgcm UV codes
0004 # created by cnh 03/98
0005 # adapted by aja 06/98
0006 # modified by aja 01/00
0007 # rewritten in bash by eh3 08/03
0008
23f21461eb Jean*0009 # Explain usage
0010 usage() {
0011 cat <<EOF
0012
0013 Usage: "$0" [OPTIONS]
0014 where [OPTIONS] can be:
0015
0016 -help | --help | -h | --h
36e14999eb Jean*0017 Print this help message and exit.
23f21461eb Jean*0018
b4daa24319 Shre*0019 -tap | --tap
6a9e386e2e dngo*0020 Generate a Makefile for a Tapenade build
0021 -tap_extra NAME | --tap_extra NAME | -tap_extra=NAME | --tap_extra=NAME
0022 Here, "NAME" specifies a list of extra arguments to pass to the
0023 Tapenade command.
b4daa24319 Shre*0024
16cc6e2b59 Jean*0025 -oad | --oad
0026 Generate a Makefile for an OpenAD built
9d0c386f0c dngo*0027 -oadsingularity NAME | --oadsingularity NAME | -oadsngl NAME | --oadsngl NAME
0028 -oadsingularity=NAME | --oadsingularity=NAME | -oadsngl=NAME | --oadsngl=NAME
0029 Here, "NAME" specifies the singularity file
0030 that contains the OpenAD execulable.
0031
44f4a23ebb Jean*0032 -nocat4ad | -dog4ad | -ncad | -dad
0033 do not concatenate (cat) source code sent to TAF
0034 resulting in compilation of multiple files
0035
23f21461eb Jean*0036 -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
0037 -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
6a9e386e2e dngo*0038 Use "NAME" as the adoptfile. By default, use file
0039 "tools/adjoint_options/adjoint_default" or
0040 "tools/adjoint_options/adjoint_tap" (for Tapenade built) or
0041 "tools/adjoint_options/adjoint_oad" (for OpenAD built).
23f21461eb Jean*0042
bdd2b3a476 Jean*0043 -optfile NAME | --optfile NAME | -of NAME | --of NAME
23f21461eb Jean*0044 -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
36e14999eb Jean*0045 Use "NAME" as the optfile. By default, an attempt will be
0046 made to find an appropriate "standard" optfile in the
0047 tools/build_options/ directory.
23f21461eb Jean*0048
0049 -pdepend NAME | --pdepend NAME
0050 -pdepend=NAME | --pdepend=NAME
36e14999eb Jean*0051 Get package dependency information from "NAME".
23f21461eb Jean*0052
0053 -pgroups NAME | --pgroups NAME
0054 -pgroups=NAME | --pgroups=NAME
36e14999eb Jean*0055 Get the package groups information from "NAME".
23f21461eb Jean*0056
0057 -bash NAME
36e14999eb Jean*0058 Explicitly specify the Bourne or BASH shell to use
23f21461eb Jean*0059
0060 -make NAME | -m NAME
0061 --make=NAME | -m=NAME
36e14999eb Jean*0062 Use "NAME" for the MAKE program. The default is "make" but
0063 many platforms, "gmake" is the preferred choice.
23f21461eb Jean*0064
0065 -makefile NAME | -mf NAME
0066 --makefile=NAME | -mf=NAME
36e14999eb Jean*0067 Call the makefile "NAME". The default is "Makefile".
23f21461eb Jean*0068
0069 -makedepend NAME | -md NAME
0070 --makedepend=NAME | -md=NAME
36e14999eb Jean*0071 Use "NAME" for the MAKEDEPEND program.
23f21461eb Jean*0072
0073 -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
0074 -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
f955de4ba2 Jean*0075 Specify the location of the MITgcm root directory as 'NAME'.
0076 By default, genmake will try to find the location by
36e14999eb Jean*0077 looking in parent directories (up to the 5th parent).
23f21461eb Jean*0078
0079 -mods NAME | --mods NAME | -mo NAME | --mo NAME
0080 -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
6a9e386e2e dngo*0081 Here, "NAME" specifies a list of directories that are used for
0082 additional source code. Files found in the "mods list" are given
0083 preference over files of the same name found elsewhere.
23f21461eb Jean*0084
0085 -disable NAME | --disable NAME
0086 -disable=NAME | --disable=NAME
36e14999eb Jean*0087 Here "NAME" specifies a list of packages that we don't
0088 want to use. If this violates package dependencies,
f955de4ba2 Jean*0089 genmake will exit with an error message.
23f21461eb Jean*0090
0091 -enable NAME | --enable NAME
0092 -enable=NAME | --enable=NAME
36e14999eb Jean*0093 Here "NAME" specifies a list of packages that we wish
0094 to specifically enable. If this violates package
f955de4ba2 Jean*0095 dependencies, genmake will exit with an error message.
23f21461eb Jean*0096
0097 -standarddirs NAME | --standarddirs NAME
0098 -standarddirs=NAME | --standarddirs=NAME
36e14999eb Jean*0099 Here, "NAME" specifies a list of directories to be
0100 used as the "standard" code.
23f21461eb Jean*0101
0102 -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
0103 -fc=NAME | --fc=NAME
36e14999eb Jean*0104 Use "NAME" as the fortran compiler. By default, genmake
0105 will search for a working compiler by trying a list of
0106 "usual suspects" such as g77, f77, etc.
23f21461eb Jean*0107
0108 -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
36e14999eb Jean*0109 Use "NAME" as the C compiler. By default, genmake
0110 will search for a working compiler by trying a list of
0111 "usual suspects" such as gcc, c89, cc, etc.
23f21461eb Jean*0112
0113 -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
36e14999eb Jean*0114 Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
0115 *only* works if CPP_EEOPTIONS.h allows this.
23f21461eb Jean*0116
0117 -ignoretime | -ignore_time | --ignoretime | --ignore_time
36e14999eb Jean*0118 Ignore all the "wall clock" routines entirely. This will
0119 not in any way hurt the model results -- it simply means
0120 that the code that checks how long the model spends in
0121 various routines will give junk values.
23f21461eb Jean*0122
0123 -ts | --ts
36e14999eb Jean*0124 Produce timing information per timestep
23f21461eb Jean*0125 -papis | --papis
36e14999eb Jean*0126 Produce summary MFlop/s (and IPC) with PAPI per timestep
23f21461eb Jean*0127 -pcls | --pcls
36e14999eb Jean*0128 Produce summary MFlop/s etc. with PCL per timestep
23f21461eb Jean*0129 -foolad | --foolad
36e14999eb Jean*0130 Fool the AD code generator
23f21461eb Jean*0131 -papi | --papi
36e14999eb Jean*0132 Performance analysis with PAPI
23f21461eb Jean*0133 -pcl | --pcl
36e14999eb Jean*0134 Performance analysis with PCL
23f21461eb Jean*0135 -hpmt | --hpmt
36e14999eb Jean*0136 Performance analysis with the HPM Toolkit
23f21461eb Jean*0137
4d1f7e1a03 Jean*0138 -ieee | --ieee
36e14999eb Jean*0139 use IEEE numerics. Note that this option *only* works
0140 if it is supported by the OPTFILE that is being used.
23f21461eb Jean*0141 -devel | --devel
36e14999eb Jean*0142 Add additional warning and debugging flags for development
0143 (if supported by the OPTFILE); also switch to IEEE numerics.
4d1f7e1a03 Jean*0144 -gsl | --gsl
36e14999eb Jean*0145 Use GSL to control floating point rounding and precision
23f21461eb Jean*0146
0147 -mpi | --mpi
36e14999eb Jean*0148 Include MPI header files and link to MPI libraries
23f21461eb Jean*0149 -mpi=PATH | --mpi=PATH
36e14999eb Jean*0150 Include MPI header files and link to MPI libraries using MPI_ROOT
0151 set to PATH. i.e. Include files from \$PATH/include, link to libraries
0152 from \$PATH/lib and use binaries from \$PATH/bin.
23f21461eb Jean*0153
0154 -omp | --omp
fb8a3f8f0e Jean*0155 Activate OpenMP code
23f21461eb Jean*0156 -omp=OMPFLAG | --omp=OMPFLAG
36e14999eb Jean*0157 Activate OpenMP code + use Compiler option OMPFLAG
23f21461eb Jean*0158
0159 -es | --es | -embed-source | --embed-source
6a9e386e2e dngo*0160 Embed a tarball containing the full source code (including the
0161 Makefile, etc.) used to build the executable [off by default]
23f21461eb Jean*0162
0163 -ds | --ds
36e14999eb Jean*0164 Report genmake internal variables status (DUMPSTATE)
0165 to file "genmake_state" (for debug purpose)
23f21461eb Jean*0166
0167 While it is most often a single word, the "NAME" variables specified
0168 above can in many cases be a space-delimited string such as:
0169
0170 --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3'
0171 -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3'
0172 -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
0173
0174 which, depending upon your shell, may need to be single-quoted.
0175
516b08a580 jm-c 0176 For more detailed genmake documentation, please see section "Building the model"
0177 (under "Getting Started") at: https://mitgcm.readthedocs.io/
23f21461eb Jean*0178
0179 EOF
516b08a580 jm-c 0180 #- full link directly to section 3.5:
0181 #https://mitgcm.readthedocs.io/en/latest/getting_started/getting_started.html#building-the-model
23f21461eb Jean*0182
0183 exit 1
0184 }
0185
6d54cf9ca1 Ed H*0186 # Search for particular CPP #cmds associated with packages
0187 # usage: test_for_package_in_cpp_options CPP_file package_name
0188 test_for_package_in_cpp_options() {
0189 cpp_options=$1
0190 pkg=$2
e8e03c465c Jean*0191 test_for_string_in_file $cpp_options "^ *# *define *\<ALLOW_$pkg\>"
0192 test_for_string_in_file $cpp_options "^ *# *undef *\<ALLOW_$pkg\>"
0193 test_for_string_in_file $cpp_options "^ *# *define *\<DISABLE_$pkg\>"
0194 test_for_string_in_file $cpp_options "^ *# *undef *\<DISABLE_$pkg\>"
40f7a33215 Alis*0195 }
0196
0197 # Search for particular CPP #cmds associated with MPI
0198 # usage: test_for_mpi_in_cpp_eeoptions CPP_file
0199 test_for_mpi_in_cpp_eeoptions() {
0200 cpp_options=$1
e8e03c465c Jean*0201 test_for_string_in_file $cpp_options "^ *# *define *\<ALLOW_USE_MPI\>"
0202 test_for_string_in_file $cpp_options "^ *# *undef *\<ALLOW_USE_MPI\>"
40f7a33215 Alis*0203 }
0204
0205 # Search for particular string in a file. Return 1 if detected, 0 if not
0206 # usage: test_for_string_in_file file string
0207 test_for_string_in_file() {
0208 file=$1
0209 strng=$2
e8e03c465c Jean*0210 grep "$strng" $file > /dev/null 2>&1
6d54cf9ca1 Ed H*0211 RETVAL=$?
0212 if test "x${RETVAL}" = x0 ; then
13fa7032ba Ed H*0213 printf "Error: In $file there is an illegal line: "
36e14999eb Jean*0214 grep -i "$strng" $file
d54f5b7a0d Ed H*0215 exit 99
6d54cf9ca1 Ed H*0216 fi
40f7a33215 Alis*0217 return 0
6d54cf9ca1 Ed H*0218 }
0219
0220 # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
0221 # the package list.
0222 expand_pkg_groups() {
0223 new_packages=
0224 if test -r $PKG_GROUPS ; then
7deef35259 Jean*0225 cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > $TMP.p1
0226 cat $TMP.p1 | $AWK '(NF>2 && $2==":"){ print $0 }' > $TMP.p2
6d54cf9ca1 Ed H*0227 matched=0
0228 for i in $PACKAGES ; do
7deef35259 Jean*0229 line=`grep "^ *$i" $TMP.p2`
6d54cf9ca1 Ed H*0230 RETVAL=$?
0231 if test "x$RETVAL" = x0 ; then
0232 matched=1
3e661b1a92 Ed H*0233 replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
a5a3c4e100 Jean*0234 echo " replacing \"$i\" with:$replace"
6d54cf9ca1 Ed H*0235 new_packages="$new_packages $replace"
0236 else
0237 new_packages="$new_packages $i"
0238 fi
0239 done
0240 PACKAGES=$new_packages
7deef35259 Jean*0241 rm -f $TMP.p[1,2]
d3d6cca041 Alis*0242 return $matched
6d54cf9ca1 Ed H*0243 else
0244 echo "Warning: can't read package groups definition file: $PKG_GROUPS"
0245 fi
0246 }
6aec5d9846 Ed H*0247
5bb11ad8a0 Ed H*0248 # Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
0249 # cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
0250 check_for_broken_Ff() {
3eb03232c2 Ed H*0251 # Do we have defaults for $FS and/or $FS90 ?
0252 tfs=f
0253 tfs9=f90
0254 if test "x$FS" != x ; then
0255 tfs="$FS"
0256 fi
0257 if test "x$FS90" != x ; then
0258 tfs9="$FS90"
0259 fi
0260
5bb11ad8a0 Ed H*0261 # First check the ability to create a *.F/.f pair.
3eb03232c2 Ed H*0262 cat <<EOF >> genmake_hello.F
5bb11ad8a0 Ed H*0263 program hello
0264 write(*,*) 'hi'
0265 stop
0266 end
0267 EOF
3eb03232c2 Ed H*0268 cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
5bb11ad8a0 Ed H*0269 RETVAL=$?
0270 if test "x$RETVAL" != x0 ; then
3eb03232c2 Ed H*0271 if test "x$FS" = x ; then
a4cdb0c6f0 Ed H*0272 FS='for'
0273 FS90='fr9'
3eb03232c2 Ed H*0274 check_for_broken_Ff
0275 else
0276 cat <<EOF 2>&1
5be35a17af Jean*0277 ERROR: Your file system cannot distinguish between *.F and *.f files
0278 (fails the "cp" test) and this program cannot find a suitable
0279 replacement extension. Please try a different build environment or
3eb03232c2 Ed H*0280 contact the <MITgcm-support@mitgcm.org> list for help.
0281
0282 EOF
0283 exit -1
0284 fi
5bb11ad8a0 Ed H*0285 return
0286 fi
3eb03232c2 Ed H*0287 rm -f genmake_hello.*
5bb11ad8a0 Ed H*0288
3eb03232c2 Ed H*0289 # Check the ability of ${MAKE} and ${LN} to use the current set
0290 # of extensions.
0291 cat <<EOF >> genmake_hello.F
0292 program hello
0293 write(*,*) 'hi'
0294 stop
0295 end
0296 EOF
3ce2ed8dc5 Ed H*0297 test -f $MAKEFILE && mv -f $MAKEFILE $MAKEFILE".tst"
0298 cat <<EOF >> $MAKEFILE
5bb11ad8a0 Ed H*0299 .SUFFIXES:
7a76cc695e Ed H*0300 .SUFFIXES: .$tfs .F
0301 .F.$tfs:
0302 $LN \$< \$@
5bb11ad8a0 Ed H*0303 EOF
18371f2c52 Jean*0304 $MAKE -f $MAKEFILE "genmake_hello."$tfs > /dev/null 2>&1
5bb11ad8a0 Ed H*0305 RETVAL=$?
355771feeb Ed H*0306 if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
3eb03232c2 Ed H*0307 if test "x$FS" = x ; then
a4cdb0c6f0 Ed H*0308 FS='for'
0309 FS90='fr9'
3eb03232c2 Ed H*0310 check_for_broken_Ff
0311 else
776d1c0efd Jean*0312 echo "ERROR: test: '$MAKE -f $MAKEFILE genmake_hello.$tfs' Failed"
0313 echo " see simple makefile: '$MAKEFILE' (left here)"
0314 echo " Please check (1) your '$MAKE' command, (2) your '$LN' command"
0315 echo " and (3) the allowed sufix '.F' and '.$tfs' in makefile"
0316 echo " or contact the <MITgcm-support@mitgcm.org> list for help."
0317 echo ""
3eb03232c2 Ed H*0318 exit -1
0319 return
0320 fi
5bb11ad8a0 Ed H*0321 fi
3ce2ed8dc5 Ed H*0322 rm -f genmake_hello.* $MAKEFILE
0323 test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE
5bb11ad8a0 Ed H*0324
3eb03232c2 Ed H*0325 # If we make it here, use the extensions
0326 FS=$tfs
0327 FS90=$tfs9
0328 return
5bb11ad8a0 Ed H*0329 }
0330
072ddee95c Ed H*0331 look_for_makedepend() {
6aec5d9846 Ed H*0332
b0867682b1 Ed H*0333 # The "original" makedepend is part of the Imake system that is
0334 # most often distributed with XFree86 or with an XFree86 source
0335 # package. As a result, many machines (eg. generic Linux) do not
0336 # have a system-default "makedepend" available. For those
0337 # systems, we have two fall-back options:
0338 #
0339 # 1) a makedepend implementation shipped with the cyrus-imapd
0340 # package: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
88a755a5b2 Jean*0341 # 2) a local tools/xmakedepend shell script
b0867682b1 Ed H*0342 #
0343 # So the choices are, in order:
0344 # 1) use the user-specified program
88a755a5b2 Jean*0345 # 2) use the local xmakedepend script (get all dependencies, but slower)
0346 # 3) use a system-wide default
0347 # 4) locally build and use the cyrus makedepend
0348 # (faster, but can miss some dependencies)
b0867682b1 Ed H*0349 #
b353a7c6c6 Jean*0350 echo >> $LOGFILE
0351 echo "running: look_for_makedepend()" >> $LOGFILE
0352 if test "x${MAKEDEPEND}" != x ; then
0353 echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
0354 RETVAL=$?
0355 if test x"$RETVAL" = x0 ; then
0356 build_cyrus_makedepend
0357 RETVAL=$?
0358 if test "x$RETVAL" != x0 ; then
88a755a5b2 Jean*0359 echo "WARNING: unable to build cyrus-makedepend. Try other 'makedepend'"
b353a7c6c6 Jean*0360 MAKEDEPEND=
0361 fi
0362 else
9131c4d333 Jean*0363 echo "${MAKEDEPEND}" | grep 'tools.xmakedepend' > /dev/null 2>&1
0364 RETVAL=$?
0365 if test "x$RETVAL" = x0 ; then
0366 MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
0367 fi
b353a7c6c6 Jean*0368 echo " --> MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
0369 fi
0370 fi
19d7e59ef3 Alis*0371 if test "x${MAKEDEPEND}" = x ; then
3ce2ed8dc5 Ed H*0372 test -f $MAKEFILE && mv -f $MAKEFILE $MAKEFILE".tst"
0373 # echo 'MAKEFILE="'$MAKEFILE'"'
0374 cat <<EOF >> $MAKEFILE
0375 # THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
0376 #
5be35a17af Jean*0377 # Some "makedepend" implementations will die if they cannot
0378 # find a Makefile -- so this file is here to gives them an
3ce2ed8dc5 Ed H*0379 # empty one to find and parse.
0380 EOF
925891ca7b Ed H*0381 cat <<EOF >> genmake_tc.f
a4cdb0c6f0 Ed H*0382 program test
0383 write(*,*) 'test'
0384 stop
0385 end
0386 EOF
88a755a5b2 Jean*0387 $ROOTDIR/tools/xmakedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
b681e6be2e Mart*0388 RV1=$?
88a755a5b2 Jean*0389 which makedepend > /dev/null 2>&1
0390 RV2=$?
0391 if test "x${RV2}" = x0 ; then
0392 makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
0393 RV3=$? ; loc_msg='not working.'
0394 else RV3=$RV2 ; loc_msg='not found.'
0395 fi
3ce2ed8dc5 Ed H*0396 test -f $MAKEFILE && rm -f $MAKEFILE
0397 test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE
88a755a5b2 Jean*0398 echo " check makedepend (local: $RV1, system: $RV2, $RV3)"
0399 if test "x${RV1}" = x0 ; then
0400 MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
0401 echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
0402 elif test "x${RV3}" = x0 ; then
0403 echo " local tools/xmakedepend not working. Use system-default makedepend"
925891ca7b Ed H*0404 MAKEDEPEND=makedepend
b353a7c6c6 Jean*0405 echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
925891ca7b Ed H*0406 else
88a755a5b2 Jean*0407 echo " local tools/xmakedepend not working; system-default makedepend $loc_msg"
0408 echo -n " Try to build cyrus-makedepend ..."
925891ca7b Ed H*0409 # Try to build the cyrus implementation
b0dc3e31a0 Ed H*0410 build_cyrus_makedepend
925891ca7b Ed H*0411 RETVAL=$?
88a755a5b2 Jean*0412 if test "x$RETVAL" = x0 ; then
0413 echo " Works"
0414 else
0415 echo " Fails" ; echo "" >> $LOGFILE
0416 echo "ERROR: no working makedepend found ; look_for_makedepend FAILED" | tee -a $LOGFILE
0417 echo ""
0418 exit -1
0419 return
925891ca7b Ed H*0420 fi
b0dc3e31a0 Ed H*0421 fi
19d7e59ef3 Alis*0422 fi
072ddee95c Ed H*0423 }
0424
b0dc3e31a0 Ed H*0425 build_cyrus_makedepend() {
b353a7c6c6 Jean*0426 echo >> $LOGFILE
0427 echo "running: build_cyrus_makedepend()" >> $LOGFILE
b0dc3e31a0 Ed H*0428 rm -f ./genmake_cy_md
0429 (
0430 cd $ROOTDIR/tools/cyrus-imapd-makedepend \
0431 && ./configure > /dev/null 2>&1 \
621623385c Jean*0432 && $MAKE > /dev/null 2>&1
b0dc3e31a0 Ed H*0433 if test -x ./makedepend.exe ; then
0434 $LN ./makedepend.exe ./makedepend
0435 fi
0436 ./makedepend ifparser.c > /dev/null 2>&1 \
0437 && echo "true"
0438 ) > ./genmake_cy_md
0439 grep true ./genmake_cy_md > /dev/null 2>&1
0440 RETVAL=$?
0441 rm -f ./genmake_cy_md
0442 if test "x$RETVAL" = x0 ; then
0443 MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
b353a7c6c6 Jean*0444 echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
b0dc3e31a0 Ed H*0445 return 0
0446 else
b353a7c6c6 Jean*0447 echo "WARNING: fail to build cyrus-imapd-makedepend" >> $LOGFILE
b0dc3e31a0 Ed H*0448 return 1
0449 fi
0450 }
0451
ab504a3a96 Ed H*0452 build_embed_encode()
0453 {
0454 printf " building the embed-encode utility... "
0455 if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
36e14999eb Jean*0456 if test ! -d "$ROOTDIR/tools/embed_encode" ; then
0457 echo
0458 echo " Error: can't locate \"$ROOTDIR/tools/embed_encode\""
0459 echo
0460 EMBED_SRC=f
ab504a3a96 Ed H*0461 return 1
36e14999eb Jean*0462 fi
ab504a3a96 Ed H*0463 clist="cc gcc c89 $CC"
5be35a17af Jean*0464 for ic in $clist ; do
ab504a3a96 Ed H*0465 comm="$ic -o encode_files encode_files.c"
0466 ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
0467 RETVAL=$?
0468 if test "x$RETVAL" = x0 ; then
0469 echo "OK"
0470 return 0
0471 fi
0472 done
0473 echo
0474 echo " Error: unable to build $ROOTDIR/embed_encode/encode_files"
0475 echo " so it has been disabled"
0476 echo
0477 EMBED_SRC=f
0478 return 1
0479 fi
0480 echo "OK"
0481 }
0482
0e2704be3d Jean*0483 # look for possible C compilers
0484 look_for_C_compilers() {
65377ddbcb Jean*0485 echo >> $LOGFILE
0486 echo "running: look_for_C_compilers()" >> $LOGFILE
0487 rm -f ./genmake_hello.c ./genmake_hello
0488 cat >> genmake_hello.c << EOF
e8a04cb645 Ed H*0489 #include <stdio.h>
0490 int main(int argc, char **argv) {
0491 printf("Hello!\n");
0492 return 0;
0493 }
0494 EOF
65377ddbcb Jean*0495 tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
0496 p_CC=
0497 for c in $tmp ; do
0498 COMM="$c $CFLAGS -o genmake_hello genmake_hello.c"
0499 echo $COMM >> $LOGFILE
0500 $COMM >> $LOGFILE 2>&1
e8a04cb645 Ed H*0501 RETVAL=$?
0502 if test "x${RETVAL}" = x0 ; then
65377ddbcb Jean*0503 echo " $c test successful" >> $LOGFILE
e8a04cb645 Ed H*0504 p_CC="$p_CC $c"
0505 fi
0506 done
0507 rm -f ./genmake_hello.c ./genmake_hello
0508 if test "x${p_CC}" = x ; then
0509 cat 1>&2 <<EOF
0510
0511 Error: No C compilers were found in your path. Please specify one using:
0512
0513 1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
0514 2) the CC or MITGCM_CC environment variables.
0515
0516 EOF
0517 exit 1
0518 else
65377ddbcb Jean*0519 echo " The possible C compilers found in your path are: $p_CC" | tee -a $LOGFILE
e8a04cb645 Ed H*0520 if test "x$CC" = x ; then
0521 CC=`echo $p_CC | $AWK '{print $1}'`
0522 echo " Setting C compiler to: "$CC
0523 fi
0524 fi
65377ddbcb Jean*0525 echo " --> set CC='$CC'" >> $LOGFILE
0e2704be3d Jean*0526 }
0527
5b53130725 Ivan*0528 # Guess possible config options for this host
0e2704be3d Jean*0529 find_possible_optfile() {
0530
23f21461eb Jean*0531 echo >> $LOGFILE
0532 echo "running: find_possible_optfile()" >> $LOGFILE
0e2704be3d Jean*0533 tmp1=`uname`"_"`uname -m`
0534 tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
0535 tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
726aa03a13 Gael*0536 tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|' | sed -e 's|aarch64|arm64|'`
0e2704be3d Jean*0537 tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
0538 tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
0539 PLATFORM=$tmp3
0540 echo $PLATFORM | grep cygwin > /dev/null 2>&1 && PLATFORM=cygwin_ia32
0541 OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
23f21461eb Jean*0542 echo " The platform appears to be: $PLATFORM" | tee -a $LOGFILE
e8a04cb645 Ed H*0543
0544 #================================================================
0545 # look for possible FORTRAN compilers
23f21461eb Jean*0546 echo " look for possible FORTRAN compilers" >> $LOGFILE
0547 tmp="$MITGCM_FC $FC efc gfortran g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 g95"
6aec5d9846 Ed H*0548 p_FC=
23f21461eb Jean*0549 rm -f ./genmake_hello.f
0550 cat >> genmake_hello.f <<EOF
f10e3a8bdd Ed H*0551 program hello
0552 do i=1,3
0553 print *, 'hello world : ', i
0554 enddo
0555 end
0556 EOF
23f21461eb Jean*0557 for f in $tmp ; do
0558 COMM="$f -o genmake_hello genmake_hello.f"
0559 echo $COMM >> $LOGFILE
0560 $COMM >> $LOGFILE 2>&1
6aec5d9846 Ed H*0561 RETVAL=$?
0562 if test "x${RETVAL}" = x0 ; then
23f21461eb Jean*0563 echo " $f test successful" >> $LOGFILE
0564 p_FC="$p_FC $f"
6aec5d9846 Ed H*0565 fi
0566 done
23f21461eb Jean*0567 rm -f ./genmake_hello.f ./genmake_hello
6aec5d9846 Ed H*0568 if test "x${p_FC}" = x ; then
f10e3a8bdd Ed H*0569 cat 1>&2 <<EOF
0570
0571 Error: No Fortran compilers were found in your path. Please specify one using:
0572
0573 1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
0574 2) a command-line option (eg. "-fc NAME"), or
e8a04cb645 Ed H*0575 3) the FC or MITGCM_FC environment variables.
f10e3a8bdd Ed H*0576
0577 EOF
0578 exit 1
6aec5d9846 Ed H*0579 else
23f21461eb Jean*0580 echo " The possible FORTRAN compilers found in your path are: $p_FC" | tee -a $LOGFILE
611257dd1a Ed H*0581 fi
0582
0583 # Use the first of the compilers found in the current PATH
0584 # that has a correctly-named optfile
0585 if test "x$OPTFILE" = x -a "x$FC" = x ; then
0586 for i in $p_FC ; do
0587 OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
0588 if test -r $OPTFILE ; then
23f21461eb Jean*0589 echo " Setting OPTFILE to: "$OPTFILE | tee -a $LOGFILE
611257dd1a Ed H*0590 break
0591 fi
0592 done
6aec5d9846 Ed H*0593 fi
0594
c1324e0980 Alis*0595 if test "x$OPTFILE" = x ; then
0596 OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
0597 if test ! -r $OPTFILE ; then
776d1c0efd Jean*0598 echo " I looked for the file "$OPTFILE" but did not find it"
0599 fi
c1324e0980 Alis*0600 fi
0e2704be3d Jean*0601
f10e3a8bdd Ed H*0602 if test "x$OPTFILE" = x ; then
0603 cat 1>&2 <<EOF
0604
0605 Error: No options file was found in: $ROOTDIR/tools/build_options/
0606 that matches this platform ("$PLATFORM") and the compilers found in
0607 your path. Please specify an "optfile" using:
0608
0609 1) the command line (eg. "-optfile=path/to/OPTFILE"), or
0610 2) the MITGCM_OF environment variable.
0611
516b08a580 jm-c 0612 If you need help, please contact the <MITgcm-support@mitgcm.org> list.
f10e3a8bdd Ed H*0613
0614 EOF
0615 exit 1
6aec5d9846 Ed H*0616 fi
0617 }
f955de4ba2 Jean*0618 #---- keep this line unchanged after the end of find_possible_optfile -----
6aec5d9846 Ed H*0619
f7aaac66f3 jm-c 0620 # Just try to use FC, report failed attempt as a Warning
0621 check_fortran_compiler() {
0622 echo -n " check Fortran Compiler... "
0623 echo "" >> $LOGFILE
0624 echo "running: check_fortran_compiler" >> $LOGFILE
0625 FC_CHECK=-1
0626 rm -f ./genmake_tcomp.f
0627 cat >> genmake_tcomp.f <<EOF
0628 program hello
0629 integer i
0630 do i=1,3
0631 print *, 'hello world : ', i
0632 enddo
0633 end
0634 EOF
0635 COMM="$FC $FFLAGS $FOPTIM -c genmake_tcomp.f"
0636 echo ' '$COMM >> $LOGFILE
0637 $COMM >> $LOGFILE 2>&1
0638 RETVAL=$?
0639 if test "x$RETVAL" != x0 ; then
0640 FC_CHECK=0
0641 echo "" >> $LOGFILE
0642 echo " Warning: FORTRAN compiler test fails to compile" >> $LOGFILE
0643 echo -n " fail to compile"
0644 fi
0645 if test $FC_CHECK = '-1' ; then
0646 COMM="$LINK $FFLAGS $FOPTIM -o genmake_tcomp genmake_tcomp.o $LIBS"
0647 echo ' '$COMM >> $LOGFILE
0648 $COMM >> $LOGFILE 2>&1
0649 RETVAL=$?
0650 else RETVAL=0 ; fi
0651 if test "x$RETVAL" != x0 ; then
0652 FC_CHECK=1
0653 echo "" >> $LOGFILE
0654 echo " Warning: FORTRAN compiler test fails to link" >> $LOGFILE
0655 echo -n " fail to generate executable"
0656 fi
0657 if test $FC_CHECK = '-1' -a -x genmake_tcomp ; then
0658 if test "x$MPI" = 'xtrue' ; then
516b08a580 jm-c 0659 which mpirun > /dev/null 2>&1
0660 RETVAL=$?
0661 if test "x${RETVAL}" = x0 ; then
6c0f1b57d6 Oliv*0662 COMM="mpirun -np 1 ./genmake_tcomp"
516b08a580 jm-c 0663 else
0664 which mpiexec > /dev/null 2>&1
0665 RETVAL=$?
0666 if test "x${RETVAL}" = x0 ; then
0667 COMM="mpiexec -np 1 ./genmake_tcomp"
0668 else
0669 FC_CHECK=4
0670 echo "" >> $LOGFILE
5b53130725 Ivan*0671 echo " Warning: MPI run command not found ==> skip run-test check" >> $LOGFILE
516b08a580 jm-c 0672 #echo -n " fail to generate executable"
0673 fi
0674 fi
f7aaac66f3 jm-c 0675 else
0676 COMM="./genmake_tcomp"
0677 fi
516b08a580 jm-c 0678 elif test $FC_CHECK = '-1' ; then
0679 FC_CHECK=2
0680 echo 'WARNING: missing executable from FORTRAN compiler test' >> $LOGFILE
0681 echo -n " fail to generate executable"
0682 fi
0683 if test $FC_CHECK = '-1' ; then
f7aaac66f3 jm-c 0684 echo ' '$COMM >> $LOGFILE
0685 $COMM >> $LOGFILE 2>&1
0686 RETVAL=$?
0687 if test "x$RETVAL" != x0 ; then
0688 FC_CHECK=3
0689 #echo -n " fail to run"
0690 else
516b08a580 jm-c 0691 FC_CHECK=5
f7aaac66f3 jm-c 0692 echo -n " pass"
0693 fi
0694 fi
0695 rm -f genmake_tcomp.* genmake_tcomp
516b08a580 jm-c 0696 echo " --> set FC_CHECK= $FC_CHECK /5" >> $LOGFILE
0697 echo " (set FC_CHECK=${FC_CHECK}/5)"
f7aaac66f3 jm-c 0698 }
0699
fea3e7d209 Jean*0700 # Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
0701 # checking for additional included headers (in case of chain of included header)
0702 mpi_headers_do_local_copy() {
0703
0704 dBug=0
cd15dc9a7a Jean*0705 rm -rf ./mpi_headers
0706 if test -d $MPIINCLUDEDIR ; then
0707
0708 #----- check for additional headers (chain of included headers)
0709 echo -n ' Check MPI headers ... '
0710 listIni=$MPI_HEADER_FILES
0711 echo $listIni | grep "\<mpif.h\>" > /dev/null 2>&1
0712 outp=$?
0713 #- always check mpif.h (the only mpi-header included in standard MITgcm code)
0714 if test $outp != 0 ; then listIni="mpif.h $listIni" ; fi
0715 if test $dBug = 1 ; then echo "listIni='$listIni'" ; fi
0716
0717 doCheck=1 ; list2copy='' ; list2check=$listIni
0718 while test $doCheck = 1 ; do
0719 newList=''
0720 for i in $list2check ; do
0721 if test -f $MPIINCLUDEDIR/$i ; then
0722 newInc=`grep '^ *include ' $MPIINCLUDEDIR/$i | \
fea3e7d209 Jean*0723 sed -e 's/^ *include //' -e 's/\!.*$//' -e "s/'//g" -e 's/\"//g'`
cd15dc9a7a Jean*0724 if test $dBug = 1 ; then echo -n "checking $i : newInc='$newInc'" ; fi
0725 for j in $newInc ; do
0726 echo $listIni $list2copy $newList | grep "\<$j\>" > /dev/null 2>&1
0727 outp=$?
0728 if test $outp != 0 ; then
0729 if test $dBug = 1 ; then echo -n " ; adding $j" ; fi
0730 newList="$newList $j"
0731 fi
0732 done
0733 if test $dBug = 1 ; then echo "" ; fi
0734 fi
0735 done
0736 if test "x$newList" = x ; then doCheck=0
0737 else list2check=$newList ; list2copy="$list2copy $newList"
0738 fi
fea3e7d209 Jean*0739 done
cd15dc9a7a Jean*0740 list2copy="$MPI_HEADER_FILES $list2copy"
0741 if test $dBug = 1 ; then echo "list2copy='$list2copy'" ; fi
0742
0743 #----- create local mpi_headers dir if we have files to copy
0744 mkListInc=`echo $list2copy | wc -w`
0745 if test $mkListInc != 0 ; then
0746 echo 'create local "./mpi_headers" dir'
0747 mkdir -p ./mpi_headers
0748 INCLUDES="-I./mpi_headers $INCLUDES"
0749 mkListInc=1
fea3e7d209 Jean*0750 fi
cd15dc9a7a Jean*0751 if test "x$LOCAL_MPI_HEADERS" != x ; then mkListInc=0 ; fi
0752
0753 #----- make local copy and update LOCAL_MPI_HEADERS (if not already set)
0754 for i in $list2copy ; do
0755 if test -f $MPIINCLUDEDIR/$i ; then
fea3e7d209 Jean*0756 cp -p $MPIINCLUDEDIR/$i ./mpi_headers
0757 if test $i = 'mpif.h' ; then
0758 perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
0759 fi
cd15dc9a7a Jean*0760 if test $mkListInc = 2 ; then
fea3e7d209 Jean*0761 LOCAL_MPI_HEADERS="$LOCAL_MPI_HEADERS ./mpi_headers/$i"
0762 fi
cd15dc9a7a Jean*0763 if test $mkListInc = 1 ; then
0764 LOCAL_MPI_HEADERS="./mpi_headers/$i" ; mkListInc=2
fea3e7d209 Jean*0765 fi
cd15dc9a7a Jean*0766 fi
0767 done
0768 else
0769 echo "WARNING: MPIINCLUDEDIR='$MPIINCLUDEDIR' is not a directory"
0770 echo "WARNING: => skip checking for MPI headers (no ./mpi_headers dir)"
0771 # exit -1
0772 fi
fea3e7d209 Jean*0773 }
0774
5b53130725 Ivan*0775 # Re-order file list according to dependencies from used modules
0776 # usage: sort_file_list_from_used_modules file_list
0777 sort_file_list_from_used_modules() {
0778 file_list=$1
0779 dBug=0
0780 if test $dBug = 1 ; then
0781 echo "-- sort_file_list_from_used_modules : file_list=$file_list , TMP=$TMP"
0782 echo "-> initial list :" ; cat $file_list
0783 fi
0784 test -f $TMP.Graph && rm -f $TMP.Graph
0785 test -f $TMP.noGraph && rm -f $TMP.noGraph
0786 touch $TMP.Graph $TMP.noGraph
0787 # Sort the f90 files in topological order
0788 while IFS= read -r f90file; do
0789 # List modules used in f90file, ignoring those commented out
0790 mod_used=$(grep -i "^[^!]*\buse\b" $f90file | $AWK '{print $2}' | tr -d ',')
0791 if [ -n "$mod_used" ]; then
0792 for mod in $mod_used; do
0793 # Find the file that defines this module
0794 mod_file=$(grep -li "^module $mod\b" \
0795 $(grep -v $f90file "$file_list"))
0796 if [ -n "$mod_file" ]; then
0797 echo $mod_file $f90file >> $TMP.Graph
0798 fi
0799 done
0800 else
0801 echo $f90file >> $TMP.noGraph
0802 fi
0803 done < $file_list
0804 # Replace alphabetical with topological file order
8908c6917c Jean*0805 tsort $TMP.Graph | sed 's|.*/||' > $file_list
5b53130725 Ivan*0806 # append files without use-statements if they are not already included
0807 while IFS= read -r f90file; do
8908c6917c Jean*0808 f=$(echo $f90file | sed 's|.*/||' )
5b53130725 Ivan*0809 inList=$(grep -i $f $file_list)
0810 if test -z "$inList" ; then
0811 echo $f >> $file_list
0812 fi
0813 done < $TMP.noGraph
0814 # Clean up topological sorting files
0815 rm -rf $TMP.Graph $TMP.noGraph
0816 if test $dBug = 1 ; then
0817 echo "<- re-ordered list :" ; cat $file_list
0818 fi
0819 }
0820
6aec5d9846 Ed H*0821 # Parse the package dependency information
0822 get_pdepend_list() {
0823
0824 # strip the comments and then convert the dependency file into
0825 # two arrays: PNAME, DNAME
0826 cat $1 | sed -e 's/#.*$//g' \
bf318dd62d Jean*0827 | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
6aec5d9846 Ed H*0828 > ./.pd_tmp
bf318dd62d Jean*0829 RETVAL=$?
0830 if test ! "x${RETVAL}" = x0 ; then
a5a3c4e100 Jean*0831 echo "Error: unable to parse package dependencies -- please check PKG_DEPEND=\"$1\""
bf318dd62d Jean*0832 exit 1
0833 fi
12417e3119 Jean*0834 #echo "---- content of tmp file '.pd_tmp' :" ; cat .pd_tmp ; echo "---- end of file"
3021a6b819 Ed H*0835 . ./.pd_tmp
6aec5d9846 Ed H*0836 rm -f ./.pd_tmp
0837 }
0838
8636935175 Ed H*0839 # Build a CPP macro to automate calling C routines from FORTRAN
0840 get_fortran_c_namemangling() {
353dc202ae Ed H*0841
0842 #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
0843 if test ! "x$FC_NAMEMANGLE" = x ; then
776d1c0efd Jean*0844 return 0
353dc202ae Ed H*0845 fi
0e2704be3d Jean*0846 echo " running: get_fortran_c_namemangling()" >> $LOGFILE
353dc202ae Ed H*0847
8636935175 Ed H*0848 default_nm="#define FC_NAMEMANGLE(X) X ## _"
5be35a17af Jean*0849
8636935175 Ed H*0850 cat > genmake_test.c <<EOF
0851 void tcall( char * string ) { tsub( string ); }
0852 EOF
0e2704be3d Jean*0853 COMM="$CC $CFLAGS -c genmake_test.c"
0854 echo ' '$COMM >> $LOGFILE
0855 $COMM >> $LOGFILE 2>&1
8636935175 Ed H*0856 RETVAL=$?
0857 if test "x$RETVAL" != x0 ; then
0858 FC_NAMEMANGLE=$default_nm
683b8f029b Jean*0859 cat <<EOF>> $LOGFILE
06c46c472d Ed H*0860
0e2704be3d Jean*0861 WARNING: C test compile fails
0862 WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
0863 WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
06c46c472d Ed H*0864 EOF
8636935175 Ed H*0865 return 1
0866 fi
e8a04cb645 Ed H*0867 c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
8636935175 Ed H*0868 RETVAL=$?
0869 if test "x$RETVAL" != x0 ; then
0870 FC_NAMEMANGLE=$default_nm
683b8f029b Jean*0871 cat <<EOF>> $LOGFILE
06c46c472d Ed H*0872
0e2704be3d Jean*0873 WARNING: The "nm" command failed.
0874 WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
0875 WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
06c46c472d Ed H*0876 EOF
8636935175 Ed H*0877 return 1
0878 fi
6554790d1c Ed H*0879 cat > genmake_tcomp.$FS <<EOF
8636935175 Ed H*0880 subroutine tcall( string )
0881 character*(*) string
0882 call tsub( string )
0883 end
0884 EOF
0e2704be3d Jean*0885 COMM="$FC $FFLAGS -c genmake_tcomp.$FS"
0886 echo ' '$COMM >> $LOGFILE
0887 $COMM >> $LOGFILE 2>&1
8636935175 Ed H*0888 RETVAL=$?
0889 if test "x$RETVAL" != x0 ; then
0890 FC_NAMEMANGLE=$default_nm
683b8f029b Jean*0891 cat <<EOF>> $LOGFILE
06c46c472d Ed H*0892
0e2704be3d Jean*0893 WARNING: FORTRAN test compile fails -- please see '$LOGFILE'
0894 WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
0895 WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
06c46c472d Ed H*0896 EOF
8636935175 Ed H*0897 return 1
0898 fi
e8a04cb645 Ed H*0899 f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
8636935175 Ed H*0900 RETVAL=$?
0901 if test "x$RETVAL" != x0 ; then
0902 FC_NAMEMANGLE=$default_nm
683b8f029b Jean*0903 cat <<EOF>> $LOGFILE
06c46c472d Ed H*0904
0e2704be3d Jean*0905 WARNING: The "nm" command failed.
0906 WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
0907 WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
06c46c472d Ed H*0908 EOF
8636935175 Ed H*0909 return 1
0910 fi
0911
0912 c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
0913 f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
0914 c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
0915 f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
0916
0917 nmangle="X"
0918 if test "x$c_a" != "x$f_a" ; then
0919 comm="echo x$f_a | sed -e 's|x$c_a||'"
0920 a=`eval $comm`
0921 nmangle="$a ## $nmangle"
0922 fi
0923 if test "x$c_b" != "x$f_b" ; then
0924 comm="echo x$f_b | sed -e 's|x$c_b||'"
0925 b=`eval $comm`
0926 nmangle="$nmangle ## $b"
0927 fi
0928
0929 FC_NAMEMANGLE="#define FC_NAMEMANGLE(X) $nmangle"
63e5b59462 Ed H*0930
0931 # cleanup the testing files
0932 rm -f genmake_tcomp.* genmake_test.*
0e2704be3d Jean*0933
0934 echo " --> set FC_NAMEMANGLE='$FC_NAMEMANGLE'" >> $LOGFILE
8636935175 Ed H*0935 }
6aec5d9846 Ed H*0936
06c46c472d Ed H*0937 check_HAVE_CLOC() {
683b8f029b Jean*0938 echo >> $LOGFILE
0939 echo "running: check_HAVE_CLOC()" >> $LOGFILE
06c46c472d Ed H*0940 get_fortran_c_namemangling
0941 cat <<EOF > genmake_tc_1.c
0942 $FC_NAMEMANGLE
0943 #include <stdio.h>
0944 #include <stdlib.h>
0945 #include <unistd.h>
0946 #include <assert.h>
0947 #include <sys/time.h>
0948 void FC_NAMEMANGLE(cloc) ( double *curtim )
0949 {
0950 struct timeval tv1;
0951 gettimeofday(&tv1 , (void *)NULL );
0952 *curtim = (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
0953 *curtim = *curtim/1.E6;
0954 }
0955 EOF
e89c0084d6 Mart*0956 COMM="$CC $CFLAGS -c genmake_tc_1.c"
683b8f029b Jean*0957 echo $COMM >> $LOGFILE
0958 $COMM >> $LOGFILE 2>&1
06c46c472d Ed H*0959 RET_C=$?
6554790d1c Ed H*0960 cat <<EOF > genmake_tc_2.$FS
06c46c472d Ed H*0961 program hello
c899631d80 Ed H*0962 REAL*8 wtime
06c46c472d Ed H*0963 external cloc
0964 call cloc(wtime)
0965 print *," HELLO WORLD", wtime
f745933813 Ed H*0966 end
06c46c472d Ed H*0967 EOF
5e91cc7226 Mart*0968 COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
683b8f029b Jean*0969 echo $COMM >> $LOGFILE
0970 $COMM >> $LOGFILE 2>&1
06c46c472d Ed H*0971 RET_F=$?
683b8f029b Jean*0972 test -x ./genmake_tc && ./genmake_tc >> $LOGFILE 2>&1
06c46c472d Ed H*0973 RETVAL=$?
0974 if test "x$RETVAL" = x0 ; then
0975 HAVE_CLOC=t
0976 fi
0977 rm -f genmake_tc*
0e2704be3d Jean*0978 echo " --> set HAVE_CLOC='$HAVE_CLOC'" >> $LOGFILE
06c46c472d Ed H*0979 }
0980
b81731e160 Ed H*0981 check_HAVE_SIGREG() {
1c82e4d566 Ed H*0982 if test ! "x$HAVE_SIGREG" = x ; then
0983 return
0984 fi
683b8f029b Jean*0985 echo >> $LOGFILE
0986 echo "running: check_HAVE_SIGREG()" >> $LOGFILE
b81731e160 Ed H*0987 get_fortran_c_namemangling
0988 cat <<EOF > genmake_tc_1.c
0989 $FC_NAMEMANGLE
0990 #include <stdlib.h>
0991 #include <stdio.h>
0992 #include <signal.h>
0993 #include <errno.h>
0994 #include <ucontext.h>
0995
0996 int * ip;
0997
0998 static void killhandler(
0999 unsigned int sn, siginfo_t si, struct ucontext *sc )
1000 {
1001 *ip = *ip + 1;
1002 return;
1003 }
1004
1005 void FC_NAMEMANGLE(sigreg) (int * aip)
1006 {
1007 struct sigaction s;
b696d1568c Ed H*1008 ip = aip;
b81731e160 Ed H*1009 s.sa_flags = SA_SIGINFO;
1010 s.sa_sigaction = (void *)killhandler;
1011 if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
1012 printf("Sigaction returned error = %d\n", errno);
1013 exit(0);
1014 }
1015 return;
1016 }
1017 EOF
e89c0084d6 Mart*1018 COMM="$CC $CFLAGS -c genmake_tc_1.c"
683b8f029b Jean*1019 echo $COMM >> $LOGFILE
1020 $COMM >> $LOGFILE 2>&1
b81731e160 Ed H*1021 RET_C=$?
1022 cat <<EOF > genmake_tc_2.$FS
1023 program hello
1024 integer anint
1025 common /iv/ anint
1026 external sigreg
1027 call sigreg(anint)
1028 end
1029 EOF
683b8f029b Jean*1030 cat genmake_tc_2.$FS >> $LOGFILE
b81731e160 Ed H*1031 COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
683b8f029b Jean*1032 echo $COMM >> $LOGFILE
1033 $COMM >> $LOGFILE 2>&1
b81731e160 Ed H*1034 RETVAL=$?
1035 if test "x$RETVAL" = x0 ; then
1036 HAVE_SIGREG=t
1037 fi
1038 rm -f genmake_tc*
0e2704be3d Jean*1039 echo " --> set HAVE_SIGREG='$HAVE_SIGREG'" >> $LOGFILE
b81731e160 Ed H*1040 }
1041
df91541502 Ed H*1042 check_HAVE_SETRLSTK() {
36459526ba Ed H*1043 if test ! "x$HAVE_SETRLSTK" = x ; then
1044 return
1045 fi
683b8f029b Jean*1046 echo >> $LOGFILE
1047 echo "running: check_HAVE_SETRLSTK()" >> $LOGFILE
df91541502 Ed H*1048 get_fortran_c_namemangling
1049 cat <<EOF > genmake_tc_1.c
1050 $FC_NAMEMANGLE
1051 #include <sys/time.h>
1052 #include <sys/resource.h>
1053 #include <unistd.h>
1054 void FC_NAMEMANGLE(setrlstk) ()
1055 {
1056 struct rlimit rls;
1057 rls.rlim_cur = RLIM_INFINITY;
1058 rls.rlim_max = RLIM_INFINITY;
1059 setrlimit(RLIMIT_STACK, &rls);
1060 return;
1061 }
1062 EOF
e89c0084d6 Mart*1063 COMM="$CC $CFLAGS -c genmake_tc_1.c"
683b8f029b Jean*1064 echo $COMM >> $LOGFILE
1065 $COMM >> $LOGFILE 2>&1
df91541502 Ed H*1066 RET_C=$?
1067 cat <<EOF > genmake_tc_2.$FS
1068 program hello
1069 external setrlstk
1070 call setrlstk()
1071 end
1072 EOF
683b8f029b Jean*1073 cat genmake_tc_2.$FS >> $LOGFILE
b566c11b33 Ed H*1074 COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
683b8f029b Jean*1075 echo $COMM >> $LOGFILE
1076 $COMM >> $LOGFILE 2>&1
df91541502 Ed H*1077 RETVAL=$?
1078 if test "x$RETVAL" = x0 ; then
1079 HAVE_SETRLSTK=t
1080 fi
1081 rm -f genmake_tc*
0e2704be3d Jean*1082 echo " --> set HAVE_SETRLSTK='$HAVE_SETRLSTK'" >> $LOGFILE
df91541502 Ed H*1083 }
1084
ab11ba1276 Ed H*1085 check_HAVE_STAT() {
683b8f029b Jean*1086 echo >> $LOGFILE
1087 echo "running: check_HAVE_STAT()" >> $LOGFILE
ab11ba1276 Ed H*1088 get_fortran_c_namemangling
1089 cat <<EOF > genmake_tc_1.c
1090 $FC_NAMEMANGLE
1091 #include <stdio.h>
1092 #include <stdlib.h>
1093 #include <unistd.h>
1094 #include <sys/stat.h>
1095 #include <sys/types.h>
1096 void FC_NAMEMANGLE(tfsize) ( int *nbyte )
1097 {
1098 char name[512];
1099 struct stat astat;
1100
1101 name[0] = 'a'; name[1] = '\0';
1102 if (! stat(name, &astat))
1103 *nbyte = (int)(astat.st_size);
1104 else
1105 *nbyte = -1;
1106 }
1107 EOF
e89c0084d6 Mart*1108 COMM="$CC $CFLAGS -c genmake_tc_1.c"
683b8f029b Jean*1109 echo $COMM >> $LOGFILE
e89c0084d6 Mart*1110 $COMM >> genmake_tc.log 2>&1
ab11ba1276 Ed H*1111 RET_C=$?
6554790d1c Ed H*1112 cat <<EOF > genmake_tc_2.$FS
ab11ba1276 Ed H*1113 program hello
1114 integer nbyte
1115 call tfsize(nbyte)
1116 print *," HELLO WORLD", nbyte
f745933813 Ed H*1117 end
ab11ba1276 Ed H*1118 EOF
683b8f029b Jean*1119 cat genmake_tc_2.$FS >> $LOGFILE
b566c11b33 Ed H*1120 COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
683b8f029b Jean*1121 echo $COMM >> $LOGFILE
b566c11b33 Ed H*1122 $COMM >> genmake_tc.log 2>&1
ab11ba1276 Ed H*1123 RETVAL=$?
1124 if test "x$RETVAL" = x0 ; then
1125 HAVE_STAT=t
1126 fi
1127 rm -f genmake_tc*
0e2704be3d Jean*1128 echo " --> set HAVE_STAT='$HAVE_STAT'" >> $LOGFILE
ab11ba1276 Ed H*1129 }
1130
4b2baec0be Ed H*1131 check_netcdf_libs() {
92d9fec357 Ed H*1132 if test ! "x$SKIP_NETCDF_CHECK" = x ; then
1133 return
1134 fi
683b8f029b Jean*1135 echo >> $LOGFILE
1136 echo "running: check_netcdf_libs()" >> $LOGFILE
54fd2d570d Ed H*1137 cat <<EOF > genmake_tnc.F
4b2baec0be Ed H*1138 program fgennc
1139 #include "netcdf.inc"
92d9fec357 Ed H*1140 EOF
14693852dd Jean*1141 #if test ! "x$MPI" = x ; then
1142 # echo '#include "mpif.h"' >> genmake_tnc.F
1143 #fi
54fd2d570d Ed H*1144 cat <<EOF >> genmake_tnc.F
4b2baec0be Ed H*1145 integer iret, ncid, xid
1146 iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
1147 IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
1148 iret = nf_def_dim(ncid, 'X', 11, xid)
1149 IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
1150 iret = nf_close(ncid)
1151 IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
1152 end
1153 EOF
6206da1394 Jean*1154 echo "=== genmake_tnc.F >>>" > genmake_tnc.log
b566c11b33 Ed H*1155 cat genmake_tnc.F >> genmake_tnc.log
6206da1394 Jean*1156 echo "<<< genmake_tnc.F ===" >> genmake_tnc.log
4647ba122e Ed H*1157 RET_CPP=f
527acd427b Ed H*1158 COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
b566c11b33 Ed H*1159 echo "$COMM" >> genmake_tnc.log
1fa3d1c640 Davi*1160 eval $COMM > genmake_tnc.$FS 2>/dev/null && RET_CPP=t
4647ba122e Ed H*1161 if test "x$RET_CPP" = xf ; then
1162 echo " WARNING: CPP failed to pre-process the netcdf test." \
d3c49ba21e Ed H*1163 >> genmake_tnc.log
4647ba122e Ed H*1164 echo " Please check that \$INCLUDES is properly set." \
d3c49ba21e Ed H*1165 >> genmake_tnc.log
4647ba122e Ed H*1166 fi
b566c11b33 Ed H*1167 echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
56758c9c48 Greg*1168 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS" >> genmake_tnc.log
54fd2d570d Ed H*1169 $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \
f49dfe24c3 Ed H*1170 && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
4b2baec0be Ed H*1171 RET_COMPILE=$?
683b8f029b Jean*1172 cat genmake_tnc.log >> $LOGFILE
2fc7466b7d Ed H*1173
1174 #EH3 Remove test program execution for machines that either disallow
1175 #EH3 execution or cannot support it (eg. cross-compilers)
1176 #EH3
1177 #EH3 test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1
1178 #EH3 RETVAL=$?
1179 #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
1180
1181 if test "x$RET_COMPILE" = x0 ; then
4b2baec0be Ed H*1182 HAVE_NETCDF=t
683b8f029b Jean*1183 echo "check_netcdf: successful" >> $LOGFILE
4b2baec0be Ed H*1184 else
2978624509 Ed H*1185 # try again with "-lnetcdf" added to the libs
6206da1394 Jean*1186 echo "==> try again with added '-lnetcdf'" > genmake_tnc.log
527acd427b Ed H*1187 echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
d3c49ba21e Ed H*1188 echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
f49dfe24c3 Ed H*1189 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
527acd427b Ed H*1190 cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \
54fd2d570d Ed H*1191 && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \
f49dfe24c3 Ed H*1192 && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
2978624509 Ed H*1193 RET_COMPILE=$?
683b8f029b Jean*1194 echo >> $LOGFILE
1195 cat genmake_tnc.log >> $LOGFILE
2fc7466b7d Ed H*1196 if test "x$RET_COMPILE" = x0 ; then
2978624509 Ed H*1197 LIBS="$LIBS -lnetcdf"
1198 HAVE_NETCDF=t
683b8f029b Jean*1199 echo "check_netcdf: successful" >> $LOGFILE
979d83c92d Cons*1200 else
56758c9c48 Greg*1201 # try again with "-lnetcdff -lnetcdf" added to the libs
6206da1394 Jean*1202 echo "==> try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
979d83c92d Cons*1203 echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1204 echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
56758c9c48 Greg*1205 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf" >> genmake_tnc.log
979d83c92d Cons*1206 cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \
1207 && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \
1208 && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1209 RET_COMPILE=$?
683b8f029b Jean*1210 echo >> $LOGFILE
1211 cat genmake_tnc.log >> $LOGFILE
979d83c92d Cons*1212 if test "x$RET_COMPILE" = x0 ; then
1213 LIBS="$LIBS -lnetcdff -lnetcdf"
1214 HAVE_NETCDF=t
683b8f029b Jean*1215 echo "check_netcdf: successful" >> $LOGFILE
979d83c92d Cons*1216 fi
2978624509 Ed H*1217 fi
4b2baec0be Ed H*1218 fi
1219 rm -f genmake_tnc*
0e2704be3d Jean*1220 echo " --> set HAVE_NETCDF='$HAVE_NETCDF'" >> $LOGFILE
4b2baec0be Ed H*1221 }
1222
991445cec7 Oliv*1223 check_lapack_libs() {
516b08a580 jm-c 1224 HAVE_LAPACK=f
991445cec7 Oliv*1225 echo >> $LOGFILE
1226 echo "running: check_lapack_libs()" >> $LOGFILE
1227 cat <<EOF > genmake_tla.F
1228 program fgenla
776d1c0efd Jean*1229 integer info
991445cec7 Oliv*1230 integer ipiv( 2 )
1231 double precision ab( 4, 2 ), b( 2 )
1232 data ab / 0., 0., 1., 2., 0., 2., 1., 0. /
1233 data b / 1., 1. /
1234 call dgbsv( 2, 1, 1, 1, ab, 4, ipiv, b, 2, info )
1235 IF (info .NE. 0) write(*,*) 'Error:', info
1236 write(*,*) b
1237 end
1238 EOF
1239 echo "=== genmake_tla.F >>>" > genmake_tla.log
1240 cat genmake_tla.F >> genmake_tla.log
1241 echo "<<< genmake_tla.F ===" >> genmake_tla.log
1242 RET_CPP=f
1243 COMM="cat genmake_tla.F | $CPP $DEFINES $INCLUDES"
1244 echo "$COMM" >> genmake_tla.log
1245 eval $COMM > genmake_tla.$FS 2>/dev/null && RET_CPP=t
1246 if test "x$RET_CPP" = xf ; then
1247 echo " WARNING: CPP failed to pre-process the lapack test." \
1248 >> genmake_tla.log
1249 echo " Please check that \$INCLUDES is properly set." \
1250 >> genmake_tla.log
1251 fi
1252 echo "$FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1253 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tla.o $LIBS" >> genmake_tla.log
1254 $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1 \
1255 && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS >> genmake_tla.log 2>&1
1256 RET_COMPILE=$?
1257 cat genmake_tla.log >> $LOGFILE
1258
1259 # test program execution not always possible (see check_netcdf_libs)
1260 #
1261 #test -x ./genmake_tla && ./genmake_tla >> genmake_tla.log 2>&1
1262 #RETVAL=$?
1263 #if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
1264
1265 if test "x$RET_COMPILE" = x0 ; then
1266 HAVE_LAPACK=t
1267 echo "check_lapack: successful" >> $LOGFILE
1268 else
1269 # try again with "-llapack" added to the libs
1270 echo "==> try again with added '-llapack'" > genmake_tla.log
1271 echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1272 echo " && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1273 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack" >> genmake_tla.log
1274 cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null \
1275 && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1 \
1276 && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack >> genmake_tla.log 2>&1
1277 RET_COMPILE=$?
1278 echo >> $LOGFILE
1279 cat genmake_tla.log >> $LOGFILE
1280 if test "x$RET_COMPILE" = x0 ; then
1281 LIBS="$LIBS -llapack"
1282 HAVE_LAPACK=t
1283 echo "check_lapack: successful" >> $LOGFILE
1284 else
1285 # try again with "-lf77blas -lcblas" added to the libs
1286 echo "==> try again with added '-llapack -lf77blas -lcblas'" > genmake_tla.log
1287 echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1288 echo " && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1289 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas" >> genmake_tla.log
1290 cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null \
1291 && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1 \
1292 && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas >> genmake_tla.log 2>&1
1293 RET_COMPILE=$?
1294 echo >> $LOGFILE
1295 cat genmake_tla.log >> $LOGFILE
1296 if test "x$RET_COMPILE" = x0 ; then
1297 LIBS="$LIBS -llapack -lf77blas -lcblas"
1298 HAVE_LAPACK=t
1299 echo "check_lapack: successful" >> $LOGFILE
776d1c0efd Jean*1300 else
1301 # try again with "-latlas" added to the libs
1302 echo "==> try again with added '-llapack -lf77blas -lcblas -latlas'" > genmake_tla.log
1303 echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1304 echo " && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1305 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas -latlas" >> genmake_tla.log
1306 cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null \
1307 && $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1 \
1308 && $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas -latlas >> genmake_tla.log 2>&1
1309 RET_COMPILE=$?
1310 echo >> $LOGFILE
1311 cat genmake_tla.log >> $LOGFILE
1312 if test "x$RET_COMPILE" = x0 ; then
1313 LIBS="$LIBS -llapack -lf77blas -lcblas -latlas"
1314 HAVE_LAPACK=t
1315 echo "check_lapack: successful" >> $LOGFILE
1316 fi
991445cec7 Oliv*1317 fi
1318 fi
1319 fi
1320 rm -f genmake_tla*
1321 echo " --> set HAVE_LAPACK='$HAVE_LAPACK'" >> $LOGFILE
1322 }
1323
7d5fc6b559 Jean*1324 check_HAVE_FLUSH() {
1325 if test ! "x$SKIP_CHECK_FLUSH" = x ; then
1326 return
1327 fi
1328 echo >> $LOGFILE
1329 echo "running: check_HAVE_FLUSH()" >> $LOGFILE
1330 cat <<EOF > genmake_tflsh.$FS
1331 program fgenflsh
1332 integer iounit
1333 character*9 fname
1334 iounit = 26
1335 fname = 'tmp.tflsh'
1336 open(iounit,FILE=fname,STATUS='unknown')
1337 write(iounit,*) 'genmake_tflsh: hello'
1338 call flush(iounit)
1339 close(iounit)
1340 end
1341 EOF
1342 echo "=== genmake_tflsh.$FS >>>" > genmake_tflsh.log
1343 cat genmake_tflsh.$FS >> genmake_tflsh.log
1344 echo "<<< genmake_tflsh.$FS ===" >> genmake_tflsh.log
1345
1346 echo "$FC $FFLAGS $FOPTIM -c genmake_tflsh.$FS \ " >> genmake_tflsh.log
1347 echo " && $LINK $FFLAGS $FOPTIM -o genmake_tflsh.o $LIBS" >> genmake_tflsh.log
1348 $FC $FFLAGS $FOPTIM -c genmake_tflsh.$FS >> genmake_tflsh.log 2>&1 \
1349 && $LINK $FFLAGS $FOPTIM -o genmake_tflsh genmake_tflsh.o $LIBS >> genmake_tflsh.log 2>&1
1350 RET_COMPILE=$?
1351
1352 if test "x$RET_COMPILE" = x0 ; then
1353 HAVE_FLUSH=t
1354 #cat genmake_tflsh.log >> $LOGFILE
1355 echo " check_HAVE_FLUSH: successful" >> $LOGFILE
1356 else
1357 HAVE_FLUSH=f
1358 cat genmake_tflsh.log >> $LOGFILE
1359 fi
1360 rm -f genmake_tflsh*
1361 echo " --> set HAVE_FLUSH='$HAVE_FLUSH'" >> $LOGFILE
1362 }
4b2baec0be Ed H*1363
c1324e0980 Alis*1364 ###############################################################################
1365 # Sequential part of script starts here
1366 ###############################################################################
1367
6aec5d9846 Ed H*1368 # Set defaults here
2ff82eb834 Ed H*1369 COMMANDL="$0 $@"
1370
6aec5d9846 Ed H*1371 PLATFORM=
8908c6917c Jean*1372 FS=
1373 FS90=
6aec5d9846 Ed H*1374 LN=
1375 S64=
1376 KPP=
6e9c5fd628 Ed H*1377 #FC=
9d6ad94e1e Ed H*1378 #CC=gcc
6e9c5fd628 Ed H*1379 #CPP=
6aec5d9846 Ed H*1380 LINK=
8636935175 Ed H*1381 DEFINES=
6aec5d9846 Ed H*1382 PACKAGES=
1383 ENABLE=
1384 DISABLE=
3ce2ed8dc5 Ed H*1385 # MAKEFILE=
1386 # MAKEDEPEND=
a5a3c4e100 Jean*1387 PKG_DEPEND=
1388 PKG_GROUPS=
683b8f029b Jean*1389 DUMPSTATE=f
6aec5d9846 Ed H*1390 OPTFILE=
4647ba122e Ed H*1391 INCLUDES="-I. $INCLUDES"
6aec5d9846 Ed H*1392 FFLAGS=
1393 FOPTIM=
780fea06ba Mart*1394 FEXTRAFLAGS=
ebe06b86a4 Jean*1395 USE_EXTENDED_SRC=
1396 EXTENDED_SRC_FLAG=
40958e8f52 Jean*1397 GET_FC_VERSION=
6aec5d9846 Ed H*1398 CFLAGS=
1399 KFLAGS1=
1400 KFLAGS2=
e129bec2de Ed H*1401 #LDADD=
6aec5d9846 Ed H*1402 LIBS=
1403 KPPFILES=
1404 NOOPTFILES=
1405 NOOPTFLAGS=
c1324e0980 Alis*1406 MPI=
1407 MPIPATH=
e9e6f33093 Jean*1408 OMP=
1409 OMPFLAG=
b3a27c6152 Jean*1410 USE_R4=
a66d6f811f Cons*1411 TS=
29eb399fd0 Cons*1412 PAPIS=
008ba3ca0d Cons*1413 PCLS=
29eb399fd0 Cons*1414 FOOLAD=
1415 PAPI=
008ba3ca0d Cons*1416 PCL=
29eb399fd0 Cons*1417 HPMT=
1418 GSL=
979d83c92d Cons*1419 DEVEL=
f7f6e70984 Ed H*1420 HAVE_TEST_L=
6aec5d9846 Ed H*1421
937e30e5d7 Jean*1422 # set this to "t" to enable lapack test
1423 CHECK_FOR_LAPACK=f
1c6c4d23f7 Oliv*1424
4b08b6ee66 Ed H*1425 # DEFINES checked by test compilation or command-line
e51ecc3fef Ed H*1426 HAVE_SYSTEM=
1427 HAVE_FDATE=
f7aaac66f3 jm-c 1428 FC_CHECK=
e51ecc3fef Ed H*1429 FC_NAMEMANGLE=
06c46c472d Ed H*1430 HAVE_CLOC=
36459526ba Ed H*1431 # HAVE_SETRLSTK=
ab11ba1276 Ed H*1432 HAVE_STAT=
4b2baec0be Ed H*1433 HAVE_NETCDF=
9698b7effe Chri*1434 HAVE_ETIME=
4b08b6ee66 Ed H*1435 IGNORE_TIME=
991445cec7 Oliv*1436 HAVE_LAPACK=
7d5fc6b559 Jean*1437 HAVE_FLUSH=
e51ecc3fef Ed H*1438
6aec5d9846 Ed H*1439 MODS=
1440 TOOLSDIR=
1441 SOURCEDIRS=
1442 INCLUDEDIRS=
57ace0c46a Ed H*1443 STANDARDDIRS="USE_THE_DEFAULT"
9d0c386f0c dngo*1444 SINGULARITYFILE=
6aec5d9846 Ed H*1445
36e14999eb Jean*1446 #- local config file
1447 gm_local="genmake_local"
1448
6aefb07181 Ed H*1449 G2ARGS=
13fa7032ba Ed H*1450 BASH=
6aec5d9846 Ed H*1451 PWD=`pwd`
6e9c5fd628 Ed H*1452 test "x$MAKE" = x && MAKE=make
1453 test "x$AWK" = x && AWK=awk
ab504a3a96 Ed H*1454 EMBED_SRC=
9a263a84a8 Ed H*1455 THISHOST=`hostname`
6aec5d9846 Ed H*1456 THISCWD=`pwd`
1457 THISDATE=`date`
9a263a84a8 Ed H*1458 THISUSER=`echo $USER`
1459 THISVER=
6aec5d9846 Ed H*1460 MACHINE=`uname -a`
6c90987a77 Ed H*1461 EXECUTABLE=
1462 EXEHOOK=
1463 EXEDIR=
6d54cf9ca1 Ed H*1464 IEEE=
1465 if test "x$MITGCM_IEEE" != x ; then
1466 IEEE=$MITGCM_IEEE
1467 fi
6aec5d9846 Ed H*1468
668b211e58 Ed H*1469 AUTODIFF_PKG_USED=f
b7b61e618a Mart*1470 AD_OPTFILE=
b4daa24319 Shre*1471 TAPENADE=
1472 TAPENADECMD=tapenade
6a9e386e2e dngo*1473 TAPENADE_FLAGS=
1474 TAP_EXTRA=
16cc6e2b59 Jean*1475 OPENAD=
44f4a23ebb Jean*1476 CAT_SRC_FOR_TAF=1
5b53130725 Ivan*1477 DEP_TAF_FILE='Makefile_taf.dep'
0c0e61146f Ed H*1478 TAF=
1479 AD_TAF_FLAGS=
1480 FTL_TAF_FLAGS=
1481 SVD_TAF_FLAGS=
1482 TAF_EXTRA=
5b53130725 Ivan*1483 TAF_F77_FLAGS=
1484 TAF_F90_FLAGS=
1485
fea3e7d209 Jean*1486 DIVA=
1487 MPIINCLUDEDIR=
1488 MPI_HEADER_FILES=
1489 LOCAL_MPI_HEADERS=
1490
2ff82eb834 Ed H*1491 # The following state can be set directly by command-line switches
621623385c Jean*1492 gm_s1="ROOTDIR STANDARDDIRS MODS PKG_DEPEND PKG_GROUPS DISABLE ENABLE"
8908c6917c Jean*1493 gm_s2="PLATFORM OPTFILE MAKE MAKEFILE MAKEDEPEND FS FS90 FC CC MPI OMP USE_R4"
621623385c Jean*1494 gm_s3="FEXTRAFLAGS IEEE DEVEL GSL TS PAPIS PCLS PAPI PCL HPMT DUMPSTATE"
2ff82eb834 Ed H*1495
1496 # The following state is not directly set by command-line switches
621623385c Jean*1497 gm_s4="LN S64 LINK PACKAGES INCLUDES FFLAGS FOPTIM"
dd9f72a48c Jean*1498 gm_s5="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"
7d5fc6b559 Jean*1499 gm_s6="PWD TOOLSDIR SOURCEDIRS INCLUDEDIRS EXEDIR EXECUTABLE EXEHOOK"
f7aaac66f3 jm-c 1500 gm_s7="TMP THISHOST THISUSER THISDATE THISVER MACHINE FC_CHECK FC_NAMEMANGLE"
7d5fc6b559 Jean*1501 gm_s8="HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME HAVE_LAPACK HAVE_FLUSH"
2ff82eb834 Ed H*1502
668b211e58 Ed H*1503 # The following are all related to adjoint/tangent-linear stuff
6a9e386e2e dngo*1504 gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAPENADE OPENAD"
b7b61e618a Mart*1505 gm_s11="TAF AD_TAF_FLAGS FTL_TAF_FLAGS SVD_TAF_FLAGS TAF_F77_FLAGS TAF_F90_FLAGS"
1506 gm_s12="TAF_EXTRA DIVA MPIINCLUDEDIR MPI_HEADER_FILES"
6a9e386e2e dngo*1507 gm_s13="TAPENADECMD TAPENADE_FLAGS TAP_EXTRA"
668b211e58 Ed H*1508
dd9f72a48c Jean*1509 gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8"
6a9e386e2e dngo*1510 gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12 $gm_s13"
2ff82eb834 Ed H*1511
06a58fb2fc Ed H*1512 cat <<EOF
1513
1514 GENMAKE :
1515
683b8f029b Jean*1516 A program for GENerating MAKEfiles for the MITgcm project.
1517 For a quick list of options, use "genmake2 -h"
516b08a580 jm-c 1518 or for more detail see the documentation, section "Building the model"
1519 (under "Getting Started") at: https://mitgcm.readthedocs.io/
06a58fb2fc Ed H*1520
1521 EOF
2ff82eb834 Ed H*1522
309b5c610e Jean*1523 if test "x$MITGCM_ROOTDIR" = x ; then
1524 if test "x$ROOTDIR" != x ; then
f955de4ba2 Jean*1525 echo "WARNING: Environment Variable 'ROOTDIR' no longer recognized"
1526 echo "WARNING: use instead 'MITGCM_ROOTDIR'" ; ROOTDIR=
309b5c610e Jean*1527 echo ''
1528 fi
1529 else
1530 ROOTDIR=$MITGCM_ROOTDIR
1531 fi
1532
683b8f029b Jean*1533 LOGFILE="genmake.log"
6206da1394 Jean*1534 #- clean-up previous genmake logfiles:
683b8f029b Jean*1535 rm -f genmake_state genmake_*optfile $LOGFILE
67fd6ce146 Jean*1536
76c1b0ef61 Ed H*1537 echo "=== Processing options files and arguments ==="
6aec5d9846 Ed H*1538
a674d19f61 Ed H*1539 #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
76c1b0ef61 Ed H*1540 #parse_options
1541 ac_prev=
405899ca27 Ed H*1542 for ac_option in "$@" ; do
76c1b0ef61 Ed H*1543
6aefb07181 Ed H*1544 G2ARGS="$G2ARGS \"$ac_option\""
1545
76c1b0ef61 Ed H*1546 # If the previous option needs an argument, assign it.
1547 if test -n "$ac_prev"; then
1548 eval "$ac_prev=\$ac_option"
1549 ac_prev=
1550 continue
1551 fi
5be35a17af Jean*1552
76c1b0ef61 Ed H*1553 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
5be35a17af Jean*1554
76c1b0ef61 Ed H*1555 case $ac_option in
776d1c0efd Jean*1556
76c1b0ef61 Ed H*1557 -help | --help | -h | --h)
1558 usage ;;
776d1c0efd Jean*1559
76c1b0ef61 Ed H*1560 -optfile | --optfile | -of | --of)
c53a297da3 Ed H*1561 ac_prev=OPTFILE ;;
76c1b0ef61 Ed H*1562 -optfile=* | --optfile=* | -of=* | --of=*)
1563 OPTFILE=$ac_optarg ;;
776d1c0efd Jean*1564
b4daa24319 Shre*1565 -tap | --tap)
1566 TAPENADE="true" ; ALWAYS_USE_F90=1 ;;
1567
6a9e386e2e dngo*1568 -tap_extra | --tap_extra)
1569 ac_prev=TAP_EXTRA ;;
1570 -tap_extra=* | --tap_extra=*)
1571 TAP_EXTRA=$ac_optarg ;;
1572
16cc6e2b59 Jean*1573 -oad | --oad)
9bf5db3002 Jean*1574 OPENAD="true" ; ALWAYS_USE_F90=1 ;;
9d0c386f0c dngo*1575 -oadsingularity | --oadsingularity | -oadsngl | --oadsngl)
1576 ac_prev=SINGULARITYFILE ;;
1577 -oadsingularity=* | --oadsingularity=* | -oadsngl=* | --oadsngl=*)
1578 SINGULARITYFILE=$ac_optarg ;;
44f4a23ebb Jean*1579 -nocat4ad | -dog4ad | -ncad | -dad)
1580 CAT_SRC_FOR_TAF=0 ;;
b34430ea9b Ed H*1581 -adoptfile | --adoptfile | -adof | --adof)
668b211e58 Ed H*1582 ac_prev=AD_OPTFILE ;;
1583 -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
1584 AD_OPTFILE=$ac_optarg ;;
776d1c0efd Jean*1585
76c1b0ef61 Ed H*1586 -pdepend | --pdepend)
a5a3c4e100 Jean*1587 ac_prev=PKG_DEPEND ;;
76c1b0ef61 Ed H*1588 -pdepend=* | --pdepend=*)
a5a3c4e100 Jean*1589 PKG_DEPEND=$ac_optarg ;;
776d1c0efd Jean*1590
a5a3c4e100 Jean*1591 -pgroups | --pgroups)
1592 ac_prev=PKG_GROUPS ;;
1593 -pgroups=* | --pgroups=*)
1594 PKG_GROUPS=$ac_optarg ;;
776d1c0efd Jean*1595
b34aa4cc66 Ed H*1596 -make | --make | -m | --m)
1597 ac_prev=MAKE ;;
1598 -make=* | --make=* | -m=* | --m=*)
1599 MAKE=$ac_optarg ;;
776d1c0efd Jean*1600
13fa7032ba Ed H*1601 -bash | --bash)
1602 ac_prev=BASH ;;
1603 -bash=* | --bash=*)
1604 BASH=$ac_optarg ;;
776d1c0efd Jean*1605
b0867682b1 Ed H*1606 -makedepend | --makedepend | -md | --md)
1607 ac_prev=MAKEDEPEND ;;
1608 -makedepend=* | --makedepend=* | -md=* | --md=*)
1609 MAKEDEPEND=$ac_optarg ;;
776d1c0efd Jean*1610
36e14999eb Jean*1611 -makefile | --makefile | -mf | --mf)
c53a297da3 Ed H*1612 ac_prev=MAKEFILE ;;
36e14999eb Jean*1613 -makefile=* | --makefile=* | -mf=* | --mf=*)
76c1b0ef61 Ed H*1614 MAKEFILE=$ac_optarg ;;
776d1c0efd Jean*1615
06a58fb2fc Ed H*1616 -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
1617 echo "ERROR: The platform option has been removed. Please specify"
1618 echo " the build options using the \"optfile\" mechanism."
1619 echo
1620 usage
1621 ;;
776d1c0efd Jean*1622
76c1b0ef61 Ed H*1623 -rootdir | --rootdir | -rd | --rd)
c53a297da3 Ed H*1624 ac_prev=ROOTDIR ;;
76c1b0ef61 Ed H*1625 -rootdir=* | --rootdir=* | -rd=* | --rd=*)
1626 ROOTDIR=$ac_optarg ;;
776d1c0efd Jean*1627
76c1b0ef61 Ed H*1628 -mods | --mods | -mo | --mo)
c53a297da3 Ed H*1629 ac_prev=MODS ;;
76c1b0ef61 Ed H*1630 -mods=* | --mods=* | -mo=* | --mo=*)
1631 MODS=$ac_optarg ;;
776d1c0efd Jean*1632
76c1b0ef61 Ed H*1633 -disable | --disable)
c53a297da3 Ed H*1634 ac_prev=DISABLE ;;
76c1b0ef61 Ed H*1635 -disable=* | --disable=*)
1636 DISABLE=$ac_optarg ;;
776d1c0efd Jean*1637
76c1b0ef61 Ed H*1638 -enable | --enable)
c53a297da3 Ed H*1639 ac_prev=ENABLE ;;
76c1b0ef61 Ed H*1640 -enable=* | --enable=*)
1641 ENABLE=$ac_optarg ;;
776d1c0efd Jean*1642
6d54cf9ca1 Ed H*1643 -standarddirs | --standarddirs)
1644 ac_prev=STANDARDDIRS ;;
1645 -standarddirs=* | --standarddirs=*)
1646 STANDARDDIRS=$ac_optarg ;;
1647
76c1b0ef61 Ed H*1648 # -cpp | --cpp)
1649 # ac_prev=cpp ;;
1650 # -cpp=* | --cpp=*)
1651 # CPP=$ac_optarg ;;
776d1c0efd Jean*1652
e8a04cb645 Ed H*1653 -cc | --cc)
1654 ac_prev=CC ;;
1655 -cc=* | --cc=*)
1656 CC=$ac_optarg ;;
776d1c0efd Jean*1657
76c1b0ef61 Ed H*1658 -fortran | --fortran | -fc | --fc)
c53a297da3 Ed H*1659 ac_prev=FC ;;
76c1b0ef61 Ed H*1660 -fc=* | --fc=*)
1661 FC=$ac_optarg ;;
776d1c0efd Jean*1662
3eb03232c2 Ed H*1663 -fs | --fs)
1664 ac_prev=FS ;;
1665 -fs=* | --fs=*)
1666 FS=$ac_optarg ;;
776d1c0efd Jean*1667
3eb03232c2 Ed H*1668 -fs90 | --fs90)
1669 ac_prev=FS90 ;;
1670 -fs90=* | --fs90=*)
1671 FS90=$ac_optarg ;;
776d1c0efd Jean*1672
4d1f7e1a03 Jean*1673 -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1674 USE_R4=true ;;
1675
76c1b0ef61 Ed H*1676 -ieee | --ieee)
6d54cf9ca1 Ed H*1677 IEEE=true ;;
76c1b0ef61 Ed H*1678 -noieee | --noieee)
4d1f7e1a03 Jean*1679 echo "Warning: ignore option '$ac_option' (default is already without '-ieee')" ;;
36e14999eb Jean*1680 -devel | --devel)
4d1f7e1a03 Jean*1681 IEEE=true ; DEVEL=true ;;
36e14999eb Jean*1682 -gsl | --gsl)
4d1f7e1a03 Jean*1683 GSL=true ;;
b3a27c6152 Jean*1684
a66d6f811f Cons*1685 -ts | --ts)
1686 TS=true ;;
29eb399fd0 Cons*1687 -papis | --papis)
1688 PAPIS=true ;;
008ba3ca0d Cons*1689 -pcls | --pcls)
1690 PCLS=true ;;
29eb399fd0 Cons*1691 -foolad | --foolad)
1692 FOOLAD=true ;;
1693 -papi | --papi)
1694 PAPI=true ;;
008ba3ca0d Cons*1695 -pcl | --pcl)
1696 PCL=true ;;
29eb399fd0 Cons*1697 -hpmt | --hpmt)
1698 HPMT=true ;;
1699
c1324e0980 Alis*1700 -mpi | --mpi)
1701 MPI=true ;;
1702 -mpi=* | --mpi=*)
1703 MPIPATH=$ac_optarg
1704 MPI=true ;;
776d1c0efd Jean*1705
1706 -omp | --omp)
1707 OMP=true ;;
e9e6f33093 Jean*1708 -omp=* | --omp=*)
1709 OMPFLAG=$ac_optarg
1710 OMP=true ;;
776d1c0efd Jean*1711
2ff82eb834 Ed H*1712 -ds | --ds)
1713 DUMPSTATE=t ;;
776d1c0efd Jean*1714
dd9f72a48c Jean*1715 -extra_flag | --extra_flag)
1716 ac_prev=FEXTRAFLAGS ;;
1717 -extra_flag=* | --extra_flag=*)
1718 FEXTRAFLAGS=$ac_optarg ;;
776d1c0efd Jean*1719
0c0e61146f Ed H*1720 -taf_extra | --taf_extra)
1721 ac_prev=TAF_EXTRA ;;
1722 -taf_extra=* | --taf_extra=*)
1723 TAF_EXTRA=$ac_optarg ;;
1724
5b53130725 Ivan*1725 # -taf_f77_flags | --taf_f77_flags)
1726 # ac_prev=TAF_F77_FLAGS ;;
1727 # -taf_f77_flags=* | --taf_f77_flags=*)
1728 # TAF_F77_FLAGS=$ac_optarg ;;
1729
1730 # -taf_f90_flags | --taf_f90_flags)
1731 # ac_prev=TAF_F90_FLAGS ;;
1732 # -taf_f90_flags=* | --taf_f90_flags=*)
1733 # TAF_F90_FLAGS=$ac_optarg ;;
1734
4b08b6ee66 Ed H*1735 -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1736 IGNORE_TIME="-DIGNORE_TIME" ;;
0c0e61146f Ed H*1737
ab504a3a96 Ed H*1738 -es | --es | -embed-source | --embed-source)
1739 EMBED_SRC=t ;;
1740
76c1b0ef61 Ed H*1741 -*)
1742 echo "Error: unrecognized option: "$ac_option
1743 usage
1744 ;;
776d1c0efd Jean*1745
76c1b0ef61 Ed H*1746 *)
1747 echo "Error: unrecognized argument: "$ac_option
1748 usage
1749 ;;
776d1c0efd Jean*1750
76c1b0ef61 Ed H*1751 esac
5be35a17af Jean*1752
6aec5d9846 Ed H*1753 done
1754
4965aa2630 Jean*1755 #TMP=./genmk_$$
7deef35259 Jean*1756 #- try to put temporary files in system-local /tmp dir
b3a874fe30 Jean*1757 TMP=/tmp/genmk_${USER}_$$
4965aa2630 Jean*1758 touch $TMP ; retVal=$?
1759 if [ $retVal -eq 0 ] ; then
1760 if test ! -r $TMP ; then TMP=./genmk_$$ ; fi
1761 else
1762 TMP=./genmk_$$
1763 fi
1764 rm -f $TMP
1765 #echo " temp files: $TMP.*"
7deef35259 Jean*1766
36e14999eb Jean*1767 printf " getting local config information: "
1768 if test -f $gm_local ; then
1769 echo "using $gm_local"
1770 . $gm_local
1771 else
1772 echo "none found"
1773 fi
1774
6d54cf9ca1 Ed H*1775 if test -f ./.genmakerc ; then
1776 echo
1777 echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
516b08a580 jm-c 1778 echo " file. This file format is no longer supported."
1779 echo " For directions on how to setup and use the new \"genmake2\" script,"
1780 echo " please see the User Manual at: https://mitgcm.readthedocs.io/"
55252a5af3 Jean*1781 echo "WARNING: ignore \"./.genmakerc\" and continue."
5be35a17af Jean*1782 echo
6d54cf9ca1 Ed H*1783 fi
1784
f955de4ba2 Jean*1785 # Find the MITgcm root directory (${ROOTDIR})
f10e3a8bdd Ed H*1786 if test "x${ROOTDIR}" = x ; then
87042bad2c Ed H*1787 tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
822f69f065 Ed H*1788 if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
f10e3a8bdd Ed H*1789 ROOTDIR=".."
1790 else
1791 for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1792 if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1793 ROOTDIR=$d
f955de4ba2 Jean*1794 printf "Warning: MITgcm root directory was not specified ;"
b353a7c6c6 Jean*1795 echo " try using a local copy of MITgcm found at \"$ROOTDIR\""
f10e3a8bdd Ed H*1796 break
1797 fi
1798 done
1799 fi
1800 fi
1801 if test "x${ROOTDIR}" = x ; then
f955de4ba2 Jean*1802 echo "Error: Cannot determine MITgcm root directory for MITgcm code."
1803 echo " Please specify a root directory using either the command line"
1804 echo " option '-rootdir' or the environment variable 'MITGCM_ROOTDIR'."
f10e3a8bdd Ed H*1805 exit 1
1806 fi
1807 if test ! -d ${ROOTDIR} ; then
f955de4ba2 Jean*1808 echo "Error: the specified MITgcm root directory (\"$ROOTDIR\") does not exist!"
f10e3a8bdd Ed H*1809 exit 1
1810 fi
1811
9a263a84a8 Ed H*1812 # Find the MITgcm ${THISVER}
dbad7fe471 Jean*1813 version_file="${ROOTDIR}/doc/tag-index"
1814 if test -f $version_file ; then
8a81a79ea3 Jean*1815 THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
dbad7fe471 Jean*1816 #- remove ./BUILD_INFO.h file if older than version_file
1817 if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1818 echo " remove ./BUILD_INFO.h (older than ${version_file})"
1819 rm -f ./BUILD_INFO.h
1820 fi
9a263a84a8 Ed H*1821 fi
1822
3ce2ed8dc5 Ed H*1823 if test "x$MAKEFILE" = x ; then
1824 MAKEFILE="Makefile"
1825 fi
1826
dd9f72a48c Jean*1827 echo " getting OPTFILE information:"
6aec5d9846 Ed H*1828 if test "x${OPTFILE}" = x ; then
f10e3a8bdd Ed H*1829 if test "x$MITGCM_OF" = x ; then
1830 echo "Warning: no OPTFILE specified so we'll look for possible settings"
1831 printf "\n=== Searching for possible settings for OPTFILE ===\n"
0e2704be3d Jean*1832 find_possible_optfile
6aec5d9846 Ed H*1833 else
f10e3a8bdd Ed H*1834 OPTFILE=$MITGCM_OF
1835 fi
1836 fi
1837 if test "x$OPTFILE" != xNONE ; then
1838 if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1839 echo " using OPTFILE=\"$OPTFILE\""
3021a6b819 Ed H*1840 . "$OPTFILE"
f10e3a8bdd Ed H*1841 RETVAL=$?
1842 if test "x$RETVAL" != x0 ; then
13fa7032ba Ed H*1843 printf "Error: failed to source OPTFILE \"$OPTFILE\""
f10e3a8bdd Ed H*1844 echo "--please check that variable syntax is bash-compatible"
6aec5d9846 Ed H*1845 exit 1
1846 fi
683b8f029b Jean*1847 if test "x$DUMPSTATE" = xt ; then
6d54cf9ca1 Ed H*1848 cp -f $OPTFILE "genmake_optfile"
f10e3a8bdd Ed H*1849 fi
1850 else
1851 echo "Error: can't read OPTFILE=\"$OPTFILE\""
1852 exit 1
6aec5d9846 Ed H*1853 fi
1854 fi
1855
dd9f72a48c Jean*1856 echo " getting AD_OPTFILE information:"
668b211e58 Ed H*1857 if test "x${AD_OPTFILE}" = x ; then
16cc6e2b59 Jean*1858 if test "x$MITGCM_AD_OF" != x ; then
1859 AD_OPTFILE=$MITGCM_AD_OF
b4daa24319 Shre*1860 elif test "x$TAPENADE" != x ; then
1861 AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_tap
1862 elif test "x$OPENAD" != x ; then
16cc6e2b59 Jean*1863 AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_oad
b4daa24319 Shre*1864 else
1865 AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
668b211e58 Ed H*1866 fi
1867 fi
1868 if test "x${AD_OPTFILE}" != xNONE ; then
1869 if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1870 echo " using AD_OPTFILE=\"$AD_OPTFILE\""
3021a6b819 Ed H*1871 . "$AD_OPTFILE"
668b211e58 Ed H*1872 RETVAL=$?
1873 if test "x$RETVAL" != x0 ; then
13fa7032ba Ed H*1874 printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
668b211e58 Ed H*1875 echo "--please check that variable syntax is bash-compatible"
1876 exit 1
1877 fi
683b8f029b Jean*1878 if test "x$DUMPSTATE" = xt ; then
668b211e58 Ed H*1879 cp -f $AD_OPTFILE "genmake_ad_optfile"
1880 fi
1881 else
1882 echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
1883 exit 1
1884 fi
1885 fi
1886
3ce2ed8dc5 Ed H*1887 #====================================================================
25bb252094 Jean*1888 # Initialize INCLUDEDIRSMK from and optfile INCLUDEDIRS
1889 if test "x${INCLUDEDIRS}" != "x" ; then
1890 INCLUDEDIRSMK=${INCLUDEDIRS}
1891 fi
1892
1893 #====================================================================
3ce2ed8dc5 Ed H*1894 # Set default values if not set by the optfile
1895 #
e8a04cb645 Ed H*1896 # Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined. If not,
06c46c472d Ed H*1897 # either set defaults or complain and abort!
13fa7032ba Ed H*1898 if test ! "x$BASH" = x ; then
1899 # add a trailing space so that it works within the Makefile syntax (see below)
1900 BASH="$BASH "
1901 fi
61e39758c3 Ed H*1902 if test "x$FC" = x ; then
1903 cat <<EOF 1>&2
1904
1905 Error: no Fortran compiler: please specify using one of the following:
1906 1) within the options file ("FC=...") as specified by "-of=OPTFILE"
1907 2) the "-fc=XXX" command-line option
6d54cf9ca1 Ed H*1908 3) the "./genmake_local" file
61e39758c3 Ed H*1909 EOF
1910 exit 1
1911 fi
40958e8f52 Jean*1912 if test "x$GET_FC_VERSION" != x ; then
1913 echo "Get compiler version using: $FC $GET_FC_VERSION" >> $LOGFILE
db3ae3fff3 Jean*1914 ff=`echo $FC | sed 's/ .*//'` ; xx=`echo $ff | sed 's/^./& /' | sed 's/ .*//'`
1915 if test $xx != '/' ; then which $ff >> $LOGFILE ; fi
bb9d8ba6da Jean*1916 $FC $GET_FC_VERSION > genmake_fc_vers1 2> genmake_fc_vers2
1917 if test -s genmake_fc_vers1 ; then
1918 cat genmake_fc_vers1 >> $LOGFILE
1919 else
1920 cat genmake_fc_vers2 >> $LOGFILE
1921 fi
5c9316216b Jean*1922 echo "<-- compiler version ----" >> $LOGFILE
bb9d8ba6da Jean*1923 rm -f genmake_fc_vers1 genmake_fc_vers2
40958e8f52 Jean*1924 fi
0e2704be3d Jean*1925
e8a04cb645 Ed H*1926 if test "x$CC" = x ; then
0e2704be3d Jean*1927 look_for_C_compilers
e8a04cb645 Ed H*1928 fi
0e2704be3d Jean*1929
61e39758c3 Ed H*1930 if test "x$LINK" = x ; then
1931 LINK=$FC
1932 fi
06c46c472d Ed H*1933 if test "x$MAKE" = x ; then
1934 MAKE="make"
1935 fi
f7aaac66f3 jm-c 1936
1937 #- check for fortran compiler (for now, just for information, no consequence)
bcbb675387 jm-c 1938 if test "x$FC_CHECK" = x -o "x$FC_CHECK" = xt ; then
1939 check_fortran_compiler
1940 else FC_CHECK=-2 ; fi
f7aaac66f3 jm-c 1941
4fbb3ff84d Ed H*1942 if test "x$CPP" = x ; then
0e2704be3d Jean*1943 CPP="cpp -traditional -P"
4fbb3ff84d Ed H*1944 fi
1945 #EH3 === UGLY ===
3eb03232c2 Ed H*1946 # The following is an ugly little hack to check for $CPP in /lib/ and
1947 # it should eventually be replaced with a more general function that
4fbb3ff84d Ed H*1948 # searches a combo of the user's path and a list of "usual suspects"
1949 # to find the correct location for binaries such as $CPP.
1950 for i in " " "/lib/" ; do
1951 echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1952 done
1953 #EH3 === UGLY ===
7f196e2d92 Ed H*1954 echo "#define A a" | $CPP > test_cpp 2>&1
f10e3a8bdd Ed H*1955 RETVAL=$?
1956 if test "x$RETVAL" != x0 ; then
61e39758c3 Ed H*1957 cat <<EOF 1>&2
1958
f10e3a8bdd Ed H*1959 Error: C pre-processor "$CPP" failed the test case: please specify using:
1960
61e39758c3 Ed H*1961 1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
6d54cf9ca1 Ed H*1962 2) the "./genmake_local" file
c419bc9ed8 Ed H*1963 3) with the CPP environment variable
61e39758c3 Ed H*1964
1965 EOF
1966 exit 1
f10e3a8bdd Ed H*1967 else
1968 rm -f test_cpp
1969 fi
0e2704be3d Jean*1970
072ddee95c Ed H*1971 look_for_makedepend
0e2704be3d Jean*1972
1973 # Check that soft-link command is set and usable
48cf0b55dd Ed H*1974 if test "x$LN" = x ; then
1975 LN="ln -s"
1976 fi
1977 echo "test" > genmake_test_ln
1978 $LN genmake_test_ln genmake_tlink
1979 RETVAL=$?
1980 if test "x$RETVAL" != x0 ; then
1981 cat <<EOF 1>&2
61e39758c3 Ed H*1982
0e2704be3d Jean*1983 Error: The command "$LN" failed -- please specify a working soft-link
48cf0b55dd Ed H*1984 command in the optfile.
1985
1986 EOF
1987 exit 1
1988 fi
f7f6e70984 Ed H*1989 test -L genmake_tlink > /dev/null 2>&1
1990 RETVAL=$?
1991 if test "x$RETVAL" = x0 ; then
1992 HAVE_TEST_L=t
1993 fi
48cf0b55dd Ed H*1994 rm -f genmake_test_ln genmake_tlink
e51ecc3fef Ed H*1995
a4cdb0c6f0 Ed H*1996 # Check for broken *.F/*.f handling and fix if possible
1997 check_for_broken_Ff
1998
c1324e0980 Alis*1999 if test ! "x$MPI" = x ; then
2000 echo " Turning on MPI cpp macros"
e8e03c465c Jean*2001 DEFINES="$DEFINES -DALLOW_USE_MPI"
fb0eed0ba5 Jean*2002 #- To compile code older than checkpoint63s (2012/09/05), un-comment the following line:
2003 # DEFINES="$DEFINES -DALWAYS_USE_MPI"
c1324e0980 Alis*2004 fi
e9e6f33093 Jean*2005 if test ! "x$OMP" = x ; then
2006 echo " Add OMPFLAG and turn on OpenMP cpp macros"
2007 FFLAGS="$FFLAGS $OMPFLAG"
2008 F90FLAGS="$F90FLAGS $OMPFLAG"
2009 DEFINES="$DEFINES -DUSE_OMP_THREADING"
2010 fi
06c46c472d Ed H*2011
b3a27c6152 Jean*2012 if test ! "x$USE_R4" = x ; then
2013 echo " Turning on LET_RS_BE_REAL4 cpp flag"
2014 DEFINES="$DEFINES -DLET_RS_BE_REAL4"
2015 fi
2016
a66d6f811f Cons*2017 if test ! "x$TS" = x ; then
2018 echo " Turning on timing per timestep"
29eb399fd0 Cons*2019 if test ! "x$FOOLAD" = x ; then
776d1c0efd Jean*2020 DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
29eb399fd0 Cons*2021 else
2022 DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
2023 fi
35f9e7450d Cons*2024 PACKAGES="$PACKAGES showflops"
29eb399fd0 Cons*2025 fi
2026 if test ! "x$PAPIS" = x ; then
2027 echo " Turning on PAPI flop summary per timestep"
2028 echo " Please make sure PAPIINC, PAPILIB are defined"
2029 if test ! "x$FOOLAD" = x ; then
2030 DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
2031 else
2032 DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
2033 fi
2034 INCLUDES="$INCLUDES $PAPIINC"
2035 LIBS="$LIBS $PAPILIB"
35f9e7450d Cons*2036 PACKAGES="$PACKAGES showflops"
29eb399fd0 Cons*2037 fi
008ba3ca0d Cons*2038 if test ! "x$PCLS" = x ; then
2039 echo " Turning on PCL counter summary per timestep"
2040 echo " Please make sure PCLINC, PCLLIB are defined"
2041 if test ! "x$FOOLAD" = x ; then
2042 DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
2043 else
2044 DEFINES="$DEFINES -DUSE_PCL_FLOPS"
2045 fi
2046 INCLUDES="$INCLUDES $PCLINC"
2047 LIBS="$LIBS $PCLLIB"
35f9e7450d Cons*2048 PACKAGES="$PACKAGES showflops"
008ba3ca0d Cons*2049 fi
29eb399fd0 Cons*2050 if test ! "x$PAPI" = x ; then
2051 if test ! "x$PAPIS" = x ; then
2052 echo " PAPI performance analysis and flop summary per timestep cannot co-exist!"
2053 echo " Sticking with PAPI flop summary per timestep!"
2054 else
2055 echo " Turning on performance analysis with PAPI"
776d1c0efd Jean*2056 echo " Please make sure PAPIINC, PAPILIB are defined"
29eb399fd0 Cons*2057 DEFINES="$DEFINES -DUSE_PAPI"
2058 INCLUDES="$INCLUDES $PAPIINC"
2059 LIBS="$LIBS $PAPILIB"
2060 fi
2061 fi
008ba3ca0d Cons*2062 if test ! "x$PCL" = x ; then
2063 if test ! "x$PCLS" = x ; then
2064 echo " PCL performance analysis and flop summary per timestep cannot co-exist!"
2065 echo " Sticking with PCL flop summary per timestep!"
2066 else
2067 echo " Turning on performance analysis with PCL"
776d1c0efd Jean*2068 echo " Please make sure PCLINC, PCLLIB are defined"
008ba3ca0d Cons*2069 DEFINES="$DEFINES -DUSE_PCL"
2070 INCLUDES="$INCLUDES $PCLINC"
2071 LIBS="$LIBS $PCLLIB"
2072 fi
2073 fi
29eb399fd0 Cons*2074 if test ! "x$HPMT" = x ; then
2075 if test ! "x$PAPI" = x ; then
2076 echo " PAPI and the HPM Toolkit cannot co-exist!"
2077 echo " Sticking with PAPI!"
36e14999eb Jean*2078 else
2079 if test ! "x$PCL" = x ; then
008ba3ca0d Cons*2080 echo " PCL and the HPM Toolkit cannot co-exist!"
2081 echo " Sticking with PCL!"
36e14999eb Jean*2082 else
29eb399fd0 Cons*2083 echo " Turning on performance analysis with the HPM Toolkit"
776d1c0efd Jean*2084 echo " Please make sure HPMTINC, HPMTLIB are defined"
29eb399fd0 Cons*2085 DEFINES="$DEFINES -DUSE_LIBHPM"
776d1c0efd Jean*2086 INCLUDES="$INCLUDES $HPMTINC"
29eb399fd0 Cons*2087 LIBS="$LIBS $HPMTLIB"
36e14999eb Jean*2088 fi
de1771f913 Cons*2089 fi
29eb399fd0 Cons*2090 fi
2091 if test ! "x$GSL" = x ; then
2092 echo " Turning on use of GSL to control floating point calculations"
2093 echo " Please make sure GSLINC, GSLLIB are defined"
2094 DEFINES="$DEFINES -DUSE_GSL_IEEE"
2095 INCLUDES="$INCLUDES $GSLINC"
2096 LIBS="$LIBS $GSLLIB"
a66d6f811f Cons*2097 fi
ebe06b86a4 Jean*2098 #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
2099 if test ! "x$USE_EXTENDED_SRC" = x ; then
2100 FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
2101 F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
2102 fi
a66d6f811f Cons*2103
e51ecc3fef Ed H*2104 printf "\n=== Checking system libraries ===\n"
13fa7032ba Ed H*2105 printf " Do we have the system() command using $FC... "
6554790d1c Ed H*2106 cat > genmake_tcomp.$FS <<EOF
e51ecc3fef Ed H*2107 program hello
2108 call system('echo hi')
2109 end
2110 EOF
64947e6405 Ed H*2111 $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
e51ecc3fef Ed H*2112 RETVAL=$?
2113 if test "x$RETVAL" = x0 ; then
2114 HAVE_SYSTEM=t
2115 DEFINES="$DEFINES -DHAVE_SYSTEM"
2116 echo "yes"
2117 else
2118 HAVE_SYSTEM=
2119 echo "no"
2120 fi
2121 rm -f genmake_tcomp*
2122
13fa7032ba Ed H*2123 printf " Do we have the fdate() command using $FC... "
6554790d1c Ed H*2124 cat > genmake_tcomp.$FS <<EOF
e51ecc3fef Ed H*2125 program hello
c899631d80 Ed H*2126 CHARACTER*(128) string
e51ecc3fef Ed H*2127 string = ' '
2128 call fdate( string )
2129 print *, string
2130 end
2131 EOF
64947e6405 Ed H*2132 $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
e51ecc3fef Ed H*2133 RETVAL=$?
2134 if test "x$RETVAL" = x0 ; then
2135 HAVE_FDATE=t
2136 DEFINES="$DEFINES -DHAVE_FDATE"
2137 echo "yes"
2138 else
2139 HAVE_FDATE=
2140 echo "no"
2141 fi
2142 rm -f genmake_tcomp*
2143
7c83a0f18d Jean*2144 printf " Do we have the etime() command using $FC... "
f9872c5276 Jean*2145 cat > genmake_tcomp_1.$FS <<EOF
2146 program hello
2147 REAL*4 actual, tarray(2)
2148 EXTERNAL ETIME
2149 REAL*4 ETIME
2150 actual = ETIME( tarray )
2151 print *, tarray
2152 end
2153 EOF
2154 $FC $FFLAGS -o genmake_tcomp_1 genmake_tcomp_1.$FS > genmake_tcomp.log 2>&1
2155 RETVAL=$?
2156 if test "x$RETVAL" = x0 ; then
2157 HAVE_ETIME='Fct'
2158 DEFINES="$DEFINES -DHAVE_ETIME_FCT"
2159 echo " yes (${HAVE_ETIME})"
2160 else
2161 cat > genmake_tcomp_2.$FS <<EOF
9698b7effe Chri*2162 program hello
7c83a0f18d Jean*2163 REAL*4 actual, tarray(2)
2164 actual = -999.
2165 call ETIME( tarray, actual )
2166 if ( actual.ge.0. ) then
2167 print *, 0, tarray, actual
2168 else
2169 print *, 1, tarray, actual
2170 endif
9698b7effe Chri*2171 end
2172 EOF
f9872c5276 Jean*2173 $FC $FFLAGS -o genmake_tcomp_2 genmake_tcomp_2.$FS >> genmake_tcomp.log 2>&1
2174 RETVAL=$?
2175 if test "x$RETVAL" = x0 ; then
7c83a0f18d Jean*2176 echo -n 'c,'
f9872c5276 Jean*2177 ./genmake_tcomp_2 > genmake_tcomp_2.out 2>&1
7c83a0f18d Jean*2178 RETVAL=$?
f9872c5276 Jean*2179 fi
2180 if test "x$RETVAL" = x0 ; then
7c83a0f18d Jean*2181 echo -n 'r:'
f9872c5276 Jean*2182 RETVAL=`cat genmake_tcomp_2.out | $AWK '{print $1}'`
2183 fi
2184 if test "x$RETVAL" = x0 ; then
2185 HAVE_ETIME='SbR'
2186 DEFINES="$DEFINES -DHAVE_ETIME_SBR"
2187 echo " yes (${HAVE_ETIME})"
2188 else
9698b7effe Chri*2189 HAVE_ETIME=
7c83a0f18d Jean*2190 echo " no"
f9872c5276 Jean*2191 fi
9698b7effe Chri*2192 fi
7c83a0f18d Jean*2193 #mkdir chk_etime ; cp -p -f genmake_tcomp* chk_etime
9698b7effe Chri*2194 rm -f genmake_tcomp*
2195
13fa7032ba Ed H*2196 printf " Can we call simple C routines (here, \"cloc()\") using $FC... "
06c46c472d Ed H*2197 check_HAVE_CLOC
2198 if test "x$HAVE_CLOC" != x ; then
b5e03e7d0e Jean*2199 DEFINES="$DEFINES -DHAVE_CLOC"
06c46c472d Ed H*2200 echo "yes"
2201 else
df91541502 Ed H*2202 echo "no"
ab504a3a96 Ed H*2203 if test "x$EMBED_SRC" = xt ; then
2204 echo " WARNING: you requested file embedding but it has"
2205 echo " been disabled since C code cannot be called"
2206 EMBED_SRC=
2207 fi
df91541502 Ed H*2208 fi
2209 rm -f genmake_t*
2210
2211 printf " Can we unlimit the stack size using $FC... "
2212 check_HAVE_SETRLSTK
36459526ba Ed H*2213 if test "x$HAVE_SETRLSTK" = xt ; then
b5e03e7d0e Jean*2214 DEFINES="$DEFINES -DHAVE_SETRLSTK"
df91541502 Ed H*2215 echo "yes"
2216 else
06c46c472d Ed H*2217 echo "no"
e51ecc3fef Ed H*2218 fi
06c46c472d Ed H*2219 rm -f genmake_t*
e51ecc3fef Ed H*2220
b81731e160 Ed H*2221 printf " Can we register a signal handler using $FC... "
2222 check_HAVE_SIGREG
1c82e4d566 Ed H*2223 if test "x$HAVE_SIGREG" = xt ; then
b5e03e7d0e Jean*2224 DEFINES="$DEFINES -DHAVE_SIGREG"
b81731e160 Ed H*2225 echo "yes"
2226 else
2227 echo "no"
2228 fi
2229 rm -f genmake_t*
2230
ab11ba1276 Ed H*2231 printf " Can we use stat() through C calls... "
2232 check_HAVE_STAT
2233 if test "x$HAVE_STAT" != x ; then
b5e03e7d0e Jean*2234 DEFINES="$DEFINES -DHAVE_STAT"
ab11ba1276 Ed H*2235 echo "yes"
2236 else
2237 echo "no"
2238 fi
2239 rm -f genmake_t*
2240
13fa7032ba Ed H*2241 printf " Can we create NetCDF-enabled binaries... "
4b2baec0be Ed H*2242 check_netcdf_libs
2243 if test "x$HAVE_NETCDF" != x ; then
b5e03e7d0e Jean*2244 DEFINES="$DEFINES -DHAVE_NETCDF"
4b2baec0be Ed H*2245 echo "yes"
2246 else
2247 echo "no"
2248 fi
991445cec7 Oliv*2249
516b08a580 jm-c 2250 if test "x$CHECK_FOR_LAPACK" = xf ; then
2251 echo " skip check for LAPACK Libs"
991445cec7 Oliv*2252 else
516b08a580 jm-c 2253 printf " Can we create LAPACK-enabled binaries... "
2254 check_lapack_libs
2255 if test "x$HAVE_LAPACK" = xt ; then
2256 echo "yes"
2257 else
2258 echo "no"
2259 fi
2260 fi
2261 if test "x$HAVE_LAPACK" = xt ; then
2262 DEFINES="$DEFINES -DHAVE_LAPACK"
2263 elif test "x$HAVE_LAPACK" = x ; then
2264 #- do not report if unset and unchecked:
2265 gm_state=`echo $gm_state | sed 's/HAVE_LAPACK//'`
991445cec7 Oliv*2266 fi
e51ecc3fef Ed H*2267
7d5fc6b559 Jean*2268 printf " Can we call FLUSH intrinsic subroutine... "
2269 check_HAVE_FLUSH
2270 if test "x$HAVE_FLUSH" = xt ; then
2271 DEFINES="$DEFINES -DHAVE_FLUSH"
2272 echo "yes"
2273 else
2274 echo "no"
2275 fi
2276
2277 DEFINES="$DEFINES $IGNORE_TIME"
ab504a3a96 Ed H*2278 if test "x$EMBED_SRC" = xt ; then
2279 build_embed_encode
2280 fi
2281 if test "x$EMBED_SRC" = xt ; then
2282 ENABLE="$ENABLE embed_files"
b5e03e7d0e Jean*2283 # DEFINES="$DEFINES -DHAVE_EMBED_SRC"
ab504a3a96 Ed H*2284 fi
2285
76c1b0ef61 Ed H*2286 printf "\n=== Setting defaults ===\n"
ab728c5fe9 Jean*2287 printf " Adding MODS directories: "
6aec5d9846 Ed H*2288 for d in $MODS ; do
2289 if test ! -d $d ; then
76c1b0ef61 Ed H*2290 echo
2291 echo "Error: MODS directory \"$d\" not found!"
6aec5d9846 Ed H*2292 exit 1
2293 else
ab728c5fe9 Jean*2294 printf "$d "
6aec5d9846 Ed H*2295 SOURCEDIRS="$SOURCEDIRS $d"
2296 INCLUDEDIRS="$INCLUDEDIRS $d"
25bb252094 Jean*2297 SOURCEDIRSMK="$SOURCEDIRSMK $d"
2298 INCLUDEDIRSMK="$INCLUDEDIRSMK $d"
6aec5d9846 Ed H*2299 fi
2300 done
2301 echo
2302
0e2704be3d Jean*2303 #if test "x${PLATFORM}" = x ; then
2304 # PLATFORM=$p_PLATFORM
2305 #fi
6aec5d9846 Ed H*2306
2307 if test "x${EXEDIR}" = x ; then
87042bad2c Ed H*2308 tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1d6dde53d4 Ed H*2309 if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
6aec5d9846 Ed H*2310 EXEDIR=../exe
2311 else
2312 EXEDIR=.
2313 fi
2314 fi
2315 if test ! -d ${EXEDIR} ; then
2316 echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!"
2317 exit 1
2318 fi
2319
2320 if test "x${TOOLSDIR}" = x ; then
2321 TOOLSDIR="$ROOTDIR/tools"
25bb252094 Jean*2322 TOOLSDIRMK='$(ROOTDIR)'"/tools"
2323 else
2324 TOOLSDIRMK=${TOOLSDIR}
6aec5d9846 Ed H*2325 fi
2326 if test ! -d ${TOOLSDIR} ; then
50c201310d Chri*2327 echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
6aec5d9846 Ed H*2328 exit 1
2329 fi
f10e3a8bdd Ed H*2330 if test "x$S64" = x ; then
a82b95c41f Ed H*2331 echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
2332 RETVAL=$?
2333 if test "x${RETVAL}" = x0 ; then
2334 S64='$(TOOLSDIR)/set64bitConst.sh'
2335 else
2336 echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
2337 RETVAL=$?
2338 if test "x${RETVAL}" = x0 ; then
2339 S64='$(TOOLSDIR)/set64bitConst.csh'
2340 else
2341 cat <<EOF
2342
2343 ERROR: neither of the two default scripts:
2344
2345 ${TOOLSDIR}/set64bitConst.sh
2346 ${TOOLSDIR}/set64bitConst.csh
2347
5be35a17af Jean*2348 are working so please check paths or specify (with \$S64) a
a82b95c41f Ed H*2349 working version of this script.
2350
2351 EOF
2352 exit 1
2353 fi
2354 fi
f10e3a8bdd Ed H*2355 fi
0c83fc374c Alis*2356 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
6aec5d9846 Ed H*2357
2358 EXECUTABLE=${EXECUTABLE:-mitgcmuv}
2359
bf318dd62d Jean*2360 # Set Standard Code Directories:
2361 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
2362 STANDARDDIRS="eesupp model"
2363 fi
2364 # if model in Standard-Code-Dir, add eesupp (needed to compile model)
2365 echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
2366 ckM=$?
2367 echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
2368 ckE=$?
5be35a17af Jean*2369 if test $ckM = 0 -a $ckE = 1 ; then
bf318dd62d Jean*2370 STANDARDDIRS="$STANDARDDIRS eesupp"
2371 fi
2372
6aec5d9846 Ed H*2373 # We have a special set of source files in eesupp/src which are
2374 # generated from some template source files. We'll make them first so
2375 # they appear as regular source code
2376 if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
2377 echo " Making source files in eesupp from templates"
149a2bf4b6 Jean*2378 ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
2379 ) > make_eesupp.errors 2>&1
6aec5d9846 Ed H*2380 RETVAL=$?
76c1b0ef61 Ed H*2381 if test "x${RETVAL}" = x0 ; then
6aec5d9846 Ed H*2382 rm -f make_eesupp.errors
2383 else
2384 echo "Error: problem encountered while building source files in eesupp:"
4666a7f4f2 Ed H*2385 cat make_eesupp.errors 1>&2
6aec5d9846 Ed H*2386 exit 1
2387 fi
2388 fi
2389
822f69f065 Ed H*2390 #same for pkg/exch2 and pkg/regrid
2391 for pdir in exch2 regrid ; do
2392 if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
2393 echo " Making source files in pkg/${pdir} from templates"
149a2bf4b6 Jean*2394 ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
2395 ) > make_${pdir}.errors 2>&1
822f69f065 Ed H*2396 RETVAL=$?
2397 if test "x${RETVAL}" = x0 ; then
2398 rm -f make_${pdir}.errors
2399 else
2400 echo "Error: problem encountered while building source files in pkg/${pdir}:"
2401 cat make_${pdir}.errors 1>&2
2402 exit 1
2403 fi
73aeb7d4dc Andr*2404 fi
822f69f065 Ed H*2405 done
73aeb7d4dc Andr*2406
76c1b0ef61 Ed H*2407 printf "\n=== Determining package settings ===\n"
a5a3c4e100 Jean*2408 if test "x${PKG_DEPEND}" = x ; then
6aec5d9846 Ed H*2409 tmp=$ROOTDIR"/pkg/pkg_depend"
a5a3c4e100 Jean*2410 if test -r $tmp ; then PKG_DEPEND=$tmp ; fi
2411 fi
2412 if test "x${PKG_DEPEND}" = x ; then
6aec5d9846 Ed H*2413 echo "Warning: No package dependency information was specified."
2414 echo " Please check that ROOTDIR/pkg/pkg_depend exists."
a5a3c4e100 Jean*2415 else
2416 if test ! -r ${PKG_DEPEND} ; then
2417 echo "Error: can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\""
2418 exit 1
6aec5d9846 Ed H*2419 fi
a5a3c4e100 Jean*2420 echo " getting package dependency info from $PKG_DEPEND"
2421 # Strip the comments and then convert the dependency file into arrays: PNAME, DNAME
2422 get_pdepend_list $PKG_DEPEND
2423 fi
2424
2425 # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided
2426 # to define the "default_pkg_list" and package groups (for convenience, one
2427 # can specify a group of packages using names like "ocean" and "atmosphere").
2428 if test "x${PKG_GROUPS}" = x ; then
2429 tmp=$ROOTDIR"/pkg/pkg_groups"
2430 if test -r $tmp ; then PKG_GROUPS=$tmp ; fi
2431 fi
2432 if test "x${PKG_GROUPS}" = x ; then
2433 echo "Warning: No package groups information was specified."
2434 echo " Please check that ROOTDIR/pkg/pkg_groups exists."
6aec5d9846 Ed H*2435 else
a5a3c4e100 Jean*2436 if test ! -r ${PKG_GROUPS} ; then
2437 echo "Error: can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\""
6aec5d9846 Ed H*2438 exit 1
2439 fi
a5a3c4e100 Jean*2440 echo " getting package groups info from $PKG_GROUPS"
6aec5d9846 Ed H*2441 fi
a5a3c4e100 Jean*2442
2443 # Search for packages to compile.
2444 echo " checking list of packages to compile:"
2445 PKG_LIST=
2446 if test "x${PKG_LIST}" = x ; then
6d54cf9ca1 Ed H*2447 for i in "." $MODS ; do
2448 if test -r $i"/packages.conf" ; then
a5a3c4e100 Jean*2449 PKG_LIST=$i"/packages.conf"
6d54cf9ca1 Ed H*2450 break
2451 fi
2452 done
2453 fi
a5a3c4e100 Jean*2454 if test "x${PKG_LIST}" = x ; then
2455 pkg_list='default_pkg_list'
2456 if test "x${PKG_GROUPS}" = x ; then
2457 echo "Error: need package groups info to expand pkg_list=\"$pkg_list\""
2458 exit 1
2459 fi
6aec5d9846 Ed H*2460 else
a5a3c4e100 Jean*2461 if test ! -r $PKG_LIST ; then
2462 echo "Error: can't read package list from PKG_LIST=\"$PKG_LIST\""
2463 exit 1
6aec5d9846 Ed H*2464 else
a5a3c4e100 Jean*2465 echo " using PKG_LIST=\"$PKG_LIST\""
36e14999eb Jean*2466 # Strip the comments and add all the names
a5a3c4e100 Jean*2467 pkg_list=`cat $PKG_LIST | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
6aec5d9846 Ed H*2468 RETVAL=$?
2469 if test "x${RETVAL}" != x0 ; then
a5a3c4e100 Jean*2470 printf "Error: can't parse package list "
2471 echo "-- please check PKG_LIST=\"$PKG_LIST\""
6aec5d9846 Ed H*2472 exit 1
2473 fi
2474 fi
2475 fi
a5a3c4e100 Jean*2476 for i in $pkg_list ; do
2477 PACKAGES="$PACKAGES $i"
2478 done
2479 echo " before group expansion packages are:$PACKAGES"
2480 if test "x${PKG_GROUPS}" != x ; then
2481 RET=1
2482 while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
2483 echo " after group expansion packages are: $PACKAGES"
2484 fi
6aec5d9846 Ed H*2485
2486 echo " applying DISABLE settings"
7deef35259 Jean*2487 echo "" > $TMP.pack
d3d6cca041 Alis*2488 for i in $PACKAGES ; do
7deef35259 Jean*2489 echo $i >> $TMP.pack
d3d6cca041 Alis*2490 done
7deef35259 Jean*2491 for i in `grep "-" $TMP.pack` ; do
d3d6cca041 Alis*2492 j=`echo $i | sed 's/[-]//'`
2493 DISABLE="$DISABLE $j"
2494 done
6aec5d9846 Ed H*2495 pack=
2496 for p in $PACKAGES ; do
2497 addit="t"
2498 for d in $DISABLE ; do
2499 if test "x$p" = "x$d" ; then
2500 addit="f"
2501 fi
2502 done
2503 if test "x$addit" = xt ; then
2504 pack="$pack $p"
2505 fi
2506 done
2507 PACKAGES="$pack"
2508 echo " applying ENABLE settings"
7deef35259 Jean*2509 echo "" > $TMP.pack
6aec5d9846 Ed H*2510 PACKAGES="$PACKAGES $ENABLE"
5b53130725 Ivan*2511 # Test if each explicitly referenced package exists
6aec5d9846 Ed H*2512 for i in $PACKAGES ; do
d3d6cca041 Alis*2513 j=`echo $i | sed 's/[-+]//'`
2514 if test ! -d "$ROOTDIR/pkg/$j" ; then
a5a3c4e100 Jean*2515 echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
776d1c0efd Jean*2516 exit 1
6aec5d9846 Ed H*2517 fi
7deef35259 Jean*2518 echo $i >> $TMP.pack
6aec5d9846 Ed H*2519 done
2520 PACKAGES=
7deef35259 Jean*2521 for i in `grep -v "-" $TMP.pack | sort | uniq` ; do
6aec5d9846 Ed H*2522 PACKAGES="$PACKAGES $i"
2523 done
7deef35259 Jean*2524 rm -f $TMP.pack
bf318dd62d Jean*2525 echo " packages are: $PACKAGES"
6aec5d9846 Ed H*2526
033a68c0be Jean*2527 # Check for packages that relies on NetCDF availability:
2528 # for package MNC: if NetCDF is available, then build the MNC template files
2529 # otherwise, delete mnc from the list of packages.
2530 # for package PROFILES and OBSFIT: if NetCDF is not available,
2531 # then remove profiles or obsfit from the list of available packages.
bf318dd62d Jean*2532 echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
033a68c0be Jean*2533 mnc_In=$?
5be35a17af Jean*2534 if test "x$HAVE_NETCDF" != xt ; then
033a68c0be Jean*2535 echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2536 profiles_In=$?
2537 echo " $PACKAGES " | grep ' obsfit ' > /dev/null 2>&1
2538 obsfit_In=$?
2539 if test "x$mnc_In" = x0 -o "x$profiles_In" = x0 -o "x$obsfit_In" = x0 ; then
2540 turnOff_pkg=1
2541 cat > $TMP.turnOff_pkg <<EOF
bee85d1689 Ed H*2542 *********************************************************************
033a68c0be Jean*2543 WARNING: the "THIS_PKG_NAME" package was enabled but tests failed to compile
bee85d1689 Ed H*2544 NetCDF applications. Please check that:
2545
2546 1) NetCDF is correctly installed for this compiler and
5be35a17af Jean*2547 2) the LIBS variable (within the "optfile") specifies the correct
bee85d1689 Ed H*2548 NetCDF library to link against.
2549
033a68c0be Jean*2550 Due to this failure, the "THIS_PKG_NAME" package is now DISABLED.
bee85d1689 Ed H*2551 *********************************************************************
2552 EOF
033a68c0be Jean*2553 else turnOff_pkg=0 ; fi
2554 if test "x$mnc_In" = x0 ; then
2555 cat $TMP.turnOff_pkg | sed 's/THIS_PKG_NAME/mnc/'
bee85d1689 Ed H*2556 PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
5be35a17af Jean*2557 fi
033a68c0be Jean*2558 if test "x$profiles_In" = x0 ; then
2559 cat $TMP.turnOff_pkg | sed 's/THIS_PKG_NAME/profiles/'
2560 PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2561 fi
2562 if test "x$obsfit_In" = x0 ; then
2563 cat $TMP.turnOff_pkg | sed 's/THIS_PKG_NAME/obsfit/'
2564 PACKAGES=`echo $PACKAGES | sed -e 's/obsfit//g'`
2565 fi
2566 # this prevent to add the pkg (due to pdepend rules) if not available
2567 DISABLE="$DISABLE mnc profiles obsfit"
2568 if [ $turnOff_pkg -eq 1 ] ; then rm -f $TMP.turnOff_pkg ; fi
5be35a17af Jean*2569 else
2570 # we have NetCDF, we try to build MNC template files
2571 ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2572 RETVAL=$?
2573 if test "x${RETVAL}" = x0 ; then
2574 rm -f make_mnc.errors
2575 else
2576 echo "Error: problem encountered while building source files in pkg/mnc:"
2577 cat make_mnc.errors 1>&2
033a68c0be Jean*2578 if test "x$mnc_In" = x0 ; then
36e14999eb Jean*2579 exit 1
bee85d1689 Ed H*2580 else
5be35a17af Jean*2581 DISABLE="$DISABLE mnc"
bee85d1689 Ed H*2582 fi
2583 fi
2584 fi
2585
b4daa24319 Shre*2586 # Make sure the tapenade package is enabled if using TAPENADE
2587 if test "x$TAPENADE" != x ; then
2588 echo " $PACKAGES " | grep ' tapenade ' > /dev/null 2>&1
2589 RETVAL=$?
2590 if test "x$RETVAL" != x0 ; then
2591 cat <<EOF
2592
2593 *********************************************************************
2594 ERROR: when generating an adjoint with TAPENADE, the tapenade package
2595 must be enabled. Please add it to packages.conf.
2596 *********************************************************************
2597
2598 EOF
2599 exit 1
2600 fi
2601 fi
2602
c5032d3931 Oliv*2603 # Make sure the openad package is enabled if using OpenAD
2604 if test "x$OPENAD" != x ; then
2605 echo " $PACKAGES " | grep ' openad ' > /dev/null 2>&1
2606 RETVAL=$?
2607 if test "x$RETVAL" != x0 ; then
2608 cat <<EOF
2609
2610 *********************************************************************
2611 ERROR: when generating an adjoint with OpenAD, the openad package
2612 must be enabled. Please add it to packages.conf.
2613 *********************************************************************
2614
2615 EOF
2616 exit 1
2617 fi
2618 fi
2619
a5a3c4e100 Jean*2620 if test "x${PKG_DEPEND}" != x ; then
2621 echo " applying package dependency rules"
2622 ck=
2623 while test "x$ck" != xtt ; do
6aec5d9846 Ed H*2624 i=0
76c1b0ef61 Ed H*2625 # rtot=${#PNAME[@]}
2626 rtot=$nname
553241f6b0 Jean*2627 while test $i -le $rtot ; do
6aec5d9846 Ed H*2628
2629 # Is $pname in the current $PACKAGES list?
76c1b0ef61 Ed H*2630 # pname=${PNAME[$i]}
2631 tmp="pname=\"\$PNAME_$i\""
2632 eval $tmp
6aec5d9846 Ed H*2633 pin="f"
2634 for p in $PACKAGES ; do
2635 if test "x$p" = "x$pname" ; then
2636 pin="t"
2637 fi
2638 done
bf318dd62d Jean*2639 # or in the current $STANDARDDIRS list?
2640 for p in $STANDARDDIRS ; do
2641 if test "x$p" = "x$pname" ; then pin="t" ; fi
2642 done
6aec5d9846 Ed H*2643
12417e3119 Jean*2644 # Is the DNAME entry a (=), (+) or (-) rule ?
76c1b0ef61 Ed H*2645 tmp="dname=\"\$DNAME_$i\""
2646 eval $tmp
12417e3119 Jean*2647 plus="a"
76c1b0ef61 Ed H*2648 echo $dname | grep '^+' > /dev/null 2>&1
6aec5d9846 Ed H*2649 RETVAL=$?
12417e3119 Jean*2650 if test "x$RETVAL" = x0 ; then plus="+" ; fi
2651 echo $dname | grep '^-' > /dev/null 2>&1
2652 RETVAL=$?
2653 if test "x$RETVAL" = x0 ; then plus="-" ; fi
6aec5d9846 Ed H*2654
2655 # Is $dname in the current $PACKAGES list?
12417e3119 Jean*2656 dname=`echo $dname | sed -e 's/^[=+-]//'`
6aec5d9846 Ed H*2657 din="f"
2658 for p in $PACKAGES ; do
2659 if test "x$p" = "x$dname" ; then
2660 din="t"
2661 fi
2662 done
2663
2664 # Do we need to add $dname according to the dependency rules?
12417e3119 Jean*2665 if test "x$pin" = xt -a "x$plus" != "x-" -a "x$din" = xf ; then
776d1c0efd Jean*2666 #echo " " $pname ": need to add :" $dname
6aec5d9846 Ed H*2667 in_dis="f"
2668 for dis in $DISABLE ; do
2669 if test "x$dis" = "x$dname" ; then
2670 in_dis="t"
2671 fi
2672 done
2673 if test "x$in_dis" = xt ; then
12417e3119 Jean*2674 if test "x$plus" = "x+" ; then
2675 echo "Error: can't satisfy package dependencies:"
2676 echo " \"$dname\" is required with pkg \"$pname\" (dependency rules)"
2677 echo " but is disallowed by the DISABLE settings"
2678 exit 1
2679 elif test "x$ck" = xt ; then
2680 #- (=) is a weaker dependency rule: warning but no stop
2681 echo "Warning: pkg \"$dname\" is set DISABLE (from: \"$PKG_LIST\")"
2682 echo -n " but is recommended with pkg \"$pname\" (dependency rules)"
2683 echo " <- ignores recommendation"
2684 fi
6aec5d9846 Ed H*2685 else
2686 PACKAGES="$PACKAGES $dname"
2687 ck=
2688 fi
2689 fi
2690
2691 # Do we need to get rid of $dname according to the dependency rules?
2692 if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
2693 echo "Error: can't satisfy package dependencies:"
12417e3119 Jean*2694 echo " \"$dname\" was requested but is disallowed by"
2695 echo " the dependency rules for \"$pname\""
6aec5d9846 Ed H*2696 exit 1
2697 fi
ef774c4a3e Jean*2698 i=`expr $i + 1`
2699 #i=`echo "$i + 1" | bc -l`
6aec5d9846 Ed H*2700 done
2701 ck=$ck"t"
a5a3c4e100 Jean*2702 done
2703 echo " packages are: $PACKAGES"
2704 fi
6aec5d9846 Ed H*2705 for i in $PACKAGES ; do
2706 adr="$ROOTDIR/pkg/$i"
25bb252094 Jean*2707 adrmk='$(ROOTDIR)'"/pkg/$i"
6aec5d9846 Ed H*2708 if test -d $adr ; then
2709 SOURCEDIRS="$SOURCEDIRS $adr"
2710 INCLUDEDIRS="$INCLUDEDIRS $adr"
25bb252094 Jean*2711 SOURCEDIRSMK="$SOURCEDIRSMK $adrmk"
2712 INCLUDEDIRSMK="$INCLUDEDIRSMK $adrmk"
668b211e58 Ed H*2713 if test "x$i" = xautodiff ; then
2714 AUTODIFF_PKG_USED=t
2715 fi
6aec5d9846 Ed H*2716 else
2717 echo "Error: the directory \"$adr\" for package $i doesn't exist"
2718 exit 1
2719 fi
2720 done
2721
6d54cf9ca1 Ed H*2722 # Create a list of #define and #undef to enable/disable packages
2723 PACKAGES_DOT_H=PACKAGES_CONFIG.h
5be35a17af Jean*2724 # The following UGLY HACK sets multiple "#undef"s and it needs to go
2725 # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
6aec5d9846 Ed H*2726 # file would eventually be split up so that all package-related #define
2727 # statements could be separated and handled only by genmake.
2728 names=`ls -1 "$ROOTDIR/pkg"`
2729 all_pack=
0c83fc374c Alis*2730 DISABLED_PACKAGES=
6aec5d9846 Ed H*2731 for n in $names ; do
2732 if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
2733 has_pack="f"
2734 for pack in $PACKAGES ; do
2735 if test "x$pack" = "x$n" ; then
2736 has_pack="t"
2737 break
2738 fi
2739 done
2740 if test "x$has_pack" = xf ; then
523cb1423f Ed H*2741 undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
776d1c0efd Jean*2742 DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
6aec5d9846 Ed H*2743 fi
2744 fi
2745 done
0c83fc374c Alis*2746 ENABLED_PACKAGES=
6aec5d9846 Ed H*2747 for i in $PACKAGES ; do
523cb1423f Ed H*2748 def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
0c83fc374c Alis*2749 ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
6d54cf9ca1 Ed H*2750 #eh3 DEFINES="$DEFINES -D$def"
6aec5d9846 Ed H*2751
2752 #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
5be35a17af Jean*2753 case $i in
6aec5d9846 Ed H*2754 aim_v23)
776d1c0efd Jean*2755 ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
a1c0f64028 Jean*2756 echo "Warning: ALLOW_AIM is set to enable aim_v23."
6aec5d9846 Ed H*2757 ;;
2758 esac
2759 #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
2760
2761 done
2762
bf318dd62d Jean*2763 echo " Adding STANDARDDIRS='$STANDARDDIRS'"
6aec5d9846 Ed H*2764 BUILDDIR=${BUILDDIR:-.}
57ace0c46a Ed H*2765 if test "x$STANDARDDIRS" != x ; then
2766 for d in $STANDARDDIRS ; do
2767 adr="$ROOTDIR/$d/src"
25bb252094 Jean*2768 adrmk='$(ROOTDIR)/'"$d/src"
57ace0c46a Ed H*2769 if test ! -d $adr ; then
2770 echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
2771 echo " is correct and that you correctly specified the STANDARDDIRS option"
2772 exit 1
2773 else
2774 SOURCEDIRS="$SOURCEDIRS $adr"
25bb252094 Jean*2775 SOURCEDIRSMK="$SOURCEDIRSMK $adrmk"
57ace0c46a Ed H*2776 fi
2777 adr="$ROOTDIR/$d/inc"
25bb252094 Jean*2778 adrmk='$(ROOTDIR)/'"$d/inc"
57ace0c46a Ed H*2779 if test ! -d $adr ; then
2780 echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
2781 echo " is correct and that you correctly specified the STANDARDDIRS option"
2782 exit 1
2783 else
2784 INCLUDEDIRS="$INCLUDEDIRS $adr"
25bb252094 Jean*2785 INCLUDEDIRSMK="$INCLUDEDIRSMK $adrmk"
57ace0c46a Ed H*2786 fi
2787 done
2788 fi
6aec5d9846 Ed H*2789
40f7a33215 Alis*2790 echo " Searching for *OPTIONS.h files in order to warn about the presence"
2791 echo " of \"#define \"-type statements that are no longer allowed:"
6d54cf9ca1 Ed H*2792 CPP_OPTIONS=
40f7a33215 Alis*2793 CPP_EEOPTIONS=
6d54cf9ca1 Ed H*2794 spaths=". $INCLUDEDIRS"
40f7a33215 Alis*2795 names=`ls -1 "$ROOTDIR/pkg"`
6d54cf9ca1 Ed H*2796 for i in $spaths ; do
2797 try="$i/CPP_OPTIONS.h"
5e1b06e200 Ed H*2798 if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
6d54cf9ca1 Ed H*2799 echo " found CPP_OPTIONS=\"$try\""
2800 CPP_OPTIONS="$try"
776d1c0efd Jean*2801 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
2802 for n in $names ; do
2803 test_for_package_in_cpp_options $CPP_OPTIONS $n
2804 done
40f7a33215 Alis*2805 fi
2806 try="$i/CPP_EEOPTIONS.h"
5e1b06e200 Ed H*2807 if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
40f7a33215 Alis*2808 echo " found CPP_EEOPTIONS=\"$try\""
776d1c0efd Jean*2809 # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
40f7a33215 Alis*2810 #**** not yet enabled ****
2811 # test_for_mpi_in_cpp_eeoptions $try
2812 #**** not yet enabled ****
2813 CPP_EEOPTIONS="$try"
6d54cf9ca1 Ed H*2814 fi
2815 done
2816 if test "x$CPP_OPTIONS" = x ; then
2817 echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
2818 exit 1
2819 fi
6aec5d9846 Ed H*2820
ea893758ea Patr*2821 # Here, we build the list of files to be "run through" the adjoint compiler.
2822 # split this list between F77 and F90 src code:
668b211e58 Ed H*2823 echo " Creating the list of files for the adjoint compiler."
ea893758ea Patr*2824 test -f $TMP.adSrcFiles && rm -f $TMP.adSrcFiles
2825 test -f $TMP.adF90Files && rm -f $TMP.adF90Files
5b53130725 Ivan*2826 touch $TMP.adSrcFiles $TMP.adF90Files
668b211e58 Ed H*2827 for i in $SOURCEDIRS ; do
0524b7d1ff Mart*2828 list_files=`( cd $i && ls -1 *_ad_diff.list 2>/dev/null )`
668b211e58 Ed H*2829 for j in $list_files ; do
8908c6917c Jean*2830 grep '\.f\>' $i/$j | sed 's/\.f/.F/' >> $TMP.adSrcFiles
5b53130725 Ivan*2831 # Retain file paths for topo sorting later
8908c6917c Jean*2832 grep '\.f90\>' $i/$j | sed 's/\.f90/.F90/' | while IFS= read -r line; do
5b53130725 Ivan*2833 echo "$i/$line" >> $TMP.adF90Files
2834 done
668b211e58 Ed H*2835 done
2836 done
5b53130725 Ivan*2837 # Sort in topological order the list of f90 files to send to adjoint compiler
2838 sort_file_list_from_used_modules $TMP.adF90Files
4b2baec0be Ed H*2839
76c1b0ef61 Ed H*2840 echo
2841 echo "=== Creating the Makefile ==="
6aec5d9846 Ed H*2842 echo " setting INCLUDES"
2843 for i in $INCLUDEDIRS ; do
1d6dde53d4 Ed H*2844 if test ! -d $i ; then
6aec5d9846 Ed H*2845 echo "Warning: can't find INCLUDEDIRS=\"$i\""
2846 fi
2847 done
2848
7783960e4d Jean*2849 if test ! "x$DIVA" = x -a ! "x$MPI" = x ; then
cd15dc9a7a Jean*2850 if test ! "x$MPIINCLUDEDIR" = x ; then
fea3e7d209 Jean*2851 # Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
2852 # checking for additional included headers (in case of chain of included
2853 # header); also set LOCAL_MPI_HEADERS (if not already set)
5b53130725 Ivan*2854 mpi_headers_do_local_copy
29eb399fd0 Cons*2855 fi
2856 fi
2857
6aec5d9846 Ed H*2858 echo " Determining the list of source and include files"
7deef35259 Jean*2859 rm -rf $TMP.links
2860 mkdir $TMP.links
2861 touch $TMP.links/foo
2862 if test ! -r "$TMP.links/foo" ; then
5709a39825 Ed H*2863 echo
2864 echo "ERROR : something is wrong with your directory permissions or"
2865 echo " your user file-creation mask (\"umask\") since creating a"
2866 echo " sub-dir, touch-ing a file within it, and then reading it is"
2867 echo " not working. Please try setting your umask to something"
2868 echo " sane such as:"
2869 echo
2870 echo " umask 0002"
2871 echo
2872 echo " and please verify that you have the proper permissions for"
2873 echo " creating sub-directories and then reading files created"
2874 echo " within them."
2875 echo
2876 exit 1
2877 fi
7deef35259 Jean*2878 rm -f $TMP.links/foo
5bd7f28048 Jean*2879
b4daa24319 Shre*2880 if test "x$TAPENADE" != x ; then
2881 TAP_DONT_TRANSFORM="/dev/null"
2882 TAPTOOLS="$TOOLSDIR/TAP_support"
2883 echo " looking for dontTransform file: "
2884 for i in "." $MODS $TAPTOOLS ; do
2885 if test -r $i"/dontTransform" ; then
2886 TAP_DONT_TRANSFORM=$i"/dontTransform"
2887 echo " found $TAP_DONT_TRANSFORM"
2888 break
2889 fi
2890 done
2891 echo " TAPENADE exceptions: "
2892 fi
2893
5be35a17af Jean*2894 if test "x$OPENAD" != x ; then
5bd7f28048 Jean*2895 OAD_DONT_COMPILE="/dev/null"
2896 OAD_DONT_TRANSFORM="/dev/null"
2897 OAD_KEEP_ORIGINAL="/dev/null"
2898 OAD_CB2M_FILES="/dev/null"
8702af1f36 Patr*2899 OADTOOLS="$TOOLSDIR/OAD_support"
25bb252094 Jean*2900 OADTOOLSMK='$(TOOLSDIR)/OAD_support'
5bd7f28048 Jean*2901 echo " looking for dontCompile file: "
595aad8523 Patr*2902 for i in "." $MODS $OADTOOLS ; do
5bd7f28048 Jean*2903 if test -r $i"/dontCompile" ; then
2904 OAD_DONT_COMPILE=$i"/dontCompile"
2905 echo " found $OAD_DONT_COMPILE"
2906 break
2907 fi
2908 done
2909 echo " looking for dontTransform file: "
595aad8523 Patr*2910 for i in "." $MODS $OADTOOLS ; do
5bd7f28048 Jean*2911 if test -r $i"/dontTransform" ; then
2912 OAD_DONT_TRANSFORM=$i"/dontTransform"
2913 echo " found $OAD_DONT_TRANSFORM"
2914 break
2915 fi
2916 done
2917 echo " looking for keepOriginal file: "
595aad8523 Patr*2918 for i in "." $MODS $OADTOOLS ; do
5bd7f28048 Jean*2919 if test -r $i"/keepOriginal" ; then
2920 OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2921 echo " found $OAD_KEEP_ORIGINAL"
2922 break
2923 fi
2924 done
2925 echo " looking for cb2mFiles: "
595aad8523 Patr*2926 for i in "." $MODS $OADTOOLS ; do
5bd7f28048 Jean*2927 if test -r $i"/cb2mFiles" ; then
2928 OAD_CB2M_FILES=$i"/cb2mFiles"
2929 echo " found $OAD_CB2M_FILES"
2930 break
2931 fi
2932 done
2933 echo " OpenAD exceptions: "
2934 fi
2935
7deef35259 Jean*2936 echo "# This section creates symbolic links" > $TMP.srclinks
2937 echo "" >> $TMP.srclinks
2938 printf 'F77_SRC_FILES = ' > $TMP.F77srclist
2939 printf 'F90_SRC_FILES = ' > $TMP.F90srclist
8908c6917c Jean*2940 printf 'C_SRC_FILES = ' > $TMP.csrclist
7deef35259 Jean*2941 printf 'H_SRC_FILES = ' > $TMP.hsrclist
2942 printf 'AD_FLOW_FILES = ' > $TMP.ad_flow_files
8908c6917c Jean*2943 printf 'NON_AD_F77_SRC_FILES = ' > $TMP.nonADF77srclist
2944 printf 'NON_AD_F90_SRC_FILES = ' > $TMP.nonADF90srclist
d119ddb592 Alis*2945 alldirs="$SOURCEDIRS $INCLUDEDIRS ."
25bb252094 Jean*2946 alldirsmk=(${SOURCEDIRSMK} ${INCLUDEDIRSMK} ".")
2947 nd=0
6aec5d9846 Ed H*2948 for d in $alldirs ; do
25bb252094 Jean*2949 dmk=${alldirsmk[${nd}]}
2950 nd=$((${nd}+1))
6aec5d9846 Ed H*2951 deplist=
668b211e58 Ed H*2952 sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
27c9249c85 Chri*2953 sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
b4daa24319 Shre*2954 if test "x$TAPENADE" != x ; then
2955 sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2956 fi
5be35a17af Jean*2957 if test "x$OPENAD" != x ; then
5bd7f28048 Jean*2958 sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2959 fi
6aec5d9846 Ed H*2960 for sf in $sfiles ; do
7deef35259 Jean*2961 if test ! -r "$TMP.links/$sf" ; then
6aec5d9846 Ed H*2962 if test -f "$d/$sf" ; then
f7f6e70984 Ed H*2963 ignore_f=f
776d1c0efd Jean*2964 case $d/$sf in
2965 ./$PACKAGES_DOT_H)
ab504a3a96 Ed H*2966 ignore_f=t
0c83fc374c Alis*2967 ;;
776d1c0efd Jean*2968 ./AD_CONFIG.h)
ab504a3a96 Ed H*2969 ignore_f=t
0c83fc374c Alis*2970 ;;
776d1c0efd Jean*2971 ./FC_NAMEMANGLE.h)
ab504a3a96 Ed H*2972 ignore_f=t
0c83fc374c Alis*2973 ;;
776d1c0efd Jean*2974 ./BUILD_INFO.h)
ab504a3a96 Ed H*2975 ignore_f=t
2976 ;;
776d1c0efd Jean*2977 ./EMBEDDED_FILES.h)
ab504a3a96 Ed H*2978 ignore_f=t
f79257694d Ed H*2979 ;;
776d1c0efd Jean*2980 *)
f7f6e70984 Ed H*2981 # For the local directory *ONLY*,
2982 # ignore all soft-links
2983 if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2984 ignore_f=t
2985 else
7deef35259 Jean*2986 touch $TMP.links/$sf
f7f6e70984 Ed H*2987 deplist="$deplist $sf"
2988 fi
0c83fc374c Alis*2989 ;;
776d1c0efd Jean*2990 esac
f7f6e70984 Ed H*2991 if test "x$ignore_f" = xf ; then
2992 extn=`echo $sf | $AWK -F. '{print $NF}'`
ea893758ea Patr*2993 # this is built-in bash and does not rely on $AWK :
2994 # extn=${sf##*.}
f7f6e70984 Ed H*2995 case $extn in
5bd7f28048 Jean*2996 F)
7deef35259 Jean*2997 echo " \\" >> $TMP.F77srclist
2998 printf " $sf" >> $TMP.F77srclist
b4daa24319 Shre*2999
8908c6917c Jean*3000 if test "x$TAPENADE" = x -a "x$OPENAD" = x ; then
3001 #- default: neither Tapenade nor OpenAD
3002 isAD=`grep "^$sf\>" $TMP.adSrcFiles`
3003 if test -z "$isAD" ; then
3004 echo " \\" >> $TMP.nonADF77srclist
3005 printf " $sf" >> $TMP.nonADF77srclist
3006 fi
3007 fi
b4daa24319 Shre*3008 if test "x$TAPENADE" != x ; then
8908c6917c Jean*3009 #- Tapenade case:
3010 isAD=`grep "^$sf\>" $TMP.adSrcFiles`
b4daa24319 Shre*3011 if test -z "$isAD" ; then
8908c6917c Jean*3012 echo " \\" >> $TMP.nonADF77srclist
3013 printf " $sf" >> $TMP.nonADF77srclist
3014 else # file is initially listed as an AD file we want to exclude
3015 notToBeTransformed=`grep "^$sf\>" ${TAP_DONT_TRANSFORM}`
3016 if test -n "$notToBeTransformed" ; then
b4daa24319 Shre*3017 echo " not to be transformed: $sf"
3018 echo " \\" >> $TMP.nonADF77srclist
3019 printf " $sf" >> $TMP.nonADF77srclist
3020 fi
3021 fi
3022 fi
8908c6917c Jean*3023 if test "x$OPENAD" != x ; then
3024 #- OpenAD case:
7783960e4d Jean*3025 basename=${sf%%.F}
8908c6917c Jean*3026 isAD=`grep "^$sf\>" $TMP.adSrcFiles`
5be35a17af Jean*3027 if test -z "$isAD" ; then
fbb692b4e1 Jean*3028 toBeIgnored=`grep ^$basename'\>' ${OAD_DONT_COMPILE}`
5be35a17af Jean*3029 if test -z "$toBeIgnored" ; then
7deef35259 Jean*3030 echo " \\" >> $TMP.nonADF77srclist
3031 printf " $sf" >> $TMP.nonADF77srclist
5be35a17af Jean*3032 else
5bd7f28048 Jean*3033 echo " not to be compiled : $sf"
3034 fi
5be35a17af Jean*3035 else # file is initially listed as an AD file we want to exclude it
5bd7f28048 Jean*3036 # or we want to retain the untransformed version
fbb692b4e1 Jean*3037 notToBeTransformed=`grep ^$basename'\>' ${OAD_DONT_TRANSFORM}`
3038 untransformedVersionToBeKept=`grep ^$basename ${OAD_KEEP_ORIGINAL}`
5be35a17af Jean*3039 if test -n "$notToBeTransformed"; then
5bd7f28048 Jean*3040 echo " not to be transformed: $sf"
3041 fi
3042 if test -n "$untransformedVersionToBeKept" ; then
3043 echo " original to be kept : $sf"
5be35a17af Jean*3044 fi
5bd7f28048 Jean*3045 if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
7deef35259 Jean*3046 echo " \\" >> $TMP.nonADF77srclist
3047 printf " $sf" >> $TMP.nonADF77srclist
5bd7f28048 Jean*3048 fi
3049 fi
3050 fi
3051 ;;
3052 F90)
ea893758ea Patr*3053 echo " \\" >> $TMP.F90srclist
7deef35259 Jean*3054 printf " $sf" >> $TMP.F90srclist
ea893758ea Patr*3055 if ( test "x$OPENAD" = x && test "x$TAPENADE" = x ) ; then
8908c6917c Jean*3056 isAD=`grep "^$sf\>" $TMP.adF90Files`
ea893758ea Patr*3057 if test -z "$isAD" ; then
3058 echo " \\" >> $TMP.nonADF90srclist
3059 printf " $sf" >> $TMP.nonADF90srclist
3060 fi
3061 fi
5bd7f28048 Jean*3062 ;;
3063 c)
7deef35259 Jean*3064 echo " \\" >> $TMP.csrclist
3065 printf " $sf" >> $TMP.csrclist
5bd7f28048 Jean*3066 ;;
3067 h)
7deef35259 Jean*3068 echo " \\" >> $TMP.hsrclist
3069 printf " $sf" >> $TMP.hsrclist
5bd7f28048 Jean*3070 ;;
776d1c0efd Jean*3071 flow)
7deef35259 Jean*3072 echo " \\" >> $TMP.ad_flow_files
3073 printf " $sf" >> $TMP.ad_flow_files
5bd7f28048 Jean*3074 ;;
3075 esac
3076 fi
6aec5d9846 Ed H*3077 fi
3078 fi
3079 done
3080 if test "x$deplist" != x ; then
5bd7f28048 Jean*3081 if test "$d" != "." ; then
7deef35259 Jean*3082 echo "" >> $TMP.srclinks
25bb252094 Jean*3083 echo "# These files are linked from $dmk ( aka $d )" >> $TMP.srclinks
7deef35259 Jean*3084 echo "$deplist :" >> $TMP.srclinks
8908c6917c Jean*3085 # We need to make sure that the link isn't already there.
3086 # This may happen when make thinks that a header file has to be "remade"
3087 # because a module it depends on has changed. In this case we do nothing.
25bb252094 Jean*3088 printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $dmk >> $TMP.srclinks
5bd7f28048 Jean*3089 fi
6aec5d9846 Ed H*3090 fi
3091 done
7deef35259 Jean*3092 rm -rf $TMP.links
3093 echo "" >> $TMP.F77srclist
3094 echo "" >> $TMP.F90srclist
8908c6917c Jean*3095 echo "" >> $TMP.csrclist
7deef35259 Jean*3096 echo "" >> $TMP.hsrclist
3097 echo "" >> $TMP.ad_flow_files
8908c6917c Jean*3098 echo "" >> $TMP.nonADF77srclist
3099 echo "" >> $TMP.nonADF90srclist
6aec5d9846 Ed H*3100
0ec5c8a391 Jean*3101 CMDLINE=$0
3102 for xx in "$@" ; do nw=`echo $xx | wc -w`
3103 if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
36e14999eb Jean*3104 else CMDLINE="$CMDLINE '$xx'" ; fi
0ec5c8a391 Jean*3105 done
3106
355771feeb Ed H*3107 if test -f $MAKEFILE ; then
bf318dd62d Jean*3108 mv -f $MAKEFILE "$MAKEFILE.old"
6aec5d9846 Ed H*3109 fi
3110 echo " Writing makefile: $MAKEFILE"
3111 echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
3112 echo "# $MACHINE" >> $MAKEFILE
3113 echo "# This makefile was generated automatically on" >> $MAKEFILE
3114 echo "# $THISDATE" >> $MAKEFILE
3115 echo "# by the command:" >> $MAKEFILE
0ec5c8a391 Jean*3116 echo "# $CMDLINE" >> $MAKEFILE
6aec5d9846 Ed H*3117 echo "# executed by:" >> $MAKEFILE
9a263a84a8 Ed H*3118 echo "# ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
74d4132da5 Ed H*3119
b4daa24319 Shre*3120 if test "x$TAPENADE" = x ; then
3121 EXE_ADJ=$EXECUTABLE"_ad"
3122 EXE_TLM=$EXECUTABLE"_ftl"
3123 else
3124 EXE_ADJ=$EXECUTABLE"_tap_adj"
3125 EXE_TLM=$EXECUTABLE"_tap_tlm"
3126 fi
74d4132da5 Ed H*3127 EXE_SVD=$EXECUTABLE"_svd"
3128
6aec5d9846 Ed H*3129 cat >>$MAKEFILE <<EOF
0058ae90fe Ed H*3130 #
3131 # OPTFILE="$OPTFILE"
bf318dd62d Jean*3132 #
6aec5d9846 Ed H*3133 # BUILDDIR : Directory where object files are written
3134 # SOURCEDIRS : Directories containing the source (.F) files
3135 # INCLUDEDIRS : Directories containing the header-source (.h) files
3136 # EXEDIR : Directory where executable that is generated is written
3137 # EXECUTABLE : Full path of executable binary
3138 #
3139 # CPP : C-preprocessor command
3140 # INCLUDES : Directories searched for header files
3141 # DEFINES : Macro definitions for CPP
3142 # MAKEDEPEND : Dependency generator
3143 # FC : Fortran compiler command
3144 # FFLAGS : Configuration/debugging options for FC
3145 # FOPTIM : Optimization options for FC
3146 # LINK : Command for link editor program
3147 # LIBS : Library flags /or/ additional optimization/debugging flags
3148
3149 ROOTDIR = ${ROOTDIR}
bf318dd62d Jean*3150 BUILDDIR = ${BUILDDIR}
25bb252094 Jean*3151 SOURCEDIRS = ${SOURCEDIRSMK}
3152 INCLUDEDIRS = ${INCLUDEDIRSMK}
6aec5d9846 Ed H*3153 EXEDIR = ${EXEDIR}
3154 EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
25bb252094 Jean*3155 TOOLSDIR = ${TOOLSDIRMK}
3156 OADTOOLS = ${OADTOOLSMK}
6aec5d9846 Ed H*3157
668b211e58 Ed H*3158 #eh3 new defines for the adjoint work
25bb252094 Jean*3159 AUTODIFF = \$(ROOTDIR)/pkg/autodiff
b4daa24319 Shre*3160 EXE_ADJ = ${EXE_ADJ}
3161 EXE_TLM = ${EXE_TLM}
74d4132da5 Ed H*3162 EXE_SVD = ${EXE_SVD}
668b211e58 Ed H*3163
0c83fc374c Alis*3164 ENABLED_PACKAGES = ${ENABLED_PACKAGES}
3165 DISABLED_PACKAGES = ${DISABLED_PACKAGES}
3166
40f7a33215 Alis*3167 # These files are created by Makefile
9a263a84a8 Ed H*3168 SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
6aec5d9846 Ed H*3169 EOF
3170
ab504a3a96 Ed H*3171 if test "x$EMBED_SRC" = xt ; then
3172 echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
3173 else
3174 echo "EMBEDDED_FILES = " >>$MAKEFILE
3175 fi
3176
bc2c9aac73 Oliv*3177 # extract default cpp search path so we can pass it to makedepend
d220271442 Oliv*3178 CPPINCLUDES=`cat /dev/null | $CPP -v 2>&1 | $AWK '/^End of search/{f=0}!/^#/{if(f){printf " -I%s", $1;}}/^#include "..." search start/{f=1}'`
bc2c9aac73 Oliv*3179
6aec5d9846 Ed H*3180 cat >>$MAKEFILE <<EOF
3181 # Unix ln (link)
3182 LN = ${LN}
3183 # Dependency generator
3184 MAKEDEPEND = ${MAKEDEPEND}
3185 # Special preprocessor (KAP on DECs, FPP on Crays)
3186 KPP = ${KPP}
3187 # Fortran compiler
89c0a4365c Ed H*3188 FC = ${FC}
27c9249c85 Chri*3189 # Fortran compiler
3190 F90C = ${F90C}
dec9692aba Ed H*3191 # C compiler
3192 CC = ${CC}
6aec5d9846 Ed H*3193 # Link editor
e129bec2de Ed H*3194 LINK = ${LINK} ${LDADD}
6aec5d9846 Ed H*3195
3196 # Defines for CPP
3197 DEFINES = ${DEFINES}
3198 # Includes for CPP
3199 INCLUDES = ${INCLUDES}
bc2c9aac73 Oliv*3200 # default CPP includes for makedepend
3201 CPPINCLUDES = ${CPPINCLUDES}
6aec5d9846 Ed H*3202 # Flags for KPP
3203 KFLAGS1 = ${KFLAGS1}
3204 KFLAGS2 = ${KFLAGS2}
3205 # Optim./debug for FC
052caf96de Mart*3206 FFLAGS = ${FFLAGS}
3207 FOPTIM = ${FOPTIM} ${FEXTRAFLAGS}
27c9249c85 Chri*3208 # Optim./debug for FC
3209 F90FLAGS = ${F90FLAGS}
3210 F90OPTIM = ${F90OPTIM}
5bd7f28048 Jean*3211 F90FIXEDFORMAT = ${F90FIXEDFORMAT}
6aec5d9846 Ed H*3212 # Flags for CC
3213 CFLAGS = ${CFLAGS}
3214 # Files that should not be optimized
3215 NOOPTFILES = ${NOOPTFILES}
3216 NOOPTFLAGS = ${NOOPTFLAGS}
3217 # Flags and libraries needed for linking
395713ae01 Ed H*3218 LIBS = ${LIBS}
18371f2c52 Jean*3219 # Name of the makefile
621623385c Jean*3220 MAKEFILE = ${MAKEFILE}
3221 # Name of the make program
3222 MAKE = ${MAKE}
6aec5d9846 Ed H*3223
3224 EOF
3225
7deef35259 Jean*3226 cat $TMP.F77srclist >> $MAKEFILE
3227 cat $TMP.F90srclist >> $MAKEFILE
8908c6917c Jean*3228 cat $TMP.csrclist >> $MAKEFILE
7deef35259 Jean*3229 cat $TMP.hsrclist >> $MAKEFILE
3230 cat $TMP.ad_flow_files >> $MAKEFILE
5bd7f28048 Jean*3231
8908c6917c Jean*3232 rm -f $TMP.F77srclist $TMP.F90srclist $TMP.csrclist $TMP.hsrclist $TMP.ad_flow_files
5bd7f28048 Jean*3233
5bb11ad8a0 Ed H*3234 echo >> $MAKEFILE
5bd7f28048 Jean*3235
bf318dd62d Jean*3236 # add definitions for preprocessed sources
3237 # and note that not all systems allow case sensitive extensions
3238 # hence the $FS and $FS90 here.
3239 # for fixed format f90 files we use ff90 or FF90 resp
5bd7f28048 Jean*3240 # but these are not expected to be the original source files
3241
5b53130725 Ivan*3242 echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')' >> $MAKEFILE
5bd7f28048 Jean*3243 echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
5b53130725 Ivan*3244 echo 'OBJFILES= $(F90_SRC_FILES:.F90=.o) $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o)' >> $MAKEFILE
b4daa24319 Shre*3245
5bb11ad8a0 Ed H*3246 echo >> $MAKEFILE
3247 echo '.SUFFIXES:' >> $MAKEFILE
71b7a3e5ac Mart*3248 echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flow' >> $MAKEFILE
6aec5d9846 Ed H*3249
3250 cat >>$MAKEFILE <<EOF
3251
621623385c Jean*3252 all: fwd_exe_target
3253 fwd_exe_target:
3254 @echo Update AD_CONFIG.h and make \$(EXECUTABLE)
3255 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Forward version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template
3256 @cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3257 @-rm -f ad_config.template
3258 \$(MAKE) -f \$(MAKEFILE) \$(EXECUTABLE)
3259
5b53130725 Ivan*3260 \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F90_SRC_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
0c83fc374c Alis*3261 @echo Creating \$@ ...
6aec5d9846 Ed H*3262 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
dd9f72a48c Jean*3263
6aec5d9846 Ed H*3264 depend:
621623385c Jean*3265 @\$(MAKE) -f \$(MAKEFILE) links
bc2c9aac73 Oliv*3266 \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(CPPINCLUDES) \$(F77_SRC_FILES)
f79ba37af1 Mart*3267 \$(MAKEDEPEND) -f \$(MAKEFILE) -a -o .$FS90 \$(DEFINES) \$(INCLUDES) \$(CPPINCLUDES) \$(F90_SRC_FILES)
95cd2dedde Ivan*3268 \$(TOOLSDIR)/f90mkdepend -fs $FS -fs90 $FS90 >> \$(MAKEFILE)
c55c6693ee Ed H*3269 -rm -f makedepend.out
5b53130725 Ivan*3270 EOF
3271 if test $CAT_SRC_FOR_TAF = 0 ; then
3272 echo " -touch $DEP_TAF_FILE" >> $MAKEFILE
3273 echo " -echo 'include $DEP_TAF_FILE' >> \$(MAKEFILE)" >> $MAKEFILE
3274 fi
3275 cat >>$MAKEFILE <<EOF
6aec5d9846 Ed H*3276
04be54cff9 Chri*3277 lib: libmitgcmuv.a
3278
25bb252094 Jean*3279 libmitgcmuv.a: \$(SPECIAL_FILES) \$(OBJFILES)
04be54cff9 Chri*3280 ar rcv libmitgcmuv.a \$(OBJFILES)
3a8b237fcd Chri*3281 ar d libmitgcmuv.a main.o
04be54cff9 Chri*3282
dd9f72a48c Jean*3283 obj: \$(OBJFILES)
3284
5b53130725 Ivan*3285 links: \$(F90_SRC_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(SPECIAL_FILES)
6aec5d9846 Ed H*3286
5b53130725 Ivan*3287 small_f: \$(F90_PP_SRC_FILES) \$(F77_PP_SRC_FILES)
6aec5d9846 Ed H*3288
6206da1394 Jean*3289 # remove most of the files that "make" generates
6aec5d9846 Ed H*3290 clean:
f68e8310e6 Patr*3291 -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
3292 -rm -rf *.o
71b7a3e5ac Mart*3293 -rm -rf *.$FS
45de16ddcf Jean*3294 -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
6206da1394 Jean*3295
3296 # remove most of the files that "make" and "make depend" generate
6aec5d9846 Ed H*3297 Clean:
621623385c Jean*3298 @\$(MAKE) -f \$(MAKEFILE) clean
3299 @\$(MAKE) -f \$(MAKEFILE) cleanlinks
71b7a3e5ac Mart*3300 -rm -rf *.flowdir
fa507bf6a3 Jean*3301 -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old
b9626ac20f Jean*3302 -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log taf_ftl.log
5b53130725 Ivan*3303 EOF
3304 if test $CAT_SRC_FOR_TAF = 0 ; then
3305 cat >>$MAKEFILE <<EOF
8908c6917c Jean*3306 -sed -i.tmp "/^include $DEP_TAF_FILE/d" \$(MAKEFILE) && rm -f $DEP_TAF_FILE \$(MAKEFILE).tmp
5b53130725 Ivan*3307 -rm -f taf_ad.f90 taf_tl.f90 f90mkdepend_taf.log
3308 EOF
3309 fi
3310 cat >>$MAKEFILE <<EOF
6206da1394 Jean*3311
3312 # remove also the executable, files that "genmake2" generates (except Makefile)
683b8f029b Jean*3313 # and output from a run (plus log files from testreport)
6aec5d9846 Ed H*3314 CLEAN:
621623385c Jean*3315 @\$(MAKE) -f \$(MAKEFILE) Clean
b4daa24319 Shre*3316 -rm -f \$(EXECUTABLE) \$(EXE_ADJ) \$(EXE_TLM) *.bak
8d24b8817c Jean*3317 -rm -f $LOGFILE genmake_state genmake_*optfile
3318 -rm -f SIZE.h.mpi genmake.tr_log make.tr_log
fea3e7d209 Jean*3319 -rm -rf mpi_headers mnc_test_*
6aec5d9846 Ed H*3320 -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
3321 -find \$(EXEDIR) -name "*.data" -exec rm {} \;
3322 -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
bafb387432 Jean*3323 -rm -f *.txt STDOUT.* STDERR.* *diagnostics.log *.[0-9][0-9][0-9][0-9].log
3324 -rm -f datetime costfinal divided.ctrl snapshot* output_adm.txt.diva_*
3325 -rm -f *_MIT_CE_000.opt0000 costfunction*0000
cd15dc9a7a Jean*3326 -rm -f oad_cp.[0-9][0-9][0-9].?????
6aec5d9846 Ed H*3327
3328 makefile:
6aefb07181 Ed H*3329 $THIS_SCRIPT $G2ARGS
6aec5d9846 Ed H*3330 cleanlinks:
3331 -find . -type l -exec rm {} \;
3332
5bd7f28048 Jean*3333 # Special targets (SPECIAL_FILES) which are created by make
0c83fc374c Alis*3334 ${PACKAGES_DOT_H}:
3335 @echo Creating \$@ ...
621623385c Jean*3336 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
0c83fc374c Alis*3337 AD_CONFIG.h:
3338 @echo Creating \$@ ...
621623385c Jean*3339 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Default version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > \$@
40f7a33215 Alis*3340 FC_NAMEMANGLE.h:
3341 @echo Creating \$@ ...
3342 echo "$FC_NAMEMANGLE" > \$@
0c83fc374c Alis*3343
9a263a84a8 Ed H*3344 BUILD_INFO.h:
3345 @echo Creating \$@ ...
3346 EOF
3347
3348 test ! "x$THISVER" = x && echo " -echo \"#define THISVER '$THISVER'\" > \$@" >> $MAKEFILE
3349 test ! "x$THISUSER" = x && echo " -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
3350 test ! "x$THISDATE" = x && echo " -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
3351 test ! "x$THISHOST" = x && echo " -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
3352
ab504a3a96 Ed H*3353 if test "x$EMBED_SRC" = xt ; then
3354 cat >>$MAKEFILE <<EOF
3355
3356 decode_files.o : EMBEDDED_FILES.h
3357
bf318dd62d Jean*3358 ## \$(F77_PP_SRC_FILES)
5bd7f28048 Jean*3359 all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
ab504a3a96 Ed H*3360 @echo Creating \$@ ...
5bd7f28048 Jean*3361 -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
ab504a3a96 Ed H*3362 -rm -f all_fF.tar.gz
3363 -gzip all_fF.tar
3364
3365 EMBEDDED_FILES.h : all_fF.tar.gz
3366 @echo Creating \$@ ...
3367 -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
3368
3369 EOF
3370 fi
3371
9a263a84a8 Ed H*3372 cat >>$MAKEFILE <<EOF
3373
3eb03232c2 Ed H*3374 # The normal chain of rules is ( .F - .$FS - .o )
3375
7a76cc695e Ed H*3376 ## This nullifies any default implicit rules concerning these two file types:
3af519cc10 Jean*3377 ## %.o : %.F
3eb03232c2 Ed H*3378
7d5fc6b559 Jean*3379 # C preprocessing and replacing the _d in constants:
5158aa0815 Jean*3380 CPPCMD = cat \$< | ${CPP} \$(DEFINES) \$(INCLUDES) | ${S64}
3381
3eb03232c2 Ed H*3382 .F.$FS:
5158aa0815 Jean*3383 \$(CPPCMD) > \$@
3eb03232c2 Ed H*3384 .$FS.o:
6aec5d9846 Ed H*3385 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
23f21461eb Jean*3386 .F.o:
3387 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
5bd7f28048 Jean*3388 .F90.$FS90:
5158aa0815 Jean*3389 \$(CPPCMD) > \$@
5bd7f28048 Jean*3390 .FF90.f$FS90:
5158aa0815 Jean*3391 \$(CPPCMD) > \$@
5bd7f28048 Jean*3392 .$FS90.o:
27c9249c85 Chri*3393 \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
5bd7f28048 Jean*3394 .f$FS90.o:
5b53130725 Ivan*3395 cp \$< \$(basename \$<).$FS90
3396 \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename \$<).$FS90
6aec5d9846 Ed H*3397 .c.o:
29eb399fd0 Cons*3398 \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
6aec5d9846 Ed H*3399
3eb03232c2 Ed H*3400 # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
3401 .F.p:
5158aa0815 Jean*3402 \$(CPPCMD) > \$@
3eb03232c2 Ed H*3403 .p.$FS:
6aec5d9846 Ed H*3404 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
3405
5bd7f28048 Jean*3406 EOF
3407
668b211e58 Ed H*3408 #=========================================
3409 #=== Automatic Differentiation Rules ===
b7b61e618a Mart*3410 #=== for TAF ===========================
5bd7f28048 Jean*3411
8908c6917c Jean*3412 if test "x$TAPENADE" = x -a "x$OPENAD" = x ; then
5bd7f28048 Jean*3413
3414 cat >>$MAKEFILE <<EOF
668b211e58 Ed H*3415
8908c6917c Jean*3416 TAF = ${TAF}
3417 TAF_EXTRA = ${TAF_EXTRA}
3418 TAF_F77_FLAGS = ${TAF_F77_FLAGS}
3419 TAF_F90_FLAGS = ${TAF_F90_FLAGS}
b7b61e618a Mart*3420 LOCAL_MPI_HEADERS = ${LOCAL_MPI_HEADERS}
0c0e61146f Ed H*3421
668b211e58 Ed H*3422 EOF
3423
b7b61e618a Mart*3424 ad_vars="AD_TAF_FLAGS FTL_TAF_FLAGS SVD_TAF_FLAGS"
668b211e58 Ed H*3425 for i in $ad_vars ; do
3426 name=$i
36459526ba Ed H*3427 t1="t2=\$"`echo "$i"`
668b211e58 Ed H*3428 eval $t1
8908c6917c Jean*3429 printf "%-13s = " $name >> $MAKEFILE
36459526ba Ed H*3430 echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
668b211e58 Ed H*3431 done
3432
3433 echo " Add the source list for AD code generation"
3434 echo >> $MAKEFILE
13fa7032ba Ed H*3435 printf "AD_FILES = " >> $MAKEFILE
8908c6917c Jean*3436 AD_FILES=`cat $TMP.adSrcFiles | sed "s/\.F/.$FS/g"`
668b211e58 Ed H*3437 for i in $AD_FILES ; do
0524b7d1ff Mart*3438 echo " \\" >> $MAKEFILE
13fa7032ba Ed H*3439 printf " $i" >> $MAKEFILE
668b211e58 Ed H*3440 done
3441 echo >> $MAKEFILE
ea893758ea Patr*3442 printf "AD_F90FILES = " >> $MAKEFILE
8908c6917c Jean*3443 AD_F90FILES=`cat $TMP.adF90Files | sed "s/\.F90/.$FS90/g"`
ea893758ea Patr*3444 for i in $AD_F90FILES ; do
0524b7d1ff Mart*3445 echo " \\" >> $MAKEFILE
ea893758ea Patr*3446 printf " $i" >> $MAKEFILE
3447 done
3448 echo >> $MAKEFILE
8908c6917c Jean*3449 rm -f $TMP.adSrcFiles $TMP.adF90Files
3450 cat $TMP.nonADF77srclist >> $MAKEFILE
3451 cat $TMP.nonADF90srclist >> $MAKEFILE
3452 rm -f $TMP.nonADF77srclist $TMP.nonADF90srclist
3453 echo >> $MAKEFILE
44f4a23ebb Jean*3454
668b211e58 Ed H*3455 cat >>$MAKEFILE <<EOF
eb2bbeeb07 Ed H*3456 # ... AD ...
621623385c Jean*3457 adall: ad_exe_target
e1583c94d9 Ed H*3458 adtaf: ad_taf_output.$FS
74d4132da5 Ed H*3459
621623385c Jean*3460 ad_exe_target:
b4daa24319 Shre*3461 @echo Update AD_CONFIG.h and make \$(EXE_ADJ)
75237bea41 Jean*3462 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template0
3463 @cmp ad_config.template0 AD_CONFIG.h || cat ad_config.template0 > AD_CONFIG.h
3464 @-rm -f ad_config.template0
b4daa24319 Shre*3465 \$(MAKE) -f \$(MAKEFILE) \$(EXE_ADJ)
621623385c Jean*3466
8908c6917c Jean*3467 EOF
3468
3469 if test $CAT_SRC_FOR_TAF = 1 ; then
3470 cat >>$MAKEFILE <<EOF
7783960e4d Jean*3471 ad_input_code.$FS: \$(AD_FILES) \$(AD_FLOW_FILES)
75237bea41 Jean*3472 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template1
3473 cmp ad_config.template1 AD_CONFIG.h || cat ad_config.template1 > AD_CONFIG.h
3474 @-rm -f ad_config.template1
621623385c Jean*3475 @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES)
71b7a3e5ac Mart*3476 cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
4a967b9107 Ed H*3477
ea893758ea Patr*3478 EOF
3479
3480 if test -z "$AD_F90FILES" ; then
44f4a23ebb Jean*3481 cat >>$MAKEFILE <<EOF
3482 # ... send 1 file to TAF ...
3483 ad_taf_output.$FS: ad_input_code.$FS
3484 @-rm -f ad_input_code_ad.$FS ; echo ''
5b53130725 Ivan*3485 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) -fixed \$(TAF_F77_FLAGS) ad_input_code.$FS
20ef1172ff Jean*3486 ls -l ad_input_code_ad.$FS
e1583c94d9 Ed H*3487 cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
405822b4f9 Patr*3488
5b53130725 Ivan*3489 \$(EXE_ADJ): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3490 \$(LINK) -o \${EXE_ADJ} \$(FFLAGS) \$(FOPTIM) ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
668b211e58 Ed H*3491
5b53130725 Ivan*3492 adobj: ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
668b211e58 Ed H*3493
44f4a23ebb Jean*3494 EOF
ea893758ea Patr*3495 else
3496 cat >>$MAKEFILE <<EOF
8908c6917c Jean*3497 ad_inpF90_code.$FS90: \$(AD_F90FILES) \$(AD_FLOW_FILES)
75237bea41 Jean*3498 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template2
3499 cmp ad_config.template2 AD_CONFIG.h || cat ad_config.template2 > AD_CONFIG.h
3500 @-rm -f ad_config.template2
8908c6917c Jean*3501 @\$(MAKE) -f \$(MAKEFILE) \$(F90_PP_SRC_FILES)
3502 cat \$(AD_F90FILES) > ad_inpF90_code.$FS90
3503
ea893758ea Patr*3504 # ... send 1 fixed format file and 1 free format file to TAF ...
5b53130725 Ivan*3505 ad_taf_output.$FS: ad_inpF90_code.$FS90 ad_input_code.$FS
3506 @-rm -f ad_inpF90_code_ad.$FS90 ad_input_code_ad.$FS ; echo ''
3507 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) -free \$(TAF_F90_FLAGS) ad_inpF90_code.$FS90 -fixed \$(TAF_F77_FLAGS) ad_input_code.$FS
3508 ls -l ad_inpF90_code_ad.$FS90 ad_input_code_ad.$FS
ea893758ea Patr*3509 cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
3510
3511 # We need the extra target for ad_taf_outpF90.$FS90, because the file is
3512 # generated together with ad_taf_output.$FS.
3513 ad_taf_outpF90.$FS90: ad_taf_output.$FS
3514 cat ad_inpF90_code_ad.$FS90 > ad_taf_outpF90.$FS90
3515
5b53130725 Ivan*3516 \$(EXE_ADJ): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_outpF90.o ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3517 \$(LINK) -o \${EXE_ADJ} \$(FFLAGS) \$(FOPTIM) ad_taf_outpF90.o ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
ea893758ea Patr*3518
5b53130725 Ivan*3519 adobj: ad_taf_outpF90.o ad_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
ea893758ea Patr*3520
3521 EOF
3522 fi
668b211e58 Ed H*3523
44f4a23ebb Jean*3524 else
3525 cat >>$MAKEFILE <<EOF
3526 # ... send multiple files to TAF ...
8908c6917c Jean*3527 adobjfiles: \$(AD_F90FILES:.$FS90=_ad.o) \$(AD_FILES:.$FS=_ad.o)
5b53130725 Ivan*3528
3529 ad_taf_output.$FS: \$(AD_FLOW_FILES) \$(AD_F90FILES) \$(AD_FILES)
75237bea41 Jean*3530 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template1
3531 cmp ad_config.template1 AD_CONFIG.h || cat ad_config.template1 > AD_CONFIG.h
3532 @-rm -f ad_config.template1
5b53130725 Ivan*3533 @\$(MAKE) -f \$(MAKEFILE) \$(F90_PP_SRC_FILES) \$(F77_PP_SRC_FILES)
8908c6917c Jean*3534 sed -i.bak -f \$(TOOLSDIR)/remove_comments_sed \$(AD_FILES)
3535 @-rm -f \$(AD_F90FILES:.$FS90=_ad.$FS90) \$(AD_FILES:.$FS=_ad.$FS) \$(AD_FILES:.$FS=.$FS.bak); echo ''
5b53130725 Ivan*3536 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) -free \$(TAF_F90_FLAGS) \$(AD_F90FILES) -fixed \$(TAF_F77_FLAGS) \$(AD_FLOW_FILES) \$(AD_FILES)
8908c6917c Jean*3537 ls -l the_main_loop_ad.$FS
3538 sed -i.bak -f \$(TOOLSDIR)/adjoint_sed \$(AD_FILES:.$FS=_ad.$FS)
3539 @-rm -f \$(AD_FILES:.$FS=_ad.$FS.bak)
3540 \$(TOOLSDIR)/f90mkdepend_taf $DEP_TAF_FILE \$(AD_F90FILES:.$FS90=_ad.$FS90) \$(AD_FILES:.$FS=_ad.$FS)
3541 touch ad_taf_output.$FS
44f4a23ebb Jean*3542
5b53130725 Ivan*3543 \$(EXE_ADJ): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_output.$FS \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
b3a874fe30 Jean*3544 \$(MAKE) -f \$(MAKEFILE) adobjfiles
5b53130725 Ivan*3545 \$(LINK) -o \${EXE_ADJ} \$(FFLAGS) \$(FOPTIM) \$(AD_F90FILES:.$FS90=_ad.o) \$(AD_FILES:.$FS=_ad.o) \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
44f4a23ebb Jean*3546
5b53130725 Ivan*3547 adobj: ad_taf_output.$FS \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
b3a874fe30 Jean*3548 \$(MAKE) -f \$(MAKEFILE) adobjfiles
44f4a23ebb Jean*3549
3550 EOF
3551 fi
3552
3924ebfa1b Mart*3553 cat >>$MAKEFILE <<EOF
0f20d21780 Ed H*3554 # ... FTL ...
621623385c Jean*3555 ftlall: ftl_exe_target
e1583c94d9 Ed H*3556 ftltaf: ftl_taf_output.$FS
74d4132da5 Ed H*3557
621623385c Jean*3558 ftl_exe_target:
b4daa24319 Shre*3559 @echo Update AD_CONFIG.h and make \$(EXE_TLM)
75237bea41 Jean*3560 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "TangLin version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template0
3561 @cmp ad_config.template0 AD_CONFIG.h || cat ad_config.template0 > AD_CONFIG.h
3562 @-rm -f ad_config.template0
b4daa24319 Shre*3563 \$(MAKE) -f \$(MAKEFILE) \$(EXE_TLM)
621623385c Jean*3564
0524b7d1ff Mart*3565 EOF
5b53130725 Ivan*3566
8908c6917c Jean*3567 if test $CAT_SRC_FOR_TAF = 1 ; then
0524b7d1ff Mart*3568 cat >>$MAKEFILE <<EOF
8908c6917c Jean*3569 ftl_input_code.$FS: \$(AD_FILES) \$(AD_FLOW_FILES)
75237bea41 Jean*3570 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "TangLin version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template1
3571 cmp ad_config.template1 AD_CONFIG.h || cat ad_config.template1 > AD_CONFIG.h
3572 @-rm -f ad_config.template1
8908c6917c Jean*3573 @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES)
3574 cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS
0524b7d1ff Mart*3575
3576 EOF
44f4a23ebb Jean*3577
0524b7d1ff Mart*3578 if test -z "$AD_F90FILES" ; then
44f4a23ebb Jean*3579 cat >>$MAKEFILE <<EOF
3580 # ... send 1 file to TAF ...
3581 ftl_taf_output.$FS: ftl_input_code.$FS
3582 @-rm -f ftl_input_code_tl.$FS ; echo ''
5b53130725 Ivan*3583 \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) -fixed \$(TAF_F77_FLAGS) ftl_input_code.$FS
09f59bbc00 Patr*3584 ls -l ftl_input_code_tl.$FS
3585 cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
0b6ffb4e9b Patr*3586
5b53130725 Ivan*3587 \$(EXE_TLM): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3588 \$(LINK) -o \${EXE_TLM} \$(FFLAGS) \$(FOPTIM) ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
668b211e58 Ed H*3589
5b53130725 Ivan*3590 ftlobj: ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
c59dd234b1 Jean*3591
44f4a23ebb Jean*3592 EOF
0524b7d1ff Mart*3593 else
3594 cat >>$MAKEFILE <<EOF
8908c6917c Jean*3595 ftl_inpF90_code.$FS90: \$(AD_F90FILES) \$(AD_FLOW_FILES)
75237bea41 Jean*3596 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "TangLin version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template2
3597 cmp ad_config.template2 AD_CONFIG.h || cat ad_config.template2 > AD_CONFIG.h
3598 @-rm -f ad_config.template2
8908c6917c Jean*3599 @\$(MAKE) -f \$(MAKEFILE) \$(F90_PP_SRC_FILES)
3600 cat \$(AD_F90FILES) > ftl_inpF90_code.$FS90
3601
0524b7d1ff Mart*3602 # ... send 1 fixed format file and 1 free format file to TAF ...
5b53130725 Ivan*3603 ftl_taf_output.$FS: ftl_inpF90_code.$FS90 ftl_input_code.$FS
3604 @-rm -f ftl_inpF90_code_tl.$FS90 ftl_input_code_tl.$FS ; echo ''
3605 \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) -free \$(TAF_F90_FLAGS) ftl_inpF90_code.$FS90 -fixed \$(TAF_F77_FLAGS) ftl_input_code.$FS
3606 ls -l ftl_inpF90_code_tl.$FS90 ftl_input_code_tl.$FS
0524b7d1ff Mart*3607 cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
3608
3609 # We need the extra target for ftl_taf_outpF90.$FS90, because the file is
3610 # generated together with ftl_taf_output.$FS.
3611 ftl_taf_outpF90.$FS90: ftl_taf_output.$FS
3612 cat ftl_inpF90_code_tl.$FS90 > ftl_taf_outpF90.$FS90
3613
5b53130725 Ivan*3614 \$(EXE_TLM): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_outpF90.o ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3615 \$(LINK) -o \${EXE_TLM} \$(FFLAGS) \$(FOPTIM) ftl_taf_outpF90.o ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
0524b7d1ff Mart*3616
5b53130725 Ivan*3617 ftlobj: ftl_taf_outpF90.o ftl_taf_output.o \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
0524b7d1ff Mart*3618
3619 EOF
3620 fi
44f4a23ebb Jean*3621
3622 else
3623 cat >>$MAKEFILE <<EOF
3624 # ... send multiple files to TAF ...
8908c6917c Jean*3625 ftlobjfiles: \$(AD_F90FILES:.$FS90=_tl.o) \$(AD_FILES:.$FS=_tl.o)
5b53130725 Ivan*3626
3627 ftl_taf_output.$FS: \$(AD_FLOW_FILES) \$(AD_F90FILES) \$(AD_FILES)
75237bea41 Jean*3628 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "TangLin version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template1
3629 cmp ad_config.template1 AD_CONFIG.h || cat ad_config.template1 > AD_CONFIG.h
3630 @-rm -f ad_config.template1
5b53130725 Ivan*3631 @\$(MAKE) -f \$(MAKEFILE) \$(F90_PP_SRC_FILES) \$(F77_PP_SRC_FILES)
8908c6917c Jean*3632 sed -i.bak -f \$(TOOLSDIR)/remove_comments_sed \$(AD_FILES)
3633 @-rm -f \$(AD_F90FILES:.$FS90=_tl.$FS90) \$(AD_FILES:.$FS=_tl.$FS) \$(AD_FILES:.$FS=.$FS.bak); echo ''
5b53130725 Ivan*3634 \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) -free \$(TAF_F90_FLAGS) \$(AD_F90FILES) -fixed \$(TAF_F77_FLAGS) \$(AD_FLOW_FILES) \$(AD_FILES)
8908c6917c Jean*3635 ls -l the_main_loop_tl.$FS
3636 sed -i.bak -f \$(TOOLSDIR)/adjoint_sed \$(AD_FILES:.$FS=_tl.$FS)
3637 @-rm -f \$(AD_FILES:.$FS=_tl.$FS.bak)
3638 \$(TOOLSDIR)/f90mkdepend_taf $DEP_TAF_FILE \$(AD_F90FILES:.$FS90=_tl.$FS90) \$(AD_FILES:.$FS=_tl.$FS)
3639 touch ftl_taf_output.$FS
44f4a23ebb Jean*3640
5b53130725 Ivan*3641 \$(EXE_TLM): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_output.$FS \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
b3a874fe30 Jean*3642 \$(MAKE) -f \$(MAKEFILE) ftlobjfiles
5b53130725 Ivan*3643 \$(LINK) -o \${EXE_TLM} \$(FFLAGS) \$(FOPTIM) \$(AD_F90FILES:.$FS90=_tl.o) \$(AD_FILES:.$FS=_tl.o) \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
44f4a23ebb Jean*3644
5b53130725 Ivan*3645 ftlobj: ftl_taf_output.$FS \$(NON_AD_F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o)
c59dd234b1 Jean*3646 \$(MAKE) -f \$(MAKEFILE) ftlobjfiles
3647
44f4a23ebb Jean*3648 EOF
3649 fi
3650
8908c6917c Jean*3651 if test $CAT_SRC_FOR_TAF = 1 ; then
44f4a23ebb Jean*3652 cat >>$MAKEFILE <<EOF
eb2bbeeb07 Ed H*3653 # ... SVD ...
e1583c94d9 Ed H*3654 svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
fdbd521b91 Patr*3655 @echo "--->>> Only ran TAF to generate SVD code! <<<---"
3656 @echo "--->>> Do make svdall afterwards to compile. <<<---"
3657 svdall: svd_touch svd_taf
eb2bbeeb07 Ed H*3658
fdbd521b91 Patr*3659 svd_taf: \$(OBJFILES)
0b6ffb4e9b Patr*3660 \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
668b211e58 Ed H*3661
fdbd521b91 Patr*3662 @echo "--->>> Only COMPILE svd code! <<<---"
3663 @echo "--->>> Assumes you previously <<<---"
3664 @echo "--->>> did make svdtaf <<<---"
3665
3666 svd_touch:
3667 @echo "--->>> Only COMPILE svd code! <<<---"
3668 @echo "--->>> Assumes you previously <<<---"
3669 @echo "--->>> did make svdtaf <<<---"
e1583c94d9 Ed H*3670 touch ad_taf_output.$FS ftl_taf_output.$FS
3671 \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
3672 \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
621623385c Jean*3673 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "SVD version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template
3674 cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3675 @-rm -f ad_config.template
668b211e58 Ed H*3676
5bd7f28048 Jean*3677 EOF
5be35a17af Jean*3678 fi
8908c6917c Jean*3679
b4daa24319 Shre*3680 fi
3681
3682 #=== for TAPENADE ========================
3683
3684 if test "x$TAPENADE" != x ; then
3685
3686 # ============ begin TAPENADE specific section ==============
3687
3688 cat >>$MAKEFILE <<EOF
3689 # ========== begin TAPENADE specific section ==============
626c6ac944 Jean*3690
b4daa24319 Shre*3691 EOF
3692
3693 echo " Add the source list for AD code generation"
3694 printf "AD_FILES = " >> $MAKEFILE
3695 AD_FILES=`cat $TMP.adSrcFiles`
3696 for i in $AD_FILES ; do
8908c6917c Jean*3697 toBeIgnored=`grep "^$i\>" ${TAP_DONT_TRANSFORM}`
b4daa24319 Shre*3698 if test -z "$toBeIgnored" ; then
8908c6917c Jean*3699 echo " \\" >> $MAKEFILE
626c6ac944 Jean*3700 printf " $i" | sed "s/\.F/.$FS/" >> $MAKEFILE
b4daa24319 Shre*3701 fi
3702 done
3703 echo >> $MAKEFILE
8908c6917c Jean*3704 rm -f $TMP.adSrcFiles $TMP.adF90Files
626c6ac944 Jean*3705 if test $CAT_SRC_FOR_TAF = 0 ; then
3706 cat $TMP.nonADF77srclist >> $MAKEFILE
8908c6917c Jean*3707 #cat $TMP.nonADF90srclist >> $MAKEFILE
626c6ac944 Jean*3708 fi
8908c6917c Jean*3709 rm -f $TMP.nonADF77srclist $TMP.nonADF90srclist
b4daa24319 Shre*3710
3711 cat >>$MAKEFILE <<EOF
3712
6a9e386e2e dngo*3713 TAP_EXTRA = ${TAP_EXTRA}
b4daa24319 Shre*3714 TAPENADECMD = ${TAPENADECMD}
6a9e386e2e dngo*3715 TAPENADE_FLAGS = ${TAPENADE_FLAGS}
b4daa24319 Shre*3716
3717 TAPENADE_SUPPORT_F90_SRC_FILES = \
0ecb64d391 Jean*3718 \$(TOOLSDIR)/TAP_support/diffsizes.F90
b4daa24319 Shre*3719
3720 f95_test_mods.f90: \$(TAPENADE_SUPPORT_F90_SRC_FILES)
3721 cat \$^ > \$@
626c6ac944 Jean*3722
b4daa24319 Shre*3723 AD_FILES_ADJ=\$(AD_FILES:.$FS=_b.f)
3724 AD_FILES_TLM=\$(AD_FILES:.$FS=_d.f)
626c6ac944 Jean*3725
3726 AD_CLEAN = \$(AD_FILES_ADJ) \$(AD_FILES_TLM) *.f~ *.msg *.msg~ f95_test_mods.f90
b4daa24319 Shre*3727
3728 tap_adj: ad_exe_target
3729 ad_exe_target:
3730 @echo Update AD_CONFIG.h and make \$(EXE_ADJ)
3731 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template
3732 @cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3733 @-rm -f ad_config.template
3734 \$(MAKE) -f \$(MAKEFILE) \$(EXE_ADJ)
3735
3736 tap_tlm: tlm_exe_target
3737 tlm_exe_target:
3738 @echo Update AD_CONFIG.h and make \$(EXE_TLM)
3739 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Tangent linear version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN > ad_config.template
3740 @cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3741 @-rm -f ad_config.template
3742 \$(MAKE) -f \$(MAKEFILE) \$(EXE_TLM)
3743
626c6ac944 Jean*3744 EOF
3745
3746 if test $CAT_SRC_FOR_TAF = 1 ; then
3747 #-- cat all AD/TL Subroutine files into a single file (-> compile 1 file):
3748
3749 cat >>$MAKEFILE <<EOF
3750 adj_tap_all.$FS: \$(AD_FILES) f95_test_mods.f90
6a9e386e2e dngo*3751 \$(TAPENADECMD) -b \$(TAP_EXTRA) \$(TAPENADE_FLAGS) \$(AD_FILES) f95_test_mods.f90
626c6ac944 Jean*3752 cat \$(AD_FILES_ADJ) > adj_tap_all.$FS 2> /dev/null || true
3753
3754 tlm_tap_all.$FS: \$(AD_FILES) f95_test_mods.f90
6a9e386e2e dngo*3755 \$(TAPENADECMD) -d \$(TAP_EXTRA) \$(TAPENADE_FLAGS) \$(AD_FILES) f95_test_mods.f90
626c6ac944 Jean*3756 cat \$(AD_FILES_TLM) > tlm_tap_all.$FS 2> /dev/null || true
3757
3758 \$(EXE_ADJ): \$(SPECIAL_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES) adj_tap_all.$FS
3759 \$(MAKE) -f \$(MAKEFILE) adj_tap_all.o
3760 @echo Creating \$@ ...
3761 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) adj_tap_all.o \$(LIBS)
3762
3763 \$(EXE_TLM): \$(SPECIAL_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES) tlm_tap_all.$FS
3764 \$(MAKE) -f \$(MAKEFILE) tlm_tap_all.o
3765 @echo Creating \$@ ...
3766 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) tlm_tap_all.o \$(LIBS)
3767
3768 EOF
3769 else
3770 #-- append FWD S/R file to AD/TL Subroutine file (-> compile multiple files):
3771
3772 cat >>$MAKEFILE <<EOF
3773 adj_tap_all.$FS: \$(AD_FILES) f95_test_mods.f90
3774 @-rm -f \$(AD_FILES_ADJ)
6a9e386e2e dngo*3775 \$(TAPENADECMD) -b \$(TAP_EXTRA) \$(TAPENADE_FLAGS) \$(AD_FILES) f95_test_mods.f90
626c6ac944 Jean*3776 ls -l the_main_loop_b.f
3777 @$BASH\$(TOOLSDIR)/TAP_support/append_fwd_src _b $FS \$(AD_FILES)
3778 touch adj_tap_all.$FS
3779
3780 tlm_tap_all.$FS: \$(AD_FILES) f95_test_mods.f90
3781 @-rm -f \$(AD_FILES_TLM)
6a9e386e2e dngo*3782 \$(TAPENADECMD) -d \$(TAP_EXTRA) \$(TAPENADE_FLAGS) \$(AD_FILES) f95_test_mods.f90
626c6ac944 Jean*3783 ls -l the_main_loop_d.f
3784 @$BASH\$(TOOLSDIR)/TAP_support/append_fwd_src _d $FS \$(AD_FILES)
3785 touch tlm_tap_all.$FS
3786
3787 \$(EXE_ADJ): \$(SPECIAL_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) \$(EMBEDDED_FILES) adj_tap_all.$FS
3788 \$(MAKE) -f \$(MAKEFILE) \$(AD_FILES_ADJ:.f=.o)
b4daa24319 Shre*3789 @echo Creating \$@ ...
626c6ac944 Jean*3790 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(AD_FILES_ADJ:.f=.o) \$(LIBS)
8908c6917c Jean*3791
626c6ac944 Jean*3792 \$(EXE_TLM): \$(SPECIAL_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) \$(EMBEDDED_FILES) tlm_tap_all.$FS
3793 \$(MAKE) -f \$(MAKEFILE) \$(AD_FILES_TLM:.f=.o)
b4daa24319 Shre*3794 @echo Creating \$@ ...
626c6ac944 Jean*3795 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(F90_SRC_FILES:.F90=.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(C_SRC_FILES:.c=.o) \$(AD_FILES_TLM:.f=.o) \$(LIBS)
b4daa24319 Shre*3796
626c6ac944 Jean*3797 EOF
3798 fi
3799
3800 cat >>$MAKEFILE <<EOF
b4daa24319 Shre*3801 # ============ end TAPENADE specific section ==============
3802
3803 EOF
3804
3805 fi
5bd7f28048 Jean*3806
3807 #=== for OpenAD ========================
3808
5be35a17af Jean*3809 if test "x$OPENAD" != x ; then
5bd7f28048 Jean*3810
3811 # ============ begin OpenAD specific section ==============
3812
3813 cat >>$MAKEFILE <<EOF
fc13640ec0 Jean*3814 # ... OpenAD ...
5bd7f28048 Jean*3815
5be35a17af Jean*3816 # all the source files linked from the various locations:
5bd7f28048 Jean*3817 ALL_LINKED_FILES= \
3818 \$(F77_SRC_FILES) \
3819 \$(C_SRC_FILES) \
3820 \$(H_SRC_FILES) \
3821 \$(F90_SRC_FILES) \
3822 \$(SPECIAL_FILES)
3823
9d0c386f0c dngo*3824 EOF
3825
3826 if test "x$SINGULARITYFILE" != x ; then
3827 # run OpenAD commands in singularity container with standard paths
3828 cat >>$MAKEFILE <<EOF
3829 SINGULARITYCMD = singularity exec ${SINGULARITYFILE}
3830 export SINGULARITYENV_LD_LIBRARY_PATH=/OpenAD//Open64/osprey1.0/targ_ia64_ia64_linux/whirl2f/
3831 export OPENADROOT=/OpenAD
3832 export XAIFBOOSTERROOT=/OpenAD/xaifBooster/..
3833 export XAIFSCHEMAROOT=/OpenAD/xaif
3834 export OPENADFORTTK_BASE=/OpenAD/OpenADFortTk
3835 export OPEN64ROOT=/OpenAD/Open64/osprey1.0/targ_ia64_ia64_linux
3836 export OPENADFORTTK=/OpenAD/OpenADFortTk/OpenADFortTk-x86_64-Linux
3837
3838 EOF
3839 else
3840 # run OpenAD directly
3841 cat >>$MAKEFILE <<EOF
3842 SINGULARITYCMD =
3843
3844 EOF
3845 fi
3846
3847 cat >>$MAKEFILE <<EOF
5bd7f28048 Jean*3848 ifndef OPENADROOT
3849 \$(error "Error: environment variable OPENADROOT not defined!")
3850 endif
3851
3852 ifndef XAIFSCHEMAROOT
3853 \$(error "Error: environment variable XAIFSCHEMAROOT not defined!")
3854 endif
3855
3856 ifndef XAIFBOOSTERROOT
3857 \$(error "Error: environment variable XAIFBOOSTERROOT not defined!")
3858 endif
71a0839232 Chri*3859
3860 EOF
3861
5bd7f28048 Jean*3862 echo " Add the source list for common block to module conversion "
3863 echo >> $MAKEFILE
3864 printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
3865 for i in `cat ${OAD_CB2M_FILES}` ; do
3866 echo " \\" >> $MAKEFILE
3867 printf " $i" >> $MAKEFILE
3868 done
3869 echo >> $MAKEFILE
3870
3871 echo " Add the source list for AD code generation"
3872 echo >> $MAKEFILE
3873 printf "AD_FILES = " >> $MAKEFILE
3874 for i in `cat ${OAD_CB2M_FILES}` ; do
3875 echo " \\" >> $MAKEFILE
3876 printf " ${i}_mod.f$FS90" >> $MAKEFILE
3877 done
8908c6917c Jean*3878 AD_FILES=`cat $TMP.adSrcFiles | sed "s/\.F/.f/g"`
5bd7f28048 Jean*3879 for i in $AD_FILES ; do
3880 basename=${i%%.f}
fbb692b4e1 Jean*3881 toBeIgnored=`grep ^$basename'\>' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
5bd7f28048 Jean*3882 if test -z "$toBeIgnored" ; then
3883 echo " \\" >> $MAKEFILE
3884 printf " $i" >> $MAKEFILE
3885 fi
3886 done
3887 echo >> $MAKEFILE
8908c6917c Jean*3888 rm -f $TMP.adSrcFiles $TMP.adF90Files
3889 cat $TMP.nonADF77srclist >> $MAKEFILE
3890 rm -f $TMP.nonADF77srclist $TMP.nonADF90srclist
5bd7f28048 Jean*3891
3892 cat >>$MAKEFILE <<EOF
3893
fc13640ec0 Jean*3894 adAll: ad_exe_target
5bd7f28048 Jean*3895 .PHONY: adAll
3896
fc13640ec0 Jean*3897 ad_exe_target:
b4daa24319 Shre*3898 @echo Update AD_CONFIG.h and make \$(EXE_ADJ)
fc13640ec0 Jean*3899 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template
3900 @cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3901 @-rm -f ad_config.template
b4daa24319 Shre*3902 \$(MAKE) -f \$(MAKEFILE) \$(EXE_ADJ)
fc13640ec0 Jean*3903
5bd7f28048 Jean*3904 CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
3905
3906 .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
3907
3908 .PHONY: adDepend
3909 adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
c62d6c2ba9 Jean*3910 \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
95cd2dedde Ivan*3911 \$(TOOLSDIR)/f90mkdepend -fs $FS -fs90 $FS90 >> \$(MAKEFILE)
5bd7f28048 Jean*3912 -rm -f makedepend.out
3913
3914 OPENAD_SUPPORT_F90_SRC_FILES = \
3915 w2f__types.F90 \
3916 OAD_active.F90 \
3917 OAD_cp.F90 \
3918 OAD_rev.F90 \
b6f3d01b24 Jean*3919 OAD_tape.F90 \
279dc77b07 Patr*3920 OAD_regular_cp.F90 \
b6f3d01b24 Jean*3921 revolve.F90
5bd7f28048 Jean*3922
3923 OPENAD_SUPPORT_C_SRC_FILES = \
3924 iaddr.c \
3925 timeRatio.c
3926
3927 f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3928 cat \$^ > \$@
3929
5be35a17af Jean*3930 f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
5bd7f28048 Jean*3931 cat \$^ > \$@
3932
3933 f95_test.out: f95_test_mods.f90 f95_test.f90
3934 f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3935 f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3936
0e81c91d99 Jean*3937 CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
5bd7f28048 Jean*3938
0e81c91d99 Jean*3939 AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) OAD_intrinsics_oad.o \$(CB2M_AD_FILES:.f$FS90=_oad.o)
45de16ddcf Jean*3940
3941 AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)
3942
b4daa24319 Shre*3943 \$(EXE_ADJ): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S2)
45de16ddcf Jean*3944 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
5bd7f28048 Jean*3945
0e81c91d99 Jean*3946 # create sources files modules from header files containing common blocks
25bb252094 Jean*3947 %_mod.FF90 : %.h \$(OADTOOLS)/cb2mGetModules.csh \$(OADTOOLS)/cb2mGetModules.awk
3948 \$(OADTOOLS)/cb2mGetModules.csh $< \$(OADTOOLS)/cb2mGetModules.awk
5bd7f28048 Jean*3949
776d1c0efd Jean*3950 # create new header files with USE statements for the new modules made above
25bb252094 Jean*3951 %_mod.h : %.h \$(OADTOOLS)/cb2mGetHeaders.csh \$(OADTOOLS)/cb2mGetHeaders.awk
3952 \$(OADTOOLS)/cb2mGetHeaders.csh $< \$(OADTOOLS)/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
5bd7f28048 Jean*3953
0e81c91d99 Jean*3954 # change the include directives of everybody to refer to the new header files with the USE statements
25bb252094 Jean*3955 %_cb2m.FF90 : %.F \$(OADTOOLS)/cb2mUseModules.bash
3956 \$(OADTOOLS)/cb2mUseModules.bash $< ${MPI}
5bd7f28048 Jean*3957
3958 # makefile debug rule
3959 small_f: \$(CB2M_F90_PP_SRC_FILES)
3960 .PHONY: small_f
3961
0684e64a42 Jean*3962 ad_input_code.f$FS90: \$(CB2M_AD_FILES)
5bd7f28048 Jean*3963 cat \$^ > \$@
3964
3965 # canonicalizer
776d1c0efd Jean*3966 ad_input_code_sf.pre.f90 : \$(CB2M_AD_FILES)
9d0c386f0c dngo*3967 \${SINGULARITYCMD} \${OPENADFORTTK_BASE}/tools/SourceProcessing/preProcess.py --timing --r8 -H -S -o \$@ \$^
0e81c91d99 Jean*3968
3969 # replace stop statements (to avoid the implied unstructured control flow) with print statements
3970 ad_input_code_sf.pre.s2p.f90 : ad_input_code_sf.pre.f90
25bb252094 Jean*3971 cat \$< | sed -f \$(OADTOOLS)/stop2print.sed > ad_input_code_sf.pre.s2p.f90
5bd7f28048 Jean*3972
3973 # F -> WHIRL
0e81c91d99 Jean*3974 ad_input_code_sf.pre.s2p.B: ad_input_code_sf.pre.s2p.f90
9d0c386f0c dngo*3975 \${SINGULARITYCMD} \${OPEN64ROOT}/crayf90/sgi/mfef90 -r8 -z -F ad_input_code_sf.pre.s2p.f90
5bd7f28048 Jean*3976
3977 # WHIRL -> XAIF
776d1c0efd Jean*3978 ad_input_code_sf.pre.s2p.xaif : ad_input_code_sf.pre.s2p.B
9d0c386f0c dngo*3979 \${SINGULARITYCMD} \${OPENADFORTTK}/bin/whirl2xaif -s -n --debug 1 -o \$@ \$<
5bd7f28048 Jean*3980
3981 # XAIF -> XAIF'
776d1c0efd Jean*3982 ad_input_code_sf.pre.s2p.xb.xaif : ad_input_code_sf.pre.s2p.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd
9d0c386f0c dngo*3983 \${SINGULARITYCMD} \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
5bd7f28048 Jean*3984
3985 # XAIF' -> WHIRL'
776d1c0efd Jean*3986 ad_input_code_sf.pre.s2p.xb.x2w.B : ad_input_code_sf.pre.s2p.xb.xaif
9d0c386f0c dngo*3987 \${SINGULARITYCMD} \${OPENADFORTTK}/bin/xaif2whirl --debug 1 ad_input_code_sf.pre.s2p.B \$<
5bd7f28048 Jean*3988
3989 # WHIRL' -> F'
776d1c0efd Jean*3990 ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS90: ad_input_code_sf.pre.s2p.xb.x2w.B
9d0c386f0c dngo*3991 \${SINGULARITYCMD} \${OPEN64ROOT}/whirl2f/whirl2f -FLIST:ftn_file=\$@ -openad \$<
5bd7f28048 Jean*3992
3993 # insert template directives
25bb252094 Jean*3994 ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS90 \$(OADTOOLS)/insertTemplateDir.bash
3995 \$(OADTOOLS)/insertTemplateDir.bash \$< \$@
5bd7f28048 Jean*3996
25bb252094 Jean*3997 PPEXTRAS=\$(notdir \$(wildcard \$(OADTOOLS)/ad_template.*.F)) ad_inline.F
5bd7f28048 Jean*3998 # postprocess F'
0e81c91d99 Jean*3999 postProcess.tag: ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90 \$(PPEXTRAS:.F=.f) | w2f__types.f90
9d0c386f0c dngo*4000 \${SINGULARITYCMD} \${OPENADFORTTK_BASE}/tools/SourceProcessing/postProcess.py --progress --timing --infoUnitFile w2f__types.f90 --outputFormat=fixed --separateOutput --pathSuffix "" --filenameSuffix "_oad" -m r -i ad_inline.f \$<
0e81c91d99 Jean*4001 # the target is a placeholder to trigger a single execution of the rule
45de16ddcf Jean*4002 touch \$@
776d1c0efd Jean*4003 # put this so make knows about the postprocessing output
0e81c91d99 Jean*4004 OAD_intrinsics_oad.f \$(CB2M_AD_FILES:.f$FS90=_oad.f): postProcess.tag
5bd7f28048 Jean*4005
0e81c91d99 Jean*4006 # link the XAIF schema files
5bd7f28048 Jean*4007 %.xsd:
4008 \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
4009
4010 # link the support files:
01e0754d66 Oliv*4011 \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES) \$(PPEXTRAS):
25bb252094 Jean*4012 \$(LN) \$(OADTOOLS)/\$@ .
5bd7f28048 Jean*4013
01e0754d66 Oliv*4014 AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.tag
45de16ddcf Jean*4015
5bd7f28048 Jean*4016 # ============ end OpenAD specific section ==============
4017
4018 EOF
4019
4020 fi
4021
4022 #=========================================
4023
6c90987a77 Ed H*4024 if test "x$EXEHOOK" != x ; then
4025 printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
4026 fi
4027
6aec5d9846 Ed H*4028 echo " Making list of \"exceptions\" that need \".p\" files"
4029 for i in $KPPFILES ; do
4030 base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
4031 RETVAL=$?
4032 if test "x$RETVAL" != x0 ; then
4033 echo "Error: unable to add file \"$i\" to the exceptions list"
4034 fi
3eb03232c2 Ed H*4035 echo "$base.$FS: $base.p" >> $MAKEFILE
6aec5d9846 Ed H*4036 done
4037
4038 echo " Making list of NOOPTFILES"
4039 for i in $NOOPTFILES ; do
4040 base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
4041 RETVAL=$?
4042 if test "x$RETVAL" != x0 ; then
4043 echo "Error: unable to add file \"$i\" to the exceptions list"
4044 fi
3eb03232c2 Ed H*4045 echo "$base.o: $base.$FS" >> $MAKEFILE
76c1b0ef61 Ed H*4046 printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
6aec5d9846 Ed H*4047 done
4048
4049 echo " Add rules for links"
7deef35259 Jean*4050 cat $TMP.srclinks >> $MAKEFILE
4051 rm -f $TMP.srclinks
6aec5d9846 Ed H*4052
4053 echo " Adding makedepend marker"
76c1b0ef61 Ed H*4054 printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
6aec5d9846 Ed H*4055
76c1b0ef61 Ed H*4056 printf "\n=== Done ===\n"
2ff82eb834 Ed H*4057
1f2ed3565b Alis*4058 # Create special header files
621623385c Jean*4059 $BASH $TOOLSDIR/convert_cpp_cmd2defines -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"
1f2ed3565b Alis*4060 if test ! -f $PACKAGES_DOT_H ; then
4061 mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
4062 else
a29e11f9ee Ed H*4063 cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
1f2ed3565b Alis*4064 RETVAL=$?
4065 if test "x$RETVAL" = x0 ; then
4066 rm -f $PACKAGES_DOT_H".tmp"
4067 else
4068 mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
4069 mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
4070 fi
4071 fi
4072 if test ! -f AD_CONFIG.h ; then
621623385c Jean*4073 $BASH $TOOLSDIR/convert_cpp_cmd2defines "Default version" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > AD_CONFIG.h
1f2ed3565b Alis*4074 fi
4075
2ff82eb834 Ed H*4076 # Write the "state" for future records
683b8f029b Jean*4077 if test "x$DUMPSTATE" = xt ; then
13fa7032ba Ed H*4078 printf "" > genmake_state
2ff82eb834 Ed H*4079 for i in $gm_state ; do
4080 t1="t2=\$$i"
4081 eval $t1
dd9f72a48c Jean*4082 echo "$i='$t2'" | sed -e 's/ */ /g' >> genmake_state
2ff82eb834 Ed H*4083 done
4084 fi
f7aaac66f3 jm-c 4085
4086 # Conclude
516b08a580 jm-c 4087 if test $FC_CHECK = 5 ; then
f7aaac66f3 jm-c 4088 echo " original 'Makefile' generated successfully"
4089 echo "=> next steps:"
4090 ad=`echo $PACKAGES | grep -c autodiff`
4091 if test "x$OPENAD" != x ; then
4092 echo " > make adAll (<-- adjoint executable)"
4093 elif test $ad != 0 ; then
4094 echo " > make depend"
b4daa24319 Shre*4095 if test "x$TAPENADE" = x ; then
4096 echo " > make adall (<-- adjoint executable with TAF)"
4097 echo " or > make ftlall (<-- tang-lin executable with TAF)"
4098 else
4099 echo " > make tap_adj (<-- adjoint executable with Tapenade)"
4100 echo " or > make tap_tlm (<-- tang-lin executable with Tapenade)"
4101 fi
f7aaac66f3 jm-c 4102 echo " or > make (<-- forward executable)"
4103 else
4104 # echo " > make depend (add dependencies to Makefile)"
4105 echo " > make depend"
4106 echo " > make (<-- to generate executable)"
4107 fi
516b08a580 jm-c 4108 elif [ $FC_CHECK -ge 3 ] ; then
4109 echo " original 'Makefile' generated but was unable to"
4110 echo " run compiled test-program (please see '$LOGFILE')"
bcbb675387 jm-c 4111 elif [ $FC_CHECK -ge 0 ] ; then
516b08a580 jm-c 4112 echo "Warning: FORTRAN compiler test failed (please see '$LOGFILE')"
4113 echo "Warning: 'Makefile' might be unusable (check your optfile)"
f7aaac66f3 jm-c 4114 fi