/[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.96 - (hide annotations) (download)
Mon Aug 9 02:28:51 2004 UTC (15 years ago) by edhill
Branch: MAIN
CVS Tags: checkpoint54e_post
Changes since 1.95: +6 -3 lines
 o correctly handle the case where $FC != $LINK

1 edhill 1.86 #! /usr/bin/env bash
2 edhill 1.1 #
3 edhill 1.96 # $Header: /u/gcmpack/MITgcm/tools/genmake2,v 1.95 2004/08/05 16:04:32 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 edhill 1.95 set to PATH. i.e. Include files from \$PATH/include, link to libraries
524     from \$PATH/lib and use binaries from \$PATH/bin.
525 adcroft 1.67
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.96 #echo "$CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f"
693     #echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.f"
694     #echo "$LINK -o genmake_tnc.o $LIBS"
695 edhill 1.91 $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null \
696 edhill 1.96 && $FC $FFLAGS $FOPTIM -c genmake_tnc.f \
697     && $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
698 edhill 1.60 RET_COMPILE=$?
699     test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1
700     RETVAL=$?
701     if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
702     HAVE_NETCDF=t
703     else
704 edhill 1.66 # try again with "-lnetcdf" added to the libs
705 edhill 1.91 $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null \
706 edhill 1.66 && $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
707     $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
708     RET_COMPILE=$?
709     test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1
710     RETVAL=$?
711     if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
712     LIBS="$LIBS -lnetcdf"
713     HAVE_NETCDF=t
714     else
715     cat genmake_tnc.log >> genmake_warnings
716     fi
717 edhill 1.60 fi
718     rm -f genmake_tnc*
719     }
720    
721    
722 adcroft 1.67
723     ###############################################################################
724     # Sequential part of script starts here
725     ###############################################################################
726    
727 edhill 1.1 # Set defaults here
728 edhill 1.5 COMMANDL="$0 $@"
729    
730 edhill 1.1 PLATFORM=
731     LN=
732     S64=
733     KPP=
734     FC=
735 edhill 1.93 #CC=gcc
736 edhill 1.60 CPP=
737 edhill 1.1 LINK=
738 edhill 1.31 DEFINES=
739 edhill 1.1 PACKAGES=
740     ENABLE=
741     DISABLE=
742     MAKEFILE=
743 edhill 1.90 #MAKEDEPEND=
744 edhill 1.1 PDEPEND=
745 edhill 1.11 DUMPSTATE=t
746 edhill 1.1 PDEFAULT=
747     OPTFILE=
748 edhill 1.2 INCLUDES="-I."
749 edhill 1.1 FFLAGS=
750     FOPTIM=
751     CFLAGS=
752     KFLAGS1=
753     KFLAGS2=
754 edhill 1.70 #LDADD=
755 edhill 1.1 LIBS=
756     KPPFILES=
757     NOOPTFILES=
758     NOOPTFLAGS=
759 adcroft 1.67 MPI=
760     MPIPATH=
761 edhill 1.1
762 edhill 1.29 # DEFINES checked by test compilation
763     HAVE_SYSTEM=
764     HAVE_FDATE=
765     FC_NAMEMANGLE=
766 edhill 1.39 HAVE_CLOC=
767 edhill 1.60 HAVE_NETCDF=
768 cnh 1.81 HAVE_ETIME=
769 edhill 1.29
770 edhill 1.1 MODS=
771     TOOLSDIR=
772     SOURCEDIRS=
773     INCLUDEDIRS=
774 edhill 1.57 STANDARDDIRS="USE_THE_DEFAULT"
775 edhill 1.1
776 edhill 1.73 G2ARGS=
777 edhill 1.71 BASH=
778 edhill 1.1 PWD=`pwd`
779     MAKE=make
780 edhill 1.15 AWK=awk
781 edhill 1.1 THISHOSTNAME=`hostname`
782     THISCWD=`pwd`
783     THISDATE=`date`
784     MACHINE=`uname -a`
785 edhill 1.7 EXECUTABLE=
786     EXEHOOK=
787     EXEDIR=
788 edhill 1.12 PACKAGES_CONF=
789     IEEE=
790     if test "x$MITGCM_IEEE" != x ; then
791     IEEE=$MITGCM_IEEE
792     fi
793 edhill 1.76 FS=
794     FS90=
795 edhill 1.1
796 edhill 1.14 AUTODIFF_PKG_USED=f
797     AD_OPTFILE=
798 edhill 1.17 TAF=
799     AD_TAF_FLAGS=
800     FTL_TAF_FLAGS=
801     SVD_TAF_FLAGS=
802     TAF_EXTRA=
803     TAMC=
804     AD_TAMC_FLAGS=
805     FTL_TAF_FLAGS=
806     SVD_TAMC_FLAGS=
807     TAMC_EXTRA=
808    
809 edhill 1.14
810 edhill 1.5 # The following state can be set directly by command-line switches
811 edhill 1.41 gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
812 edhill 1.60 gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
813 edhill 1.5
814     # The following state is not directly set by command-line switches
815     gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
816     gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
817     gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
818 edhill 1.12 gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
819 cnh 1.81 gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
820 edhill 1.5
821 edhill 1.14 # The following are all related to adjoint/tangent-linear stuff
822 edhill 1.29 gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
823     gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
824     gm_s12="TAF_EXTRA TAMC_EXTRA"
825 edhill 1.14
826 edhill 1.29 gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
827     gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
828 edhill 1.5
829 edhill 1.41 cat <<EOF
830    
831     GENMAKE :
832    
833     A program for GENerating MAKEfiles for the MITgcm project. For a
834     quick list of options, use "genmake -h" or for more detail see:
835    
836     http://mitgcm.org/devel_HOWTO/
837    
838     EOF
839 edhill 1.5
840 edhill 1.2 echo "=== Processing options files and arguments ==="
841 edhill 1.12 gm_local="genmake_local"
842     for i in . $MODS ; do
843     if test -r $i/$gm_local ; then
844 edhill 1.34 . $i/$gm_local
845 edhill 1.12 break
846     fi
847     done
848 edhill 1.71 printf " getting local config information: "
849 edhill 1.88 if test -f $gm_local ; then
850 edhill 1.1 echo "using $gm_local"
851 edhill 1.34 . $gm_local
852 edhill 1.2 # echo "DISABLE=$DISABLE"
853     # echo "ENABLE=$ENABLE"
854 edhill 1.1 else
855     echo "none found"
856     fi
857    
858     # echo "$0::$1:$2:$3:$4:$5:$6:$7:"
859 edhill 1.2 #OPTIONS=
860     #n=0
861     #for i ; do
862     # echo "$i $n"
863     # setvar="OPTIONS[$n]='$i'"
864     # # echo " $setvar"
865     # eval "$setvar"
866     # n=$(( $n + 1 ))
867     #done
868     #parse_options
869     ac_prev=
870 edhill 1.87 for ac_option in $@ ; do
871 edhill 1.2
872 edhill 1.73 G2ARGS="$G2ARGS \"$ac_option\""
873    
874 edhill 1.2 # If the previous option needs an argument, assign it.
875     if test -n "$ac_prev"; then
876     eval "$ac_prev=\$ac_option"
877     ac_prev=
878     continue
879     fi
880    
881     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
882    
883     case $ac_option in
884    
885     -help | --help | -h | --h)
886     usage ;;
887    
888     -nooptfile | --nooptfile)
889     OPTFILE="NONE" ;;
890     -optfile | --optfile | -of | --of)
891 edhill 1.4 ac_prev=OPTFILE ;;
892 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
893     OPTFILE=$ac_optarg ;;
894    
895 edhill 1.50 -adoptfile | --adoptfile | -adof | --adof)
896 edhill 1.14 ac_prev=AD_OPTFILE ;;
897     -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
898     AD_OPTFILE=$ac_optarg ;;
899    
900 edhill 1.2 -pdepend | --pdepend)
901 edhill 1.4 ac_prev=PDEPEND ;;
902 edhill 1.2 -pdepend=* | --pdepend=*)
903     PDEPEND=$ac_optarg ;;
904    
905     -pdefault | --pdefault)
906 edhill 1.4 ac_prev=PDEFAULT ;;
907 edhill 1.2 -pdefault=* | --pdefault=*)
908     PDEFAULT=$ac_optarg ;;
909    
910 edhill 1.6 -make | --make | -m | --m)
911     ac_prev=MAKE ;;
912     -make=* | --make=* | -m=* | --m=*)
913     MAKE=$ac_optarg ;;
914 edhill 1.69
915 edhill 1.71 -bash | --bash)
916     ac_prev=BASH ;;
917     -bash=* | --bash=*)
918     BASH=$ac_optarg ;;
919    
920 edhill 1.69 -makedepend | --makedepend | -md | --md)
921     ac_prev=MAKEDEPEND ;;
922     -makedepend=* | --makedepend=* | -md=* | --md=*)
923     MAKEDEPEND=$ac_optarg ;;
924 edhill 1.6
925     -makefile | --makefile | -ma | --ma)
926 edhill 1.4 ac_prev=MAKEFILE ;;
927 edhill 1.6 -makefile=* | --makefile=* | -ma=* | --ma=*)
928 edhill 1.2 MAKEFILE=$ac_optarg ;;
929    
930 edhill 1.41 -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
931     echo "ERROR: The platform option has been removed. Please specify"
932     echo " the build options using the \"optfile\" mechanism."
933     echo
934     usage
935     ;;
936 edhill 1.2
937     -rootdir | --rootdir | -rd | --rd)
938 edhill 1.4 ac_prev=ROOTDIR ;;
939 edhill 1.2 -rootdir=* | --rootdir=* | -rd=* | --rd=*)
940     ROOTDIR=$ac_optarg ;;
941    
942     -mods | --mods | -mo | --mo)
943 edhill 1.4 ac_prev=MODS ;;
944 edhill 1.2 -mods=* | --mods=* | -mo=* | --mo=*)
945     MODS=$ac_optarg ;;
946    
947     -disable | --disable)
948 edhill 1.4 ac_prev=DISABLE ;;
949 edhill 1.2 -disable=* | --disable=*)
950     DISABLE=$ac_optarg ;;
951    
952     -enable | --enable)
953 edhill 1.4 ac_prev=ENABLE ;;
954 edhill 1.2 -enable=* | --enable=*)
955     ENABLE=$ac_optarg ;;
956    
957 edhill 1.12 -standarddirs | --standarddirs)
958     ac_prev=STANDARDDIRS ;;
959     -standarddirs=* | --standarddirs=*)
960     STANDARDDIRS=$ac_optarg ;;
961    
962 edhill 1.2 # -cpp | --cpp)
963     # ac_prev=cpp ;;
964     # -cpp=* | --cpp=*)
965     # CPP=$ac_optarg ;;
966 edhill 1.91
967     -cc | --cc)
968     ac_prev=CC ;;
969     -cc=* | --cc=*)
970     CC=$ac_optarg ;;
971    
972 edhill 1.2 -fortran | --fortran | -fc | --fc)
973 edhill 1.4 ac_prev=FC ;;
974 edhill 1.2 -fc=* | --fc=*)
975     FC=$ac_optarg ;;
976    
977 edhill 1.76 -fs | --fs)
978     ac_prev=FS ;;
979     -fs=* | --fs=*)
980     FS=$ac_optarg ;;
981    
982     -fs90 | --fs90)
983     ac_prev=FS90 ;;
984     -fs90=* | --fs90=*)
985     FS90=$ac_optarg ;;
986    
987 edhill 1.2 -ieee | --ieee)
988 edhill 1.12 IEEE=true ;;
989 edhill 1.2 -noieee | --noieee)
990 edhill 1.12 IEEE= ;;
991 adcroft 1.67
992     -mpi | --mpi)
993     MPI=true ;;
994     -mpi=* | --mpi=*)
995     MPIPATH=$ac_optarg
996     MPI=true ;;
997 edhill 1.2
998 edhill 1.41 # -jam | --jam)
999     # JAM=1 ;;
1000     # -nojam | --nojam)
1001     # JAM=0 ;;
1002 edhill 1.2
1003 edhill 1.5 -ds | --ds)
1004     DUMPSTATE=t ;;
1005    
1006 edhill 1.17 -taf_extra | --taf_extra)
1007     ac_prev=TAF_EXTRA ;;
1008     -taf_extra=* | --taf_extra=*)
1009     TAF_EXTRA=$ac_optarg ;;
1010    
1011     -tamc_extra | --tamc_extra)
1012     ac_prev=TAMC_EXTRA ;;
1013     -tamc_extra=* | --tamc_extra=*)
1014     TAMC_EXTRA=$ac_optarg ;;
1015    
1016 edhill 1.2 -*)
1017     echo "Error: unrecognized option: "$ac_option
1018     usage
1019     ;;
1020    
1021     *)
1022     echo "Error: unrecognized argument: "$ac_option
1023     usage
1024     ;;
1025    
1026     esac
1027    
1028 edhill 1.1 done
1029    
1030 edhill 1.12 if test -f ./.genmakerc ; then
1031     echo
1032     echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1033     echo " file. This file format is no longer supported. Please see:"
1034     echo
1035     echo " http://mitgcm.org/devel_HOWTO/"
1036     echo
1037     echo " for directions on how to setup and use the new \"genmake2\" input"
1038     echo " files and send an email to MITgcm-support@mitgcm.org if you want help."
1039     echo
1040     fi
1041    
1042 edhill 1.11 if test "x${ROOTDIR}" = x ; then
1043 edhill 1.87 tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1044     if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1045 edhill 1.11 ROOTDIR=".."
1046     else
1047     for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1048     if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1049     ROOTDIR=$d
1050 edhill 1.71 printf "Warning: ROOTDIR was not specified but there appears to be"
1051 edhill 1.11 echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1052     break
1053     fi
1054     done
1055     fi
1056     fi
1057     if test "x${ROOTDIR}" = x ; then
1058     echo "Error: Cannot determine ROOTDIR for MITgcm code."
1059     echo " Please specify a ROOTDIR using either an options "
1060     echo " file or a command-line option."
1061     exit 1
1062     fi
1063     if test ! -d ${ROOTDIR} ; then
1064     echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
1065     exit 1
1066     fi
1067    
1068 edhill 1.1 echo " getting OPTFILE information: "
1069     if test "x${OPTFILE}" = x ; then
1070 edhill 1.11 if test "x$MITGCM_OF" = x ; then
1071     echo "Warning: no OPTFILE specified so we'll look for possible settings"
1072     printf "\n=== Searching for possible settings for OPTFILE ===\n"
1073     find_possible_configs
1074 edhill 1.1 else
1075 edhill 1.11 OPTFILE=$MITGCM_OF
1076     fi
1077     fi
1078     if test "x$OPTFILE" != xNONE ; then
1079     if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1080     echo " using OPTFILE=\"$OPTFILE\""
1081 edhill 1.34 . "$OPTFILE"
1082 edhill 1.11 RETVAL=$?
1083     if test "x$RETVAL" != x0 ; then
1084 edhill 1.71 printf "Error: failed to source OPTFILE \"$OPTFILE\""
1085 edhill 1.11 echo "--please check that variable syntax is bash-compatible"
1086 edhill 1.1 exit 1
1087     fi
1088 edhill 1.11 if test "x$DUMPSTATE" != xf ; then
1089 edhill 1.12 cp -f $OPTFILE "genmake_optfile"
1090 edhill 1.11 fi
1091     else
1092     echo "Error: can't read OPTFILE=\"$OPTFILE\""
1093     exit 1
1094 edhill 1.1 fi
1095     fi
1096 edhill 1.8
1097 edhill 1.75 # Check for broken systems that cannot correctly distinguish *.F and *.f files
1098 edhill 1.77 # check_for_broken_Ff
1099 edhill 1.75
1100 edhill 1.14 echo " getting AD_OPTFILE information: "
1101     if test "x${AD_OPTFILE}" = x ; then
1102     if test "x$MITGCM_AD_OF" = x ; then
1103     AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
1104     else
1105     AD_OPTFILE=$MITGCM_AD_OF
1106     fi
1107     fi
1108     if test "x${AD_OPTFILE}" != xNONE ; then
1109     if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1110     echo " using AD_OPTFILE=\"$AD_OPTFILE\""
1111 edhill 1.34 . "$AD_OPTFILE"
1112 edhill 1.14 RETVAL=$?
1113     if test "x$RETVAL" != x0 ; then
1114 edhill 1.71 printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1115 edhill 1.14 echo "--please check that variable syntax is bash-compatible"
1116     exit 1
1117     fi
1118     if test "x$DUMPSTATE" != xf ; then
1119     cp -f $AD_OPTFILE "genmake_ad_optfile"
1120     fi
1121     else
1122     echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
1123     exit 1
1124     fi
1125     fi
1126    
1127 edhill 1.91 # Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined. If not,
1128 edhill 1.39 # either set defaults or complain and abort!
1129 edhill 1.71 if test ! "x$BASH" = x ; then
1130     # add a trailing space so that it works within the Makefile syntax (see below)
1131     BASH="$BASH "
1132     fi
1133 edhill 1.8 if test "x$FC" = x ; then
1134     cat <<EOF 1>&2
1135    
1136     Error: no Fortran compiler: please specify using one of the following:
1137     1) within the options file ("FC=...") as specified by "-of=OPTFILE"
1138     2) the "-fc=XXX" command-line option
1139 edhill 1.12 3) the "./genmake_local" file
1140 edhill 1.8 EOF
1141     exit 1
1142     fi
1143 edhill 1.91 if test "x$CC" = x ; then
1144 edhill 1.93 CC=cc
1145     # cat <<EOF 1>&2
1146     # Error: no C compiler: please specify using one of the following:
1147     # 1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1148     # 2) the "-cc=XXX" command-line option
1149     # 3) the "./genmake_local" file
1150     # EOF
1151     # exit 1
1152 edhill 1.91 fi
1153 edhill 1.8 if test "x$LINK" = x ; then
1154     LINK=$FC
1155     fi
1156 edhill 1.39 if test "x$MAKE" = x ; then
1157     MAKE="make"
1158     fi
1159 edhill 1.63 if test "x$CPP" = x ; then
1160     CPP=cpp
1161     fi
1162     #EH3 === UGLY ===
1163 edhill 1.76 # The following is an ugly little hack to check for $CPP in /lib/ and
1164     # it should eventually be replaced with a more general function that
1165 edhill 1.63 # searches a combo of the user's path and a list of "usual suspects"
1166     # to find the correct location for binaries such as $CPP.
1167     for i in " " "/lib/" ; do
1168     echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1169     done
1170     #EH3 === UGLY ===
1171 edhill 1.13 echo "#define A a" | $CPP > test_cpp 2>&1
1172 edhill 1.11 RETVAL=$?
1173     if test "x$RETVAL" != x0 ; then
1174 edhill 1.8 cat <<EOF 1>&2
1175    
1176 edhill 1.11 Error: C pre-processor "$CPP" failed the test case: please specify using:
1177    
1178 edhill 1.8 1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
1179 edhill 1.12 2) the "./genmake_local" file
1180 edhill 1.30 3) with the CPP environment variable
1181 edhill 1.11
1182 edhill 1.8 EOF
1183     exit 1
1184 edhill 1.11 else
1185     rm -f test_cpp
1186 edhill 1.8 fi
1187 edhill 1.84 look_for_makedepend
1188 edhill 1.35 if test "x$LN" = x ; then
1189     LN="ln -s"
1190     fi
1191     echo "test" > genmake_test_ln
1192     $LN genmake_test_ln genmake_tlink
1193     RETVAL=$?
1194     if test "x$RETVAL" != x0 ; then
1195     cat <<EOF 1>&2
1196 edhill 1.29
1197 edhill 1.35 Error: The command "ln -s" failed -- please specify a working soft-link
1198     command in the optfile.
1199    
1200     EOF
1201     exit 1
1202     fi
1203     rm -f genmake_test_ln genmake_tlink
1204 edhill 1.77
1205     # Check for broken *.F/*.f handling and fix if possible
1206     check_for_broken_Ff
1207 edhill 1.29
1208 adcroft 1.67 if test ! "x$MPI" = x ; then
1209     echo " Turning on MPI cpp macros"
1210 adcroft 1.68 DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1211 adcroft 1.67 fi
1212 edhill 1.39
1213 edhill 1.29 printf "\n=== Checking system libraries ===\n"
1214 edhill 1.71 printf " Do we have the system() command using $FC... "
1215 edhill 1.29 cat > genmake_tcomp.f <<EOF
1216     program hello
1217     call system('echo hi')
1218     end
1219     EOF
1220     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1221     RETVAL=$?
1222     if test "x$RETVAL" = x0 ; then
1223     HAVE_SYSTEM=t
1224     DEFINES="$DEFINES -DHAVE_SYSTEM"
1225     echo "yes"
1226     else
1227     HAVE_SYSTEM=
1228     echo "no"
1229     fi
1230     rm -f genmake_tcomp*
1231    
1232 edhill 1.71 printf " Do we have the fdate() command using $FC... "
1233 edhill 1.29 cat > genmake_tcomp.f <<EOF
1234     program hello
1235     CHARACTER(128) string
1236     string = ' '
1237     call fdate( string )
1238     print *, string
1239     end
1240     EOF
1241     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1242     RETVAL=$?
1243     if test "x$RETVAL" = x0 ; then
1244     HAVE_FDATE=t
1245     DEFINES="$DEFINES -DHAVE_FDATE"
1246     echo "yes"
1247     else
1248     HAVE_FDATE=
1249     echo "no"
1250     fi
1251     rm -f genmake_tcomp*
1252    
1253 cnh 1.81 printf " Do we have the etime() command using $FC... "
1254     cat > genmake_tcomp.f <<EOF
1255     program hello
1256 cnh 1.82 REAL*4 ACTUAL, TARRAY(2)
1257     EXTERNAL ETIME
1258     REAL*4 ETIME
1259     actual = etime( tarray )
1260 cnh 1.81 print *, tarray
1261     end
1262     EOF
1263     $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1264     RETVAL=$?
1265     if test "x$RETVAL" = x0 ; then
1266     HAVE_ETIME=t
1267     DEFINES="$DEFINES -DHAVE_ETIME"
1268     echo "yes"
1269     else
1270     HAVE_ETIME=
1271     echo "no"
1272     fi
1273     rm -f genmake_tcomp*
1274    
1275 edhill 1.71 printf " Can we call simple C routines (here, \"cloc()\") using $FC... "
1276 edhill 1.39 check_HAVE_CLOC
1277     if test "x$HAVE_CLOC" != x ; then
1278     echo "yes"
1279     else
1280     echo "no"
1281 edhill 1.29 fi
1282 edhill 1.39 rm -f genmake_t*
1283 edhill 1.29
1284 edhill 1.71 printf " Can we create NetCDF-enabled binaries... "
1285 edhill 1.60 check_netcdf_libs
1286     if test "x$HAVE_NETCDF" != x ; then
1287     echo "yes"
1288     else
1289     echo "no"
1290     fi
1291    
1292 edhill 1.8
1293 edhill 1.2 printf "\n=== Setting defaults ===\n"
1294 edhill 1.71 printf " Adding MODS directories: "
1295 edhill 1.1 for d in $MODS ; do
1296     if test ! -d $d ; then
1297 edhill 1.2 echo
1298     echo "Error: MODS directory \"$d\" not found!"
1299 edhill 1.1 exit 1
1300     else
1301 edhill 1.71 printf " $d"
1302 edhill 1.1 SOURCEDIRS="$SOURCEDIRS $d"
1303     INCLUDEDIRS="$INCLUDEDIRS $d"
1304     fi
1305     done
1306     echo
1307    
1308     if test "x$MAKEFILE" = x ; then
1309     MAKEFILE="Makefile"
1310     fi
1311     if test "x${PLATFORM}" = x ; then
1312     PLATFORM=$p_PLATFORM
1313     fi
1314    
1315     if test "x${EXEDIR}" = x ; then
1316 edhill 1.87 tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1317     if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1318 edhill 1.1 EXEDIR=../exe
1319     else
1320     EXEDIR=.
1321     fi
1322     fi
1323     if test ! -d ${EXEDIR} ; then
1324     echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!"
1325     exit 1
1326     fi
1327    
1328     if test "x${TOOLSDIR}" = x ; then
1329     TOOLSDIR="$ROOTDIR/tools"
1330     fi
1331     if test ! -d ${TOOLSDIR} ; then
1332 cnh 1.65 echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1333 edhill 1.1 exit 1
1334     fi
1335 edhill 1.11 if test "x$S64" = x ; then
1336     S64='$(TOOLSDIR)/set64bitConst.sh'
1337     fi
1338 adcroft 1.44 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1339 edhill 1.1
1340     EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1341    
1342     # We have a special set of source files in eesupp/src which are
1343     # generated from some template source files. We'll make them first so
1344     # they appear as regular source code
1345     if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1346     echo " Making source files in eesupp from templates"
1347 edhill 1.36 ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1348 edhill 1.1 RETVAL=$?
1349 edhill 1.2 if test "x${RETVAL}" = x0 ; then
1350 edhill 1.1 rm -f make_eesupp.errors
1351     else
1352     echo "Error: problem encountered while building source files in eesupp:"
1353 edhill 1.62 cat make_eesupp.errors 1>&2
1354 edhill 1.1 exit 1
1355 afe 1.58 fi
1356     fi
1357    
1358     #same for exch2
1359     if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1360     echo " Making source files in exch2 from templates"
1361     ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1362     RETVAL=$?
1363     if test "x${RETVAL}" = x0 ; then
1364     rm -f make_exch2.errors
1365     else
1366 edhill 1.59 echo "Error: problem encountered while building source files in exch2:"
1367 edhill 1.62 cat make_exch2.errors 1>&2
1368 afe 1.58 exit 1
1369 edhill 1.1 fi
1370     fi
1371    
1372 edhill 1.2 printf "\n=== Determining package settings ===\n"
1373 edhill 1.1 if test "x${PDEPEND}" = x ; then
1374     tmp=$ROOTDIR"/pkg/pkg_depend"
1375     if test -r $tmp ; then
1376     PDEPEND=$tmp
1377     else
1378     echo "Warning: No package dependency information was specified."
1379     echo " Please check that ROOTDIR/pkg/pkg_depend exists."
1380     fi
1381     else
1382     if test ! -r ${PDEPEND} ; then
1383     echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\""
1384     exit 1
1385     fi
1386     fi
1387     echo " getting package dependency info from $PDEPEND"
1388     # Strip the comments and then convert the dependency file into
1389     # two arrays: PNAME, DNAME
1390     cat $PDEPEND | sed -e 's/#.*$//g' \
1391 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}' \
1392 edhill 1.1 > ./.pd_tmp
1393     RETVAL=$?
1394     if test ! "x${RETVAL}" = x0 ; then
1395     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
1396     exit 1
1397     fi
1398 edhill 1.34 . ./.pd_tmp
1399 edhill 1.1 rm -f ./.pd_tmp
1400    
1401 edhill 1.12 # Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups"
1402     # file should eventually be added so that, for convenience, one can
1403     # specify groups of packages using names like "ocean" and "atmosphere".
1404 edhill 1.41 echo " checking default package list: "
1405 edhill 1.1 if test "x${PDEFAULT}" = x ; then
1406 edhill 1.12 for i in "." $MODS ; do
1407     if test -r $i"/packages.conf" ; then
1408     PDEFAULT=$i"/packages.conf"
1409     break
1410     fi
1411     done
1412     fi
1413     if test "x${PDEFAULT}" = x ; then
1414 edhill 1.1 PDEFAULT="$ROOTDIR/pkg/pkg_default"
1415     fi
1416     if test "x${PDEFAULT}" = xNONE ; then
1417 edhill 1.41 echo " default packages file disabled"
1418 edhill 1.1 else
1419     if test ! -r $PDEFAULT ; then
1420     echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\""
1421     else
1422 edhill 1.41 echo " using PDEFAULT=\"$PDEFAULT\""
1423 edhill 1.1 # Strip the comments and add all the names
1424 edhill 1.15 def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1425 edhill 1.1 RETVAL=$?
1426     if test "x${RETVAL}" != x0 ; then
1427 edhill 1.71 printf "Error: can't parse default package list "
1428 edhill 1.1 echo "-- please check PDEFAULT=\"$PDEFAULT\""
1429     exit 1
1430     fi
1431     for i in $def ; do
1432     PACKAGES="$PACKAGES $i"
1433     done
1434 edhill 1.12 echo " before group expansion packages are: $PACKAGES"
1435 edhill 1.87 RET=1
1436     while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1437 edhill 1.12 echo " after group expansion packages are: $PACKAGES"
1438 edhill 1.1 fi
1439     fi
1440    
1441     echo " applying DISABLE settings"
1442 adcroft 1.74 for i in $PACKAGES ; do
1443     echo $i >> ./.tmp_pack
1444     done
1445     for i in `grep "-" ./.tmp_pack` ; do
1446     j=`echo $i | sed 's/[-]//'`
1447     DISABLE="$DISABLE $j"
1448     done
1449 edhill 1.1 pack=
1450     for p in $PACKAGES ; do
1451     addit="t"
1452     for d in $DISABLE ; do
1453     if test "x$p" = "x$d" ; then
1454     addit="f"
1455     fi
1456     done
1457     if test "x$addit" = xt ; then
1458     pack="$pack $p"
1459     fi
1460     done
1461     PACKAGES="$pack"
1462     echo " applying ENABLE settings"
1463 edhill 1.12 echo "" > ./.tmp_pack
1464 edhill 1.1 PACKAGES="$PACKAGES $ENABLE"
1465 adcroft 1.74 # Test if each explicitly referenced package exists
1466 edhill 1.1 for i in $PACKAGES ; do
1467 adcroft 1.74 j=`echo $i | sed 's/[-+]//'`
1468     if test ! -d "$ROOTDIR/pkg/$j" ; then
1469 edhill 1.1 echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1470 adcroft 1.74 exit 1
1471 edhill 1.1 fi
1472     echo $i >> ./.tmp_pack
1473     done
1474     PACKAGES=
1475 adcroft 1.74 for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1476 edhill 1.1 PACKAGES="$PACKAGES $i"
1477     done
1478 adcroft 1.74 rm -f ./.tmp_pack
1479 edhill 1.1 echo " packages are: $PACKAGES"
1480    
1481     echo " applying package dependency rules"
1482     ck=
1483     while test "x$ck" != xtt ; do
1484     i=0
1485 edhill 1.2 # rtot=${#PNAME[@]}
1486     rtot=$nname
1487 edhill 1.1 while test $i -lt $rtot ; do
1488    
1489     # Is $pname in the current $PACKAGES list?
1490 edhill 1.2 # pname=${PNAME[$i]}
1491     tmp="pname=\"\$PNAME_$i\""
1492     eval $tmp
1493 edhill 1.1 pin="f"
1494     for p in $PACKAGES ; do
1495     if test "x$p" = "x$pname" ; then
1496     pin="t"
1497     fi
1498     done
1499    
1500     # Is the DNAME entry a (+) or (-) rule ?
1501 edhill 1.2 tmp="dname=\"\$DNAME_$i\""
1502     eval $tmp
1503 edhill 1.1 plus="-"
1504 edhill 1.2 echo $dname | grep '^+' > /dev/null 2>&1
1505 edhill 1.1 RETVAL=$?
1506     if test "x$RETVAL" = x0 ; then
1507     plus="+"
1508     fi
1509    
1510     # Is $dname in the current $PACKAGES list?
1511 edhill 1.2 dname=`echo $dname | sed -e 's/^[+-]//'`
1512 edhill 1.1 din="f"
1513     for p in $PACKAGES ; do
1514     if test "x$p" = "x$dname" ; then
1515     din="t"
1516     fi
1517     done
1518    
1519     # Do we need to add $dname according to the dependency rules?
1520     if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
1521     in_dis="f"
1522     for dis in $DISABLE ; do
1523     if test "x$dis" = "x$dname" ; then
1524     in_dis="t"
1525     fi
1526     done
1527     if test "x$in_dis" = xt ; then
1528     echo "Error: can't satisfy package dependencies:"
1529     echo " \"$dname\" is required by the dependency rules"
1530     echo " but is disallowed by the DISABLE settings"
1531     exit 1
1532     else
1533     PACKAGES="$PACKAGES $dname"
1534     ck=
1535     fi
1536     fi
1537    
1538     # Do we need to get rid of $dname according to the dependency rules?
1539     if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
1540     echo "Error: can't satisfy package dependencies:"
1541     echo " \"$pname\" was requested but is disallowed by"
1542     echo " the dependency rules for \"$dname\""
1543     exit 1
1544     fi
1545 edhill 1.87 i=`echo "$i + 1" | bc -l`
1546     #i=$(( $i + 1 ))
1547 edhill 1.1 done
1548     ck=$ck"t"
1549     done
1550     echo " packages are: $PACKAGES"
1551     for i in $PACKAGES ; do
1552     adr="$ROOTDIR/pkg/$i"
1553     if test -d $adr ; then
1554     SOURCEDIRS="$SOURCEDIRS $adr"
1555     INCLUDEDIRS="$INCLUDEDIRS $adr"
1556 edhill 1.14 if test "x$i" = xautodiff ; then
1557     AUTODIFF_PKG_USED=t
1558     fi
1559 edhill 1.1 else
1560     echo "Error: the directory \"$adr\" for package $i doesn't exist"
1561     exit 1
1562     fi
1563     done
1564    
1565 edhill 1.62 # Build MNC templates and check for ability to build and use NetCDF
1566 edhill 1.60 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1567     RETVAL=$?
1568 edhill 1.62 if test "x$RETVAL" = x0 ; then
1569     ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1570     RETVAL=$?
1571     if test "x${RETVAL}" = x0 ; then
1572     rm -f make_mnc.errors
1573     else
1574     echo "Error: problem encountered while building source files in pkg/mnc:"
1575     cat make_mnc.errors 1>&2
1576     exit 1
1577     fi
1578 edhill 1.64 if test "x$HAVE_NETCDF" != xt ; then
1579 edhill 1.62 cat <<EOF
1580 edhill 1.60
1581     WARNING: the "mnc" package has been enabled but tests failed to
1582     compile and/or execute NetCDF applications. Please check that:
1583    
1584     1) NetCDF is installed for your compiler and
1585     2) the LIBS variable (within the 'optfile") specifies the correct
1586     NetCDF library to link against.
1587    
1588     EOF
1589 edhill 1.62 fi
1590 edhill 1.60 fi
1591 edhill 1.1
1592 edhill 1.12 # Create a list of #define and #undef to enable/disable packages
1593     PACKAGES_DOT_H=PACKAGES_CONFIG.h
1594 edhill 1.1 # The following UGLY HACK sets multiple "#undef"s and it needs to go
1595     # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
1596     # file would eventually be split up so that all package-related #define
1597     # statements could be separated and handled only by genmake.
1598     names=`ls -1 "$ROOTDIR/pkg"`
1599     all_pack=
1600 adcroft 1.44 DISABLED_PACKAGES=
1601 edhill 1.1 for n in $names ; do
1602     if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1603     has_pack="f"
1604     for pack in $PACKAGES ; do
1605     if test "x$pack" = "x$n" ; then
1606     has_pack="t"
1607     break
1608     fi
1609     done
1610     if test "x$has_pack" = xf ; then
1611 edhill 1.15 undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
1612 adcroft 1.44 DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1613 edhill 1.1 fi
1614     fi
1615     done
1616 adcroft 1.44 ENABLED_PACKAGES=
1617 edhill 1.1 for i in $PACKAGES ; do
1618 edhill 1.15 def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
1619 adcroft 1.44 ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1620 edhill 1.12 #eh3 DEFINES="$DEFINES -D$def"
1621 edhill 1.1
1622     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1623     case $i in
1624     aim_v23)
1625 adcroft 1.46 ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1626 jmc 1.55 echo "Warning: ALLOW_AIM is set to enable aim_v23."
1627 edhill 1.1 ;;
1628     esac
1629     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
1630    
1631     done
1632    
1633     echo " Adding STANDARDDIRS"
1634     BUILDDIR=${BUILDDIR:-.}
1635 edhill 1.57 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1636 edhill 1.12 STANDARDDIRS="eesupp model"
1637     fi
1638 edhill 1.57 if test "x$STANDARDDIRS" != x ; then
1639     for d in $STANDARDDIRS ; do
1640     adr="$ROOTDIR/$d/src"
1641     if test ! -d $adr ; then
1642     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1643     echo " is correct and that you correctly specified the STANDARDDIRS option"
1644     exit 1
1645     else
1646     SOURCEDIRS="$SOURCEDIRS $adr"
1647     fi
1648     adr="$ROOTDIR/$d/inc"
1649     if test ! -d $adr ; then
1650     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1651     echo " is correct and that you correctly specified the STANDARDDIRS option"
1652     exit 1
1653     else
1654     INCLUDEDIRS="$INCLUDEDIRS $adr"
1655     fi
1656     done
1657     fi
1658 edhill 1.1
1659 adcroft 1.52 echo " Searching for *OPTIONS.h files in order to warn about the presence"
1660     echo " of \"#define \"-type statements that are no longer allowed:"
1661 edhill 1.12 CPP_OPTIONS=
1662 adcroft 1.52 CPP_EEOPTIONS=
1663 edhill 1.12 spaths=". $INCLUDEDIRS"
1664 adcroft 1.52 names=`ls -1 "$ROOTDIR/pkg"`
1665 edhill 1.12 for i in $spaths ; do
1666     try="$i/CPP_OPTIONS.h"
1667 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1668 edhill 1.12 echo " found CPP_OPTIONS=\"$try\""
1669     CPP_OPTIONS="$try"
1670 adcroft 1.52 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1671     for n in $names ; do
1672     test_for_package_in_cpp_options $CPP_OPTIONS $n
1673     done
1674     fi
1675     try="$i/CPP_EEOPTIONS.h"
1676 edhill 1.54 if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1677 adcroft 1.52 echo " found CPP_EEOPTIONS=\"$try\""
1678     # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1679     #**** not yet enabled ****
1680     # test_for_mpi_in_cpp_eeoptions $try
1681     #**** not yet enabled ****
1682     CPP_EEOPTIONS="$try"
1683 edhill 1.12 fi
1684     done
1685     if test "x$CPP_OPTIONS" = x ; then
1686     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1687     exit 1
1688     fi
1689 edhill 1.1
1690 edhill 1.14 # Here, we build the list of files to be "run through" the adjoint
1691     # compiler.
1692     if test -f ./ad_files ; then
1693     rm -f ./ad_files
1694     fi
1695     echo " Creating the list of files for the adjoint compiler."
1696     for i in $SOURCEDIRS ; do
1697     list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1698     for j in $list_files ; do
1699     cat $i/$j >> ad_files
1700     done
1701     done
1702 edhill 1.60
1703 edhill 1.14
1704 edhill 1.2 echo
1705     echo "=== Creating the Makefile ==="
1706 edhill 1.1 echo " setting INCLUDES"
1707     for i in $INCLUDEDIRS ; do
1708 edhill 1.87 if test ! -d $i ; then
1709 edhill 1.1 echo "Warning: can't find INCLUDEDIRS=\"$i\""
1710     fi
1711     done
1712    
1713     echo " Determining the list of source and include files"
1714     rm -rf .links.tmp
1715     mkdir .links.tmp
1716     echo "# This section creates symbolic links" > srclinks.tmp
1717     echo "" >> srclinks.tmp
1718 edhill 1.71 printf 'SRCFILES = ' > srclist.inc
1719     printf 'CSRCFILES = ' > csrclist.inc
1720     printf 'F90SRCFILES = ' > f90srclist.inc
1721     printf 'HEADERFILES = ' > hlist.inc
1722     printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1723 adcroft 1.9 alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1724 edhill 1.1 for d in $alldirs ; do
1725     deplist=
1726 edhill 1.14 sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1727 cnh 1.3 sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1728 edhill 1.1 for sf in $sfiles ; do
1729     if test ! -r ".links.tmp/$sf" ; then
1730     if test -f "$d/$sf" ; then
1731 adcroft 1.44 case $d/$sf in
1732     ./$PACKAGES_DOT_H)
1733     ;;
1734     ./AD_CONFIG.h)
1735     ;;
1736     ./FC_NAMEMANGLE.h)
1737     ;;
1738     *)
1739     touch .links.tmp/$sf
1740     deplist="$deplist $sf"
1741     ;;
1742     esac
1743 edhill 1.15 extn=`echo $sf | $AWK -F '.' '{print $NF}'`
1744 edhill 1.1 case $extn in
1745     F)
1746     echo " \\" >> srclist.inc
1747 edhill 1.71 printf " $sf" >> srclist.inc
1748 edhill 1.1 ;;
1749 cnh 1.3 F90)
1750     echo " \\" >> f90srclist.inc
1751 edhill 1.71 printf " $sf" >> f90srclist.inc
1752 cnh 1.3 ;;
1753 edhill 1.1 c)
1754     echo " \\" >> csrclist.inc
1755 edhill 1.71 printf " $sf" >> csrclist.inc
1756 edhill 1.1 ;;
1757     h)
1758     echo " \\" >> hlist.inc
1759 edhill 1.71 printf " $sf" >> hlist.inc
1760 edhill 1.1 ;;
1761 edhill 1.14 flow)
1762     echo " \\" >> ad_flow_files.inc
1763 edhill 1.71 printf " $sf" >> ad_flow_files.inc
1764 edhill 1.14 ;;
1765 edhill 1.1 esac
1766     fi
1767     fi
1768     done
1769     if test "x$deplist" != x ; then
1770 edhill 1.2 echo "" >> srclinks.tmp
1771     echo "# These files are linked from $d" >> srclinks.tmp
1772 edhill 1.1 echo "$deplist :" >> srclinks.tmp
1773 edhill 1.2 printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp
1774 edhill 1.1 fi
1775     done
1776     rm -rf .links.tmp
1777     echo "" >> srclist.inc
1778     echo "" >> csrclist.inc
1779 cnh 1.3 echo "" >> f90srclist.inc
1780 edhill 1.1 echo "" >> hlist.inc
1781 edhill 1.14 echo "" >> ad_flow_files.inc
1782 edhill 1.1
1783 edhill 1.88 if test -f $MAKEFILE ; then
1784 edhill 1.1 mv -f $MAKEFILE "$MAKEFILE.bak"
1785     fi
1786     echo " Writing makefile: $MAKEFILE"
1787     echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
1788     echo "# $MACHINE" >> $MAKEFILE
1789     echo "# This makefile was generated automatically on" >> $MAKEFILE
1790     echo "# $THISDATE" >> $MAKEFILE
1791     echo "# by the command:" >> $MAKEFILE
1792 edhill 1.73 echo "# $0 $G2ARGS" >> $MAKEFILE
1793 edhill 1.1 echo "# executed by:" >> $MAKEFILE
1794     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1795 edhill 1.21
1796     EXE_AD=$EXECUTABLE"_ad"
1797     EXE_FTL=$EXECUTABLE"_ftl"
1798     EXE_SVD=$EXECUTABLE"_svd"
1799    
1800 edhill 1.1 cat >>$MAKEFILE <<EOF
1801 edhill 1.53 #
1802     # OPTFILE="$OPTFILE"
1803 edhill 1.1 #
1804     # BUILDDIR : Directory where object files are written
1805     # SOURCEDIRS : Directories containing the source (.F) files
1806     # INCLUDEDIRS : Directories containing the header-source (.h) files
1807     # EXEDIR : Directory where executable that is generated is written
1808     # EXECUTABLE : Full path of executable binary
1809     #
1810     # CPP : C-preprocessor command
1811     # INCLUDES : Directories searched for header files
1812     # DEFINES : Macro definitions for CPP
1813     # MAKEDEPEND : Dependency generator
1814     # KPP : Special preprocessor command (specific to platform)
1815     # KFLAGS : Flags for KPP
1816     # FC : Fortran compiler command
1817     # FFLAGS : Configuration/debugging options for FC
1818     # FOPTIM : Optimization options for FC
1819     # LINK : Command for link editor program
1820     # LIBS : Library flags /or/ additional optimization/debugging flags
1821    
1822     ROOTDIR = ${ROOTDIR}
1823     BUILDDIR = ${BUILDDIR}
1824     SOURCEDIRS = ${SOURCEDIRS}
1825     INCLUDEDIRS = ${INCLUDEDIRS}
1826     EXEDIR = ${EXEDIR}
1827     EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
1828     TOOLSDIR = ${TOOLSDIR}
1829    
1830 edhill 1.14 #eh3 new defines for the adjoint work
1831     AUTODIFF = ${ROOTDIR}/pkg/autodiff
1832 edhill 1.21 EXE_AD = ${EXE_AD}
1833     EXE_FTL = ${EXE_FTL}
1834     EXE_SVD = ${EXE_SVD}
1835 edhill 1.14
1836 adcroft 1.44 ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1837     DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1838    
1839 adcroft 1.52 # These files are created by Makefile
1840     SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1841    
1842 edhill 1.1 EOF
1843    
1844     # Note: figure out some way to add Hyades JAM libraries here
1845    
1846     cat >>$MAKEFILE <<EOF
1847     # Unix ln (link)
1848     LN = ${LN}
1849     # C preprocessor
1850     CPP = cat \$< | ${S64} | ${CPP}
1851     # Dependency generator
1852     MAKEDEPEND = ${MAKEDEPEND}
1853     # Special preprocessor (KAP on DECs, FPP on Crays)
1854     KPP = ${KPP}
1855     # Fortran compiler
1856 edhill 1.94 FC = ${FC}
1857 cnh 1.3 # Fortran compiler
1858     F90C = ${F90C}
1859 edhill 1.92 # C compiler
1860     CC = ${CC}
1861 edhill 1.1 # Link editor
1862 edhill 1.70 LINK = ${LINK} ${LDADD}
1863 edhill 1.1
1864     # Defines for CPP
1865     DEFINES = ${DEFINES}
1866     # Includes for CPP
1867     INCLUDES = ${INCLUDES}
1868     # Flags for KPP
1869     KFLAGS1 = ${KFLAGS1}
1870     KFLAGS2 = ${KFLAGS2}
1871     # Optim./debug for FC
1872     FFLAGS = ${FFLAGS}
1873     FOPTIM = ${FOPTIM}
1874 cnh 1.3 # Optim./debug for FC
1875     F90FLAGS = ${F90FLAGS}
1876     F90OPTIM = ${F90OPTIM}
1877 edhill 1.1 # Flags for CC
1878     CFLAGS = ${CFLAGS}
1879     # Files that should not be optimized
1880     NOOPTFILES = ${NOOPTFILES}
1881     NOOPTFLAGS = ${NOOPTFLAGS}
1882     # Flags and libraries needed for linking
1883     LIBS = ${LIBS} \$(XLIBS)
1884 cnh 1.3 # Name of the Mekfile
1885     MAKEFILE=${MAKEFILE}
1886 edhill 1.1
1887     EOF
1888    
1889 edhill 1.14 cat srclist.inc >> $MAKEFILE
1890     cat csrclist.inc >> $MAKEFILE
1891     cat f90srclist.inc >> $MAKEFILE
1892     cat hlist.inc >> $MAKEFILE
1893     cat ad_flow_files.inc >> $MAKEFILE
1894 edhill 1.75 echo >> $MAKEFILE
1895 edhill 1.76 echo 'F77FILES = $(SRCFILES:.F=.'$FS')' >> $MAKEFILE
1896     echo 'F90FILES = $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1897     echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1898 edhill 1.75 echo >> $MAKEFILE
1899     echo '.SUFFIXES:' >> $MAKEFILE
1900 adcroft 1.83 echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1901 cnh 1.3 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1902 edhill 1.14 rm -f ad_flow_files.inc
1903 edhill 1.1
1904     cat >>$MAKEFILE <<EOF
1905    
1906     all: \$(EXECUTABLE)
1907 adcroft 1.52 \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1908 adcroft 1.44 @echo Creating \$@ ...
1909 edhill 1.1 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1910     depend:
1911     @make links
1912 edhill 1.76 \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1913 adcroft 1.44 \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1914 edhill 1.72 -rm -f makedepend.out
1915 edhill 1.1
1916 adcroft 1.52 links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1917 edhill 1.1
1918 cnh 1.3 small_f: \$(F77FILES) \$(F90FILES)
1919 edhill 1.1
1920     output.txt: \$(EXECUTABLE)
1921     @printf 'running ... '
1922     @\$(EXECUTABLE) > \$@
1923    
1924     clean:
1925 edhill 1.76 -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
1926 edhill 1.1 Clean:
1927     @make clean
1928     @make cleanlinks
1929 adcroft 1.52 -rm -f \$(SPECIAL_FILES)
1930 adcroft 1.51 -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1931 edhill 1.1 CLEAN:
1932     @make Clean
1933     -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1934     -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1935     -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1936 adcroft 1.78 -rm -f \$(EXECUTABLE) output.txt STD*
1937 edhill 1.1
1938 edhill 1.18 #eh3 Makefile: makefile
1939 edhill 1.1 makefile:
1940 edhill 1.73 $THIS_SCRIPT $G2ARGS
1941 edhill 1.1 cleanlinks:
1942     -find . -type l -exec rm {} \;
1943    
1944 adcroft 1.52 # Special targets ($SPECIAL_FILES) which are create by make
1945 adcroft 1.44 ${PACKAGES_DOT_H}:
1946     @echo Creating \$@ ...
1947 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) > \$@
1948 adcroft 1.44 AD_CONFIG.h:
1949     @echo Creating \$@ ...
1950 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 > \$@
1951 adcroft 1.52 FC_NAMEMANGLE.h:
1952     @echo Creating \$@ ...
1953     echo "$FC_NAMEMANGLE" > \$@
1954 adcroft 1.44
1955 edhill 1.76 # The normal chain of rules is ( .F - .$FS - .o )
1956    
1957     %.o : %.F
1958    
1959     .F.$FS:
1960 edhill 1.1 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1961 edhill 1.76 .$FS.o:
1962 edhill 1.1 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1963 edhill 1.76 .F90.$FS90:
1964 cnh 1.3 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1965 edhill 1.76 .$FS90.o:
1966 cnh 1.3 \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1967 edhill 1.1 .c.o:
1968     \$(CC) \$(CFLAGS) -c \$<
1969    
1970 edhill 1.76 # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
1971     .F.p:
1972 edhill 1.1 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1973 edhill 1.76 .p.$FS:
1974 edhill 1.1 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1975 edhill 1.14
1976     #=========================================
1977     #=== Automatic Differentiation Rules ===
1978    
1979     TAMC = ${TAMC}
1980     TAF = ${TAF}
1981    
1982 edhill 1.17 TAF_EXTRA = ${TAF_EXTRA}
1983     TAMC_EXTRA = ${TAMC_EXTRA}
1984    
1985 edhill 1.14 EOF
1986    
1987     ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
1988     ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
1989     ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1990     for i in $ad_vars ; do
1991     name=$i
1992     t1="t2=\$"`echo $i`
1993     eval $t1
1994     printf "%-20s = " $name >> $MAKEFILE
1995     echo $t2 >> $MAKEFILE
1996     done
1997    
1998     echo " Add the source list for AD code generation"
1999     echo >> $MAKEFILE
2000 edhill 1.71 printf "AD_FILES = " >> $MAKEFILE
2001 edhill 1.14 AD_FILES=`cat ad_files`
2002     for i in $AD_FILES ; do
2003     echo " \\" >> $MAKEFILE
2004 edhill 1.71 printf " $i" >> $MAKEFILE
2005 edhill 1.14 done
2006     echo >> $MAKEFILE
2007 edhill 1.21 rm -f ad_files
2008 edhill 1.14
2009     cat >>$MAKEFILE <<EOF
2010    
2011 edhill 1.16 # ... AD ...
2012 edhill 1.23 adall: ad_taf
2013     adtaf: ad_taf_output.f
2014     adtamc: ad_tamc_output.f
2015 edhill 1.21
2016 heimbach 1.48 ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2017 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
2018 edhill 1.23 cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2019 adcroft 1.44 -rm -f ad_config.template
2020 edhill 1.22 @make \$(F77FILES)
2021     @make \$(AD_FLOW_FILES)
2022     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
2023    
2024 edhill 1.14 ad_taf_output.f: ad_input_code.f
2025 heimbach 1.37 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2026 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2027 heimbach 1.37
2028     adtafonly:
2029 edhill 1.17 \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2030 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2031 edhill 1.14
2032     ad_taf: ad_taf_output.o \$(OBJFILES)
2033 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2034 edhill 1.14
2035     ad_tamc_output.f: ad_input_code.f
2036 edhill 1.17 \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
2037 adcroft 1.44 cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
2038 edhill 1.14
2039     ad_tamc: ad_tamc_output.o \$(OBJFILES)
2040 edhill 1.21 \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2041 edhill 1.14
2042    
2043 edhill 1.19 # ... FTL ...
2044 edhill 1.23 ftlall: ftl_taf
2045     ftltaf: ftl_taf_output.f
2046     ftltamc: ftl_tamc_output.f
2047 edhill 1.21
2048 heimbach 1.48 ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2049 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
2050 edhill 1.23 cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2051 adcroft 1.44 -rm -f ftl_config.template
2052 edhill 1.23 @make \$(F77FILES)
2053 edhill 1.22 @make \$(AD_FLOW_FILES)
2054     cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
2055    
2056     ftl_taf_output.f: ftl_input_code.f
2057     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2058 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2059 edhill 1.14
2060 heimbach 1.40 ftltafonly:
2061     \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2062 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2063 heimbach 1.40
2064 edhill 1.19 ftl_taf: ftl_taf_output.o \$(OBJFILES)
2065 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2066 edhill 1.14
2067 edhill 1.22 ftl_tamc_output.f: ftl_input_code.f
2068     \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
2069 adcroft 1.44 cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
2070 edhill 1.16
2071 edhill 1.19 ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2072 edhill 1.21 \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2073 edhill 1.16
2074    
2075     # ... SVD ...
2076 heimbach 1.40 svdtaf: ad_taf_output.f ftl_taf_output.f
2077     svdall: svd_taf
2078 edhill 1.16
2079 heimbach 1.40 svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)
2080     \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2081 edhill 1.14
2082    
2083     #=========================================
2084 edhill 1.1
2085     EOF
2086 edhill 1.7
2087     if test "x$EXEHOOK" != x ; then
2088     printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
2089     fi
2090 edhill 1.1
2091     echo " Making list of \"exceptions\" that need \".p\" files"
2092     for i in $KPPFILES ; do
2093     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
2094     RETVAL=$?
2095     if test "x$RETVAL" != x0 ; then
2096     echo "Error: unable to add file \"$i\" to the exceptions list"
2097     fi
2098 edhill 1.76 echo "$base.$FS: $base.p" >> $MAKEFILE
2099 edhill 1.1 done
2100    
2101     echo " Making list of NOOPTFILES"
2102     for i in $NOOPTFILES ; do
2103     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
2104     RETVAL=$?
2105     if test "x$RETVAL" != x0 ; then
2106     echo "Error: unable to add file \"$i\" to the exceptions list"
2107     fi
2108 edhill 1.76 echo "$base.o: $base.$FS" >> $MAKEFILE
2109 edhill 1.2 printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2110 edhill 1.1 done
2111    
2112     echo " Add rules for links"
2113     cat srclinks.tmp >> $MAKEFILE
2114     rm -f srclinks.tmp
2115    
2116     echo " Adding makedepend marker"
2117 edhill 1.2 printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
2118 edhill 1.1
2119 edhill 1.2 printf "\n=== Done ===\n"
2120 adcroft 1.47
2121     # Create special header files
2122 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"
2123 adcroft 1.47 if test ! -f $PACKAGES_DOT_H ; then
2124     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2125     else
2126 edhill 1.61 cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2127 adcroft 1.47 RETVAL=$?
2128     if test "x$RETVAL" = x0 ; then
2129     rm -f $PACKAGES_DOT_H".tmp"
2130     else
2131     mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2132     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2133     fi
2134     fi
2135     if test ! -f AD_CONFIG.h ; then
2136 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
2137 adcroft 1.47 fi
2138 edhill 1.5
2139    
2140     # Write the "state" for future records
2141     if test "x$DUMPSTATE" != xf ; then
2142 edhill 1.71 printf "" > genmake_state
2143 edhill 1.5 for i in $gm_state ; do
2144     t1="t2=\$$i"
2145     eval $t1
2146 edhill 1.12 echo "$i='$t2'" >> genmake_state
2147 edhill 1.5 done
2148     fi

  ViewVC Help
Powered by ViewVC 1.1.22