/[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.1 by edhill, Sat Aug 16 14:01:08 2003 UTC revision 1.121 by edhill, Tue Mar 22 19:45:03 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"
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  parse_options()  {      1) the command line (eg. "-optfile=path/to/OPTFILE"), or
387        2) the MITGCM_OF environment variable.
388    
389      ac_prev=    If you need help, please contact the developers at <MITgcm-support@mitgcm.org>.
390      for ac_option in "${OPTIONS[@]}" ; do  
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    
         # echo "ac_option = :$ac_option:"  
           
         # If the previous option needs an argument, assign it.  
         if test -n "$ac_prev"; then  
             eval "$ac_prev=\$ac_option"  
             ac_prev=  
             continue  
         fi  
           
         ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`  
           
         case $ac_option in  
               
             -help | --help | -h | --h)  
                 usage ;;  
               
             -nooptfile | --nooptfile)  
                 OPTFILE="NONE" ;;  
             -optfile | --optfile | -of | --of)  
                 ac_prev=optfile ;;  
             -optfile=* | --optfile=* | -of=* | --of=*)  
                 OPTFILE=$ac_optarg ;;  
               
             -pdepend | --pdepend)  
                 ac_prev=pdepend ;;  
             -pdepend=* | --pdepend=*)  
                 PDEPEND=$ac_optarg ;;  
               
             -pdefault | --pdefault)  
                 ac_prev=pdefault ;;  
             -pdefault=* | --pdefault=*)  
                 PDEFAULT=$ac_optarg ;;  
               
             -makefile | -ma)  
                 ac_prev=makefile ;;  
             --makefile=* | -ma=*)  
                 MAKEFILE=$ac_optarg ;;  
               
             -platform | --platform | -pl | --pl)  
                 ac_prev=platform ;;  
             -platform=* | --platform=* | -pl=* | --pl=*)  
                 PLATFORM=$ac_optarg ;;  
   
             -rootdir | --rootdir | -rd | --rd)  
                 ac_prev=rootdir ;;  
             -rootdir=* | --rootdir=* | -rd=* | --rd=*)  
                 ROOTDIR=$ac_optarg ;;  
               
             -mods | --mods | -mo | --mo)  
                 ac_prev=mods ;;  
             -mods=* | --mods=* | -mo=* | --mo=*)  
                 MODS=$ac_optarg ;;  
               
             -disable | --disable)  
                 ac_prev=disable ;;  
             -disable=* | --disable=*)  
                 DISABLE=$ac_optarg ;;  
               
             -enable | --enable)  
                 ac_prev=enable ;;  
             -enable=* | --enable=*)  
                 ENABLE=$ac_optarg ;;  
               
             -noopt | --noopt)  
                 ac_prev=noopt ;;  
             -noopt=* | --noopt=*)  
                 NOOPT=$ac_optarg ;;  
               
 #           -cpp | --cpp)  
 #               ac_prev=cpp ;;  
 #           -cpp=* | --cpp=*)  
 #               CPP=$ac_optarg ;;  
               
             -fortran | --fortran | -fc | --fc)  
                 ac_prev=fc ;;  
             -fc=* | --fc=*)  
                 FC=$ac_optarg ;;  
               
             -ieee | --ieee)  
                 IEEE=1 ;;  
             -noieee | --noieee)  
                 IEEE=0 ;;  
               
             -mpi | --mpi)  
                 MPI=1 ;;  
             -nompi | --nompi)  
                 MPI=0 ;;  
               
             -jam | --jam)  
                 JAM=1 ;;  
             -nojam | --nojam)  
                 JAM=0 ;;  
               
             -*)  
                 echo "Error: unrecognized option: "$ac_option  
                 usage  
                 ;;  
               
             *)  
                 echo "Error: unrecognized argument: "$ac_option  
                 usage  
                 ;;  
               
         esac  
           
     done  
424  }  }
425    
426  #  Parse the package dependency information  #  Parse the package dependency information
# Line 199  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:"$'\n'  Usage: "$0" [OPTIONS]
446      echo "    -help | --help | -h | --h"    where [OPTIONS] can be:
447      echo "    -nooptfile | --nooptfile"  
448      echo "      -optfile NAME | --optfile NAME | -of NAME | --of NAME"      -help | --help | -h | --h
449      echo "      -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME"            Print this help message and exit.
450      echo "    -pdepend NAME | --pdepend NAME"  
451      echo "      -pdepend=NAME | --pdepend=NAME"      -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
452      echo "    -pdefault NAME | --pdefault 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 "    -makefile NAME | -ma NAME"            "tools/adjoint_options/adjoint_default" will be used.
455      echo "      --makefile=NAME | -ma=NAME"  
456      echo "    -platform NAME | --platform NAME | -pl NAME | --pl NAME"      -nooptfile | --nooptfile
457      echo "      -platform=NAME | --platform=NAME | -pl=NAME | --pl=NAME"        -optfile NAME | --optfile NAME | -of NAME | --of NAME
458      echo "    -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME"        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
459      echo "      -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME"            Use "NAME" as the optfile.  By default, an attempt will be
460      echo "    -mods NAME | --mods NAME | -mo NAME | --mo NAME"            made to find an appropriate "standard" optfile in the
461      echo "      -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME"            tools/build_options/ directory.
462      echo "    -disable NAME | --disable NAME"  
463      echo "      -disable=NAME | --disable=NAME"      -pdepend NAME | --pdepend NAME
464      echo "    -enable NAME | --enable NAME"        -pdepend=NAME | --pdepend=NAME
465      echo "      -enable=NAME | --enable=NAME"            Get package dependency information from "NAME".
466      echo "    -noopt NAME | --noopt NAME"  
467      echo "      -noopt=NAME | --noopt=NAME"      -pdefault NAME | --pdefault NAME
468  #    echo "    -cpp NAME | --cpp NAME"        -pdefault=NAME | --pdefault=NAME
469  #    echo "      -cpp=NAME | --cpp=NAME"            Get the default package list from "NAME".
470      echo "    -fortran NAME | --fortran NAME | -fc NAME | --fc NAME"  
471      echo "      -fc=NAME | --fc=NAME"      -make NAME | -m NAME
472      echo "    -[no]ieee | --[no]ieee"        --make=NAME | -m=NAME
473      echo "    -[no]mpi | --[no]mpi"            Use "NAME" for the MAKE program. The default is "make" but
474      echo "    -[no]jam | --[no]jam"$'\n'            many platforms, "gmake" is the preferred choice.
475      echo "  and NAME is a string such as:"$'\n'  
476      echo "    --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'"      -makefile NAME | -mf NAME
477      echo "    -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'"        --makefile=NAME | -mf=NAME
478      echo "    -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'"$'\n'            Call the makefile "NAME".  The default is "Makefile".
479      echo "  which, depending upon your shell, may need to be single-quoted"  
480      echo "  if it contains spaces, dashes, or other special characters."      -makedepend NAME | -md NAME
481          --makedepend=NAME | -md=NAME
482              Use "NAME" for the MAKEDEPEND program.
483    
484        -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
485          -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
486              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        -mpi | --mpi
531              Include MPI header files and link to MPI libraries
532        -mpi=PATH | --mpi=PATH
533              Include MPI header files and link to MPI libraries using MPI_ROOT
534              set to PATH. i.e. Include files from \$PATH/include, link to libraries
535              from \$PATH/lib and use binaries from \$PATH/bin.
536    
537        -bash NAME
538              Explicitly specify the Bourne or BASH shell to use
539    
540      While it is most often a single word, the "NAME" variables specified
541      above can in many cases be a space-delimited string such as:
542    
543        --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
544        -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'
545        -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
546    
547      which, depending upon your shell, may need to be single-quoted.
548    
549      For more detailed genmake documentation, please see:
550    
551        http://mitgcm.org/devel_HOWTO/
552    
553    EOF
554    
555      exit 1      exit 1
556  }  }
557    
558  # Dump all important state  #  Build a CPP macro to automate calling C routines from FORTRAN
559  dump_state()  {  get_fortran_c_namemangling()  {
560      fname=$1  
561      echo " " > $fname      #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
562      RETVAL=$?      if test ! "x$FC_NAMEMANGLE" = x ; then
563      if test "x${RETVAL}" = x ; then          return 0
564          echo "Error: cannot write to $fname"      fi
565          exit 1  
566      fi      default_nm="#define FC_NAMEMANGLE(X) X ## _"
567      echo "makefile "$makefile > $fname      
568  }      cat > genmake_test.c <<EOF
569    void tcall( char * string ) { tsub( string ); }
570    EOF
571        $MAKE genmake_test.o >> genmake_warnings 2>&1
572        RETVAL=$?
573        if test "x$RETVAL" != x0 ; then
574            FC_NAMEMANGLE=$default_nm
575            cat <<EOF>> genmake_errors
576    
577    WARNING: C test compile fails
578    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
579    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
580    EOF
581            return 1
582        fi
583        c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
584        RETVAL=$?
585        if test "x$RETVAL" != x0 ; then
586            FC_NAMEMANGLE=$default_nm
587            cat <<EOF>> genmake_warnings
588    
589    WARNING: The "nm" command failed.
590    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
591    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
592    EOF
593            return 1
594        fi
595        cat > genmake_tcomp.$FS <<EOF
596          subroutine tcall( string )
597          character*(*) string
598          call tsub( string )
599          end
600    EOF
601        $FC $FFLAGS $DEFINES -c genmake_tcomp.$FS >> genmake_warnings 2>&1
602        RETVAL=$?
603        if test "x$RETVAL" != x0 ; then
604            FC_NAMEMANGLE=$default_nm
605            cat <<EOF>> genmake_warnings
606    
607    WARNING: FORTRAN test compile fails -- please see "genmake_errors"
608    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
609    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
610    EOF
611            return 1
612        fi
613        f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
614        RETVAL=$?
615        if test "x$RETVAL" != x0 ; then
616            FC_NAMEMANGLE=$default_nm
617            cat <<EOF>> genmake_warnings
618    
619    WARNING: The "nm" command failed.
620    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
621    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
622    EOF
623            return 1
624        fi
625    
626        c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
627        f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
628        c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
629        f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
630    
631        nmangle="X"
632        if test "x$c_a" != "x$f_a" ; then
633            comm="echo x$f_a | sed -e 's|x$c_a||'"
634            a=`eval $comm`
635            nmangle="$a ## $nmangle"
636        fi
637        if test "x$c_b" != "x$f_b" ; then
638            comm="echo x$f_b | sed -e 's|x$c_b||'"
639            b=`eval $comm`
640            nmangle="$nmangle ## $b"
641        fi
642    
643        FC_NAMEMANGLE="#define FC_NAMEMANGLE(X)  $nmangle"
644    
645        #  cleanup the testing files
646        rm -f genmake_tcomp.* genmake_test.*
647    }
648    
649    
650    check_HAVE_CLOC()  {
651        get_fortran_c_namemangling
652        cat <<EOF > genmake_tc_1.c
653    $FC_NAMEMANGLE
654    #include <stdio.h>
655    #include <stdlib.h>
656    #include <unistd.h>
657    #include <assert.h>
658    #include <sys/time.h>
659    void FC_NAMEMANGLE(cloc) ( double *curtim )
660    {
661     struct timeval tv1;
662     gettimeofday(&tv1 , (void *)NULL );
663     *curtim =  (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
664     *curtim = *curtim/1.E6;
665    }
666    EOF
667        make genmake_tc_1.o >> genmake_warnings 2>&1
668        RET_C=$?
669        cat <<EOF > genmake_tc_2.$FS
670          program hello
671          Real*8 wtime
672          external cloc
673          call cloc(wtime)
674          print *," HELLO WORLD", wtime
675          end program hello
676    EOF
677        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
678        RET_F=$?
679        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
680        RETVAL=$?
681        if test "x$RETVAL" = x0 ; then
682            HAVE_CLOC=t
683            DEFINES="$DEFINES -DHAVE_CLOC"
684        fi
685        rm -f genmake_tc*
686    }
687    
688    
689    check_HAVE_STAT()  {
690        get_fortran_c_namemangling
691        cat <<EOF > genmake_tc_1.c
692    $FC_NAMEMANGLE
693    #include <stdio.h>
694    #include <stdlib.h>
695    #include <unistd.h>
696    #include <sys/stat.h>
697    #include <sys/types.h>
698    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
699    {
700        char name[512];
701        struct stat astat;
702    
703        name[0] = 'a'; name[1] = '\0';
704        if (! stat(name, &astat))
705            *nbyte = (int)(astat.st_size);
706        else
707            *nbyte = -1;
708    }
709    EOF
710        make genmake_tc_1.o >> genmake_tc.log 2>&1
711        RET_C=$?
712        cat <<EOF > genmake_tc_2.$FS
713          program hello
714          integer nbyte
715          call tfsize(nbyte)
716          print *," HELLO WORLD", nbyte
717          end program hello
718    EOF
719        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_tc.log 2>&1
720        RET_F=$?
721        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1
722        RETVAL=$?
723        if test "x$RETVAL" = x0 ; then
724            HAVE_STAT=t
725            DEFINES="$DEFINES -DHAVE_STAT"
726        fi
727        rm -f genmake_tc*
728    }
729    
730    
731    check_netcdf_libs()  {
732        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
733            return
734        fi
735        echo "" > genmake_tnc.log
736        cat <<EOF > genmake_tnc.F
737          program fgennc
738    #include "netcdf.inc"
739    EOF
740        if test ! "x$MPI" = x ; then
741            echo '#include "mpif.h"' >> genmake_tnc.F
742        fi
743        cat <<EOF >> genmake_tnc.F
744          integer iret, ncid, xid
745          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
746          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
747          iret = nf_def_dim(ncid, 'X', 11, xid)
748          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
749          iret = nf_close(ncid)
750          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
751          end
752    EOF
753        echo "Executing:" > genmake_tnc.log
754        echo "  $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS" \
755            > genmake_tnc.log
756        RET_CPP=f
757        $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
758            &&  RET_CPP=t
759        if test "x$RET_CPP" = xf ; then
760            echo "  WARNING: CPP failed to pre-process the netcdf test." \
761                > genmake_tnc.log
762            echo "    Please check that \$INCLUDES is properly set." \
763                > genmake_tnc.log
764        fi
765        echo "Executing:" > genmake_tnc.log
766        echo "  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS" > genmake_tnc.log
767        echo "  $LINK -o genmake_tnc.o $LIBS" > genmake_tnc.log
768        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
769            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
770        RET_COMPILE=$?
771    
772        #EH3  Remove test program execution for machines that either disallow
773        #EH3  execution or cannot support it (eg. cross-compilers)
774        #EH3
775        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
776        #EH3 RETVAL=$?
777        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
778    
779        if test "x$RET_COMPILE" = x0 ; then
780            HAVE_NETCDF=t
781        else
782            # try again with "-lnetcdf" added to the libs
783            $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
784                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
785                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
786            RET_COMPILE=$?
787            if test "x$RET_COMPILE" = x0 ; then
788                LIBS="$LIBS -lnetcdf"
789                HAVE_NETCDF=t
790            else
791                cat genmake_tnc.log >> genmake_warnings
792            fi
793        fi
794        rm -f genmake_tnc*
795    }
796    
797    
798    
799    ###############################################################################
800    #   Sequential part of script starts here
801    ###############################################################################
802    
803    #  Set defaults here
804    COMMANDL="$0 $@"
805    
806    PLATFORM=
807    LN=
808    S64=
809    KPP=
810    #FC=
811    #CC=gcc
812    #CPP=
813    LINK=
814    DEFINES=
815    PACKAGES=
816    ENABLE=
817    DISABLE=
818    # MAKEFILE=
819    # MAKEDEPEND=
820    PDEPEND=
821    DUMPSTATE=t
822    PDEFAULT=
823    OPTFILE=
824    INCLUDES="-I. $INCLUDES"
825    FFLAGS=
826    FOPTIM=
827    CFLAGS=
828    KFLAGS1=
829    KFLAGS2=
830    #LDADD=
831    LIBS=
832    KPPFILES=
833    NOOPTFILES=
834    NOOPTFLAGS=
835    MPI=
836    MPIPATH=
837    
838    # DEFINES checked by test compilation
839    HAVE_SYSTEM=
840    HAVE_FDATE=
841    FC_NAMEMANGLE=
842    HAVE_CLOC=
843    HAVE_STAT=
844    HAVE_NETCDF=
845    HAVE_ETIME=
846    
847    MODS=
848    TOOLSDIR=
849    SOURCEDIRS=
850    INCLUDEDIRS=
851    STANDARDDIRS="USE_THE_DEFAULT"
852    
853    G2ARGS=
854    BASH=
855    PWD=`pwd`
856    test "x$MAKE" = x  &&  MAKE=make
857    test "x$AWK" = x   &&  AWK=awk
858    THISHOST=`hostname`
859    THISCWD=`pwd`
860    THISDATE=`date`
861    THISUSER=`echo $USER`
862    THISVER=
863    MACHINE=`uname -a`
864    EXECUTABLE=
865    EXEHOOK=
866    EXEDIR=
867    PACKAGES_CONF=
868    IEEE=
869    if test "x$MITGCM_IEEE" != x ; then
870        IEEE=$MITGCM_IEEE
871    fi
872    FS=
873    FS90=
874    
875    AUTODIFF_PKG_USED=f
876    AD_OPTFILE=
877    TAF=
878    AD_TAF_FLAGS=
879    FTL_TAF_FLAGS=
880    SVD_TAF_FLAGS=
881    TAF_EXTRA=
882    TAMC=
883    AD_TAMC_FLAGS=
884    FTL_TAF_FLAGS=
885    SVD_TAMC_FLAGS=
886    TAMC_EXTRA=
887    
888    
889    #  The following state can be set directly by command-line switches
890    gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
891    gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
892    
893    #  The following state is not directly set by command-line switches
894    gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
895    gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
896    gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
897    gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
898    gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
899    
900    #  The following are all related to adjoint/tangent-linear stuff
901    gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
902    gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
903    gm_s12="TAF_EXTRA TAMC_EXTRA"
904    
905    gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
906    gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
907    
908    cat <<EOF
909    
910    GENMAKE :
911    
912    A program for GENerating MAKEfiles for the MITgcm project.  For a
913    quick list of options, use "genmake -h" or for more detail see:
914    
915      http://mitgcm.org/devel_HOWTO/
916    
917    EOF
918    
919    echo "===  Processing options files and arguments  ==="
920    gm_local="genmake_local"
921    for i in . $MODS ; do
922        if test -r $i/$gm_local ; then
923            . $i/$gm_local
924            break
925        fi
926    done
927    printf "  getting local config information:  "
928    if test -f $gm_local ; then
929        echo "using $gm_local"
930        . $gm_local
931        # echo "DISABLE=$DISABLE"
932        # echo "ENABLE=$ENABLE"
933    else
934        echo "none found"
935    fi
936    
937    #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
938    #OPTIONS=
939    #n=0
940    #for i ; do
941    #   echo "$i  $n"
942    #   setvar="OPTIONS[$n]='$i'"
943    #   #  echo "  $setvar"
944    #   eval "$setvar"
945    #   n=$(( $n + 1 ))
946    #done
947    #parse_options
948    ac_prev=
949    for ac_option in "$@" ; do
950    
951        G2ARGS="$G2ARGS \"$ac_option\""
952    
953        # If the previous option needs an argument, assign it.
954        if test -n "$ac_prev"; then
955            eval "$ac_prev=\$ac_option"
956            ac_prev=
957            continue
958        fi
959        
960        ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
961        
962        case $ac_option in
963            
964            -help | --help | -h | --h)
965                usage ;;
966            
967            -nooptfile | --nooptfile)
968                OPTFILE="NONE" ;;
969            -optfile | --optfile | -of | --of)
970                ac_prev=OPTFILE ;;
971            -optfile=* | --optfile=* | -of=* | --of=*)
972                OPTFILE=$ac_optarg ;;
973            
974            -adoptfile | --adoptfile | -adof | --adof)
975                ac_prev=AD_OPTFILE ;;
976            -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
977                AD_OPTFILE=$ac_optarg ;;
978            
979            -pdepend | --pdepend)
980                ac_prev=PDEPEND ;;
981            -pdepend=* | --pdepend=*)
982                PDEPEND=$ac_optarg ;;
983            
984            -pdefault | --pdefault)
985                ac_prev=PDEFAULT ;;
986            -pdefault=* | --pdefault=*)
987                PDEFAULT=$ac_optarg ;;
988            
989            -make | --make | -m | --m)
990                ac_prev=MAKE ;;
991            -make=* | --make=* | -m=* | --m=*)
992                MAKE=$ac_optarg ;;
993            
994            -bash | --bash)
995                ac_prev=BASH ;;
996            -bash=* | --bash=*)
997                BASH=$ac_optarg ;;
998            
999            -makedepend | --makedepend | -md | --md)
1000                ac_prev=MAKEDEPEND ;;
1001            -makedepend=* | --makedepend=* | -md=* | --md=*)
1002                MAKEDEPEND=$ac_optarg ;;
1003            
1004            -makefile | --makefile | -ma | --ma)
1005                ac_prev=MAKEFILE ;;
1006            -makefile=* | --makefile=* | -ma=* | --ma=*)
1007                MAKEFILE=$ac_optarg ;;
1008            
1009            -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
1010                echo "ERROR: The platform option has been removed.  Please specify"
1011                echo "  the build options using the \"optfile\" mechanism."
1012                echo
1013                usage
1014                ;;
1015            
1016            -rootdir | --rootdir | -rd | --rd)
1017                ac_prev=ROOTDIR ;;
1018            -rootdir=* | --rootdir=* | -rd=* | --rd=*)
1019                ROOTDIR=$ac_optarg ;;
1020            
1021            -mods | --mods | -mo | --mo)
1022                ac_prev=MODS ;;
1023            -mods=* | --mods=* | -mo=* | --mo=*)
1024                MODS=$ac_optarg ;;
1025            
1026            -disable | --disable)
1027                ac_prev=DISABLE ;;
1028            -disable=* | --disable=*)
1029                DISABLE=$ac_optarg ;;
1030            
1031            -enable | --enable)
1032                ac_prev=ENABLE ;;
1033            -enable=* | --enable=*)
1034                ENABLE=$ac_optarg ;;
1035            
1036            -standarddirs | --standarddirs)
1037                ac_prev=STANDARDDIRS ;;
1038            -standarddirs=* | --standarddirs=*)
1039                STANDARDDIRS=$ac_optarg ;;
1040    
1041    #           -cpp | --cpp)
1042    #               ac_prev=cpp ;;
1043    #           -cpp=* | --cpp=*)
1044    #               CPP=$ac_optarg ;;
1045            
1046            -cc | --cc)
1047                ac_prev=CC ;;
1048            -cc=* | --cc=*)
1049                CC=$ac_optarg ;;
1050            
1051            -fortran | --fortran | -fc | --fc)
1052                ac_prev=FC ;;
1053            -fc=* | --fc=*)
1054                FC=$ac_optarg ;;
1055            
1056            -fs | --fs)
1057                ac_prev=FS ;;
1058            -fs=* | --fs=*)
1059                FS=$ac_optarg ;;
1060            
1061            -fs90 | --fs90)
1062                ac_prev=FS90 ;;
1063            -fs90=* | --fs90=*)
1064                FS90=$ac_optarg ;;
1065            
1066            -ieee | --ieee)
1067                IEEE=true ;;
1068            -noieee | --noieee)
1069                IEEE= ;;
1070    
1071            -mpi | --mpi)
1072                MPI=true ;;
1073            -mpi=* | --mpi=*)
1074                MPIPATH=$ac_optarg
1075                MPI=true ;;
1076            
1077    #       -jam | --jam)
1078    #           JAM=1 ;;
1079    #       -nojam | --nojam)
1080    #           JAM=0 ;;
1081            
1082            -ds | --ds)
1083                DUMPSTATE=t ;;
1084            
1085            -taf_extra | --taf_extra)
1086                ac_prev=TAF_EXTRA ;;
1087            -taf_extra=* | --taf_extra=*)
1088                TAF_EXTRA=$ac_optarg ;;
1089    
1090            -tamc_extra | --tamc_extra)
1091                ac_prev=TAMC_EXTRA ;;
1092            -tamc_extra=* | --tamc_extra=*)
1093                TAMC_EXTRA=$ac_optarg ;;
1094    
1095            -*)
1096                echo "Error: unrecognized option: "$ac_option
1097                usage
1098                ;;
1099            
1100            *)
1101                echo "Error: unrecognized argument: "$ac_option
1102                usage
1103                ;;
1104            
1105        esac
1106        
1107    done
1108    
1109    
1110    if test -f ./.genmakerc ; then
1111        echo
1112        echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1113        echo "  file.  This file format is no longer supported.  Please see:"
1114        echo
1115        echo "    http://mitgcm.org/devel_HOWTO/"
1116        echo
1117        echo "  for directions on how to setup and use the new \"genmake2\" input"
1118        echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."
1119        echo
1120    fi
1121    
1122    #  Find the MITgcm ${ROOTDIR}
1123    if test "x${ROOTDIR}" = x ; then
1124        tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1125        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1126            ROOTDIR=".."
1127        else
1128            for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1129                if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1130                    ROOTDIR=$d
1131                    printf "Warning:  ROOTDIR was not specified but there appears to be"
1132                    echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1133                    break
1134                fi
1135            done
1136        fi
1137    fi
1138    if test "x${ROOTDIR}" = x ; then
1139        echo "Error: Cannot determine ROOTDIR for MITgcm code."
1140        echo "  Please specify a ROOTDIR using either an options "
1141        echo "  file or a command-line option."
1142        exit 1
1143    fi
1144    if test ! -d ${ROOTDIR} ; then
1145        echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!"
1146        exit 1
1147    fi
1148    
1149    #  Find the MITgcm ${THISVER}
1150    if test -f "${ROOTDIR}/doc/tag-index" ; then
1151        THISVER=`grep checkpoint ${ROOTDIR}/doc/tag-index | head -1`
1152    fi
1153    
1154    if test "x$MAKEFILE" = x ; then
1155        MAKEFILE="Makefile"
1156    fi
1157    
1158    echo "  getting OPTFILE information:  "
1159    if test "x${OPTFILE}" = x ; then
1160        if test "x$MITGCM_OF" = x ; then
1161            echo "Warning: no OPTFILE specified so we'll look for possible settings"
1162            printf "\n===  Searching for possible settings for OPTFILE  ===\n"
1163            find_possible_configs
1164        else
1165            OPTFILE=$MITGCM_OF
1166        fi
1167    fi
1168    if test "x$OPTFILE" != xNONE ; then
1169        if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1170            echo "    using OPTFILE=\"$OPTFILE\""
1171            . "$OPTFILE"
1172            RETVAL=$?
1173            if test "x$RETVAL" != x0 ; then
1174                printf "Error: failed to source OPTFILE \"$OPTFILE\""
1175                echo "--please check that variable syntax is bash-compatible"
1176                exit 1
1177            fi
1178            if test "x$DUMPSTATE" != xf ; then
1179                cp -f $OPTFILE "genmake_optfile"
1180            fi
1181        else
1182            echo "Error: can't read OPTFILE=\"$OPTFILE\""
1183            exit 1
1184        fi
1185    fi
1186    
1187    echo "  getting AD_OPTFILE information:  "
1188    if test "x${AD_OPTFILE}" = x ; then
1189        if test "x$MITGCM_AD_OF" = x ; then
1190            AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
1191        else
1192            AD_OPTFILE=$MITGCM_AD_OF
1193        fi
1194    fi
1195    if test "x${AD_OPTFILE}" != xNONE ; then
1196        if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1197            echo "    using AD_OPTFILE=\"$AD_OPTFILE\""
1198            . "$AD_OPTFILE"
1199            RETVAL=$?
1200            if test "x$RETVAL" != x0 ; then
1201                printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1202                echo "--please check that variable syntax is bash-compatible"
1203                exit 1
1204            fi
1205            if test "x$DUMPSTATE" != xf ; then
1206                cp -f $AD_OPTFILE "genmake_ad_optfile"
1207            fi
1208        else
1209            echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\""
1210            exit 1
1211        fi
1212    fi
1213    
1214    #====================================================================
1215    #  Set default values if not set by the optfile
1216    #
1217    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1218    #  either set defaults or complain and abort!
1219    if test ! "x$BASH" = x ; then
1220        # add a trailing space so that it works within the Makefile syntax (see below)
1221        BASH="$BASH "
1222    fi
1223    if test "x$FC" = x ; then
1224        cat <<EOF 1>&2
1225    
1226    Error: no Fortran compiler: please specify using one of the following:
1227      1) within the options file ("FC=...") as specified by "-of=OPTFILE"
1228      2) the "-fc=XXX" command-line option
1229      3) the "./genmake_local" file
1230    EOF
1231        exit 1
1232    fi
1233    if test "x$CC" = x ; then
1234        CC=cc
1235    #     cat <<EOF 1>&2
1236    # Error: no C compiler: please specify using one of the following:
1237    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1238    #   2) the "-cc=XXX" command-line option
1239    #   3) the "./genmake_local" file
1240    # EOF
1241    #     exit 1
1242    fi
1243    if test "x$LINK" = x ; then
1244        LINK=$FC
1245    fi
1246    if test "x$MAKE" = x ; then
1247        MAKE="make"
1248    fi
1249    if test "x$CPP" = x ; then
1250        CPP=cpp
1251    fi
1252    #EH3 === UGLY ===
1253    #  The following is an ugly little hack to check for $CPP in /lib/ and
1254    #  it should eventually be replaced with a more general function that
1255    #  searches a combo of the user's path and a list of "usual suspects"
1256    #  to find the correct location for binaries such as $CPP.
1257    for i in " " "/lib/" ; do
1258        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1259    done
1260    #EH3 === UGLY ===
1261    echo "#define A a" | $CPP > test_cpp 2>&1
1262    RETVAL=$?
1263    if test "x$RETVAL" != x0 ; then
1264        cat <<EOF 1>&2
1265    
1266    Error: C pre-processor "$CPP" failed the test case: please specify using:
1267    
1268      1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
1269      2) the "./genmake_local" file
1270      3) with the CPP environment variable
1271    
1272    EOF
1273        exit 1
1274    else
1275        rm -f test_cpp
1276    fi
1277    look_for_makedepend
1278    if test "x$LN" = x ; then
1279        LN="ln -s"
1280    fi
1281    echo "test" > genmake_test_ln
1282    $LN genmake_test_ln genmake_tlink
1283    RETVAL=$?
1284    if test "x$RETVAL" != x0 ; then
1285        cat <<EOF 1>&2
1286    
1287    Error: The command "ln -s" failed -- please specify a working soft-link
1288      command in the optfile.
1289    
1290    EOF
1291        exit 1
1292    fi
1293    rm -f genmake_test_ln genmake_tlink
1294    
1295    #  Check for broken *.F/*.f handling and fix if possible
1296    check_for_broken_Ff
1297    
1298  #eh3 # This is the generic configuration.  if test ! "x$MPI" = x ; then
1299  #eh3 set LN         = ( 'ln -s' )        echo "  Turning on MPI cpp macros"
1300  #eh3 set CPP        = ( '/lib/cpp -P' )        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1301  #eh3 set S64        = ( '$(TOOLSDIR)/set64bitConst.sh' )  fi
 #eh3 set KPP        = (  )  
 #eh3 set FC         = ( 'f77' )  
 #eh3 set LINK       = $FC  
 #eh3 set MAKEDEPEND = ( 'makedepend' )  
 #eh3 set INCLUDES   = ( -I. )  
 #eh3 set FFLAGS     = (  )  
 #eh3 set FOPTIM     = (  )  
 #eh3 set CFLAGS     = (  )  
 #eh3 set KFLAGS1    = (  )  
 #eh3 set KFLAGS2    = (  )  
 #eh3 set LIBS       = (  )  
 #eh3 set KPPFILES   = (  )  
 #eh3 if (! $?NOOPTFILES ) set NOOPTFILES = (  )  
 #eh3 if (! $?NOOPTFLAGS ) set NOOPTFLAGS = (  )  
1302    
1303  #  Set defaults here  printf "\n===  Checking system libraries  ===\n"
1304  PLATFORM=  printf "  Do we have the system() command using $FC...  "
1305  LN=  cat > genmake_tcomp.$FS <<EOF
1306  S64=        program hello
1307  KPP=        call system('echo hi')
1308  FC=        end
1309  LINK=  EOF
1310  PACKAGES=  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1311  ENABLE=  RETVAL=$?
1312  DISABLE=  if test "x$RETVAL" = x0 ; then
1313  MAKEFILE=      HAVE_SYSTEM=t
1314  MAKEDEPEND=      DEFINES="$DEFINES -DHAVE_SYSTEM"
1315  PDEPEND=      echo "yes"
1316  PDEFAULT=  else
1317  OPTFILE=      HAVE_SYSTEM=
1318  INCLUDES=-I.      echo "no"
1319  FFLAGS=  fi
1320  FOPTIM=  rm -f genmake_tcomp*
 CFLAGS=  
 KFLAGS1=  
 KFLAGS2=  
 LIBS=  
 KPPFILES=  
 NOOPTFILES=  
 NOOPTFLAGS=  
1321    
1322  MODS=  printf "  Do we have the fdate() command using $FC...  "
1323  TOOLSDIR=  cat > genmake_tcomp.$FS <<EOF
1324  SOURCEDIRS=        program hello
1325  INCLUDEDIRS=        CHARACTER(128) string
1326          string = ' '
1327          call fdate( string )
1328          print *, string
1329          end
1330    EOF
1331    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1332    RETVAL=$?
1333    if test "x$RETVAL" = x0 ; then
1334        HAVE_FDATE=t
1335        DEFINES="$DEFINES -DHAVE_FDATE"
1336        echo "yes"
1337    else
1338        HAVE_FDATE=
1339        echo "no"
1340    fi
1341    rm -f genmake_tcomp*
1342    
1343  PWD=`pwd`  printf "  Do we have the etime() command using $FC...  "
1344  MAKE=make  cat > genmake_tcomp.$FS <<EOF
1345  THISHOSTNAME=`hostname`        program hello
1346  THISCWD=`pwd`        REAL*4 ACTUAL, TARRAY(2)
1347  THISDATE=`date`        EXTERNAL ETIME
1348  MACHINE=`uname -a`        REAL*4 ETIME
1349          actual = etime( tarray )
1350          print *, tarray
1351          end
1352    EOF
1353    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1354    RETVAL=$?
1355    if test "x$RETVAL" = x0 ; then
1356        HAVE_ETIME=t
1357        DEFINES="$DEFINES -DHAVE_ETIME"
1358        echo "yes"
1359    else
1360        HAVE_ETIME=
1361        echo "no"
1362    fi
1363    rm -f genmake_tcomp*
1364    
1365  echo $'\n'"===  Processing options files and arguments  ==="  printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1366  gm_local="./gm_local"  check_HAVE_CLOC
1367  echo -n "  getting local config information:  "  if test "x$HAVE_CLOC" != x ; then
1368  if test -e $gm_local ; then      echo "yes"
     echo "using $gm_local"  
     source $gm_local  
     echo "DISABLE=$DISABLE"$'\n'"ENABLE=$ENABLE"  
1369  else  else
1370      echo "none found"      echo "no"
1371  fi  fi
1372    rm -f genmake_t*
1373    
1374  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  printf "  Can we use stat() through C calls...  "
1375  OPTIONS=()  check_HAVE_STAT
1376  n=0  if test "x$HAVE_STAT" != x ; then
1377  for i ; do      echo "yes"
1378     setvar="OPTIONS[$n]='$i'"  else
1379     #  echo "  $setvar"      echo "no"
1380     eval "$setvar"  fi
1381     n=$(( $n + 1 ))  rm -f genmake_t*
 done  
 parse_options  
1382    
1383  echo "  getting OPTFILE information:  "  printf "  Can we create NetCDF-enabled binaries...  "
1384  if test "x${OPTFILE}" = x ; then  check_netcdf_libs
1385      echo "Warning: no OPTFILE specified so we'll look for possible settings"  if test "x$HAVE_NETCDF" != x ; then
1386      echo $'\n'"===  Searching for possible settings for OPTFILE  ==="      echo "yes"
1387      find_possible_configs  else
1388  else      echo "no"
     if test "x$OPTFILE" = xNONE ; then  
         echo "    OPTFILE=NONE so we'll try to use default settings"  
     else  
         if test -f "$OPTFILE" -a -r "$OPTFILE" ; then  
             echo "    using OPTFILE=\"$OPTFILE\""  
             source "$OPTFILE"  
             RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 echo -n "Error: failed to source OPTFILE \"$OPTFILE\""  
                 echo "--please check that variable syntax is bash-compatible"  
                 exit 1  
             fi  
         else  
             echo "Error: can't read OPTFILE=\"$OPTFILE\""  
             exit 1  
         fi  
     fi  
1389  fi  fi
1390    
1391  echo $'\n'"===  Setting defaults  ==="  
1392  echo -n "  Adding MODS directories:  "  printf "\n===  Setting defaults  ===\n"
1393    printf "  Adding MODS directories:  "
1394  for d in $MODS ; do  for d in $MODS ; do
1395      if test ! -d $d ; then      if test ! -d $d ; then
1396          echo $'\n\n'"Error: MODS directory \"$d\" not found!"          echo
1397            echo "Error: MODS directory \"$d\" not found!"
1398          exit 1          exit 1
1399      else      else
1400          echo -n " $d"          printf " $d"
1401          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1402          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1403      fi      fi
1404  done  done
1405  echo  echo
1406    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1407  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1408      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1409  fi  fi
1410    
 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  
   
1411  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1412      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1413        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1414          EXEDIR=../exe          EXEDIR=../exe
1415      else      else
1416          EXEDIR=.          EXEDIR=.
# Line 430  if test "x${TOOLSDIR}" = x ; then Line 1425  if test "x${TOOLSDIR}" = x ; then
1425      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1426  fi  fi
1427  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1428      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1429      exit 1      exit 1
1430  fi  fi
1431    if test "x$S64" = x ; then
1432        echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1433        RETVAL=$?
1434        if test "x${RETVAL}" = x0 ; then
1435            S64='$(TOOLSDIR)/set64bitConst.sh'
1436        else
1437            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1438            RETVAL=$?
1439            if test "x${RETVAL}" = x0 ; then
1440                S64='$(TOOLSDIR)/set64bitConst.csh'
1441            else
1442                cat <<EOF
1443    
1444    ERROR: neither of the two default scripts:
1445    
1446        ${TOOLSDIR}/set64bitConst.sh
1447        ${TOOLSDIR}/set64bitConst.csh
1448    
1449      are working so please check paths or specify (with \$S64) a
1450      working version of this script.
1451    
1452    EOF
1453                exit 1
1454            fi
1455        fi
1456    fi
1457    THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1458    
1459  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1460    
# Line 441  EXECUTABLE=${EXECUTABLE:-mitgcmuv} Line 1463  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1463  #  they appear as regular source code  #  they appear as regular source code
1464  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1465      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1466      $MAKE -C $ROOTDIR"/eesupp/src/" > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1467      RETVAL=$?      RETVAL=$?
1468      if test "x${RETVAL}" == "x0" ; then      if test "x${RETVAL}" = x0 ; then
1469          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1470      else      else
1471          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1472          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1473          exit 1          exit 1
1474      fi      fi
1475  fi  fi
1476    
1477  echo $'\n'"===  Determining package settings  ==="  #same for exch2
1478    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1479        echo "  Making source files in exch2 from  templates"
1480        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1481        RETVAL=$?
1482        if test "x${RETVAL}" = x0 ; then
1483            rm -f make_exch2.errors
1484        else
1485            echo "Error: problem encountered while building source files in exch2:"
1486            cat make_exch2.errors 1>&2
1487            exit 1
1488        fi
1489    fi
1490    
1491    printf "\n===  Determining package settings  ===\n"
1492  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1493      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
1494      if test -r $tmp ; then      if test -r $tmp ; then
# Line 471  echo "  getting package dependency info Line 1507  echo "  getting package dependency info
1507  #  Strip the comments and then convert the dependency file into  #  Strip the comments and then convert the dependency file into
1508  #  two arrays: PNAME, DNAME  #  two arrays: PNAME, DNAME
1509  cat $PDEPEND | sed -e 's/#.*$//g' \  cat $PDEPEND | sed -e 's/#.*$//g' \
1510      | awk 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \      | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
1511      > ./.pd_tmp      > ./.pd_tmp
1512  RETVAL=$?  RETVAL=$?
1513  if test ! "x${RETVAL}" = x0 ; then  if test ! "x${RETVAL}" = x0 ; then
1514      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
1515      exit 1      exit 1
1516  fi  fi
1517  source ./.pd_tmp  . ./.pd_tmp
1518  rm -f ./.pd_tmp  rm -f ./.pd_tmp
1519    
1520  echo  -n "  checking default package list:  "  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1521    #  file should eventually be added so that, for convenience, one can
1522    #  specify groups of packages using names like "ocean" and "atmosphere".
1523    echo "  checking default package list:  "
1524    if test "x${PDEFAULT}" = x ; then
1525        for i in "." $MODS ; do
1526            if test -r $i"/packages.conf" ; then
1527                    PDEFAULT=$i"/packages.conf"
1528                    break
1529            fi
1530        done
1531    fi
1532  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1533      PDEFAULT="$ROOTDIR/pkg/pkg_default"      PDEFAULT="$ROOTDIR/pkg/pkg_default"
1534  fi  fi
1535  if test "x${PDEFAULT}" = xNONE ; then  if test "x${PDEFAULT}" = xNONE ; then
1536      echo "default packages file disabled"      echo "    default packages file disabled"
1537  else  else
1538      if test ! -r $PDEFAULT ; then      if test ! -r $PDEFAULT ; then
         echo ""  
1539          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""
1540      else      else
1541          echo "  using PDEFAULT=\"$PDEFAULT\""          echo "    using PDEFAULT=\"$PDEFAULT\""
1542          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1543          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | awk '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1544          RETVAL=$?          RETVAL=$?
1545          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1546              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1547              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1548              exit 1              exit 1
1549          fi          fi
1550          for i in $def ; do          for i in $def ; do
1551              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1552          done          done
1553          echo "    packages are:  $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1554            RET=1
1555            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1556            echo "    after group expansion packages are:  $PACKAGES"
1557      fi      fi
1558  fi  fi
1559    
1560  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1561    for i in $PACKAGES ; do
1562        echo $i >> ./.tmp_pack
1563    done
1564    for i in `grep  "-" ./.tmp_pack` ; do
1565        j=`echo $i | sed 's/[-]//'`
1566        DISABLE="$DISABLE $j"
1567    done
1568  pack=  pack=
1569  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1570      addit="t"      addit="t"
# Line 523  for p in $PACKAGES ; do Line 1579  for p in $PACKAGES ; do
1579  done  done
1580  PACKAGES="$pack"  PACKAGES="$pack"
1581  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1582  rm -f ./.tmp_pack  echo "" > ./.tmp_pack
1583  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1584    # Test if each explicitly referenced package exists
1585  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1586      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1587        if test ! -d "$ROOTDIR/pkg/$j" ; then
1588          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1589          exit 1          exit 1
1590      fi      fi
1591      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1592  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1593  PACKAGES=  PACKAGES=
1594  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1595      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1596  done  done
1597    rm -f ./.tmp_pack
1598  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1599    
1600    #  Check availability of NetCDF and then either build the MNC template
1601    #  files or delete mnc from the list of available packages.
1602    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1603    RETVAL=$?
1604    if test "x$RETVAL" = x0 ; then
1605        if test "x$HAVE_NETCDF" != xt ; then
1606            cat <<EOF
1607    
1608    *********************************************************************
1609    WARNING: the "mnc" package was enabled but tests failed to compile
1610      NetCDF applications.  Please check that:
1611    
1612      1) NetCDF is correctly installed for this compiler and
1613      2) the LIBS variable (within the "optfile") specifies the correct
1614           NetCDF library to link against.
1615    
1616      Due to this failure, the "mnc" package is now DISABLED.
1617    *********************************************************************
1618    
1619    EOF
1620            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1621            DISABLE="$DISABLE mnc"
1622        else
1623            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1624            RETVAL=$?
1625            if test "x${RETVAL}" = x0 ; then
1626                rm -f make_mnc.errors
1627            else
1628                echo "Error: problem encountered while building source files in pkg/mnc:"
1629                cat make_mnc.errors 1>&2
1630                exit 1
1631            fi
1632        fi
1633    fi
1634    
1635  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1636  ck=  ck=
1637  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
1638      i=0      i=0
1639      rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
1640        rtot=$nname
1641      while test $i -lt $rtot ; do      while test $i -lt $rtot ; do
1642    
1643          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
1644          pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
1645            tmp="pname=\"\$PNAME_$i\""
1646            eval $tmp
1647          pin="f"          pin="f"
1648          for p in $PACKAGES ; do          for p in $PACKAGES ; do
1649              if test "x$p" = "x$pname" ; then              if test "x$p" = "x$pname" ; then
# Line 557  while test "x$ck" != xtt ; do Line 1652  while test "x$ck" != xtt ; do
1652          done          done
1653    
1654          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
1655            tmp="dname=\"\$DNAME_$i\""
1656            eval $tmp
1657          plus="-"          plus="-"
1658          echo "${DNAME[$i]}" | grep '^+' > /dev/null 2>&1          echo $dname | grep '^+' > /dev/null 2>&1
1659          RETVAL=$?          RETVAL=$?
1660          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
1661              plus="+"              plus="+"
1662          fi          fi
1663    
1664          #  Is $dname in the current $PACKAGES list?          #  Is $dname in the current $PACKAGES list?
1665          dname=`echo ${DNAME[$i]} | sed -e 's/^[+-]//'`          dname=`echo $dname | sed -e 's/^[+-]//'`
1666          din="f"          din="f"
1667          for p in $PACKAGES ; do          for p in $PACKAGES ; do
1668              if test "x$p" = "x$dname" ; then              if test "x$p" = "x$dname" ; then
# Line 599  while test "x$ck" != xtt ; do Line 1696  while test "x$ck" != xtt ; do
1696              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1697              exit 1              exit 1
1698          fi          fi
1699          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1700            #i=$(( $i + 1 ))
1701      done      done
1702      ck=$ck"t"      ck=$ck"t"
1703  done  done
# Line 609  for i in $PACKAGES ; do Line 1707  for i in $PACKAGES ; do
1707      if test -d $adr ; then      if test -d $adr ; then
1708          SOURCEDIRS="$SOURCEDIRS $adr"          SOURCEDIRS="$SOURCEDIRS $adr"
1709          INCLUDEDIRS="$INCLUDEDIRS $adr"          INCLUDEDIRS="$INCLUDEDIRS $adr"
1710            if test "x$i" = xautodiff ; then
1711                AUTODIFF_PKG_USED=t
1712            fi
1713      else      else
1714          echo "Error: the directory \"$adr\" for package $i doesn't exist"          echo "Error: the directory \"$adr\" for package $i doesn't exist"
1715          exit 1          exit 1
1716      fi      fi
1717  done  done
1718    
1719  #  This is compatible with the old genmake.  The "DISABLE_*" flags  # Create a list of #define and #undef to enable/disable packages
1720  #  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  
1721  #  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
1722  #  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
1723  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
1724  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
1725  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
1726  all_pack=  all_pack=
1727    DISABLED_PACKAGES=
1728  for n in $names ; do  for n in $names ; do
1729      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1730          has_pack="f"          has_pack="f"
# Line 686  for n in $names ; do Line 1735  for n in $names ; do
1735              fi              fi
1736          done          done
1737          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1738              undef=`echo "ALLOW_$n" | awk '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1739              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!!!  
   
