/[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.54 - (hide annotations) (download)
Fri Dec 5 18:09:35 2003 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
Changes since 1.53: +3 -3 lines
*** empty log message ***

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

  ViewVC Help
Powered by ViewVC 1.1.22