/[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.8 by edhill, Tue Sep 23 15:53:02 2003 UTC revision 1.133 by edhill, Sat Oct 15 00:35:36 2005 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4  #  #
# Line 8  Line 8 
8  #   modified by aja 01/00  #   modified by aja 01/00
9  #   rewritten in bash by eh3 08/03  #   rewritten in bash by eh3 08/03
10    
11    # Search for particular CPP #cmds associated with packages
12    # usage: test_for_package_in_cpp_options CPP_file package_name
13    test_for_package_in_cpp_options() {
14        cpp_options=$1
15        pkg=$2
16        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18        test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19        test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20    }
21    
22    # Search for particular CPP #cmds associated with MPI
23    # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24    test_for_mpi_in_cpp_eeoptions() {
25        cpp_options=$1
26        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28        test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99
29        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99
30    }
31    
32    # Search for particular string in a file. Return 1 if detected, 0 if not
33    # usage: test_for_string_in_file file string
34    test_for_string_in_file() {
35        file=$1
36        strng=$2
37        grep -i "$strng" $file > /dev/null 2>&1
38        RETVAL=$?
39        if test "x${RETVAL}" = x0 ; then
40            printf "Error: In $file there is an illegal line: "
41            grep -i "$strng" $file
42            return 1
43        fi
44        return 0
45    }
46    
47    # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
48    # the package list.
49    expand_pkg_groups() {
50        new_packages=
51        PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups"
52        if test -r $PKG_GROUPS ; then
53            cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp
54            cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp
55            matched=0
56            for i in $PACKAGES ; do
57                line=`grep "^ *$i" ./p2.tmp`
58                RETVAL=$?
59                if test "x$RETVAL" = x0 ; then
60                    matched=1
61                    replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
62                    echo "    replacing \"$i\" with: $replace"
63                    new_packages="$new_packages $replace"
64                else
65                    new_packages="$new_packages $i"
66                fi
67            done
68            PACKAGES=$new_packages
69            rm -f ./p[1,2].tmp
70            return $matched
71        else
72            echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73        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      p_PLATFORM=`uname`"-"`uname -m`      tmp1=`uname`"_"`uname -m`
255      echo "The platform appears to be:"      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
256      echo "  "$p_PLATFORM      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
257        tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
258      p_LN=      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")`
263        echo "  The platform appears to be:  $PLATFORM"
264        
265      echo "test" > test      echo "test" > test
266      ln -s ./test link      ln -s ./test link
267      RETVAL=$?      RETVAL=$?
268      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
269          p_LN="ln -s"          LN="ln -s"
270        else
271            echo "Error: \"ln -s\" does not appear to work on this system!"
272            echo "  For help, please contact <MITgcm-support@mitgcm.org>."
273            exit 1
274      fi      fi
275      rm -f test link      rm -f test link
276    
277      p_CPP=`which cpp`      if test "x$CPP" = x ; then
278                CPP="cpp -traditional -P"
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         p_LN="ln -s"  
279      fi      fi
     rm -f test link  
280    
281      # look for possible fortran compilers      look_for_makedepend
282      p_FC=  
283      for c in f77 g77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 ; do      #================================================================
284          which $c > /dev/null 2>&1      #  look for possible C compilers
285        tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
286        p_CC=
287        for c in $tmp ; do
288            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=$?          RETVAL=$?
298          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
299              p_FC="$p_FC $c"              p_CC="$p_CC $c"
300          fi          fi
301      done      done
302      echo "Possible FORTRAN compilers appear to be:  "      rm -f ./genmake_hello.c ./genmake_hello
303      if test "x${p_FC}" = x ; then      if test "x${p_CC}" = x ; then
304          echo "  None found!!!"          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      else
314          echo "  "$p_FC          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 MPI libraries      #================================================================
323      mpi_libs=      #  look for possible FORTRAN compilers
324      mpi_fort=`which mpif77 2>/dev/null`      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"
325      RETVAL=$?      p_FC=
326      if test "x${RETVAL}" = x0 ; then      for c in $tmp ; do
327          cat >>test.f <<EOF          rm -f ./hello.f ./hello
328        PROGRAM HELLO          cat >> hello.f <<EOF
329        DO 10, I=1,10        program hello
330        PRINT *,'Hello World'        do i=1,3
331     10 CONTINUE          print *, 'hello world : ', i
332        STOP        enddo
333        END        end
334  EOF  EOF
335          eval "$mpi_fort -showme test.f > out"          $c -o hello hello.f > /dev/null 2>&1
336          RETVAL=$?          RETVAL=$?
337          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
338              a=`cat out`              p_FC="$p_FC $c"
339              for i in $a ; do          fi
340                  case $i in      done
341                      -*)      rm -f ./hello.f ./hello
342                          mpi_libs="$mpi_libs $i" ;;      if test "x${p_FC}" = x ; then
343                  esac          cat 1>&2 <<EOF
344              done  
345              echo "The MPI libs appear to be:"  Error: No Fortran compilers were found in your path.  Please specify one using:
346              echo "  "$mpi_libs  
347        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
348        2) a command-line option (eg. "-fc NAME"), or
349        3) the FC or MITGCM_FC environment variables.
350    
351    EOF
352            exit 1
353        else
354            echo "  The possible FORTRAN compilers found in your path are:"
355            echo "   "$p_FC
356            if test "x$FC" = x ; then
357                FC=`echo $p_FC | $AWK '{print $1}'`
358                echo "  Setting FORTRAN compiler to: "$FC
359          fi          fi
         rm -f test.f out  
