/[MITgcm]/MITgcm/tools/genmake2
ViewVC logotype

Contents of /MITgcm/tools/genmake2

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.65 - (show annotations) (download)
Mon Feb 16 16:24:41 2004 UTC (20 years, 1 month ago) by cnh
Branch: MAIN
CVS Tags: checkpoint52j_post, checkpoint52k_post, checkpoint52j_pre
Changes since 1.64: +2 -2 lines
Fix TOOLSDIR error message typo

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

  ViewVC Help
Powered by ViewVC 1.1.22