/[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.57 - (hide annotations) (download)
Tue Dec 9 18:58:24 2003 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint52e_pre, checkpoint52e_post, checkpoint52d_post, checkpoint52f_post, checkpoint52f_pre
Branch point for: netcdf-sm0
Changes since 1.56: +23 -21 lines
 o change --standarddirs option so that one can specify -standarddirs=""
   and actually remove all the standard directories from use

1 edhill 1.49 #! /usr/bin/env bash
2 edhill 1.1 #
3 edhill 1.57 # $Header: /u/u3/gcmpack/MITgcm/tools/genmake2,v 1.56 2003/12/06 23:33:10 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 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.57 STANDARDDIRS="USE_THE_DEFAULT"
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.57 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1193 edhill 1.12 STANDARDDIRS="eesupp model"
1194     fi
1195 edhill 1.57 if test "x$STANDARDDIRS" != x ; then
1196     for d in $STANDARDDIRS ; do
1197     adr="$ROOTDIR/$d/src"
1198     if test ! -d $adr ; then
1199     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1200     echo " is correct and that you correctly specified the STANDARDDIRS option"
1201     exit 1
1202     else
1203     SOURCEDIRS="$SOURCEDIRS $adr"
1204     fi
1205     adr="$ROOTDIR/$d/inc"
1206     if test ! -d $adr ; then
1207     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1208     echo " is correct and that you correctly specified the STANDARDDIRS option"
1209     exit 1
1210     else
1211     INCLUDEDIRS="$INCLUDEDIRS $adr"
1212     fi
1213     done
1214     fi
1215 edhill 1.1
1216 adcroft 1.52 echo " Searching for *OPTIONS.h files in order to warn about the presence"
1217     echo " of \"#define \"-type statements that are no longer allowed:"
1218 edhill 1.12 CPP_OPTIONS=
1219 adcroft 1.52 CPP_EEOPTIONS=
1220 edhill 1.12 spaths=". $INCLUDEDIRS"
1221 adcroft 1.52 names=`ls -1 "$ROOTDIR/pkg"`
1222 edhill 1.12 for i in $spaths ; do
1223     try="$i/CPP_OPTIONS.h"
1224 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1225 edhill 1.12 echo " found CPP_OPTIONS=\"$try\""
1226     CPP_OPTIONS="$try"
1227 adcroft 1.52 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1228     for n in $names ; do
1229     test_for_package_in_cpp_options $CPP_OPTIONS $n
1230     done
1231     fi
1232     try="$i/CPP_EEOPTIONS.h"
1233 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1234 adcroft 1.52 echo " found CPP_EEOPTIONS=\"$try\""
1235     # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1236     #**** not yet enabled ****
1237     # test_for_mpi_in_cpp_eeoptions $try
1238     #**** not yet enabled ****
1239     CPP_EEOPTIONS="$try"
1240 edhill 1.12 fi
1241     done
1242     if test "x$CPP_OPTIONS" = x ; then
1243     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1244     exit 1
1245     fi
1246 edhill 1.1
1247 edhill 1.14 # Here, we build the list of files to be "run through" the adjoint
1248     # compiler.
1249     if test -f ./ad_files ; then
1250     rm -f ./ad_files
1251     fi
1252     echo " Creating the list of files for the adjoint compiler."
1253     for i in $SOURCEDIRS ; do
1254     list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1255     for j in $list_files ; do
1256     cat $i/$j >> ad_files
1257     done
1258     done
1259    
1260 edhill 1.2 echo
1261     echo "=== Creating the Makefile ==="
1262 edhill 1.1 echo " setting INCLUDES"
1263     for i in $INCLUDEDIRS ; do
1264 edhill 1.12 if ! test -d $i ; then
1265     # INCLUDES="$INCLUDES -I$i"
1266     # else
1267 edhill 1.1 echo "Warning: can't find INCLUDEDIRS=\"$i\""
1268     fi
1269     done
1270    
1271     echo " Determining the list of source and include files"
1272     rm -rf .links.tmp
1273     mkdir .links.tmp
1274     echo "# This section creates symbolic links" > srclinks.tmp
1275     echo "" >> srclinks.tmp
1276 cnh 1.3 echo -n 'SRCFILES = ' > srclist.inc
1277     echo -n 'CSRCFILES = ' > csrclist.inc
1278     echo -n 'F90SRCFILES = ' > f90srclist.inc
1279 edhill 1.1 echo -n 'HEADERFILES = ' > hlist.inc
1280 edhill 1.14 echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc
1281 adcroft 1.9 alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1282 edhill 1.1 for d in $alldirs ; do
1283     deplist=
1284 edhill 1.14 sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1285 cnh 1.3 sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1286 edhill 1.1 for sf in $sfiles ; do
1287     if test ! -r ".links.tmp/$sf" ; then
1288     if test -f "$d/$sf" ; then
1289 adcroft 1.44 case $d/$sf in
1290     ./$PACKAGES_DOT_H)
1291     ;;
1292     ./AD_CONFIG.h)
1293     ;;
1294     ./FC_NAMEMANGLE.h)
1295     ;;
1296     *)
1297     touch .links.tmp/$sf
1298     deplist="$deplist $sf"
1299     ;;
1300     esac
1301 edhill 1.15 extn=`echo $sf | $AWK -F '.' '{print $NF}'`
1302 edhill 1.1 case $extn in
1303     F)
1304     echo " \\" >> srclist.inc
1305     echo -n " $sf" >> srclist.inc
1306     ;;
1307 cnh 1.3 F90)
1308     echo " \\" >> f90srclist.inc
1309     echo -n " $sf" >> f90srclist.inc
1310     ;;
1311 edhill 1.1 c)
1312     echo " \\" >> csrclist.inc
1313     echo -n " $sf" >> csrclist.inc
1314     ;;
1315     h)
1316     echo " \\" >> hlist.inc
1317     echo -n " $sf" >> hlist.inc
1318     ;;
1319 edhill 1.14 flow)
1320     echo " \\" >> ad_flow_files.inc
1321     echo -n " $sf" >> ad_flow_files.inc
1322     ;;
1323 edhill 1.1 esac
1324     fi
1325     fi
1326     done
1327     if test "x$deplist" != x ; then
1328 edhill 1.2 echo "" >> srclinks.tmp
1329     echo "# These files are linked from $d" >> srclinks.tmp
1330 edhill 1.1 echo "$deplist :" >> srclinks.tmp
1331 edhill 1.2 printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp
1332 edhill 1.1 fi
1333     done
1334     rm -rf .links.tmp
1335     echo "" >> srclist.inc
1336     echo "" >> csrclist.inc
1337 cnh 1.3 echo "" >> f90srclist.inc
1338 edhill 1.1 echo "" >> hlist.inc
1339 edhill 1.14 echo "" >> ad_flow_files.inc
1340 edhill 1.1
1341     if test -e $MAKEFILE ; then
1342     mv -f $MAKEFILE "$MAKEFILE.bak"
1343     fi
1344     echo " Writing makefile: $MAKEFILE"
1345     echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
1346     echo "# $MACHINE" >> $MAKEFILE
1347     echo "# This makefile was generated automatically on" >> $MAKEFILE
1348     echo "# $THISDATE" >> $MAKEFILE
1349     echo "# by the command:" >> $MAKEFILE
1350     echo "# $0 $@" >> $MAKEFILE
1351     echo "# executed by:" >> $MAKEFILE
1352     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1353 edhill 1.21
1354     EXE_AD=$EXECUTABLE"_ad"
1355     EXE_FTL=$EXECUTABLE"_ftl"
1356     EXE_SVD=$EXECUTABLE"_svd"
1357    
1358 edhill 1.1 cat >>$MAKEFILE <<EOF
1359 edhill 1.53 #
1360     # OPTFILE="$OPTFILE"
1361 edhill 1.1 #
1362     # BUILDDIR : Directory where object files are written
1363     # SOURCEDIRS : Directories containing the source (.F) files
1364     # INCLUDEDIRS : Directories containing the header-source (.h) files
1365     # EXEDIR : Directory where executable that is generated is written
1366     # EXECUTABLE : Full path of executable binary
1367     #
1368     # CPP : C-preprocessor command
1369     # INCLUDES : Directories searched for header files
1370     # DEFINES : Macro definitions for CPP
1371     # MAKEDEPEND : Dependency generator
1372     # KPP : Special preprocessor command (specific to platform)
1373     # KFLAGS : Flags for KPP
1374     # FC : Fortran compiler command
1375     # FFLAGS : Configuration/debugging options for FC
1376     # FOPTIM : Optimization options for FC
1377     # LINK : Command for link editor program
1378     # LIBS : Library flags /or/ additional optimization/debugging flags
1379    
1380     ROOTDIR = ${ROOTDIR}
1381     BUILDDIR = ${BUILDDIR}
1382     SOURCEDIRS = ${SOURCEDIRS}
1383     INCLUDEDIRS = ${INCLUDEDIRS}
1384     EXEDIR = ${EXEDIR}
1385     EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
1386     TOOLSDIR = ${TOOLSDIR}
1387    
1388 edhill 1.14 #eh3 new defines for the adjoint work
1389     AUTODIFF = ${ROOTDIR}/pkg/autodiff
1390 edhill 1.21 EXE_AD = ${EXE_AD}
1391     EXE_FTL = ${EXE_FTL}
1392     EXE_SVD = ${EXE_SVD}
1393 edhill 1.14
1394 adcroft 1.44 ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1395     DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1396    
1397 adcroft 1.52 # These files are created by Makefile
1398     SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1399    
1400 edhill 1.1 EOF
1401    
1402     # Note: figure out some way to add Hyades JAM libraries here
1403    
1404     cat >>$MAKEFILE <<EOF
1405     # Unix ln (link)
1406     LN = ${LN}
1407     # C preprocessor
1408     CPP = cat \$< | ${S64} | ${CPP}
1409     # Dependency generator
1410     MAKEDEPEND = ${MAKEDEPEND}
1411     # Special preprocessor (KAP on DECs, FPP on Crays)
1412     KPP = ${KPP}
1413     # Fortran compiler
1414     FC = ${FC}
1415 cnh 1.3 # Fortran compiler
1416     F90C = ${F90C}
1417 edhill 1.1 # Link editor
1418     LINK = ${LINK}
1419    
1420     # Defines for CPP
1421     DEFINES = ${DEFINES}
1422     # Includes for CPP
1423     INCLUDES = ${INCLUDES}
1424     # Flags for KPP
1425     KFLAGS1 = ${KFLAGS1}
1426     KFLAGS2 = ${KFLAGS2}
1427     # Optim./debug for FC
1428     FFLAGS = ${FFLAGS}
1429     FOPTIM = ${FOPTIM}
1430 cnh 1.3 # Optim./debug for FC
1431     F90FLAGS = ${F90FLAGS}
1432     F90OPTIM = ${F90OPTIM}
1433 edhill 1.1 # Flags for CC
1434     CFLAGS = ${CFLAGS}
1435     # Files that should not be optimized
1436     NOOPTFILES = ${NOOPTFILES}
1437     NOOPTFLAGS = ${NOOPTFLAGS}
1438     # Flags and libraries needed for linking
1439     LIBS = ${LIBS} \$(XLIBS)
1440 cnh 1.3 # Name of the Mekfile
1441     MAKEFILE=${MAKEFILE}
1442 edhill 1.1
1443     EOF
1444    
1445 edhill 1.14 cat srclist.inc >> $MAKEFILE
1446     cat csrclist.inc >> $MAKEFILE
1447     cat f90srclist.inc >> $MAKEFILE
1448     cat hlist.inc >> $MAKEFILE
1449     cat ad_flow_files.inc >> $MAKEFILE
1450     echo >> $MAKEFILE
1451 cnh 1.3 echo 'F77FILES = $(SRCFILES:.F=.f)' >> $MAKEFILE
1452     echo 'F90FILES = $(F90SRCFILES:.F90=.f90)' >> $MAKEFILE
1453     echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1454 edhill 1.1
1455 cnh 1.3 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1456 edhill 1.14 rm -f ad_flow_files.inc
1457 edhill 1.1
1458     cat >>$MAKEFILE <<EOF
1459    
1460     .SUFFIXES:
1461 cnh 1.3 .SUFFIXES: .o .f .p .F .c .F90 .f90
1462 edhill 1.1
1463     all: \$(EXECUTABLE)
1464 adcroft 1.52 \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1465 adcroft 1.44 @echo Creating \$@ ...
1466 edhill 1.1 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1467     depend:
1468     @make links
1469     \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1470 adcroft 1.44 \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1471 edhill 1.1
1472 adcroft 1.52 links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1473 edhill 1.1
1474 cnh 1.3 small_f: \$(F77FILES) \$(F90FILES)
1475 edhill 1.1
1476     output.txt: \$(EXECUTABLE)
1477     @printf 'running ... '
1478     @\$(EXECUTABLE) > \$@
1479    
1480     clean:
1481 adcroft 1.44 -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template
1482 edhill 1.1 Clean:
1483     @make clean
1484     @make cleanlinks
1485 adcroft 1.52 -rm -f \$(SPECIAL_FILES)
1486 adcroft 1.51 -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1487 edhill 1.1 CLEAN:
1488     @make Clean
1489     -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1490     -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1491     -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1492 edhill 1.12 -rm -f \$(EXECUTABLE) output.txt
1493 edhill 1.1
1494 edhill 1.18 #eh3 Makefile: makefile
1495 edhill 1.1 makefile:
1496 adcroft 1.44 $THIS_SCRIPT $@
1497 edhill 1.1 cleanlinks:
1498     -find . -type l -exec rm {} \;
1499    
1500 adcroft 1.52 # Special targets ($SPECIAL_FILES) which are create by make
1501 adcroft 1.44 ${PACKAGES_DOT_H}:
1502     @echo Creating \$@ ...
1503 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) > \$@
1504 adcroft 1.44 AD_CONFIG.h:
1505     @echo Creating \$@ ...
1506 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 > \$@
1507 adcroft 1.52 FC_NAMEMANGLE.h:
1508     @echo Creating \$@ ...
1509     echo "$FC_NAMEMANGLE" > \$@
1510 adcroft 1.44
1511 edhill 1.1 # The normal chain of rules is ( .F - .f - .o )
1512     .F.f:
1513     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1514     .f.o:
1515     \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1516 cnh 1.3 .F90.f90:
1517     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1518     .f90.o:
1519     \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1520 edhill 1.1 .c.o:
1521     \$(CC) \$(CFLAGS) -c \$<
1522    
1523     # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
1524     .F.p:
1525     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1526     .p.f:
1527     \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1528 edhill 1.14
1529     #=========================================
1530     #=== Automatic Differentiation Rules ===
1531    
1532     TAMC = ${TAMC}
1533     TAF = ${TAF}
1534    
1535 edhill 1.17 TAF_EXTRA = ${TAF_EXTRA}
1536     TAMC_EXTRA = ${TAMC_EXTRA}
1537    
1538 edhill 1.14 EOF
1539    
1540     ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
1541     ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
1542     ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1543     for i in $ad_vars ; do
1544     name=$i
1545     t1="t2=\$"`echo $i`
1546     eval $t1
1547     printf "%-20s = " $name >> $MAKEFILE
1548     echo $t2 >> $MAKEFILE
1549     done
1550    
1551     echo " Add the source list for AD code generation"
1552     echo >> $MAKEFILE
1553     echo -n "AD_FILES = " >> $MAKEFILE
1554     AD_FILES=`cat ad_files`
1555     for i in $AD_FILES ; do
1556     echo " \\" >> $MAKEFILE
1557     echo -n " $i" >> $MAKEFILE
1558     done
1559     echo >> $MAKEFILE
1560 edhill 1.21 rm -f ad_files
1561 edhill 1.14
1562     cat >>$MAKEFILE <<EOF
1563    
1564 edhill 1.16 # ... AD ...
1565 edhill 1.23 adall: ad_taf
1566     adtaf: ad_taf_output.f
1567     adtamc: ad_tamc_output.f
1568 edhill 1.21
1569 heimbach 1.48 ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1570 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
1571 edhill 1.23 cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
1572 adcroft 1.44 -rm -f ad_config.template
1573 edhill 1.22 @make \$(F77FILES)
1574     @make \$(AD_FLOW_FILES)
1575     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
1576    
1577 edhill 1.14 ad_taf_output.f: ad_input_code.f
1578 heimbach 1.37 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1579 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1580 heimbach 1.37
1581     adtafonly:
1582 edhill 1.17 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1583 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1584 edhill 1.14
1585     ad_taf: ad_taf_output.o \$(OBJFILES)
1586 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
1587 edhill 1.14
1588     ad_tamc_output.f: ad_input_code.f
1589 edhill 1.17 \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
1590 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
1591 edhill 1.14
1592     ad_tamc: ad_tamc_output.o \$(OBJFILES)
1593 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
1594 edhill 1.14
1595    
1596 edhill 1.19 # ... FTL ...
1597 edhill 1.23 ftlall: ftl_taf
1598     ftltaf: ftl_taf_output.f
1599     ftltamc: ftl_tamc_output.f
1600 edhill 1.21
1601 heimbach 1.48 ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1602 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
1603 edhill 1.23 cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
1604 adcroft 1.44 -rm -f ftl_config.template
1605 edhill 1.23 @make \$(F77FILES)
1606 edhill 1.22 @make \$(AD_FLOW_FILES)
1607     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
1608    
1609     ftl_taf_output.f: ftl_input_code.f
1610     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1611 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1612 edhill 1.14
1613 heimbach 1.40 ftltafonly:
1614     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1615 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1616 heimbach 1.40
1617 edhill 1.19 ftl_taf: ftl_taf_output.o \$(OBJFILES)
1618 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
1619 edhill 1.14
1620 edhill 1.22 ftl_tamc_output.f: ftl_input_code.f
1621     \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
1622 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
1623 edhill 1.16
1624 edhill 1.19 ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
1625 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
1626 edhill 1.16
1627    
1628     # ... SVD ...
1629 heimbach 1.40 svdtaf: ad_taf_output.f ftl_taf_output.f
1630     svdall: svd_taf
1631 edhill 1.16
1632 heimbach 1.40 svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)
1633     \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
1634 edhill 1.14
1635    
1636     #=========================================
1637 edhill 1.1
1638     EOF
1639 edhill 1.7
1640     if test "x$EXEHOOK" != x ; then
1641     printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
1642     fi
1643 edhill 1.1
1644     echo " Making list of \"exceptions\" that need \".p\" files"
1645     for i in $KPPFILES ; do
1646     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
1647     RETVAL=$?
1648     if test "x$RETVAL" != x0 ; then
1649     echo "Error: unable to add file \"$i\" to the exceptions list"
1650     fi
1651     echo "$base.f: $base.p" >> $MAKEFILE
1652     done
1653    
1654     echo " Making list of NOOPTFILES"
1655     for i in $NOOPTFILES ; do
1656     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
1657     RETVAL=$?
1658     if test "x$RETVAL" != x0 ; then
1659     echo "Error: unable to add file \"$i\" to the exceptions list"
1660     fi
1661     echo "$base.o: $base.f" >> $MAKEFILE
1662 edhill 1.2 printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
1663 edhill 1.1 done
1664    
1665     echo " Add rules for links"
1666     cat srclinks.tmp >> $MAKEFILE
1667     rm -f srclinks.tmp
1668    
1669     echo " Adding makedepend marker"
1670 edhill 1.2 printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
1671 edhill 1.1
1672 edhill 1.2 printf "\n=== Done ===\n"
1673 adcroft 1.47
1674     # Create special header files
1675     $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"
1676     if test ! -f $PACKAGES_DOT_H ; then
1677     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1678     else
1679     cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1680     RETVAL=$?
1681     if test "x$RETVAL" = x0 ; then
1682     rm -f $PACKAGES_DOT_H".tmp"
1683     else
1684     mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
1685     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1686     fi
1687     fi
1688     if test ! -f AD_CONFIG.h ; then
1689     $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
1690     fi
1691 edhill 1.5
1692    
1693     # Write the "state" for future records
1694     if test "x$DUMPSTATE" != xf ; then
1695 edhill 1.12 echo -n "" > genmake_state
1696 edhill 1.5 for i in $gm_state ; do
1697     t1="t2=\$$i"
1698     eval $t1
1699 edhill 1.12 echo "$i='$t2'" >> genmake_state
1700 edhill 1.5 done
1701     fi

  ViewVC Help
Powered by ViewVC 1.1.22