360      fi      fi
361    
362        if test "x$OPTFILE" = x ; then
363            OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
364            if test ! -r $OPTFILE ; then
365                 echo "  I looked for the file "$OPTFILE" but did not find it"
366            fi
367        fi
368    #    echo "  The options file:  $p_OF"
369    #    echo "    appears to match so we'll use it."
370    #   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
380            cat 1>&2 <<EOF
381    
382    Error: No options file was found in:  $ROOTDIR/tools/build_options/
383      that matches this platform ("$PLATFORM") and the compilers found in
384      your path.  Please specify an "optfile" using:
385    
386        1) the command line (eg. "-optfile=path/to/OPTFILE"), or
387        2) the MITGCM_OF environment variable.
388    
389      If you need help, please contact the developers at <MITgcm-support@mitgcm.org>.
390    
391    EOF
392            exit 1
393        fi
394        
395    #     # look for possible MPI libraries
396    #     mpi_libs=
397    #     mpi_fort=`which mpif77 2>/dev/null`
398    #     RETVAL=$?
399    #     if test "x${RETVAL}" = x0 ; then
400    #       cat >>test.f <<EOF
401    #       PROGRAM HELLO
402    #       DO 10, I=1,10
403    #       PRINT *,'Hello World'
404    #    10 CONTINUE
405    #       STOP
406    #       END
407    # EOF
408    #       eval "$mpi_fort -showme test.f > out"
409    #       RETVAL=$?
410    #       if test "x${RETVAL}" = x0 ; then
411    #           a=`cat out`
412    #           for i in $a ; do
413    #               case $i in
414    #                   -*)
415    #                       mpi_libs="$mpi_libs $i" ;;
416    #               esac
417    #           done
418    #           echo "The MPI libs appear to be:"
419    #           echo "  "$mpi_libs
420    #       fi
421    #       rm -f test.f out
422    #     fi
423    
424  }  }
425    
426  #  Parse the package dependency information  #  Parse the package dependency information
# Line 86  get_pdepend_list()  { Line 429  get_pdepend_list()  {
429      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
430      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
431      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
432          | awk 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
433          > ./.pd_tmp          > ./.pd_tmp
434      source ./.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 "    -noopt NAME | --noopt NAME"            Get the default package list from "NAME".
470      echo "      -noopt=NAME | --noopt=NAME"  
471  #    echo "    -cpp NAME | --cpp NAME"      -make NAME | -m NAME
472  #    echo "      -cpp=NAME | --cpp=NAME"        --make=NAME | -m=NAME
473      echo "    -fortran NAME | --fortran NAME | -fc NAME | --fc NAME"            Use "NAME" for the MAKE program. The default is "make" but
474      echo "      -fc=NAME | --fc=NAME"            many platforms, "gmake" is the preferred choice.
475      echo "    -[no]ieee | --[no]ieee"  
476      echo "    -[no]mpi | --[no]mpi"      -makefile NAME | -mf NAME
477      echo "    -[no]jam | --[no]jam"        --makefile=NAME | -mf=NAME
478      echo            Call the makefile "NAME".  The default is "Makefile".
479      echo "  and NAME is a string such as:"  
480      echo      -makedepend NAME | -md NAME
481      echo "    --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'"        --makedepend=NAME | -md=NAME
482      echo "    -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'"            Use "NAME" for the MAKEDEPEND program.
483      echo "    -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'"  
484      echo      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
485      echo "  which, depending upon your shell, may need to be single-quoted"        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
486      echo "  if it contains spaces, dashes, or other special characters."            Specify the location of the MITgcm ROOTDIR as "NAME".
487              By default, genamke will try to find the location by
488              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  #eh3 # This is the generic configuration.  #  Build a CPP macro to automate calling C routines from FORTRAN
562  #eh3 set LN         = ( 'ln -s' )  get_fortran_c_namemangling()  {
563  #eh3 set CPP        = ( '/lib/cpp -P' )  
564  #eh3 set S64        = ( '$(TOOLSDIR)/set64bitConst.sh' )      #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
565  #eh3 set KPP        = (  )      if test ! "x$FC_NAMEMANGLE" = x ; then
566  #eh3 set FC         = ( 'f77' )          return 0
567  #eh3 set LINK       = $FC      fi
568  #eh3 set MAKEDEPEND = ( 'makedepend' )  
569  #eh3 set INCLUDES   = ( -I. )      default_nm="#define FC_NAMEMANGLE(X) X ## _"
570  #eh3 set FFLAGS     = (  )      
571  #eh3 set FOPTIM     = (  )      cat > genmake_test.c <<EOF
572  #eh3 set CFLAGS     = (  )  void tcall( char * string ) { tsub( string ); }
573  #eh3 set KFLAGS1    = (  )  EOF
574  #eh3 set KFLAGS2    = (  )      $MAKE genmake_test.o >> genmake_warnings 2>&1
575  #eh3 set LIBS       = (  )      RETVAL=$?
576  #eh3 set KPPFILES   = (  )      if test "x$RETVAL" != x0 ; then
577  #eh3 if (! $?NOOPTFILES ) set NOOPTFILES = (  )          FC_NAMEMANGLE=$default_nm
578  #eh3 if (! $?NOOPTFLAGS ) set NOOPTFLAGS = (  )          cat <<EOF>> genmake_errors
579    
580    WARNING: C test compile fails
581    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
585        fi
586        c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
587        RETVAL=$?
588        if test "x$RETVAL" != x0 ; then
589            FC_NAMEMANGLE=$default_nm
590            cat <<EOF>> genmake_warnings
591    
592    WARNING: The "nm" command failed.
593    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
597        fi
598        cat > genmake_tcomp.$FS <<EOF
599          subroutine tcall( string )
600          character*(*) string
601          call tsub( string )
602          end
603    EOF
604        $FC $FFLAGS $DEFINES -c genmake_tcomp.$FS >> genmake_warnings 2>&1
605        RETVAL=$?
606        if test "x$RETVAL" != x0 ; then
607            FC_NAMEMANGLE=$default_nm
608            cat <<EOF>> genmake_warnings
609    
610    WARNING: FORTRAN test compile fails -- please see "genmake_errors"
611    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
615        fi
616        f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
617        RETVAL=$?
618        if test "x$RETVAL" != x0 ; then
619            FC_NAMEMANGLE=$default_nm
620            cat <<EOF>> genmake_warnings
621    
622    WARNING: The "nm" command failed.
623    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
627        fi
628    
629        c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
630        f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
631        c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
632        f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
633    
634        nmangle="X"
635        if test "x$c_a" != "x$f_a" ; then
636            comm="echo x$f_a | sed -e 's|x$c_a||'"
637            a=`eval $comm`
638            nmangle="$a ## $nmangle"
639        fi
640        if test "x$c_b" != "x$f_b" ; then
641            comm="echo x$f_b | sed -e 's|x$c_b||'"
642            b=`eval $comm`
643            nmangle="$nmangle ## $b"
644        fi
645    
646        FC_NAMEMANGLE="#define FC_NAMEMANGLE(X)  $nmangle"
647    
648        #  cleanup the testing files
649        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            echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log
823            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
824            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
825            $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
826                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
827                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
828            RET_COMPILE=$?
829            if test "x$RET_COMPILE" = x0 ; then
830                LIBS="$LIBS -lnetcdf"
831                HAVE_NETCDF=t
832            else
833                echo "===  genmake_tnc.F  ===" >> genmake_warnings
834                cat genmake_tnc.F >> genmake_warnings
835                echo "===  genmake_tnc.F  ===" >> genmake_warnings
836                cat genmake_tnc.log >> genmake_warnings
837            fi
838        fi
839        rm -f genmake_tnc*
840    }
841    
842    
843    
844    ###############################################################################
845    #   Sequential part of script starts here
846    ###############################################################################
847    
848  #  Set defaults here  #  Set defaults here
849  COMMANDL="$0 $@"  COMMANDL="$0 $@"
# Line 170  PLATFORM= Line 852  PLATFORM=
852  LN=  LN=
853  S64=  S64=
854  KPP=  KPP=
855  FC=  #FC=
856    #CC=gcc
857    #CPP=
858  LINK=  LINK=
859    DEFINES=
860  PACKAGES=  PACKAGES=
861  ENABLE=  ENABLE=
862  DISABLE=  DISABLE=
863  MAKEFILE=  # MAKEFILE=
864  MAKEDEPEND=  # MAKEDEPEND=
865  PDEPEND=  PDEPEND=
866  DUMPSTATE=f  DUMPSTATE=t
867  PDEFAULT=  PDEFAULT=
868  OPTFILE=  OPTFILE=
869  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
870  FFLAGS=  FFLAGS=
871  FOPTIM=  FOPTIM=
872  CFLAGS=  CFLAGS=
873  KFLAGS1=  KFLAGS1=
874  KFLAGS2=  KFLAGS2=
875    #LDADD=
876  LIBS=  LIBS=
877  KPPFILES=  KPPFILES=
878  NOOPTFILES=  NOOPTFILES=
879  NOOPTFLAGS=  NOOPTFLAGS=
880    MPI=
881    MPIPATH=
882    TS=
883    HAVE_TEST_L=
884    
885    # DEFINES checked by test compilation or command-line
886    HAVE_SYSTEM=
887    HAVE_FDATE=
888    FC_NAMEMANGLE=
889    HAVE_CLOC=
890    HAVE_SETRLSTK=
891    HAVE_STAT=
892    HAVE_NETCDF=
893    HAVE_ETIME=
894    IGNORE_TIME=
895    
896  MODS=  MODS=
897  TOOLSDIR=  TOOLSDIR=
898  SOURCEDIRS=  SOURCEDIRS=
899  INCLUDEDIRS=  INCLUDEDIRS=
900    STANDARDDIRS="USE_THE_DEFAULT"
901    
902    G2ARGS=
903    BASH=
904  PWD=`pwd`  PWD=`pwd`
905  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
906  THISHOSTNAME=`hostname`  test "x$AWK" = x   &&  AWK=awk
907    THISHOST=`hostname`
908  THISCWD=`pwd`  THISCWD=`pwd`
909  THISDATE=`date`  THISDATE=`date`
910    THISUSER=`echo $USER`
911    THISVER=
912  MACHINE=`uname -a`  MACHINE=`uname -a`
913  EXECUTABLE=  EXECUTABLE=
914  EXEHOOK=  EXEHOOK=
915  EXEDIR=  EXEDIR=
916    PACKAGES_CONF=
917    IEEE=
918    if test "x$MITGCM_IEEE" != x ; then
919        IEEE=$MITGCM_IEEE
920    fi
921    FS=
922    FS90=
923    
924    AUTODIFF_PKG_USED=f
925    AD_OPTFILE=
926    TAF=
927    AD_TAF_FLAGS=
928    FTL_TAF_FLAGS=
929    SVD_TAF_FLAGS=
930    TAF_EXTRA=
931    TAMC=
932    AD_TAMC_FLAGS=
933    FTL_TAF_FLAGS=
934    SVD_TAMC_FLAGS=
935    TAMC_EXTRA=
936    
937    
938  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
939  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE NOOPT"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
940  gm_s2="FC IEEE MPI JAM DUMPSTATE"  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"
941    
942  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
943  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 "
944  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
945  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
946  gm_s6="EXECUTABLE EXEHOOK EXEDIR"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
947    gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
948    
949  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6"  #  The following are all related to adjoint/tangent-linear stuff
950    gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
951    gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
952    gm_s12="TAF_EXTRA TAMC_EXTRA"
953    
954    gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
955    gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
956    
957    cat <<EOF
958    
959    GENMAKE :
960    
961    A program for GENerating MAKEfiles for the MITgcm project.  For a
962    quick list of options, use "genmake -h" or for more detail see:
963    
964      http://mitgcm.org/devel_HOWTO/
965    
966    EOF
967    
 echo  
