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