Back to home page

MITgcm

 
 

    


Warning, /tools/genmake2 is written in an unsupported language. File is not indexed.

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