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

Diff of /MITgcm/tools/genmake2

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

revision 1.42 by adcroft, Thu Nov 20 18:29:07 2003 UTC revision 1.99 by edhill, Mon Sep 27 15:49:48 2004 UTC
# Line 1  Line 1 
1  #!/bin/sh  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4  #  #
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      grep -i "#define.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17      RETVAL=$?      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18      if test "x${RETVAL}" = x0 ; then      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19          echo "Error: In $cpp_options there is an illegal line: #define ALLOW_$pkg"      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20          exit 99  }
21      fi  
22      grep -i "#undef.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1  # Search for particular CPP #cmds associated with MPI
23      RETVAL=$?  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24      if test "x${RETVAL}" = x0 ; then  test_for_mpi_in_cpp_eeoptions() {
25          echo "Error: In $cpp_options there is an illegal line: #undef ALLOW_$pkg"      cpp_options=$1
26          exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27      fi      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28      grep -i "#define.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      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=$?      RETVAL=$?
39      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
40          echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg"          printf "Error: In $file there is an illegal line: "
41          exit 99          grep -i "$strng" $file
42            return 1
43      fi      fi
44      grep -i "#undef.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      return 0
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         echo "Error: In $cpp_options there is an illegal line: #undef DISABLE_$pkg"  
         exit 99  
    fi  
45  }  }
46    
47  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
# Line 62  expand_pkg_groups() { Line 67  expand_pkg_groups() {
67          done          done
68          PACKAGES=$new_packages          PACKAGES=$new_packages
69          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
70            return $matched
71      else      else
72          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73      fi      fi
74  }  }
75    
76    #  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        #  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        #  First check the ability to create a *.F/.f pair.
90        cat <<EOF >> genmake_hello.F
91          program hello
92          write(*,*) 'hi'
93          stop
94          end
95    EOF
96        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97        RETVAL=$?
98        if test "x$RETVAL" != x0 ; then
99            if test "x$FS" = x ; then
100                FS='for'
101                FS90='fr9'
102                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            return
114        fi
115        rm -f genmake_hello.*
116    
117        #  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        test -f Makefile  &&  mv -f Makefile Makefile.bak
126        cat <<EOF >> Makefile
127    %.$tfs : %.F
128    .SUFFIXES:
129    genmake_hello.$tfs: genmake_hello.F
130            $LN genmake_hello.F genmake_hello.$tfs
131    EOF
132        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133        RETVAL=$?
134        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135            if test "x$FS" = x ; then
136                FS='for'
137                FS90='fr9'
138                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        fi
151        rm -f genmake_hello.* Makefile
152        test -f Makefile  &&  mv -f Makefile.bak Makefile
153    
154        #  If we make it here, use the extensions
155        FS=$tfs
156        FS90=$tfs9
157        return
158    }
159    
160    
161    look_for_makedepend()  {
162    
163        #  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        if test "x${MAKEDEPEND}" = x ; then
182            which makedepend > /dev/null 2>&1
183            RV0=$?
184            cat <<EOF >> genmake_tc.f
185          program test
186          write(*,*) 'test'
187          stop
188          end
189    EOF
190            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                build_cyrus_makedepend
199                RETVAL=$?
200                if test "x$RETVAL" != x0 ; then
201                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
202                fi
203                rm -f ./genmake_cy_md
204            fi
205        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        fi
213    }
214    
215    
216    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  # Guess possible config options for this host  # Guess possible config options for this host
241  find_possible_configs()  {  find_possible_configs()  {
242    
243      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
244      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
245      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
246      PLATFORM=`echo $tmp3 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      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")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
252      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
253            
# Line 93  find_possible_configs()  { Line 267  find_possible_configs()  {
267          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
268      fi      fi
269    
270      # makedepend is not always available      look_for_makedepend
271      if test "x${MAKEDEPEND}" = x ; then  
272        which makedepend >& /dev/null      #================================================================
273        RETVAL=$?      #  look for possible C compilers
274        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
275           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
276           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
277        fi          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      fi
310    
311      # look for possible fortran compilers      #================================================================
312        #  look for possible FORTRAN compilers
313      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
314      p_FC=      p_FC=
315      for c in $tmp ; do      for c in $tmp ; do
# Line 129  Error: No Fortran compilers were found i Line 335  Error: No Fortran compilers were found i
335    
336      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
337      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
338      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
339    
340  EOF  EOF
341          exit 1          exit 1
# Line 138  EOF Line 344  EOF
344          echo "   "$p_FC          echo "   "$p_FC
345          if test "x$FC" = x ; then          if test "x$FC" = x ; then
346              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
347                echo "  Setting FORTRAN compiler to: "$FC
348          fi          fi
349      fi      fi
350    
351      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
352          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
353          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
354              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
355              echo "  The options file:  $p_OF"          fi
356              echo "    appears to match so we'll use it."      fi
357              break  #    echo "  The options file:  $p_OF"
358          fi  #    echo "    appears to match so we'll use it."
359      done  #   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      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
369          cat 1>&2 <<EOF          cat 1>&2 <<EOF
370    
# Line 208  get_pdepend_list()  { Line 423  get_pdepend_list()  {
423      . ./.pd_tmp      . ./.pd_tmp
424      rm -f ./.pd_tmp      rm -f ./.pd_tmp
425    
426      echo -n "PNAME = "${}      printf "PNAME = "${}
427  }  }
428    
429    
# Line 222  Usage: "$0" [OPTIONS] Line 437  Usage: "$0" [OPTIONS]
437      -help | --help | -h | --h      -help | --help | -h | --h
438            Print this help message and exit.            Print this help message and exit.
439    
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    
445      -nooptfile | --nooptfile      -nooptfile | --nooptfile
446        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
447        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
# Line 246  Usage: "$0" [OPTIONS] Line 466  Usage: "$0" [OPTIONS]
466        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
467            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
468    
469        -makedepend NAME | -md NAME
470          --makedepend=NAME | -md=NAME
471              Use "NAME" for the MAKEDEPEND program.
472    
473      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
474        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
475            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
# Line 282  Usage: "$0" [OPTIONS] Line 506  Usage: "$0" [OPTIONS]
506            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
507            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
508    
509        -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      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
515            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
516            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
517            is being used.            is being used.
518    
519        -mpi | --mpi
520              Include MPI header files and link to MPI libraries
521        -mpi=PATH | --mpi=PATH
522              Include MPI header files and link to MPI libraries using MPI_ROOT
523              set to PATH. i.e. Include files from \$PATH/include, link to libraries
524              from \$PATH/lib and use binaries from \$PATH/bin.
525    
526        -bash NAME
527              Explicitly specify the Bourne or BASH shell to use
528    
529    While it is most often a single word, the "NAME" variables specified    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:    above can in many cases be a space-delimited string such as:
531    
# Line 307  EOF Line 546  EOF
546    
547  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
548  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
549    
550        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
551        if test ! "x$FC_NAMEMANGLE" = x ; then
552            return 0
553        fi
554    
555      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
556            
557      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 324  WARNING: Please contact <MITgcm-support@ Line 569  WARNING: Please contact <MITgcm-support@
569  EOF  EOF
570          return 1          return 1
571      fi      fi
572      c_tcall=`nm genmake_test.o | grep tcall | cut -d ' ' -f 3`      c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
573      RETVAL=$?      RETVAL=$?
574      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
575          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 354  WARNING: Please contact <MITgcm-support@ Line 599  WARNING: Please contact <MITgcm-support@
599  EOF  EOF
600          return 1          return 1
601      fi      fi
602      f_tcall=`nm genmake_tcomp.o | grep tcall | cut -d ' ' -f 3`      f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
603      RETVAL=$?      RETVAL=$?
604      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
605          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 430  EOF Line 675  EOF
675  }  }
676    
677    
678    check_netcdf_libs()  {
679        echo "" > genmake_tnc.log
680        cat <<EOF > genmake_tnc.for
681          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        #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        $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
696            &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \
697            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
698        RET_COMPILE=$?
699    
700        #EH3  Remove test program execution for machines that either disallow
701        #EH3  execution or cannot support it (eg. cross-compilers)
702        #EH3
703        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
704        #EH3 RETVAL=$?
705        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
706    
707        if test "x$RET_COMPILE" = x0 ; then
708            HAVE_NETCDF=t
709        else
710            # try again with "-lnetcdf" added to the libs
711            $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
712                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \
713                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
714            RET_COMPILE=$?
715            if test "x$RET_COMPILE" = x0 ; then
716                LIBS="$LIBS -lnetcdf"
717                HAVE_NETCDF=t
718            else
719                cat genmake_tnc.log >> genmake_warnings
720            fi
721        fi
722        rm -f genmake_tnc*
723    }
724    
725    
726    
727    ###############################################################################
728    #   Sequential part of script starts here
729    ###############################################################################
730    
731  #  Set defaults here  #  Set defaults here
732  COMMANDL="$0 $@"  COMMANDL="$0 $@"
733    
# Line 438  LN= Line 736  LN=
736  S64=  S64=
737  KPP=  KPP=
738  FC=  FC=
739    #CC=gcc
740    CPP=
741  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
742  DEFINES=  DEFINES=
743  PACKAGES=  PACKAGES=
744  ENABLE=  ENABLE=
745  DISABLE=  DISABLE=
746  MAKEFILE=  MAKEFILE=
747  MAKEDEPEND=  #MAKEDEPEND=
748  PDEPEND=  PDEPEND=
749  DUMPSTATE=t  DUMPSTATE=t
750  PDEFAULT=  PDEFAULT=
# Line 456  FOPTIM= Line 755  FOPTIM=
755  CFLAGS=  CFLAGS=
756  KFLAGS1=  KFLAGS1=
757  KFLAGS2=  KFLAGS2=
758    #LDADD=
759  LIBS=  LIBS=
760  KPPFILES=  KPPFILES=
761  NOOPTFILES=  NOOPTFILES=
762  NOOPTFLAGS=  NOOPTFLAGS=
763    MPI=
764    MPIPATH=
765    
766  # DEFINES checked by test compilation  # DEFINES checked by test compilation
767  HAVE_SYSTEM=  HAVE_SYSTEM=
768  HAVE_FDATE=  HAVE_FDATE=
769  FC_NAMEMANGLE=  FC_NAMEMANGLE=
770  HAVE_CLOC=  HAVE_CLOC=
771    HAVE_NETCDF=
772    HAVE_ETIME=
773    
774  MODS=  MODS=
775  TOOLSDIR=  TOOLSDIR=
776  SOURCEDIRS=  SOURCEDIRS=
777  INCLUDEDIRS=  INCLUDEDIRS=
778  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
779    
780    G2ARGS=
781    BASH=
782  PWD=`pwd`  PWD=`pwd`
783  MAKE=make  MAKE=make
784  AWK=awk  AWK=awk
785  THISHOSTNAME=`hostname`  THISHOST=`hostname`
786  THISCWD=`pwd`  THISCWD=`pwd`
787  THISDATE=`date`  THISDATE=`date`
788    THISUSER=`echo $USER`
789    THISVER=
790  MACHINE=`uname -a`  MACHINE=`uname -a`
791  EXECUTABLE=  EXECUTABLE=
792  EXEHOOK=  EXEHOOK=
# Line 488  IEEE= Line 796  IEEE=
796  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
797      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
798  fi  fi
799    FS=
800    FS90=
801    
802  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
803  AD_OPTFILE=  AD_OPTFILE=
# Line 505  TAMC_EXTRA= Line 815  TAMC_EXTRA=
815    
816  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
817  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
818  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
819    
820  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
821  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
822  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
823  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
824  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
825  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
826    
827  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
828  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
# Line 541  for i in . $MODS ; do Line 851  for i in . $MODS ; do
851          break          break
852      fi      fi
853  done  done
854  echo -n "  getting local config information:  "  printf "  getting local config information:  "
855  if test -e $gm_local ; then  if test -f $gm_local ; then
856      echo "using $gm_local"      echo "using $gm_local"
857      . $gm_local      . $gm_local
858      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 563  fi Line 873  fi
873  #done  #done
874  #parse_options  #parse_options
875  ac_prev=  ac_prev=
876  for ac_option ; do  for ac_option in $@ ; do
877    
878        G2ARGS="$G2ARGS \"$ac_option\""
879    
880      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
881      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 586  for ac_option ; do Line 898  for ac_option ; do
898          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
899              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
900                    
901          -adoptfile | --adoptfile | -ad | --ad)          -adoptfile | --adoptfile | -adof | --adof)
902              ac_prev=AD_OPTFILE ;;              ac_prev=AD_OPTFILE ;;
903          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
904              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
# Line 606  for ac_option ; do Line 918  for ac_option ; do
918          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
919              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
920                    
921            -bash | --bash)
922                ac_prev=BASH ;;
923            -bash=* | --bash=*)
924                BASH=$ac_optarg ;;
925            
926            -makedepend | --makedepend | -md | --md)
927                ac_prev=MAKEDEPEND ;;
928            -makedepend=* | --makedepend=* | -md=* | --md=*)
929                MAKEDEPEND=$ac_optarg ;;
930            
931          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
932              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
933          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 647  for ac_option ; do Line 969  for ac_option ; do
969  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
970  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
971  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
972                        
973            -cc | --cc)
974                ac_prev=CC ;;
975            -cc=* | --cc=*)
976                CC=$ac_optarg ;;
977            
978          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
979              ac_prev=FC ;;              ac_prev=FC ;;
980          -fc=* | --fc=*)          -fc=* | --fc=*)
981              FC=$ac_optarg ;;              FC=$ac_optarg ;;
982                    
983            -fs | --fs)
984                ac_prev=FS ;;
985            -fs=* | --fs=*)
986                FS=$ac_optarg ;;
987            
988            -fs90 | --fs90)
989                ac_prev=FS90 ;;
990            -fs90=* | --fs90=*)
991                FS90=$ac_optarg ;;
992            
993          -ieee | --ieee)          -ieee | --ieee)
994              IEEE=true ;;              IEEE=true ;;
995          -noieee | --noieee)          -noieee | --noieee)
996              IEEE= ;;              IEEE= ;;
997    
998            -mpi | --mpi)
999                MPI=true ;;
1000            -mpi=* | --mpi=*)
1001                MPIPATH=$ac_optarg
1002                MPI=true ;;
1003                    
1004  #       -jam | --jam)  #       -jam | --jam)
1005  #           JAM=1 ;;  #           JAM=1 ;;
# Line 702  if test -f ./.genmakerc ; then Line 1045  if test -f ./.genmakerc ; then
1045      echo      echo
1046  fi  fi
1047    
1048    #  Find the MITgcm ${ROOTDIR}
1049  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1050      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1051        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1052          ROOTDIR=".."          ROOTDIR=".."
1053      else      else
1054          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1055              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1056                  ROOTDIR=$d                  ROOTDIR=$d
1057                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1058                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1059                  break                  break
1060              fi              fi
# Line 727  if test ! -d ${ROOTDIR} ; then Line 1072  if test ! -d ${ROOTDIR} ; then
1072      exit 1      exit 1
1073  fi  fi
1074    
1075    #  Find the MITgcm ${THISVER}
1076    if test -f "${ROOTDIR}/doc/tag-index" ; then
1077        THISVER=`grep checkpoint ${ROOTDIR}/doc/tag-index | head -1`
1078    fi
1079    
1080  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1081  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1082      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 743  if test "x$OPTFILE" != xNONE ; then Line 1093  if test "x$OPTFILE" != xNONE ; then
1093          . "$OPTFILE"          . "$OPTFILE"
1094          RETVAL=$?          RETVAL=$?
1095          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1096              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1097              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1098              exit 1              exit 1
1099          fi          fi
# Line 756  if test "x$OPTFILE" != xNONE ; then Line 1106  if test "x$OPTFILE" != xNONE ; then
1106      fi      fi
1107  fi  fi
1108    
1109    #  Check for broken systems that cannot correctly distinguish *.F and *.f files
1110    # check_for_broken_Ff
1111    
1112  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1113  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1114      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 770  if test "x${AD_OPTFILE}" != xNONE ; then Line 1123  if test "x${AD_OPTFILE}" != xNONE ; then
1123          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1124          RETVAL=$?          RETVAL=$?
1125          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1126              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1127              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1128              exit 1              exit 1
1129          fi          fi
# Line 783  if test "x${AD_OPTFILE}" != xNONE ; then Line 1136  if test "x${AD_OPTFILE}" != xNONE ; then
1136      fi      fi
1137  fi  fi
1138    
1139  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1140  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1141    if test ! "x$BASH" = x ; then
1142        # add a trailing space so that it works within the Makefile syntax (see below)
1143        BASH="$BASH "
1144    fi
1145  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1146      cat <<EOF 1>&2      cat <<EOF 1>&2
1147    
# Line 795  Error: no Fortran compiler: please speci Line 1152  Error: no Fortran compiler: please speci
1152  EOF  EOF
1153      exit 1      exit 1
1154  fi  fi
1155    if test "x$CC" = x ; then
1156        CC=cc
1157    #     cat <<EOF 1>&2
1158    # Error: no C compiler: please specify using one of the following:
1159    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1160    #   2) the "-cc=XXX" command-line option
1161    #   3) the "./genmake_local" file
1162    # EOF
1163    #     exit 1
1164    fi
1165  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1166      LINK=$FC      LINK=$FC
1167  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1168  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1169      MAKE="make"      MAKE="make"
1170  fi  fi
1171    if test "x$CPP" = x ; then
1172        CPP=cpp
1173    fi
1174    #EH3 === UGLY ===
1175    #  The following is an ugly little hack to check for $CPP in /lib/ and
1176    #  it should eventually be replaced with a more general function that
1177    #  searches a combo of the user's path and a list of "usual suspects"
1178    #  to find the correct location for binaries such as $CPP.
1179    for i in " " "/lib/" ; do
1180        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1181    done
1182    #EH3 === UGLY ===
1183  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1184  RETVAL=$?  RETVAL=$?
1185  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 820  EOF Line 1196  EOF
1196  else  else
1197      rm -f test_cpp      rm -f test_cpp
1198  fi  fi
1199  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1200  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1201      LN="ln -s"      LN="ln -s"
1202  fi  fi
# Line 840  EOF Line 1214  EOF
1214  fi  fi
1215  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1216    
1217    #  Check for broken *.F/*.f handling and fix if possible
1218    check_for_broken_Ff
1219    
1220    if test ! "x$MPI" = x ; then
1221          echo "  Turning on MPI cpp macros"
1222          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1223    fi
1224    
1225  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1226  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1227  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.f <<EOF
1228        program hello        program hello
1229        call system('echo hi')        call system('echo hi')
# Line 860  else Line 1241  else
1241  fi  fi
1242  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1243    
1244  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1245  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.f <<EOF
1246        program hello        program hello
1247        CHARACTER(128) string        CHARACTER(128) string
# Line 881  else Line 1262  else
1262  fi  fi
1263  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1264    
1265  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1266    cat > genmake_tcomp.f <<EOF
1267          program hello
1268          REAL*4 ACTUAL, TARRAY(2)
1269          EXTERNAL ETIME
1270          REAL*4 ETIME
1271          actual = etime( tarray )
1272          print *, tarray
1273          end
1274    EOF
1275    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1276    RETVAL=$?
1277    if test "x$RETVAL" = x0 ; then
1278        HAVE_ETIME=t
1279        DEFINES="$DEFINES -DHAVE_ETIME"
1280        echo "yes"
1281    else
1282        HAVE_ETIME=
1283        echo "no"
1284    fi
1285    rm -f genmake_tcomp*
1286    
1287    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1288  check_HAVE_CLOC  check_HAVE_CLOC
1289  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1290      echo "yes"      echo "yes"
1291  else  else
1292      echo "no"      echo "no"
1293  fi  fi
 echo "$FC_NAMEMANGLE" > FC_NAMEMANGLE.h.template  
 cmp FC_NAMEMANGLE.h FC_NAMEMANGLE.h.template > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" != x0 ; then  
     mv -f FC_NAMEMANGLE.h.template FC_NAMEMANGLE.h  
 fi  
1294  rm -f genmake_t*  rm -f genmake_t*
1295    
1296    printf "  Can we create NetCDF-enabled binaries...  "
1297    check_netcdf_libs
1298    if test "x$HAVE_NETCDF" != x ; then
1299        echo "yes"
1300    else
1301        echo "no"
1302    fi
1303    
1304    
1305  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1306  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1307  for d in $MODS ; do  for d in $MODS ; do
1308      if test ! -d $d ; then      if test ! -d $d ; then
1309          echo          echo
1310          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1311          exit 1          exit 1
1312      else      else
1313          echo -n " $d"          printf " $d"
1314          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1315          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1316      fi      fi
# Line 920  if test "x${PLATFORM}" = x ; then Line 1325  if test "x${PLATFORM}" = x ; then
1325  fi  fi
1326    
1327  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1328      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1329        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1330          EXEDIR=../exe          EXEDIR=../exe
1331      else      else
1332          EXEDIR=.          EXEDIR=.
# Line 935  if test "x${TOOLSDIR}" = x ; then Line 1341  if test "x${TOOLSDIR}" = x ; then
1341      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1342  fi  fi
1343  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1344      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1345      exit 1      exit 1
1346  fi  fi
1347  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1348      S64='$(TOOLSDIR)/set64bitConst.sh'      S64='$(TOOLSDIR)/set64bitConst.sh'
1349  fi  fi
1350    THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1351    
1352  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1353    
# Line 955  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1362  if test -r $ROOTDIR"/eesupp/src/Makefile
1362          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1363      else      else
1364          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1365          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1366          exit 1          exit 1
1367      fi      fi
1368  fi  fi
1369    
1370    #same for exch2
1371    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1372        echo "  Making source files in exch2 from  templates"
1373        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1374        RETVAL=$?
1375        if test "x${RETVAL}" = x0 ; then
1376            rm -f make_exch2.errors
1377        else
1378            echo "Error: problem encountered while building source files in exch2:"
1379            cat make_exch2.errors 1>&2
1380            exit 1
1381        fi
1382    fi
1383    
1384  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1385  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1386      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 1015  else Line 1436  else
1436          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1437          RETVAL=$?          RETVAL=$?
1438          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1439              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1440              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1441              exit 1              exit 1
1442          fi          fi
# Line 1023  else Line 1444  else
1444              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1445          done          done
1446          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1447          expand_pkg_groups          RET=1
1448            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1449          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1450      fi      fi
1451  fi  fi
1452    
1453  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1454    for i in $PACKAGES ; do
1455        echo $i >> ./.tmp_pack
1456    done
1457    for i in `grep  "-" ./.tmp_pack` ; do
1458        j=`echo $i | sed 's/[-]//'`
1459        DISABLE="$DISABLE $j"
1460    done
1461  pack=  pack=
1462  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1463      addit="t"      addit="t"
# Line 1045  PACKAGES="$pack" Line 1474  PACKAGES="$pack"
1474  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1475  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1476  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1477    # Test if each explicitly referenced package exists
1478  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1479      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1480        if test ! -d "$ROOTDIR/pkg/$j" ; then
1481          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1482          exit 1          exit 1
1483      fi      fi
1484      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1485  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1486  PACKAGES=  PACKAGES=
1487  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1488      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1489  done  done
1490    rm -f ./.tmp_pack
1491  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1492    
1493  echo "  applying package dependency rules"  echo "  applying package dependency rules"
# Line 1124  while test "x$ck" != xtt ; do Line 1554  while test "x$ck" != xtt ; do
1554              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1555              exit 1              exit 1
1556          fi          fi
1557          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1558            #i=$(( $i + 1 ))
1559      done      done
1560      ck=$ck"t"      ck=$ck"t"
1561  done  done
# Line 1143  for i in $PACKAGES ; do Line 1574  for i in $PACKAGES ; do
1574      fi      fi
1575  done  done
1576    
1577    #  Build MNC templates and check for ability to build and use NetCDF
1578    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1579    RETVAL=$?
1580    if test "x$RETVAL" = x0 ; then
1581        ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1582        RETVAL=$?
1583        if test "x${RETVAL}" = x0 ; then
1584            rm -f make_mnc.errors
1585        else
1586            echo "Error: problem encountered while building source files in pkg/mnc:"
1587            cat make_mnc.errors 1>&2
1588            exit 1
1589        fi
1590        if test "x$HAVE_NETCDF" != xt ; then
1591            cat <<EOF
1592    
1593  # Create a list of #define and #undef to enable/disable packages  *********************************************************************
1594  PACKAGES_DOT_H=PACKAGES_CONFIG.h  WARNING: the "mnc" package was enabled but tests failed to compile
1595  cat <<EOF >$PACKAGES_DOT_H".tmp"    NetCDF applications.  Please check that:
1596  C=== GENMAKE v2 ===  
1597  C  The following defines have been set by GENMAKE, so please do not    1) NetCDF is correctly installed for this compiler and
1598  C  edit anything below these comments.  In general, you should    2) the LIBS variable (within the "optfile") specifies the correct
1599  C  add or remove packages by re-running genmake with different         NetCDF library to link against.
 C  "-enable" and/or "-disable" options.  
1600    
1601  #ifndef PACKAGES_H    Due to this failure, the "mnc" package is now DISABLED.
1602  #define PACKAGES_H  *********************************************************************
1603    
 C  Packages disabled by genmake:  
1604  EOF  EOF
1605            temp=`echo $PACKAGES | sed -e 's/mnc//g'`
1606            PACKAGES=$temp
1607        fi
1608    fi
1609    
1610    # Create a list of #define and #undef to enable/disable packages
1611    PACKAGES_DOT_H=PACKAGES_CONFIG.h
1612  #  The following UGLY HACK sets multiple "#undef"s and it needs to go  #  The following UGLY HACK sets multiple "#undef"s and it needs to go
1613  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
1614  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
1615  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
1616  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
1617  all_pack=  all_pack=
1618    DISABLED_PACKAGES=
1619  for n in $names ; do  for n in $names ; do
1620      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1621          has_pack="f"          has_pack="f"
# Line 1175  for n in $names ; do Line 1627  for n in $names ; do
1627          done          done
1628          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1629              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
1630              echo "#undef $undef" >> $PACKAGES_DOT_H".tmp"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1631          fi          fi
1632      fi      fi
1633  done  done
1634  cat <<EOF >>$PACKAGES_DOT_H".tmp"  ENABLED_PACKAGES=
   
 C  Packages enabled by genmake:  
 EOF  
1635  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1636      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
1637      echo "#define $def" >> $PACKAGES_DOT_H".tmp"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1638  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1639    
1640  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1641      case $i in      case $i in
1642          aim_v23)          aim_v23)
1643              echo "#define   ALLOW_AIM" >> $PACKAGES_DOT_H".tmp"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1644              DEFINES="$DEFINES -DALLOW_AIM"              echo "Warning: ALLOW_AIM is set to enable aim_v23."
             echo "Warning: ALLOW_AIM is set to enable aim_v23. This is REALLY ugly Jean-Michel :-)"  
1645              ;;              ;;
1646      esac      esac
1647  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1648    
1649  done  done
 cat <<EOF >>$PACKAGES_DOT_H".tmp"  
   
 #endif /* PACKAGES_H */  
 EOF  
   
 if test ! -f $PACKAGES_DOT_H ; then  
     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
 else  
     cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     RETVAL=$?  
     if test "x$RETVAL" = x0 ; then  
         rm -f $PACKAGES_DOT_H".tmp"  
     else  
         mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"  
         mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     fi  
 fi  
1650    
1651  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1652  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1653  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1654      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
1655  fi  fi
1656  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
1657      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
1658      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
1659          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1660          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1661          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1662      else              exit 1
1663          SOURCEDIRS="$SOURCEDIRS $adr"          else
1664      fi              SOURCEDIRS="$SOURCEDIRS $adr"
1665      adr="$ROOTDIR/$d/inc"          fi
1666      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
1667          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1668          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1669          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1670      else              exit 1
1671          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
1672      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
1673  done          fi
1674        done
1675    fi
1676    
1677  echo "  Searching for CPP_OPTIONS.h in order to warn about the presence"  echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1678  echo "    of \"#define ALLOW_PKGNAME\"-type statements:"  echo "    of \"#define \"-type statements that are no longer allowed:"
1679  CPP_OPTIONS=  CPP_OPTIONS=
1680    CPP_EEOPTIONS=
1681  spaths=". $INCLUDEDIRS"  spaths=". $INCLUDEDIRS"
1682    names=`ls -1 "$ROOTDIR/pkg"`
1683  for i in $spaths ; do  for i in $spaths ; do
1684      try="$i/CPP_OPTIONS.h"      try="$i/CPP_OPTIONS.h"
1685      #  echo -n "    trying $try : "      if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
     if test -f $try -a -r $try ; then  
1686          echo "    found CPP_OPTIONS=\"$try\""          echo "    found CPP_OPTIONS=\"$try\""
1687          CPP_OPTIONS="$try"          CPP_OPTIONS="$try"
1688          break          # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1689            for n in $names ; do
1690                test_for_package_in_cpp_options $CPP_OPTIONS $n
1691            done
1692        fi
1693        try="$i/CPP_EEOPTIONS.h"
1694        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1695            echo "    found CPP_EEOPTIONS=\"$try\""
1696            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1697    #**** not yet enabled ****
1698    #        test_for_mpi_in_cpp_eeoptions $try
1699    #**** not yet enabled ****
1700            CPP_EEOPTIONS="$try"
1701      fi      fi
1702  done  done
1703  if test "x$CPP_OPTIONS" = x ; then  if test "x$CPP_OPTIONS" = x ; then
1704      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1705      exit 1      exit 1
1706  fi  fi
 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h  
 names=`ls -1 "$ROOTDIR/pkg"`  
 for n in $names ; do  
     test_for_package_in_cpp_options $CPP_OPTIONS $n  
 done  
   
1707    
1708  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
1709  #  compiler.  #  compiler.
# Line 1278  for i in $SOURCEDIRS ; do Line 1718  for i in $SOURCEDIRS ; do
1718      done      done
1719  done  done
1720    
 cat <<EOF > adjoint_sed  
 s/call adopen(/call adopen ( mythid,\\  
      \&           /g  
 s/call adclose(/call adclose( mythid,\\  
      \&           /g  
 s/call adread(/call adread ( mythid,\\  
      \&           /g  
 s/call adwrite(/call adwrite( mythid,\\  
      \&           /g  
   
 EOF  
1721    
1722  echo  echo
1723  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1724  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1725  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1726      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1727          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1728      fi      fi
1729  done  done
# Line 1306  rm -rf .links.tmp Line 1733  rm -rf .links.tmp
1733  mkdir .links.tmp  mkdir .links.tmp
1734  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1735  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1736  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1737  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1738  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1739  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1740  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1741  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1742  for d in $alldirs ; do  for d in $alldirs ; do
1743      deplist=      deplist=
# Line 1319  for d in $alldirs ; do Line 1746  for d in $alldirs ; do
1746      for sf in $sfiles ; do      for sf in $sfiles ; do
1747          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1748              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1749                    case $d/$sf in
1750                      ./$PACKAGES_DOT_H)
1751                            ;;
1752                      ./AD_CONFIG.h)
1753                            ;;
1754                      ./FC_NAMEMANGLE.h)
1755                            ;;
1756                      ./BUILD_INFO.h)
1757                            ;;
1758                      *)
1759                            touch .links.tmp/$sf
1760                            deplist="$deplist $sf"
1761                            ;;
1762                    esac
1763                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`
                 touch .links.tmp/$sf  
                 deplist="$deplist $sf"  
1764                  case $extn in                  case $extn in
1765                      F)                      F)
1766                          echo    " \\"  >> srclist.inc                          echo    " \\"  >> srclist.inc
1767                          echo -n " $sf" >> srclist.inc                          printf " $sf" >> srclist.inc
1768                          ;;                          ;;
1769                      F90)                      F90)
1770                          echo    " \\"  >> f90srclist.inc                          echo    " \\"  >> f90srclist.inc
1771                          echo -n " $sf" >> f90srclist.inc                          printf " $sf" >> f90srclist.inc
1772                          ;;                          ;;
1773                      c)                      c)
1774                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.inc
1775                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.inc
1776                          ;;                          ;;
1777                      h)                      h)
1778                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hlist.inc
1779                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hlist.inc
1780                          ;;                          ;;
1781                      flow)                      flow)
1782                          echo    " \\"  >> ad_flow_files.inc                          echo    " \\"  >> ad_flow_files.inc
1783                          echo -n " $sf" >> ad_flow_files.inc                          printf " $sf" >> ad_flow_files.inc
1784                          ;;                          ;;
1785                  esac                  esac
1786              fi              fi
# Line 1361  echo "" >> f90srclist.inc Line 1800  echo "" >> f90srclist.inc
1800  echo "" >> hlist.inc  echo "" >> hlist.inc
1801  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1802    
1803  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1804      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1805  fi  fi
1806  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1370  echo "#    $MACHINE" >> $MAKEFILE Line 1809  echo "#    $MACHINE" >> $MAKEFILE
1809  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
1810  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
1811  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1812  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1813  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1814  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
1815    
1816  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
1817  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
1818  EXE_SVD=$EXECUTABLE"_svd"  EXE_SVD=$EXECUTABLE"_svd"
1819    
1820  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1821    #
1822    # OPTFILE="$OPTFILE"
1823  #  #
1824  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
1825  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 1412  EXE_AD      = ${EXE_AD} Line 1853  EXE_AD      = ${EXE_AD}
1853  EXE_FTL     = ${EXE_FTL}  EXE_FTL     = ${EXE_FTL}
1854  EXE_SVD     = ${EXE_SVD}  EXE_SVD     = ${EXE_SVD}
1855    
1856    ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1857    DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1858    
1859    # These files are created by Makefile
1860    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
1861    
1862  EOF  EOF
1863    
1864  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 1429  KPP = ${KPP} Line 1876  KPP = ${KPP}
1876  FC = ${FC}  FC = ${FC}
1877  # Fortran compiler  # Fortran compiler
1878  F90C = ${F90C}  F90C = ${F90C}
1879    # C compiler
1880    CC = ${CC}
1881  # Link editor  # Link editor
1882  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
1883    
1884  # Defines for CPP  # Defines for CPP
1885  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1462  cat csrclist.inc      >> $MAKEFILE Line 1911  cat csrclist.inc      >> $MAKEFILE
1911  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
1912  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
1913  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
1914  echo               >> $MAKEFILE  echo >> $MAKEFILE
1915  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
1916  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1917  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1918    echo >> $MAKEFILE
1919    echo '.SUFFIXES:' >> $MAKEFILE
1920    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1921  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1922  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
1923    
1924  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1925    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
1926  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
1927  \$(EXECUTABLE): \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1928            @echo Creating \$@ ...
1929          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1930  depend:  depend:
1931          @make links          @make links
1932          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1933          ${TOOLSDIR}/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1934            -rm -f makedepend.out
1935    
1936  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1937    
1938  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
1939    
# Line 1492  output.txt: \$(EXECUTABLE) Line 1942  output.txt: \$(EXECUTABLE)
1942          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
1943    
1944  clean:  clean:
1945          -cat AD_CONFIG.template > AD_CONFIG.h          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
         -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl}  