1740          fi          fi
1741      fi      fi
1742  done  done
1743  cat <<EOF >>CPP_OPTIONS.h.tmp  ENABLED_PACKAGES=
   
 C  Packages enabled by genmake:  
 EOF  
1744  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1745      def=`echo "ALLOW_$i" | awk '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1746      echo "#define $def" >> CPP_OPTIONS.h.tmp      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1747    #eh3 DEFINES="$DEFINES -D$def"
1748    
1749  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1750      case $i in      case $i in
1751          aim_v23)          aim_v23)
1752              echo "#define   ALLOW_AIM" >> CPP_OPTIONS.h.tmp              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1753                echo "Warning: ALLOW_AIM is set to enable aim_v23."
1754              ;;              ;;
1755      esac      esac
1756  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1757    
1758  done  done
 mv -f CPP_OPTIONS.h.tmp CPP_OPTIONS.h  
1759    
1760  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1761  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1762  STANDARDDIRS=${STANDARDDIRS:-"eesupp model"}  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1763  for d in $STANDARDDIRS ; do      STANDARDDIRS="eesupp model"
1764      adr="$ROOTDIR/$d/src"  fi
1765      if test ! -d $adr ; then  if test "x$STANDARDDIRS" != x ; then
1766          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""      for d in $STANDARDDIRS ; do
1767          echo "  is correct and that you correctly specified the STANDARDDIRS option"          adr="$ROOTDIR/$d/src"
1768          exit 1          if test ! -d $adr ; then
1769      else              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1770          SOURCEDIRS="$SOURCEDIRS $adr"              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1771      fi              exit 1
1772      adr="$ROOTDIR/$d/inc"          else
1773      if test ! -d $adr ; then              SOURCEDIRS="$SOURCEDIRS $adr"
1774          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          fi
1775          echo "  is correct and that you correctly specified the STANDARDDIRS option"          adr="$ROOTDIR/$d/inc"
1776          exit 1          if test ! -d $adr ; then
1777      else              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1778          INCLUDEDIRS="$INCLUDEDIRS $adr"              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1779                exit 1
1780            else
1781                INCLUDEDIRS="$INCLUDEDIRS $adr"
1782            fi
1783        done
1784    fi
1785    
1786    echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1787    echo "    of \"#define \"-type statements that are no longer allowed:"
1788    CPP_OPTIONS=
1789    CPP_EEOPTIONS=
1790    spaths=". $INCLUDEDIRS"
1791    names=`ls -1 "$ROOTDIR/pkg"`
1792    for i in $spaths ; do
1793        try="$i/CPP_OPTIONS.h"
1794        if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
1795            echo "    found CPP_OPTIONS=\"$try\""
1796            CPP_OPTIONS="$try"
1797            # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1798            for n in $names ; do
1799                test_for_package_in_cpp_options $CPP_OPTIONS $n
1800            done
1801        fi
1802        try="$i/CPP_EEOPTIONS.h"
1803        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1804            echo "    found CPP_EEOPTIONS=\"$try\""
1805            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1806    #**** not yet enabled ****
1807    #        test_for_mpi_in_cpp_eeoptions $try
1808    #**** not yet enabled ****
1809            CPP_EEOPTIONS="$try"
1810      fi      fi
1811  done  done
1812    if test "x$CPP_OPTIONS" = x ; then
1813        echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1814        exit 1
1815    fi
1816    
1817    #  Here, we build the list of files to be "run through" the adjoint
1818    #  compiler.
1819    if test -f ./ad_files ; then
1820        rm -f ./ad_files
1821    fi
1822    echo "  Creating the list of files for the adjoint compiler."
1823    for i in $SOURCEDIRS ; do
1824        list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
1825        for j in $list_files ; do
1826            cat $i/$j >> ad_files
1827        done
1828    done
1829    if test ! "x"$FS = "x.f" ; then
1830        cat ad_files | sed -e "s/\.f/$FS/g" > ad_files_f
1831        mv -f ad_files_f ad_files
1832    fi
1833    
1834  echo $'\n'"===  Creating the Makefile  ==="  echo
1835    echo "===  Creating the Makefile  ==="
1836  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1837  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1838      if test -d $i ; then      if test ! -d $i ; then
         INCLUDES="$INCLUDES -I$i"  
     else  
1839          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1840      fi      fi
1841  done  done
# Line 766  rm -rf .links.tmp Line 1845  rm -rf .links.tmp
1845  mkdir .links.tmp  mkdir .links.tmp
1846  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1847  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1848  echo -n 'SRCFILES = ' > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1849  echo -n 'CSRCFILES = ' > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1850  echo -n 'HEADERFILES = ' > hlist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1851  alldirs=". $SOURCEDIRS $INCLUDEDIRS"  printf 'HEADERFILES = ' > hlist.inc
1852    printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1853    alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1854  for d in $alldirs ; do  for d in $alldirs ; do
1855      deplist=      deplist=
1856      sfiles=`( cd $d; echo *.[h,c,F] )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
1857        sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
1858      for sf in $sfiles ; do      for sf in $sfiles ; do
1859          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1860              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1861                  extn=`echo $sf | awk -F '.' '{print $NF}'`                  case $d/$sf in
1862                  touch .links.tmp/$sf                    ./$PACKAGES_DOT_H)
1863                  deplist="$deplist $sf"                          ;;
1864                      ./AD_CONFIG.h)
1865                            ;;
1866                      ./FC_NAMEMANGLE.h)
1867                            ;;
1868                      ./BUILD_INFO.h)
1869                            ;;
1870                      *)
1871                            touch .links.tmp/$sf
1872                            deplist="$deplist $sf"
1873                            ;;
1874                    esac
1875                    extn=`echo $sf | $AWK -F. '{print $NF}'`
1876                  case $extn in                  case $extn in
1877                      F)                      F)
1878                          echo    " \\"  >> srclist.inc                          echo    " \\"  >> srclist.inc
1879                          echo -n " $sf" >> srclist.inc                          printf " $sf" >> srclist.inc
1880                            ;;
1881                        F90)
1882                            echo    " \\"  >> f90srclist.inc
1883                            printf " $sf" >> f90srclist.inc
1884                          ;;                          ;;
1885                      c)                      c)
1886                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.inc
1887                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.inc
1888                          ;;                          ;;
1889                      h)                      h)
1890                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hlist.inc
1891                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hlist.inc
1892                            ;;
1893                        flow)
1894                            echo    " \\"  >> ad_flow_files.inc
1895                            printf " $sf" >> ad_flow_files.inc
1896                          ;;                          ;;
1897                  esac                  esac
1898              fi              fi
1899          fi          fi
1900      done      done
1901      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
1902          echo $'\n'"#  These files are linked from $d" >> srclinks.tmp          echo "" >> srclinks.tmp
1903            echo "#  These files are linked from $d" >> srclinks.tmp
1904          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
1905          echo $'\t$(LN) '$d'/$@ $@' >> srclinks.tmp          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp
1906      fi      fi
1907  done  done
1908  rm -rf .links.tmp  rm -rf .links.tmp
1909  echo "" >> srclist.inc  echo "" >> srclist.inc
1910  echo "" >> csrclist.inc  echo "" >> csrclist.inc
1911    echo "" >> f90srclist.inc
1912  echo "" >> hlist.inc  echo "" >> hlist.inc
1913    echo "" >> ad_flow_files.inc
1914    
1915  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1916      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1917  fi  fi
1918  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 816  echo "#    $MACHINE" >> $MAKEFILE Line 1921  echo "#    $MACHINE" >> $MAKEFILE
1921  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
1922  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
1923  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1924  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1925  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1926  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
1927    
1928    EXE_AD=$EXECUTABLE"_ad"
1929    EXE_FTL=$EXECUTABLE"_ftl"
1930    EXE_SVD=$EXECUTABLE"_svd"
1931    
1932  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1933    #
1934    # OPTFILE="$OPTFILE"
1935  #  #
1936  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
1937  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 847  EXEDIR      = ${EXEDIR} Line 1959  EXEDIR      = ${EXEDIR}
1959  EXECUTABLE  = \$(EXEDIR)/${EXECUTABLE}  EXECUTABLE  = \$(EXEDIR)/${EXECUTABLE}
1960  TOOLSDIR    = ${TOOLSDIR}  TOOLSDIR    = ${TOOLSDIR}
1961    
1962    #eh3  new defines for the adjoint work
1963    AUTODIFF    = ${ROOTDIR}/pkg/autodiff
1964    EXE_AD      = ${EXE_AD}
1965    EXE_FTL     = ${EXE_FTL}
1966    EXE_SVD     = ${EXE_SVD}
1967    
1968    ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1969    DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1970    
1971    # These files are created by Makefile
1972    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
1973    
1974  EOF  EOF
1975    
1976  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 862  MAKEDEPEND = ${MAKEDEPEND} Line 1986  MAKEDEPEND = ${MAKEDEPEND}
1986  KPP = ${KPP}  KPP = ${KPP}
1987  # Fortran compiler  # Fortran compiler
1988  FC = ${FC}  FC = ${FC}
1989    # Fortran compiler
1990    F90C = ${F90C}
1991    # C compiler
1992    CC = ${CC}
1993  # Link editor  # Link editor
1994  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
1995    
1996  # Defines for CPP  # Defines for CPP
1997  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 875  KFLAGS2 = ${KFLAGS2} Line 2003  KFLAGS2 = ${KFLAGS2}
2003  # Optim./debug for FC  # Optim./debug for FC
2004  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS}
2005  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2006    # Optim./debug for FC
2007    F90FLAGS = ${F90FLAGS}
2008    F90OPTIM = ${F90OPTIM}
2009  # Flags for CC  # Flags for CC
2010  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2011  # Files that should not be optimized  # Files that should not be optimized
2012  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2013  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2014  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2015  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2016    # Name of the Mekfile
2017    MAKEFILE=${MAKEFILE}
2018    
2019  EOF  EOF
2020    
2021  cat srclist.inc  >> $MAKEFILE  cat srclist.inc       >> $MAKEFILE
2022  cat csrclist.inc >> $MAKEFILE  cat csrclist.inc      >> $MAKEFILE
2023  cat hlist.inc >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
2024  echo 'F77FILES =  $(SRCFILES:.F=.f)'                    >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
2025  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o)' >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2026    echo >> $MAKEFILE
2027  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2028    echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
2029    echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2030    echo >> $MAKEFILE
2031    echo '.SUFFIXES:' >> $MAKEFILE
2032    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
2033    rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
2034    rm -f ad_flow_files.inc
2035    
2036  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2037    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c  
   
