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