Back to home page

MITgcm

 
 

    


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

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