2038  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2039  \$(EXECUTABLE): \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
2040            @echo Creating \$@ ...
2041          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2042  depend:  depend:
2043          @make links          @make links
2044          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
2045            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2046            -rm -f makedepend.out
2047    
2048  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2049    
2050  small_f: \$(F77FILES)  small_f: \$(F77FILES) \$(F90FILES)
2051    
2052  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2053          @printf 'running ... '          @printf 'running ... '
2054          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2055    
2056  clean:  clean:
2057          -rm -rf *.o *.f *.p ${RMFILES} work.{pc,pcl}          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2058  Clean:  Clean:
2059          @make clean          @make clean
2060          @make cleanlinks          @make cleanlinks
2061          -rm -f Makefile.bak          -rm -f \$(SPECIAL_FILES)
2062            -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
2063  CLEAN:  CLEAN:
2064          @make Clean          @make Clean
2065          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2066          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2067          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2068          -rm -f \$(EXECUTABLE)          -rm -f \$(EXECUTABLE) output.txt STD*
2069    
2070    #eh3 Makefile: makefile
2071  makefile:  makefile:
2072          ${0} $@          $THIS_SCRIPT $G2ARGS
2073  cleanlinks:  cleanlinks:
2074          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2075    
2076  # The normal chain of rules is (  .F - .f - .o  )  # Special targets (SPECIAL_FILES) which are create by make
2077  .F.f:  ${PACKAGES_DOT_H}:
2078            @echo Creating \$@ ...
2079            @$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) > \$@
2080    AD_CONFIG.h:
2081            @echo Creating \$@ ...
2082            @$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 > \$@
2083    FC_NAMEMANGLE.h:
2084            @echo Creating \$@ ...
2085            echo "$FC_NAMEMANGLE" > \$@
2086    
2087    BUILD_INFO.h:
2088            @echo Creating \$@ ...
2089    EOF
2090    
2091    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2092    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2093    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2094    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2095    
2096    cat >>$MAKEFILE <<EOF
2097    
2098    # The normal chain of rules is (  .F - .$FS - .o  )
2099    
2100    ## This nullifies any default implicit rules concerning these two file types:
2101    ## %.o : %.F
2102    
2103    .F.$FS:
2104          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2105  .f.o:  .$FS.o:
2106          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2107    .F90.$FS90:
2108            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2109    .$FS90.o:
2110            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2111  .c.o:  .c.o:
2112          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
2113    
2114  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2115  .F.p:  .F.p:
2116          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2117  .p.f:  .p.$FS:
2118          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2119    
2120    #=========================================
2121    #===  Automatic Differentiation Rules  ===
2122    
2123    TAMC           = ${TAMC}
2124    TAF            = ${TAF}
2125    
2126    TAF_EXTRA      = ${TAF_EXTRA}
2127    TAMC_EXTRA     = ${TAMC_EXTRA}
2128    
2129    EOF
2130    
2131    ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
2132    ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS"
2133    ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2134    for i in $ad_vars ; do
2135        name=$i
2136        t1="t2=\$"`echo $i`
2137        eval $t1
2138        printf "%-20s = " $name >> $MAKEFILE
2139        echo $t2 >> $MAKEFILE
2140    done
2141    
2142    echo "  Add the source list for AD code generation"
2143    echo >> $MAKEFILE
2144    printf "AD_FILES = " >> $MAKEFILE
2145    AD_FILES=`cat ad_files`
2146    for i in $AD_FILES ; do
2147        echo    " \\" >> $MAKEFILE
2148        printf " $i" >> $MAKEFILE
2149    done
2150    echo >> $MAKEFILE
2151    rm -f ad_files
2152    
2153    cat >>$MAKEFILE <<EOF
2154    
2155    # ... AD ...
2156    adall: ad_taf
2157    adtaf: ad_taf_output.$FS
2158    adtamc: ad_tamc_output.$FS
2159    
2160    ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2161            @$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
2162            cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2163            -rm -f ad_config.template
2164            @make \$(F77FILES)
2165            @make \$(AD_FLOW_FILES)
2166            cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2167    
2168    ad_taf_output.$FS: ad_input_code.$FS
2169            \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2170            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2171    
2172    adtafonly:
2173            \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2174            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2175    
2176    ad_taf: ad_taf_output.o \$(OBJFILES)
2177            \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2178    
2179    ad_tamc_output.$FS: ad_input_code.$FS
2180            \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2181            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2182    
2183    ad_tamc: ad_tamc_output.o \$(OBJFILES)
2184            \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2185    
2186    adonlyfwd:
2187            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2188    
2189    adtrick:
2190            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2191    
2192    # ... FTL ...
2193    ftlall: ftl_taf
2194    ftltaf: ftl_taf_output.$FS
2195    ftltamc: ftl_tamc_output.$FS
2196    
2197    ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2198            @$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
2199            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2200            -rm -f ftl_config.template
2201            @make \$(F77FILES)
2202            @make \$(AD_FLOW_FILES)
2203            cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2204    
2205    ftl_taf_output.$FS: ftl_input_code.$FS
2206            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2207            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2208    
2209    ftltafonly:
2210            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2211            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2212    
2213    ftl_taf: ftl_taf_output.o \$(OBJFILES)
2214            \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2215    
2216    ftl_tamc_output.$FS: ftl_input_code.$FS
2217            \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2218            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2219    
2220    ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2221            \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2222    
2223    
2224    # ... SVD ...
2225    svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2226            @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2227            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2228    svdall: svd_touch svd_taf
2229    
2230    svd_taf: \$(OBJFILES)
2231            \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2232    
2233            @echo "--->>> Only COMPILE svd code! <<<---"
2234            @echo "--->>> Assumes you previously <<<---"
2235            @echo "--->>> did make svdtaf        <<<---"
2236    
2237    svd_touch:
2238            @echo "--->>> Only COMPILE svd code! <<<---"
2239            @echo "--->>> Assumes you previously <<<---"
2240            @echo "--->>> did make svdtaf        <<<---"
2241            touch ad_taf_output.$FS ftl_taf_output.$FS
2242            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2243            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2244            @$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
2245            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2246            -rm -f ftl_config.template
2247    
2248    #=========================================
2249    
2250  EOF  EOF
2251    
2252    if test "x$EXEHOOK" != x ; then
2253        printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
2254    fi
2255    
2256  echo "  Making list of \"exceptions\" that need \".p\" files"  echo "  Making list of \"exceptions\" that need \".p\" files"
2257  for i in $KPPFILES ; do  for i in $KPPFILES ; do
2258      base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`      base=`echo $i | sed -e 's/\/.*\///g' | sed -e 's/\..*$//g'`
# Line 954  for i in $KPPFILES ; do Line 2260  for i in $KPPFILES ; do
2260      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2261          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2262      fi      fi
2263      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2264  done  done
2265    
2266  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 964  for i in $NOOPTFILES ; do Line 2270  for i in $NOOPTFILES ; do
2270      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2271          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2272      fi      fi
2273      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2274      echo $'\t$(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2275  done  done
2276    
2277  echo "  Add rules for links"  echo "  Add rules for links"
# Line 973  cat srclinks.tmp >> $MAKEFILE Line 2279  cat srclinks.tmp >> $MAKEFILE
2279  rm -f srclinks.tmp  rm -f srclinks.tmp
2280    
2281  echo "  Adding makedepend marker"  echo "  Adding makedepend marker"
2282  echo $'\n\n'"# DO NOT DELETE" >> $MAKEFILE  printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE
2283    
2284    printf "\n===  Done  ===\n"
2285    
2286    # Create special header files
2287    $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"
2288    if test ! -f $PACKAGES_DOT_H ; then
2289        mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2290    else
2291        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2292        RETVAL=$?
2293        if test "x$RETVAL" = x0 ; then
2294            rm -f $PACKAGES_DOT_H".tmp"
2295        else
2296            mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2297            mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2298        fi
2299    fi
2300    if test ! -f AD_CONFIG.h ; then
2301        $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
2302    fi
2303    
2304    
2305  echo $'\n'"===  Done  ==="  #  Write the "state" for future records
2306    if test "x$DUMPSTATE" != xf ; then
2307        printf "" > genmake_state
2308        for i in $gm_state ; do
2309            t1="t2=\$$i"
2310            eval $t1
2311            echo "$i='$t2'" >> genmake_state
2312        done
2313    fi

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.121

  ViewVC Help
Powered by ViewVC 1.1.22