968  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
969  gm_local="./gm_local"  gm_local="genmake_local"
970  echo -n "  getting local config information:  "  for i in . $MODS ; do
971  if test -e $gm_local ; then      if test -r $i/$gm_local ; then
972            . $i/$gm_local
973            break
974        fi
975    done
976    printf "  getting local config information:  "
977    if test -f $gm_local ; then
978      echo "using $gm_local"      echo "using $gm_local"
979      source $gm_local      . $gm_local
980      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
981      # echo "ENABLE=$ENABLE"      # echo "ENABLE=$ENABLE"
982  else  else
983      echo "none found"      echo "none found"
984  fi  fi
985    
986  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
987  #OPTIONS=  #OPTIONS=
988  #n=0  #n=0
989  #for i ; do  #for i ; do
# Line 244  fi Line 994  fi
994  #   n=$(( $n + 1 ))  #   n=$(( $n + 1 ))
995  #done  #done
996  #parse_options  #parse_options
   
997  ac_prev=  ac_prev=
998  for ac_option ; do  for ac_option in "$@" ; do
999    
1000        G2ARGS="$G2ARGS \"$ac_option\""
1001    
1002      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
1003      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 269  for ac_option ; do Line 1020  for ac_option ; do
1020          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
1021              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
1022                    
1023            -adoptfile | --adoptfile | -adof | --adof)
1024                ac_prev=AD_OPTFILE ;;
1025            -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
1026                AD_OPTFILE=$ac_optarg ;;
1027            
1028          -pdepend | --pdepend)          -pdepend | --pdepend)
1029              ac_prev=PDEPEND ;;              ac_prev=PDEPEND ;;
1030          -pdepend=* | --pdepend=*)          -pdepend=* | --pdepend=*)
# Line 284  for ac_option ; do Line 1040  for ac_option ; do
1040          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1041              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1042                    
1043            -bash | --bash)
1044                ac_prev=BASH ;;
1045            -bash=* | --bash=*)
1046                BASH=$ac_optarg ;;
1047            
1048            -makedepend | --makedepend | -md | --md)
1049                ac_prev=MAKEDEPEND ;;
1050            -makedepend=* | --makedepend=* | -md=* | --md=*)
1051                MAKEDEPEND=$ac_optarg ;;
1052            
1053          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1054              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1055          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
1056              MAKEFILE=$ac_optarg ;;              MAKEFILE=$ac_optarg ;;
1057                    
1058          -platform | --platform | -pl | --pl)          -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
1059              ac_prev=PLATFORM ;;              echo "ERROR: The platform option has been removed.  Please specify"
1060          -platform=* | --platform=* | -pl=* | --pl=*)              echo "  the build options using the \"optfile\" mechanism."
1061              PLATFORM=$ac_optarg ;;              echo
1062                usage
1063                ;;
1064                    
1065          -rootdir | --rootdir | -rd | --rd)          -rootdir | --rootdir | -rd | --rd)
1066              ac_prev=ROOTDIR ;;              ac_prev=ROOTDIR ;;
# Line 314  for ac_option ; do Line 1082  for ac_option ; do
1082          -enable=* | --enable=*)          -enable=* | --enable=*)
1083              ENABLE=$ac_optarg ;;              ENABLE=$ac_optarg ;;
1084                    
1085          -noopt | --noopt)          -standarddirs | --standarddirs)
1086              ac_prev=NOOPT ;;              ac_prev=STANDARDDIRS ;;
1087          -noopt=* | --noopt=*)          -standarddirs=* | --standarddirs=*)
1088              NOOPT=$ac_optarg ;;              STANDARDDIRS=$ac_optarg ;;
1089            
1090  #           -cpp | --cpp)  #           -cpp | --cpp)
1091  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1092  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1093  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1094                        
1095            -cc | --cc)
1096                ac_prev=CC ;;
1097            -cc=* | --cc=*)
1098                CC=$ac_optarg ;;
1099            
1100          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1101              ac_prev=FC ;;              ac_prev=FC ;;
1102          -fc=* | --fc=*)          -fc=* | --fc=*)
1103              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1104                    
1105            -fs | --fs)
1106                ac_prev=FS ;;
1107            -fs=* | --fs=*)
1108                FS=$ac_optarg ;;
1109            
1110            -fs90 | --fs90)
1111                ac_prev=FS90 ;;
1112            -fs90=* | --fs90=*)
1113                FS90=$ac_optarg ;;
1114            
1115          -ieee | --ieee)          -ieee | --ieee)
1116              IEEE=1 ;;              IEEE=true ;;
1117          -noieee | --noieee)          -noieee | --noieee)
1118              IEEE=0 ;;              IEEE= ;;
1119            
1120            -ts | --ts)
1121                TS=true ;;
1122    
1123          -mpi | --mpi)          -mpi | --mpi)
1124              MPI=1 ;;              MPI=true ;;
1125          -nompi | --nompi)          -mpi=* | --mpi=*)
1126              MPI=0 ;;              MPIPATH=$ac_optarg
1127                        MPI=true ;;
1128          -jam | --jam)          
1129              JAM=1 ;;  #       -jam | --jam)
1130          -nojam | --nojam)  #           JAM=1 ;;
1131              JAM=0 ;;  #       -nojam | --nojam)
1132    #           JAM=0 ;;
1133                    
1134          -ds | --ds)          -ds | --ds)
1135              DUMPSTATE=t ;;              DUMPSTATE=t ;;
1136                    
1137            -taf_extra | --taf_extra)
1138                ac_prev=TAF_EXTRA ;;
1139            -taf_extra=* | --taf_extra=*)
1140                TAF_EXTRA=$ac_optarg ;;
1141    
1142            -tamc_extra | --tamc_extra)
1143                ac_prev=TAMC_EXTRA ;;
1144            -tamc_extra=* | --tamc_extra=*)
1145                TAMC_EXTRA=$ac_optarg ;;
1146            
1147            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1148                IGNORE_TIME="-DIGNORE_TIME" ;;
1149    
1150          -*)          -*)
1151              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
1152              usage              usage
# Line 361  for ac_option ; do Line 1161  for ac_option ; do
1161            
1162  done  done
1163    
1164    
1165    if test -f ./.genmakerc ; then
1166        echo
1167        echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1168        echo "  file.  This file format is no longer supported.  Please see:"
1169        echo
1170        echo "    http://mitgcm.org/devel_HOWTO/"
1171        echo
1172        echo "  for directions on how to setup and use the new \"genmake2\" input"
1173        echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."
1174        echo
1175    fi
1176    
1177    #  Find the MITgcm ${ROOTDIR}
1178    if test "x${ROOTDIR}" = x ; then
1179        tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1180        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1181            ROOTDIR=".."
1182        else
1183            for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1184                if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1185                    ROOTDIR=$d
1186                    printf "Warning:  ROOTDIR was not specified but there appears to be"
1187                    echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1188                    break
1189                fi
1190            done
1191        fi
1192    fi
1193    if test "x${ROOTDIR}" = x ; then
1194        echo "Error: Cannot determine ROOTDIR for MITgcm code."
1195        echo "  Please specify a ROOTDIR using either an options "
1196        echo "  file or a command-line option."
1197        exit 1
1198    fi
1199    if test ! -d ${ROOTDIR} ; then
1200        echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
1201        exit 1
1202    fi
1203    
1204    #  Find the MITgcm ${THISVER}
1205    if test -f "${ROOTDIR}/doc/tag-index" ; then
1206        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1207    fi
1208    
1209    if test "x$MAKEFILE" = x ; then
1210        MAKEFILE="Makefile"
1211    fi
1212    
1213  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1214  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1215      echo "Warning: no OPTFILE specified so we'll look for possible settings"      if test "x$MITGCM_OF" = x ; then
1216      printf "\n===  Searching for possible settings for OPTFILE  ===\n"          echo "Warning: no OPTFILE specified so we'll look for possible settings"
1217      find_possible_configs          printf "\n===  Searching for possible settings for OPTFILE  ===\n"
1218  else          find_possible_configs
     if test "x$OPTFILE" = xNONE ; then  
         echo "    OPTFILE=NONE so we'll try to use default settings"  
