Back to home page

MITgcm

 
 

    


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

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