/[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.51 by adcroft, Wed Dec 3 19:46:10 2003 UTC revision 1.135 by edhill, Thu Nov 17 20:06:08 2005 UTC
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      grep -i "#define.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17      RETVAL=$?      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18      if test "x${RETVAL}" = x0 ; then      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19          echo "Error: In $cpp_options there is an illegal line: #define ALLOW_$pkg"      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20          exit 99  }
21      fi  
22      grep -i "#undef.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1  # Search for particular CPP #cmds associated with MPI
23      RETVAL=$?  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24      if test "x${RETVAL}" = x0 ; then  test_for_mpi_in_cpp_eeoptions() {
25          echo "Error: In $cpp_options there is an illegal line: #undef ALLOW_$pkg"      cpp_options=$1
26          exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27      fi      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28      grep -i "#define.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99
29        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99
30    }
31    
32    # Search for particular string in a file. Return 1 if detected, 0 if not
33    # usage: test_for_string_in_file file string
34    test_for_string_in_file() {
35        file=$1
36        strng=$2
37        grep -i "$strng" $file > /dev/null 2>&1
38      RETVAL=$?      RETVAL=$?
39      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
40          echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg"          printf "Error: In $file there is an illegal line: "
41          exit 99          grep -i "$strng" $file
42            return 1
43      fi      fi
44      grep -i "#undef.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      return 0
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         echo "Error: In $cpp_options there is an illegal line: #undef DISABLE_$pkg"  
         exit 99  
    fi  
45  }  }
46    
47  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
# Line 62  expand_pkg_groups() { Line 67  expand_pkg_groups() {
67          done          done
68          PACKAGES=$new_packages          PACKAGES=$new_packages
69          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
70            return $matched
71      else      else
72          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73      fi      fi
74  }  }
75    
76    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
77    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
78    check_for_broken_Ff()  {
79        #  Do we have defaults for $FS and/or $FS90 ?
80        tfs=f
81        tfs9=f90
82        if test "x$FS" != x ; then
83            tfs="$FS"
84        fi
85        if test "x$FS90" != x ; then
86            tfs9="$FS90"
87        fi
88    
89        #  First check the ability to create a *.F/.f pair.
90        cat <<EOF >> genmake_hello.F
91          program hello
92          write(*,*) 'hi'
93          stop
94          end
95    EOF
96        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97        RETVAL=$?
98        if test "x$RETVAL" != x0 ; then
99            if test "x$FS" = x ; then
100                FS='for'
101                FS90='fr9'
102                check_for_broken_Ff
103            else
104                cat <<EOF 2>&1
105    ERROR: Your file system cannot distinguish between *.F and *.f files
106      (fails the "cp" test) and this program cannot find a suitable
107      replacement extension.  Please try a different build environment or
108      contact the <MITgcm-support@mitgcm.org> list for help.
109    
110    EOF
111                exit -1
112            fi
113            return
114        fi
115        rm -f genmake_hello.*
116    
117        #  Check the ability of ${MAKE} and ${LN} to use the current set
118        #  of extensions.
119        cat <<EOF >> genmake_hello.F
120          program hello
121          write(*,*) 'hi'
122          stop
123          end
124    EOF
125        test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
126        cat <<EOF >> $MAKEFILE
127    .SUFFIXES:
128    .SUFFIXES: .$tfs .F
129    .F.$tfs:
130            $LN \$< \$@
131    EOF
132        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133        RETVAL=$?
134        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135            if test "x$FS" = x ; then
136                FS='for'
137                FS90='fr9'
138                check_for_broken_Ff
139            else
140                cat <<EOF 2>&1
141    ERROR: Your file system cannot distinguish between *.F and *.f files
142      (fails the "make/ln" test) and this program cannot find a suitable
143      replacement extension.  Please try a different build environment or
144      contact the <MITgcm-support@mitgcm.org> list for help.
145    
146    EOF
147                exit -1
148                return
149            fi
150        fi
151        rm -f genmake_hello.* $MAKEFILE
152        test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
153    
154        #  If we make it here, use the extensions
155        FS=$tfs
156        FS90=$tfs9
157        return
158    }
159    
160    
161    look_for_makedepend()  {
162    
163        #  The "original" makedepend is part of the Imake system that is
164        #  most often distributed with XFree86 or with an XFree86 source
165        #  package.  As a result, many machines (eg. generic Linux) do not
166        #  have a system-default "makedepend" available.  For those
167        #  systems, we have two fall-back options:
168        #
169        #    1) a makedepend implementation shipped with the cyrus-imapd
170        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
171        #
172        #    2) a known-buggy xmakedpend shell script
173        #
174        #  So the choices are, in order:
175        #
176        #    1) use the user-specified program
177        #    2) use a system-wide default
178        #    3) locally build and use the cyrus implementation
179        #    4) fall back to the buggy local xmakedpend script
180        #
181        if test "x${MAKEDEPEND}" = x ; then
182            which makedepend > /dev/null 2>&1
183            RV0=$?
184            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
185            #  echo 'MAKEFILE="'$MAKEFILE'"'
186            cat <<EOF >> $MAKEFILE
187    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
188    #
189    #   Some "makedepend" implementations will die if they cannot
190    #   find a Makefile -- so this file is here to gives them an
191    #   empty one to find and parse.
192    EOF
193            cat <<EOF >> genmake_tc.f
194          program test
195          write(*,*) 'test'
196          stop
197          end
198    EOF
199            makedepend genmake_tc.f > /dev/null 2>&1
200            RV1=$?
201            test -f $MAKEFILE  &&  rm -f $MAKEFILE
202            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
203            if test "x${RV0}${RV1}" = x00 ; then
204                MAKEDEPEND=makedepend
205            else
206                echo "    a system-default makedepend was not found."
207                
208                #  Try to build the cyrus implementation
209                build_cyrus_makedepend
210                RETVAL=$?
211                if test "x$RETVAL" != x0 ; then
212                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
213                fi
214                rm -f ./genmake_cy_md
215            fi
216        else
217            #  echo "MAKEDEPEND=${MAKEDEPEND}"
218            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
219            RETVAL=$?
220            if test x"$RETVAL" = x0 ; then
221                build_cyrus_makedepend
222            fi
223        fi
224    }
225    
226    
227    build_cyrus_makedepend()  {
228        rm -f ./genmake_cy_md
229        (
230            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
231                &&  ./configure > /dev/null 2>&1  \
232                &&  make > /dev/null 2>&1
233            if test -x ./makedepend.exe ; then
234                $LN ./makedepend.exe ./makedepend
235            fi
236            ./makedepend ifparser.c > /dev/null 2>&1  \
237                &&  echo "true"
238        ) > ./genmake_cy_md
239        grep true ./genmake_cy_md > /dev/null 2>&1
240        RETVAL=$?
241        rm -f ./genmake_cy_md
242        if test "x$RETVAL" = x0 ; then
243            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
244            return 0
245        else
246            echo "WARNING: unable to build cyrus-imapd-makedepend"
247            return 1
248        fi
249    }
250    
251  # Guess possible config options for this host  # Guess possible config options for this host
252  find_possible_configs()  {  find_possible_configs()  {
253    
254      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
255      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
256      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
257      PLATFORM=`echo $tmp3 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
258        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
259        tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
260        PLATFORM=$tmp3
261        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
262      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
263      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
264            
# Line 93  find_possible_configs()  { Line 278  find_possible_configs()  {
278          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
279      fi      fi
280    
281      # makedepend is not always available      look_for_makedepend
282      if test "x${MAKEDEPEND}" = x ; then  
283        which makedepend >& /dev/null      #================================================================
284        RETVAL=$?      #  look for possible C compilers
285        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
286           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
287           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
288        fi          rm -f ./genmake_hello.c  ./genmake_hello
289            cat >> genmake_hello.c << EOF
290    #include <stdio.h>
291    int main(int argc, char **argv) {
292      printf("Hello!\n");
293      return 0;
294    }
295    EOF
296            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
297            RETVAL=$?
298            if test "x${RETVAL}" = x0 ; then
299                p_CC="$p_CC $c"
300            fi
301        done
302        rm -f ./genmake_hello.c ./genmake_hello
303        if test "x${p_CC}" = x ; then
304            cat 1>&2 <<EOF
305    
306    Error: No C compilers were found in your path.  Please specify one using:
307    
308        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
309        2) the CC or MITGCM_CC environment variables.
310    
311    EOF
312            exit 1
313        else
314            echo "  The possible C compilers found in your path are:"
315            echo "   "$p_CC
316            if test "x$CC" = x ; then
317                CC=`echo $p_CC | $AWK '{print $1}'`
318                echo "  Setting C compiler to: "$CC
319            fi
320      fi      fi
321    
322      # look for possible fortran compilers      #================================================================
323      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible FORTRAN compilers
324        tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"
325      p_FC=      p_FC=
326      for c in $tmp ; do      for c in $tmp ; do
327          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 129  Error: No Fortran compilers were found i Line 346  Error: No Fortran compilers were found i
346    
347      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
348      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
349      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
350    
351  EOF  EOF
352          exit 1          exit 1
# Line 138  EOF Line 355  EOF
355          echo "   "$p_FC          echo "   "$p_FC
356          if test "x$FC" = x ; then          if test "x$FC" = x ; then
357              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
358                echo "  Setting FORTRAN compiler to: "$FC
359          fi          fi
360      fi      fi
361    
362      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
363          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
364          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
365              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
366              echo "  The options file:  $p_OF"          fi
367              echo "    appears to match so we'll use it."      fi
368              break  #    echo "  The options file:  $p_OF"
369          fi  #    echo "    appears to match so we'll use it."
370      done  #   for i in $p_FC ; do
371    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
372    #if test -r $p_OF ; then
373    #    OPTFILE=$p_OF
374    #    echo "  The options file:  $p_OF"
375    #    echo "    appears to match so we'll use it."
376    #    break
377    #fi
378    #   done
379      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
380          cat 1>&2 <<EOF          cat 1>&2 <<EOF
381    
# Line 208  get_pdepend_list()  { Line 434  get_pdepend_list()  {
434      . ./.pd_tmp      . ./.pd_tmp
435      rm -f ./.pd_tmp      rm -f ./.pd_tmp
436    
437      echo -n "PNAME = "${}      printf "PNAME = "${}
438  }  }
439    
440    
# Line 222  Usage: "$0" [OPTIONS] Line 448  Usage: "$0" [OPTIONS]
448      -help | --help | -h | --h      -help | --help | -h | --h
449            Print this help message and exit.            Print this help message and exit.
450    
451        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
452          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
453              Use "NAME" as the adoptfile.  By default, the file at
454              "tools/adjoint_options/adjoint_default" will be used.
455    
456      -nooptfile | --nooptfile      -nooptfile | --nooptfile
457        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
458        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
# Line 246  Usage: "$0" [OPTIONS] Line 477  Usage: "$0" [OPTIONS]
477        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
478            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
479    
480        -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      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
485        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
486            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
# Line 282  Usage: "$0" [OPTIONS] Line 517  Usage: "$0" [OPTIONS]
517            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
518            "usual suspects" such as g77, f77, etc.            "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      -[no]ieee | --[no]ieee
526            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
527            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
528            is being used.            is being used.
529    
530        -ts | --ts
531              Produce timing information per timestep
532    
533        -mpi | --mpi
534              Include MPI header files and link to MPI libraries
535        -mpi=PATH | --mpi=PATH
536              Include MPI header files and link to MPI libraries using MPI_ROOT
537              set to PATH. i.e. Include files from \$PATH/include, link to libraries
538              from \$PATH/lib and use binaries from \$PATH/bin.
539    
540        -bash NAME
541              Explicitly specify the Bourne or BASH shell to use
542    
543    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
544    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
545    
# Line 307  EOF Line 560  EOF
560    
561  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
562  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
563    
564        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
565        if test ! "x$FC_NAMEMANGLE" = x ; then
566            return 0
567        fi
568    
569      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
570            
571      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 324  WARNING: Please contact <MITgcm-support@ Line 583  WARNING: Please contact <MITgcm-support@
583  EOF  EOF
584          return 1          return 1
585      fi      fi
586      c_tcall=`nm genmake_test.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
587      RETVAL=$?      RETVAL=$?
588      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
589          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 336  WARNING: Please contact <MITgcm-support@ Line 595  WARNING: Please contact <MITgcm-support@
595  EOF  EOF
596          return 1          return 1
597      fi      fi
598      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
599        subroutine tcall( string )        subroutine tcall( string )
600        character*(*) string        character*(*) string
601        call tsub( string )        call tsub( string )
602        end        end
603  EOF  EOF
604      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
605      RETVAL=$?      RETVAL=$?
606      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
607          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 354  WARNING: Please contact <MITgcm-support@ Line 613  WARNING: Please contact <MITgcm-support@
613  EOF  EOF
614          return 1          return 1
615      fi      fi
616      f_tcall=`nm genmake_tcomp.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
617      RETVAL=$?      RETVAL=$?
618      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
619          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 408  void FC_NAMEMANGLE(cloc) ( double *curti Line 667  void FC_NAMEMANGLE(cloc) ( double *curti
667   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
668  }  }
669  EOF  EOF
670      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_warnings 2>&1
671      RET_C=$?      RET_C=$?
672      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
673        program hello        program hello
674        Real*8 wtime        REAL*8 wtime
675        external cloc        external cloc
676        call cloc(wtime)        call cloc(wtime)
677        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
678        end program hello        end
679  EOF  EOF
680      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
681      RET_F=$?      RET_F=$?
682      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
683      RETVAL=$?      RETVAL=$?
684      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
685          HAVE_CLOC=t          HAVE_CLOC=t
# Line 430  EOF Line 689  EOF
689  }  }
690    
691    
692    check_HAVE_SETRLSTK()  {
693        get_fortran_c_namemangling
694        cat <<EOF > genmake_tc_1.c
695    $FC_NAMEMANGLE
696    #include <sys/time.h>
697    #include <sys/resource.h>
698    #include <unistd.h>
699    void FC_NAMEMANGLE(setrlstk) ()
700    {
701        struct rlimit rls;
702        rls.rlim_cur = RLIM_INFINITY;
703        rls.rlim_max = RLIM_INFINITY;
704        setrlimit(RLIMIT_STACK, &rls);
705        return;
706    }
707    EOF
708        make genmake_tc_1.o >> genmake_warnings 2>&1
709        RET_C=$?
710        cat <<EOF > genmake_tc_2.$FS
711          program hello
712          external setrlstk
713          call setrlstk()
714          end
715    EOF
716        echo >> genmake_warnings
717        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
718        cat genmake_tc_2.$FS >> genmake_warnings
719        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
720        echo $COMM >> genmake_warnings
721        $COMM >> genmake_warnings 2>&1
722        RETVAL=$?
723        if test "x$RETVAL" = x0 ; then
724            HAVE_SETRLSTK=t
725            DEFINES="$DEFINES -DHAVE_SETRLSTK"
726        fi
727        rm -f genmake_tc*
728    }
729    
730    
731    check_HAVE_STAT()  {
732        get_fortran_c_namemangling
733        cat <<EOF > genmake_tc_1.c
734    $FC_NAMEMANGLE
735    #include <stdio.h>
736    #include <stdlib.h>
737    #include <unistd.h>
738    #include <sys/stat.h>
739    #include <sys/types.h>
740    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
741    {
742        char name[512];
743        struct stat astat;
744    
745        name[0] = 'a'; name[1] = '\0';
746        if (! stat(name, &astat))
747            *nbyte = (int)(astat.st_size);
748        else
749            *nbyte = -1;
750    }
751    EOF
752        make genmake_tc_1.o >> genmake_tc.log 2>&1
753        RET_C=$?
754        cat <<EOF > genmake_tc_2.$FS
755          program hello
756          integer nbyte
757          call tfsize(nbyte)
758          print *," HELLO WORLD", nbyte
759          end
760    EOF
761        echo >> genmake_warnings
762        echo "running: check_HAVE_STAT()" >> genmake_warnings
763        cat genmake_tc_2.$FS >> genmake_warnings
764        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
765        echo $COMM >> genmake_warnings
766        $COMM >> genmake_tc.log 2>&1
767        RETVAL=$?
768        if test "x$RETVAL" = x0 ; then
769            HAVE_STAT=t
770            DEFINES="$DEFINES -DHAVE_STAT"
771        fi
772        rm -f genmake_tc*
773    }
774    
775    
776    check_netcdf_libs()  {
777        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
778            return
779        fi
780        echo >> genmake_warnings
781        echo "running: check_netcdf_libs()" >> genmake_warnings
782        cat <<EOF > genmake_tnc.F
783          program fgennc
784    #include "netcdf.inc"
785    EOF
786        if test ! "x$MPI" = x ; then
787            echo '#include "mpif.h"' >> genmake_tnc.F
788        fi
789        cat <<EOF >> genmake_tnc.F
790          integer iret, ncid, xid
791          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
792          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
793          iret = nf_def_dim(ncid, 'X', 11, xid)
794          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
795          iret = nf_close(ncid)
796          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
797          end
798    EOF
799        echo "===  genmake_tnc.F  ===" > genmake_tnc.log
800        cat genmake_tnc.F >> genmake_tnc.log
801        echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
802        RET_CPP=f
803        COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F"
804        echo "$COMM" >> genmake_tnc.log
805        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
806        if test "x$RET_CPP" = xf ; then
807            echo "  WARNING: CPP failed to pre-process the netcdf test." \
808                >> genmake_tnc.log
809            echo "    Please check that \$INCLUDES is properly set." \
810                >> genmake_tnc.log
811        fi
812        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
813        echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
814        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
815            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
816        RET_COMPILE=$?
817        cat genmake_tnc.log >> genmake_warnings
818    
819        #EH3  Remove test program execution for machines that either disallow
820        #EH3  execution or cannot support it (eg. cross-compilers)
821        #EH3
822        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
823        #EH3 RETVAL=$?
824        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
825    
826        if test "x$RET_COMPILE" = x0 ; then
827            HAVE_NETCDF=t
828        else
829            # try again with "-lnetcdf" added to the libs
830            echo "try again with added '-lnetcdf'" > genmake_tnc.log
831            echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log
832            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
833            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
834            $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
835                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
836                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
837            RET_COMPILE=$?
838            cat genmake_tnc.log >> genmake_warnings
839            if test "x$RET_COMPILE" = x0 ; then
840                LIBS="$LIBS -lnetcdf"
841                HAVE_NETCDF=t
842            fi
843        fi
844        rm -f genmake_tnc*
845    }
846    
847    
848    
849    ###############################################################################
850    #   Sequential part of script starts here
851    ###############################################################################
852    
853  #  Set defaults here  #  Set defaults here
854  COMMANDL="$0 $@"  COMMANDL="$0 $@"
855    
# Line 437  PLATFORM= Line 857  PLATFORM=
857  LN=  LN=
858  S64=  S64=
859  KPP=  KPP=
860  FC=  #FC=
861    #CC=gcc
862    #CPP=
863  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
864  DEFINES=  DEFINES=
865  PACKAGES=  PACKAGES=
866  ENABLE=  ENABLE=
867  DISABLE=  DISABLE=
868  MAKEFILE=  # MAKEFILE=
869  MAKEDEPEND=  # MAKEDEPEND=
870  PDEPEND=  PDEPEND=
871  DUMPSTATE=t  DUMPSTATE=t
872  PDEFAULT=  PDEFAULT=
873  OPTFILE=  OPTFILE=
874  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
875  FFLAGS=  FFLAGS=
876  FOPTIM=  FOPTIM=
877  CFLAGS=  CFLAGS=
878  KFLAGS1=  KFLAGS1=
879  KFLAGS2=  KFLAGS2=
880    #LDADD=
881  LIBS=  LIBS=
882  KPPFILES=  KPPFILES=
883  NOOPTFILES=  NOOPTFILES=
884  NOOPTFLAGS=  NOOPTFLAGS=
885    MPI=
886    MPIPATH=
887    TS=
888    HAVE_TEST_L=
889    
890  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
891  HAVE_SYSTEM=  HAVE_SYSTEM=
892  HAVE_FDATE=  HAVE_FDATE=
893  FC_NAMEMANGLE=  FC_NAMEMANGLE=
894  HAVE_CLOC=  HAVE_CLOC=
895    HAVE_SETRLSTK=
896    HAVE_STAT=
897    HAVE_NETCDF=
898    HAVE_ETIME=
899    IGNORE_TIME=
900    
901  MODS=  MODS=
902  TOOLSDIR=  TOOLSDIR=
903  SOURCEDIRS=  SOURCEDIRS=
904  INCLUDEDIRS=  INCLUDEDIRS=
905  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
906    
907    G2ARGS=
908    BASH=
909  PWD=`pwd`  PWD=`pwd`
910  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
911  AWK=awk  test "x$AWK" = x   &&  AWK=awk
912  THISHOSTNAME=`hostname`  THISHOST=`hostname`
913  THISCWD=`pwd`  THISCWD=`pwd`
914  THISDATE=`date`  THISDATE=`date`
915    THISUSER=`echo $USER`
916    THISVER=
917  MACHINE=`uname -a`  MACHINE=`uname -a`
918  EXECUTABLE=  EXECUTABLE=
919  EXEHOOK=  EXEHOOK=
# Line 488  IEEE= Line 923  IEEE=
923  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
924      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
925  fi  fi
926    FS=
927    FS90=
928    
929  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
930  AD_OPTFILE=  AD_OPTFILE=
# Line 505  TAMC_EXTRA= Line 942  TAMC_EXTRA=
942    
943  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
944  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
945  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"
946    
947  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
948  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
949  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
950  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
951  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
952  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
953    
954  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
955  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
# Line 541  for i in . $MODS ; do Line 978  for i in . $MODS ; do
978          break          break
979      fi      fi
980  done  done
981  echo -n "  getting local config information:  "  printf "  getting local config information:  "
982  if test -e $gm_local ; then  if test -f $gm_local ; then
983      echo "using $gm_local"      echo "using $gm_local"
984      . $gm_local      . $gm_local
985      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 551  else Line 988  else
988      echo "none found"      echo "none found"
989  fi  fi
990    
991  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
992  #OPTIONS=  #OPTIONS=
993  #n=0  #n=0
994  #for i ; do  #for i ; do
# Line 563  fi Line 1000  fi
1000  #done  #done
1001  #parse_options  #parse_options
1002  ac_prev=  ac_prev=
1003  for ac_option ; do  for ac_option in "$@" ; do
1004    
1005        G2ARGS="$G2ARGS \"$ac_option\""
1006    
1007      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
1008      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 606  for ac_option ; do Line 1045  for ac_option ; do
1045          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1046              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1047                    
1048            -bash | --bash)
1049                ac_prev=BASH ;;
1050            -bash=* | --bash=*)
1051                BASH=$ac_optarg ;;
1052            
1053            -makedepend | --makedepend | -md | --md)
1054                ac_prev=MAKEDEPEND ;;
1055            -makedepend=* | --makedepend=* | -md=* | --md=*)
1056                MAKEDEPEND=$ac_optarg ;;
1057            
1058          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1059              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1060          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 647  for ac_option ; do Line 1096  for ac_option ; do
1096  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1097  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1098  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1099                        
1100            -cc | --cc)
1101                ac_prev=CC ;;
1102            -cc=* | --cc=*)
1103                CC=$ac_optarg ;;
1104            
1105          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1106              ac_prev=FC ;;              ac_prev=FC ;;
1107          -fc=* | --fc=*)          -fc=* | --fc=*)
1108              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1109                    
1110            -fs | --fs)
1111                ac_prev=FS ;;
1112            -fs=* | --fs=*)
1113                FS=$ac_optarg ;;
1114            
1115            -fs90 | --fs90)
1116                ac_prev=FS90 ;;
1117            -fs90=* | --fs90=*)
1118                FS90=$ac_optarg ;;
1119            
1120          -ieee | --ieee)          -ieee | --ieee)
1121              IEEE=true ;;              IEEE=true ;;
1122          -noieee | --noieee)          -noieee | --noieee)
1123              IEEE= ;;              IEEE= ;;
1124    
1125            -ts | --ts)
1126                TS=true ;;
1127    
1128            -mpi | --mpi)
1129                MPI=true ;;
1130            -mpi=* | --mpi=*)
1131                MPIPATH=$ac_optarg
1132                MPI=true ;;
1133                    
1134  #       -jam | --jam)  #       -jam | --jam)
1135  #           JAM=1 ;;  #           JAM=1 ;;
# Line 675  for ac_option ; do Line 1148  for ac_option ; do
1148              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1149          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1150              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1151            
1152            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1153                IGNORE_TIME="-DIGNORE_TIME" ;;
1154    
1155          -*)          -*)
1156              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 690  for ac_option ; do Line 1166  for ac_option ; do
1166            
1167  done  done
1168    
1169    
1170  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1171      echo      echo
1172      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
# Line 702  if test -f ./.genmakerc ; then Line 1179  if test -f ./.genmakerc ; then
1179      echo      echo
1180  fi  fi
1181    
1182    #  Find the MITgcm ${ROOTDIR}
1183  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1184      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1185        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1186          ROOTDIR=".."          ROOTDIR=".."
1187      else      else
1188          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1189              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1190                  ROOTDIR=$d                  ROOTDIR=$d
1191                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1192                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1193                  break                  break
1194              fi              fi
# Line 727  if test ! -d ${ROOTDIR} ; then Line 1206  if test ! -d ${ROOTDIR} ; then
1206      exit 1      exit 1
1207  fi  fi
1208    
1209    #  Find the MITgcm ${THISVER}
1210    if test -f "${ROOTDIR}/doc/tag-index" ; then
1211        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1212    fi
1213    
1214    if test "x$MAKEFILE" = x ; then
1215        MAKEFILE="Makefile"
1216    fi
1217    
1218  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1219  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1220      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 743  if test "x$OPTFILE" != xNONE ; then Line 1231  if test "x$OPTFILE" != xNONE ; then
1231          . "$OPTFILE"          . "$OPTFILE"
1232          RETVAL=$?          RETVAL=$?
1233          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1234              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1235              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1236              exit 1              exit 1
1237          fi          fi
# Line 770  if test "x${AD_OPTFILE}" != xNONE ; then Line 1258  if test "x${AD_OPTFILE}" != xNONE ; then
1258          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1259          RETVAL=$?          RETVAL=$?
1260          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1261              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1262              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1263              exit 1              exit 1
1264          fi          fi
# Line 783  if test "x${AD_OPTFILE}" != xNONE ; then Line 1271  if test "x${AD_OPTFILE}" != xNONE ; then
1271      fi      fi
1272  fi  fi
1273    
1274  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1275    #  Set default values if not set by the optfile
1276    #
1277    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1278  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1279    if test ! "x$BASH" = x ; then
1280        # add a trailing space so that it works within the Makefile syntax (see below)
1281        BASH="$BASH "
1282    fi
1283  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1284      cat <<EOF 1>&2      cat <<EOF 1>&2
1285    
# Line 795  Error: no Fortran compiler: please speci Line 1290  Error: no Fortran compiler: please speci
1290  EOF  EOF
1291      exit 1      exit 1
1292  fi  fi
1293    if test "x$CC" = x ; then
1294        CC=cc
1295    #     cat <<EOF 1>&2
1296    # Error: no C compiler: please specify using one of the following:
1297    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1298    #   2) the "-cc=XXX" command-line option
1299    #   3) the "./genmake_local" file
1300    # EOF
1301    #     exit 1
1302    fi
1303  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1304      LINK=$FC      LINK=$FC
1305  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1306  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1307      MAKE="make"      MAKE="make"
1308  fi  fi
1309    if test "x$CPP" = x ; then
1310        CPP=cpp
1311    fi
1312    #EH3 === UGLY ===
1313    #  The following is an ugly little hack to check for $CPP in /lib/ and
1314    #  it should eventually be replaced with a more general function that
1315    #  searches a combo of the user's path and a list of "usual suspects"
1316    #  to find the correct location for binaries such as $CPP.
1317    for i in " " "/lib/" ; do
1318        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1319    done
1320    #EH3 === UGLY ===
1321  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1322  RETVAL=$?  RETVAL=$?
1323  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 820  EOF Line 1334  EOF
1334  else  else
1335      rm -f test_cpp      rm -f test_cpp
1336  fi  fi
1337  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1338  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1339      LN="ln -s"      LN="ln -s"
1340  fi  fi
# Line 838  Error: The command "ln -s" failed -- ple Line 1350  Error: The command "ln -s" failed -- ple
1350  EOF  EOF
1351      exit 1      exit 1
1352  fi  fi
1353    test -L genmake_tlink > /dev/null 2>&1
1354    RETVAL=$?
1355    if test "x$RETVAL" = x0 ; then
1356        HAVE_TEST_L=t
1357    fi
1358  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1359    
1360    #  Check for broken *.F/*.f handling and fix if possible
1361    check_for_broken_Ff
1362    
1363    if test ! "x$MPI" = x ; then
1364          echo "  Turning on MPI cpp macros"
1365          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1366    fi
1367    
1368    if test ! "x$TS" = x ; then
1369          echo "  Turning on timing per timestep"
1370          DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1371    fi
1372    
1373  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1374  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1375  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1376        program hello        program hello
1377        call system('echo hi')        call system('echo hi')
1378        end        end
1379  EOF  EOF
1380  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1381  RETVAL=$?  RETVAL=$?
1382  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1383      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 860  else Line 1389  else
1389  fi  fi
1390  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1391    
1392  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1393  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1394        program hello        program hello
1395        CHARACTER(128) string        CHARACTER*(128) string
1396        string = ' '        string = ' '
1397        call fdate( string )        call fdate( string )
1398        print *, string        print *, string
1399        end        end
1400  EOF  EOF
1401  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1402  RETVAL=$?  RETVAL=$?
1403  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1404      HAVE_FDATE=t      HAVE_FDATE=t
# Line 881  else Line 1410  else
1410  fi  fi
1411  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1412    
1413  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1414    cat > genmake_tcomp.$FS <<EOF
1415          program hello
1416          REAL*4 ACTUAL, TARRAY(2)
1417          EXTERNAL ETIME
1418          REAL*4 ETIME
1419          actual = etime( tarray )
1420          print *, tarray
1421          end
1422    EOF
1423    $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1424    RETVAL=$?
1425    if test "x$RETVAL" = x0 ; then
1426        HAVE_ETIME=t
1427        DEFINES="$DEFINES -DHAVE_ETIME"
1428        echo "yes"
1429    else
1430        HAVE_ETIME=
1431        echo "no"
1432    fi
1433    rm -f genmake_tcomp*
1434    
1435    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1436  check_HAVE_CLOC  check_HAVE_CLOC
1437  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1438      echo "yes"      echo "yes"
1439  else  else
1440      echo "no"      echo "no"
1441  fi  fi
1442  echo "$FC_NAMEMANGLE" > FC_NAMEMANGLE.h.template  rm -f genmake_t*
1443  cmp FC_NAMEMANGLE.h FC_NAMEMANGLE.h.template > /dev/null 2>&1  
1444  RETVAL=$?  printf "  Can we unlimit the stack size using $FC...  "
1445  if test "x$RETVAL" != x0 ; then  check_HAVE_SETRLSTK
1446      mv -f FC_NAMEMANGLE.h.template FC_NAMEMANGLE.h  if test "x$HAVE_SETRLSTK" != x ; then
1447        echo "yes"
1448    else
1449        echo "no"
1450  fi  fi
1451  rm -f genmake_t*  rm -f genmake_t*
1452    
1453    printf "  Can we use stat() through C calls...  "
1454    check_HAVE_STAT
1455    if test "x$HAVE_STAT" != x ; then
1456        echo "yes"
1457    else
1458        echo "no"
1459    fi
1460    rm -f genmake_t*
1461    
1462    printf "  Can we create NetCDF-enabled binaries...  "
1463    check_netcdf_libs
1464    if test "x$HAVE_NETCDF" != x ; then
1465        echo "yes"
1466    else
1467        echo "no"
1468    fi
1469    DEFINES="$DEFINES $IGNORE_TIME"
1470    
1471  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1472  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1473  for d in $MODS ; do  for d in $MODS ; do
1474      if test ! -d $d ; then      if test ! -d $d ; then
1475          echo          echo
1476          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1477          exit 1          exit 1
1478      else      else
1479          echo -n " $d"          printf " $d"
1480          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1481          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1482      fi      fi
1483  done  done
1484  echo  echo
1485    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1486  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1487      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1488  fi  fi
1489    
1490  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1491      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1492        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1493          EXEDIR=../exe          EXEDIR=../exe
1494      else      else
1495          EXEDIR=.          EXEDIR=.
# Line 935  if test "x${TOOLSDIR}" = x ; then Line 1504  if test "x${TOOLSDIR}" = x ; then
1504      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1505  fi  fi
1506  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1507      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1508      exit 1      exit 1
1509  fi  fi
1510  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1511      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1512        RETVAL=$?
1513        if test "x${RETVAL}" = x0 ; then
1514            S64='$(TOOLSDIR)/set64bitConst.sh'
1515        else
1516            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1517            RETVAL=$?
1518            if test "x${RETVAL}" = x0 ; then
1519                S64='$(TOOLSDIR)/set64bitConst.csh'
1520            else
1521                cat <<EOF
1522    
1523    ERROR: neither of the two default scripts:
1524    
1525        ${TOOLSDIR}/set64bitConst.sh
1526        ${TOOLSDIR}/set64bitConst.csh
1527    
1528      are working so please check paths or specify (with \$S64) a
1529      working version of this script.
1530    
1531    EOF
1532                exit 1
1533            fi
1534        fi
1535  fi  fi
1536  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1537    
# Line 956  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1548  if test -r $ROOTDIR"/eesupp/src/Makefile
1548          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1549      else      else
1550          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1551          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1552          exit 1          exit 1
1553      fi      fi
1554  fi  fi
1555    
1556    #same for exch2
1557    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1558        echo "  Making source files in exch2 from  templates"
1559        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1560        RETVAL=$?
1561        if test "x${RETVAL}" = x0 ; then
1562            rm -f make_exch2.errors
1563        else
1564            echo "Error: problem encountered while building source files in exch2:"
1565            cat make_exch2.errors 1>&2
1566            exit 1
1567        fi
1568    fi
1569    
1570  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1571  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1572      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 1016  else Line 1622  else
1622          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1623          RETVAL=$?          RETVAL=$?
1624          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1625              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1626              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1627              exit 1              exit 1
1628          fi          fi
# Line 1024  else Line 1630  else
1630              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1631          done          done
1632          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1633          expand_pkg_groups          RET=1
1634            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1635          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1636      fi      fi
1637  fi  fi
1638    
1639  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1640    for i in $PACKAGES ; do
1641        echo $i >> ./.tmp_pack
1642    done
1643    for i in `grep  "-" ./.tmp_pack` ; do
1644        j=`echo $i | sed 's/[-]//'`
1645        DISABLE="$DISABLE $j"
1646    done
1647  pack=  pack=
1648  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1649      addit="t"      addit="t"
# Line 1046  PACKAGES="$pack" Line 1660  PACKAGES="$pack"
1660  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1661  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1662  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1663    # Test if each explicitly referenced package exists
1664  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1665      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1666        if test ! -d "$ROOTDIR/pkg/$j" ; then
1667          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1668          exit 1          exit 1
1669      fi      fi
1670      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1671  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1672  PACKAGES=  PACKAGES=
1673  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1674      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1675  done  done
1676    rm -f ./.tmp_pack
1677  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1678    
1679    #  Check availability of NetCDF and then either build the MNC template
1680    #  files or delete mnc from the list of available packages.
1681    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1682    RETVAL=$?
1683    if test "x$RETVAL" = x0 ; then
1684        if test "x$HAVE_NETCDF" != xt ; then
1685            cat <<EOF
1686    
1687    *********************************************************************
1688    WARNING: the "mnc" package was enabled but tests failed to compile
1689      NetCDF applications.  Please check that:
1690    
1691      1) NetCDF is correctly installed for this compiler and
1692      2) the LIBS variable (within the "optfile") specifies the correct
1693           NetCDF library to link against.
1694    
1695      Due to this failure, the "mnc" package is now DISABLED.
1696    *********************************************************************
1697    
1698    EOF
1699            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1700            DISABLE="$DISABLE mnc"
1701        else
1702            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1703            RETVAL=$?
1704            if test "x${RETVAL}" = x0 ; then
1705                rm -f make_mnc.errors
1706            else
1707                echo "Error: problem encountered while building source files in pkg/mnc:"
1708                cat make_mnc.errors 1>&2
1709                exit 1
1710            fi
1711        fi
1712    fi
1713    
1714  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1715  ck=  ck=
1716  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1125  while test "x$ck" != xtt ; do Line 1775  while test "x$ck" != xtt ; do
1775              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1776              exit 1              exit 1
1777          fi          fi
1778          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1779            #i=$(( $i + 1 ))
1780      done      done
1781      ck=$ck"t"      ck=$ck"t"
1782  done  done
# Line 1144  for i in $PACKAGES ; do Line 1795  for i in $PACKAGES ; do
1795      fi      fi
1796  done  done
1797    
   
1798  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
1799  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
1800  #  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
# Line 1164  for n in $names ; do Line 1814  for n in $names ; do
1814              fi              fi
1815          done          done
1816          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1817              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1818              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1819          fi          fi
1820      fi      fi
1821  done  done
1822  ENABLED_PACKAGES=  ENABLED_PACKAGES=
1823  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1824      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1825      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1826  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1827    
1828  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1829      case $i in      case $i in
1830          aim_v23)          aim_v23)
             DEFINES="$DEFINES -DALLOW_AIM"  
1831              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1832              echo "Warning: ALLOW_AIM is set to enable aim_v23. This is REALLY ugly Jean-Michel :-)"              echo "Warning: ALLOW_AIM is set to enable aim_v23."
1833              ;;              ;;
1834      esac      esac
1835  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
# Line 1189  done Line 1838  done
1838    
1839  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1840  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1841  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1842      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
1843  fi  fi
1844  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
1845      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
1846      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
1847          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1848          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1849          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1850      else              exit 1
1851          SOURCEDIRS="$SOURCEDIRS $adr"          else
1852      fi              SOURCEDIRS="$SOURCEDIRS $adr"
1853      adr="$ROOTDIR/$d/inc"          fi
1854      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
1855          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1856          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1857          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1858      else              exit 1
1859          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
1860      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
1861  done          fi
1862        done
1863    fi
1864    
1865  echo "  Searching for CPP_OPTIONS.h in order to warn about the presence"  echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1866  echo "    of \"#define ALLOW_PKGNAME\"-type statements:"  echo "    of \"#define \"-type statements that are no longer allowed:"
1867  CPP_OPTIONS=  CPP_OPTIONS=
1868    CPP_EEOPTIONS=
1869  spaths=". $INCLUDEDIRS"  spaths=". $INCLUDEDIRS"
1870    names=`ls -1 "$ROOTDIR/pkg"`
1871  for i in $spaths ; do  for i in $spaths ; do
1872      try="$i/CPP_OPTIONS.h"      try="$i/CPP_OPTIONS.h"
1873      #  echo -n "    trying $try : "      if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
     if test -f $try -a -r $try ; then  
1874          echo "    found CPP_OPTIONS=\"$try\""          echo "    found CPP_OPTIONS=\"$try\""
1875          CPP_OPTIONS="$try"          CPP_OPTIONS="$try"
1876          break          # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1877            for n in $names ; do
1878                test_for_package_in_cpp_options $CPP_OPTIONS $n
1879            done
1880        fi
1881        try="$i/CPP_EEOPTIONS.h"
1882        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1883            echo "    found CPP_EEOPTIONS=\"$try\""
1884            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1885    #**** not yet enabled ****
1886    #        test_for_mpi_in_cpp_eeoptions $try
1887    #**** not yet enabled ****
1888            CPP_EEOPTIONS="$try"
1889      fi      fi
1890  done  done
1891  if test "x$CPP_OPTIONS" = x ; then  if test "x$CPP_OPTIONS" = x ; then
1892      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1893      exit 1      exit 1
1894  fi  fi
 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h  
 names=`ls -1 "$ROOTDIR/pkg"`  
 for n in $names ; do  
     test_for_package_in_cpp_options $CPP_OPTIONS $n  
 done  
   
1895    
1896  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
1897  #  compiler.  #  compiler.
# Line 1247  for i in $SOURCEDIRS ; do Line 1905  for i in $SOURCEDIRS ; do
1905          cat $i/$j >> ad_files          cat $i/$j >> ad_files
1906      done      done
1907  done  done
1908    if test ! "x"$FS = "x.f" ; then
1909        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
1910        mv -f ad_files_f ad_files
1911    fi
1912    
1913  echo  echo
1914  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1915  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1916  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1917      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1918          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1919      fi      fi
1920  done  done
# Line 1264  rm -rf .links.tmp Line 1924  rm -rf .links.tmp
1924  mkdir .links.tmp  mkdir .links.tmp
1925  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1926  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1927  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1928  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1929  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1930  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1931  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1932  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1933  for d in $alldirs ; do  for d in $alldirs ; do
1934      deplist=      deplist=
# Line 1277  for d in $alldirs ; do Line 1937  for d in $alldirs ; do
1937      for sf in $sfiles ; do      for sf in $sfiles ; do
1938          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1939              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1940                    ignore_f=f
1941                  case $d/$sf in                  case $d/$sf in
1942                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
1943                          ;;                          ;;
# Line 1284  for d in $alldirs ; do Line 1945  for d in $alldirs ; do
1945                          ;;                          ;;
1946                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
1947                          ;;                          ;;
1948                      ./BUILD_INFO.h)
1949                            ;;
1950                    *)                    *)
1951                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
1952                          deplist="$deplist $sf"                          #  ignore all soft-links
1953                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
1954                                ignore_f=t
1955                            else
1956                                touch .links.tmp/$sf
1957                                deplist="$deplist $sf"
1958                            fi
1959                          ;;                          ;;
1960                  esac                  esac
1961                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  if test "x$ignore_f" = xf ; then
1962                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
1963                      F)                      case $extn in
1964                          echo    " \\"  >> srclist.inc                          F)
1965                          echo -n " $sf" >> srclist.inc                              echo    " \\"  >> srclist.inc
1966                          ;;                              printf " $sf" >> srclist.inc
1967                      F90)                              ;;
1968                          echo    " \\"  >> f90srclist.inc                          F90)
1969                          echo -n " $sf" >> f90srclist.inc                              echo    " \\"  >> f90srclist.inc
1970                          ;;                              printf " $sf" >> f90srclist.inc
1971                      c)                              ;;
1972                          echo    " \\"  >> csrclist.inc                          c)
1973                          echo -n " $sf" >> csrclist.inc                              echo    " \\"  >> csrclist.inc
1974                          ;;                              printf " $sf" >> csrclist.inc
1975                      h)                              ;;
1976                          echo    " \\"  >> hlist.inc                          h)
1977                          echo -n " $sf" >> hlist.inc                              echo    " \\"  >> hlist.inc
1978                          ;;                              printf " $sf" >> hlist.inc
1979                      flow)                              ;;
1980                          echo    " \\"  >> ad_flow_files.inc                          flow)
1981                          echo -n " $sf" >> ad_flow_files.inc                              echo    " \\"  >> ad_flow_files.inc
1982                          ;;                              printf " $sf" >> ad_flow_files.inc
1983                  esac                              ;;
1984                        esac
1985                    fi
1986              fi              fi
1987          fi          fi
1988      done      done
# Line 1329  echo "" >> f90srclist.inc Line 2000  echo "" >> f90srclist.inc
2000  echo "" >> hlist.inc  echo "" >> hlist.inc
2001  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
2002    
2003  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
2004      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
2005  fi  fi
2006  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1338  echo "#    $MACHINE" >> $MAKEFILE Line 2009  echo "#    $MACHINE" >> $MAKEFILE
2009  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2010  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2011  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2012  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2013  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2014  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2015    
2016  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2017  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
2018  EXE_SVD=$EXECUTABLE"_svd"  EXE_SVD=$EXECUTABLE"_svd"
2019    
2020  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2021    #
2022    # OPTFILE="$OPTFILE"
2023  #  #
2024  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2025  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 1383  EXE_SVD     = ${EXE_SVD} Line 2056  EXE_SVD     = ${EXE_SVD}
2056  ENABLED_PACKAGES = ${ENABLED_PACKAGES}  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2057  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2058    
2059    # These files are created by Makefile
2060    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
2061    
2062  EOF  EOF
2063    
2064  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 1400  KPP = ${KPP} Line 2076  KPP = ${KPP}
2076  FC = ${FC}  FC = ${FC}
2077  # Fortran compiler  # Fortran compiler
2078  F90C = ${F90C}  F90C = ${F90C}
2079    # C compiler
2080    CC = ${CC}
2081  # Link editor  # Link editor
2082  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2083    
2084  # Defines for CPP  # Defines for CPP
2085  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1422  CFLAGS = ${CFLAGS} Line 2100  CFLAGS = ${CFLAGS}
2100  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2101  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2102  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2103  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2104  # Name of the Mekfile  # Name of the Mekfile
2105  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2106    
# Line 1433  cat csrclist.inc      >> $MAKEFILE Line 2111  cat csrclist.inc      >> $MAKEFILE
2111  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
2112  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
2113  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2114  echo               >> $MAKEFILE  echo >> $MAKEFILE
2115  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2116  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2117  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2118    echo >> $MAKEFILE
2119    echo '.SUFFIXES:' >> $MAKEFILE
2120    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
2121  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
2122  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
2123    
2124  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2125    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
2126  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2127  \$(EXECUTABLE): ${PACKAGES_DOT_H} AD_CONFIG.h \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
2128          @echo Creating \$@ ...          @echo Creating \$@ ...
2129          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2130  depend:  depend:
2131          @make links          @make links
2132          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
2133          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2134            -rm -f makedepend.out
2135    
2136  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) ${PACKAGES_DOT_H} AD_CONFIG.h  lib: libmitgcmuv.a
2137    
2138    libmitgcmuv.a: \$(OBJFILES)
2139            ar rcv libmitgcmuv.a \$(OBJFILES)
2140    
2141    links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2142    
2143  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
2144    
# Line 1464  output.txt: \$(EXECUTABLE) Line 2147  output.txt: \$(EXECUTABLE)
2147          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2148    
2149  clean:  clean:
2150          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2151  Clean:  Clean:
2152          @make clean          @make clean
2153          @make cleanlinks          @make cleanlinks
2154          -rm -f ${PACKAGES_DOT_H} AD_CONFIG.h          -rm -f \$(SPECIAL_FILES)
2155          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
2156  CLEAN:  CLEAN:
2157          @make Clean          @make Clean
2158          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2159          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2160          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2161          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
2162    
2163  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2164  makefile:  makefile:
2165          $THIS_SCRIPT $@          $THIS_SCRIPT $G2ARGS
2166  cleanlinks:  cleanlinks:
2167          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2168    
2169  # Special targets  # Special targets (SPECIAL_FILES) which are create by make
2170  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2171          @echo Creating \$@ ...          @echo Creating \$@ ...
2172          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@          @$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) > \$@
2173  AD_CONFIG.h:  AD_CONFIG.h:
2174          @echo Creating \$@ ...          @echo Creating \$@ ...
2175          @\$(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 > \$@          @$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 > \$@
2176    FC_NAMEMANGLE.h:
2177            @echo Creating \$@ ...
2178            echo "$FC_NAMEMANGLE" > \$@
2179    
2180  # The normal chain of rules is (  .F - .f - .o  )  BUILD_INFO.h:
2181  .F.f:          @echo Creating \$@ ...
2182    EOF
2183    
2184    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2185    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2186    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2187    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2188    
2189    cat >>$MAKEFILE <<EOF
2190    
2191    # The normal chain of rules is (  .F - .$FS - .o  )
2192    
2193    ## This nullifies any default implicit rules concerning these two file types:
2194    ## %.o : %.F
2195    
2196    .F.$FS:
2197          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2198  .f.o:  .$FS.o:
2199          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2200  .F90.f90:  .F90.$FS90:
2201          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2202  .f90.o:  .$FS90.o:
2203          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2204  .c.o:  .c.o:
2205          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
2206    
2207  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2208  .F.p:  .F.p:
2209          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2210  .p.f:  .p.$FS:
2211          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2212    
2213  #=========================================  #=========================================
# Line 1533  done Line 2234  done
2234    
2235  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2236  echo >> $MAKEFILE  echo >> $MAKEFILE
2237  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2238  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
2239  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2240      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2241      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2242  done  done
2243  echo >> $MAKEFILE  echo >> $MAKEFILE
2244  rm -f ad_files  rm -f ad_files
# Line 1546  cat >>$MAKEFILE <<EOF Line 2247  cat >>$MAKEFILE <<EOF
2247    
2248  # ... AD ...  # ... AD ...
2249  adall: ad_taf  adall: ad_taf
2250  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2251  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2252    
2253  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2254          @\$(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          @$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
2255          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2256          -rm -f ad_config.template          -rm -f ad_config.template
2257          @make \$(F77FILES)          @make \$(F77FILES)
2258          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2259          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2260    
2261  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2262          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2263          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2264    
2265  adtafonly:  adtafonly:
2266          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2267          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2268    
2269  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2270          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2271    
2272  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2273          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2274          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2275    
2276  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2277          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2278    
2279    adonlyfwd:
2280            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2281    
2282    adtrick:
2283            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2284    
2285  # ... FTL ...  # ... FTL ...
2286  ftlall: ftl_taf  ftlall: ftl_taf
2287  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2288  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2289    
2290  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2291          @\$(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          @$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
2292          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2293          -rm -f ftl_config.template          -rm -f ftl_config.template
2294          @make \$(F77FILES)          @make \$(F77FILES)
2295          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2296          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2297    
2298  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2299          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2300          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2301    
2302  ftltafonly:  ftltafonly:
2303          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2304          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2305    
2306  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2307          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2308    
2309  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2310          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2311          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2312    
2313  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2314          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2315    
2316    
2317  # ... SVD ...  # ... SVD ...
2318  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2319  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2320            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2321    svdall: svd_touch svd_taf
2322    
2323  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2324          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2325    
2326            @echo "--->>> Only COMPILE svd code! <<<---"
2327            @echo "--->>> Assumes you previously <<<---"
2328            @echo "--->>> did make svdtaf        <<<---"
2329    
2330    svd_touch:
2331            @echo "--->>> Only COMPILE svd code! <<<---"
2332            @echo "--->>> Assumes you previously <<<---"
2333            @echo "--->>> did make svdtaf        <<<---"
2334            touch ad_taf_output.$FS ftl_taf_output.$FS
2335            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2336            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2337            @$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
2338            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2339            -rm -f ftl_config.template
2340    
2341  #=========================================  #=========================================
2342    
# Line 1631  for i in $KPPFILES ; do Line 2353  for i in $KPPFILES ; do
2353      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2354          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2355      fi      fi
2356      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2357  done  done
2358    
2359  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1641  for i in $NOOPTFILES ; do Line 2363  for i in $NOOPTFILES ; do
2363      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2364          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2365      fi      fi
2366      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2367      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2368  done  done
2369    
# Line 1655  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2377  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2377  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2378    
2379  # Create special header files  # Create special header files
2380  $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"  $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"
2381  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
2382      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2383  else  else
2384      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2385      RETVAL=$?      RETVAL=$?
2386      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
2387          rm -f $PACKAGES_DOT_H".tmp"          rm -f $PACKAGES_DOT_H".tmp"
# Line 1669  else Line 2391  else
2391      fi      fi
2392  fi  fi
2393  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
2394      $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      $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
2395  fi  fi
2396    
2397    
2398  #  Write the "state" for future records  #  Write the "state" for future records
2399  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2400      echo -n "" > genmake_state      printf "" > genmake_state
2401      for i in $gm_state ; do      for i in $gm_state ; do
2402          t1="t2=\$$i"          t1="t2=\$$i"
2403          eval $t1          eval $t1

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.135

  ViewVC Help
Powered by ViewVC 1.1.22