1219      else      else
1220          if test -f "$OPTFILE" -a -r "$OPTFILE" ; then          OPTFILE=$MITGCM_OF
1221              echo "    using OPTFILE=\"$OPTFILE\""      fi
1222              source "$OPTFILE"  fi
1223              RETVAL=$?  if test "x$OPTFILE" != xNONE ; then
1224              if test "x$RETVAL" != x0 ; then      if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1225                  echo -n "Error: failed to source OPTFILE \"$OPTFILE\""          echo "    using OPTFILE=\"$OPTFILE\""
1226                  echo "--please check that variable syntax is bash-compatible"          . "$OPTFILE"
1227                  exit 1          RETVAL=$?
1228              fi          if test "x$RETVAL" != x0 ; then
1229              if test "x$DUMPSTATE" != xf ; then              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1230                  cp -f $OPTFILE "gm_optfile"              echo "--please check that variable syntax is bash-compatible"
1231              fi              exit 1
1232          else          fi
1233              echo "Error: can't read OPTFILE=\"$OPTFILE\""          if test "x$DUMPSTATE" != xf ; then
1234                cp -f $OPTFILE "genmake_optfile"
1235            fi
1236        else
1237            echo "Error: can't read OPTFILE=\"$OPTFILE\""
1238            exit 1
1239        fi
1240    fi
1241    
1242    echo "  getting AD_OPTFILE information:  "
1243    if test "x${AD_OPTFILE}" = x ; then
1244        if test "x$MITGCM_AD_OF" = x ; then
1245            AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
1246        else
1247            AD_OPTFILE=$MITGCM_AD_OF
1248        fi
1249    fi
1250    if test "x${AD_OPTFILE}" != xNONE ; then
1251        if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1252            echo "    using AD_OPTFILE=\"$AD_OPTFILE\""
1253            . "$AD_OPTFILE"
1254            RETVAL=$?
1255            if test "x$RETVAL" != x0 ; then
1256                printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1257                echo "--please check that variable syntax is bash-compatible"
1258              exit 1              exit 1
1259          fi          fi
1260            if test "x$DUMPSTATE" != xf ; then
1261                cp -f $AD_OPTFILE "genmake_ad_optfile"
1262            fi
1263        else
1264            echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
1265            exit 1
1266      fi      fi
1267  fi  fi
1268    
1269  #  Check that FC, LINK, CPP, and S64 are defined.  If not, complain  #====================================================================
1270  #  and abort!  #  Set default values if not set by the optfile
1271    #
1272    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1273    #  either set defaults or complain and abort!
1274    if test ! "x$BASH" = x ; then
1275        # add a trailing space so that it works within the Makefile syntax (see below)
1276        BASH="$BASH "
1277    fi
1278  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1279      cat <<EOF 1>&2      cat <<EOF 1>&2
1280    
1281  Error: no Fortran compiler: please specify using one of the following:  Error: no Fortran compiler: please specify using one of the following:
1282    1) within the options file ("FC=...") as specified by "-of=OPTFILE"    1) within the options file ("FC=...") as specified by "-of=OPTFILE"
1283    2) the "-fc=XXX" command-line option    2) the "-fc=XXX" command-line option
1284    3) the "./gm_local" file    3) the "./genmake_local" file
1285  EOF  EOF
1286      exit 1      exit 1
1287  fi  fi
1288    if test "x$CC" = x ; then
1289        CC=cc
1290    #     cat <<EOF 1>&2
1291    # Error: no C compiler: please specify using one of the following:
1292    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1293    #   2) the "-cc=XXX" command-line option
1294    #   3) the "./genmake_local" file
1295    # EOF
1296    #     exit 1
1297    fi
1298  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1299      LINK=$FC      LINK=$FC
1300  fi  fi
1301    if test "x$MAKE" = x ; then
1302        MAKE="make"
1303    fi
1304  if test "x$CPP" = x ; then  if test "x$CPP" = x ; then
1305        CPP=cpp
1306    fi
1307    #EH3 === UGLY ===
1308    #  The following is an ugly little hack to check for $CPP in /lib/ and
1309    #  it should eventually be replaced with a more general function that
1310    #  searches a combo of the user's path and a list of "usual suspects"
1311    #  to find the correct location for binaries such as $CPP.
1312    for i in " " "/lib/" ; do
1313        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1314    done
1315    #EH3 === UGLY ===
1316    echo "#define A a" | $CPP > test_cpp 2>&1
1317    RETVAL=$?
1318    if test "x$RETVAL" != x0 ; then
1319      cat <<EOF 1>&2      cat <<EOF 1>&2
1320    
1321  Error: no C pre-processor: please specify using one of the following:  Error: C pre-processor "$CPP" failed the test case: please specify using:
1322    
1323    1) within the options file ("CPP=...") as specified by "-of=OPTFILE"    1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
1324    2) the "./gm_local" file    2) the "./genmake_local" file
1325      3) with the CPP environment variable
1326    
1327  EOF  EOF
1328      exit 1      exit 1
1329    else
1330        rm -f test_cpp
1331  fi  fi
1332  if test "x$S64" = x ; then  look_for_makedepend
1333    if test "x$LN" = x ; then
1334        LN="ln -s"
1335    fi
1336    echo "test" > genmake_test_ln
1337    $LN genmake_test_ln genmake_tlink
1338    RETVAL=$?
1339    if test "x$RETVAL" != x0 ; then
1340      cat <<EOF 1>&2      cat <<EOF 1>&2
1341    
1342  Error: no C pre-processor: please specify using one of the following:  Error: The command "ln -s" failed -- please specify a working soft-link
1343    1) within the options file ("S64=...") as specified by "-of=OPTFILE"    command in the optfile.
1344    2) the "./gm_local" file  
1345  EOF  EOF
1346      exit 1      exit 1
1347  fi  fi
1348    test -L genmake_tlink > /dev/null 2>&1
1349    RETVAL=$?
1350    if test "x$RETVAL" = x0 ; then
1351        HAVE_TEST_L=t
1352    fi
1353    rm -f genmake_test_ln genmake_tlink
1354    
1355    #  Check for broken *.F/*.f handling and fix if possible
1356    check_for_broken_Ff
1357    
1358    if test ! "x$MPI" = x ; then
1359          echo "  Turning on MPI cpp macros"
1360          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1361    fi
1362    
1363    if test ! "x$TS" = x ; then
1364          echo "  Turning on timing per timestep"
1365          DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1366    fi
1367    
1368    printf "\n===  Checking system libraries  ===\n"
1369    printf "  Do we have the system() command using $FC...  "
1370    cat > genmake_tcomp.$FS <<EOF
1371          program hello
1372          call system('echo hi')
1373          end
1374    EOF
1375    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1376    RETVAL=$?
1377    if test "x$RETVAL" = x0 ; then
1378        HAVE_SYSTEM=t
1379        DEFINES="$DEFINES -DHAVE_SYSTEM"
1380        echo "yes"
1381    else
1382        HAVE_SYSTEM=
1383        echo "no"
1384    fi
1385    rm -f genmake_tcomp*
1386    
1387    printf "  Do we have the fdate() command using $FC...  "
1388    cat > genmake_tcomp.$FS <<EOF
1389          program hello
1390          CHARACTER*(128) string
1391          string = ' '
1392          call fdate( string )
1393          print *, string
1394          end
1395    EOF
1396    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1397    RETVAL=$?
1398    if test "x$RETVAL" = x0 ; then
1399        HAVE_FDATE=t
1400        DEFINES="$DEFINES -DHAVE_FDATE"
1401        echo "yes"
1402    else
1403        HAVE_FDATE=
1404        echo "no"
1405    fi
1406    rm -f genmake_tcomp*
1407    
1408    printf "  Do we have the etime() command using $FC...  "
1409    cat > genmake_tcomp.$FS <<EOF
1410          program hello
1411          REAL*4 ACTUAL, TARRAY(2)
1412          EXTERNAL ETIME
1413          REAL*4 ETIME
1414          actual = etime( tarray )
1415          print *, tarray
1416          end
1417    EOF
1418    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1419    RETVAL=$?
1420    if test "x$RETVAL" = x0 ; then
1421        HAVE_ETIME=t
1422        DEFINES="$DEFINES -DHAVE_ETIME"
1423        echo "yes"
1424    else
1425        HAVE_ETIME=
1426        echo "no"
1427    fi
1428    rm -f genmake_tcomp*
1429    
1430    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1431    check_HAVE_CLOC
1432    if test "x$HAVE_CLOC" != x ; then
1433        echo "yes"
1434    else
1435        echo "no"
1436    fi
1437    rm -f genmake_t*
1438    
1439    printf "  Can we unlimit the stack size using $FC...  "
1440    check_HAVE_SETRLSTK
1441    if test "x$HAVE_SETRLSTK" != x ; then
1442        echo "yes"
1443    else
1444        echo "no"
1445    fi
1446    rm -f genmake_t*
1447    
1448    printf "  Can we use stat() through C calls...  "
1449    check_HAVE_STAT
1450    if test "x$HAVE_STAT" != x ; then
1451        echo "yes"
1452    else
1453        echo "no"
1454    fi
1455    rm -f genmake_t*
1456    
1457    printf "  Can we create NetCDF-enabled binaries...  "
1458    check_netcdf_libs
1459    if test "x$HAVE_NETCDF" != x ; then
1460        echo "yes"
1461    else
1462        echo "no"
1463    fi
1464    DEFINES="$DEFINES $IGNORE_TIME"
1465    
1466  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1467  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1468  for d in $MODS ; do  for d in $MODS ; do
1469      if test ! -d $d ; then      if test ! -d $d ; then
1470          echo          echo
1471          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1472          exit 1          exit 1
1473      else      else
1474          echo -n " $d"          printf " $d"
1475          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1476          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1477      fi      fi
1478  done  done
1479  echo  echo
1480    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1481  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1482      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1483  fi  fi
1484    
 if test "x${ROOTDIR}" = x ; then  
     if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then  
         ROOTDIR=".."  
     else  
         for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do  
             if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then  
                 ROOTDIR=$d  
                 echo -n "Warning:  ROOTDIR was not specified but there appears to be"  
                 echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."  
                 break  
             fi  
         done  
     fi  
 fi  
 if test "x${ROOTDIR}" = x ; then  
     echo "Error: Cannot determine ROOTDIR for MITgcm code."  
     echo "  Please specify a ROOTDIR using either an options "  
     echo "  file or a command-line option."  
     exit 1  
 fi  
 if test ! -d ${ROOTDIR} ; then  
     echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"  
     exit 1  
 fi  
   
