/[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.35 by edhill, Thu Nov 13 22:03:39 2003 UTC revision 1.131 by edhill, Wed Sep 14 17:57:54 2005 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".tst"
126        cat <<EOF >> $MAKEFILE
127    .SUFFIXES:
128    .SUFFIXES: .$tfs .F
129    .F.$tfs:
130            $LN \$< \$@
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".tst"  &&  mv -f $MAKEFILE".tst" $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            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
185            #  echo 'MAKEFILE="'$MAKEFILE'"'
186            cat <<EOF >> $MAKEFILE
187    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
188    #
189    #   Some "makedepend" implementations will die if they cannot
190    #   find a Makefile -- so this file is here to gives them an
191    #   empty one to find and parse.
192    EOF
193            cat <<EOF >> genmake_tc.f
194          program test
195          write(*,*) 'test'
196          stop
197          end
198    EOF
199            makedepend genmake_tc.f > /dev/null 2>&1
200            RV1=$?
201            test -f $MAKEFILE  &&  rm -f $MAKEFILE
202            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
203            if test "x${RV0}${RV1}" = x00 ; then
204                MAKEDEPEND=makedepend
205            else
206                echo "    a system-default makedepend was not found."
207                
208                #  Try to build the cyrus implementation
209                build_cyrus_makedepend
210                RETVAL=$?
211                if test "x$RETVAL" != x0 ; then
212                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
213                fi
214                rm -f ./genmake_cy_md
215            fi
216        else
217            #  echo "MAKEDEPEND=${MAKEDEPEND}"
218            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
219            RETVAL=$?
220            if test x"$RETVAL" = x0 ; then
221                build_cyrus_makedepend
222            fi
223        fi
224    }
225    
226    
227    build_cyrus_makedepend()  {
228        rm -f ./genmake_cy_md
229        (
230            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
231                &&  ./configure > /dev/null 2>&1  \
232                &&  make > /dev/null 2>&1
233            if test -x ./makedepend.exe ; then
234                $LN ./makedepend.exe ./makedepend
235            fi
236            ./makedepend ifparser.c > /dev/null 2>&1  \
237                &&  echo "true"
238        ) > ./genmake_cy_md
239        grep true ./genmake_cy_md > /dev/null 2>&1
240        RETVAL=$?
241        rm -f ./genmake_cy_md
242        if test "x$RETVAL" = x0 ; then
243            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
244            return 0
245        else
246            echo "WARNING: unable to build cyrus-imapd-makedepend"
247            return 1
248        fi
249    }
250    
251  # Guess possible config options for this host  # Guess possible config options for this host
252  find_possible_configs()  {  find_possible_configs()  {
253    
254      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
255      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
256      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
257      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|'`
258        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
259        tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
260        PLATFORM=$tmp3
261        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
262      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
263      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
 #     if test "x$OFLIST" = x ; then  
 #       echo "  No pre-defined options files were found matching this platform"  
 #       echo "  but examples for other platforms can be found in:"  
 #       echo "    $ROOTDIR/tools/build_options"  
 #     else  
 #       echo "  Options files (located in $ROOTDIR/tools/build_options) that"  
 #       echo "  may work with this machine are:"  
 #       for i in $OFLIST ; do  
 #           echo "    $i"  
 #       done  
 #     fi  
264            
265      echo "test" > test      echo "test" > test
266      ln -s ./test link      ln -s ./test link
# Line 104  find_possible_configs()  { Line 278  find_possible_configs()  {
278          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
279      fi      fi
280    
281      # makedepend is not always available      look_for_makedepend
282      if test "x${MAKEDEPEND}" = x ; then  
283        which makedepend >& /dev/null      #================================================================
284        RETVAL=$?      #  look for possible C compilers
285        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
286           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
287           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
288        fi          rm -f ./genmake_hello.c  ./genmake_hello
289            cat >> genmake_hello.c << EOF
290    #include <stdio.h>
291    int main(int argc, char **argv) {
292      printf("Hello!\n");
293      return 0;
294    }
295    EOF
296            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
297            RETVAL=$?
298            if test "x${RETVAL}" = x0 ; then
299                p_CC="$p_CC $c"
300            fi
301        done
302        rm -f ./genmake_hello.c ./genmake_hello
303        if test "x${p_CC}" = x ; then
304            cat 1>&2 <<EOF
305    
306    Error: No C compilers were found in your path.  Please specify one using:
307    
308        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
309        2) the CC or MITGCM_CC environment variables.
310    
311    EOF
312            exit 1
313        else
314            echo "  The possible C compilers found in your path are:"
315            echo "   "$p_CC
316            if test "x$CC" = x ; then
317                CC=`echo $p_CC | $AWK '{print $1}'`
318                echo "  Setting C compiler to: "$CC
319            fi
320      fi      fi
321    
322      # look for possible fortran compilers      #================================================================
323      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible FORTRAN compilers
324        tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"
325      p_FC=      p_FC=
326      for c in $tmp ; do      for c in $tmp ; do
327          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 140  Error: No Fortran compilers were found i Line 346  Error: No Fortran compilers were found i
346    
347      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
348      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
349      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
350    
351  EOF  EOF
352          exit 1          exit 1
# Line 149  EOF Line 355  EOF
355          echo "   "$p_FC          echo "   "$p_FC
356          if test "x$FC" = x ; then          if test "x$FC" = x ; then
357              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
358                echo "  Setting FORTRAN compiler to: "$FC
359          fi          fi
360      fi      fi
361    
362      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
363          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
364          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
365              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
366              echo "  The options file:  $p_OF"          fi
367              echo "    appears to match so we'll use it."      fi
368              break  #    echo "  The options file:  $p_OF"
369          fi  #    echo "    appears to match so we'll use it."
370      done  #   for i in $p_FC ; do
371    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
372    #if test -r $p_OF ; then
373    #    OPTFILE=$p_OF
374    #    echo "  The options file:  $p_OF"
375    #    echo "    appears to match so we'll use it."
376    #    break
377    #fi
378    #   done
379      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
380          cat 1>&2 <<EOF          cat 1>&2 <<EOF
381    
# Line 219  get_pdepend_list()  { Line 434  get_pdepend_list()  {
434      . ./.pd_tmp      . ./.pd_tmp
435      rm -f ./.pd_tmp      rm -f ./.pd_tmp
436    
437      echo -n "PNAME = "${}      printf "PNAME = "${}
438  }  }
439    
440    
441  #  Explain usage  #  Explain usage
442  usage()  {  usage()  {
443      echo  cat <<EOF
444      echo "Usage: "$0" [OPTIONS]"  
445      echo "  where [OPTIONS] can be:"  Usage: "$0" [OPTIONS]
446      echo    where [OPTIONS] can be:
447      echo "    -help | --help | -h | --h"  
448      echo "    -nooptfile | --nooptfile"      -help | --help | -h | --h
449      echo "      -optfile NAME | --optfile NAME | -of NAME | --of NAME"            Print this help message and exit.
450      echo "      -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME"  
451      echo "    -pdepend NAME | --pdepend NAME"      -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
452      echo "      -pdepend=NAME | --pdepend=NAME"        -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
453      echo "    -pdefault NAME | --pdefault NAME"            Use "NAME" as the adoptfile.  By default, the file at
454      echo "      -pdefault=NAME | --pdefault=NAME"            "tools/adjoint_options/adjoint_default" will be used.
455      echo "    -make NAME | -m NAME"  
456      echo "      --make=NAME | -m=NAME"      -nooptfile | --nooptfile
457      echo "    -makefile NAME | -mf NAME"        -optfile NAME | --optfile NAME | -of NAME | --of NAME
458      echo "      --makefile=NAME | -mf=NAME"        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
459      echo "    -platform NAME | --platform NAME | -pl NAME | --pl NAME"            Use "NAME" as the optfile.  By default, an attempt will be
460      echo "      -platform=NAME | --platform=NAME | -pl=NAME | --pl=NAME"            made to find an appropriate "standard" optfile in the
461      echo "    -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME"            tools/build_options/ directory.
462      echo "      -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME"  
463      echo "    -mods NAME | --mods NAME | -mo NAME | --mo NAME"      -pdepend NAME | --pdepend NAME
464      echo "      -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME"        -pdepend=NAME | --pdepend=NAME
465      echo "    -disable NAME | --disable NAME"            Get package dependency information from "NAME".
466      echo "      -disable=NAME | --disable=NAME"  
467      echo "    -enable NAME | --enable NAME"      -pdefault NAME | --pdefault NAME
468      echo "      -enable=NAME | --enable=NAME"        -pdefault=NAME | --pdefault=NAME
469      echo "    -standarddirs NAME | --standarddirs NAME"            Get the default package list from "NAME".
470      echo "      -standarddirs=NAME | --standarddirs=NAME"  
471      echo "    -noopt NAME | --noopt NAME"      -make NAME | -m NAME
472      echo "      -noopt=NAME | --noopt=NAME"        --make=NAME | -m=NAME
473  #    echo "    -cpp NAME | --cpp NAME"            Use "NAME" for the MAKE program. The default is "make" but
474  #    echo "      -cpp=NAME | --cpp=NAME"            many platforms, "gmake" is the preferred choice.
475      echo "    -fortran NAME | --fortran NAME | -fc NAME | --fc NAME"  
476      echo "      -fc=NAME | --fc=NAME"      -makefile NAME | -mf NAME
477      echo "    -[no]ieee | --[no]ieee"        --makefile=NAME | -mf=NAME
478      echo "    -[no]mpi | --[no]mpi"            Call the makefile "NAME".  The default is "Makefile".
479      echo "    -[no]jam | --[no]jam"  
480      echo      -makedepend NAME | -md NAME
481      echo "  and NAME is a string such as:"        --makedepend=NAME | -md=NAME
482      echo            Use "NAME" for the MAKEDEPEND program.
483      echo "    --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'"  
484      echo "    -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'"      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
485      echo "    -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'"        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
486      echo            Specify the location of the MITgcm ROOTDIR as "NAME".
487      echo "  which, depending upon your shell, may need to be single-quoted"            By default, genamke will try to find the location by
488      echo "  if it contains spaces, dashes, or other special characters."            looking in parent directories (up to the 5th parent).
489    
490        -mods NAME | --mods NAME | -mo NAME | --mo NAME
491          -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
492              Here, "NAME" specifies a list of directories that are
493              used for additional source code.  Files found in the
494              "mods list" are given preference over files of the same
495              name found elsewhere.
496    
497        -disable NAME | --disable NAME
498          -disable=NAME | --disable=NAME
499              Here "NAME" specifies a list of packages that we don't
500              want to use.  If this violates package dependencies,
501              genamke will exit with an error message.
502    
503        -enable NAME | --enable NAME
504          -enable=NAME | --enable=NAME
505              Here "NAME" specifies a list of packages that we wish
506              to specifically enable.  If this violates package
507              dependencies, genamke will exit with an error message.
508    
509        -standarddirs NAME | --standarddirs NAME
510          -standarddirs=NAME | --standarddirs=NAME
511              Here, "NAME" specifies a list of directories to be
512              used as the "standard" code.
513    
514        -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
515          -fc=NAME | --fc=NAME
516              Use "NAME" as the fortran compiler.  By default, genmake
517              will search for a working compiler by trying a list of
518              "usual suspects" such as g77, f77, etc.
519    
520        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
521              Use "NAME" as the C compiler.  By default, genmake
522              will search for a working compiler by trying a list of
523              "usual suspects" such as gcc, c89, cc, etc.
524    
525        -[no]ieee | --[no]ieee
526              Do or don't use IEEE numerics.  Note that this option
527              *only* works if it is supported by the OPTFILE that
528              is being used.
529    
530        -ts | --ts
531              Produce timing information per timestep
532    
533        -mpi | --mpi
534              Include MPI header files and link to MPI libraries
535        -mpi=PATH | --mpi=PATH
536              Include MPI header files and link to MPI libraries using MPI_ROOT
537              set to PATH. i.e. Include files from \$PATH/include, link to libraries
538              from \$PATH/lib and use binaries from \$PATH/bin.
539    
540        -bash NAME
541              Explicitly specify the Bourne or BASH shell to use
542    
543      While it is most often a single word, the "NAME" variables specified
544      above can in many cases be a space-delimited string such as:
545    
546        --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
547        -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'
548        -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
549    
550      which, depending upon your shell, may need to be single-quoted.
551    
552      For more detailed genmake documentation, please see:
553    
554        http://mitgcm.org/devel_HOWTO/
555    
556    EOF
557    
558      exit 1      exit 1
559  }  }
560    
561  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
562  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
563    
564        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
565        if test ! "x$FC_NAMEMANGLE" = x ; then
566            return 0
567        fi
568    
569      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
570            
571      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
572  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
573  EOF  EOF
574      $MAKE genmake_test.o > genmake_test.log 2>&1      $MAKE genmake_test.o >> genmake_warnings 2>&1
575      RETVAL=$?      RETVAL=$?
576      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
         cat genmake_test.log >> genmake_errors  
