/[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.1 - (hide annotations) (download)
Sat Aug 16 14:01:08 2003 UTC (20 years, 7 months ago) by edhill
Branch: MAIN
This is the first version of "genmake2" and "testscript2" (and support files)
that pass all the standard verification tests on faulks.  Since they have new
names, they can be run side-by-side (no known conflicts) with the existing
genmake and testscript versions.  If you get a chance, please try them on your
system and mail the output to <eh3@mit.edu>.

1 edhill 1.1 #!/bin/bash
2     #
3     # $Header$
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    
12     # Guess possible config options for this host
13     find_possible_configs() {
14    
15     p_PLATFORM=`uname`"-"`uname -m`
16     echo "The platform appears to be:"
17     echo " "$p_PLATFORM
18    
19     p_LN=
20     echo "test" > test
21     ln -s ./test link
22     RETVAL=$?
23     if test "x${RETVAL}" = x0 ; then
24     p_LN="ln -s"
25     fi
26     rm -f test link
27    
28     p_CPP=`which cpp`
29    
30     RETVAL=$?
31     if test "x${RETVAL}" = x0 ; then
32     p_LN="ln -s"
33     fi
34     rm -f test link
35    
36     # look for possible fortran compilers
37     p_FC=
38     for c in f77 g77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 ; do
39     which $c > /dev/null 2>&1
40     RETVAL=$?
41     if test "x${RETVAL}" = x0 ; then
42     p_FC="$p_FC $c"
43     fi
44     done
45     echo "Possible FORTRAN compilers appear to be: "
46     if test "x${p_FC}" = x ; then
47     echo " None found!!!"
48     else
49     echo " "$p_FC
50     fi
51    
52     # look for possible MPI libraries
53     mpi_libs=
54     mpi_fort=`which mpif77 2>/dev/null`
55     RETVAL=$?
56     if test "x${RETVAL}" = x0 ; then
57     cat >>test.f <<EOF
58     PROGRAM HELLO
59     DO 10, I=1,10
60     PRINT *,'Hello World'
61     10 CONTINUE
62     STOP
63     END
64     EOF
65     eval "$mpi_fort -showme test.f > out"
66     RETVAL=$?
67     if test "x${RETVAL}" = x0 ; then
68     a=`cat out`
69     for i in $a ; do
70     case $i in
71     -*)
72     mpi_libs="$mpi_libs $i" ;;
73     esac
74     done
75     echo "The MPI libs appear to be:"
76     echo " "$mpi_libs
77     fi
78     rm -f test.f out
79     fi
80    
81     }
82    
83     parse_options() {
84    
85     ac_prev=
86     for ac_option in "${OPTIONS[@]}" ; do
87    
88     # echo "ac_option = :$ac_option:"
89    
90     # If the previous option needs an argument, assign it.
91     if test -n "$ac_prev"; then
92     eval "$ac_prev=\$ac_option"
93     ac_prev=
94     continue
95     fi
96    
97     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
98    
99     case $ac_option in
100    
101     -help | --help | -h | --h)
102     usage ;;
103    
104     -nooptfile | --nooptfile)
105     OPTFILE="NONE" ;;
106     -optfile | --optfile | -of | --of)
107     ac_prev=optfile ;;
108     -optfile=* | --optfile=* | -of=* | --of=*)
109     OPTFILE=$ac_optarg ;;
110    
111     -pdepend | --pdepend)
112     ac_prev=pdepend ;;
113     -pdepend=* | --pdepend=*)
114     PDEPEND=$ac_optarg ;;
115    
116     -pdefault | --pdefault)
117     ac_prev=pdefault ;;
118     -pdefault=* | --pdefault=*)
119     PDEFAULT=$ac_optarg ;;
120    
121     -makefile | -ma)
122     ac_prev=makefile ;;
123     --makefile=* | -ma=*)
124     MAKEFILE=$ac_optarg ;;
125    
126     -platform | --platform | -pl | --pl)
127     ac_prev=platform ;;
128     -platform=* | --platform=* | -pl=* | --pl=*)
129     PLATFORM=$ac_optarg ;;
130    
131     -rootdir | --rootdir | -rd | --rd)
132     ac_prev=rootdir ;;
133     -rootdir=* | --rootdir=* | -rd=* | --rd=*)
134     ROOTDIR=$ac_optarg ;;
135    
136     -mods | --mods | -mo | --mo)
137     ac_prev=mods ;;
138     -mods=* | --mods=* | -mo=* | --mo=*)
139     MODS=$ac_optarg ;;
140    
141     -disable | --disable)
142     ac_prev=disable ;;
143     -disable=* | --disable=*)
144     DISABLE=$ac_optarg ;;
145    
146     -enable | --enable)
147     ac_prev=enable ;;
148     -enable=* | --enable=*)
149     ENABLE=$ac_optarg ;;
150    
151     -noopt | --noopt)
152     ac_prev=noopt ;;
153     -noopt=* | --noopt=*)
154     NOOPT=$ac_optarg ;;
155    
156     # -cpp | --cpp)
157     # ac_prev=cpp ;;
158     # -cpp=* | --cpp=*)
159     # CPP=$ac_optarg ;;
160    
161     -fortran | --fortran | -fc | --fc)
162     ac_prev=fc ;;
163     -fc=* | --fc=*)
164     FC=$ac_optarg ;;
165    
166     -ieee | --ieee)
167     IEEE=1 ;;
168     -noieee | --noieee)
169     IEEE=0 ;;
170    
171     -mpi | --mpi)
172     MPI=1 ;;
173     -nompi | --nompi)
174     MPI=0 ;;
175    
176     -jam | --jam)
177     JAM=1 ;;
178     -nojam | --nojam)
179     JAM=0 ;;
180    
181     -*)
182     echo "Error: unrecognized option: "$ac_option
183     usage
184     ;;
185    
186     *)
187     echo "Error: unrecognized argument: "$ac_option
188     usage
189     ;;
190    
191     esac
192    
193     done
194     }
195    
196     # Parse the package dependency information
197     get_pdepend_list() {
198    
199     # strip the comments and then convert the dependency file into
200     # two arrays: PNAME, DNAME
201     cat $1 | sed -e 's/#.*$//g' \
202     | awk 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
203     > ./.pd_tmp
204     source ./.pd_tmp
205     rm -f ./.pd_tmp
206    
207     echo -n "PNAME = "${}
208     }
209    
210    
211     # Explain usage
212     usage() {
213     echo ""
214     echo "Usage: "$0" [OPTIONS]"
215     echo " where [OPTIONS] can be:"$'\n'
216     echo " -help | --help | -h | --h"
217     echo " -nooptfile | --nooptfile"
218     echo " -optfile NAME | --optfile NAME | -of NAME | --of NAME"
219     echo " -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME"
220     echo " -pdepend NAME | --pdepend NAME"
221     echo " -pdepend=NAME | --pdepend=NAME"
222     echo " -pdefault NAME | --pdefault NAME"
223     echo " -pdefault=NAME | --pdefault=NAME"
224     echo " -makefile NAME | -ma NAME"
225     echo " --makefile=NAME | -ma=NAME"
226     echo " -platform NAME | --platform NAME | -pl NAME | --pl NAME"
227     echo " -platform=NAME | --platform=NAME | -pl=NAME | --pl=NAME"
228     echo " -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME"
229     echo " -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME"
230     echo " -mods NAME | --mods NAME | -mo NAME | --mo NAME"
231     echo " -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME"
232     echo " -disable NAME | --disable NAME"
233     echo " -disable=NAME | --disable=NAME"
234     echo " -enable NAME | --enable NAME"
235     echo " -enable=NAME | --enable=NAME"
236     echo " -noopt NAME | --noopt NAME"
237     echo " -noopt=NAME | --noopt=NAME"
238     # echo " -cpp NAME | --cpp NAME"
239     # echo " -cpp=NAME | --cpp=NAME"
240     echo " -fortran NAME | --fortran NAME | -fc NAME | --fc NAME"
241     echo " -fc=NAME | --fc=NAME"
242     echo " -[no]ieee | --[no]ieee"
243     echo " -[no]mpi | --[no]mpi"
244     echo " -[no]jam | --[no]jam"$'\n'
245     echo " and NAME is a string such as:"$'\n'
246     echo " --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3'"
247     echo " -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3'"
248     echo " -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'"$'\n'
249     echo " which, depending upon your shell, may need to be single-quoted"
250     echo " if it contains spaces, dashes, or other special characters."
251     exit 1
252     }
253    
254     # Dump all important state
255     dump_state() {
256     fname=$1
257     echo " " > $fname
258     RETVAL=$?
259     if test "x${RETVAL}" = x ; then
260     echo "Error: cannot write to $fname"
261     exit 1
262     fi
263     echo "makefile "$makefile > $fname
264     }
265    
266    
267     #eh3 # This is the generic configuration.
268     #eh3 set LN = ( 'ln -s' )
269     #eh3 set CPP = ( '/lib/cpp -P' )
270     #eh3 set S64 = ( '$(TOOLSDIR)/set64bitConst.sh' )
271     #eh3 set KPP = ( )
272     #eh3 set FC = ( 'f77' )
273     #eh3 set LINK = $FC
274     #eh3 set MAKEDEPEND = ( 'makedepend' )
275     #eh3 set INCLUDES = ( -I. )
276     #eh3 set FFLAGS = ( )
277     #eh3 set FOPTIM = ( )
278     #eh3 set CFLAGS = ( )
279     #eh3 set KFLAGS1 = ( )
280     #eh3 set KFLAGS2 = ( )
281     #eh3 set LIBS = ( )
282     #eh3 set KPPFILES = ( )
283     #eh3 if (! $?NOOPTFILES ) set NOOPTFILES = ( )
284     #eh3 if (! $?NOOPTFLAGS ) set NOOPTFLAGS = ( )
285    
286     # Set defaults here
287     PLATFORM=
288     LN=
289     S64=
290     KPP=
291     FC=
292     LINK=
293     PACKAGES=
294     ENABLE=
295     DISABLE=
296     MAKEFILE=
297     MAKEDEPEND=
298     PDEPEND=
299     PDEFAULT=
300     OPTFILE=
301     INCLUDES=-I.
302     FFLAGS=
303     FOPTIM=
304     CFLAGS=
305     KFLAGS1=
306     KFLAGS2=
307     LIBS=
308     KPPFILES=
309     NOOPTFILES=
310     NOOPTFLAGS=
311    
312     MODS=
313     TOOLSDIR=
314     SOURCEDIRS=
315     INCLUDEDIRS=
316    
317     PWD=`pwd`
318     MAKE=make
319     THISHOSTNAME=`hostname`
320     THISCWD=`pwd`
321     THISDATE=`date`
322     MACHINE=`uname -a`
323    
324     echo $'\n'"=== Processing options files and arguments ==="
325     gm_local="./gm_local"
326     echo -n " getting local config information: "
327     if test -e $gm_local ; then
328     echo "using $gm_local"
329     source $gm_local
330     echo "DISABLE=$DISABLE"$'\n'"ENABLE=$ENABLE"
331     else
332     echo "none found"
333     fi
334    
335     # echo "$0::$1:$2:$3:$4:$5:$6:$7:"
336     OPTIONS=()
337     n=0
338     for i ; do
339     setvar="OPTIONS[$n]='$i'"
340     # echo " $setvar"
341     eval "$setvar"
342     n=$(( $n + 1 ))
343     done
344     parse_options
345    
346     echo " getting OPTFILE information: "
347     if test "x${OPTFILE}" = x ; then
348     echo "Warning: no OPTFILE specified so we'll look for possible settings"
349     echo $'\n'"=== Searching for possible settings for OPTFILE ==="
350     find_possible_configs
351     else
352     if test "x$OPTFILE" = xNONE ; then
353     echo " OPTFILE=NONE so we'll try to use default settings"
354     else
355     if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
356     echo " using OPTFILE=\"$OPTFILE\""
357     source "$OPTFILE"
358     RETVAL=$?
359     if test "x$RETVAL" != x0 ; then
360     echo -n "Error: failed to source OPTFILE \"$OPTFILE\""
361     echo "--please check that variable syntax is bash-compatible"
362     exit 1
363     fi
364     else
365     echo "Error: can't read OPTFILE=\"$OPTFILE\""
366     exit 1
367     fi
368     fi
369     fi
370    
371     echo $'\n'"=== Setting defaults ==="
372     echo -n " Adding MODS directories: "
373     for d in $MODS ; do
374     if test ! -d $d ; then
375     echo $'\n\n'"Error: MODS directory \"$d\" not found!"
376     exit 1
377     else
378     echo -n " $d"
379     SOURCEDIRS="$SOURCEDIRS $d"
380     INCLUDEDIRS="$INCLUDEDIRS $d"
381     fi
382     done
383     echo
384    
385     if test "x$MAKEFILE" = x ; then
386     MAKEFILE="Makefile"
387     fi
388     if test "x${PLATFORM}" = x ; then
389     PLATFORM=$p_PLATFORM
390     fi
391    
392     if test "x${ROOTDIR}" = x ; then
393     if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
394     ROOTDIR=".."
395     else
396     for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
397     if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
398     ROOTDIR=$d
399     echo -n "Warning: ROOTDIR was not specified but there appears to be"
400     echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
401     break
402     fi
403     done
404     fi
405     fi
406     if test "x${ROOTDIR}" = x ; then
407     echo "Error: Cannot determine ROOTDIR for MITgcm code."
408     echo " Please specify a ROOTDIR using either an options "
409     echo " file or a command-line option."
410     exit 1
411     fi
412     if test ! -d ${ROOTDIR} ; then
413     echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
414     exit 1
415     fi
416    
417     if test "x${EXEDIR}" = x ; then
418     if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then
419     EXEDIR=../exe
420     else
421     EXEDIR=.
422     fi
423     fi
424     if test ! -d ${EXEDIR} ; then
425     echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!"
426     exit 1
427     fi
428    
429     if test "x${TOOLSDIR}" = x ; then
430     TOOLSDIR="$ROOTDIR/tools"
431     fi
432     if test ! -d ${TOOLSDIR} ; then
433     echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"
434     exit 1
435     fi
436    
437     EXECUTABLE=${EXECUTABLE:-mitgcmuv}
438    
439     # We have a special set of source files in eesupp/src which are
440     # generated from some template source files. We'll make them first so
441     # they appear as regular source code
442     if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
443     echo " Making source files in eesupp from templates"
444     $MAKE -C $ROOTDIR"/eesupp/src/" > make_eesupp.errors 2>&1
445     RETVAL=$?
446     if test "x${RETVAL}" == "x0" ; then
447     rm -f make_eesupp.errors
448     else
449     echo "Error: problem encountered while building source files in eesupp:"
450     cat make_eesupp.errors
451     exit 1
452     fi
453     fi
454    
455     echo $'\n'"=== Determining package settings ==="
456     if test "x${PDEPEND}" = x ; then
457     tmp=$ROOTDIR"/pkg/pkg_depend"
458     if test -r $tmp ; then
459     PDEPEND=$tmp
460     else
461     echo "Warning: No package dependency information was specified."
462     echo " Please check that ROOTDIR/pkg/pkg_depend exists."
463     fi
464     else
465     if test ! -r ${PDEPEND} ; then
466     echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\""
467     exit 1
468     fi
469     fi
470     echo " getting package dependency info from $PDEPEND"
471     # Strip the comments and then convert the dependency file into
472     # two arrays: PNAME, DNAME
473     cat $PDEPEND | sed -e 's/#.*$//g' \
474     | awk 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
475     > ./.pd_tmp
476     RETVAL=$?
477     if test ! "x${RETVAL}" = x0 ; then
478     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
479     exit 1
480     fi
481     source ./.pd_tmp
482     rm -f ./.pd_tmp
483    
484     echo -n " checking default package list: "
485     if test "x${PDEFAULT}" = x ; then
486     PDEFAULT="$ROOTDIR/pkg/pkg_default"
487     fi
488     if test "x${PDEFAULT}" = xNONE ; then
489     echo "default packages file disabled"
490     else
491     if test ! -r $PDEFAULT ; then
492     echo ""
493     echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\""
494     else
495     echo " using PDEFAULT=\"$PDEFAULT\""
496     # Strip the comments and add all the names
497     def=`cat $PDEFAULT | sed -e 's/#.*$//g' | awk '(NF>0){print $0}'`
498     RETVAL=$?
499     if test "x${RETVAL}" != x0 ; then
500     echo -n "Error: can't parse default package list "
501     echo "-- please check PDEFAULT=\"$PDEFAULT\""
502     exit 1
503     fi
504     for i in $def ; do
505     PACKAGES="$PACKAGES $i"
506     done
507     echo " packages are: $PACKAGES"
508     fi
509     fi
510    
511     echo " applying DISABLE settings"
512     pack=
513     for p in $PACKAGES ; do
514     addit="t"
515     for d in $DISABLE ; do
516     if test "x$p" = "x$d" ; then
517     addit="f"
518     fi
519     done
520     if test "x$addit" = xt ; then
521     pack="$pack $p"
522     fi
523     done
524     PACKAGES="$pack"
525     echo " applying ENABLE settings"
526     rm -f ./.tmp_pack
527     PACKAGES="$PACKAGES $ENABLE"
528     for i in $PACKAGES ; do
529     if test ! -d "$ROOTDIR/pkg/$i" ; then
530     echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
531     exit 1
532     fi
533     echo $i >> ./.tmp_pack
534     done
535     pack=`cat ./.tmp_pack | sort | uniq`
536     rm -f ./.tmp_pack
537     PACKAGES=
538     for i in $pack ; do
539     PACKAGES="$PACKAGES $i"
540     done
541     echo " packages are: $PACKAGES"
542    
543     echo " applying package dependency rules"
544     ck=
545     while test "x$ck" != xtt ; do
546     i=0
547     rtot=${#PNAME[@]}
548     while test $i -lt $rtot ; do
549    
550     # Is $pname in the current $PACKAGES list?
551     pname=${PNAME[$i]}
552     pin="f"
553     for p in $PACKAGES ; do
554     if test "x$p" = "x$pname" ; then
555     pin="t"
556     fi
557     done
558    
559     # Is the DNAME entry a (+) or (-) rule ?
560     plus="-"
561     echo "${DNAME[$i]}" | grep '^+' > /dev/null 2>&1
562     RETVAL=$?
563     if test "x$RETVAL" = x0 ; then
564     plus="+"
565     fi
566    
567     # Is $dname in the current $PACKAGES list?
568     dname=`echo ${DNAME[$i]} | sed -e 's/^[+-]//'`
569     din="f"
570     for p in $PACKAGES ; do
571     if test "x$p" = "x$dname" ; then
572     din="t"
573     fi
574     done
575    
576     # Do we need to add $dname according to the dependency rules?
577     if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
578     in_dis="f"
579     for dis in $DISABLE ; do
580     if test "x$dis" = "x$dname" ; then
581     in_dis="t"
582     fi
583     done
584     if test "x$in_dis" = xt ; then
585     echo "Error: can't satisfy package dependencies:"
586     echo " \"$dname\" is required by the dependency rules"
587     echo " but is disallowed by the DISABLE settings"
588     exit 1
589     else
590     PACKAGES="$PACKAGES $dname"
591     ck=
592     fi
593     fi
594    
595     # Do we need to get rid of $dname according to the dependency rules?
596     if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
597     echo "Error: can't satisfy package dependencies:"
598     echo " \"$pname\" was requested but is disallowed by"
599     echo " the dependency rules for \"$dname\""
600     exit 1
601     fi
602     i=$(( $i + 1 ))
603     done
604     ck=$ck"t"
605     done
606     echo " packages are: $PACKAGES"
607     for i in $PACKAGES ; do
608     adr="$ROOTDIR/pkg/$i"
609     if test -d $adr ; then
610     SOURCEDIRS="$SOURCEDIRS $adr"
611     INCLUDEDIRS="$INCLUDEDIRS $adr"
612     else
613     echo "Error: the directory \"$adr\" for package $i doesn't exist"
614     exit 1
615     fi
616     done
617    
618     # This is compatible with the old genmake. The "DISABLE_*" flags
619     # need to be replaced by the "ALLOW_*" flags set below.
620     #
621     # echo -n " Setting package-specific CPP flags: "
622     # pkrm=( mom_fluxform mom_vecinv generic_advdiff )
623     # pkrmdef=( -DDISABLE_MOM_FLUXFORM -DDISABLE_MOM_VECINV -DDISABLE_GENERIC_ADVDIFF -DDISABLE_DEBUGMODE )
624     # echo -n " "
625     # i=0
626     # while test $i -lt "${#pkrm[@]}" ; do
627     # echo "$PACKAGES" | grep "${pk[$i]}" > /dev/null 2>&1
628     # RETVAL=$?
629     # if test "x$RETVAL" = x1 ; then
630     # DEFINES="$DEFINES ${pkdef[$i]}"
631     # echo -n " ${pkdef[$i]}"
632     # fi
633     # i=$(( $i + 1 ))
634     # done
635     # echo
636    
637     echo " Setting package-specific CPP flags in CPP_OPTIONS.h:"
638     CPP_OPTIONS=
639     spaths=". $SOURCEDIRS"
640     for i in $spaths ; do
641     try="$i/CPP_OPTIONS.h"
642     # echo -n " trying $try : "
643     if test -f $try -a -r $try ; then
644     echo " found CPP_OPTIONS=\"$try\""
645     CPP_OPTIONS="$try"
646     if test "x$i" != "x." ; then
647     cp -f $CPP_OPTIONS .
648     fi
649     break
650     fi
651     done
652     if test "x$CPP_OPTIONS" = x ; then
653     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
654     exit 1
655     fi
656     if test -e CPP_OPTIONS.h ; then
657     if test ! -e CPP_OPTIONS.h.bak ; then
658     cp -f CPP_OPTIONS.h CPP_OPTIONS.h.bak
659     fi
660     cat CPP_OPTIONS.h \
661     | awk 'BEGIN{p=1;} ($1=="C===" && $2=="GENMAKE"){p=0;} {if (p==1) print $0}' \
662     > CPP_OPTIONS.h.tmp
663     fi
664     cat <<EOF >>CPP_OPTIONS.h.tmp
665     C=== GENMAKE v2 ===
666     C The following defines have been set by GENMAKE, so please edit
667     C them only if you know what you're doing. In general, you should
668     C add or remove packages by re-running genmake with different
669     C "-enable" and/or "-disable" options.
670    
671     C Packages disabled by genmake:
672     EOF
673     # The following UGLY HACK sets multiple "#undef"s and it needs to go
674     # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
675     # file would eventually be split up so that all package-related #define
676     # statements could be separated and handled only by genmake.
677     names=`ls -1 "$ROOTDIR/pkg"`
678     all_pack=
679     for n in $names ; do
680     if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
681     has_pack="f"
682     for pack in $PACKAGES ; do
683     if test "x$pack" = "x$n" ; then
684     has_pack="t"
685     break
686     fi
687     done
688     if test "x$has_pack" = xf ; then
689     undef=`echo "ALLOW_$n" | awk '{print toupper($0)}'`
690     echo "#undef $undef" >> CPP_OPTIONS.h.tmp
691    
692     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
693     case $n in
694     mom_fluxform)
695     DEFINES="$DEFINES -DDISABLE_MOM_FLUXFORM"
696     ;;
697     mom_vecinv)
698     DEFINES="$DEFINES -DDISABLE_MOM_VECINV"
699     ;;
700     generic_advdiff)
701     DEFINES="$DEFINES -DDISABLE_GENERIC_ADVDIFF"
702     ;;
703     debug)
704     DEFINES="$DEFINES -DDISABLE_DEBUGMODE"
705     ;;
706     esac
707     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
708    
709     fi
710     fi
711     done
712     cat <<EOF >>CPP_OPTIONS.h.tmp
713    
714     C Packages enabled by genmake:
715     EOF
716     for i in $PACKAGES ; do
717     def=`echo "ALLOW_$i" | awk '{print toupper($0)}'`
718     echo "#define $def" >> CPP_OPTIONS.h.tmp
719    
720     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
721     case $i in
722     aim_v23)
723     echo "#define ALLOW_AIM" >> CPP_OPTIONS.h.tmp
724     ;;
725     esac
726     #EH3 WARNING : This is an UGLY HACK that needs to be removed!!!
727    
728     done
729     mv -f CPP_OPTIONS.h.tmp CPP_OPTIONS.h
730    
731     echo " Adding STANDARDDIRS"
732     BUILDDIR=${BUILDDIR:-.}
733     STANDARDDIRS=${STANDARDDIRS:-"eesupp model"}
734     for d in $STANDARDDIRS ; do
735     adr="$ROOTDIR/$d/src"
736     if test ! -d $adr ; then
737     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
738     echo " is correct and that you correctly specified the STANDARDDIRS option"
739     exit 1
740     else
741     SOURCEDIRS="$SOURCEDIRS $adr"
742     fi
743     adr="$ROOTDIR/$d/inc"
744     if test ! -d $adr ; then
745     echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
746     echo " is correct and that you correctly specified the STANDARDDIRS option"
747     exit 1
748     else
749     INCLUDEDIRS="$INCLUDEDIRS $adr"
750     fi
751     done
752    
753    
754     echo $'\n'"=== Creating the Makefile ==="
755     echo " setting INCLUDES"
756     for i in $INCLUDEDIRS ; do
757     if test -d $i ; then
758     INCLUDES="$INCLUDES -I$i"
759     else
760     echo "Warning: can't find INCLUDEDIRS=\"$i\""
761     fi
762     done
763    
764     echo " Determining the list of source and include files"
765     rm -rf .links.tmp
766     mkdir .links.tmp
767     echo "# This section creates symbolic links" > srclinks.tmp
768     echo "" >> srclinks.tmp
769     echo -n 'SRCFILES = ' > srclist.inc
770     echo -n 'CSRCFILES = ' > csrclist.inc
771     echo -n 'HEADERFILES = ' > hlist.inc
772     alldirs=". $SOURCEDIRS $INCLUDEDIRS"
773     for d in $alldirs ; do
774     deplist=
775     sfiles=`( cd $d; echo *.[h,c,F] )`
776     for sf in $sfiles ; do
777     if test ! -r ".links.tmp/$sf" ; then
778     if test -f "$d/$sf" ; then
779     extn=`echo $sf | awk -F '.' '{print $NF}'`
780     touch .links.tmp/$sf
781     deplist="$deplist $sf"
782     case $extn in
783     F)
784     echo " \\" >> srclist.inc
785     echo -n " $sf" >> srclist.inc
786     ;;
787     c)
788     echo " \\" >> csrclist.inc
789     echo -n " $sf" >> csrclist.inc
790     ;;
791     h)
792     echo " \\" >> hlist.inc
793     echo -n " $sf" >> hlist.inc
794     ;;
795     esac
796     fi
797     fi
798     done
799     if test "x$deplist" != x ; then
800     echo $'\n'"# These files are linked from $d" >> srclinks.tmp
801     echo "$deplist :" >> srclinks.tmp
802     echo $'\t$(LN) '$d'/$@ $@' >> srclinks.tmp
803     fi
804     done
805     rm -rf .links.tmp
806     echo "" >> srclist.inc
807     echo "" >> csrclist.inc
808     echo "" >> hlist.inc
809    
810     if test -e $MAKEFILE ; then
811     mv -f $MAKEFILE "$MAKEFILE.bak"
812     fi
813     echo " Writing makefile: $MAKEFILE"
814     echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
815     echo "# $MACHINE" >> $MAKEFILE
816     echo "# This makefile was generated automatically on" >> $MAKEFILE
817     echo "# $THISDATE" >> $MAKEFILE
818     echo "# by the command:" >> $MAKEFILE
819     echo "# $0 $@" >> $MAKEFILE
820     echo "# executed by:" >> $MAKEFILE
821     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
822     cat >>$MAKEFILE <<EOF
823     #
824     # BUILDDIR : Directory where object files are written
825     # SOURCEDIRS : Directories containing the source (.F) files
826     # INCLUDEDIRS : Directories containing the header-source (.h) files
827     # EXEDIR : Directory where executable that is generated is written
828     # EXECUTABLE : Full path of executable binary
829     #
830     # CPP : C-preprocessor command
831     # INCLUDES : Directories searched for header files
832     # DEFINES : Macro definitions for CPP
833     # MAKEDEPEND : Dependency generator
834     # KPP : Special preprocessor command (specific to platform)
835     # KFLAGS : Flags for KPP
836     # FC : Fortran compiler command
837     # FFLAGS : Configuration/debugging options for FC
838     # FOPTIM : Optimization options for FC
839     # LINK : Command for link editor program
840     # LIBS : Library flags /or/ additional optimization/debugging flags
841    
842     ROOTDIR = ${ROOTDIR}
843     BUILDDIR = ${BUILDDIR}
844     SOURCEDIRS = ${SOURCEDIRS}
845     INCLUDEDIRS = ${INCLUDEDIRS}
846     EXEDIR = ${EXEDIR}
847     EXECUTABLE = \$(EXEDIR)/${EXECUTABLE}
848     TOOLSDIR = ${TOOLSDIR}
849    
850     EOF
851    
852     # Note: figure out some way to add Hyades JAM libraries here
853    
854     cat >>$MAKEFILE <<EOF
855     # Unix ln (link)
856     LN = ${LN}
857     # C preprocessor
858     CPP = cat \$< | ${S64} | ${CPP}
859     # Dependency generator
860     MAKEDEPEND = ${MAKEDEPEND}
861     # Special preprocessor (KAP on DECs, FPP on Crays)
862     KPP = ${KPP}
863     # Fortran compiler
864     FC = ${FC}
865     # Link editor
866     LINK = ${LINK}
867    
868     # Defines for CPP
869     DEFINES = ${DEFINES}
870     # Includes for CPP
871     INCLUDES = ${INCLUDES}
872     # Flags for KPP
873     KFLAGS1 = ${KFLAGS1}
874     KFLAGS2 = ${KFLAGS2}
875     # Optim./debug for FC
876     FFLAGS = ${FFLAGS}
877     FOPTIM = ${FOPTIM}
878     # Flags for CC
879     CFLAGS = ${CFLAGS}
880     # Files that should not be optimized
881     NOOPTFILES = ${NOOPTFILES}
882     NOOPTFLAGS = ${NOOPTFLAGS}
883     # Flags and libraries needed for linking
884     LIBS = ${LIBS} \$(XLIBS)
885    
886     EOF
887    
888     cat srclist.inc >> $MAKEFILE
889     cat csrclist.inc >> $MAKEFILE
890     cat hlist.inc >> $MAKEFILE
891     echo 'F77FILES = $(SRCFILES:.F=.f)' >> $MAKEFILE
892     echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o)' >> $MAKEFILE
893    
894     rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp
895    
896     cat >>$MAKEFILE <<EOF
897    
898     .SUFFIXES:
899     .SUFFIXES: .o .f .p .F .c
900    
901     all: \$(EXECUTABLE)
902     \$(EXECUTABLE): \$(OBJFILES)
903     \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
904     depend:
905     @make links
906     \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
907    
908     links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES)
909    
910     small_f: \$(F77FILES)
911    
912     output.txt: \$(EXECUTABLE)
913     @printf 'running ... '
914     @\$(EXECUTABLE) > \$@
915    
916     clean:
917     -rm -rf *.o *.f *.p ${RMFILES} work.{pc,pcl}
918     Clean:
919     @make clean
920     @make cleanlinks
921     -rm -f Makefile.bak
922     CLEAN:
923     @make Clean
924     -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
925     -find \$(EXEDIR) -name "*.data" -exec rm {} \;
926     -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
927     -rm -f \$(EXECUTABLE)
928    
929     makefile:
930     ${0} $@
931     cleanlinks:
932     -find . -type l -exec rm {} \;
933    
934     # The normal chain of rules is ( .F - .f - .o )
935     .F.f:
936     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
937     .f.o:
938     \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
939     .c.o:
940     \$(CC) \$(CFLAGS) -c \$<
941    
942     # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
943     .F.p:
944     \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
945     .p.f:
946     \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
947    
948     EOF
949    
950     echo " Making list of \"exceptions\" that need \".p\" files"
951     for i in $KPPFILES ; do
952     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
953     RETVAL=$?
954     if test "x$RETVAL" != x0 ; then
955     echo "Error: unable to add file \"$i\" to the exceptions list"
956     fi
957     echo "$base.f: $base.p" >> $MAKEFILE
958     done
959    
960     echo " Making list of NOOPTFILES"
961     for i in $NOOPTFILES ; do
962     base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
963     RETVAL=$?
964     if test "x$RETVAL" != x0 ; then
965     echo "Error: unable to add file \"$i\" to the exceptions list"
966     fi
967     echo "$base.o: $base.f" >> $MAKEFILE
968     echo $'\t$(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> $MAKEFILE
969     done
970    
971     echo " Add rules for links"
972     cat srclinks.tmp >> $MAKEFILE
973     rm -f srclinks.tmp
974    
975     echo " Adding makedepend marker"
976     echo $'\n\n'"# DO NOT DELETE" >> $MAKEFILE
977    
978     echo $'\n'"=== Done ==="

  ViewVC Help
Powered by ViewVC 1.1.22