1946  Clean:  Clean:
1947          @make clean          @make clean
1948          @make cleanlinks          @make cleanlinks
1949          -rm -f Makefile.bak genmake_state genmake_*optfile genmake_warnings make.log          -rm -f \$(SPECIAL_FILES)
1950            -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1951  CLEAN:  CLEAN:
1952          @make Clean          @make Clean
1953          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1954          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1955          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1956          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
1957    
1958  #eh3 Makefile: makefile  #eh3 Makefile: makefile
1959  makefile:  makefile:
1960          ${0} $@          $THIS_SCRIPT $G2ARGS
1961  cleanlinks:  cleanlinks:
1962          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
1963    
1964  # The normal chain of rules is (  .F - .f - .o  )  # Special targets (SPECIAL_FILES) which are create by make
1965  .F.f:  ${PACKAGES_DOT_H}:
1966            @echo Creating \$@ ...
1967            @$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) > \$@
1968    AD_CONFIG.h:
1969            @echo Creating \$@ ...
1970            @$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 > \$@
1971    FC_NAMEMANGLE.h:
1972            @echo Creating \$@ ...
1973            echo "$FC_NAMEMANGLE" > \$@
1974    
1975    BUILD_INFO.h:
1976            @echo Creating \$@ ...
1977    EOF
1978    
1979    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
1980    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
1981    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
1982    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
1983    
1984    cat >>$MAKEFILE <<EOF
1985    
1986    # The normal chain of rules is (  .F - .$FS - .o  )
1987    
1988    %.o : %.F
1989    
1990    .F.$FS:
1991          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1992  .f.o:  .$FS.o:
1993          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1994  .F90.f90:  .F90.$FS90:
1995          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1996  .f90.o:  .$FS90.o:
1997          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1998  .c.o:  .c.o:
1999          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
2000    
2001  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2002  .F.p:  .F.p:
2003          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2004  .p.f:  .p.$FS:
2005          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2006    
2007  #=========================================  #=========================================
# Line 1553  done Line 2028  done
2028    
2029  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2030  echo >> $MAKEFILE  echo >> $MAKEFILE
2031  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2032  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
2033  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2034      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2035      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2036  done  done
2037  echo >> $MAKEFILE  echo >> $MAKEFILE
2038  rm -f ad_files  rm -f ad_files
# Line 1570  adtaf: ad_taf_output.f Line 2045  adtaf: ad_taf_output.f
2045  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.f
2046    
2047  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2048            @$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
2049          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2050            -rm -f ad_config.template
2051          @make \$(F77FILES)          @make \$(F77FILES)
2052          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2053          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
2054    
2055  ad_taf_output.f: ad_input_code.f  ad_taf_output.f: ad_input_code.f
2056          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2057          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2058    
2059  adtafonly:  adtafonly:
2060          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
2061          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
2062    
2063  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2064          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2065    
2066  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.f: ad_input_code.f
2067          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
2068          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
2069    
2070  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2071          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
# Line 1600  ftltaf: ftl_taf_output.f Line 2077  ftltaf: ftl_taf_output.f
2077  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.f
2078    
2079  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2080            @$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
2081          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2082            -rm -f ftl_config.template
2083          @make \$(F77FILES)          @make \$(F77FILES)
2084          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2085          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
2086    
2087  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.f: ftl_input_code.f
2088          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2089          cat ftl_input_code_ftl.f | sed -f adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2090    
2091  ftltafonly:  ftltafonly:
2092          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
2093          cat ftl_input_code_ftl.f | sed -f adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
2094    
2095  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2096          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2097    
2098  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.f: ftl_input_code.f
2099          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
2100          cat ftl_input_code_ftl.f | sed -f adjoint_sed > ftl_tamc_output.f          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
2101    
2102  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2103          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
# Line 1647  for i in $KPPFILES ; do Line 2126  for i in $KPPFILES ; do
2126      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2127          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2128      fi      fi
2129      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2130  done  done
2131    
2132  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1657  for i in $NOOPTFILES ; do Line 2136  for i in $NOOPTFILES ; do
2136      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2137          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2138      fi      fi
2139      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2140      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2141  done  done
2142    
# Line 1670  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2149  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2149    
2150  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2151    
2152  #  Write the "template" files for the adjoint builds  # Create special header files
2153  cat >AD_CONFIG.template <<EOF  $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"
2154  C  WARNING: This file is automatically generated by genmake2 and  if test ! -f $PACKAGES_DOT_H ; then
2155  C    used by the Makefile rules.  Please DO NOT EDIT this file      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2156  C    unless you are CERTAIN that you know what you are doing.  else
2157        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2158  #undef ALLOW_ADJOINT_RUN      RETVAL=$?
2159  #undef ALLOW_TANGENTLINEAR_RUN      if test "x$RETVAL" = x0 ; then
2160  #undef ALLOW_ECCO_OPTIMIZATION          rm -f $PACKAGES_DOT_H".tmp"
2161  EOF      else
2162  cat >ad_config.template <<EOF          mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2163  C  WARNING: This file is automatically generated by genmake2 and          mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2164  C    used by the Makefile rules.  Please DO NOT EDIT this file      fi
2165  C    unless you are CERTAIN that you know what you are doing.  fi
2166    if test ! -f AD_CONFIG.h ; then
2167  #define ALLOW_ADJOINT_RUN      $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
2168  #undef ALLOW_TANGENTLINEAR_RUN  fi
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cat >ftl_config.template <<EOF  
 C  WARNING: This file is automatically generated by genmake2 and  
 C    used by the Makefile rules.  Please DO NOT EDIT this file  
 C    unless you are CERTAIN that you know what you are doing.  
   
 #undef ALLOW_ADJOINT_RUN  
 #define ALLOW_TANGENTLINEAR_RUN  
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cat >svd_config.template <<EOF  
 C  WARNING: This file is automatically generated by genmake2 and  
 C    used by the Makefile rules.  Please DO NOT EDIT this file  
 C    unless you are CERTAIN that you know what you are doing.  
   
 #undef ALLOW_ADJOINT_RUN  
 #undef ALLOW_TANGENTLINEAR_RUN  
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cp AD_CONFIG.template AD_CONFIG.h  
2169    
2170    
2171  #  Write the "state" for future records  #  Write the "state" for future records
2172  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2173      echo -n "" > genmake_state      printf "" > genmake_state
2174      for i in $gm_state ; do      for i in $gm_state ; do
2175          t1="t2=\$$i"          t1="t2=\$$i"
2176          eval $t1          eval $t1

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.99

  ViewVC Help
Powered by ViewVC 1.1.22