577          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
578          echo          cat <<EOF>> genmake_errors
579          echo "WARNING: C test compile fails -- please see \"genmake_errors\""  
580          echo "WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'"  WARNING: C test compile fails
581          echo "WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here."  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
582    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
583    EOF
584          return 1          return 1
585      fi      fi
586      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`
587      RETVAL=$?      RETVAL=$?
588      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
589          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
590          echo          cat <<EOF>> genmake_warnings
591          echo "WARNING: The \"nm\" command failed."  
592          echo "WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'"  WARNING: The "nm" command failed.
593          echo "WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here."  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
594    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
595    EOF
596          return 1          return 1
597      fi      fi
598      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
599        subroutine tcall( string )        subroutine tcall( string )
600        character*(*) string        character*(*) string
601        call tsub( string )        call tsub( string )
602        end        end
603  EOF  EOF
604      $FC $FFLAGS $DEFINES -c genmake_tcomp.f > genmake_tcomp.log 2>&1      $FC $FFLAGS $DEFINES -c genmake_tcomp.$FS >> genmake_warnings 2>&1
605      RETVAL=$?      RETVAL=$?
606      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
         cat genmake_tcomp.log >> genmake_errors  
607          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
608          echo          cat <<EOF>> genmake_warnings
609          echo "WARNING: FORTRAN test compile fails -- please see \"genmake_errors\""  
610          echo "WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'"  WARNING: FORTRAN test compile fails -- please see "genmake_errors"
611          echo "WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here."  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
612    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
613    EOF
614          return 1          return 1
615      fi      fi
616      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`
617      RETVAL=$?      RETVAL=$?
618      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
619          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
620          echo          cat <<EOF>> genmake_warnings
621          echo "WARNING: The \"nm\" command failed."  
622          echo "WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'"  WARNING: The "nm" command failed.
623          echo "WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here."  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
624    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
625    EOF
626          return 1          return 1
627      fi      fi
628    
# Line 353  EOF Line 649  EOF
649      rm -f genmake_tcomp.* genmake_test.*      rm -f genmake_tcomp.* genmake_test.*
650  }  }
651    
652    
653    check_HAVE_CLOC()  {
654        get_fortran_c_namemangling
655        cat <<EOF > genmake_tc_1.c
656    $FC_NAMEMANGLE
657    #include <stdio.h>
658    #include <stdlib.h>
659    #include <unistd.h>
660    #include <assert.h>
661    #include <sys/time.h>
662    void FC_NAMEMANGLE(cloc) ( double *curtim )
663    {
664     struct timeval tv1;
665     gettimeofday(&tv1 , (void *)NULL );
666     *curtim =  (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
667     *curtim = *curtim/1.E6;
668    }
669    EOF
670        make genmake_tc_1.o >> genmake_warnings 2>&1
671        RET_C=$?
672        cat <<EOF > genmake_tc_2.$FS
673          program hello
674          REAL*8 wtime
675          external cloc
676          call cloc(wtime)
677          print *," HELLO WORLD", wtime
678          end
679    EOF
680        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
681        RET_F=$?
682        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
683        RETVAL=$?
684        if test "x$RETVAL" = x0 ; then
685            HAVE_CLOC=t
686            DEFINES="$DEFINES -DHAVE_CLOC"
687        fi
688        rm -f genmake_tc*
689    }
690    
691    
692    check_HAVE_SETRLSTK()  {
693        get_fortran_c_namemangling
694        cat <<EOF > genmake_tc_1.c
695    $FC_NAMEMANGLE
696    #include <sys/time.h>
697    #include <sys/resource.h>
698    #include <unistd.h>
699    void FC_NAMEMANGLE(setrlstk) ()
700    {
701        struct rlimit rls;
702        rls.rlim_cur = RLIM_INFINITY;
703        rls.rlim_max = RLIM_INFINITY;
704        setrlimit(RLIMIT_STACK, &rls);
705        return;
706    }
707    EOF
708        make genmake_tc_1.o >> genmake_warnings 2>&1
709        RET_C=$?
710        cat <<EOF > genmake_tc_2.$FS
711          program hello
712          external setrlstk
713          call setrlstk()
714          end
715    EOF
716        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
717        RET_F=$?
718        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
719        RETVAL=$?
720        if test "x$RETVAL" = x0 ; then
721            HAVE_SETRLSTK=t
722            DEFINES="$DEFINES -DHAVE_SETRLSTK"
723        fi
724        rm -f genmake_tc*
725    }
726    
727    
728    check_HAVE_STAT()  {
729        get_fortran_c_namemangling
730        cat <<EOF > genmake_tc_1.c
731    $FC_NAMEMANGLE
732    #include <stdio.h>
733    #include <stdlib.h>
734    #include <unistd.h>
735    #include <sys/stat.h>
736    #include <sys/types.h>
737    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
738    {
739        char name[512];
740        struct stat astat;
741    
742        name[0] = 'a'; name[1] = '\0';
743        if (! stat(name, &astat))
744            *nbyte = (int)(astat.st_size);
745        else
746            *nbyte = -1;
747    }
748    EOF
749        make genmake_tc_1.o >> genmake_tc.log 2>&1
750        RET_C=$?
751        cat <<EOF > genmake_tc_2.$FS
752          program hello
753          integer nbyte
754          call tfsize(nbyte)
755          print *," HELLO WORLD", nbyte
756          end
757    EOF
758        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_tc.log 2>&1
759        RET_F=$?
760        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1
761        RETVAL=$?
762        if test "x$RETVAL" = x0 ; then
763            HAVE_STAT=t
764            DEFINES="$DEFINES -DHAVE_STAT"
765        fi
766        rm -f genmake_tc*
767    }
768    
769    
770    check_netcdf_libs()  {
771        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
772            return
773        fi
774        echo "" > genmake_tnc.log
775        cat <<EOF > genmake_tnc.F
776          program fgennc
777    #include "netcdf.inc"
778    EOF
779        if test ! "x$MPI" = x ; then
780            echo '#include "mpif.h"' >> genmake_tnc.F
781        fi
782        cat <<EOF >> genmake_tnc.F
783          integer iret, ncid, xid
784          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
785          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
786          iret = nf_def_dim(ncid, 'X', 11, xid)
787          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
788          iret = nf_close(ncid)
789          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
790          end
791    EOF
792        echo "Executing:" > genmake_tnc.log
793        echo "  $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS" \
794            > genmake_tnc.log
795        RET_CPP=f
796        $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
797            &&  RET_CPP=t
798        if test "x$RET_CPP" = xf ; then
799            echo "  WARNING: CPP failed to pre-process the netcdf test." \
800                > genmake_tnc.log
801            echo "    Please check that \$INCLUDES is properly set." \
802                > genmake_tnc.log
803        fi
804        echo "Executing:" > genmake_tnc.log
805        echo "  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS" > genmake_tnc.log
806        echo "  $LINK -o genmake_tnc.o $LIBS" > genmake_tnc.log
807        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
808            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
809        RET_COMPILE=$?
810    
811        #EH3  Remove test program execution for machines that either disallow
812        #EH3  execution or cannot support it (eg. cross-compilers)
813        #EH3
814        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
815        #EH3 RETVAL=$?
816        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
817    
818        if test "x$RET_COMPILE" = x0 ; then
819            HAVE_NETCDF=t
820        else
821            # try again with "-lnetcdf" added to the libs
822            $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
823                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
824                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
825            RET_COMPILE=$?
826            if test "x$RET_COMPILE" = x0 ; then
827                LIBS="$LIBS -lnetcdf"
828                HAVE_NETCDF=t
829            else
830                cat genmake_tnc.log >> genmake_warnings
831            fi
832        fi
833        rm -f genmake_tnc*
834    }
835    
836    
837    
838    ###############################################################################
839    #   Sequential part of script starts here
840    ###############################################################################
841    
842  #  Set defaults here  #  Set defaults here
843  COMMANDL="$0 $@"  COMMANDL="$0 $@"
844    
# Line 360  PLATFORM= Line 846  PLATFORM=
846  LN=  LN=
847  S64=  S64=
848  KPP=  KPP=
849  FC=  #FC=
850    #CC=gcc
851    #CPP=
852  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
853  DEFINES=  DEFINES=
854  PACKAGES=  PACKAGES=
855  ENABLE=  ENABLE=
856  DISABLE=  DISABLE=
857  MAKEFILE=  # MAKEFILE=
858  MAKEDEPEND=  # MAKEDEPEND=
859  PDEPEND=  PDEPEND=
860  DUMPSTATE=t  DUMPSTATE=t
861  PDEFAULT=  PDEFAULT=
862  OPTFILE=  OPTFILE=
863  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
864  FFLAGS=  FFLAGS=
865  FOPTIM=  FOPTIM=
866  CFLAGS=  CFLAGS=
867  KFLAGS1=  KFLAGS1=
868  KFLAGS2=  KFLAGS2=
869    #LDADD=
870  LIBS=  LIBS=
871  KPPFILES=  KPPFILES=
872  NOOPTFILES=  NOOPTFILES=
873  NOOPTFLAGS=  NOOPTFLAGS=
874    MPI=
875    MPIPATH=
876    TS=
877    HAVE_TEST_L=
878    
879  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
880  HAVE_SYSTEM=  HAVE_SYSTEM=
881  HAVE_FDATE=  HAVE_FDATE=
882  FC_NAMEMANGLE=  FC_NAMEMANGLE=
883    HAVE_CLOC=
884    HAVE_SETRLSTK=
885    HAVE_STAT=
886    HAVE_NETCDF=
887    HAVE_ETIME=
888    IGNORE_TIME=
889    
890  MODS=  MODS=
891  TOOLSDIR=  TOOLSDIR=
892  SOURCEDIRS=  SOURCEDIRS=
893  INCLUDEDIRS=  INCLUDEDIRS=
894  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
895    
896    G2ARGS=
897    BASH=
898  PWD=`pwd`  PWD=`pwd`
899  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
900  AWK=awk  test "x$AWK" = x   &&  AWK=awk
901  THISHOSTNAME=`hostname`  THISHOST=`hostname`
902  THISCWD=`pwd`  THISCWD=`pwd`
903  THISDATE=`date`  THISDATE=`date`
904    THISUSER=`echo $USER`
905    THISVER=
906  MACHINE=`uname -a`  MACHINE=`uname -a`
907  EXECUTABLE=  EXECUTABLE=
908  EXEHOOK=  EXEHOOK=
# Line 410  IEEE= Line 912  IEEE=
912  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
913      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
914  fi  fi
915    FS=
916    FS90=
917    
918  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
919  AD_OPTFILE=  AD_OPTFILE=
# Line 426  TAMC_EXTRA= Line 930  TAMC_EXTRA=
930    
931    
932  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
933  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE NOOPT"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
934  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"
935    
936  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
937  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 "
938  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
939  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
940  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
941  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
942    
943  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
944  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 444  gm_s12="TAF_EXTRA TAMC_EXTRA" Line 948  gm_s12="TAF_EXTRA TAMC_EXTRA"
948  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
949  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
950    
951    cat <<EOF
952    
953    GENMAKE :
954    
955    A program for GENerating MAKEfiles for the MITgcm project.  For a
956    quick list of options, use "genmake -h" or for more detail see:
957    
958      http://mitgcm.org/devel_HOWTO/
959    
960    EOF
961    
 echo  
962  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
963  gm_local="genmake_local"  gm_local="genmake_local"
964  for i in . $MODS ; do  for i in . $MODS ; do
# Line 454  for i in . $MODS ; do Line 967  for i in . $MODS ; do
967          break          break
968      fi      fi
969  done  done
970  echo -n "  getting local config information:  "  printf "  getting local config information:  "
971  if test -e $gm_local ; then  if test -f $gm_local ; then
972      echo "using $gm_local"      echo "using $gm_local"
973      . $gm_local      . $gm_local
974      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 464  else Line 977  else
977      echo "none found"      echo "none found"
978  fi  fi
979    
980  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
981  #OPTIONS=  #OPTIONS=
982  #n=0  #n=0
983  #for i ; do  #for i ; do
# Line 476  fi Line 989  fi
989  #done  #done
990  #parse_options  #parse_options
991  ac_prev=  ac_prev=
992  for ac_option ; do  for ac_option in "$@" ; do
993    
994        G2ARGS="$G2ARGS \"$ac_option\""
995    
996      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
997      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 499  for ac_option ; do Line 1014  for ac_option ; do
1014          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
1015              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
1016                    
1017          -adoptfile | --adoptfile | -ad | --ad)          -adoptfile | --adoptfile | -adof | --adof)
1018              ac_prev=AD_OPTFILE ;;              ac_prev=AD_OPTFILE ;;
1019          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
1020              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
# Line 519  for ac_option ; do Line 1034  for ac_option ; do
1034          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1035              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1036                    
1037            -bash | --bash)
1038                ac_prev=BASH ;;
1039            -bash=* | --bash=*)
1040                BASH=$ac_optarg ;;
1041            
1042            -makedepend | --makedepend | -md | --md)
1043                ac_prev=MAKEDEPEND ;;
1044            -makedepend=* | --makedepend=* | -md=* | --md=*)
1045                MAKEDEPEND=$ac_optarg ;;
1046            
1047          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1048              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1049          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
1050              MAKEFILE=$ac_optarg ;;              MAKEFILE=$ac_optarg ;;
1051                    
1052          -platform | --platform | -pl | --pl)          -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
1053              ac_prev=PLATFORM ;;              echo "ERROR: The platform option has been removed.  Please specify"
1054          -platform=* | --platform=* | -pl=* | --pl=*)              echo "  the build options using the \"optfile\" mechanism."
1055              PLATFORM=$ac_optarg ;;              echo
1056                usage
1057                ;;
1058                    
1059          -rootdir | --rootdir | -rd | --rd)          -rootdir | --rootdir | -rd | --rd)
1060              ac_prev=ROOTDIR ;;              ac_prev=ROOTDIR ;;
# Line 554  for ac_option ; do Line 1081  for ac_option ; do
1081          -standarddirs=* | --standarddirs=*)          -standarddirs=* | --standarddirs=*)
1082              STANDARDDIRS=$ac_optarg ;;              STANDARDDIRS=$ac_optarg ;;
1083    
         -noopt | --noopt)  
             ac_prev=NOOPT ;;  
         -noopt=* | --noopt=*)  
             NOOPT=$ac_optarg ;;  
           
