/[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.91 - (hide annotations) (download)
Fri Jul 30 14:31:40 2004 UTC (19 years, 7 months ago) by edhill
Branch: MAIN
Changes since 1.90: +71 -9 lines
o genmake2: add ability to search for C compilers and cleanup test output
  - fixes recent SX-6 problems and should help with others (eg. HP-UX)

1 edhill 1.86 #! /usr/bin/env bash
2 edhill 1.1 #
3 edhill 1.91 # $Header: /u/gcmpack/MITgcm/tools/genmake2,v 1.90 2004/07/27 20:59:19 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 edhill 1.71 printf "Error: In $file there is an illegal line: "
41 adcroft 1.52 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 adcroft 1.74 return $matched
71 edhill 1.12 else
72     echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73     fi
74     }
75 edhill 1.1
76 edhill 1.75 # Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
77     # cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
78     check_for_broken_Ff() {
79 edhill 1.76 # Do we have defaults for $FS and/or $FS90 ?
80     tfs=f
81     tfs9=f90
82     if test "x$FS" != x ; then
83     tfs="$FS"
84     fi
85     if test "x$FS90" != x ; then
86     tfs9="$FS90"
87     fi
88    
89 edhill 1.75 # First check the ability to create a *.F/.f pair.
90 edhill 1.76 cat <<EOF >> genmake_hello.F
91 edhill 1.75 program hello
92     write(*,*) 'hi'
93     stop
94     end
95     EOF
96 edhill 1.76 cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97 edhill 1.75 RETVAL=$?
98     if test "x$RETVAL" != x0 ; then
99 edhill 1.76 if test "x$FS" = x ; then
100 edhill 1.77 FS='for'
101     FS90='fr9'
102 edhill 1.76 check_for_broken_Ff
103     else
104     cat <<EOF 2>&1
105     ERROR: Your file system cannot distinguish between *.F and *.f files
106     (fails the "cp" test) and this program cannot find a suitable
107     replacement extension. Please try a different build environment or
108     contact the <MITgcm-support@mitgcm.org> list for help.
109    
110     EOF
111     exit -1
112     fi
113 edhill 1.75 return
114     fi
115 edhill 1.76 rm -f genmake_hello.*
116 edhill 1.75
117 edhill 1.76 # Check the ability of ${MAKE} and ${LN} to use the current set
118     # of extensions.
119     cat <<EOF >> genmake_hello.F
120     program hello
121     write(*,*) 'hi'
122     stop
123     end
124     EOF
125 edhill 1.88 test -f Makefile && mv -f Makefile Makefile.bak
126 edhill 1.75 cat <<EOF >> Makefile
127 edhill 1.77 %.$tfs : %.F
128 edhill 1.75 .SUFFIXES:
129 edhill 1.76 genmake_hello.$tfs: genmake_hello.F
130     $LN genmake_hello.F genmake_hello.$tfs
131 edhill 1.75 EOF
132 edhill 1.76 $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133 edhill 1.75 RETVAL=$?
134 edhill 1.88 if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135 edhill 1.76 if test "x$FS" = x ; then
136 edhill 1.77 FS='for'
137     FS90='fr9'
138 edhill 1.76 check_for_broken_Ff
139     else
140     cat <<EOF 2>&1
141     ERROR: Your file system cannot distinguish between *.F and *.f files
142     (fails the "make/ln" test) and this program cannot find a suitable
143     replacement extension. Please try a different build environment or
144     contact the <MITgcm-support@mitgcm.org> list for help.
145    
146     EOF
147     exit -1
148     return
149     fi
150 edhill 1.75 fi
151 edhill 1.76 rm -f genmake_hello.* Makefile
152 edhill 1.88 test -f Makefile && mv -f Makefile.bak Makefile
153 edhill 1.75
154 edhill 1.76 # If we make it here, use the extensions
155     FS=$tfs
156     FS90=$tfs9
157     return
158 edhill 1.75 }
159    
160    
161 edhill 1.84 look_for_makedepend() {
162 adcroft 1.33
163 edhill 1.69 # The "original" makedepend is part of the Imake system that is
164     # most often distributed with XFree86 or with an XFree86 source
165     # package. As a result, many machines (eg. generic Linux) do not
166     # have a system-default "makedepend" available. For those
167     # systems, we have two fall-back options:
168     #
169     # 1) a makedepend implementation shipped with the cyrus-imapd
170     # package: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
171     #
172     # 2) a known-buggy xmakedpend shell script
173     #
174     # So the choices are, in order:
175     #
176     # 1) use the user-specified program
177     # 2) use a system-wide default
178     # 3) locally build and use the cyrus implementation
179     # 4) fall back to the buggy local xmakedpend script
180     #
181 adcroft 1.33 if test "x${MAKEDEPEND}" = x ; then
182 edhill 1.85 which makedepend > /dev/null 2>&1
183     RV0=$?
184     cat <<EOF >> genmake_tc.f
185 edhill 1.77 program test
186     write(*,*) 'test'
187     stop
188     end
189     EOF
190 edhill 1.85 makedepend genmake_tc.f > /dev/null 2>&1
191     RV1=$?
192     if test "x${RV0}${RV1}" = x00 ; then
193     MAKEDEPEND=makedepend
194     else
195     echo " a system-default makedepend was not found."
196    
197     # Try to build the cyrus implementation
198 edhill 1.90 build_cyrus_makedepend
199 edhill 1.85 RETVAL=$?
200 edhill 1.90 if test "x$RETVAL" != x0 ; then
201 edhill 1.85 MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
202     fi
203     rm -f ./genmake_cy_md
204     fi
205 edhill 1.90 else
206     # echo "MAKEDEPEND=${MAKEDEPEND}"
207     echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
208     RETVAL=$?
209     if test x"$RETVAL" = x0 ; then
210     build_cyrus_makedepend
211     fi
212 edhill 1.1 fi
213 edhill 1.84 }
214    
215    
216 edhill 1.90 build_cyrus_makedepend() {
217     rm -f ./genmake_cy_md
218     (
219     cd $ROOTDIR/tools/cyrus-imapd-makedepend \
220     && ./configure > /dev/null 2>&1 \
221     && make > /dev/null 2>&1
222     if test -x ./makedepend.exe ; then
223     $LN ./makedepend.exe ./makedepend
224     fi
225     ./makedepend ifparser.c > /dev/null 2>&1 \
226     && echo "true"
227     ) > ./genmake_cy_md
228     grep true ./genmake_cy_md > /dev/null 2>&1
229     RETVAL=$?
230     rm -f ./genmake_cy_md
231     if test "x$RETVAL" = x0 ; then
232     MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
233     return 0
234     else
235     echo "WARNING: unable to build cyrus-imapd-makedepend"
236     return 1
237     fi
238     }
239    
240 edhill 1.84 # Guess possible config options for this host
241     find_possible_configs() {
242    
243     tmp1=`uname`"_"`uname -m`
244     tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
245     tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
246     tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
247     tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
248     tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
249     PLATFORM=$tmp3
250     echo $PLATFORM | grep cygwin > /dev/null 2>&1 && PLATFORM=cygwin_ia32
251     OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
252     echo " The platform appears to be: $PLATFORM"
253    
254     echo "test" > test
255     ln -s ./test link
256     RETVAL=$?
257     if test "x${RETVAL}" = x0 ; then
258     LN="ln -s"
259     else
260     echo "Error: \"ln -s\" does not appear to work on this system!"
261     echo " For help, please contact <MITgcm-support@mitgcm.org>."
262     exit 1
263     fi
264     rm -f test link
265    
266     if test "x$CPP" = x ; then
267     CPP="cpp -traditional -P"
268     fi
269    
270     look_for_makedepend
271 edhill 1.1
272 edhill 1.91 #================================================================
273     # look for possible C compilers
274     tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
275     p_CC=
276     for c in $tmp ; do
277     rm -f ./genmake_hello.c ./genmake_hello
278     cat >> genmake_hello.c << EOF
279     #include <stdio.h>
280     int main(int argc, char **argv) {
281     printf("Hello!\n");
282     return 0;
283     }
284     EOF
285     $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
286     RETVAL=$?
287     if test "x${RETVAL}" = x0 ; then
288     p_CC="$p_CC $c"
289     fi
290     done
291     rm -f ./genmake_hello.c ./genmake_hello
292     if test "x${p_CC}" = x ; then
293     cat 1>&2 <<EOF
294    
295     Error: No C compilers were found in your path. Please specify one using:
296    
297     1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
298     2) the CC or MITGCM_CC environment variables.
299    
300     EOF
301     exit 1
302     else
303     echo " The possible C compilers found in your path are:"
304     echo " "$p_CC
305     if test "x$CC" = x ; then
306     CC=`echo $p_CC | $AWK '{print $1}'`
307     echo " Setting C compiler to: "$CC
308     fi
309     fi
310    
311     #================================================================
312     # look for possible FORTRAN compilers
313 cnh 1.24 tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
314 edhill 1.1 p_FC=
315 edhill 1.11 for c in $tmp ; do
316     rm -f ./hello.f ./hello
317     cat >> hello.f <<EOF
318     program hello
319     do i=1,3
320     print *, 'hello world : ', i
321     enddo
322     end
323     EOF
324     $c -o hello hello.f > /dev/null 2>&1
325 edhill 1.1 RETVAL=$?
326     if test "x${RETVAL}" = x0 ; then
327     p_FC="$p_FC $c"
328     fi
329     done
330 edhill 1.21 rm -f ./hello.f ./hello
331 edhill 1.1 if test "x${p_FC}" = x ; then
332 edhill 1.11 cat 1>&2 <<EOF
333    
334     Error: No Fortran compilers were found in your path. Please specify one using:
335    
336     1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
337     2) a command-line option (eg. "-fc NAME"), or
338 edhill 1.91 3) the FC or MITGCM_FC environment variables.
339 edhill 1.11
340     EOF
341     exit 1
342 edhill 1.1 else
343 edhill 1.11 echo " The possible FORTRAN compilers found in your path are:"
344     echo " "$p_FC
345     if test "x$FC" = x ; then
346 edhill 1.15 FC=`echo $p_FC | $AWK '{print $1}'`
347 adcroft 1.67 echo " Setting FORTRAN compiler to: "$FC
348 edhill 1.11 fi
349 edhill 1.1 fi
350    
351 adcroft 1.67 if test "x$OPTFILE" = x ; then
352     OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
353     if test ! -r $OPTFILE ; then
354     echo " I looked for the file "$OPTFILE" but did not find it"
355     fi
356     fi
357     # echo " The options file: $p_OF"
358     # echo " appears to match so we'll use it."
359     # for i in $p_FC ; do
360     #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
361     #if test -r $p_OF ; then
362     # OPTFILE=$p_OF
363     # echo " The options file: $p_OF"
364     # echo " appears to match so we'll use it."
365     # break
366     #fi
367     # done
368 edhill 1.11 if test "x$OPTFILE" = x ; then
369     cat 1>&2 <<EOF
370    
371     Error: No options file was found in: $ROOTDIR/tools/build_options/
372     that matches this platform ("$PLATFORM") and the compilers found in
373     your path. Please specify an "optfile" using:
374    
375     1) the command line (eg. "-optfile=path/to/OPTFILE"), or
376     2) the MITGCM_OF environment variable.
377    
378     If you need help, please contact the developers at <MITgcm-support@mitgcm.org>.
379    
380 edhill 1.1 EOF
381 edhill 1.11 exit 1
382 edhill 1.1 fi
383 edhill 1.11
384     # # look for possible MPI libraries
385     # mpi_libs=
386     # mpi_fort=`which mpif77 2>/dev/null`
387     # RETVAL=$?
388     # if test "x${RETVAL}" = x0 ; then
389     # cat >>test.f <<EOF
390     # PROGRAM HELLO
391     # DO 10, I=1,10
392     # PRINT *,'Hello World'
393     # 10 CONTINUE
394     # STOP
395     # END
396     # EOF
397     # eval "$mpi_fort -showme test.f > out"
398     # RETVAL=$?
399     # if test "x${RETVAL}" = x0 ; then
400     # a=`cat out`
401     # for i in $a ; do
402     # case $i in
403     # -*)
404     # mpi_libs="$mpi_libs $i" ;;
405     # esac
406     # done
407     # echo "The MPI libs appear to be:"
408     # echo " "$mpi_libs
409     # fi
410     # rm -f test.f out
411     # fi
412 edhill 1.1
413     }
414    
415     # Parse the package dependency information
416     get_pdepend_list() {
417    
418     # strip the comments and then convert the dependency file into
419     # two arrays: PNAME, DNAME
420     cat $1 | sed -e 's/#.*$//g' \
421 edhill 1.15 | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
422 edhill 1.1 > ./.pd_tmp
423 edhill 1.34 . ./.pd_tmp
424 edhill 1.1 rm -f ./.pd_tmp
425    
426 edhill 1.71 printf "PNAME = "${}
427 edhill 1.1 }
428    
429    
430     # Explain usage
431     usage() {
432 edhill 1.41 cat <<EOF
433    
434     Usage: "$0" [OPTIONS]
435     where [OPTIONS] can be:
436    
437     -help | --help | -h | --h
438     Print this help message and exit.
439 edhill 1.79
440     -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
441     -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
442     Use "NAME" as the adoptfile. By default, the file at
443     "tools/adjoint_options/adjoint_default" will be used.
444 edhill 1.41
445     -nooptfile | --nooptfile
446     -optfile NAME | --optfile NAME | -of NAME | --of NAME
447     -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
448     Use "NAME" as the optfile. By default, an attempt will be
449     made to find an appropriate "standard" optfile in the
450     tools/build_options/ directory.
451    
452     -pdepend NAME | --pdepend NAME
453     -pdepend=NAME | --pdepend=NAME
454     Get package dependency information from "NAME".
455    
456     -pdefault NAME | --pdefault NAME
457     -pdefault=NAME | --pdefault=NAME
458     Get the default package list from "NAME".
459    
460     -make NAME | -m NAME
461     --make=NAME | -m=NAME
462     Use "NAME" for the MAKE program. The default is "make" but
463     many platforms, "gmake" is the preferred choice.
464    
465     -makefile NAME | -mf NAME
466     --makefile=NAME | -mf=NAME
467     Call the makefile "NAME". The default is "Makefile".
468    
469 edhill 1.69 -makedepend NAME | -md NAME
470     --makedepend=NAME | -md=NAME
471     Use "NAME" for the MAKEDEPEND program.
472    
473 edhill 1.41 -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
474     -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
475     Specify the location of the MITgcm ROOTDIR as "NAME".
476     By default, genamke will try to find the location by
477     looking in parent directories (up to the 5th parent).
478    
479     -mods NAME | --mods NAME | -mo NAME | --mo NAME
480     -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
481     Here, "NAME" specifies a list of directories that are
482     used for additional source code. Files found in the
483     "mods list" are given preference over files of the same
484     name found elsewhere.
485    
486     -disable NAME | --disable NAME
487     -disable=NAME | --disable=NAME
488     Here "NAME" specifies a list of packages that we don't
489     want to use. If this violates package dependencies,
490     genamke will exit with an error message.
491    
492     -enable NAME | --enable NAME
493     -enable=NAME | --enable=NAME
494     Here "NAME" specifies a list of packages that we wish
495     to specifically enable. If this violates package
496     dependencies, genamke will exit with an error message.
497    
498     -standarddirs NAME | --standarddirs NAME
499     -standarddirs=NAME | --standarddirs=NAME
500     Here, "NAME" specifies a list of directories to be
501     used as the "standard" code.
502    
503     -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
504     -fc=NAME | --fc=NAME
505     Use "NAME" as the fortran compiler. By default, genmake
506     will search for a working compiler by trying a list of
507     "usual suspects" such as g77, f77, etc.
508    
509 edhill 1.91 -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
510     Use "NAME" as the C compiler. By default, genmake
511     will search for a working compiler by trying a list of
512     "usual suspects" such as gcc, c89, cc, etc.
513    
514 edhill 1.41 -[no]ieee | --[no]ieee
515     Do or don't use IEEE numerics. Note that this option
516     *only* works if it is supported by the OPTFILE that
517     is being used.
518    
519 adcroft 1.67 -mpi | --mpi
520     Include MPI header files and link to MPI libraries
521     -mpi=PATH | --mpi=PATH
522     Include MPI header files and link to MPI libraries using MPI_ROOT
523     set to PATH. i.e. Include files from $PATH/include, link to libraries
524     from $PATH/lib and use binaries from $PATH/bin.
525    
526 edhill 1.71 -bash NAME
527     Explicitly specify the Bourne or BASH shell to use
528    
529 edhill 1.41 While it is most often a single word, the "NAME" variables specified
530     above can in many cases be a space-delimited string such as:
531    
532     --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3'
533     -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3'
534     -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
535    
536     which, depending upon your shell, may need to be single-quoted.
537    
538     For more detailed genmake documentation, please see:
539    
540     http://mitgcm.org/devel_HOWTO/
541    
542     EOF
543    
544 edhill 1.1 exit 1
545     }
546    
547 edhill 1.31 # Build a CPP macro to automate calling C routines from FORTRAN
548     get_fortran_c_namemangling() {
549 edhill 1.89
550     #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
551     if test ! "x$FC_NAMEMANGLE" = x ; then
552     return 0
553     fi
554    
555 edhill 1.31 default_nm="#define FC_NAMEMANGLE(X) X ## _"
556    
557     cat > genmake_test.c <<EOF
558     void tcall( char * string ) { tsub( string ); }
559     EOF
560 edhill 1.39 $MAKE genmake_test.o >> genmake_warnings 2>&1
561 edhill 1.31 RETVAL=$?
562     if test "x$RETVAL" != x0 ; then
563     FC_NAMEMANGLE=$default_nm
564 edhill 1.39 cat <<EOF>> genmake_errors
565    
566     WARNING: C test compile fails
567     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
568     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
569     EOF
570 edhill 1.31 return 1
571     fi
572 edhill 1.91 c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
573 edhill 1.31 RETVAL=$?
574     if test "x$RETVAL" != x0 ; then
575     FC_NAMEMANGLE=$default_nm
576 edhill 1.39 cat <<EOF>> genmake_warnings
577    
578     WARNING: The "nm" command failed.
579     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
580     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
581     EOF
582 edhill 1.31 return 1
583     fi
584     cat > genmake_tcomp.f <<EOF
585     subroutine tcall( string )
586     character*(*) string
587     call tsub( string )
588     end
589     EOF
590 edhill 1.39 $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1
591 edhill 1.31 RETVAL=$?
592     if test "x$RETVAL" != x0 ; then
593     FC_NAMEMANGLE=$default_nm
594 edhill 1.39 cat <<EOF>> genmake_warnings
595    
596     WARNING: FORTRAN test compile fails -- please see "genmake_errors"
597     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
598     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
599     EOF
600 edhill 1.31 return 1
601     fi
602 edhill 1.91 f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
603 edhill 1.31 RETVAL=$?
604     if test "x$RETVAL" != x0 ; then
605     FC_NAMEMANGLE=$default_nm
606 edhill 1.39 cat <<EOF>> genmake_warnings
607    
608     WARNING: The "nm" command failed.
609     WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
610     WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
611     EOF
612 edhill 1.31 return 1
613     fi
614    
615     c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
616     f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
617     c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
618     f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
619    
620     nmangle="X"
621     if test "x$c_a" != "x$f_a" ; then
622     comm="echo x$f_a | sed -e 's|x$c_a||'"
623     a=`eval $comm`
624     nmangle="$a ## $nmangle"
625     fi
626     if test "x$c_b" != "x$f_b" ; then
627     comm="echo x$f_b | sed -e 's|x$c_b||'"
628     b=`eval $comm`
629     nmangle="$nmangle ## $b"
630     fi
631    
632     FC_NAMEMANGLE="#define FC_NAMEMANGLE(X) $nmangle"
633 edhill 1.32
634     # cleanup the testing files
635     rm -f genmake_tcomp.* genmake_test.*
636 edhill 1.31 }
637 edhill 1.1
638 edhill 1.39
639     check_HAVE_CLOC() {
640     get_fortran_c_namemangling
641     cat <<EOF > genmake_tc_1.c
642     $FC_NAMEMANGLE
643     #include <stdio.h>
644     #include <stdlib.h>
645     #include <unistd.h>
646     #include <assert.h>
647     #include <sys/time.h>
648     void FC_NAMEMANGLE(cloc) ( double *curtim )
649     {
650     struct timeval tv1;
651     gettimeofday(&tv1 , (void *)NULL );
652     *curtim = (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
653     *curtim = *curtim/1.E6;
654     }
655     EOF
656     make genmake_tc_1.o >> genmake_tc.log 2>&1
657     RET_C=$?
658     cat <<EOF > genmake_tc_2.f
659     program hello
660     Real*8 wtime
661     external cloc
662     call cloc(wtime)
663     print *," HELLO WORLD", wtime
664     end program hello
665     EOF
666     $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1
667     RET_F=$?
668     test -x ./genmake_tc && ./genmake_tc >> genmake_tc.log 2>&1
669     RETVAL=$?
670     if test "x$RETVAL" = x0 ; then
671     HAVE_CLOC=t
672     DEFINES="$DEFINES -DHAVE_CLOC"
673     fi
674     rm -f genmake_tc*
675     }
676    
677    
678 edhill 1.60 check_netcdf_libs() {
679 edhill 1.91 echo "" > genmake_tnc.log
680 edhill 1.75 cat <<EOF > genmake_tnc.for
681 edhill 1.60 program fgennc
682     #include "netcdf.inc"
683     integer iret, ncid, xid
684     iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
685     IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
686     iret = nf_def_dim(ncid, 'X', 11, xid)
687     IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
688     iret = nf_close(ncid)
689     IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
690     end
691     EOF
692 edhill 1.89 #echo "$CPP $DEFINES $INCLUDES"
693 edhill 1.91 $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null \
694 edhill 1.60 && $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1
695     RET_COMPILE=$?
696     test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1
697     RETVAL=$?
698     if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
699     HAVE_NETCDF=t
700     else
701 edhill 1.66 # try again with "-lnetcdf" added to the libs
702 edhill 1.91 $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null \
703 edhill 1.66 && $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
704     $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
705     RET_COMPILE=$?
706     test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1
707     RETVAL=$?
708     if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
709     LIBS="$LIBS -lnetcdf"
710     HAVE_NETCDF=t
711     else
712     cat genmake_tnc.log >> genmake_warnings
713     fi
714 edhill 1.60 fi
715     rm -f genmake_tnc*
716     }
717    
718    
719 adcroft 1.67
720     ###############################################################################
721     # Sequential part of script starts here
722     ###############################################################################
723    
724 edhill 1.1 # Set defaults here
725 edhill 1.5 COMMANDL="$0 $@"
726    
727 edhill 1.1 PLATFORM=
728     LN=
729     S64=
730     KPP=
731     FC=
732 edhill 1.91 CC=
733 edhill 1.60 CPP=
734 edhill 1.1 LINK=
735 edhill 1.31 DEFINES=
736 edhill 1.1 PACKAGES=
737     ENABLE=
738     DISABLE=
739     MAKEFILE=
740 edhill 1.90 #MAKEDEPEND=
741 edhill 1.1 PDEPEND=
742 edhill 1.11 DUMPSTATE=t
743 edhill 1.1 PDEFAULT=
744     OPTFILE=
745 edhill 1.2 INCLUDES="-I."
746 edhill 1.1 FFLAGS=
747     FOPTIM=
748     CFLAGS=
749     KFLAGS1=
750     KFLAGS2=
751 edhill 1.70 #LDADD=
752 edhill 1.1 LIBS=
753     KPPFILES=
754     NOOPTFILES=
755     NOOPTFLAGS=
756 adcroft 1.67 MPI=
757     MPIPATH=
758 edhill 1.1
759 edhill 1.29 # DEFINES checked by test compilation
760     HAVE_SYSTEM=
761     HAVE_FDATE=
762     FC_NAMEMANGLE=
763 edhill 1.39 HAVE_CLOC=
764 edhill 1.60 HAVE_NETCDF=
765 cnh 1.81 HAVE_ETIME=
766 edhill 1.29
767 edhill 1.1 MODS=
768     TOOLSDIR=
769     SOURCEDIRS=
770     INCLUDEDIRS=
771 edhill 1.57 STANDARDDIRS="USE_THE_DEFAULT"
772 edhill 1.1
773 edhill 1.73 G2ARGS=
774 edhill 1.71 BASH=
775 edhill 1.1 PWD=`pwd`
776     MAKE=make
777 edhill 1.15 AWK=awk
778 edhill 1.1 THISHOSTNAME=`hostname`
779     THISCWD=`pwd`
780     THISDATE=`date`
781     MACHINE=`uname -a`
782 edhill 1.7 EXECUTABLE=
783     EXEHOOK=
784     EXEDIR=
785 edhill 1.12 PACKAGES_CONF=
786     IEEE=
787     if test "x$MITGCM_IEEE" != x ; then
788     IEEE=$MITGCM_IEEE
789     fi
790 edhill 1.76 FS=
791     FS90=
792 edhill 1.1
793 edhill 1.14 AUTODIFF_PKG_USED=f
794     AD_OPTFILE=
795 edhill 1.17 TAF=
796     AD_TAF_FLAGS=
797     FTL_TAF_FLAGS=
798     SVD_TAF_FLAGS=
799     TAF_EXTRA=
800     TAMC=
801     AD_TAMC_FLAGS=
802     FTL_TAF_FLAGS=
803     SVD_TAMC_FLAGS=
804     TAMC_EXTRA=
805    
806 edhill 1.14
807 edhill 1.5 # The following state can be set directly by command-line switches
808 edhill 1.41 gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
809 edhill 1.60 gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
810 edhill 1.5
811     # The following state is not directly set by command-line switches
812     gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
813     gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
814     gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
815 edhill 1.12 gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
816 cnh 1.81 gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
817 edhill 1.5
818 edhill 1.14 # The following are all related to adjoint/tangent-linear stuff
819 edhill 1.29 gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
820     gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
821     gm_s12="TAF_EXTRA TAMC_EXTRA"
822 edhill 1.14
823 edhill 1.29 gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
824     gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
825 edhill 1.5
826 edhill 1.41 cat <<EOF
827    
828     GENMAKE :
829    
830     A program for GENerating MAKEfiles for the MITgcm project. For a
831     quick list of options, use "genmake -h" or for more detail see:
832    
833     http://mitgcm.org/devel_HOWTO/
834    
835     EOF
836 edhill 1.5
837 edhill 1.2 echo "=== Processing options files and arguments ==="
838 edhill 1.12 gm_local="genmake_local"
839     for i in . $MODS ; do
840     if test -r $i/$gm_local ; then
841 edhill 1.34 . $i/$gm_local
842 edhill 1.12 break
843     fi
844     done
845 edhill 1.71 printf " getting local config information: "
846 edhill 1.88 if test -f $gm_local ; then
847 edhill 1.1 echo "using $gm_local"
848 edhill 1.34 . $gm_local
849 edhill 1.2 # echo "DISABLE=$DISABLE"
850     # echo "ENABLE=$ENABLE"
851 edhill 1.1 else
852     echo "none found"
853     fi
854    
855     # echo "$0::$1:$2:$3:$4:$5:$6:$7:"
856 edhill 1.2 #OPTIONS=
857     #n=0
858     #for i ; do
859     # echo "$i $n"
860     # setvar="OPTIONS[$n]='$i'"
861     # # echo " $setvar"
862     # eval "$setvar"
863     # n=$(( $n + 1 ))
864     #done
865     #parse_options
866     ac_prev=
867 edhill 1.87 for ac_option in $@ ; do
868 edhill 1.2
869 edhill 1.73 G2ARGS="$G2ARGS \"$ac_option\""
870    
871 edhill 1.2 # If the previous option needs an argument, assign it.
872     if test -n "$ac_prev"; then
873     eval "$ac_prev=\$ac_option"
874     ac_prev=
875     continue
876     fi
877    
878     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
879    
880     case $ac_option in
881    
882     -help | --help | -h | --h)
883     usage ;;
884    
885     -nooptfile | --nooptfile)
886     OPTFILE="NONE" ;;
887     -optfile | --optfile | -of | --of)
888 edhill 1.4 ac_prev=OPTFILE ;;
889 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
890     OPTFILE=$ac_optarg ;;
891    
892 edhill 1.50 -adoptfile | --adoptfile | -adof | --adof)
893 edhill 1.14 ac_prev=AD_OPTFILE ;;
894     -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
895     AD_OPTFILE=$ac_optarg ;;
896    
897 edhill 1.2 -pdepend | --pdepend)
898 edhill 1.4 ac_prev=PDEPEND ;;
899 edhill 1.2 -pdepend=* | --pdepend=*)
900     PDEPEND=$ac_optarg ;;
901    
902     -pdefault | --pdefault)
903 edhill 1.4 ac_prev=PDEFAULT ;;
904 edhill 1.2 -pdefault=* | --pdefault=*)
905     PDEFAULT=$ac_optarg ;;
906    
907 edhill 1.6 -make | --make | -m | --m)
908     ac_prev=MAKE ;;
909     -make=* | --make=* | -m=* | --m=*)
910     MAKE=$ac_optarg ;;
911 edhill 1.69
912 edhill 1.71 -bash | --bash)
913     ac_prev=BASH ;;
914     -bash=* | --bash=*)
915     BASH=$ac_optarg ;;
916    
917 edhill 1.69 -makedepend | --makedepend | -md | --md)
918     ac_prev=MAKEDEPEND ;;
919     -makedepend=* | --makedepend=* | -md=* | --md=*)
920     MAKEDEPEND=$ac_optarg ;;
921 edhill 1.6
922     -makefile | --makefile | -ma | --ma)
923 edhill 1.4 ac_prev=MAKEFILE ;;
924 edhill 1.6 -makefile=* | --makefile=* | -ma=* | --ma=*)
925 edhill 1.2 MAKEFILE=$ac_optarg ;;
926    
927 edhill 1.41 -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
928     echo "ERROR: The platform option has been removed. Please specify"
929     echo " the build options using the \"optfile\" mechanism."
930     echo
931     usage
932     ;;
933 edhill 1.2
934     -rootdir | --rootdir | -rd | --rd)
935 edhill 1.4 ac_prev=ROOTDIR ;;
936 edhill 1.2 -rootdir=* | --rootdir=* | -rd=* | --rd=*)
937     ROOTDIR=$ac_optarg ;;
938    
939     -mods | --mods | -mo | --mo)
940 edhill 1.4 ac_prev=MODS ;;
941 edhill 1.2 -mods=* | --mods=* | -mo=* | --mo=*)
942     MODS=$ac_optarg ;;
943    
944     -disable | --disable)
945 edhill 1.4 ac_prev=DISABLE ;;
946 edhill 1.2 -disable=* | --disable=*)
947     DISABLE=$ac_optarg ;;
948    
949     -enable | --enable)
950 edhill 1.4 ac_prev=ENABLE ;;
951 edhill 1.2 -enable=* | --enable=*)
952     ENABLE=$ac_optarg ;;
953    
954 edhill 1.12 -standarddirs | --standarddirs)
955     ac_prev=STANDARDDIRS ;;
956     -standarddirs=* | --standarddirs=*)
957     STANDARDDIRS=$ac_optarg ;;
958    
959 edhill 1.2 # -cpp | --cpp)
960     # ac_prev=cpp ;;
961     # -cpp=* | --cpp=*)
962     # CPP=$ac_optarg ;;
963 edhill 1.91
964     -cc | --cc)
965     ac_prev=CC ;;
966     -cc=* | --cc=*)
967     CC=$ac_optarg ;;
968    
969 edhill 1.2 -fortran | --fortran | -fc | --fc)
970 edhill 1.4 ac_prev=FC ;;
971 edhill 1.2 -fc=* | --fc=*)
972     FC=$ac_optarg ;;
973    
974 edhill 1.76 -fs | --fs)
975     ac_prev=FS ;;
976     -fs=* | --fs=*)
977     FS=$ac_optarg ;;
978    
979     -fs90 | --fs90)
980     ac_prev=FS90 ;;
981     -fs90=* | --fs90=*)
982     FS90=$ac_optarg ;;
983    
984 edhill 1.2 -ieee | --ieee)
985 edhill 1.12 IEEE=true ;;
986 edhill 1.2 -noieee | --noieee)
987 edhill 1.12 IEEE= ;;
988 adcroft 1.67
989     -mpi | --mpi)
990     MPI=true ;;
991     -mpi=* | --mpi=*)
992     MPIPATH=$ac_optarg
993     MPI=true ;;
994 edhill 1.2
995 edhill 1.41 # -jam | --jam)
996     # JAM=1 ;;
997     # -nojam | --nojam)
998     # JAM=0 ;;
999 edhill 1.2
1000 edhill 1.5 -ds | --ds)
1001     DUMPSTATE=t ;;
1002    
1003 edhill 1.17 -taf_extra | --taf_extra)
1004     ac_prev=TAF_EXTRA ;;
1005     -taf_extra=* | --taf_extra=*)
1006     TAF_EXTRA=$ac_optarg ;;
1007    
1008     -tamc_extra | --tamc_extra)
1009     ac_prev=TAMC_EXTRA ;;
1010     -tamc_extra=* | --tamc_extra=*)
1011     TAMC_EXTRA=$ac_optarg ;;
1012    
1013 edhill 1.2 -*)
1014     echo "Error: unrecognized option: "$ac_option
1015     usage
1016     ;;
1017    
1018     *)
1019     echo "Error: unrecognized argument: "$ac_option
1020     usage
1021     ;;
1022    
1023     esac
1024    
1025 edhill 1.1 done
1026    
1027 edhill 1.12 if test -f ./.genmakerc ; then
1028     echo
1029     echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1030     echo " file. This file format is no longer supported. Please see:"
1031     echo
1032     echo " http://mitgcm.org/devel_HOWTO/"
1033     echo
1034     echo " for directions on how to setup and use the new \"genmake2\" input"
1035     echo " files and send an email to MITgcm-support@mitgcm.org if you want help."
1036     echo
1037     fi
1038    
1039 edhill 1.11 if test "x${ROOTDIR}" = x ; then
1040 edhill 1.87 tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1041     if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1042 edhill 1.11 ROOTDIR=".."
1043     else
1044     for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1045     if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1046     ROOTDIR=$d
1047 edhill 1.71 printf "Warning: ROOTDIR was not specified but there appears to be"
1048 edhill 1.11 echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1049     break
1050     fi
1051     done
1052     fi
1053     fi
1054     if test "x${ROOTDIR}" = x ; then
1055     echo "Error: Cannot determine ROOTDIR for MITgcm code."
1056     echo " Please specify a ROOTDIR using either an options "
1057     echo " file or a command-line option."
1058     exit 1
1059     fi
1060     if test ! -d ${ROOTDIR} ; then
1061     echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
1062     exit 1
1063     fi
1064    
1065 edhill 1.1 echo " getting OPTFILE information: "
1066     if test "x${OPTFILE}" = x ; then
1067 edhill 1.11 if test "x$MITGCM_OF" = x ; then
1068     echo "Warning: no OPTFILE specified so we'll look for possible settings"
1069     printf "\n=== Searching for possible settings for OPTFILE ===\n"
1070     find_possible_configs
1071 edhill 1.1 else
1072 edhill 1.11 OPTFILE=$MITGCM_OF
1073     fi
1074     fi
1075     if test "x$OPTFILE" != xNONE ; then
1076     if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1077     echo " using OPTFILE=\"$OPTFILE\""
1078 edhill 1.34 . "$OPTFILE"
1079 edhill 1.11 RETVAL=$?
1080     if test "x$RETVAL" != x0 ; then
1081 edhill 1.71 printf "Error: failed to source OPTFILE \"$OPTFILE\""
1082 edhill 1.11 echo "--please check that variable syntax is bash-compatible"
1083 edhill 1.1 exit 1
1084     fi
1085 edhill 1.11 if test "x$DUMPSTATE" != xf ; then
1086 edhill 1.12 cp -f $OPTFILE "genmake_optfile"
1087 edhill 1.11 fi
1088     else
1089     echo "Error: can't read OPTFILE=\"$OPTFILE\""
1090     exit 1
1091 edhill 1.1 fi
1092     fi
1093 edhill 1.8
1094 edhill 1.75 # Check for broken systems that cannot correctly distinguish *.F and *.f files
1095 edhill 1.77 # check_for_broken_Ff
1096 edhill 1.75
1097 edhill 1.14 echo " getting AD_OPTFILE information: "
1098     if test "x${AD_OPTFILE}" = x ; then
1099     if test "x$MITGCM_AD_OF" = x ; then
1100     AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
1101     else
1102     AD_OPTFILE=$MITGCM_AD_OF
1103     fi
1104     fi
1105     if test "x${AD_OPTFILE}" != xNONE ; then
1106     if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1107     echo " using AD_OPTFILE=\"$AD_OPTFILE\""
1108 edhill 1.34 . "$AD_OPTFILE"
1109 edhill 1.14 RETVAL=$?
1110     if test "x$RETVAL" != x0 ; then
1111 edhill 1.71 printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1112 edhill 1.14 echo "--please check that variable syntax is bash-compatible"
1113     exit 1
1114     fi
1115     if test "x$DUMPSTATE" != xf ; then
1116     cp -f $AD_OPTFILE "genmake_ad_optfile"
1117     fi
1118     else
1119     echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
1120     exit 1
1121     fi
1122     fi
1123    
1124 edhill 1.91 # Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined. If not,
1125 edhill 1.39 # either set defaults or complain and abort!
1126 edhill 1.71 if test ! "x$BASH" = x ; then
1127     # add a trailing space so that it works within the Makefile syntax (see below)
1128     BASH="$BASH "
1129     fi
1130 edhill 1.8 if test "x$FC" = x ; then
1131     cat <<EOF 1>&2
1132    
1133     Error: no Fortran compiler: please specify using one of the following:
1134     1) within the options file ("FC=...") as specified by "-of=OPTFILE"
1135     2) the "-fc=XXX" command-line option
1136 edhill 1.12 3) the "./genmake_local" file
1137 edhill 1.8 EOF
1138     exit 1
1139     fi
1140 edhill 1.91 if test "x$CC" = x ; then
1141     cat <<EOF 1>&2
1142    
1143     Error: no C compiler: please specify using one of the following:
1144     1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1145     2) the "-cc=XXX" command-line option
1146     3) the "./genmake_local" file
1147     EOF
1148     exit 1
1149     fi
1150 edhill 1.8 if test "x$LINK" = x ; then
1151     LINK=$FC
1152     fi
1153 edhill 1.39 if test "x$MAKE" = x ; then
1154     MAKE="make"
1155     fi
1156 edhill 1.63 if test "x$CPP" = x ; then
1157     CPP=cpp
1158     fi
1159     #EH3 === UGLY ===
1160 edhill 1.76 # The following is an ugly little hack to check for $CPP in /lib/ and
1161     # it should eventually be replaced with a more general function that
1162 edhill 1.63 # searches a combo of the user's path and a list of "usual suspects"
1163     # to find the correct location for binaries such as $CPP.
1164     for i in " " "/lib/" ; do
1165     echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1166     done
1167     #EH3 === UGLY ===
1168 edhill 1.13 echo "#define A a" | $CPP > test_cpp 2>&1
1169 edhill 1.11 RETVAL=$?
1170     if test "x$RETVAL" != x0 ; then
1171 edhill 1.8 cat <<EOF 1>&2
1172    
1173 edhill 1.11 Error: C pre-processor "$CPP" failed the test case: please specify using:
1174    
1175 edhill 1.8 1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
1176 edhill 1.12 2) the "./genmake_local" file
1177 edhill 1.30 3) with the CPP environment variable
1178 edhill 1.11
1179 edhill 1.8 EOF
1180     exit 1
1181 edhill 1.11 else
1182     rm -f test_cpp
1183 edhill 1.8 fi
1184 edhill 1.84 look_for_makedepend
1185 edhill 1.35 if test "x$LN" = x ; then
1186     LN="ln -s"
1187     fi
1188     echo "test" > genmake_test_ln
1189     $LN genmake_test_ln genmake_tlink
1190     RETVAL=$?
1191     if test "x$RETVAL" != x0 ; then
1192     cat <<EOF 1>&2
1193 edhill 1.29
1194 edhill 1.35 Error: The command "ln -s" failed -- please specify a working soft-link
1195     command in the optfile.
1196    
1197     EOF
1198     exit 1
1199     fi
1200     rm -f genmake_test_ln genmake_tlink
1201 edhill 1.77
1202     # Check for broken *.F/*.f handling and fix if possible
1203     check_for_broken_Ff
1204 edhill 1.29
1205 adcroft 1.67 if test ! "x$MPI" = x ; then
1206     echo " Turning on MPI cpp macros"
1207 adcroft 1.68 DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1208 adcroft 1.67 fi
1209 edhill 1.39
1210 edhill 1.29 printf "\n=== Checking system libraries ===\n"
1211 edhill 1.71 printf " Do we have the system() command using $FC... "
1212 edhill 1.29 cat > genmake_tcomp.f <<EOF
1213     program hello
1214     call system('echo hi')
1215     end
1216     EOF
1217     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1218     RETVAL=$?
1219     if test "x$RETVAL" = x0 ; then
1220     HAVE_SYSTEM=t
1221     DEFINES="$DEFINES -DHAVE_SYSTEM"
1222     echo "yes"
1223     else
1224     HAVE_SYSTEM=
1225     echo "no"
1226     fi
1227     rm -f genmake_tcomp*
1228    
1229 edhill 1.71 printf " Do we have the fdate() command using $FC... "
1230 edhill 1.29 cat > genmake_tcomp.f <<EOF
1231     program hello
1232     CHARACTER(128) string
1233     string = ' '
1234     call fdate( string )
1235     print *, string
1236     end
1237     EOF
1238     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1239     RETVAL=$?
1240     if test "x$RETVAL" = x0 ; then
1241     HAVE_FDATE=t
1242     DEFINES="$DEFINES -DHAVE_FDATE"
1243     echo "yes"
1244     else
1245     HAVE_FDATE=
1246     echo "no"
1247     fi
1248     rm -f genmake_tcomp*
1249    
1250 cnh 1.81 printf " Do we have the etime() command using $FC... "
1251     cat > genmake_tcomp.f <<EOF
1252     program hello
1253 cnh 1.82 REAL*4 ACTUAL, TARRAY(2)
1254     EXTERNAL ETIME
1255     REAL*4 ETIME
1256     actual = etime( tarray )
1257 cnh 1.81 print *, tarray
1258     end
1259     EOF
1260     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1261     RETVAL=$?
1262     if test "x$RETVAL" = x0 ; then
1263     HAVE_ETIME=t
1264     DEFINES="$DEFINES -DHAVE_ETIME"
1265     echo "yes"
1266     else
1267     HAVE_ETIME=
1268     echo "no"
1269     fi
1270     rm -f genmake_tcomp*
1271    
1272 edhill 1.71 printf " Can we call simple C routines (here, \"cloc()\") using $FC... "
1273 edhill 1.39 check_HAVE_CLOC
1274     if test "x$HAVE_CLOC" != x ; then
1275     echo "yes"
1276     else
1277     echo "no"
1278 edhill 1.29 fi
1279 edhill 1.39 rm -f genmake_t*
1280 edhill 1.29
1281 edhill 1.71 printf " Can we create NetCDF-enabled binaries... "
1282 edhill 1.60 check_netcdf_libs
1283     if test "x$HAVE_NETCDF" != x ; then
1284     echo "yes"
1285     else
1286     echo "no"
1287     fi
1288    
1289 edhill 1.8
1290 edhill 1.2 printf "\n=== Setting defaults ===\n"
1291 edhill 1.71 printf " Adding MODS directories: "
1292 edhill 1.1 for d in $MODS ; do
1293     if test ! -d $d ; then
1294 edhill 1.2 echo
1295     echo "Error: MODS directory \"$d\" not found!"
1296 edhill 1.1 exit 1
1297     else
1298 edhill 1.71 printf " $d"
1299 edhill 1.1 SOURCEDIRS="$SOURCEDIRS $d"
1300     INCLUDEDIRS="$INCLUDEDIRS $d"
1301     fi
1302     done
1303     echo
1304    
1305     if test "x$MAKEFILE" = x ; then
1306     MAKEFILE="Makefile"
1307     fi
1308     if test "x${PLATFORM}" = x ; then
1309     PLATFORM=$p_PLATFORM
1310     fi
1311    
1312     if test "x${EXEDIR}" = x ; then
1313 edhill 1.87 tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1314     if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1315 edhill 1.1 EXEDIR=../exe
1316     else
1317     EXEDIR=.
1318     fi
1319     fi
1320     if test ! -d ${EXEDIR} ; then
1321     echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!"
1322     exit 1
1323     fi
1324    
1325     if test "x${TOOLSDIR}" = x ; then
1326     TOOLSDIR="$ROOTDIR/tools"
1327     fi
1328     if test ! -d ${TOOLSDIR} ; then
1329 cnh 1.65 echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1330 edhill 1.1 exit 1
1331     fi
1332 edhill 1.11 if test "x$S64" = x ; then
1333     S64='$(TOOLSDIR)/set64bitConst.sh'
1334     fi
1335 adcroft 1.44 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1336 edhill 1.1
1337     EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1338    
1339     # We have a special set of source files in eesupp/src which are
1340     # generated from some template source files. We'll make them first so
1341     # they appear as regular source code
1342     if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1343     echo " Making source files in eesupp from templates"
1344 edhill 1.36 ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1345 edhill 1.1 RETVAL=$?
1346 edhill 1.2 if test "x${RETVAL}" = x0 ; then
1347 edhill 1.1 rm -f make_eesupp.errors
1348     else
1349     echo "Error: problem encountered while building source files in eesupp:"
1350 edhill 1.62 cat make_eesupp.errors 1>&2
1351 edhill 1.1 exit 1
1352 afe 1.58 fi
1353     fi
1354    
1355     #same for exch2
1356     if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1357     echo " Making source files in exch2 from templates"
1358     ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1359     RETVAL=$?
1360     if test "x${RETVAL}" = x0 ; then
1361     rm -f make_exch2.errors
1362     else
1363 edhill 1.59 echo "Error: problem encountered while building source files in exch2:"
1364 edhill 1.62 cat make_exch2.errors 1>&2
1365 afe 1.58 exit 1
1366 edhill 1.1 fi
1367     fi
1368    
1369 edhill 1.2 printf "\n=== Determining package settings ===\n"
1370 edhill 1.1 if test "x${PDEPEND}" = x ; then
1371     tmp=$ROOTDIR"/pkg/pkg_depend"
1372     if test -r $tmp ; then
1373     PDEPEND=$tmp
1374     else
1375     echo "Warning: No package dependency information was specified."
1376     echo " Please check that ROOTDIR/pkg/pkg_depend exists."
1377     fi
1378     else
1379     if test ! -r ${PDEPEND} ; then
1380     echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\""
1381     exit 1
1382     fi
1383     fi
1384     echo " getting package dependency info from $PDEPEND"
1385     # Strip the comments and then convert the dependency file into
1386     # two arrays: PNAME, DNAME
1387     cat $PDEPEND | sed -e 's/#.*$//g' \
1388 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}' \
1389 edhill 1.1 > ./.pd_tmp
1390     RETVAL=$?
1391     if test ! "x${RETVAL}" = x0 ; then
1392     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
1393     exit 1
1394     fi
1395 edhill 1.34 . ./.pd_tmp
1396 edhill 1.1 rm -f ./.pd_tmp
1397    
1398 edhill 1.12 # Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups"
1399     # file should eventually be added so that, for convenience, one can
1400     # specify groups of packages using names like "ocean" and "atmosphere".
1401 edhill 1.41 echo " checking default package list: "
1402 edhill 1.1 if test "x${PDEFAULT}" = x ; then
1403 edhill 1.12 for i in "." $MODS ; do
1404     if test -r $i"/packages.conf" ; then
1405     PDEFAULT=$i"/packages.conf"
1406     break
1407     fi
1408     done
1409     fi
1410     if test "x${PDEFAULT}" = x ; then
1411 edhill 1.1 PDEFAULT="$ROOTDIR/pkg/pkg_default"
1412     fi
1413     if test "x${PDEFAULT}" = xNONE ; then
1414 edhill 1.41 echo " default packages file disabled"
1415 edhill 1.1 else
1416     if test ! -r $PDEFAULT ; then
1417     echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\""
1418     else
1419 edhill 1.41 echo " using PDEFAULT=\"$PDEFAULT\""
1420 edhill 1.1 # Strip the comments and add all the names
1421 edhill 1.15 def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1422 edhill 1.1 RETVAL=$?
1423     if test "x${RETVAL}" != x0 ; then
1424 edhill 1.71 printf "Error: can't parse default package list "
1425 edhill 1.1 echo "-- please check PDEFAULT=\"$PDEFAULT\""
1426     exit 1
1427     fi
1428     for i in $def ; do
1429     PACKAGES="$PACKAGES $i"
1430     done
1431 edhill 1.12 echo " before group expansion packages are: $PACKAGES"
1432 edhill 1.87 RET=1
1433     while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1434 edhill 1.12 echo " after group expansion packages are: $PACKAGES"
1435 edhill 1.1 fi
1436     fi
1437    
1438     echo " applying DISABLE settings"
1439 adcroft 1.74 for i in $PACKAGES ; do
1440     echo $i >> ./.tmp_pack
1441     done
1442     for i in `grep "-" ./.tmp_pack` ; do
1443     j=`echo $i | sed 's/[-]//'`
1444     DISABLE="$DISABLE $j"
1445     done
1446 edhill 1.1 pack=
1447     for p in $PACKAGES ; do
1448     addit="t"
1449     for d in $DISABLE ; do
1450     if test "x$p" = "x$d" ; then
1451     addit="f"
1452     fi
1453     done
1454     if test "x$addit" = xt ; then
1455     pack="$pack $p"
1456     fi
1457     done
1458     PACKAGES="$pack"
1459     echo " applying ENABLE settings"
1460 edhill 1.12 echo "" > ./.tmp_pack
1461 edhill 1.1 PACKAGES="$PACKAGES $ENABLE"
1462 adcroft 1.74 # Test if each explicitly referenced package exists
1463 edhill 1.1 for i in $PACKAGES ; do
1464 adcroft 1.74 j=`echo $i | sed 's/[-+]//'`
1465     if test ! -d "$ROOTDIR/pkg/$j" ; then
1466 edhill 1.1 echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1467 adcroft 1.74 exit 1
1468 edhill 1.1 fi
1469     echo $i >> ./.tmp_pack
1470     done
1471     PACKAGES=
1472 adcroft 1.74 for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1473 edhill 1.1 PACKAGES="$PACKAGES $i"
1474     done
1475 adcroft 1.74 rm -f ./.tmp_pack
1476 edhill 1.1 echo " packages are: $PACKAGES"
1477    
1478     echo " applying package dependency rules"
1479     ck=
1480     while test "x$ck" != xtt ; do
1481     i=0
1482 edhill 1.2 # rtot=${#PNAME[@]}
1483     rtot=$nname
1484 edhill 1.1 while test $i -lt $rtot ; do
1485    
1486     # Is $pname in the current $PACKAGES list?
1487 edhill 1.2 # pname=${PNAME[$i]}
1488     tmp="pname=\"\$PNAME_$i\""
1489     eval $tmp
1490 edhill 1.1 pin="f"
1491     for p in $PACKAGES ; do
1492     if test "x$p" = "x$pname" ; then
1493     pin="t"
1494     fi
1495     done
1496    
1497     # Is the DNAME entry a (+) or (-) rule ?
1498 edhill 1.2 tmp="dname=\"\$DNAME_$i\""
1499     eval $tmp
1500 edhill 1.1 plus="-"
1501 edhill 1.2 echo $dname | grep '^+' > /dev/null 2>&1
1502 edhill 1.1 RETVAL=$?
1503     if test "x$RETVAL" = x0 ; then
1504     plus="+"
1505     fi
1506    
1507     # Is $dname in the current $PACKAGES list?
1508 edhill 1.2 dname=`echo $dname | sed -e 's/^[+-]//'`
1509 edhill 1.1 din="f"
1510     for p in $PACKAGES ; do
1511     if test "x$p" = "x$dname" ; then
1512     din="t"
1513     fi
1514     done
1515    
1516     # Do we need to add $dname according to the dependency rules?
1517     if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
1518     in_dis="f"
1519     for dis in $DISABLE ; do
1520     if test "x$dis" = "x$dname" ; then
1521     in_dis="t"
1522     fi
1523     done
1524     if test "x$in_dis" = xt ; then
1525     echo "Error: can't satisfy package dependencies:"
1526     echo " \"$dname\" is required by the dependency rules"
1527     echo " but is disallowed by the DISABLE settings"
1528     exit 1
1529     else
1530     PACKAGES="$PACKAGES $dname"
1531     ck=
1532     fi
1533     fi
1534    
1535     # Do we need to get rid of $dname according to the dependency rules?
1536     if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
1537     echo "Error: can't satisfy package dependencies:"
1538     echo " \"$pname\" was requested but is disallowed by"
1539     echo " the dependency rules for \"$dname\""
1540     exit 1
1541     fi
1542 edhill 1.87 i=`echo "$i + 1" | bc -l`
1543     #i=$(( $i + 1 ))
1544 edhill 1.1 done
1545     ck=$ck"t"
1546     done
1547     echo " packages are: $PACKAGES"
1548     for i in $PACKAGES ; do
1549     adr="$ROOTDIR/pkg/$i"
1550     if test -d $adr ; then
1551     SOURCEDIRS="$SOURCEDIRS $adr"
1552     INCLUDEDIRS="$INCLUDEDIRS $adr"
1553 edhill 1.14 if test "x$i" = xautodiff ; then
1554     AUTODIFF_PKG_USED=t
1555     fi
1556 edhill 1.1 else
1557     echo "Error: the directory \"$adr\" for package $i doesn't exist"
1558     exit 1
1559     fi
1560     done
1561    
1562 edhill 1.62 # Build MNC templates and check for ability to build and use NetCDF
1563 edhill 1.60 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1564     RETVAL=$?
1565 edhill 1.62 if test "x$RETVAL" = x0 ; then
1566     ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1567     RETVAL=$?
1568     if test "x${RETVAL}" = x0 ; then
1569     rm -f make_mnc.errors
1570     else
1571     echo "Error: problem encountered while building source files in pkg/mnc:"
1572     cat make_mnc.errors 1>&2
1573     exit 1
1574     fi
1575 edhill 1.64 if test "x$HAVE_NETCDF" != xt ; then
1576 edhill 1.62 cat <<EOF
1577 edhill 1.60
1578     WARNING: the "mnc" package has been enabled but tests failed to
1579     compile and/or execute NetCDF applications. Please check that:
1580    
1581     1) NetCDF is installed for your compiler and
1582     2) the LIBS variable (within the 'optfile") specifies the correct
1583     NetCDF library to link against.
1584    
1585     EOF
1586 edhill 1.62 fi
1587 edhill 1.60 fi
1588 edhill 1.1
1589 edhill 1.12 # Create a list of #define and #undef to enable/disable packages
1590     PACKAGES_DOT_H=PACKAGES_CONFIG.h
1591 edhill 1.1 # The following UGLY HACK sets multiple "#undef"s and it needs to go
1592     # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
1593     # file would eventually be split up so that all package-related #define
1594     # statements could be separated and handled only by genmake.
1595     names=`ls -1 "$ROOTDIR/pkg"`
1596     all_pack=
1597 adcroft 1.44 DISABLED_PACKAGES=
1598 edhill 1.1 for n in $names ; do
1599     if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1600     has_pack="f"
1601     for pack in $PACKAGES ; do
1602     if test "x$pack" = "x$n" ; then
1603     has_pack="t"
1604     break
1605     fi
1606     done
1607     if test "x$has_pack" = xf ; then
1608 edhill 1.15 undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
1609 adcroft 1.44 DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1610 edhill 1.1 fi
1611     fi
1612     done
1613 adcroft 1.44 ENABLED_PACKAGES=
1614 edhill 1.1 for i in $PACKAGES ; do
1615 edhill 1.15 def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
1616 adcroft 1.44 ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1617 edhill 1.12 #eh3 DEFINES="$DEFINES -D$def"
1618 edhill 1.1
1619     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1620     case $i in
1621     aim_v23)
1622 adcroft 1.46 ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1623 jmc 1.55 echo "Warning: ALLOW_AIM is set to enable aim_v23."
1624 edhill 1.1 ;;
1625     esac
1626     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1627    
1628     done
1629    
1630     echo " Adding STANDARDDIRS"
1631     BUILDDIR=${BUILDDIR:-.}
1632 edhill 1.57 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1633 edhill 1.12 STANDARDDIRS="eesupp model"
1634     fi
1635 edhill 1.57 if test "x$STANDARDDIRS" != x ; then
1636     for d in $STANDARDDIRS ; do
1637     adr="$ROOTDIR/$d/src"
1638     if test ! -d $adr ; then
1639     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1640     echo " is correct and that you correctly specified the STANDARDDIRS option"
1641     exit 1
1642     else
1643     SOURCEDIRS="$SOURCEDIRS $adr"
1644     fi
1645     adr="$ROOTDIR/$d/inc"
1646     if test ! -d $adr ; then
1647     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1648     echo " is correct and that you correctly specified the STANDARDDIRS option"
1649     exit 1
1650     else
1651     INCLUDEDIRS="$INCLUDEDIRS $adr"
1652     fi
1653     done
1654     fi
1655 edhill 1.1
1656 adcroft 1.52 echo " Searching for *OPTIONS.h files in order to warn about the presence"
1657     echo " of \"#define \"-type statements that are no longer allowed:"
1658 edhill 1.12 CPP_OPTIONS=
1659 adcroft 1.52 CPP_EEOPTIONS=
1660 edhill 1.12 spaths=". $INCLUDEDIRS"
1661 adcroft 1.52 names=`ls -1 "$ROOTDIR/pkg"`
1662 edhill 1.12 for i in $spaths ; do
1663     try="$i/CPP_OPTIONS.h"
1664 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1665 edhill 1.12 echo " found CPP_OPTIONS=\"$try\""
1666     CPP_OPTIONS="$try"
1667 adcroft 1.52 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1668     for n in $names ; do
1669     test_for_package_in_cpp_options $CPP_OPTIONS $n
1670     done
1671     fi
1672     try="$i/CPP_EEOPTIONS.h"
1673 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1674 adcroft 1.52 echo " found CPP_EEOPTIONS=\"$try\""
1675     # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1676     #**** not yet enabled ****
1677     # test_for_mpi_in_cpp_eeoptions $try
1678     #**** not yet enabled ****
1679     CPP_EEOPTIONS="$try"
1680 edhill 1.12 fi
1681     done
1682     if test "x$CPP_OPTIONS" = x ; then
1683     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1684     exit 1
1685     fi
1686 edhill 1.1
1687 edhill 1.14 # Here, we build the list of files to be "run through" the adjoint
1688     # compiler.
1689     if test -f ./ad_files ; then
1690     rm -f ./ad_files
1691     fi
1692     echo " Creating the list of files for the adjoint compiler."
1693     for i in $SOURCEDIRS ; do
1694     list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1695     for j in $list_files ; do
1696     cat $i/$j >> ad_files
1697     done
1698     done
1699 edhill 1.60
1700 edhill 1.14
1701 edhill 1.2 echo
1702     echo "=== Creating the Makefile ==="
1703 edhill 1.1 echo " setting INCLUDES"
1704     for i in $INCLUDEDIRS ; do
1705 edhill 1.87 if test ! -d $i ; then
1706 edhill 1.1 echo "Warning: can't find INCLUDEDIRS=\"$i\""
1707     fi
1708     done
1709    
1710     echo " Determining the list of source and include files"
1711     rm -rf .links.tmp
1712     mkdir .links.tmp
1713     echo "# This section creates symbolic links" > srclinks.tmp
1714     echo "" >> srclinks.tmp
1715 edhill 1.71 printf 'SRCFILES = ' > srclist.inc
1716     printf 'CSRCFILES = ' > csrclist.inc
1717     printf 'F90SRCFILES = ' > f90srclist.inc
1718     printf 'HEADERFILES = ' > hlist.inc
1719     printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1720 adcroft 1.9 alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1721 edhill 1.1 for d in $alldirs ; do
1722     deplist=
1723 edhill 1.14 sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1724 cnh 1.3 sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1725 edhill 1.1 for sf in $sfiles ; do
1726     if test ! -r ".links.tmp/$sf" ; then
1727     if test -f "$d/$sf" ; then
1728 adcroft 1.44 case $d/$sf in
1729     ./$PACKAGES_DOT_H)
1730     ;;
1731     ./AD_CONFIG.h)
1732     ;;
1733     ./FC_NAMEMANGLE.h)
1734     ;;
1735     *)
1736     touch .links.tmp/$sf
1737     deplist="$deplist $sf"
1738     ;;
1739     esac
1740 edhill 1.15 extn=`echo $sf | $AWK -F '.' '{print $NF}'`
1741 edhill 1.1 case $extn in
1742     F)
1743     echo " \\" >> srclist.inc
1744 edhill 1.71 printf " $sf" >> srclist.inc
1745 edhill 1.1 ;;
1746 cnh 1.3 F90)
1747     echo " \\" >> f90srclist.inc
1748 edhill 1.71 printf " $sf" >> f90srclist.inc
1749 cnh 1.3 ;;
1750 edhill 1.1 c)
1751     echo " \\" >> csrclist.inc
1752 edhill 1.71 printf " $sf" >> csrclist.inc
1753 edhill 1.1 ;;
1754     h)
1755     echo " \\" >> hlist.inc
1756 edhill 1.71 printf " $sf" >> hlist.inc
1757 edhill 1.1 ;;
1758 edhill 1.14 flow)
1759     echo " \\" >> ad_flow_files.inc
1760 edhill 1.71 printf " $sf" >> ad_flow_files.inc
1761 edhill 1.14 ;;
1762 edhill 1.1 esac
1763     fi
1764     fi
1765     done
1766     if test "x$deplist" != x ; then
1767 edhill 1.2 echo "" >> srclinks.tmp
1768     echo "# These files are linked from $d" >> srclinks.tmp
1769 edhill 1.1 echo "$deplist :" >> srclinks.tmp
1770 edhill 1.2 printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp
1771 edhill 1.1 fi
1772     done
1773     rm -rf .links.tmp
1774     echo "" >> srclist.inc
1775     echo "" >> csrclist.inc
1776 cnh 1.3 echo "" >> f90srclist.inc
1777 edhill 1.1 echo "" >> hlist.inc
1778 edhill 1.14 echo "" >> ad_flow_files.inc
1779 edhill 1.1
1780 edhill 1.88 if test -f $MAKEFILE ; then
1781 edhill 1.1 mv -f $MAKEFILE "$MAKEFILE.bak"
1782     fi
1783     echo " Writing makefile: $MAKEFILE"
1784     echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
1785     echo "# $MACHINE" >> $MAKEFILE
1786     echo "# This makefile was generated automatically on" >> $MAKEFILE
1787     echo "# $THISDATE" >> $MAKEFILE
1788     echo "# by the command:" >> $MAKEFILE
1789 edhill 1.73 echo "# $0 $G2ARGS" >> $MAKEFILE
1790 edhill 1.1 echo "# executed by:" >> $MAKEFILE
1791     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1792 edhill 1.21
1793     EXE_AD=$EXECUTABLE"_ad"
1794     EXE_FTL=$EXECUTABLE"_ftl"
1795     EXE_SVD=$EXECUTABLE"_svd"
1796    
1797 edhill 1.1 cat >>$MAKEFILE <<EOF
1798 edhill 1.53 #
1799     # OPTFILE="$OPTFILE"
1800 edhill 1.1 #
1801     # BUILDDIR : Directory where object files are written
1802     # SOURCEDIRS : Directories containing the source (.F) files
1803     # INCLUDEDIRS : Directories containing the header-source (.h) files
1804     # EXEDIR : Directory where executable that is generated is written
1805     # EXECUTABLE : Full path of executable binary
1806     #
1807     # CPP : C-preprocessor command
1808     # INCLUDES : Directories searched for header files
1809     # DEFINES : Macro definitions for CPP
1810     # MAKEDEPEND : Dependency generator
1811     # KPP : Special preprocessor command (specific to platform)
1812     # KFLAGS : Flags for KPP
1813     # FC : Fortran compiler command
1814     # FFLAGS : Configuration/debugging options for FC
1815     # FOPTIM : Optimization options for FC
1816     # LINK : Command for link editor program
1817     # LIBS : Library flags /or/ additional optimization/debugging flags
1818    
1819     ROOTDIR = ${ROOTDIR}
1820     BUILDDIR = ${BUILDDIR}
1821     SOURCEDIRS = ${SOURCEDIRS}
1822     INCLUDEDIRS = ${INCLUDEDIRS}
1823     EXEDIR = ${EXEDIR}
1824     EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
1825     TOOLSDIR = ${TOOLSDIR}
1826    
1827 edhill 1.14 #eh3 new defines for the adjoint work
1828     AUTODIFF = ${ROOTDIR}/pkg/autodiff
1829 edhill 1.21 EXE_AD = ${EXE_AD}
1830     EXE_FTL = ${EXE_FTL}
1831     EXE_SVD = ${EXE_SVD}
1832 edhill 1.14
1833 adcroft 1.44 ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1834     DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1835    
1836 adcroft 1.52 # These files are created by Makefile
1837     SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1838    
1839 edhill 1.1 EOF
1840    
1841     # Note: figure out some way to add Hyades JAM libraries here
1842    
1843     cat >>$MAKEFILE <<EOF
1844     # Unix ln (link)
1845     LN = ${LN}
1846     # C preprocessor
1847     CPP = cat \$< | ${S64} | ${CPP}
1848     # Dependency generator
1849     MAKEDEPEND = ${MAKEDEPEND}
1850     # Special preprocessor (KAP on DECs, FPP on Crays)
1851     KPP = ${KPP}
1852     # Fortran compiler
1853     FC = ${FC}
1854 cnh 1.3 # Fortran compiler
1855     F90C = ${F90C}
1856 edhill 1.1 # Link editor
1857 edhill 1.70 LINK = ${LINK} ${LDADD}
1858 edhill 1.1
1859     # Defines for CPP
1860     DEFINES = ${DEFINES}
1861     # Includes for CPP
1862     INCLUDES = ${INCLUDES}
1863     # Flags for KPP
1864     KFLAGS1 = ${KFLAGS1}
1865     KFLAGS2 = ${KFLAGS2}
1866     # Optim./debug for FC
1867     FFLAGS = ${FFLAGS}
1868     FOPTIM = ${FOPTIM}
1869 cnh 1.3 # Optim./debug for FC
1870     F90FLAGS = ${F90FLAGS}
1871     F90OPTIM = ${F90OPTIM}
1872 edhill 1.1 # Flags for CC
1873     CFLAGS = ${CFLAGS}
1874     # Files that should not be optimized
1875     NOOPTFILES = ${NOOPTFILES}
1876     NOOPTFLAGS = ${NOOPTFLAGS}
1877     # Flags and libraries needed for linking
1878     LIBS = ${LIBS} \$(XLIBS)
1879 cnh 1.3 # Name of the Mekfile
1880     MAKEFILE=${MAKEFILE}
1881 edhill 1.1
1882     EOF
1883    
1884 edhill 1.14 cat srclist.inc >> $MAKEFILE
1885     cat csrclist.inc >> $MAKEFILE
1886     cat f90srclist.inc >> $MAKEFILE
1887     cat hlist.inc >> $MAKEFILE
1888     cat ad_flow_files.inc >> $MAKEFILE
1889 edhill 1.75 echo >> $MAKEFILE
1890 edhill 1.76 echo 'F77FILES = $(SRCFILES:.F=.'$FS')' >> $MAKEFILE
1891     echo 'F90FILES = $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1892     echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1893 edhill 1.75 echo >> $MAKEFILE
1894     echo '.SUFFIXES:' >> $MAKEFILE
1895 adcroft 1.83 echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1896 cnh 1.3 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1897 edhill 1.14 rm -f ad_flow_files.inc
1898 edhill 1.1
1899     cat >>$MAKEFILE <<EOF
1900    
1901     all: \$(EXECUTABLE)
1902 adcroft 1.52 \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1903 adcroft 1.44 @echo Creating \$@ ...
1904 edhill 1.1 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1905     depend:
1906     @make links
1907 edhill 1.76 \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1908 adcroft 1.44 \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1909 edhill 1.72 -rm -f makedepend.out
1910 edhill 1.1
1911 adcroft 1.52 links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1912 edhill 1.1
1913 cnh 1.3 small_f: \$(F77FILES) \$(F90FILES)
1914 edhill 1.1
1915     output.txt: \$(EXECUTABLE)
1916     @printf 'running ... '
1917     @\$(EXECUTABLE) > \$@
1918    
1919     clean:
1920 edhill 1.76 -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
1921 edhill 1.1 Clean:
1922     @make clean
1923     @make cleanlinks
1924 adcroft 1.52 -rm -f \$(SPECIAL_FILES)
1925 adcroft 1.51 -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1926 edhill 1.1 CLEAN:
1927     @make Clean
1928     -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1929     -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1930     -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1931 adcroft 1.78 -rm -f \$(EXECUTABLE) output.txt STD*
1932 edhill 1.1
1933 edhill 1.18 #eh3 Makefile: makefile
1934 edhill 1.1 makefile:
1935 edhill 1.73 $THIS_SCRIPT $G2ARGS
1936 edhill 1.1 cleanlinks:
1937     -find . -type l -exec rm {} \;
1938    
1939 adcroft 1.52 # Special targets ($SPECIAL_FILES) which are create by make
1940 adcroft 1.44 ${PACKAGES_DOT_H}:
1941     @echo Creating \$@ ...
1942 edhill 1.71 @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
1943 adcroft 1.44 AD_CONFIG.h:
1944     @echo Creating \$@ ...
1945 edhill 1.71 @$BASH\$(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 > \$@
1946 adcroft 1.52 FC_NAMEMANGLE.h:
1947     @echo Creating \$@ ...
1948     echo "$FC_NAMEMANGLE" > \$@
1949 adcroft 1.44
1950 edhill 1.76 # The normal chain of rules is ( .F - .$FS - .o )
1951    
1952     %.o : %.F
1953    
1954     .F.$FS:
1955 edhill 1.1 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1956 edhill 1.76 .$FS.o:
1957 edhill 1.1 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1958 edhill 1.76 .F90.$FS90:
1959 cnh 1.3 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1960 edhill 1.76 .$FS90.o:
1961 cnh 1.3 \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1962 edhill 1.1 .c.o:
1963     \$(CC) \$(CFLAGS) -c \$<
1964    
1965 edhill 1.76 # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
1966     .F.p:
1967 edhill 1.1 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1968 edhill 1.76 .p.$FS:
1969 edhill 1.1 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1970 edhill 1.14
1971     #=========================================
1972     #=== Automatic Differentiation Rules ===
1973    
1974     TAMC = ${TAMC}
1975     TAF = ${TAF}
1976    
1977 edhill 1.17 TAF_EXTRA = ${TAF_EXTRA}
1978     TAMC_EXTRA = ${TAMC_EXTRA}
1979    
1980 edhill 1.14 EOF
1981    
1982     ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
1983     ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
1984     ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1985     for i in $ad_vars ; do
1986     name=$i
1987     t1="t2=\$"`echo $i`
1988     eval $t1
1989     printf "%-20s = " $name >> $MAKEFILE
1990     echo $t2 >> $MAKEFILE
1991     done
1992    
1993     echo " Add the source list for AD code generation"
1994     echo >> $MAKEFILE
1995 edhill 1.71 printf "AD_FILES = " >> $MAKEFILE
1996 edhill 1.14 AD_FILES=`cat ad_files`
1997     for i in $AD_FILES ; do
1998     echo " \\" >> $MAKEFILE
1999 edhill 1.71 printf " $i" >> $MAKEFILE
2000 edhill 1.14 done
2001     echo >> $MAKEFILE
2002 edhill 1.21 rm -f ad_files
2003 edhill 1.14
2004     cat >>$MAKEFILE <<EOF
2005    
2006 edhill 1.16 # ... AD ...
2007 edhill 1.23 adall: ad_taf
2008     adtaf: ad_taf_output.f
2009     adtamc: ad_tamc_output.f
2010 edhill 1.21
2011 heimbach 1.48 ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2012 edhill 1.71 @$BASH\$(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
2013 edhill 1.23 cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2014 adcroft 1.44 -rm -f ad_config.template
2015 edhill 1.22 @make \$(F77FILES)
2016     @make \$(AD_FLOW_FILES)
2017     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
2018    
2019 edhill 1.14 ad_taf_output.f: ad_input_code.f
2020 heimbach 1.37 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2021 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2022 heimbach 1.37
2023     adtafonly:
2024 edhill 1.17 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2025 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2026 edhill 1.14
2027     ad_taf: ad_taf_output.o \$(OBJFILES)
2028 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2029 edhill 1.14
2030     ad_tamc_output.f: ad_input_code.f
2031 edhill 1.17 \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
2032 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
2033 edhill 1.14
2034     ad_tamc: ad_tamc_output.o \$(OBJFILES)
2035 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2036 edhill 1.14
2037    
2038 edhill 1.19 # ... FTL ...
2039 edhill 1.23 ftlall: ftl_taf
2040     ftltaf: ftl_taf_output.f
2041     ftltamc: ftl_tamc_output.f
2042 edhill 1.21
2043 heimbach 1.48 ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2044 edhill 1.71 @$BASH\$(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
2045 edhill 1.23 cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2046 adcroft 1.44 -rm -f ftl_config.template
2047 edhill 1.23 @make \$(F77FILES)
2048 edhill 1.22 @make \$(AD_FLOW_FILES)
2049     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
2050    
2051     ftl_taf_output.f: ftl_input_code.f
2052     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2053 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2054 edhill 1.14
2055 heimbach 1.40 ftltafonly:
2056     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2057 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2058 heimbach 1.40
2059 edhill 1.19 ftl_taf: ftl_taf_output.o \$(OBJFILES)
2060 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2061 edhill 1.14
2062 edhill 1.22 ftl_tamc_output.f: ftl_input_code.f
2063     \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
2064 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
2065 edhill 1.16
2066 edhill 1.19 ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2067 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2068 edhill 1.16
2069    
2070     # ... SVD ...
2071 heimbach 1.40 svdtaf: ad_taf_output.f ftl_taf_output.f
2072     svdall: svd_taf
2073 edhill 1.16
2074 heimbach 1.40 svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)
2075     \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2076 edhill 1.14
2077    
2078     #=========================================
2079 edhill 1.1
2080     EOF
2081 edhill 1.7
2082     if test "x$EXEHOOK" != x ; then
2083     printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
2084     fi
2085 edhill 1.1
2086     echo " Making list of \"exceptions\" that need \".p\" files"
2087     for i in $KPPFILES ; do
2088     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
2089     RETVAL=$?
2090     if test "x$RETVAL" != x0 ; then
2091     echo "Error: unable to add file \"$i\" to the exceptions list"
2092     fi
2093 edhill 1.76 echo "$base.$FS: $base.p" >> $MAKEFILE
2094 edhill 1.1 done
2095    
2096     echo " Making list of NOOPTFILES"
2097     for i in $NOOPTFILES ; do
2098     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
2099     RETVAL=$?
2100     if test "x$RETVAL" != x0 ; then
2101     echo "Error: unable to add file \"$i\" to the exceptions list"
2102     fi
2103 edhill 1.76 echo "$base.o: $base.$FS" >> $MAKEFILE
2104 edhill 1.2 printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2105 edhill 1.1 done
2106    
2107     echo " Add rules for links"
2108     cat srclinks.tmp >> $MAKEFILE
2109     rm -f srclinks.tmp
2110    
2111     echo " Adding makedepend marker"
2112 edhill 1.2 printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
2113 edhill 1.1
2114 edhill 1.2 printf "\n=== Done ===\n"
2115 adcroft 1.47
2116     # Create special header files
2117 edhill 1.71 $BASH $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"
2118 adcroft 1.47 if test ! -f $PACKAGES_DOT_H ; then
2119     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2120     else
2121 edhill 1.61 cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2122 adcroft 1.47 RETVAL=$?
2123     if test "x$RETVAL" = x0 ; then
2124     rm -f $PACKAGES_DOT_H".tmp"
2125     else
2126     mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2127     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2128     fi
2129     fi
2130     if test ! -f AD_CONFIG.h ; then
2131 edhill 1.71 $BASH $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
2132 adcroft 1.47 fi
2133 edhill 1.5
2134    
2135     # Write the "state" for future records
2136     if test "x$DUMPSTATE" != xf ; then
2137 edhill 1.71 printf "" > genmake_state
2138 edhill 1.5 for i in $gm_state ; do
2139     t1="t2=\$$i"
2140     eval $t1
2141 edhill 1.12 echo "$i='$t2'" >> genmake_state
2142 edhill 1.5 done
2143     fi

  ViewVC Help
Powered by ViewVC 1.1.22