1485  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1486      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1487        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1488          EXEDIR=../exe          EXEDIR=../exe
1489      else      else
1490          EXEDIR=.          EXEDIR=.
# Line 487  if test "x${TOOLSDIR}" = x ; then Line 1499  if test "x${TOOLSDIR}" = x ; then
1499      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1500  fi  fi
1501  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1502      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1503      exit 1      exit 1
1504  fi  fi
1505    if test "x$S64" = x ; then
1506        echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1507        RETVAL=$?
1508        if test "x${RETVAL}" = x0 ; then
1509            S64='$(TOOLSDIR)/set64bitConst.sh'
1510        else
1511            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1512            RETVAL=$?
1513            if test "x${RETVAL}" = x0 ; then
1514                S64='$(TOOLSDIR)/set64bitConst.csh'
1515            else
1516                cat <<EOF
1517    
1518    ERROR: neither of the two default scripts:
1519    
1520        ${TOOLSDIR}/set64bitConst.sh
1521        ${TOOLSDIR}/set64bitConst.csh
1522    
1523      are working so please check paths or specify (with \$S64) a
1524      working version of this script.
1525    
1526    EOF
1527                exit 1
1528            fi
1529        fi
1530    fi
1531    THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1532    
1533  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1534    
# Line 498  EXECUTABLE=${EXECUTABLE:-mitgcmuv} Line 1537  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1537  #  they appear as regular source code  #  they appear as regular source code
1538  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1539      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1540      $MAKE -C $ROOTDIR"/eesupp/src/" > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1541      RETVAL=$?      RETVAL=$?
1542      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1543          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1544      else      else
1545          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1546          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1547          exit 1          exit 1
1548      fi      fi
1549  fi  fi
1550    
1551    #same for exch2
1552    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1553        echo "  Making source files in exch2 from  templates"
1554        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1555        RETVAL=$?
1556        if test "x${RETVAL}" = x0 ; then
1557            rm -f make_exch2.errors
1558        else
1559            echo "Error: problem encountered while building source files in exch2:"
1560            cat make_exch2.errors 1>&2
1561            exit 1
1562        fi
1563    fi
1564    
1565  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1566  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1567      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 528  echo "  getting package dependency info Line 1581  echo "  getting package dependency info
1581  #  Strip the comments and then convert the dependency file into  #  Strip the comments and then convert the dependency file into
1582  #  two arrays: PNAME, DNAME  #  two arrays: PNAME, DNAME
1583  cat $PDEPEND | sed -e 's/#.*$//g' \  cat $PDEPEND | sed -e 's/#.*$//g' \
1584      | awk 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \      | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
1585      > ./.pd_tmp      > ./.pd_tmp
1586  RETVAL=$?  RETVAL=$?
1587  if test ! "x${RETVAL}" = x0 ; then  if test ! "x${RETVAL}" = x0 ; then
1588      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
1589      exit 1      exit 1
1590  fi  fi
1591  source ./.pd_tmp  . ./.pd_tmp
1592  rm -f ./.pd_tmp  rm -f ./.pd_tmp
1593    
1594  echo  -n "  checking default package list:  "  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1595    #  file should eventually be added so that, for convenience, one can
1596    #  specify groups of packages using names like "ocean" and "atmosphere".
1597    echo "  checking default package list:  "
1598    if test "x${PDEFAULT}" = x ; then
1599        for i in "." $MODS ; do
1600            if test -r $i"/packages.conf" ; then
1601                    PDEFAULT=$i"/packages.conf"
1602                    break
1603            fi
1604        done
1605    fi
1606  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1607      PDEFAULT="$ROOTDIR/pkg/pkg_default"      PDEFAULT="$ROOTDIR/pkg/pkg_default"
1608  fi  fi
1609  if test "x${PDEFAULT}" = xNONE ; then  if test "x${PDEFAULT}" = xNONE ; then
1610      echo "default packages file disabled"      echo "    default packages file disabled"
1611  else  else
1612      if test ! -r $PDEFAULT ; then      if test ! -r $PDEFAULT ; then
         echo ""  