1084  #           -cpp | --cpp)  #           -cpp | --cpp)
1085  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1086  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1087  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1088                        
1089            -cc | --cc)
1090                ac_prev=CC ;;
1091            -cc=* | --cc=*)
1092                CC=$ac_optarg ;;
1093            
1094          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1095              ac_prev=FC ;;              ac_prev=FC ;;
1096          -fc=* | --fc=*)          -fc=* | --fc=*)
1097              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1098                    
1099            -fs | --fs)
1100                ac_prev=FS ;;
1101            -fs=* | --fs=*)
1102                FS=$ac_optarg ;;
1103            
1104            -fs90 | --fs90)
1105                ac_prev=FS90 ;;
1106            -fs90=* | --fs90=*)
1107                FS90=$ac_optarg ;;
1108            
1109          -ieee | --ieee)          -ieee | --ieee)
1110              IEEE=true ;;              IEEE=true ;;
1111          -noieee | --noieee)          -noieee | --noieee)
1112              IEEE= ;;              IEEE= ;;
1113            
1114            -ts | --ts)
1115                TS=true ;;
1116    
1117          -mpi | --mpi)          -mpi | --mpi)
1118              MPI=true ;;              MPI=true ;;
1119          -nompi | --nompi)          -mpi=* | --mpi=*)
1120              MPI= ;;              MPIPATH=$ac_optarg
1121                MPI=true ;;
1122                    
1123          -jam | --jam)  #       -jam | --jam)
1124              JAM=1 ;;  #           JAM=1 ;;
1125          -nojam | --nojam)  #       -nojam | --nojam)
1126              JAM=0 ;;  #           JAM=0 ;;
1127                    
1128          -ds | --ds)          -ds | --ds)
1129              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 596  for ac_option ; do Line 1137  for ac_option ; do
1137              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1138          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1139              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1140            
1141            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1142                IGNORE_TIME="-DIGNORE_TIME" ;;
1143    
1144          -*)          -*)
1145              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 611  for ac_option ; do Line 1155  for ac_option ; do
1155            
1156  done  done
1157    
1158    
1159  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1160      echo      echo
1161      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
# Line 623  if test -f ./.genmakerc ; then Line 1168  if test -f ./.genmakerc ; then
1168      echo      echo
1169  fi  fi
1170    
1171    #  Find the MITgcm ${ROOTDIR}
1172  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1173      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1174        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1175          ROOTDIR=".."          ROOTDIR=".."
1176      else      else
1177          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1178              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
1179                  ROOTDIR=$d                  ROOTDIR=$d
1180                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1181                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1182                  break                  break
1183              fi              fi
# Line 648  if test ! -d ${ROOTDIR} ; then Line 1195  if test ! -d ${ROOTDIR} ; then
1195      exit 1      exit 1
1196  fi  fi
1197    
1198    #  Find the MITgcm ${THISVER}
1199    if test -f "${ROOTDIR}/doc/tag-index" ; then
1200        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1201    fi
1202    
1203    if test "x$MAKEFILE" = x ; then
1204        MAKEFILE="Makefile"
1205    fi
1206    
1207  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1208  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1209      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 664  if test "x$OPTFILE" != xNONE ; then Line 1220  if test "x$OPTFILE" != xNONE ; then
1220          . "$OPTFILE"          . "$OPTFILE"
1221          RETVAL=$?          RETVAL=$?
1222          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1223              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1224              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1225              exit 1              exit 1
1226          fi          fi
# Line 691  if test "x${AD_OPTFILE}" != xNONE ; then Line 1247  if test "x${AD_OPTFILE}" != xNONE ; then
1247          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1248          RETVAL=$?          RETVAL=$?
1249          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1250              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1251              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1252              exit 1              exit 1
1253          fi          fi
# Line 704  if test "x${AD_OPTFILE}" != xNONE ; then Line 1260  if test "x${AD_OPTFILE}" != xNONE ; then
1260      fi      fi
1261  fi  fi
1262    
1263  #  Check that FC, LINK, CPP, S64, and LN are defined.  If not,  #====================================================================
1264  #  complain and abort!  #  Set default values if not set by the optfile
1265    #
1266    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1267    #  either set defaults or complain and abort!
1268    if test ! "x$BASH" = x ; then
1269        # add a trailing space so that it works within the Makefile syntax (see below)
1270        BASH="$BASH "
1271    fi
1272  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1273      cat <<EOF 1>&2      cat <<EOF 1>&2
1274    
# Line 716  Error: no Fortran compiler: please speci Line 1279  Error: no Fortran compiler: please speci
1279  EOF  EOF
1280      exit 1      exit 1
1281  fi  fi
1282    if test "x$CC" = x ; then
1283        CC=cc
1284    #     cat <<EOF 1>&2
1285    # Error: no C compiler: please specify using one of the following:
1286    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1287    #   2) the "-cc=XXX" command-line option
1288    #   3) the "./genmake_local" file
1289    # EOF
1290    #     exit 1
1291    fi
1292  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1293      LINK=$FC      LINK=$FC
1294  fi  fi
1295    if test "x$MAKE" = x ; then
1296        MAKE="make"
1297    fi
1298  if test "x$CPP" = x ; then  if test "x$CPP" = x ; then
1299      CPP="cpp"      CPP=cpp
1300  fi  fi
1301    #EH3 === UGLY ===
1302    #  The following is an ugly little hack to check for $CPP in /lib/ and
1303    #  it should eventually be replaced with a more general function that
1304    #  searches a combo of the user's path and a list of "usual suspects"
1305    #  to find the correct location for binaries such as $CPP.
1306    for i in " " "/lib/" ; do
1307        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1308    done
1309    #EH3 === UGLY ===
1310  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1311  RETVAL=$?  RETVAL=$?
1312  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 738  EOF Line 1323  EOF
1323  else  else
1324      rm -f test_cpp      rm -f test_cpp
1325  fi  fi
1326  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1327  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1328      LN="ln -s"      LN="ln -s"
1329  fi  fi
# Line 756  Error: The command "ln -s" failed -- ple Line 1339  Error: The command "ln -s" failed -- ple
1339  EOF  EOF
1340      exit 1      exit 1
1341  fi  fi
1342    test -L genmake_tlink > /dev/null 2>&1
1343    RETVAL=$?
1344    if test "x$RETVAL" = x0 ; then
1345        HAVE_TEST_L=t
1346    fi
1347  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1348    
1349    #  Check for broken *.F/*.f handling and fix if possible
1350    check_for_broken_Ff
1351    
1352    if test ! "x$MPI" = x ; then
1353          echo "  Turning on MPI cpp macros"
1354          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1355    fi
1356    
1357    if test ! "x$TS" = x ; then
1358          echo "  Turning on timing per timestep"
1359          DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1360    fi
1361    
1362  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1363  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1364  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1365        program hello        program hello
1366        call system('echo hi')        call system('echo hi')
1367        end        end
1368  EOF  EOF
1369  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1370  RETVAL=$?  RETVAL=$?
1371  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1372      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 777  else Line 1378  else
1378  fi  fi
1379  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1380    
1381  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1382  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1383        program hello        program hello
1384        CHARACTER(128) string        CHARACTER*(128) string
1385        string = ' '        string = ' '
1386        call fdate( string )        call fdate( string )
1387        print *, string        print *, string
1388        end        end
1389  EOF  EOF
1390  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1391  RETVAL=$?  RETVAL=$?
1392  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1393      HAVE_FDATE=t      HAVE_FDATE=t
# Line 798  else Line 1399  else
1399  fi  fi
1400  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1401    
1402  echo "  The name mangling convention for $FC is...  "  printf "  Do we have the etime() command using $FC...  "
1403  #FC_NAMEMANGLE="#define FC_NAMEMANGLE(X) X ## _"  cat > genmake_tcomp.$FS <<EOF
1404  if test "x$FC_NAMEMANGLE" = x ; then        program hello
1405      get_fortran_c_namemangling        REAL*4 ACTUAL, TARRAY(2)
1406  fi        EXTERNAL ETIME
1407  echo "    '$FC_NAMEMANGLE'"        REAL*4 ETIME
1408  echo "$FC_NAMEMANGLE" > FC_NAMEMANGLE.h.template        actual = etime( tarray )
1409  cmp FC_NAMEMANGLE.h FC_NAMEMANGLE.h.template > /dev/null 2>&1        print *, tarray
1410          end
1411    EOF
1412    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1413  RETVAL=$?  RETVAL=$?
1414  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" = x0 ; then
1415      mv -f FC_NAMEMANGLE.h.template FC_NAMEMANGLE.h      HAVE_ETIME=t
1416        DEFINES="$DEFINES -DHAVE_ETIME"
1417        echo "yes"
1418    else
1419        HAVE_ETIME=
1420        echo "no"
1421    fi
1422    rm -f genmake_tcomp*
1423    
1424    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1425    check_HAVE_CLOC
1426    if test "x$HAVE_CLOC" != x ; then
1427        echo "yes"
1428    else
1429        echo "no"
1430    fi
1431    rm -f genmake_t*
1432    
1433    printf "  Can we unlimit the stack size using $FC...  "
1434    check_HAVE_SETRLSTK
1435    if test "x$HAVE_SETRLSTK" != x ; then
1436        echo "yes"
1437    else
1438        echo "no"
1439    fi
1440    rm -f genmake_t*
1441    
1442    printf "  Can we use stat() through C calls...  "
1443    check_HAVE_STAT
1444    if test "x$HAVE_STAT" != x ; then
1445        echo "yes"
1446    else
1447        echo "no"
1448  fi  fi
1449    rm -f genmake_t*
1450    
1451    printf "  Can we create NetCDF-enabled binaries...  "
1452    check_netcdf_libs
1453    if test "x$HAVE_NETCDF" != x ; then
1454        echo "yes"
1455    else
1456        echo "no"
1457    fi
1458    DEFINES="$DEFINES $IGNORE_TIME"
1459    
1460  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1461  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1462  for d in $MODS ; do  for d in $MODS ; do
1463      if test ! -d $d ; then      if test ! -d $d ; then
1464          echo          echo
1465          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1466          exit 1          exit 1
1467      else      else
1468          echo -n " $d"          printf " $d"
1469          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1470          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1471      fi      fi
1472  done  done
1473  echo  echo
1474    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1475  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1476      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1477  fi  fi
1478    
1479  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1480      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1481        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1482          EXEDIR=../exe          EXEDIR=../exe
1483      else      else
1484          EXEDIR=.          EXEDIR=.
# Line 850  if test "x${TOOLSDIR}" = x ; then Line 1493  if test "x${TOOLSDIR}" = x ; then
1493      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1494  fi  fi
1495  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1496      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1497      exit 1      exit 1
1498  fi  fi
1499  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1500      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1501        RETVAL=$?
1502        if test "x${RETVAL}" = x0 ; then
1503            S64='$(TOOLSDIR)/set64bitConst.sh'
1504        else
1505            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1506            RETVAL=$?
1507            if test "x${RETVAL}" = x0 ; then
1508                S64='$(TOOLSDIR)/set64bitConst.csh'
1509            else
1510                cat <<EOF
1511    
1512    ERROR: neither of the two default scripts:
1513    
1514        ${TOOLSDIR}/set64bitConst.sh
1515        ${TOOLSDIR}/set64bitConst.csh
1516    
1517      are working so please check paths or specify (with \$S64) a
1518      working version of this script.
1519    
1520    EOF
1521                exit 1
1522            fi
1523        fi
1524  fi  fi
1525    THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1526    
1527  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1528    
# Line 864  EXECUTABLE=${EXECUTABLE:-mitgcmuv} Line 1531  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1531  #  they appear as regular source code  #  they appear as regular source code
1532  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1533      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1534      $MAKE -C $ROOTDIR"/eesupp/src/" > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1535      RETVAL=$?      RETVAL=$?
1536      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1537          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1538      else      else
1539          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1540          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1541          exit 1          exit 1
1542      fi      fi
1543  fi  fi
1544    
1545    #same for exch2
1546    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1547        echo "  Making source files in exch2 from  templates"
1548        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1549        RETVAL=$?
1550        if test "x${RETVAL}" = x0 ; then
1551            rm -f make_exch2.errors
1552        else
1553            echo "Error: problem encountered while building source files in exch2:"
1554            cat make_exch2.errors 1>&2
1555            exit 1
1556        fi
1557    fi
1558    
1559  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1560  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1561      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 907  rm -f ./.pd_tmp Line 1588  rm -f ./.pd_tmp
1588  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1589  #  file should eventually be added so that, for convenience, one can  #  file should eventually be added so that, for convenience, one can
1590  #  specify groups of packages using names like "ocean" and "atmosphere".  #  specify groups of packages using names like "ocean" and "atmosphere".
1591  echo  -n "  checking default package list:  "  echo "  checking default package list:  "
1592  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1593      for i in "." $MODS ; do      for i in "." $MODS ; do
1594          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
# Line 920  if test "x${PDEFAULT}" = x ; then Line 1601  if test "x${PDEFAULT}" = x ; then
1601      PDEFAULT="$ROOTDIR/pkg/pkg_default"      PDEFAULT="$ROOTDIR/pkg/pkg_default"
1602  fi  fi
1603  if test "x${PDEFAULT}" = xNONE ; then  if test "x${PDEFAULT}" = xNONE ; then
1604      echo "default packages file disabled"      echo "    default packages file disabled"
1605  else  else
1606      if test ! -r $PDEFAULT ; then      if test ! -r $PDEFAULT ; then
         echo ""  
