/[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.90 - (hide annotations) (download)
Tue Jul 27 20:59:19 2004 UTC (15 years ago) by edhill
Branch: MAIN
Changes since 1.89: +35 -17 lines
 o make it easy to specify the "cyrus" makedepend

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

  ViewVC Help
Powered by ViewVC 1.1.22