Back to home page

darwin3

 
 

    


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

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