1613          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""
1614      else      else
1615          echo "  using PDEFAULT=\"$PDEFAULT\""          echo "    using PDEFAULT=\"$PDEFAULT\""
1616          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1617          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | awk '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1618          RETVAL=$?          RETVAL=$?
1619          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1620              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1621              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1622              exit 1              exit 1
1623          fi          fi
1624          for i in $def ; do          for i in $def ; do
1625              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1626          done          done
1627          echo "    packages are:  $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1628            RET=1
1629            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1630            echo "    after group expansion packages are:  $PACKAGES"
1631      fi      fi
1632  fi  fi
1633    
1634  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1635    for i in $PACKAGES ; do
1636        echo $i >> ./.tmp_pack
1637    done
1638    for i in `grep  "-" ./.tmp_pack` ; do
1639        j=`echo $i | sed 's/[-]//'`
1640        DISABLE="$DISABLE $j"
1641    done
1642  pack=  pack=
1643  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1644      addit="t"      addit="t"
# Line 580  for p in $PACKAGES ; do Line 1653  for p in $PACKAGES ; do
1653  done  done
1654  PACKAGES="$pack"  PACKAGES="$pack"
1655  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1656  rm -f ./.tmp_pack  echo "" > ./.tmp_pack
1657  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1658    # Test if each explicitly referenced package exists
1659  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1660      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1661        if test ! -d "$ROOTDIR/pkg/$j" ; then
1662          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1663          exit 1          exit 1
1664      fi      fi
1665      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1666  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1667  PACKAGES=  PACKAGES=
1668  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1669      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1670  done  done
1671    rm -f ./.tmp_pack
1672  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1673    
1674    #  Check availability of NetCDF and then either build the MNC template
1675    #  files or delete mnc from the list of available packages.
1676    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1677    RETVAL=$?
1678    if test "x$RETVAL" = x0 ; then
1679        if test "x$HAVE_NETCDF" != xt ; then
1680            cat <<EOF
1681    
1682    *********************************************************************
1683    WARNING: the "mnc" package was enabled but tests failed to compile
1684      NetCDF applications.  Please check that:
1685    
1686      1) NetCDF is correctly installed for this compiler and
1687      2) the LIBS variable (within the "optfile") specifies the correct
1688           NetCDF library to link against.
1689    
1690      Due to this failure, the "mnc" package is now DISABLED.
1691    *********************************************************************
1692    
1693    EOF
1694            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1695            DISABLE="$DISABLE mnc"
1696        else
1697            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1698            RETVAL=$?
1699            if test "x${RETVAL}" = x0 ; then
1700                rm -f make_mnc.errors
1701            else
1702                echo "Error: problem encountered while building source files in pkg/mnc:"
1703                cat make_mnc.errors 1>&2
1704                exit 1
1705            fi
1706        fi
1707    fi
1708    
1709  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1710  ck=  ck=
1711  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 661  while test "x$ck" != xtt ; do Line 1770  while test "x$ck" != xtt ; do
1770              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1771              exit 1              exit 1
1772          fi          fi
1773          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1774            #i=$(( $i + 1 ))
1775      done      done
1776      ck=$ck"t"      ck=$ck"t"
1777  done  done
# Line 671  for i in $PACKAGES ; do Line 1781  for i in $PACKAGES ; do
1781      if test -d $adr ; then      if test -d $adr ; then
1782          SOURCEDIRS="$SOURCEDIRS $adr"          SOURCEDIRS="$SOURCEDIRS $adr"
1783          INCLUDEDIRS="$INCLUDEDIRS $adr"          INCLUDEDIRS="$INCLUDEDIRS $adr"
1784            if test "x$i" = xautodiff ; then
1785                AUTODIFF_PKG_USED=t
1786            fi
1787      else      else
1788          echo "Error: the directory \"$adr\" for package $i doesn't exist"          echo "Error: the directory \"$adr\" for package $i doesn't exist"
1789          exit 1          exit 1
1790      fi      fi
1791  done  done
1792    
1793  #  This is compatible with the old genmake.  The "DISABLE_*" flags  # Create a list of #define and #undef to enable/disable packages
1794  #  need to be replaced by the "ALLOW_*" flags set below.  PACKAGES_DOT_H=PACKAGES_CONFIG.h
 #  
 # echo -n "  Setting package-specific CPP flags:  "  
 # pkrm=( mom_fluxform mom_vecinv generic_advdiff )  
 # pkrmdef=( -DDISABLE_MOM_FLUXFORM -DDISABLE_MOM_VECINV -DDISABLE_GENERIC_ADVDIFF -DDISABLE_DEBUGMODE )  
 # echo -n "  "  
 # i=0  
 # while test $i -lt "${#pkrm[@]}" ; do  
 #     echo "$PACKAGES" | grep "${pk[$i]}" > /dev/null 2>&1  
 #     RETVAL=$?  
 #     if test "x$RETVAL" = x1 ; then  
 #       DEFINES="$DEFINES ${pkdef[$i]}"  
 #       echo -n " ${pkdef[$i]}"  
 #     fi  
 #     i=$(( $i + 1 ))  
 # done  
 # echo  
   
 echo "  Setting package-specific CPP flags in CPP_OPTIONS.h:"  
 CPP_OPTIONS=  
 spaths="$SOURCEDIRS"  
 for i in $spaths ; do  
     try="$i/CPP_OPTIONS.h"  
     #  echo -n "    trying $try : "  
     if test -f $try -a -r $try ; then  
         echo "    found CPP_OPTIONS=\"$try\""  
         CPP_OPTIONS="$try"  
         if test "x$i" != "x." ; then  
             cp -f $CPP_OPTIONS .  
         fi  
         break  
     fi  
 done  
 if test "x$CPP_OPTIONS" = x ; then  
     echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"  
     exit 1  
 fi  
 if test -e CPP_OPTIONS.h ; then  
     if test ! -e CPP_OPTIONS.h.bak ; then  
         cp -f CPP_OPTIONS.h CPP_OPTIONS.h.bak  
     fi  
     cat CPP_OPTIONS.h \  
         | awk 'BEGIN{p=1;} ($1=="C===" && $2=="GENMAKE"){p=0;} {if (p==1) print $0}' \  
         > CPP_OPTIONS.h.tmp  
 fi  
 cat <<EOF >>CPP_OPTIONS.h.tmp  
 C=== GENMAKE v2 ===  
 C  The following defines have been set by GENMAKE, so please edit  
 C  them only if you know what you're doing.  In general, you should  
 C  add or remove packages by re-running genmake with different  
 C  "-enable" and/or "-disable" options.  
   
 C  Packages disabled by genmake:  
 EOF  
1795  #  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
1796  #  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
1797  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
1798  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
1799  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
1800  all_pack=  all_pack=
1801    DISABLED_PACKAGES=
1802  for n in $names ; do  for n in $names ; do
1803      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1804          has_pack="f"          has_pack="f"
# Line 748  for n in $names ; do Line 1809  for n in $names ; do
1809              fi              fi
1810          done          done
1811          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1812              undef=`echo "ALLOW_$n" | awk '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1813              echo "#undef $undef" >> CPP_OPTIONS.h.tmp              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
   
 #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  
             case $n in  
                 mom_fluxform)  
                     DEFINES="$DEFINES -DDISABLE_MOM_FLUXFORM"  
                     ;;  
                 mom_vecinv)  
                     DEFINES="$DEFINES -DDISABLE_MOM_VECINV"  
                     ;;  
                 generic_advdiff)  
                     DEFINES="$DEFINES -DDISABLE_GENERIC_ADVDIFF"  
                     ;;  
                 debug)  
                     DEFINES="$DEFINES -DDISABLE_DEBUGMODE"  
                     ;;  
             esac  
 #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  
   
1814          fi          fi
1815      fi      fi
1816  done  done
1817  cat <<EOF >>CPP_OPTIONS.h.tmp  ENABLED_PACKAGES=
   
 C  Packages enabled by genmake:  
 EOF  
1818  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1819      def=`echo "ALLOW_$i" | awk '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1820      echo "#define $def" >> CPP_OPTIONS.h.tmp      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1821    #eh3 DEFINES="$DEFINES -D$def"
1822    
1823  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1824      case $i in      case $i in
1825          aim_v23)          aim_v23)
1826              echo "#define   ALLOW_AIM" >> CPP_OPTIONS.h.tmp              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1827                echo "Warning: ALLOW_AIM is set to enable aim_v23."
1828              ;;              ;;
1829      esac      esac
1830  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1831    
1832  done  done
 mv -f CPP_OPTIONS.h.tmp CPP_OPTIONS.h  
