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