1607          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""
1608      else      else
1609          echo "  using PDEFAULT=\"$PDEFAULT\""          echo "    using PDEFAULT=\"$PDEFAULT\""
1610          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1611          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1612          RETVAL=$?          RETVAL=$?
1613          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1614              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1615              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1616              exit 1              exit 1
1617          fi          fi
# Line 939  else Line 1619  else
1619              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1620          done          done
1621          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1622          expand_pkg_groups          RET=1
1623            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1624          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1625      fi      fi
1626  fi  fi
1627    
1628  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1629    for i in $PACKAGES ; do
1630        echo $i >> ./.tmp_pack
1631    done
1632    for i in `grep  "-" ./.tmp_pack` ; do
1633        j=`echo $i | sed 's/[-]//'`
1634        DISABLE="$DISABLE $j"
1635    done
1636  pack=  pack=
1637  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1638      addit="t"      addit="t"
# Line 961  PACKAGES="$pack" Line 1649  PACKAGES="$pack"
1649  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1650  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1651  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1652    # Test if each explicitly referenced package exists
1653  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1654      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1655        if test ! -d "$ROOTDIR/pkg/$j" ; then
1656          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1657          exit 1          exit 1
1658      fi      fi
1659      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1660  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1661  PACKAGES=  PACKAGES=
1662  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1663      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1664  done  done
1665    rm -f ./.tmp_pack
1666  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1667    
1668    #  Check availability of NetCDF and then either build the MNC template
1669    #  files or delete mnc from the list of available packages.
1670    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1671    RETVAL=$?
1672    if test "x$RETVAL" = x0 ; then
1673        if test "x$HAVE_NETCDF" != xt ; then
1674            cat <<EOF
1675    
1676    *********************************************************************
1677    WARNING: the "mnc" package was enabled but tests failed to compile
1678      NetCDF applications.  Please check that:
1679    
1680      1) NetCDF is correctly installed for this compiler and
1681      2) the LIBS variable (within the "optfile") specifies the correct
1682           NetCDF library to link against.
1683    
1684      Due to this failure, the "mnc" package is now DISABLED.
1685    *********************************************************************
1686    
1687    EOF
1688            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1689            DISABLE="$DISABLE mnc"
1690        else
1691            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1692            RETVAL=$?
1693            if test "x${RETVAL}" = x0 ; then
1694                rm -f make_mnc.errors
1695            else
1696                echo "Error: problem encountered while building source files in pkg/mnc:"
1697                cat make_mnc.errors 1>&2
1698                exit 1
1699            fi
1700        fi
1701    fi
1702    
1703  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1704  ck=  ck=
1705  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1040  while test "x$ck" != xtt ; do Line 1764  while test "x$ck" != xtt ; do
1764              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1765              exit 1              exit 1
1766          fi          fi
1767          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1768            #i=$(( $i + 1 ))
1769      done      done
1770      ck=$ck"t"      ck=$ck"t"
1771  done  done
# Line 1059  for i in $PACKAGES ; do Line 1784  for i in $PACKAGES ; do
1784      fi      fi
1785  done  done
1786    
   
