Back to home page

MITgcm

 
 

    


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

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