/[MITgcm]/MITgcm/tools/genmake2
ViewVC logotype

Annotation of /MITgcm/tools/genmake2

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.56 - (hide annotations) (download)
Sat Dec 6 23:33:10 2003 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
Changes since 1.55: +4 -2 lines
 o add conversion "x86_64" -> "amd64"

1 edhill 1.49 #! /usr/bin/env bash
2 edhill 1.1 #
3 edhill 1.56 # $Header: /u/u3/gcmpack/MITgcm/tools/genmake2,v 1.55 2003/12/06 00:34:29 jmc Exp $
4 edhill 1.1 #
5     # Makefile generator for MITgcm UV codes
6     # created by cnh 03/98
7     # adapted by aja 06/98
8     # modified by aja 01/00
9     # rewritten in bash by eh3 08/03
10    
11 edhill 1.12 # Search for particular CPP #cmds associated with packages
12     # usage: test_for_package_in_cpp_options CPP_file package_name
13     test_for_package_in_cpp_options() {
14     cpp_options=$1
15     pkg=$2
16 adcroft 1.52 test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17     test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18     test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19     test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20     }
21    
22     # Search for particular CPP #cmds associated with MPI
23     # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24     test_for_mpi_in_cpp_eeoptions() {
25     cpp_options=$1
26     test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27     test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28     test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99
29     test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99
30     }
31    
32     # Search for particular string in a file. Return 1 if detected, 0 if not
33     # usage: test_for_string_in_file file string
34     test_for_string_in_file() {
35     file=$1
36     strng=$2
37     grep -i "$strng" $file > /dev/null 2>&1
38 edhill 1.12 RETVAL=$?
39     if test "x${RETVAL}" = x0 ; then
40 adcroft 1.52 echo -n "Error: In $file there is an illegal line: "
41     grep -i "$strng" $file
42     return 1
43 edhill 1.12 fi
44 adcroft 1.52 return 0
45 edhill 1.12 }
46    
47     # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
48     # the package list.
49     expand_pkg_groups() {
50     new_packages=
51     PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups"
52     if test -r $PKG_GROUPS ; then
53     cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp
54 edhill 1.15 cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp
55 edhill 1.12 matched=0
56     for i in $PACKAGES ; do
57     line=`grep "^ *$i" ./p2.tmp`
58     RETVAL=$?
59     if test "x$RETVAL" = x0 ; then
60     matched=1
61 edhill 1.15 replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
62 edhill 1.12 echo " replacing \"$i\" with: $replace"
63     new_packages="$new_packages $replace"
64     else
65     new_packages="$new_packages $i"
66     fi
67     done
68     PACKAGES=$new_packages
69     rm -f ./p[1,2].tmp
70     else
71     echo "Warning: can't read package groups definition file: $PKG_GROUPS"
72     fi
73     }
74 edhill 1.1
75     # Guess possible config options for this host
76     find_possible_configs() {
77    
78 edhill 1.11 tmp1=`uname`"_"`uname -m`
79     tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
80 edhill 1.25 tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
81 edhill 1.56 tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
82     tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
83     PLATFORM=$tmp2
84 edhill 1.11 OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
85     echo " The platform appears to be: $PLATFORM"
86    
87 edhill 1.1 echo "test" > test
88     ln -s ./test link
89     RETVAL=$?
90     if test "x${RETVAL}" = x0 ; then
91 edhill 1.11 LN="ln -s"
92     else
93     echo "Error: \"ln -s\" does not appear to work on this system!"
94     echo " For help, please contact <MITgcm-support@mitgcm.org>."
95     exit 1
96 edhill 1.1 fi
97     rm -f test link
98    
99 edhill 1.11 if test "x$CPP" = x ; then
100     CPP="cpp -traditional -P"
101 adcroft 1.33 fi
102    
103     # makedepend is not always available
104     if test "x${MAKEDEPEND}" = x ; then
105     which makedepend >& /dev/null
106     RETVAL=$?
107     if test "x${RETVAL}" = x1 ; then
108     echo " makedepend was not found. Using xmakedpend instead."
109     MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
110     fi
111 edhill 1.1 fi
112    
113     # look for possible fortran compilers
114 cnh 1.24 tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
115 edhill 1.1 p_FC=
116 edhill 1.11 for c in $tmp ; do
117     rm -f ./hello.f ./hello
118     cat >> hello.f <<EOF
119     program hello
120     do i=1,3
121     print *, 'hello world : ', i
122     enddo
123     end
124     EOF
125     $c -o hello hello.f > /dev/null 2>&1
126 edhill 1.1 RETVAL=$?
127     if test "x${RETVAL}" = x0 ; then
128     p_FC="$p_FC $c"
129     fi
130     done
131 edhill 1.21 rm -f ./hello.f ./hello
132 edhill 1.1 if test "x${p_FC}" = x ; then
133 edhill 1.11 cat 1>&2 <<EOF
134    
135     Error: No Fortran compilers were found in your path. Please specify one using:
136    
137     1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
138     2) a command-line option (eg. "-fc NAME"), or
139     3) the MITGCM_FC environment variable.
140    
141     EOF
142     exit 1
143 edhill 1.1 else
144 edhill 1.11 echo " The possible FORTRAN compilers found in your path are:"
145     echo " "$p_FC
146     if test "x$FC" = x ; then
147 edhill 1.15 FC=`echo $p_FC | $AWK '{print $1}'`
148 edhill 1.11 fi
149 edhill 1.1 fi
150    
151 edhill 1.11 for i in $p_FC ; do
152     p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
153     if test -r $p_OF ; then
154     OPTFILE=$p_OF
155     echo " The options file: $p_OF"
156     echo " appears to match so we'll use it."
157     break
158     fi
159     done
160     if test "x$OPTFILE" = x ; then
161     cat 1>&2 <<EOF
162    
163     Error: No options file was found in: $ROOTDIR/tools/build_options/
164     that matches this platform ("$PLATFORM") and the compilers found in
165     your path. Please specify an "optfile" using:
166    
167     1) the command line (eg. "-optfile=path/to/OPTFILE"), or
168     2) the MITGCM_OF environment variable.
169    
170     If you need help, please contact the developers at <MITgcm-support@mitgcm.org>.
171    
172 edhill 1.1 EOF
173 edhill 1.11 exit 1
174 edhill 1.1 fi
175 edhill 1.11
176     # # look for possible MPI libraries
177     # mpi_libs=
178     # mpi_fort=`which mpif77 2>/dev/null`
179     # RETVAL=$?
180     # if test "x${RETVAL}" = x0 ; then
181     # cat >>test.f <<EOF
182     # PROGRAM HELLO
183     # DO 10, I=1,10
184     # PRINT *,'Hello World'
185     # 10 CONTINUE
186     # STOP
187     # END
188     # EOF
189     # eval "$mpi_fort -showme test.f > out"
190     # RETVAL=$?
191     # if test "x${RETVAL}" = x0 ; then
192     # a=`cat out`
193     # for i in $a ; do
194     # case $i in
195     # -*)
196     # mpi_libs="$mpi_libs $i" ;;
197     # esac
198     # done
199     # echo "The MPI libs appear to be:"
200     # echo " "$mpi_libs
201     # fi
202     # rm -f test.f out
203     # fi
204 edhill 1.1
205     }
206    
207     # Parse the package dependency information
208     get_pdepend_list() {
209    
210     # strip the comments and then convert the dependency file into
211     # two arrays: PNAME, DNAME
212     cat $1 | sed -e 's/#.*$//g' \
213 edhill 1.15 | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
214 edhill 1.1 > ./.pd_tmp
215 edhill 1.34 . ./.pd_tmp
216 edhill 1.1 rm -f ./.pd_tmp
217    
218     echo -n "PNAME = "${}
219     }
220    
221    
222     # Explain usage
223     usage() {
224 edhill 1.41 cat <<EOF
225    
226     Usage: "$0" [OPTIONS]
227     where [OPTIONS] can be:
228    
229     -help | --help | -h | --h
230     Print this help message and exit.
231    
232     -nooptfile | --nooptfile
233     -optfile NAME | --optfile NAME | -of NAME | --of NAME
234     -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
235     Use "NAME" as the optfile. By default, an attempt will be
236     made to find an appropriate "standard" optfile in the
237     tools/build_options/ directory.
238    
239     -pdepend NAME | --pdepend NAME
240     -pdepend=NAME | --pdepend=NAME
241     Get package dependency information from "NAME".
242    
243     -pdefault NAME | --pdefault NAME
244     -pdefault=NAME | --pdefault=NAME
245     Get the default package list from "NAME".
246    
247     -make NAME | -m NAME
248     --make=NAME | -m=NAME
249     Use "NAME" for the MAKE program. The default is "make" but
250     many platforms, "gmake" is the preferred choice.
251    
252     -makefile NAME | -mf NAME
253     --makefile=NAME | -mf=NAME
254     Call the makefile "NAME". The default is "Makefile".
255    
256     -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
257     -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
258     Specify the location of the MITgcm ROOTDIR as "NAME".
259     By default, genamke will try to find the location by
260     looking in parent directories (up to the 5th parent).
261    
262     -mods NAME | --mods NAME | -mo NAME | --mo NAME
263     -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
264     Here, "NAME" specifies a list of directories that are
265     used for additional source code. Files found in the
266     "mods list" are given preference over files of the same
267     name found elsewhere.
268    
269     -disable NAME | --disable NAME
270     -disable=NAME | --disable=NAME
271     Here "NAME" specifies a list of packages that we don't
272     want to use. If this violates package dependencies,
273     genamke will exit with an error message.
274    
275     -enable NAME | --enable NAME
276     -enable=NAME | --enable=NAME
277     Here "NAME" specifies a list of packages that we wish
278     to specifically enable. If this violates package
279     dependencies, genamke will exit with an error message.
280    
281     -standarddirs NAME | --standarddirs NAME
282     -standarddirs=NAME | --standarddirs=NAME
283     Here, "NAME" specifies a list of directories to be
284     used as the "standard" code.
285    
286     -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
287     -fc=NAME | --fc=NAME
288     Use "NAME" as the fortran compiler. By default, genmake
289     will search for a working compiler by trying a list of
290     "usual suspects" such as g77, f77, etc.
291    
292     -[no]ieee | --[no]ieee
293     Do or don't use IEEE numerics. Note that this option
294     *only* works if it is supported by the OPTFILE that
295     is being used.
296    
297     While it is most often a single word, the "NAME" variables specified
298     above can in many cases be a space-delimited string such as:
299    
300     --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3'
301     -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3'
302     -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
303    
304     which, depending upon your shell, may need to be single-quoted.
305    
306     For more detailed genmake documentation, please see:
307    
308     http://mitgcm.org/devel_HOWTO/
309    
310     EOF
311    
312 edhill 1.1 exit 1
313     }
314    
315 edhill 1.31 # Build a CPP macro to automate calling C routines from FORTRAN
316     get_fortran_c_namemangling() {
317     default_nm="#define FC_NAMEMANGLE(X) X ## _"
318    
319     cat > genmake_test.c <<EOF
320     void tcall( char * string ) { tsub( string ); }
321     EOF
322 edhill 1.39 $MAKE genmake_test.o >> genmake_warnings 2>&1
323 edhill 1.31 RETVAL=$?
324     if test "x$RETVAL" != x0 ; then
325     FC_NAMEMANGLE=$default_nm
326 edhill 1.39 cat <<EOF>> genmake_errors
327    
328     WARNING: C test compile fails
329     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
330     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
331     EOF
332 edhill 1.31 return 1
333     fi
334 edhill 1.43 c_tcall=`nm genmake_test.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`
335 edhill 1.31 RETVAL=$?
336     if test "x$RETVAL" != x0 ; then
337     FC_NAMEMANGLE=$default_nm
338 edhill 1.39 cat <<EOF>> genmake_warnings
339    
340     WARNING: The "nm" command failed.
341     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
342     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
343     EOF
344 edhill 1.31 return 1
345     fi
346     cat > genmake_tcomp.f <<EOF
347     subroutine tcall( string )
348     character*(*) string
349     call tsub( string )
350     end
351     EOF
352 edhill 1.39 $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1
353 edhill 1.31 RETVAL=$?
354     if test "x$RETVAL" != x0 ; then
355     FC_NAMEMANGLE=$default_nm
356 edhill 1.39 cat <<EOF>> genmake_warnings
357    
358     WARNING: FORTRAN test compile fails -- please see "genmake_errors"
359     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
360     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
361     EOF
362 edhill 1.31 return 1
363     fi
364 edhill 1.43 f_tcall=`nm genmake_tcomp.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`
365 edhill 1.31 RETVAL=$?
366     if test "x$RETVAL" != x0 ; then
367     FC_NAMEMANGLE=$default_nm
368 edhill 1.39 cat <<EOF>> genmake_warnings
369    
370     WARNING: The "nm" command failed.
371     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
372     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
373     EOF
374 edhill 1.31 return 1
375     fi
376    
377     c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
378     f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
379     c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
380     f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
381    
382     nmangle="X"
383     if test "x$c_a" != "x$f_a" ; then
384     comm="echo x$f_a | sed -e 's|x$c_a||'"
385     a=`eval $comm`
386     nmangle="$a ## $nmangle"
387     fi
388     if test "x$c_b" != "x$f_b" ; then
389     comm="echo x$f_b | sed -e 's|x$c_b||'"
390     b=`eval $comm`
391     nmangle="$nmangle ## $b"
392     fi
393    
394     FC_NAMEMANGLE="#define FC_NAMEMANGLE(X) $nmangle"
395 edhill 1.32
396     # cleanup the testing files
397     rm -f genmake_tcomp.* genmake_test.*
398 edhill 1.31 }
399 edhill 1.1
400 edhill 1.39
401     check_HAVE_CLOC() {
402     get_fortran_c_namemangling
403     cat <<EOF > genmake_tc_1.c
404     $FC_NAMEMANGLE
405     #include <stdio.h>
406     #include <stdlib.h>
407     #include <unistd.h>
408     #include <assert.h>
409     #include <sys/time.h>
410     void FC_NAMEMANGLE(cloc) ( double *curtim )
411     {
412     struct timeval tv1;
413     gettimeofday(&tv1 , (void *)NULL );
414     *curtim = (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
415     *curtim = *curtim/1.E6;
416     }
417     EOF
418     make genmake_tc_1.o >> genmake_tc.log 2>&1
419     RET_C=$?
420     cat <<EOF > genmake_tc_2.f
421     program hello
422     Real*8 wtime
423     external cloc
424     call cloc(wtime)
425     print *," HELLO WORLD", wtime
426     end program hello
427     EOF
428     $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1
429     RET_F=$?
430     test -x ./genmake_tc && ./genmake_tc >> genmake_tc.log 2>&1
431     RETVAL=$?
432     if test "x$RETVAL" = x0 ; then
433     HAVE_CLOC=t
434     DEFINES="$DEFINES -DHAVE_CLOC"
435     fi
436     rm -f genmake_tc*
437     }
438    
439    
440 edhill 1.1 # Set defaults here
441 edhill 1.5 COMMANDL="$0 $@"
442    
443 edhill 1.1 PLATFORM=
444     LN=
445     S64=
446     KPP=
447     FC=
448     LINK=
449 edhill 1.31 # DEFINES="-DWORDLENGTH=4"
450     DEFINES=
451 edhill 1.1 PACKAGES=
452     ENABLE=
453     DISABLE=
454     MAKEFILE=
455     MAKEDEPEND=
456     PDEPEND=
457 edhill 1.11 DUMPSTATE=t
458 edhill 1.1 PDEFAULT=
459     OPTFILE=
460 edhill 1.2 INCLUDES="-I."
461 edhill 1.1 FFLAGS=
462     FOPTIM=
463     CFLAGS=
464     KFLAGS1=
465     KFLAGS2=
466     LIBS=
467     KPPFILES=
468     NOOPTFILES=
469     NOOPTFLAGS=
470    
471 edhill 1.29 # DEFINES checked by test compilation
472     HAVE_SYSTEM=
473     HAVE_FDATE=
474     FC_NAMEMANGLE=
475 edhill 1.39 HAVE_CLOC=
476 edhill 1.29
477 edhill 1.1 MODS=
478     TOOLSDIR=
479     SOURCEDIRS=
480     INCLUDEDIRS=
481 edhill 1.12 STANDARDDIRS=
482 edhill 1.1
483     PWD=`pwd`
484     MAKE=make
485 edhill 1.15 AWK=awk
486 edhill 1.1 THISHOSTNAME=`hostname`
487     THISCWD=`pwd`
488     THISDATE=`date`
489     MACHINE=`uname -a`
490 edhill 1.7 EXECUTABLE=
491     EXEHOOK=
492     EXEDIR=
493 edhill 1.12 PACKAGES_CONF=
494     IEEE=
495     if test "x$MITGCM_IEEE" != x ; then
496     IEEE=$MITGCM_IEEE
497     fi
498 edhill 1.1
499 edhill 1.14 AUTODIFF_PKG_USED=f
500     AD_OPTFILE=
501 edhill 1.17 TAF=
502     AD_TAF_FLAGS=
503     FTL_TAF_FLAGS=
504     SVD_TAF_FLAGS=
505     TAF_EXTRA=
506     TAMC=
507     AD_TAMC_FLAGS=
508     FTL_TAF_FLAGS=
509     SVD_TAMC_FLAGS=
510     TAMC_EXTRA=
511    
512 edhill 1.14
513 edhill 1.5 # The following state can be set directly by command-line switches
514 edhill 1.41 gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
515 edhill 1.12 gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"
516 edhill 1.5
517     # The following state is not directly set by command-line switches
518     gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
519     gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
520     gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
521 edhill 1.12 gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
522 edhill 1.29 gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"
523 edhill 1.5
524 edhill 1.14 # The following are all related to adjoint/tangent-linear stuff
525 edhill 1.29 gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
526     gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
527     gm_s12="TAF_EXTRA TAMC_EXTRA"
528 edhill 1.14
529 edhill 1.29 gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
530     gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
531 edhill 1.5
532 edhill 1.41 cat <<EOF
533    
534     GENMAKE :
535    
536     A program for GENerating MAKEfiles for the MITgcm project. For a
537     quick list of options, use "genmake -h" or for more detail see:
538    
539     http://mitgcm.org/devel_HOWTO/
540    
541     EOF
542 edhill 1.5
543 edhill 1.2 echo "=== Processing options files and arguments ==="
544 edhill 1.12 gm_local="genmake_local"
545     for i in . $MODS ; do
546     if test -r $i/$gm_local ; then
547 edhill 1.34 . $i/$gm_local
548 edhill 1.12 break
549     fi
550     done
551 edhill 1.1 echo -n " getting local config information: "
552     if test -e $gm_local ; then
553     echo "using $gm_local"
554 edhill 1.34 . $gm_local
555 edhill 1.2 # echo "DISABLE=$DISABLE"
556     # echo "ENABLE=$ENABLE"
557 edhill 1.1 else
558     echo "none found"
559     fi
560    
561     # echo "$0::$1:$2:$3:$4:$5:$6:$7:"
562 edhill 1.2 #OPTIONS=
563     #n=0
564     #for i ; do
565     # echo "$i $n"
566     # setvar="OPTIONS[$n]='$i'"
567     # # echo " $setvar"
568     # eval "$setvar"
569     # n=$(( $n + 1 ))
570     #done
571     #parse_options
572     ac_prev=
573     for ac_option ; do
574    
575     # If the previous option needs an argument, assign it.
576     if test -n "$ac_prev"; then
577     eval "$ac_prev=\$ac_option"
578     ac_prev=
579     continue
580     fi
581    
582     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
583    
584     case $ac_option in
585    
586     -help | --help | -h | --h)
587     usage ;;
588    
589     -nooptfile | --nooptfile)
590     OPTFILE="NONE" ;;
591     -optfile | --optfile | -of | --of)
592 edhill 1.4 ac_prev=OPTFILE ;;
593 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
594     OPTFILE=$ac_optarg ;;
595    
596 edhill 1.50 -adoptfile | --adoptfile | -adof | --adof)
597 edhill 1.14 ac_prev=AD_OPTFILE ;;
598     -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
599     AD_OPTFILE=$ac_optarg ;;
600    
601 edhill 1.2 -pdepend | --pdepend)
602 edhill 1.4 ac_prev=PDEPEND ;;
603 edhill 1.2 -pdepend=* | --pdepend=*)
604     PDEPEND=$ac_optarg ;;
605    
606     -pdefault | --pdefault)
607 edhill 1.4 ac_prev=PDEFAULT ;;
608 edhill 1.2 -pdefault=* | --pdefault=*)
609     PDEFAULT=$ac_optarg ;;
610    
611 edhill 1.6 -make | --make | -m | --m)
612     ac_prev=MAKE ;;
613     -make=* | --make=* | -m=* | --m=*)
614     MAKE=$ac_optarg ;;
615    
616     -makefile | --makefile | -ma | --ma)
617 edhill 1.4 ac_prev=MAKEFILE ;;
618 edhill 1.6 -makefile=* | --makefile=* | -ma=* | --ma=*)
619 edhill 1.2 MAKEFILE=$ac_optarg ;;
620    
621 edhill 1.41 -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
622     echo "ERROR: The platform option has been removed. Please specify"
623     echo " the build options using the \"optfile\" mechanism."
624     echo
625     usage
626     ;;
627 edhill 1.2
628     -rootdir | --rootdir | -rd | --rd)
629 edhill 1.4 ac_prev=ROOTDIR ;;
630 edhill 1.2 -rootdir=* | --rootdir=* | -rd=* | --rd=*)
631     ROOTDIR=$ac_optarg ;;
632    
633     -mods | --mods | -mo | --mo)
634 edhill 1.4 ac_prev=MODS ;;
635 edhill 1.2 -mods=* | --mods=* | -mo=* | --mo=*)
636     MODS=$ac_optarg ;;
637    
638     -disable | --disable)
639 edhill 1.4 ac_prev=DISABLE ;;
640 edhill 1.2 -disable=* | --disable=*)
641     DISABLE=$ac_optarg ;;
642    
643     -enable | --enable)
644 edhill 1.4 ac_prev=ENABLE ;;
645 edhill 1.2 -enable=* | --enable=*)
646     ENABLE=$ac_optarg ;;
647    
648 edhill 1.12 -standarddirs | --standarddirs)
649     ac_prev=STANDARDDIRS ;;
650     -standarddirs=* | --standarddirs=*)
651     STANDARDDIRS=$ac_optarg ;;
652    
653 edhill 1.2 # -cpp | --cpp)
654     # ac_prev=cpp ;;
655     # -cpp=* | --cpp=*)
656     # CPP=$ac_optarg ;;
657    
658     -fortran | --fortran | -fc | --fc)
659 edhill 1.4 ac_prev=FC ;;
660 edhill 1.2 -fc=* | --fc=*)
661     FC=$ac_optarg ;;
662    
663     -ieee | --ieee)
664 edhill 1.12 IEEE=true ;;
665 edhill 1.2 -noieee | --noieee)
666 edhill 1.12 IEEE= ;;
667 edhill 1.2
668 edhill 1.41 # -jam | --jam)
669     # JAM=1 ;;
670     # -nojam | --nojam)
671     # JAM=0 ;;
672 edhill 1.2
673 edhill 1.5 -ds | --ds)
674     DUMPSTATE=t ;;
675    
676 edhill 1.17 -taf_extra | --taf_extra)
677     ac_prev=TAF_EXTRA ;;
678     -taf_extra=* | --taf_extra=*)
679     TAF_EXTRA=$ac_optarg ;;
680    
681     -tamc_extra | --tamc_extra)
682     ac_prev=TAMC_EXTRA ;;
683     -tamc_extra=* | --tamc_extra=*)
684     TAMC_EXTRA=$ac_optarg ;;
685    
686 edhill 1.2 -*)
687     echo "Error: unrecognized option: "$ac_option
688     usage
689     ;;
690    
691     *)
692     echo "Error: unrecognized argument: "$ac_option
693     usage
694     ;;
695    
696     esac
697    
698 edhill 1.1 done
699    
700 edhill 1.12 if test -f ./.genmakerc ; then
701     echo
702     echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
703     echo " file. This file format is no longer supported. Please see:"
704     echo
705     echo " http://mitgcm.org/devel_HOWTO/"
706     echo
707     echo " for directions on how to setup and use the new \"genmake2\" input"
708     echo " files and send an email to MITgcm-support@mitgcm.org if you want help."
709     echo
710     fi
711    
712 edhill 1.11 if test "x${ROOTDIR}" = x ; then
713     if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
714     ROOTDIR=".."
715     else
716     for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
717     if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
718     ROOTDIR=$d
719     echo -n "Warning: ROOTDIR was not specified but there appears to be"
720     echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
721     break
722     fi
723     done
724     fi
725     fi
726     if test "x${ROOTDIR}" = x ; then
727     echo "Error: Cannot determine ROOTDIR for MITgcm code."
728     echo " Please specify a ROOTDIR using either an options "
729     echo " file or a command-line option."
730     exit 1
731     fi
732     if test ! -d ${ROOTDIR} ; then
733     echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
734     exit 1
735     fi
736    
737 edhill 1.1 echo " getting OPTFILE information: "
738     if test "x${OPTFILE}" = x ; then
739 edhill 1.11 if test "x$MITGCM_OF" = x ; then
740     echo "Warning: no OPTFILE specified so we'll look for possible settings"
741     printf "\n=== Searching for possible settings for OPTFILE ===\n"
742     find_possible_configs
743 edhill 1.1 else
744 edhill 1.11 OPTFILE=$MITGCM_OF
745     fi
746     fi
747     if test "x$OPTFILE" != xNONE ; then
748     if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
749     echo " using OPTFILE=\"$OPTFILE\""
750 edhill 1.34 . "$OPTFILE"
751 edhill 1.11 RETVAL=$?
752     if test "x$RETVAL" != x0 ; then
753     echo -n "Error: failed to source OPTFILE \"$OPTFILE\""
754     echo "--please check that variable syntax is bash-compatible"
755 edhill 1.1 exit 1
756     fi
757 edhill 1.11 if test "x$DUMPSTATE" != xf ; then
758 edhill 1.12 cp -f $OPTFILE "genmake_optfile"
759 edhill 1.11 fi
760     else
761     echo "Error: can't read OPTFILE=\"$OPTFILE\""
762     exit 1
763 edhill 1.1 fi
764     fi
765 edhill 1.8
766 edhill 1.14 echo " getting AD_OPTFILE information: "
767     if test "x${AD_OPTFILE}" = x ; then
768     if test "x$MITGCM_AD_OF" = x ; then
769     AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
770     else
771     AD_OPTFILE=$MITGCM_AD_OF
772     fi
773     fi
774     if test "x${AD_OPTFILE}" != xNONE ; then
775     if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
776     echo " using AD_OPTFILE=\"$AD_OPTFILE\""
777 edhill 1.34 . "$AD_OPTFILE"
778 edhill 1.14 RETVAL=$?
779     if test "x$RETVAL" != x0 ; then
780     echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
781     echo "--please check that variable syntax is bash-compatible"
782     exit 1
783     fi
784     if test "x$DUMPSTATE" != xf ; then
785     cp -f $AD_OPTFILE "genmake_ad_optfile"
786     fi
787     else
788     echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
789     exit 1
790     fi
791     fi
792    
793 edhill 1.39 # Check that FC, LINK, CPP, S64, LN, and MAKE are defined. If not,
794     # either set defaults or complain and abort!
795 edhill 1.8 if test "x$FC" = x ; then
796     cat <<EOF 1>&2
797    
798     Error: no Fortran compiler: please specify using one of the following:
799     1) within the options file ("FC=...") as specified by "-of=OPTFILE"
800     2) the "-fc=XXX" command-line option
801 edhill 1.12 3) the "./genmake_local" file
802 edhill 1.8 EOF
803     exit 1
804     fi
805     if test "x$LINK" = x ; then
806     LINK=$FC
807     fi
808     if test "x$CPP" = x ; then
809 edhill 1.11 CPP="cpp"
810     fi
811 edhill 1.39 if test "x$MAKE" = x ; then
812     MAKE="make"
813     fi
814 edhill 1.13 echo "#define A a" | $CPP > test_cpp 2>&1
815 edhill 1.11 RETVAL=$?
816     if test "x$RETVAL" != x0 ; then
817 edhill 1.8 cat <<EOF 1>&2
818    
819 edhill 1.11 Error: C pre-processor "$CPP" failed the test case: please specify using:
820    
821 edhill 1.8 1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
822 edhill 1.12 2) the "./genmake_local" file
823 edhill 1.30 3) with the CPP environment variable
824 edhill 1.11
825 edhill 1.8 EOF
826     exit 1
827 edhill 1.11 else
828     rm -f test_cpp
829 edhill 1.8 fi
830 edhill 1.11 if test "x$MAKEDEPEND" = x ; then
831     MAKEDEPEND=makedepend
832 edhill 1.8 fi
833 edhill 1.35 if test "x$LN" = x ; then
834     LN="ln -s"
835     fi
836     echo "test" > genmake_test_ln
837     $LN genmake_test_ln genmake_tlink
838     RETVAL=$?
839     if test "x$RETVAL" != x0 ; then
840     cat <<EOF 1>&2
841 edhill 1.29
842 edhill 1.35 Error: The command "ln -s" failed -- please specify a working soft-link
843     command in the optfile.
844    
845     EOF
846     exit 1
847     fi
848     rm -f genmake_test_ln genmake_tlink
849 edhill 1.29
850 edhill 1.39
851 edhill 1.29 printf "\n=== Checking system libraries ===\n"
852     echo -n " Do we have the system() command using $FC... "
853     cat > genmake_tcomp.f <<EOF
854     program hello
855     call system('echo hi')
856     end
857     EOF
858     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
859     RETVAL=$?
860     if test "x$RETVAL" = x0 ; then
861     HAVE_SYSTEM=t
862     DEFINES="$DEFINES -DHAVE_SYSTEM"
863     echo "yes"
864     else
865     HAVE_SYSTEM=
866     echo "no"
867     fi
868     rm -f genmake_tcomp*
869    
870     echo -n " Do we have the fdate() command using $FC... "
871     cat > genmake_tcomp.f <<EOF
872     program hello
873     CHARACTER(128) string
874     string = ' '
875     call fdate( string )
876     print *, string
877     end
878     EOF
879     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
880     RETVAL=$?
881     if test "x$RETVAL" = x0 ; then
882     HAVE_FDATE=t
883     DEFINES="$DEFINES -DHAVE_FDATE"
884     echo "yes"
885     else
886     HAVE_FDATE=
887     echo "no"
888     fi
889     rm -f genmake_tcomp*
890    
891 edhill 1.39 echo -n " Can we call simple C routines (here, \"cloc()\") using $FC... "
892     check_HAVE_CLOC
893     if test "x$HAVE_CLOC" != x ; then
894     echo "yes"
895     else
896     echo "no"
897 edhill 1.29 fi
898 edhill 1.39 rm -f genmake_t*
899 edhill 1.29
900 edhill 1.8
901 edhill 1.2 printf "\n=== Setting defaults ===\n"
902 edhill 1.1 echo -n " Adding MODS directories: "
903     for d in $MODS ; do
904     if test ! -d $d ; then
905 edhill 1.2 echo
906     echo "Error: MODS directory \"$d\" not found!"
907 edhill 1.1 exit 1
908     else
909     echo -n " $d"
910     SOURCEDIRS="$SOURCEDIRS $d"
911     INCLUDEDIRS="$INCLUDEDIRS $d"
912     fi
913     done
914     echo
915    
916     if test "x$MAKEFILE" = x ; then
917     MAKEFILE="Makefile"
918     fi
919     if test "x${PLATFORM}" = x ; then
920     PLATFORM=$p_PLATFORM
921     fi
922    
923     if test "x${EXEDIR}" = x ; then
924     if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then
925     EXEDIR=../exe
926     else
927     EXEDIR=.
928     fi
929     fi
930     if test ! -d ${EXEDIR} ; then
931     echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!"
932     exit 1
933     fi
934    
935     if test "x${TOOLSDIR}" = x ; then
936     TOOLSDIR="$ROOTDIR/tools"
937     fi
938     if test ! -d ${TOOLSDIR} ; then
939     echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"
940     exit 1
941     fi
942 edhill 1.11 if test "x$S64" = x ; then
943     S64='$(TOOLSDIR)/set64bitConst.sh'
944     fi
945 adcroft 1.44 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
946 edhill 1.1
947     EXECUTABLE=${EXECUTABLE:-mitgcmuv}
948    
949     # We have a special set of source files in eesupp/src which are
950     # generated from some template source files. We'll make them first so
951     # they appear as regular source code
952     if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
953     echo " Making source files in eesupp from templates"
954 edhill 1.36 ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
955 edhill 1.1 RETVAL=$?
956 edhill 1.2 if test "x${RETVAL}" = x0 ; then
957 edhill 1.1 rm -f make_eesupp.errors
958     else
959     echo "Error: problem encountered while building source files in eesupp:"
960     cat make_eesupp.errors
961     exit 1
962     fi
963     fi
964    
965 edhill 1.2 printf "\n=== Determining package settings ===\n"
966 edhill 1.1 if test "x${PDEPEND}" = x ; then
967     tmp=$ROOTDIR"/pkg/pkg_depend"
968     if test -r $tmp ; then
969     PDEPEND=$tmp
970     else
971     echo "Warning: No package dependency information was specified."
972     echo " Please check that ROOTDIR/pkg/pkg_depend exists."
973     fi
974     else
975     if test ! -r ${PDEPEND} ; then
976     echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\""
977     exit 1
978     fi
979     fi
980     echo " getting package dependency info from $PDEPEND"
981     # Strip the comments and then convert the dependency file into
982     # two arrays: PNAME, DNAME
983     cat $PDEPEND | sed -e 's/#.*$//g' \
984 edhill 1.15 | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
985 edhill 1.1 > ./.pd_tmp
986     RETVAL=$?
987     if test ! "x${RETVAL}" = x0 ; then
988     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
989     exit 1
990     fi
991 edhill 1.34 . ./.pd_tmp
992 edhill 1.1 rm -f ./.pd_tmp
993    
994 edhill 1.12 # Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups"
995     # file should eventually be added so that, for convenience, one can
996     # specify groups of packages using names like "ocean" and "atmosphere".
997 edhill 1.41 echo " checking default package list: "
998 edhill 1.1 if test "x${PDEFAULT}" = x ; then
999 edhill 1.12 for i in "." $MODS ; do
1000     if test -r $i"/packages.conf" ; then
1001     PDEFAULT=$i"/packages.conf"
1002     break
1003     fi
1004     done
1005     fi
1006     if test "x${PDEFAULT}" = x ; then
1007 edhill 1.1 PDEFAULT="$ROOTDIR/pkg/pkg_default"
1008     fi
1009     if test "x${PDEFAULT}" = xNONE ; then
1010 edhill 1.41 echo " default packages file disabled"
1011 edhill 1.1 else
1012     if test ! -r $PDEFAULT ; then
1013     echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\""
1014     else
1015 edhill 1.41 echo " using PDEFAULT=\"$PDEFAULT\""
1016 edhill 1.1 # Strip the comments and add all the names
1017 edhill 1.15 def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1018 edhill 1.1 RETVAL=$?
1019     if test "x${RETVAL}" != x0 ; then
1020     echo -n "Error: can't parse default package list "
1021     echo "-- please check PDEFAULT=\"$PDEFAULT\""
1022     exit 1
1023     fi
1024     for i in $def ; do
1025     PACKAGES="$PACKAGES $i"
1026     done
1027 edhill 1.12 echo " before group expansion packages are: $PACKAGES"
1028     expand_pkg_groups
1029     echo " after group expansion packages are: $PACKAGES"
1030 edhill 1.1 fi
1031     fi
1032    
1033     echo " applying DISABLE settings"
1034     pack=
1035     for p in $PACKAGES ; do
1036     addit="t"
1037     for d in $DISABLE ; do
1038     if test "x$p" = "x$d" ; then
1039     addit="f"
1040     fi
1041     done
1042     if test "x$addit" = xt ; then
1043     pack="$pack $p"
1044     fi
1045     done
1046     PACKAGES="$pack"
1047     echo " applying ENABLE settings"
1048 edhill 1.12 echo "" > ./.tmp_pack
1049 edhill 1.1 PACKAGES="$PACKAGES $ENABLE"
1050     for i in $PACKAGES ; do
1051     if test ! -d "$ROOTDIR/pkg/$i" ; then
1052     echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1053     exit 1
1054     fi
1055     echo $i >> ./.tmp_pack
1056     done
1057     pack=`cat ./.tmp_pack | sort | uniq`
1058     rm -f ./.tmp_pack
1059     PACKAGES=
1060     for i in $pack ; do
1061     PACKAGES="$PACKAGES $i"
1062     done
1063     echo " packages are: $PACKAGES"
1064    
1065     echo " applying package dependency rules"
1066     ck=
1067     while test "x$ck" != xtt ; do
1068     i=0
1069 edhill 1.2 # rtot=${#PNAME[@]}
1070     rtot=$nname
1071 edhill 1.1 while test $i -lt $rtot ; do
1072    
1073     # Is $pname in the current $PACKAGES list?
1074 edhill 1.2 # pname=${PNAME[$i]}
1075     tmp="pname=\"\$PNAME_$i\""
1076     eval $tmp
1077 edhill 1.1 pin="f"
1078     for p in $PACKAGES ; do
1079     if test "x$p" = "x$pname" ; then
1080     pin="t"
1081     fi
1082     done
1083    
1084     # Is the DNAME entry a (+) or (-) rule ?
1085 edhill 1.2 tmp="dname=\"\$DNAME_$i\""
1086     eval $tmp
1087 edhill 1.1 plus="-"
1088 edhill 1.2 echo $dname | grep '^+' > /dev/null 2>&1
1089 edhill 1.1 RETVAL=$?
1090     if test "x$RETVAL" = x0 ; then
1091     plus="+"
1092     fi
1093    
1094     # Is $dname in the current $PACKAGES list?
1095 edhill 1.2 dname=`echo $dname | sed -e 's/^[+-]//'`
1096 edhill 1.1 din="f"
1097     for p in $PACKAGES ; do
1098     if test "x$p" = "x$dname" ; then
1099     din="t"
1100     fi
1101     done
1102    
1103     # Do we need to add $dname according to the dependency rules?
1104     if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
1105     in_dis="f"
1106     for dis in $DISABLE ; do
1107     if test "x$dis" = "x$dname" ; then
1108     in_dis="t"
1109     fi
1110     done
1111     if test "x$in_dis" = xt ; then
1112     echo "Error: can't satisfy package dependencies:"
1113     echo " \"$dname\" is required by the dependency rules"
1114     echo " but is disallowed by the DISABLE settings"
1115     exit 1
1116     else
1117     PACKAGES="$PACKAGES $dname"
1118     ck=
1119     fi
1120     fi
1121    
1122     # Do we need to get rid of $dname according to the dependency rules?
1123     if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
1124     echo "Error: can't satisfy package dependencies:"
1125     echo " \"$pname\" was requested but is disallowed by"
1126     echo " the dependency rules for \"$dname\""
1127     exit 1
1128     fi
1129     i=$(( $i + 1 ))
1130     done
1131     ck=$ck"t"
1132     done
1133     echo " packages are: $PACKAGES"
1134     for i in $PACKAGES ; do
1135     adr="$ROOTDIR/pkg/$i"
1136     if test -d $adr ; then
1137     SOURCEDIRS="$SOURCEDIRS $adr"
1138     INCLUDEDIRS="$INCLUDEDIRS $adr"
1139 edhill 1.14 if test "x$i" = xautodiff ; then
1140     AUTODIFF_PKG_USED=t
1141     fi
1142 edhill 1.1 else
1143     echo "Error: the directory \"$adr\" for package $i doesn't exist"
1144     exit 1
1145     fi
1146     done
1147    
1148    
1149 edhill 1.12 # Create a list of #define and #undef to enable/disable packages
1150     PACKAGES_DOT_H=PACKAGES_CONFIG.h
1151 edhill 1.1 # The following UGLY HACK sets multiple "#undef"s and it needs to go
1152     # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
1153     # file would eventually be split up so that all package-related #define
1154     # statements could be separated and handled only by genmake.
1155     names=`ls -1 "$ROOTDIR/pkg"`
1156     all_pack=
1157 adcroft 1.44 DISABLED_PACKAGES=
1158 edhill 1.1 for n in $names ; do
1159     if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1160     has_pack="f"
1161     for pack in $PACKAGES ; do
1162     if test "x$pack" = "x$n" ; then
1163     has_pack="t"
1164     break
1165     fi
1166     done
1167     if test "x$has_pack" = xf ; then
1168 edhill 1.15 undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
1169 adcroft 1.44 DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1170 edhill 1.1 fi
1171     fi
1172     done
1173 adcroft 1.44 ENABLED_PACKAGES=
1174 edhill 1.1 for i in $PACKAGES ; do
1175 edhill 1.15 def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
1176 adcroft 1.44 ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1177 edhill 1.12 #eh3 DEFINES="$DEFINES -D$def"
1178 edhill 1.1
1179     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1180     case $i in
1181     aim_v23)
1182 adcroft 1.46 ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1183 jmc 1.55 echo "Warning: ALLOW_AIM is set to enable aim_v23."
1184 edhill 1.1 ;;
1185     esac
1186     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1187    
1188     done
1189    
1190     echo " Adding STANDARDDIRS"
1191     BUILDDIR=${BUILDDIR:-.}
1192 edhill 1.12 if test "x$STANDARDDIRS" = x ; then
1193     STANDARDDIRS="eesupp model"
1194     fi
1195 edhill 1.1 for d in $STANDARDDIRS ; do
1196     adr="$ROOTDIR/$d/src"
1197     if test ! -d $adr ; then
1198     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1199     echo " is correct and that you correctly specified the STANDARDDIRS option"
1200     exit 1
1201     else
1202     SOURCEDIRS="$SOURCEDIRS $adr"
1203     fi
1204     adr="$ROOTDIR/$d/inc"
1205     if test ! -d $adr ; then
1206     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1207     echo " is correct and that you correctly specified the STANDARDDIRS option"
1208     exit 1
1209     else
1210     INCLUDEDIRS="$INCLUDEDIRS $adr"
1211     fi
1212     done
1213    
1214 adcroft 1.52 echo " Searching for *OPTIONS.h files in order to warn about the presence"
1215     echo " of \"#define \"-type statements that are no longer allowed:"
1216 edhill 1.12 CPP_OPTIONS=
1217 adcroft 1.52 CPP_EEOPTIONS=
1218 edhill 1.12 spaths=". $INCLUDEDIRS"
1219 adcroft 1.52 names=`ls -1 "$ROOTDIR/pkg"`
1220 edhill 1.12 for i in $spaths ; do
1221     try="$i/CPP_OPTIONS.h"
1222 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1223 edhill 1.12 echo " found CPP_OPTIONS=\"$try\""
1224     CPP_OPTIONS="$try"
1225 adcroft 1.52 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1226     for n in $names ; do
1227     test_for_package_in_cpp_options $CPP_OPTIONS $n
1228     done
1229     fi
1230     try="$i/CPP_EEOPTIONS.h"
1231 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1232 adcroft 1.52 echo " found CPP_EEOPTIONS=\"$try\""
1233     # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1234     #**** not yet enabled ****
1235     # test_for_mpi_in_cpp_eeoptions $try
1236     #**** not yet enabled ****
1237     CPP_EEOPTIONS="$try"
1238 edhill 1.12 fi
1239     done
1240     if test "x$CPP_OPTIONS" = x ; then
1241     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1242     exit 1
1243     fi
1244 edhill 1.1
1245 edhill 1.14 # Here, we build the list of files to be "run through" the adjoint
1246     # compiler.
1247     if test -f ./ad_files ; then
1248     rm -f ./ad_files
1249     fi
1250     echo " Creating the list of files for the adjoint compiler."
1251     for i in $SOURCEDIRS ; do
1252     list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1253     for j in $list_files ; do
1254     cat $i/$j >> ad_files
1255     done
1256     done
1257    
1258 edhill 1.2 echo
1259     echo "=== Creating the Makefile ==="
1260 edhill 1.1 echo " setting INCLUDES"
1261     for i in $INCLUDEDIRS ; do
1262 edhill 1.12 if ! test -d $i ; then
1263     # INCLUDES="$INCLUDES -I$i"
1264     # else
1265 edhill 1.1 echo "Warning: can't find INCLUDEDIRS=\"$i\""
1266     fi
1267     done
1268    
1269     echo " Determining the list of source and include files"
1270     rm -rf .links.tmp
1271     mkdir .links.tmp
1272     echo "# This section creates symbolic links" > srclinks.tmp
1273     echo "" >> srclinks.tmp
1274 cnh 1.3 echo -n 'SRCFILES = ' > srclist.inc
1275     echo -n 'CSRCFILES = ' > csrclist.inc
1276     echo -n 'F90SRCFILES = ' > f90srclist.inc
1277 edhill 1.1 echo -n 'HEADERFILES = ' > hlist.inc
1278 edhill 1.14 echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc
1279 adcroft 1.9 alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1280 edhill 1.1 for d in $alldirs ; do
1281     deplist=
1282 edhill 1.14 sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1283 cnh 1.3 sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1284 edhill 1.1 for sf in $sfiles ; do
1285     if test ! -r ".links.tmp/$sf" ; then
1286     if test -f "$d/$sf" ; then
1287 adcroft 1.44 case $d/$sf in
1288     ./$PACKAGES_DOT_H)
1289     ;;
1290     ./AD_CONFIG.h)
1291     ;;
1292     ./FC_NAMEMANGLE.h)
1293     ;;
1294     *)
1295     touch .links.tmp/$sf
1296     deplist="$deplist $sf"
1297     ;;
1298     esac
1299 edhill 1.15 extn=`echo $sf | $AWK -F '.' '{print $NF}'`
1300 edhill 1.1 case $extn in
1301     F)
1302     echo " \\" >> srclist.inc
1303     echo -n " $sf" >> srclist.inc
1304     ;;
1305 cnh 1.3 F90)
1306     echo " \\" >> f90srclist.inc
1307     echo -n " $sf" >> f90srclist.inc
1308     ;;
1309 edhill 1.1 c)
1310     echo " \\" >> csrclist.inc
1311     echo -n " $sf" >> csrclist.inc
1312     ;;
1313     h)
1314     echo " \\" >> hlist.inc
1315     echo -n " $sf" >> hlist.inc
1316     ;;
1317 edhill 1.14 flow)
1318     echo " \\" >> ad_flow_files.inc
1319     echo -n " $sf" >> ad_flow_files.inc
1320     ;;
1321 edhill 1.1 esac
1322     fi
1323     fi
1324     done
1325     if test "x$deplist" != x ; then
1326 edhill 1.2 echo "" >> srclinks.tmp
1327     echo "# These files are linked from $d" >> srclinks.tmp
1328 edhill 1.1 echo "$deplist :" >> srclinks.tmp
1329 edhill 1.2 printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp
1330 edhill 1.1 fi
1331     done
1332     rm -rf .links.tmp
1333     echo "" >> srclist.inc
1334     echo "" >> csrclist.inc
1335 cnh 1.3 echo "" >> f90srclist.inc
1336 edhill 1.1 echo "" >> hlist.inc
1337 edhill 1.14 echo "" >> ad_flow_files.inc
1338 edhill 1.1
1339     if test -e $MAKEFILE ; then
1340     mv -f $MAKEFILE "$MAKEFILE.bak"
1341     fi
1342     echo " Writing makefile: $MAKEFILE"
1343     echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
1344     echo "# $MACHINE" >> $MAKEFILE
1345     echo "# This makefile was generated automatically on" >> $MAKEFILE
1346     echo "# $THISDATE" >> $MAKEFILE
1347     echo "# by the command:" >> $MAKEFILE
1348     echo "# $0 $@" >> $MAKEFILE
1349     echo "# executed by:" >> $MAKEFILE
1350     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1351 edhill 1.21
1352     EXE_AD=$EXECUTABLE"_ad"
1353     EXE_FTL=$EXECUTABLE"_ftl"
1354     EXE_SVD=$EXECUTABLE"_svd"
1355    
1356 edhill 1.1 cat >>$MAKEFILE <<EOF
1357 edhill 1.53 #
1358     # OPTFILE="$OPTFILE"
1359 edhill 1.1 #
1360     # BUILDDIR : Directory where object files are written
1361     # SOURCEDIRS : Directories containing the source (.F) files
1362     # INCLUDEDIRS : Directories containing the header-source (.h) files
1363     # EXEDIR : Directory where executable that is generated is written
1364     # EXECUTABLE : Full path of executable binary
1365     #
1366     # CPP : C-preprocessor command
1367     # INCLUDES : Directories searched for header files
1368     # DEFINES : Macro definitions for CPP
1369     # MAKEDEPEND : Dependency generator
1370     # KPP : Special preprocessor command (specific to platform)
1371     # KFLAGS : Flags for KPP
1372     # FC : Fortran compiler command
1373     # FFLAGS : Configuration/debugging options for FC
1374     # FOPTIM : Optimization options for FC
1375     # LINK : Command for link editor program
1376     # LIBS : Library flags /or/ additional optimization/debugging flags
1377    
1378     ROOTDIR = ${ROOTDIR}
1379     BUILDDIR = ${BUILDDIR}
1380     SOURCEDIRS = ${SOURCEDIRS}
1381     INCLUDEDIRS = ${INCLUDEDIRS}
1382     EXEDIR = ${EXEDIR}
1383     EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
1384     TOOLSDIR = ${TOOLSDIR}
1385    
1386 edhill 1.14 #eh3 new defines for the adjoint work
1387     AUTODIFF = ${ROOTDIR}/pkg/autodiff
1388 edhill 1.21 EXE_AD = ${EXE_AD}
1389     EXE_FTL = ${EXE_FTL}
1390     EXE_SVD = ${EXE_SVD}
1391 edhill 1.14
1392 adcroft 1.44 ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1393     DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1394    
1395 adcroft 1.52 # These files are created by Makefile
1396     SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1397    
1398 edhill 1.1 EOF
1399    
1400     # Note: figure out some way to add Hyades JAM libraries here
1401    
1402     cat >>$MAKEFILE <<EOF
1403     # Unix ln (link)
1404     LN = ${LN}
1405     # C preprocessor
1406     CPP = cat \$< | ${S64} | ${CPP}
1407     # Dependency generator
1408     MAKEDEPEND = ${MAKEDEPEND}
1409     # Special preprocessor (KAP on DECs, FPP on Crays)
1410     KPP = ${KPP}
1411     # Fortran compiler
1412     FC = ${FC}
1413 cnh 1.3 # Fortran compiler
1414     F90C = ${F90C}
1415 edhill 1.1 # Link editor
1416     LINK = ${LINK}
1417    
1418     # Defines for CPP
1419     DEFINES = ${DEFINES}
1420     # Includes for CPP
1421     INCLUDES = ${INCLUDES}
1422     # Flags for KPP
1423     KFLAGS1 = ${KFLAGS1}
1424     KFLAGS2 = ${KFLAGS2}
1425     # Optim./debug for FC
1426     FFLAGS = ${FFLAGS}
1427     FOPTIM = ${FOPTIM}
1428 cnh 1.3 # Optim./debug for FC
1429     F90FLAGS = ${F90FLAGS}
1430     F90OPTIM = ${F90OPTIM}
1431 edhill 1.1 # Flags for CC
1432     CFLAGS = ${CFLAGS}
1433     # Files that should not be optimized
1434     NOOPTFILES = ${NOOPTFILES}
1435     NOOPTFLAGS = ${NOOPTFLAGS}
1436     # Flags and libraries needed for linking
1437     LIBS = ${LIBS} \$(XLIBS)
1438 cnh 1.3 # Name of the Mekfile
1439     MAKEFILE=${MAKEFILE}
1440 edhill 1.1
1441     EOF
1442    
1443 edhill 1.14 cat srclist.inc >> $MAKEFILE
1444     cat csrclist.inc >> $MAKEFILE
1445     cat f90srclist.inc >> $MAKEFILE
1446     cat hlist.inc >> $MAKEFILE
1447     cat ad_flow_files.inc >> $MAKEFILE
1448     echo >> $MAKEFILE
1449 cnh 1.3 echo 'F77FILES = $(SRCFILES:.F=.f)' >> $MAKEFILE
1450     echo 'F90FILES = $(F90SRCFILES:.F90=.f90)' >> $MAKEFILE
1451     echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1452 edhill 1.1
1453 cnh 1.3 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1454 edhill 1.14 rm -f ad_flow_files.inc
1455 edhill 1.1
1456     cat >>$MAKEFILE <<EOF
1457    
1458     .SUFFIXES:
1459 cnh 1.3 .SUFFIXES: .o .f .p .F .c .F90 .f90
1460 edhill 1.1
1461     all: \$(EXECUTABLE)
1462 adcroft 1.52 \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1463 adcroft 1.44 @echo Creating \$@ ...
1464 edhill 1.1 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1465     depend:
1466     @make links
1467     \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1468 adcroft 1.44 \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1469 edhill 1.1
1470 adcroft 1.52 links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1471 edhill 1.1
1472 cnh 1.3 small_f: \$(F77FILES) \$(F90FILES)
1473 edhill 1.1
1474     output.txt: \$(EXECUTABLE)
1475     @printf 'running ... '
1476     @\$(EXECUTABLE) > \$@
1477    
1478     clean:
1479 adcroft 1.44 -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template
1480 edhill 1.1 Clean:
1481     @make clean
1482     @make cleanlinks
1483 adcroft 1.52 -rm -f \$(SPECIAL_FILES)
1484 adcroft 1.51 -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1485 edhill 1.1 CLEAN:
1486     @make Clean
1487     -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1488     -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1489     -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1490 edhill 1.12 -rm -f \$(EXECUTABLE) output.txt
1491 edhill 1.1
1492 edhill 1.18 #eh3 Makefile: makefile
1493 edhill 1.1 makefile:
1494 adcroft 1.44 $THIS_SCRIPT $@
1495 edhill 1.1 cleanlinks:
1496     -find . -type l -exec rm {} \;
1497    
1498 adcroft 1.52 # Special targets ($SPECIAL_FILES) which are create by make
1499 adcroft 1.44 ${PACKAGES_DOT_H}:
1500     @echo Creating \$@ ...
1501 adcroft 1.47 @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
1502 adcroft 1.44 AD_CONFIG.h:
1503     @echo Creating \$@ ...
1504 adcroft 1.46 @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@
1505 adcroft 1.52 FC_NAMEMANGLE.h:
1506     @echo Creating \$@ ...
1507     echo "$FC_NAMEMANGLE" > \$@
1508 adcroft 1.44
1509 edhill 1.1 # The normal chain of rules is ( .F - .f - .o )
1510     .F.f:
1511     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1512     .f.o:
1513     \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1514 cnh 1.3 .F90.f90:
1515     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1516     .f90.o:
1517     \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1518 edhill 1.1 .c.o:
1519     \$(CC) \$(CFLAGS) -c \$<
1520    
1521     # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
1522     .F.p:
1523     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1524     .p.f:
1525     \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1526 edhill 1.14
1527     #=========================================
1528     #=== Automatic Differentiation Rules ===
1529    
1530     TAMC = ${TAMC}
1531     TAF = ${TAF}
1532    
1533 edhill 1.17 TAF_EXTRA = ${TAF_EXTRA}
1534     TAMC_EXTRA = ${TAMC_EXTRA}
1535    
1536 edhill 1.14 EOF
1537    
1538     ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
1539     ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
1540     ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1541     for i in $ad_vars ; do
1542     name=$i
1543     t1="t2=\$"`echo $i`
1544     eval $t1
1545     printf "%-20s = " $name >> $MAKEFILE
1546     echo $t2 >> $MAKEFILE
1547     done
1548    
1549     echo " Add the source list for AD code generation"
1550     echo >> $MAKEFILE
1551     echo -n "AD_FILES = " >> $MAKEFILE
1552     AD_FILES=`cat ad_files`
1553     for i in $AD_FILES ; do
1554     echo " \\" >> $MAKEFILE
1555     echo -n " $i" >> $MAKEFILE
1556     done
1557     echo >> $MAKEFILE
1558 edhill 1.21 rm -f ad_files
1559 edhill 1.14
1560     cat >>$MAKEFILE <<EOF
1561    
1562 edhill 1.16 # ... AD ...
1563 edhill 1.23 adall: ad_taf
1564     adtaf: ad_taf_output.f
1565     adtamc: ad_tamc_output.f
1566 edhill 1.21
1567 heimbach 1.48 ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1568 adcroft 1.44 @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template
1569 edhill 1.23 cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
1570 adcroft 1.44 -rm -f ad_config.template
1571 edhill 1.22 @make \$(F77FILES)
1572     @make \$(AD_FLOW_FILES)
1573     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
1574    
1575 edhill 1.14 ad_taf_output.f: ad_input_code.f
1576 heimbach 1.37 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1577 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1578 heimbach 1.37
1579     adtafonly:
1580 edhill 1.17 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1581 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1582 edhill 1.14
1583     ad_taf: ad_taf_output.o \$(OBJFILES)
1584 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
1585 edhill 1.14
1586     ad_tamc_output.f: ad_input_code.f
1587 edhill 1.17 \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
1588 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
1589 edhill 1.14
1590     ad_tamc: ad_tamc_output.o \$(OBJFILES)
1591 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
1592 edhill 1.14
1593    
1594 edhill 1.19 # ... FTL ...
1595 edhill 1.23 ftlall: ftl_taf
1596     ftltaf: ftl_taf_output.f
1597     ftltamc: ftl_tamc_output.f
1598 edhill 1.21
1599 heimbach 1.48 ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1600 adcroft 1.44 @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
1601 edhill 1.23 cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
1602 adcroft 1.44 -rm -f ftl_config.template
1603 edhill 1.23 @make \$(F77FILES)
1604 edhill 1.22 @make \$(AD_FLOW_FILES)
1605     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
1606    
1607     ftl_taf_output.f: ftl_input_code.f
1608     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1609 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1610 edhill 1.14
1611 heimbach 1.40 ftltafonly:
1612     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1613 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1614 heimbach 1.40
1615 edhill 1.19 ftl_taf: ftl_taf_output.o \$(OBJFILES)
1616 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
1617 edhill 1.14
1618 edhill 1.22 ftl_tamc_output.f: ftl_input_code.f
1619     \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
1620 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
1621 edhill 1.16
1622 edhill 1.19 ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
1623 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
1624 edhill 1.16
1625    
1626     # ... SVD ...
1627 heimbach 1.40 svdtaf: ad_taf_output.f ftl_taf_output.f
1628     svdall: svd_taf
1629 edhill 1.16
1630 heimbach 1.40 svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)
1631     \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
1632 edhill 1.14
1633    
1634     #=========================================
1635 edhill 1.1
1636     EOF
1637 edhill 1.7
1638     if test "x$EXEHOOK" != x ; then
1639     printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
1640     fi
1641 edhill 1.1
1642     echo " Making list of \"exceptions\" that need \".p\" files"
1643     for i in $KPPFILES ; do
1644     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
1645     RETVAL=$?
1646     if test "x$RETVAL" != x0 ; then
1647     echo "Error: unable to add file \"$i\" to the exceptions list"
1648     fi
1649     echo "$base.f: $base.p" >> $MAKEFILE
1650     done
1651    
1652     echo " Making list of NOOPTFILES"
1653     for i in $NOOPTFILES ; do
1654     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
1655     RETVAL=$?
1656     if test "x$RETVAL" != x0 ; then
1657     echo "Error: unable to add file \"$i\" to the exceptions list"
1658     fi
1659     echo "$base.o: $base.f" >> $MAKEFILE
1660 edhill 1.2 printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
1661 edhill 1.1 done
1662    
1663     echo " Add rules for links"
1664     cat srclinks.tmp >> $MAKEFILE
1665     rm -f srclinks.tmp
1666    
1667     echo " Adding makedepend marker"
1668 edhill 1.2 printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
1669 edhill 1.1
1670 edhill 1.2 printf "\n=== Done ===\n"
1671 adcroft 1.47
1672     # Create special header files
1673     $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"
1674     if test ! -f $PACKAGES_DOT_H ; then
1675     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1676     else
1677     cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1678     RETVAL=$?
1679     if test "x$RETVAL" = x0 ; then
1680     rm -f $PACKAGES_DOT_H".tmp"
1681     else
1682     mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
1683     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1684     fi
1685     fi
1686     if test ! -f AD_CONFIG.h ; then
1687     $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h
1688     fi
1689 edhill 1.5
1690    
1691     # Write the "state" for future records
1692     if test "x$DUMPSTATE" != xf ; then
1693 edhill 1.12 echo -n "" > genmake_state
1694 edhill 1.5 for i in $gm_state ; do
1695     t1="t2=\$$i"
1696     eval $t1
1697 edhill 1.12 echo "$i='$t2'" >> genmake_state
1698 edhill 1.5 done
1699     fi

  ViewVC Help
Powered by ViewVC 1.1.22