1787  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
1788  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
 cat <<EOF >$PACKAGES_DOT_H".tmp"  
 C=== GENMAKE v2 ===  
 C  The following defines have been set by GENMAKE, so please do not  
 C  edit anything below these comments.  In general, you should  
 C  add or remove packages by re-running genmake with different  
 C  "-enable" and/or "-disable" options.  
   
 #ifndef PACKAGES_H  
 #define PACKAGES_H  
   
 C  Packages disabled by genmake:  
 EOF  
1789  #  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
1790  #  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
1791  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
1792  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
1793  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
1794  all_pack=  all_pack=
1795    DISABLED_PACKAGES=
1796  for n in $names ; do  for n in $names ; do
1797      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1798          has_pack="f"          has_pack="f"
# Line 1090  for n in $names ; do Line 1803  for n in $names ; do
1803              fi              fi
1804          done          done
1805          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1806              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1807              echo "#undef $undef" >> $PACKAGES_DOT_H".tmp"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1808          fi          fi
1809      fi      fi
1810  done  done
1811  cat <<EOF >>$PACKAGES_DOT_H".tmp"  ENABLED_PACKAGES=
   
 C  Packages enabled by genmake:  
 EOF  
1812  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1813      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1814      echo "#define $def" >> $PACKAGES_DOT_H".tmp"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1815  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1816    
1817  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1818      case $i in      case $i in
1819          aim_v23)          aim_v23)
1820              echo "#define   ALLOW_AIM" >> $PACKAGES_DOT_H".tmp"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1821              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 :-)"  
1822              ;;              ;;
1823      esac      esac
1824  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1825    
1826  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  
1827    
1828  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1829  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1830  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1831      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
1832  fi  fi
1833  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
1834      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
1835      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
1836          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1837          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1838          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1839      else              exit 1
1840          SOURCEDIRS="$SOURCEDIRS $adr"          else
1841      fi              SOURCEDIRS="$SOURCEDIRS $adr"
1842      adr="$ROOTDIR/$d/inc"          fi
1843      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
1844          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1845          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1846          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1847      else              exit 1
1848          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
1849      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
1850  done          fi
1851        done
1852    fi
1853    
1854  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"
1855  echo "    of \"#define ALLOW_PKGNAME\"-type statements:"  echo "    of \"#define \"-type statements that are no longer allowed:"
1856  CPP_OPTIONS=  CPP_OPTIONS=
1857    CPP_EEOPTIONS=
1858  spaths=". $INCLUDEDIRS"  spaths=". $INCLUDEDIRS"
1859    names=`ls -1 "$ROOTDIR/pkg"`
1860  for i in $spaths ; do  for i in $spaths ; do
1861      try="$i/CPP_OPTIONS.h"      try="$i/CPP_OPTIONS.h"
1862      #  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  
1863          echo "    found CPP_OPTIONS=\"$try\""          echo "    found CPP_OPTIONS=\"$try\""
1864          CPP_OPTIONS="$try"          CPP_OPTIONS="$try"
1865          break          # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1866            for n in $names ; do
1867                test_for_package_in_cpp_options $CPP_OPTIONS $n
1868            done
1869        fi
1870        try="$i/CPP_EEOPTIONS.h"
1871        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1872            echo "    found CPP_EEOPTIONS=\"$try\""
1873            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1874    #**** not yet enabled ****
1875    #        test_for_mpi_in_cpp_eeoptions $try
1876    #**** not yet enabled ****
1877            CPP_EEOPTIONS="$try"
1878      fi      fi
1879  done  done
1880  if test "x$CPP_OPTIONS" = x ; then  if test "x$CPP_OPTIONS" = x ; then
1881      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"
1882      exit 1      exit 1
1883  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  
   