1833    
1834  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1835  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1836  STANDARDDIRS=${STANDARDDIRS:-"eesupp model"}  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1837  for d in $STANDARDDIRS ; do      STANDARDDIRS="eesupp model"
1838      adr="$ROOTDIR/$d/src"  fi
1839      if test ! -d $adr ; then  if test "x$STANDARDDIRS" != x ; then
1840          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""      for d in $STANDARDDIRS ; do
1841          echo "  is correct and that you correctly specified the STANDARDDIRS option"          adr="$ROOTDIR/$d/src"
1842          exit 1          if test ! -d $adr ; then
1843      else              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1844          SOURCEDIRS="$SOURCEDIRS $adr"              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1845      fi              exit 1
1846      adr="$ROOTDIR/$d/inc"          else
1847      if test ! -d $adr ; then              SOURCEDIRS="$SOURCEDIRS $adr"
1848          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          fi
1849          echo "  is correct and that you correctly specified the STANDARDDIRS option"          adr="$ROOTDIR/$d/inc"
1850          exit 1          if test ! -d $adr ; then
1851      else              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1852          INCLUDEDIRS="$INCLUDEDIRS $adr"              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1853                exit 1
1854            else
1855                INCLUDEDIRS="$INCLUDEDIRS $adr"
1856            fi
1857        done
1858    fi
1859    
1860    echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1861    echo "    of \"#define \"-type statements that are no longer allowed:"
1862    CPP_OPTIONS=
1863    CPP_EEOPTIONS=
1864    spaths=". $INCLUDEDIRS"
1865    names=`ls -1 "$ROOTDIR/pkg"`
1866    for i in $spaths ; do
1867        try="$i/CPP_OPTIONS.h"
1868        if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1869            echo "    found CPP_OPTIONS=\"$try\""
1870            CPP_OPTIONS="$try"
1871            # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1872            for n in $names ; do
1873                test_for_package_in_cpp_options $CPP_OPTIONS $n
1874            done
1875        fi
1876        try="$i/CPP_EEOPTIONS.h"
1877        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1878            echo "    found CPP_EEOPTIONS=\"$try\""
1879            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1880    #**** not yet enabled ****
1881    #        test_for_mpi_in_cpp_eeoptions $try
1882    #**** not yet enabled ****
1883            CPP_EEOPTIONS="$try"
1884      fi      fi
1885  done  done
1886    if test "x$CPP_OPTIONS" = x ; then
1887        echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1888        exit 1
1889    fi
1890    
1891    #  Here, we build the list of files to be "run through" the adjoint
1892    #  compiler.
1893    if test -f ./ad_files ; then
1894        rm -f ./ad_files
1895    fi
1896    echo "  Creating the list of files for the adjoint compiler."
1897    for i in $SOURCEDIRS ; do
1898        list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1899        for j in $list_files ; do
1900            cat $i/$j >> ad_files
1901        done
1902    done
1903    if test ! "x"$FS = "x.f" ; then
1904        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
1905        mv -f ad_files_f ad_files
1906    fi
1907    
1908  echo  echo
1909  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1910  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1911  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1912      if test -d $i ; then      if test ! -d $i ; then
         INCLUDES="$INCLUDES -I$i"  
     else  
