Back to home page

MITgcm

 
 

    


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

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