1884    
1885  #  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
1886  #  compiler.  #  compiler.
# Line 1193  for i in $SOURCEDIRS ; do Line 1894  for i in $SOURCEDIRS ; do
1894          cat $i/$j >> ad_files          cat $i/$j >> ad_files
1895      done      done
1896  done  done
1897    if test ! "x"$FS = "x.f" ; then
1898  cat <<EOF > adjoint_sed      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
1899  s/call adopen(/call adopen ( mythid,\\      mv -f ad_files_f ad_files
1900       \&           /g  fi
 s/call adclose(/call adclose( mythid,\\  
      \&           /g  
 s/call adread(/call adread ( mythid,\\  
      \&           /g  
 s/call adwrite(/call adwrite( mythid,\\  
      \&           /g  
   
 EOF  
1901    
1902  echo  echo
1903  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1904  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1905  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1906      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1907          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1908      fi      fi
1909  done  done
# Line 1222  rm -rf .links.tmp Line 1913  rm -rf .links.tmp
1913  mkdir .links.tmp  mkdir .links.tmp
1914  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1915  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1916  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1917  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1918  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1919  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1920  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1921  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1922  for d in $alldirs ; do  for d in $alldirs ; do
1923      deplist=      deplist=
# Line 1235  for d in $alldirs ; do Line 1926  for d in $alldirs ; do
1926      for sf in $sfiles ; do      for sf in $sfiles ; do
1927          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1928              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1929                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  ignore_f=f
1930                  touch .links.tmp/$sf                  case $d/$sf in
1931                  deplist="$deplist $sf"                    ./$PACKAGES_DOT_H)
                 case $extn in  
                     F)  
                         echo    " \\"  >> srclist.inc  
                         echo -n " $sf" >> srclist.inc  
1932                          ;;                          ;;
1933                      F90)                    ./AD_CONFIG.h)
                         echo    " \\"  >> f90srclist.inc  
                         echo -n " $sf" >> f90srclist.inc  
1934                          ;;                          ;;
1935                      c)                    ./FC_NAMEMANGLE.h)
                         echo    " \\"  >> csrclist.inc  
                         echo -n " $sf" >> csrclist.inc  
1936                          ;;                          ;;
1937                      h)                    ./BUILD_INFO.h)
                         echo    " \\"  >> hlist.inc  
                         echo -n " $sf" >> hlist.inc  