1913          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1914      fi      fi
1915  done  done
# Line 829  rm -rf .links.tmp Line 1919  rm -rf .links.tmp
1919  mkdir .links.tmp  mkdir .links.tmp
1920  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1921  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1922  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1923  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1924  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1925  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1926  alldirs=". $SOURCEDIRS $INCLUDEDIRS"  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1927    alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1928  for d in $alldirs ; do  for d in $alldirs ; do
1929      deplist=      deplist=
1930      sfiles=`( cd $d; echo *.[h,c,F] )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1931      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1932      for sf in $sfiles ; do      for sf in $sfiles ; do
1933          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1934              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1935                  extn=`echo $sf | awk -F '.' '{print $NF}'`                  ignore_f=f
1936                  touch .links.tmp/$sf                  case $d/$sf in
1937                  deplist="$deplist $sf"                    ./$PACKAGES_DOT_H)
                 case $extn in  
                     F)  
                         echo    " \\"  >> srclist.inc  
                         echo -n " $sf" >> srclist.inc  
1938                          ;;                          ;;
1939                      F90)                    ./AD_CONFIG.h)
                         echo    " \\"  >> f90srclist.inc  
                         echo -n " $sf" >> f90srclist.inc  
1940                          ;;                          ;;
1941                      c)                    ./FC_NAMEMANGLE.h)
                         echo    " \\"  >> csrclist.inc  
                         echo -n " $sf" >> csrclist.inc  
1942                          ;;                          ;;
1943                      h)                    ./BUILD_INFO.h)
                         echo    " \\"  >> hlist.inc  
                         echo -n " $sf" >> hlist.inc  
1944                          ;;                          ;;
1945                  esac                    *)
1946                            #  For the local directory *ONLY*,
1947                            #  ignore all soft-links
1948                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
1949                                ignore_f=t
1950                            else
1951                                touch .links.tmp/$sf
1952                                deplist="$deplist $sf"
1953                            fi
1954                            ;;
1955                    esac
1956                    if test "x$ignore_f" = xf ; then
1957                        extn=`echo $sf | $AWK -F. '{print $NF}'`
1958                        case $extn in
1959                            F)
1960                                echo    " \\"  >> srclist.inc
1961                                printf " $sf" >> srclist.inc
1962                                ;;
1963                            F90)
1964                                echo    " \\"  >> f90srclist.inc
1965                                printf " $sf" >> f90srclist.inc
1966                                ;;
1967                            c)
1968                                echo    " \\"  >> csrclist.inc
1969                                printf " $sf" >> csrclist.inc
1970                                ;;
1971                            h)
1972                                echo    " \\"  >> hlist.inc
1973                                printf " $sf" >> hlist.inc
1974                                ;;
1975                            flow)
1976                                echo    " \\"  >> ad_flow_files.inc
1977                                printf " $sf" >> ad_flow_files.inc
1978                                ;;
1979                        esac
1980                    fi
1981              fi              fi
1982          fi          fi
1983      done      done
# Line 877  echo "" >> srclist.inc Line 1993  echo "" >> srclist.inc
1993  echo "" >> csrclist.inc  echo "" >> csrclist.inc
1994  echo "" >> f90srclist.inc  echo "" >> f90srclist.inc
1995  echo "" >> hlist.inc  echo "" >> hlist.inc
1996    echo "" >> ad_flow_files.inc
1997    
1998  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1999      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
2000  fi  fi
2001  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 887  echo "#    $MACHINE" >> $MAKEFILE Line 2004  echo "#    $MACHINE" >> $MAKEFILE
2004  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2005  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2006  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2007  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2008  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2009  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2010    
2011    EXE_AD=$EXECUTABLE"_ad"
2012    EXE_FTL=$EXECUTABLE"_ftl"
2013    EXE_SVD=$EXECUTABLE"_svd"
2014    
2015  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2016    #
2017    # OPTFILE="$OPTFILE"
2018  #  #
2019  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2020  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 918  EXEDIR      = ${EXEDIR} Line 2042  EXEDIR      = ${EXEDIR}
2042  EXECUTABLE  = \$(EXEDIR)/${EXECUTABLE}  EXECUTABLE  = \$(EXEDIR)/${EXECUTABLE}
2043  TOOLSDIR    = ${TOOLSDIR}  TOOLSDIR    = ${TOOLSDIR}
2044    
2045    #eh3  new defines for the adjoint work
2046    AUTODIFF    = ${ROOTDIR}/pkg/autodiff
2047    EXE_AD      = ${EXE_AD}
2048    EXE_FTL     = ${EXE_FTL}
2049    EXE_SVD     = ${EXE_SVD}
2050    
2051    ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2052    DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2053    
2054    # These files are created by Makefile
2055    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
2056    
2057  EOF  EOF
2058    
2059  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 935  KPP = ${KPP} Line 2071  KPP = ${KPP}
2071  FC = ${FC}  FC = ${FC}
2072  # Fortran compiler  # Fortran compiler
2073  F90C = ${F90C}  F90C = ${F90C}
2074    # C compiler
2075    CC = ${CC}
2076  # Link editor  # Link editor
2077  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2078    
2079  # Defines for CPP  # Defines for CPP
2080  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 957  CFLAGS = ${CFLAGS} Line 2095  CFLAGS = ${CFLAGS}
2095  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2096  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2097  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2098  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2099  # Name of the Mekfile  # Name of the Mekfile
2100  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2101    
2102  EOF  EOF
2103    
2104  cat srclist.inc    >> $MAKEFILE  cat srclist.inc       >> $MAKEFILE
2105  cat csrclist.inc   >> $MAKEFILE  cat csrclist.inc      >> $MAKEFILE
2106  cat f90srclist.inc >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
2107  cat hlist.inc      >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
2108  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2109  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo >> $MAKEFILE
2110    echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2111    echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2112  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2113    echo >> $MAKEFILE
2114    echo '.SUFFIXES:' >> $MAKEFILE
2115    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
2116  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
2117    rm -f ad_flow_files.inc
2118    
2119  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2120    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
2121  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2122  \$(EXECUTABLE): \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
2123            @echo Creating \$@ ...
2124          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2125  depend:  depend:
2126          @make links          @make links
2127          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
2128          ${TOOLSDIR}/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2129            -rm -f makedepend.out
2130    
2131    lib: libmitgcmuv.a
2132    
2133  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES)  libmitgcmuv.a: \$(OBJFILES)
2134            ar rcv libmitgcmuv.a \$(OBJFILES)
2135    
2136    links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2137    
2138  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
2139    
# Line 995  output.txt: \$(EXECUTABLE) Line 2142  output.txt: \$(EXECUTABLE)
2142          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2143    
2144  clean:  clean:
2145          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl}          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2146  Clean:  Clean:
2147          @make clean          @make clean
2148          @make cleanlinks          @make cleanlinks
2149          -rm -f Makefile.bak          -rm -f \$(SPECIAL_FILES)
2150            -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
2151  CLEAN:  CLEAN:
2152          @make Clean          @make Clean
2153          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2154          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2155          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2156          -rm -f \$(EXECUTABLE)          -rm -f \$(EXECUTABLE) output.txt STD*
2157    
2158    #eh3 Makefile: makefile
2159  makefile:  makefile:
2160          ${0} $@          $THIS_SCRIPT $G2ARGS
2161  cleanlinks:  cleanlinks:
2162          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2163    
2164  # The normal chain of rules is (  .F - .f - .o  )  # Special targets (SPECIAL_FILES) which are create by make
2165  .F.f:  ${PACKAGES_DOT_H}:
2166            @echo Creating \$@ ...
2167            @$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) > \$@
2168    AD_CONFIG.h:
2169            @echo Creating \$@ ...
2170            @$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 > \$@
2171    FC_NAMEMANGLE.h:
2172            @echo Creating \$@ ...
2173            echo "$FC_NAMEMANGLE" > \$@
2174    
2175    BUILD_INFO.h:
2176            @echo Creating \$@ ...
2177    EOF
2178    
2179    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2180    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2181    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2182    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2183    
2184    cat >>$MAKEFILE <<EOF
2185    
2186    # The normal chain of rules is (  .F - .$FS - .o  )
2187    
2188    ## This nullifies any default implicit rules concerning these two file types:
2189    ## %.o : %.F
2190    
2191    .F.$FS:
2192          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2193  .f.o:  .$FS.o:
2194          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2195  .F90.f90:  .F90.$FS90:
2196          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2197  .f90.o:  .$FS90.o:
2198          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2199  .c.o:  .c.o:
2200          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
2201    
2202  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2203  .F.p:  .F.p:
2204          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2205  .p.f:  .p.$FS:
2206          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2207    
2208    #=========================================
2209    #===  Automatic Differentiation Rules  ===
2210    
2211    TAMC           = ${TAMC}
2212    TAF            = ${TAF}
2213    
2214    TAF_EXTRA      = ${TAF_EXTRA}
2215    TAMC_EXTRA     = ${TAMC_EXTRA}
2216    
2217    EOF
2218    
2219    ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
2220    ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
2221    ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2222    for i in $ad_vars ; do
2223        name=$i
2224        t1="t2=\$"`echo $i`
2225        eval $t1
2226        printf "%-20s = " $name >> $MAKEFILE
2227        echo $t2 >> $MAKEFILE
2228    done
2229    
2230    echo "  Add the source list for AD code generation"
2231    echo >> $MAKEFILE
2232    printf "AD_FILES = " >> $MAKEFILE
2233    AD_FILES=`cat ad_files`
2234    for i in $AD_FILES ; do
2235        echo    " \\" >> $MAKEFILE
2236        printf " $i" >> $MAKEFILE
2237    done
2238    echo >> $MAKEFILE
2239    rm -f ad_files
2240    
2241    cat >>$MAKEFILE <<EOF
2242    
2243    # ... AD ...
2244    adall: ad_taf
2245    adtaf: ad_taf_output.$FS
2246    adtamc: ad_tamc_output.$FS
2247    
2248    ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2249            @$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
2250            cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2251            -rm -f ad_config.template
2252            @make \$(F77FILES)
2253            @make \$(AD_FLOW_FILES)
2254            cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2255    
2256    ad_taf_output.$FS: ad_input_code.$FS
2257            \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2258            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2259    
2260    adtafonly:
2261            \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2262            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2263    
2264    ad_taf: ad_taf_output.o \$(OBJFILES)
2265            \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2266    
2267    ad_tamc_output.$FS: ad_input_code.$FS
2268            \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2269            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2270    
2271    ad_tamc: ad_tamc_output.o \$(OBJFILES)
2272            \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2273    
2274    adonlyfwd:
2275            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2276    
2277    adtrick:
2278            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2279    
2280    # ... FTL ...
2281    ftlall: ftl_taf
2282    ftltaf: ftl_taf_output.$FS
2283    ftltamc: ftl_tamc_output.$FS
2284    
2285    ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2286            @$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
2287            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2288            -rm -f ftl_config.template
2289            @make \$(F77FILES)
2290            @make \$(AD_FLOW_FILES)
2291            cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2292    
2293    ftl_taf_output.$FS: ftl_input_code.$FS
2294            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2295            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2296    
2297    ftltafonly:
2298            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2299            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2300    
2301    ftl_taf: ftl_taf_output.o \$(OBJFILES)
2302            \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2303    
2304    ftl_tamc_output.$FS: ftl_input_code.$FS
2305            \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2306            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2307    
2308    ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2309            \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2310    
2311    
2312    # ... SVD ...
2313    svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2314            @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2315            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2316    svdall: svd_touch svd_taf
2317    
2318    svd_taf: \$(OBJFILES)
2319            \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2320    
2321            @echo "--->>> Only COMPILE svd code! <<<---"
2322            @echo "--->>> Assumes you previously <<<---"
2323            @echo "--->>> did make svdtaf        <<<---"
2324    
2325    svd_touch:
2326            @echo "--->>> Only COMPILE svd code! <<<---"
2327            @echo "--->>> Assumes you previously <<<---"
2328            @echo "--->>> did make svdtaf        <<<---"
2329            touch ad_taf_output.$FS ftl_taf_output.$FS
2330            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2331            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2332            @$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
2333            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2334            -rm -f ftl_config.template
2335    
2336    #=========================================
2337    
2338  EOF  EOF
2339    
2340  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
# Line 1043  for i in $KPPFILES ; do Line 2348  for i in $KPPFILES ; do
2348      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2349          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2350      fi      fi
2351      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2352  done  done
2353    
2354  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1053  for i in $NOOPTFILES ; do Line 2358  for i in $NOOPTFILES ; do
2358      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2359          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2360      fi      fi
2361      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2362      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2363  done  done
2364    
# Line 1066  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2371  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2371    
2372  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2373    
2374    # Create special header files
2375    $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"
2376    if test ! -f $PACKAGES_DOT_H ; then
2377        mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2378    else
2379        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2380        RETVAL=$?
2381        if test "x$RETVAL" = x0 ; then
2382            rm -f $PACKAGES_DOT_H".tmp"
2383        else
2384            mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2385            mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2386        fi
2387    fi
2388    if test ! -f AD_CONFIG.h ; then
2389        $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
2390    fi
2391    
2392    
2393  #  Write the "state" for future records  #  Write the "state" for future records
2394  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2395      echo -n "" > gm_state      printf "" > genmake_state
2396      for i in $gm_state ; do      for i in $gm_state ; do
2397          t1="t2=\$$i"          t1="t2=\$$i"
2398          eval $t1          eval $t1
2399          echo "$i='$t2'" >> gm_state          echo "$i='$t2'" >> genmake_state
2400      done      done
2401  fi  fi

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.133

  ViewVC Help
Powered by ViewVC 1.1.22