1938                          ;;                          ;;
1939                      flow)                    *)
1940                          echo    " \\"  >> ad_flow_files.inc                          #  For the local directory *ONLY*,
1941                          echo -n " $sf" >> ad_flow_files.inc                          #  ignore all soft-links
1942                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
1943                                ignore_f=t
1944                            else
1945                                touch .links.tmp/$sf
1946                                deplist="$deplist $sf"
1947                            fi
1948                          ;;                          ;;
1949                  esac                  esac
1950                    if test "x$ignore_f" = xf ; then
1951                        extn=`echo $sf | $AWK -F. '{print $NF}'`
1952                        case $extn in
1953                            F)
1954                                echo    " \\"  >> srclist.inc
1955                                printf " $sf" >> srclist.inc
1956                                ;;
1957                            F90)
1958                                echo    " \\"  >> f90srclist.inc
1959                                printf " $sf" >> f90srclist.inc
1960                                ;;
1961                            c)
1962                                echo    " \\"  >> csrclist.inc
1963                                printf " $sf" >> csrclist.inc
1964                                ;;
1965                            h)
1966                                echo    " \\"  >> hlist.inc
1967                                printf " $sf" >> hlist.inc
1968                                ;;
1969                            flow)
1970                                echo    " \\"  >> ad_flow_files.inc
1971                                printf " $sf" >> ad_flow_files.inc
1972                                ;;
1973                        esac
1974                    fi
1975              fi              fi
1976          fi          fi
1977      done      done
# Line 1277  echo "" >> f90srclist.inc Line 1989  echo "" >> f90srclist.inc
1989  echo "" >> hlist.inc  echo "" >> hlist.inc
1990  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1991    
1992  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1993      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1994  fi  fi
1995  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1286  echo "#    $MACHINE" >> $MAKEFILE Line 1998  echo "#    $MACHINE" >> $MAKEFILE
1998  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
1999  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2000  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2001  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2002  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2003  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2004    
2005  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2006  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
2007  EXE_SVD=$EXECUTABLE"_svd"  EXE_SVD=$EXECUTABLE"_svd"
2008    
2009  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2010    #
2011    # OPTFILE="$OPTFILE"
2012  #  #
2013  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2014  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 1328  EXE_AD      = ${EXE_AD} Line 2042  EXE_AD      = ${EXE_AD}
2042  EXE_FTL     = ${EXE_FTL}  EXE_FTL     = ${EXE_FTL}
2043  EXE_SVD     = ${EXE_SVD}  EXE_SVD     = ${EXE_SVD}
2044    
2045    ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2046    DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2047    
2048    # These files are created by Makefile
2049    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
2050    
2051  EOF  EOF
2052    
2053  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 1345  KPP = ${KPP} Line 2065  KPP = ${KPP}
2065  FC = ${FC}  FC = ${FC}
2066  # Fortran compiler  # Fortran compiler
2067  F90C = ${F90C}  F90C = ${F90C}
2068    # C compiler
2069    CC = ${CC}
2070  # Link editor  # Link editor
2071  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2072    
2073  # Defines for CPP  # Defines for CPP
2074  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1367  CFLAGS = ${CFLAGS} Line 2089  CFLAGS = ${CFLAGS}
2089  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2090  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2091  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2092  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2093  # Name of the Mekfile  # Name of the Mekfile
2094  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2095    
# Line 1378  cat csrclist.inc      >> $MAKEFILE Line 2100  cat csrclist.inc      >> $MAKEFILE
2100  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
2101  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
2102  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2103  echo               >> $MAKEFILE  echo >> $MAKEFILE
2104  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2105  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2106  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2107    echo >> $MAKEFILE
2108    echo '.SUFFIXES:' >> $MAKEFILE
2109    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
2110  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
2111  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
2112    
2113  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2114    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
2115  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2116  \$(EXECUTABLE): \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
2117            @echo Creating \$@ ...
2118          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2119  depend:  depend:
2120          @make links          @make links
2121          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
2122          ${TOOLSDIR}/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2123            -rm -f makedepend.out
2124    
2125  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2126    
2127  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
2128    
# Line 1408  output.txt: \$(EXECUTABLE) Line 2131  output.txt: \$(EXECUTABLE)
2131          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2132    
2133  clean:  clean:
2134          -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}  
2135  Clean:  Clean:
2136          @make clean          @make clean
2137          @make cleanlinks          @make cleanlinks
2138          -rm -f Makefile.bak genmake_state genmake_*optfile make.log          -rm -f \$(SPECIAL_FILES)
2139            -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
2140  CLEAN:  CLEAN:
2141          @make Clean          @make Clean
2142          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2143          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2144          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2145          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
2146    
2147  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2148  makefile:  makefile:
2149          ${0} $@          $THIS_SCRIPT $G2ARGS
2150  cleanlinks:  cleanlinks:
2151          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2152    
2153  # The normal chain of rules is (  .F - .f - .o  )  # Special targets (SPECIAL_FILES) which are create by make
2154  .F.f:  ${PACKAGES_DOT_H}:
2155            @echo Creating \$@ ...
2156            @$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) > \$@
2157    AD_CONFIG.h:
2158            @echo Creating \$@ ...
2159            @$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 > \$@
2160    FC_NAMEMANGLE.h:
2161            @echo Creating \$@ ...
2162            echo "$FC_NAMEMANGLE" > \$@
2163    
2164    BUILD_INFO.h:
2165            @echo Creating \$@ ...
2166    EOF
2167    
2168    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2169    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2170    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2171    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2172    
2173    cat >>$MAKEFILE <<EOF
2174    
2175    # The normal chain of rules is (  .F - .$FS - .o  )
2176    
2177    ## This nullifies any default implicit rules concerning these two file types:
2178    ## %.o : %.F
2179    
2180    .F.$FS:
2181          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2182  .f.o:  .$FS.o:
2183          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2184  .F90.f90:  .F90.$FS90:
2185          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2186  .f90.o:  .$FS90.o:
2187          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2188  .c.o:  .c.o:
2189          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
2190    
2191  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2192  .F.p:  .F.p:
2193          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2194  .p.f:  .p.$FS:
2195          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2196    
2197  #=========================================  #=========================================
# Line 1469  done Line 2218  done
2218    
2219  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2220  echo >> $MAKEFILE  echo >> $MAKEFILE
2221  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2222  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
2223  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2224      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2225      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2226  done  done
2227  echo >> $MAKEFILE  echo >> $MAKEFILE
2228  rm -f ad_files  rm -f ad_files
# Line 1482  cat >>$MAKEFILE <<EOF Line 2231  cat >>$MAKEFILE <<EOF
2231    
2232  # ... AD ...  # ... AD ...
2233  adall: ad_taf  adall: ad_taf
2234  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2235  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2236    
2237  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2238            @$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
2239          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
2240            -rm -f ad_config.template
2241          @make \$(F77FILES)          @make \$(F77FILES)
2242          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2243          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2244    
2245  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2246          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2247          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2248    
2249    adtafonly:
2250            \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2251            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2252    
2253  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2254          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2255    
2256  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2257          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2258          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2259    
2260  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2261          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2262    
2263    adonlyfwd:
2264            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2265    
2266    adtrick:
2267            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2268    
2269  # ... FTL ...  # ... FTL ...
2270  ftlall: ftl_taf  ftlall: ftl_taf
2271  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2272  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2273    
2274  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2275            @$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
2276          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
2277            -rm -f ftl_config.template
2278          @make \$(F77FILES)          @make \$(F77FILES)
2279          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2280          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2281    
2282  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2283          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2284          cat ftl_input_code_ftl.f | sed -f adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2285    
2286    ftltafonly:
2287            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2288            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2289    
2290  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2291          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2292    
2293  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2294          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2295          cat ftl_input_code_ftl.f | sed -f adjoint_sed > ftl_tamc_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2296    
2297  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2298          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2299    
2300    
2301  # ... SVD ...  # ... SVD ...
2302  svd: svd_taf  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2303  svd_taf_f: svd_taf_output.f          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2304            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2305  svd_input_code.f: \$(SRCFILES)  svdall: svd_touch svd_taf
2306          cmp svd_config.template AD_CONFIG.h || cat svd_config.template > AD_CONFIG.h  
2307          @make \$(F77FILES)  svd_taf: \$(OBJFILES)
2308          @make \$(AD_FLOW_FILES)          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2309          cat \$(AD_FLOW_FILES) \$(AD_FILES) > svd_input_code.f  
2310            @echo "--->>> Only COMPILE svd code! <<<---"
2311  svd_taf_output.f: svd_input_code.f          @echo "--->>> Assumes you previously <<<---"
2312          \$(TAF) \$(SVD_TAF_FLAGS) \$(TAF_EXTRA) svd_input_code.f          @echo "--->>> did make svdtaf        <<<---"
2313          cat svd_input_code_ad.f | sed -f adjoint_sed > svd_taf_output.f  
2314    svd_touch:
2315  svd_taf: svd_taf_output.o \$(OBJFILES)          @echo "--->>> Only COMPILE svd code! <<<---"
2316          \$(LINK) -o ${EXE_SVD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) svd_taf_output.o \$(LIBS)          @echo "--->>> Assumes you previously <<<---"
2317            @echo "--->>> did make svdtaf        <<<---"
2318            touch ad_taf_output.$FS ftl_taf_output.$FS
2319            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2320            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2321            @$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
2322            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2323            -rm -f ftl_config.template
2324    
2325  #=========================================  #=========================================
2326    
# Line 1565  for i in $KPPFILES ; do Line 2337  for i in $KPPFILES ; do
2337      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2338          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2339      fi      fi
2340      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2341  done  done
2342    
2343  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1575  for i in $NOOPTFILES ; do Line 2347  for i in $NOOPTFILES ; do
2347      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2348          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2349      fi      fi
2350      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2351      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2352  done  done
2353    
# Line 1588  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2360  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2360    
2361  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2362    
2363  #  Write the "template" files for the adjoint builds  # Create special header files
2364  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"
2365  C  WARNING: This file is automatically generated by genmake2 and  if test ! -f $PACKAGES_DOT_H ; then
2366  C    used by the Makefile rules.  Please DO NOT EDIT this file      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2367  C    unless you are CERTAIN that you know what you are doing.  else
2368        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2369  #undef ALLOW_ADJOINT_RUN      RETVAL=$?
2370  #undef ALLOW_TANGENTLINEAR_RUN      if test "x$RETVAL" = x0 ; then
2371  #undef ALLOW_ECCO_OPTIMIZATION          rm -f $PACKAGES_DOT_H".tmp"
2372  EOF      else
2373  cat >ad_config.template <<EOF          mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2374  C  WARNING: This file is automatically generated by genmake2 and          mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2375  C    used by the Makefile rules.  Please DO NOT EDIT this file      fi
2376  C    unless you are CERTAIN that you know what you are doing.  fi
2377    if test ! -f AD_CONFIG.h ; then
2378  #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
2379  #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  
2380    
2381    
2382  #  Write the "state" for future records  #  Write the "state" for future records
2383  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2384      echo -n "" > genmake_state      printf "" > genmake_state
2385      for i in $gm_state ; do      for i in $gm_state ; do
2386          t1="t2=\$$i"          t1="t2=\$$i"
2387          eval $t1          eval $t1

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.131

  ViewVC Help
Powered by ViewVC 1.1.22