/[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.61 by edhill, Thu Jan 15 04:27:39 2004 UTC revision 1.180 by utke, Thu Dec 11 17:50:56 2008 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      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg[ ]"
17      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg[ ]"
18      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg[ ]"
19      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg[ ]"
20        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg$"
21        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg$"
22        test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg$"
23        test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg$"
24  }  }
25    
26  # Search for particular CPP #cmds associated with MPI  # Search for particular CPP #cmds associated with MPI
27  # usage: test_for_mpi_in_cpp_eeoptions CPP_file  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
28  test_for_mpi_in_cpp_eeoptions() {  test_for_mpi_in_cpp_eeoptions() {
29      cpp_options=$1      cpp_options=$1
30      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI[ ]"
31      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI[ ]"
32      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI[ ]"
33      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI[ ]"
34        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI$"
35        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI$"
36        test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI$"
37        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI$"
38  }  }
39    
40  # Search for particular string in a file. Return 1 if detected, 0 if not  # Search for particular string in a file. Return 1 if detected, 0 if not
# Line 37  test_for_string_in_file() { Line 45  test_for_string_in_file() {
45      grep -i "$strng" $file > /dev/null 2>&1      grep -i "$strng" $file > /dev/null 2>&1
46      RETVAL=$?      RETVAL=$?
47      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
48          echo -n "Error: In $file there is an illegal line: "          printf "Error: In $file there is an illegal line: "
49          grep -i "$strng" $file          grep -i "$strng" $file
50          return 1          exit 99
51      fi      fi
52      return 0      return 0
53  }  }
# Line 67  expand_pkg_groups() { Line 75  expand_pkg_groups() {
75          done          done
76          PACKAGES=$new_packages          PACKAGES=$new_packages
77          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
78            return $matched
79      else      else
80          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
81      fi      fi
82  }  }
83    
84    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
85    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
86    check_for_broken_Ff()  {
87        #  Do we have defaults for $FS and/or $FS90 ?
88        tfs=f
89        tfs9=f90
90        if test "x$FS" != x ; then
91            tfs="$FS"
92        fi
93        if test "x$FS90" != x ; then
94            tfs9="$FS90"
95        fi
96    
97        #  First check the ability to create a *.F/.f pair.
98        cat <<EOF >> genmake_hello.F
99          program hello
100          write(*,*) 'hi'
101          stop
102          end
103    EOF
104        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
105        RETVAL=$?
106        if test "x$RETVAL" != x0 ; then
107            if test "x$FS" = x ; then
108                FS='for'
109                FS90='fr9'
110                check_for_broken_Ff
111            else
112                cat <<EOF 2>&1
113    ERROR: Your file system cannot distinguish between *.F and *.f files
114      (fails the "cp" test) and this program cannot find a suitable
115      replacement extension.  Please try a different build environment or
116      contact the <MITgcm-support@mitgcm.org> list for help.
117    
118    EOF
119                exit -1
120            fi
121            return
122        fi
123        rm -f genmake_hello.*
124    
125        #  Check the ability of ${MAKE} and ${LN} to use the current set
126        #  of extensions.
127        cat <<EOF >> genmake_hello.F
128          program hello
129          write(*,*) 'hi'
130          stop
131          end
132    EOF
133        test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
134        cat <<EOF >> $MAKEFILE
135    .SUFFIXES:
136    .SUFFIXES: .$tfs .F
137    .F.$tfs:
138            $LN \$< \$@
139    EOF
140        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
141        RETVAL=$?
142        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
143            if test "x$FS" = x ; then
144                FS='for'
145                FS90='fr9'
146                check_for_broken_Ff
147            else
148                cat <<EOF 2>&1
149    ERROR: Your file system cannot distinguish between *.F and *.f files
150      (fails the "make/ln" test) and this program cannot find a suitable
151      replacement extension.  Please try a different build environment or
152      contact the <MITgcm-support@mitgcm.org> list for help.
153    
154    EOF
155                exit -1
156                return
157            fi
158        fi
159        rm -f genmake_hello.* $MAKEFILE
160        test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
161    
162        #  If we make it here, use the extensions
163        FS=$tfs
164        FS90=$tfs9
165        return
166    }
167    
168    
169    look_for_makedepend()  {
170    
171        #  The "original" makedepend is part of the Imake system that is
172        #  most often distributed with XFree86 or with an XFree86 source
173        #  package.  As a result, many machines (eg. generic Linux) do not
174        #  have a system-default "makedepend" available.  For those
175        #  systems, we have two fall-back options:
176        #
177        #    1) a makedepend implementation shipped with the cyrus-imapd
178        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
179        #
180        #    2) a known-buggy xmakedpend shell script
181        #
182        #  So the choices are, in order:
183        #
184        #    1) use the user-specified program
185        #    2) use a system-wide default
186        #    3) locally build and use the cyrus implementation
187        #    4) fall back to the buggy local xmakedpend script
188        #
189        if test "x${MAKEDEPEND}" = x ; then
190            which makedepend > /dev/null 2>&1
191            RV0=$?
192            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
193            #  echo 'MAKEFILE="'$MAKEFILE'"'
194            cat <<EOF >> $MAKEFILE
195    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
196    #
197    #   Some "makedepend" implementations will die if they cannot
198    #   find a Makefile -- so this file is here to gives them an
199    #   empty one to find and parse.
200    EOF
201            cat <<EOF >> genmake_tc.f
202          program test
203          write(*,*) 'test'
204          stop
205          end
206    EOF
207            makedepend genmake_tc.f > /dev/null 2>&1
208            RV1=$?
209            test -f $MAKEFILE  &&  rm -f $MAKEFILE
210            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
211            if test "x${RV0}${RV1}" = x00 ; then
212                MAKEDEPEND=makedepend
213            else
214                echo "    a system-default makedepend was not found."
215                
216                #  Try to build the cyrus implementation
217                build_cyrus_makedepend
218                RETVAL=$?
219                if test "x$RETVAL" != x0 ; then
220                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
221                fi
222                rm -f ./genmake_cy_md
223            fi
224        else
225            #  echo "MAKEDEPEND=${MAKEDEPEND}"
226            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
227            RETVAL=$?
228            if test x"$RETVAL" = x0 ; then
229                build_cyrus_makedepend
230            fi
231        fi
232    }
233    
234    
235    build_cyrus_makedepend()  {
236        rm -f ./genmake_cy_md
237        (
238            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
239                &&  ./configure > /dev/null 2>&1  \
240                &&  make > /dev/null 2>&1
241            if test -x ./makedepend.exe ; then
242                $LN ./makedepend.exe ./makedepend
243            fi
244            ./makedepend ifparser.c > /dev/null 2>&1  \
245                &&  echo "true"
246        ) > ./genmake_cy_md
247        grep true ./genmake_cy_md > /dev/null 2>&1
248        RETVAL=$?
249        rm -f ./genmake_cy_md
250        if test "x$RETVAL" = x0 ; then
251            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
252            return 0
253        else
254            echo "WARNING: unable to build cyrus-imapd-makedepend"
255            return 1
256        fi
257    }
258    
259    
260    build_embed_encode()
261    {
262        printf "  building the embed-encode utility...  "
263        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
264            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
265                echo
266                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
267                echo
268                EMBED_SRC=f
269                return 1
270            fi
271            clist="cc gcc c89 $CC"
272            for ic in $clist ; do
273                comm="$ic -o encode_files encode_files.c"
274                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
275                RETVAL=$?
276                if test "x$RETVAL" = x0 ; then
277                    echo "OK"
278                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
279                    return 0
280                fi
281            done
282            echo
283            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
284            echo "      so it has been disabled"
285            echo
286            EMBED_SRC=f
287            return 1
288        fi
289        echo "OK"
290        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
291    }
292    
293    
294  # Guess possible config options for this host  # Guess possible config options for this host
295  find_possible_configs()  {  find_possible_configs()  {
296    
# Line 80  find_possible_configs()  { Line 299  find_possible_configs()  {
299      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
300      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
301      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
302      PLATFORM=$tmp2      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
303        PLATFORM=$tmp3
304        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
305      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
306      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
307            
# Line 100  find_possible_configs()  { Line 321  find_possible_configs()  {
321          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
322      fi      fi
323    
324      # makedepend is not always available      look_for_makedepend
325      if test "x${MAKEDEPEND}" = x ; then  
326        which makedepend >& /dev/null      #================================================================
327        RETVAL=$?      #  look for possible C compilers
328        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
329           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
330           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
331        fi          rm -f ./genmake_hello.c  ./genmake_hello
332            cat >> genmake_hello.c << EOF
333    #include <stdio.h>
334    int main(int argc, char **argv) {
335      printf("Hello!\n");
336      return 0;
337    }
338    EOF
339            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
340            RETVAL=$?
341            if test "x${RETVAL}" = x0 ; then
342                p_CC="$p_CC $c"
343            fi
344        done
345        rm -f ./genmake_hello.c ./genmake_hello
346        if test "x${p_CC}" = x ; then
347            cat 1>&2 <<EOF
348    
349    Error: No C compilers were found in your path.  Please specify one using:
350    
351        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
352        2) the CC or MITGCM_CC environment variables.
353    
354    EOF
355            exit 1
356        else
357            echo "  The possible C compilers found in your path are:"
358            echo "   "$p_CC
359            if test "x$CC" = x ; then
360                CC=`echo $p_CC | $AWK '{print $1}'`
361                echo "  Setting C compiler to: "$CC
362            fi
363      fi      fi
364    
365      # look for possible fortran compilers      #================================================================
366      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible FORTRAN compilers
367        tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 136  Error: No Fortran compilers were found i Line 389  Error: No Fortran compilers were found i
389    
390      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
391      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
392      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
393    
394  EOF  EOF
395          exit 1          exit 1
396      else      else
397          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are:"
398          echo "   "$p_FC          echo "   "$p_FC
         if test "x$FC" = x ; then  
             FC=`echo $p_FC | $AWK '{print $1}'`  
         fi  
399      fi      fi
400    
401      for i in $p_FC ; do      #  Use the first of the compilers found in the current PATH
402          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i      #  that has a correctly-named optfile
403          if test -r $p_OF ; then      if test "x$OPTFILE" = x  -a  "x$FC" = x ; then
404              OPTFILE=$p_OF          for i in $p_FC ; do
405              echo "  The options file:  $p_OF"              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
406              echo "    appears to match so we'll use it."              if test -r $OPTFILE ; then
407              break                  echo "  Setting OPTFILE to: "$OPTFILE
408          fi                  break
409      done              fi
410            done
411        fi
412    
413        if test "x$OPTFILE" = x ; then
414            OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
415            if test ! -r $OPTFILE ; then
416                 echo "  I looked for the file "$OPTFILE" but did not find it"
417            fi
418        fi
419    #    echo "  The options file:  $p_OF"
420    #    echo "    appears to match so we'll use it."
421    #   for i in $p_FC ; do
422    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
423    #if test -r $p_OF ; then
424    #    OPTFILE=$p_OF
425    #    echo "  The options file:  $p_OF"
426    #    echo "    appears to match so we'll use it."
427    #    break
428    #fi
429    #   done
430      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
431          cat 1>&2 <<EOF          cat 1>&2 <<EOF
432    
# Line 215  get_pdepend_list()  { Line 485  get_pdepend_list()  {
485      . ./.pd_tmp      . ./.pd_tmp
486      rm -f ./.pd_tmp      rm -f ./.pd_tmp
487    
488      echo -n "PNAME = "${}      printf "PNAME = "${}
489  }  }
490    
491    
# Line 229  Usage: "$0" [OPTIONS] Line 499  Usage: "$0" [OPTIONS]
499      -help | --help | -h | --h      -help | --help | -h | --h
500            Print this help message and exit.            Print this help message and exit.
501    
502        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
503          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
504              Use "NAME" as the adoptfile.  By default, the file at
505              "tools/adjoint_options/adjoint_default" will be used.
506    
507      -nooptfile | --nooptfile      -nooptfile | --nooptfile
508        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
509        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
# Line 253  Usage: "$0" [OPTIONS] Line 528  Usage: "$0" [OPTIONS]
528        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
529            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
530    
531        -makedepend NAME | -md NAME
532          --makedepend=NAME | -md=NAME
533              Use "NAME" for the MAKEDEPEND program.
534    
535      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
536        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
537            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
# Line 289  Usage: "$0" [OPTIONS] Line 568  Usage: "$0" [OPTIONS]
568            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
569            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
570    
571        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
572              Use "NAME" as the C compiler.  By default, genmake
573              will search for a working compiler by trying a list of
574              "usual suspects" such as gcc, c89, cc, etc.
575    
576      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
577            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
578            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
579            is being used.            is being used.
580    
581        -ignoretime | -ignore_time | --ignoretime | --ignore_time
582              Ignore all the "wall clock" routines entirely.  This will
583              not in any way hurt the model results -- it simply means
584              that the code that checks how long the model spends in
585              various routines will give junk values.
586    
587        -ts | --ts
588              Produce timing information per timestep
589        -papis | --papis
590              Produce summary MFlop/s (and IPC) with PAPI per timestep
591        -pcls | --pcls
592              Produce summary MFlop/s etc. with PCL per timestep
593        -foolad | --foolad
594              Fool the AD code generator
595        -papi | --papi
596              Performance analysis with PAPI
597        -pcl | --pcl
598              Performance analysis with PCL
599        -hpmt | --hpmt
600              Performance analysis with the HPM Toolkit
601    
602        -gsl | --gsl
603              Use GSL to control floating point rounding and precision
604        -devel | --devel
605              Add additional warning and debugging flags for development
606    
607        -mpi | --mpi
608              Include MPI header files and link to MPI libraries
609        -mpi=PATH | --mpi=PATH
610              Include MPI header files and link to MPI libraries using MPI_ROOT
611              set to PATH. i.e. Include files from \$PATH/include, link to libraries
612              from \$PATH/lib and use binaries from \$PATH/bin.
613    
614        -es | --es | -embed-source | --embed-source
615              Embed a tarball containing the full source code
616              (including the Makefile, etc.) used to build the
617              executable [off by default]
618    
619        -bash NAME
620              Explicitly specify the Bourne or BASH shell to use
621    
622    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
623    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
624    
# Line 314  EOF Line 639  EOF
639    
640  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
641  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
642    
643        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
644        if test ! "x$FC_NAMEMANGLE" = x ; then
645            return 0
646        fi
647    
648      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
649            
650      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 331  WARNING: Please contact <MITgcm-support@ Line 662  WARNING: Please contact <MITgcm-support@
662  EOF  EOF
663          return 1          return 1
664      fi      fi
665      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`
666      RETVAL=$?      RETVAL=$?
667      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
668          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 343  WARNING: Please contact <MITgcm-support@ Line 674  WARNING: Please contact <MITgcm-support@
674  EOF  EOF
675          return 1          return 1
676      fi      fi
677      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
678        subroutine tcall( string )        subroutine tcall( string )
679        character*(*) string        character*(*) string
680        call tsub( string )        call tsub( string )
681        end        end
682  EOF  EOF
683      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
684      RETVAL=$?      RETVAL=$?
685      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
686          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 361  WARNING: Please contact <MITgcm-support@ Line 692  WARNING: Please contact <MITgcm-support@
692  EOF  EOF
693          return 1          return 1
694      fi      fi
695      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`
696      RETVAL=$?      RETVAL=$?
697      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
698          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 415  void FC_NAMEMANGLE(cloc) ( double *curti Line 746  void FC_NAMEMANGLE(cloc) ( double *curti
746   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
747  }  }
748  EOF  EOF
749      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
750        echo $COMM >> genmake_warnings
751        $COMM >> genmake_warnings 2>&1
752      RET_C=$?      RET_C=$?
753      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
754        program hello        program hello
755        Real*8 wtime        REAL*8 wtime
756        external cloc        external cloc
757        call cloc(wtime)        call cloc(wtime)
758        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
759        end program hello        end
760  EOF  EOF
761      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
762        echo $COMM >> genmake_warnings
763        $COMM >> genmake_warnings 2>&1
764      RET_F=$?      RET_F=$?
765      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
766      RETVAL=$?      RETVAL=$?
767      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
768          HAVE_CLOC=t          HAVE_CLOC=t
# Line 437  EOF Line 772  EOF
772  }  }
773    
774    
775    check_HAVE_SIGREG()  {
776        if test ! "x$HAVE_SIGREG" = x ; then
777            return
778        fi
779        get_fortran_c_namemangling
780        cat <<EOF > genmake_tc_1.c
781    $FC_NAMEMANGLE
782    #include <stdlib.h>
783    #include <stdio.h>
784    #include <signal.h>
785    #include <errno.h>
786    #include <ucontext.h>
787    
788    int * ip;
789    
790    static void killhandler(
791        unsigned int sn, siginfo_t  si, struct ucontext *sc )
792    {
793        *ip = *ip + 1;
794        return;
795    }
796    
797    void FC_NAMEMANGLE(sigreg) (int * aip)
798    {
799        struct sigaction s;
800        ip = aip;
801        s.sa_flags = SA_SIGINFO;
802        s.sa_sigaction = (void *)killhandler;
803        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
804            printf("Sigaction returned error = %d\n", errno);
805            exit(0);
806        }
807        return;
808    }
809    EOF
810        COMM="$CC $CFLAGS -c genmake_tc_1.c"
811        echo $COMM >> genmake_warnings
812        $COMM >> genmake_warnings 2>&1
813        RET_C=$?
814        cat <<EOF > genmake_tc_2.$FS
815          program hello
816          integer anint
817          common /iv/ anint
818          external sigreg
819          call sigreg(anint)
820          end
821    EOF
822        echo >> genmake_warnings
823        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
824        cat genmake_tc_2.$FS >> genmake_warnings
825        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
826        echo $COMM >> genmake_warnings
827        $COMM >> genmake_warnings 2>&1
828        RETVAL=$?
829        if test "x$RETVAL" = x0 ; then
830            HAVE_SIGREG=t
831            DEFINES="$DEFINES -DHAVE_SIGREG"
832        fi
833        rm -f genmake_tc*
834    }
835    
836    
837    check_HAVE_SETRLSTK()  {
838        if test "x$HAVE_SETRLSTK" = xt ; then
839            DEFINES="$DEFINES -DHAVE_SETRLSTK"
840            return
841        fi  
842        if test ! "x$HAVE_SETRLSTK" = x ; then
843            return
844        fi
845        get_fortran_c_namemangling
846        cat <<EOF > genmake_tc_1.c
847    $FC_NAMEMANGLE
848    #include <sys/time.h>
849    #include <sys/resource.h>
850    #include <unistd.h>
851    void FC_NAMEMANGLE(setrlstk) ()
852    {
853        struct rlimit rls;
854        rls.rlim_cur = RLIM_INFINITY;
855        rls.rlim_max = RLIM_INFINITY;
856        setrlimit(RLIMIT_STACK, &rls);
857        return;
858    }
859    EOF
860        COMM="$CC $CFLAGS -c genmake_tc_1.c"
861        echo $COMM >> genmake_warnings
862        $COMM >> genmake_warnings 2>&1
863        RET_C=$?
864        cat <<EOF > genmake_tc_2.$FS
865          program hello
866          external setrlstk
867          call setrlstk()
868          end
869    EOF
870        echo >> genmake_warnings
871        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
872        cat genmake_tc_2.$FS >> genmake_warnings
873        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
874        echo $COMM >> genmake_warnings
875        $COMM >> genmake_warnings 2>&1
876        RETVAL=$?
877        if test "x$RETVAL" = x0 ; then
878            HAVE_SETRLSTK=t
879            DEFINES="$DEFINES -DHAVE_SETRLSTK"
880        fi
881        rm -f genmake_tc*
882    }
883    
884    
885    check_HAVE_STAT()  {
886        get_fortran_c_namemangling
887        cat <<EOF > genmake_tc_1.c
888    $FC_NAMEMANGLE
889    #include <stdio.h>
890    #include <stdlib.h>
891    #include <unistd.h>
892    #include <sys/stat.h>
893    #include <sys/types.h>
894    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
895    {
896        char name[512];
897        struct stat astat;
898    
899        name[0] = 'a'; name[1] = '\0';
900        if (! stat(name, &astat))
901            *nbyte = (int)(astat.st_size);
902        else
903            *nbyte = -1;
904    }
905    EOF
906        COMM="$CC $CFLAGS -c genmake_tc_1.c"
907        echo $COMM >> genmake_warnings
908        $COMM >> genmake_tc.log 2>&1
909        RET_C=$?
910        cat <<EOF > genmake_tc_2.$FS
911          program hello
912          integer nbyte
913          call tfsize(nbyte)
914          print *," HELLO WORLD", nbyte
915          end
916    EOF
917        echo >> genmake_warnings
918        echo "running: check_HAVE_STAT()" >> genmake_warnings
919        cat genmake_tc_2.$FS >> genmake_warnings
920        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
921        echo $COMM >> genmake_warnings
922        $COMM >> genmake_tc.log 2>&1
923        RETVAL=$?
924        if test "x$RETVAL" = x0 ; then
925            HAVE_STAT=t
926            DEFINES="$DEFINES -DHAVE_STAT"
927        fi
928        rm -f genmake_tc*
929    }
930    
931    
932  check_netcdf_libs()  {  check_netcdf_libs()  {
933        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
934            return
935        fi
936        echo >> genmake_warnings
937        echo "running: check_netcdf_libs()" >> genmake_warnings
938      cat <<EOF > genmake_tnc.F      cat <<EOF > genmake_tnc.F
939        program fgennc        program fgennc
940  #include "netcdf.inc"  #include "netcdf.inc"
941    EOF
942        if test ! "x$MPI" = x ; then
943            echo '#include "mpif.h"' >> genmake_tnc.F
944        fi
945        cat <<EOF >> genmake_tnc.F
946        integer iret, ncid, xid        integer iret, ncid, xid
947        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
948        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
# Line 450  check_netcdf_libs()  { Line 952  check_netcdf_libs()  {
952        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
953        end        end
954  EOF  EOF
955      $CPP genmake_tnc.F > genmake_tnc.f  \      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
956          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1      cat genmake_tnc.F >> genmake_tnc.log
957        echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
958        RET_CPP=f
959        COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
960        echo "$COMM" >> genmake_tnc.log
961        eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
962        if test "x$RET_CPP" = xf ; then
963            echo "  WARNING: CPP failed to pre-process the netcdf test." \
964                >> genmake_tnc.log
965            echo "    Please check that \$INCLUDES is properly set." \
966                >> genmake_tnc.log
967        fi
968        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
969        echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
970        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
971            &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
972      RET_COMPILE=$?      RET_COMPILE=$?
973      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      cat genmake_tnc.log >> genmake_warnings
974      RETVAL=$?  
975      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      #EH3  Remove test program execution for machines that either disallow
976        #EH3  execution or cannot support it (eg. cross-compilers)
977        #EH3
978        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
979        #EH3 RETVAL=$?
980        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
981    
982        if test "x$RET_COMPILE" = x0 ; then
983          HAVE_NETCDF=t          HAVE_NETCDF=t
984      else      else
985            # try again with "-lnetcdf" added to the libs
986            echo "try again with added '-lnetcdf'" > genmake_tnc.log
987            echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
988            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
989            echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
990            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
991                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
992                &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
993            RET_COMPILE=$?
994          cat genmake_tnc.log >> genmake_warnings          cat genmake_tnc.log >> genmake_warnings
995            if test "x$RET_COMPILE" = x0 ; then
996                LIBS="$LIBS -lnetcdf"
997                HAVE_NETCDF=t
998            else
999            # try again with "-lnetcdff" added to the libs
1000                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1001                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1002                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1003                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1004                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1005                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1006                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1007                RET_COMPILE=$?
1008                cat genmake_tnc.log >> genmake_warnings
1009                if test "x$RET_COMPILE" = x0 ; then
1010                    LIBS="$LIBS -lnetcdff -lnetcdf"
1011                    HAVE_NETCDF=t
1012                fi
1013            fi
1014      fi      fi
1015      rm -f genmake_tnc*      rm -f genmake_tnc*
1016  }  }
1017    
1018    
1019    
1020    ###############################################################################
1021    #   Sequential part of script starts here
1022    ###############################################################################
1023    
1024  #  Set defaults here  #  Set defaults here
1025  COMMANDL="$0 $@"  COMMANDL="$0 $@"
1026    
# Line 471  PLATFORM= Line 1028  PLATFORM=
1028  LN=  LN=
1029  S64=  S64=
1030  KPP=  KPP=
1031  FC=  #FC=
1032  CPP=  #CC=gcc
1033    #CPP=
1034  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
1035  DEFINES=  DEFINES=
1036  PACKAGES=  PACKAGES=
1037  ENABLE=  ENABLE=
1038  DISABLE=  DISABLE=
1039  MAKEFILE=  # MAKEFILE=
1040  MAKEDEPEND=  # MAKEDEPEND=
1041  PDEPEND=  PDEPEND=
1042  DUMPSTATE=t  DUMPSTATE=t
1043  PDEFAULT=  PDEFAULT=
1044  OPTFILE=  OPTFILE=
1045  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
1046  FFLAGS=  FFLAGS=
1047  FOPTIM=  FOPTIM=
1048    FEXTRAFLAGS=
1049  CFLAGS=  CFLAGS=
1050  KFLAGS1=  KFLAGS1=
1051  KFLAGS2=  KFLAGS2=
1052    #LDADD=
1053  LIBS=  LIBS=
1054  KPPFILES=  KPPFILES=
1055  NOOPTFILES=  NOOPTFILES=
1056  NOOPTFLAGS=  NOOPTFLAGS=
1057    MPI=
1058    MPIPATH=
1059    TS=
1060    PAPIS=
1061    PCLS=
1062    FOOLAD=
1063    PAPI=
1064    PCL=
1065    HPMT=
1066    GSL=
1067    DEVEL=
1068    HAVE_TEST_L=
1069    
1070  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
1071  HAVE_SYSTEM=  HAVE_SYSTEM=
1072  HAVE_FDATE=  HAVE_FDATE=
1073  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1074  HAVE_CLOC=  HAVE_CLOC=
1075    # HAVE_SETRLSTK=
1076    HAVE_STAT=
1077  HAVE_NETCDF=  HAVE_NETCDF=
1078    HAVE_ETIME=
1079    IGNORE_TIME=
1080    
1081  MODS=  MODS=
1082  TOOLSDIR=  TOOLSDIR=
# Line 509  SOURCEDIRS= Line 1084  SOURCEDIRS=
1084  INCLUDEDIRS=  INCLUDEDIRS=
1085  STANDARDDIRS="USE_THE_DEFAULT"  STANDARDDIRS="USE_THE_DEFAULT"
1086    
1087    G2ARGS=
1088    BASH=
1089  PWD=`pwd`  PWD=`pwd`
1090  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1091  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1092  THISHOSTNAME=`hostname`  EMBED_SRC=
1093    THISHOST=`hostname`
1094  THISCWD=`pwd`  THISCWD=`pwd`
1095  THISDATE=`date`  THISDATE=`date`
1096    THISUSER=`echo $USER`
1097    THISVER=
1098  MACHINE=`uname -a`  MACHINE=`uname -a`
1099  EXECUTABLE=  EXECUTABLE=
1100  EXEHOOK=  EXEHOOK=
# Line 524  IEEE= Line 1104  IEEE=
1104  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
1105      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
1106  fi  fi
1107    FS=
1108    FS90=
1109    
1110  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
1111  AD_OPTFILE=  AD_OPTFILE=
# Line 541  TAMC_EXTRA= Line 1123  TAMC_EXTRA=
1123    
1124  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1125  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1126  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI JAM DUMPSTATE STANDARDDIRS"
1127    
1128  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1129  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 FEXTRAFLAGS"
1130  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1131  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1132  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1133  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
1134    
1135  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1136  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 571  EOF Line 1153  EOF
1153    
1154  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1155  gm_local="genmake_local"  gm_local="genmake_local"
1156  for i in . $MODS ; do  printf "  getting local config information:  "
1157      if test -r $i/$gm_local ; then  if test -f $gm_local ; then
         . $i/$gm_local  
         break  
     fi  
 done  
 echo -n "  getting local config information:  "  
 if test -e $gm_local ; then  
1158      echo "using $gm_local"      echo "using $gm_local"
1159      . $gm_local      . $gm_local
1160      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 587  else Line 1163  else
1163      echo "none found"      echo "none found"
1164  fi  fi
1165    
1166  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
1167  #OPTIONS=  #OPTIONS=
1168  #n=0  #n=0
1169  #for i ; do  #for i ; do
# Line 599  fi Line 1175  fi
1175  #done  #done
1176  #parse_options  #parse_options
1177  ac_prev=  ac_prev=
1178  for ac_option ; do  for ac_option in "$@" ; do
1179    
1180        G2ARGS="$G2ARGS \"$ac_option\""
1181    
1182      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
1183      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 642  for ac_option ; do Line 1220  for ac_option ; do
1220          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1221              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1222                    
1223            -bash | --bash)
1224                ac_prev=BASH ;;
1225            -bash=* | --bash=*)
1226                BASH=$ac_optarg ;;
1227            
1228            -makedepend | --makedepend | -md | --md)
1229                ac_prev=MAKEDEPEND ;;
1230            -makedepend=* | --makedepend=* | -md=* | --md=*)
1231                MAKEDEPEND=$ac_optarg ;;
1232            
1233          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1234              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1235          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 683  for ac_option ; do Line 1271  for ac_option ; do
1271  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1272  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1273  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1274                        
1275            -cc | --cc)
1276                ac_prev=CC ;;
1277            -cc=* | --cc=*)
1278                CC=$ac_optarg ;;
1279            
1280          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1281              ac_prev=FC ;;              ac_prev=FC ;;
1282          -fc=* | --fc=*)          -fc=* | --fc=*)
1283              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1284                    
1285            -fs | --fs)
1286                ac_prev=FS ;;
1287            -fs=* | --fs=*)
1288                FS=$ac_optarg ;;
1289            
1290            -fs90 | --fs90)
1291                ac_prev=FS90 ;;
1292            -fs90=* | --fs90=*)
1293                FS90=$ac_optarg ;;
1294            
1295          -ieee | --ieee)          -ieee | --ieee)
1296              IEEE=true ;;              IEEE=true ;;
1297          -noieee | --noieee)          -noieee | --noieee)
1298              IEEE= ;;              IEEE= ;;
1299    
1300            -ts | --ts)
1301                TS=true ;;
1302            -papis | --papis)
1303                PAPIS=true ;;
1304            -pcls | --pcls)
1305                PCLS=true ;;
1306            -foolad | --foolad)
1307                FOOLAD=true ;;
1308            -papi | --papi)
1309                PAPI=true ;;
1310            -pcl | --pcl)
1311                PCL=true ;;
1312            -hpmt | --hpmt)
1313                HPMT=true ;;
1314    
1315            -gsl | --gsl)
1316                GSL=true ;;
1317    
1318            -devel | --devel)
1319                DEVEL=true ;;
1320    
1321            -mpi | --mpi)
1322                MPI=true ;;
1323            -mpi=* | --mpi=*)
1324                MPIPATH=$ac_optarg
1325                MPI=true ;;
1326                    
1327  #       -jam | --jam)  #       -jam | --jam)
1328  #           JAM=1 ;;  #           JAM=1 ;;
# Line 711  for ac_option ; do Line 1341  for ac_option ; do
1341              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1342          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1343              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1344            
1345            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1346                IGNORE_TIME="-DIGNORE_TIME" ;;
1347    
1348            -es | --es | -embed-source | --embed-source)
1349                EMBED_SRC=t ;;
1350    
1351          -*)          -*)
1352              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 726  for ac_option ; do Line 1362  for ac_option ; do
1362            
1363  done  done
1364    
1365    
1366  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1367      echo      echo
1368      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1369      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1370      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1371      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1372      echo      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1373      echo "  for directions on how to setup and use the new \"genmake2\" input"      echo "WARNING: ignore \"./.genmakerc\" and continue."
     echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."  
1374      echo      echo
1375  fi  fi
1376    
1377    #  Find the MITgcm ${ROOTDIR}
1378  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1379      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1380        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
1381          ROOTDIR=".."          ROOTDIR=".."
1382      else      else
1383          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1384              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
1385                  ROOTDIR=$d                  ROOTDIR=$d
1386                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1387                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1388                  break                  break
1389              fi              fi
# Line 763  if test ! -d ${ROOTDIR} ; then Line 1401  if test ! -d ${ROOTDIR} ; then
1401      exit 1      exit 1
1402  fi  fi
1403    
1404    #  Find the MITgcm ${THISVER}
1405    version_file="${ROOTDIR}/doc/tag-index"
1406    if test -f $version_file ; then
1407        THISVER=`grep '^checkpoint' $version_file | head -1`
1408    #-  remove ./BUILD_INFO.h file if older than version_file
1409        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1410            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1411            rm -f ./BUILD_INFO.h
1412        fi
1413    fi
1414    
1415    if test "x$MAKEFILE" = x ; then
1416        MAKEFILE="Makefile"
1417    fi
1418    
1419  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1420  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1421      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 779  if test "x$OPTFILE" != xNONE ; then Line 1432  if test "x$OPTFILE" != xNONE ; then
1432          . "$OPTFILE"          . "$OPTFILE"
1433          RETVAL=$?          RETVAL=$?
1434          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1435              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1436              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1437              exit 1              exit 1
1438          fi          fi
# Line 806  if test "x${AD_OPTFILE}" != xNONE ; then Line 1459  if test "x${AD_OPTFILE}" != xNONE ; then
1459          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1460          RETVAL=$?          RETVAL=$?
1461          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1462              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1463              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1464              exit 1              exit 1
1465          fi          fi
# Line 819  if test "x${AD_OPTFILE}" != xNONE ; then Line 1472  if test "x${AD_OPTFILE}" != xNONE ; then
1472      fi      fi
1473  fi  fi
1474    
1475  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1476    #  Set default values if not set by the optfile
1477    #
1478    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1479  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1480    if test ! "x$BASH" = x ; then
1481        # add a trailing space so that it works within the Makefile syntax (see below)
1482        BASH="$BASH "
1483    fi
1484  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1485      cat <<EOF 1>&2      cat <<EOF 1>&2
1486    
# Line 831  Error: no Fortran compiler: please speci Line 1491  Error: no Fortran compiler: please speci
1491  EOF  EOF
1492      exit 1      exit 1
1493  fi  fi
1494    if test "x$CC" = x ; then
1495        CC=cc
1496    #     cat <<EOF 1>&2
1497    # Error: no C compiler: please specify using one of the following:
1498    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1499    #   2) the "-cc=XXX" command-line option
1500    #   3) the "./genmake_local" file
1501    # EOF
1502    #     exit 1
1503    fi
1504  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1505      LINK=$FC      LINK=$FC
1506  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1507  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1508      MAKE="make"      MAKE="make"
1509  fi  fi
1510    if test "x$CPP" = x ; then
1511        CPP=cpp
1512    fi
1513    #EH3 === UGLY ===
1514    #  The following is an ugly little hack to check for $CPP in /lib/ and
1515    #  it should eventually be replaced with a more general function that
1516    #  searches a combo of the user's path and a list of "usual suspects"
1517    #  to find the correct location for binaries such as $CPP.
1518    for i in " " "/lib/" ; do
1519        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1520    done
1521    #EH3 === UGLY ===
1522  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1523  RETVAL=$?  RETVAL=$?
1524  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 856  EOF Line 1535  EOF
1535  else  else
1536      rm -f test_cpp      rm -f test_cpp
1537  fi  fi
1538  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1539  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1540      LN="ln -s"      LN="ln -s"
1541  fi  fi
# Line 874  Error: The command "ln -s" failed -- ple Line 1551  Error: The command "ln -s" failed -- ple
1551  EOF  EOF
1552      exit 1      exit 1
1553  fi  fi
1554    test -L genmake_tlink > /dev/null 2>&1
1555    RETVAL=$?
1556    if test "x$RETVAL" = x0 ; then
1557        HAVE_TEST_L=t
1558    fi
1559  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1560    
1561    #  Check for broken *.F/*.f handling and fix if possible
1562    check_for_broken_Ff
1563    
1564    if test ! "x$MPI" = x ; then
1565          echo "  Turning on MPI cpp macros"
1566          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1567    fi
1568    
1569    if test ! "x$TS" = x ; then
1570          echo "  Turning on timing per timestep"
1571          if test ! "x$FOOLAD" = x ; then
1572                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1573          else
1574                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1575          fi
1576          PACKAGES="$PACKAGES showflops"
1577    fi
1578    if test ! "x$PAPIS" = x ; then
1579          echo "  Turning on PAPI flop summary per timestep"
1580          echo "  Please make sure PAPIINC, PAPILIB are defined"
1581          if test ! "x$FOOLAD" = x ; then
1582                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1583          else
1584                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1585          fi
1586          INCLUDES="$INCLUDES $PAPIINC"
1587          LIBS="$LIBS $PAPILIB"
1588          PACKAGES="$PACKAGES showflops"
1589    fi
1590    if test ! "x$PCLS" = x ; then
1591          echo "  Turning on PCL counter summary per timestep"
1592          echo "  Please make sure PCLINC, PCLLIB are defined"
1593          if test ! "x$FOOLAD" = x ; then
1594                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1595          else
1596                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1597          fi
1598          INCLUDES="$INCLUDES $PCLINC"
1599          LIBS="$LIBS $PCLLIB"
1600          PACKAGES="$PACKAGES showflops"
1601    fi
1602    if test ! "x$PAPI" = x ; then
1603          if test ! "x$PAPIS" = x ; then
1604              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1605              echo "  Sticking with PAPI flop summary per timestep!"
1606          else
1607              echo "  Turning on performance analysis with PAPI"
1608              echo "  Please make sure PAPIINC, PAPILIB are defined"
1609              DEFINES="$DEFINES -DUSE_PAPI"
1610              INCLUDES="$INCLUDES $PAPIINC"
1611              LIBS="$LIBS $PAPILIB"
1612          fi
1613    fi
1614    if test ! "x$PCL" = x ; then
1615          if test ! "x$PCLS" = x ; then
1616              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1617              echo "  Sticking with PCL flop summary per timestep!"
1618          else
1619              echo "  Turning on performance analysis with PCL"
1620              echo "  Please make sure PCLINC, PCLLIB are defined"
1621              DEFINES="$DEFINES -DUSE_PCL"
1622              INCLUDES="$INCLUDES $PCLINC"
1623              LIBS="$LIBS $PCLLIB"
1624          fi
1625    fi
1626    if test ! "x$HPMT" = x ; then
1627          if test ! "x$PAPI" = x ; then
1628              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1629              echo "  Sticking with PAPI!"
1630          else if test ! "x$PCL" = x ; then
1631              echo "  PCL and the HPM Toolkit cannot co-exist!"
1632              echo "  Sticking with PCL!"
1633          else
1634              echo "  Turning on performance analysis with the HPM Toolkit"
1635              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1636              DEFINES="$DEFINES -DUSE_LIBHPM"
1637              INCLUDES="$INCLUDES $HPMTINC"
1638              LIBS="$LIBS $HPMTLIB"
1639          fi
1640          fi
1641    fi
1642    if test ! "x$GSL" = x ; then
1643          echo "  Turning on use of GSL to control floating point calculations"
1644          echo "  Please make sure GSLINC, GSLLIB are defined"
1645          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1646          INCLUDES="$INCLUDES $GSLINC"
1647          LIBS="$LIBS $GSLLIB"
1648    fi
1649    
1650  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1651  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1652  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1653        program hello        program hello
1654        call system('echo hi')        call system('echo hi')
1655        end        end
1656  EOF  EOF
1657  $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
1658  RETVAL=$?  RETVAL=$?
1659  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1660      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 896  else Line 1666  else
1666  fi  fi
1667  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1668    
1669  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1670  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1671        program hello        program hello
1672        CHARACTER(128) string        CHARACTER*(128) string
1673        string = ' '        string = ' '
1674        call fdate( string )        call fdate( string )
1675        print *, string        print *, string
1676        end        end
1677  EOF  EOF
1678  $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
1679  RETVAL=$?  RETVAL=$?
1680  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1681      HAVE_FDATE=t      HAVE_FDATE=t
# Line 917  else Line 1687  else
1687  fi  fi
1688  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1689    
1690  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1691    cat > genmake_tcomp.$FS <<EOF
1692          program hello
1693          REAL*4 ACTUAL, TARRAY(2)
1694          EXTERNAL ETIME
1695          REAL*4 ETIME
1696          actual = etime( tarray )
1697          print *, tarray
1698          end
1699    EOF
1700    $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1701    RETVAL=$?
1702    if test "x$RETVAL" = x0 ; then
1703        HAVE_ETIME=t
1704        DEFINES="$DEFINES -DHAVE_ETIME"
1705        echo "yes"
1706    else
1707        HAVE_ETIME=
1708        echo "no"
1709    fi
1710    rm -f genmake_tcomp*
1711    
1712    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1713  check_HAVE_CLOC  check_HAVE_CLOC
1714  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1715      echo "yes"      echo "yes"
1716  else  else
1717      echo "no"      echo "no"
1718        if test "x$EMBED_SRC" = xt ; then
1719            echo "    WARNING: you requested file embedding but it has"
1720            echo "      been disabled since C code cannot be called"
1721            EMBED_SRC=
1722        fi
1723    fi
1724    rm -f genmake_t*
1725    
1726    printf "  Can we unlimit the stack size using $FC...  "
1727    check_HAVE_SETRLSTK
1728    if test "x$HAVE_SETRLSTK" = xt ; then
1729        echo "yes"
1730    else
1731        echo "no"
1732    fi
1733    rm -f genmake_t*
1734    
1735    printf "  Can we register a signal handler using $FC...  "
1736    check_HAVE_SIGREG
1737    if test "x$HAVE_SIGREG" = xt ; then
1738        echo "yes"
1739    else
1740        echo "no"
1741  fi  fi
1742  rm -f genmake_t*  rm -f genmake_t*
1743    
1744  echo -n "  Can we create NetCDF-enabled binaries...  "  printf "  Can we use stat() through C calls...  "
1745    check_HAVE_STAT
1746    if test "x$HAVE_STAT" != x ; then
1747        echo "yes"
1748    else
1749        echo "no"
1750    fi
1751    rm -f genmake_t*
1752    
1753    printf "  Can we create NetCDF-enabled binaries...  "
1754  check_netcdf_libs  check_netcdf_libs
1755  if test "x$HAVE_NETCDF" != x ; then  if test "x$HAVE_NETCDF" != x ; then
1756      echo "yes"      echo "yes"
1757  else  else
1758      echo "no"      echo "no"
1759  fi  fi
1760    DEFINES="$DEFINES $IGNORE_TIME"
1761    
1762    if test "x$EMBED_SRC" = xt ; then
1763        build_embed_encode
1764    fi
1765    if test "x$EMBED_SRC" = xt ; then
1766        ENABLE="$ENABLE embed_files"
1767    fi
1768    
1769    
1770  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1771  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1772  for d in $MODS ; do  for d in $MODS ; do
1773      if test ! -d $d ; then      if test ! -d $d ; then
1774          echo          echo
1775          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1776          exit 1          exit 1
1777      else      else
1778          echo -n " $d"          printf " $d"
1779          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1780          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1781      fi      fi
1782  done  done
1783  echo  echo
1784    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1785  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1786      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1787  fi  fi
1788    
1789  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1790      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1791        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1792          EXEDIR=../exe          EXEDIR=../exe
1793      else      else
1794          EXEDIR=.          EXEDIR=.
# Line 973  if test "x${TOOLSDIR}" = x ; then Line 1803  if test "x${TOOLSDIR}" = x ; then
1803      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1804  fi  fi
1805  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1806      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1807      exit 1      exit 1
1808  fi  fi
1809  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1810      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1811        RETVAL=$?
1812        if test "x${RETVAL}" = x0 ; then
1813            S64='$(TOOLSDIR)/set64bitConst.sh'
1814        else
1815            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1816            RETVAL=$?
1817            if test "x${RETVAL}" = x0 ; then
1818                S64='$(TOOLSDIR)/set64bitConst.csh'
1819            else
1820                cat <<EOF
1821    
1822    ERROR: neither of the two default scripts:
1823    
1824        ${TOOLSDIR}/set64bitConst.sh
1825        ${TOOLSDIR}/set64bitConst.csh
1826    
1827      are working so please check paths or specify (with \$S64) a
1828      working version of this script.
1829    
1830    EOF
1831                exit 1
1832            fi
1833        fi
1834  fi  fi
1835  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1836    
# Line 994  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1847  if test -r $ROOTDIR"/eesupp/src/Makefile
1847          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1848      else      else
1849          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1850          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1851          exit 1          exit 1
1852      fi      fi
1853  fi  fi
1854    
1855  #same for exch2  #same for pkg/exch2 and pkg/regrid
1856  if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then  for pdir in exch2 regrid ; do
1857      echo "  Making source files in exch2 from  templates"      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1858      ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1          echo "  Making source files in pkg/${pdir} from templates"
1859      RETVAL=$?          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1
1860      if test "x${RETVAL}" = x0 ; then          RETVAL=$?
1861          rm -f make_exch2.errors          if test "x${RETVAL}" = x0 ; then
1862      else              rm -f make_${pdir}.errors
1863          echo "Error: problem encountered while building source files in exch2:"          else
1864          cat make_exch2.errors              echo "Error: problem encountered while building source files in pkg/${pdir}:"
1865          exit 1              cat make_${pdir}.errors 1>&2
1866                exit 1
1867            fi
1868      fi      fi
1869  fi  done
1870    
1871  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1872  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
# Line 1068  else Line 1923  else
1923          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1924          RETVAL=$?          RETVAL=$?
1925          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1926              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1927              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1928              exit 1              exit 1
1929          fi          fi
# Line 1076  else Line 1931  else
1931              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1932          done          done
1933          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1934          expand_pkg_groups          RET=1
1935            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1936          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1937      fi      fi
1938  fi  fi
1939    
1940  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1941    for i in $PACKAGES ; do
1942        echo $i >> ./.tmp_pack
1943    done
1944    for i in `grep  "-" ./.tmp_pack` ; do
1945        j=`echo $i | sed 's/[-]//'`
1946        DISABLE="$DISABLE $j"
1947    done
1948  pack=  pack=
1949  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1950      addit="t"      addit="t"
# Line 1098  PACKAGES="$pack" Line 1961  PACKAGES="$pack"
1961  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1962  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1963  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1964    # Test if each explicitly referenced package exists
1965  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1966      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1967        if test ! -d "$ROOTDIR/pkg/$j" ; then
1968          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1969          exit 1          exit 1
1970      fi      fi
1971      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1972  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1973  PACKAGES=  PACKAGES=
1974  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1975      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1976  done  done
1977    rm -f ./.tmp_pack
1978  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1979    
1980    #  Check for package MNC: if NetCDF is available, then build the MNC
1981    #  template files ; otherwise, delete mnc from the list of packages.
1982    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1983    RETVAL=$?
1984    if test "x$RETVAL" = x0 ; then
1985        if test "x$HAVE_NETCDF" != xt ; then
1986            cat <<EOF
1987    
1988    *********************************************************************
1989    WARNING: the "mnc" package was enabled but tests failed to compile
1990      NetCDF applications.  Please check that:
1991    
1992      1) NetCDF is correctly installed for this compiler and
1993      2) the LIBS variable (within the "optfile") specifies the correct
1994           NetCDF library to link against.
1995    
1996      Due to this failure, the "mnc" package is now DISABLED.
1997    *********************************************************************
1998    
1999    EOF
2000            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2001            DISABLE="$DISABLE mnc"
2002        else
2003            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2004            RETVAL=$?
2005            if test "x${RETVAL}" = x0 ; then
2006                rm -f make_mnc.errors
2007            else
2008                echo "Error: problem encountered while building source files in pkg/mnc:"
2009                cat make_mnc.errors 1>&2
2010                exit 1
2011            fi
2012        fi
2013    fi
2014    
2015    #  Check for package PROFILES: if NetCDF is not available,
2016    #  then delete profiles from the list of available packages.
2017    echo $PACKAGES | grep ' profiles ' > /dev/null 2>&1
2018    RETVAL=$?
2019    if test "x$RETVAL" = x0 ; then
2020        if test "x$HAVE_NETCDF" != xt ; then
2021            cat <<EOF
2022    
2023    *********************************************************************
2024    WARNING: the "profiles" package was enabled but tests failed to
2025      compile NetCDF applications.  Please check that:
2026    
2027      1) NetCDF is correctly installed for this compiler and
2028      2) the LIBS variable (within the "optfile") specifies the correct
2029           NetCDF library to link against.
2030    
2031      Due to this failure, the "profiles" package is now DISABLED.
2032    *********************************************************************
2033    
2034    EOF
2035            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2036            DISABLE="$DISABLE profiles"
2037        fi
2038    fi
2039    
2040  echo "  applying package dependency rules"  echo "  applying package dependency rules"
2041  ck=  ck=
2042  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
2043      i=0      i=0
2044      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2045      rtot=$nname      rtot=$nname
2046      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2047    
2048          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2049          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1153  while test "x$ck" != xtt ; do Line 2077  while test "x$ck" != xtt ; do
2077    
2078          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2079          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
2080                #echo "   " $pname ": need to add :" $dname
2081              in_dis="f"              in_dis="f"
2082              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2083                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 1177  while test "x$ck" != xtt ; do Line 2102  while test "x$ck" != xtt ; do
2102              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2103              exit 1              exit 1
2104          fi          fi
2105          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
2106            #i=$(( $i + 1 ))
2107      done      done
2108      ck=$ck"t"      ck=$ck"t"
2109  done  done
# Line 1196  for i in $PACKAGES ; do Line 2122  for i in $PACKAGES ; do
2122      fi      fi
2123  done  done
2124    
 #  Check for ability to build and use NetCDF  
 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" = x0 -a "x$HAVE_NETCDF" != xt ; then  
     cat <<EOF  
   
 WARNING: the "mnc" package has been enabled but tests failed to  
   compile and/or execute NetCDF applications.  Please check that:  
   
   1) NetCDF is installed for your compiler and  
   2) the LIBS variable (within the 'optfile") specifies the correct  
        NetCDF library to link against.  
     
 EOF  
 fi  
   
2125  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2126  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2127  #  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 1231  for n in $names ; do Line 2141  for n in $names ; do
2141              fi              fi
2142          done          done
2143          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2144              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2145              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2146          fi          fi
2147      fi      fi
2148  done  done
2149  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2150  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2151      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2152      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2153  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2154    
# Line 1312  fi Line 2222  fi
2222    
2223  #  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
2224  #  compiler.  #  compiler.
2225  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2226      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2227  fi  fi
2228  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2229  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2230      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2231      for j in $list_files ; do      for j in $list_files ; do
2232          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2233      done      done
2234  done  done
2235    if test ! "x"$FS = "x.f" ; then
2236        cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2237        mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2238    fi
2239    
2240  echo  echo
2241  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
2242  echo "  setting INCLUDES"  echo "  setting INCLUDES"
2243  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
2244      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
2245          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
2246      fi      fi
2247  done  done
2248    
2249    if test ! "x$DIVA" = x ; then
2250        echo "  Creating the pseudo-MPI include directory"
2251        INCLUDES="-I./mpi_headers $INCLUDES"
2252        rm -rf ./mpi_headers
2253        mkdir -p ./mpi_headers
2254    
2255        if test "x$MPIINCLUDEDIR" = x ; then
2256            if test "x$MPIHOME" = x ; then
2257                MPIHOME='/usr'
2258            fi
2259            MPIINCLUDEDIR='$MPIHOME/include'
2260        fi
2261        
2262        if test -r $MPIINCLUDEDIR/mpif.h ; then
2263            for i in $MPI_HEADER_FILES; do
2264                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2265            done
2266    
2267            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2268        else
2269            echo " We cannot create a copy of mpif.h!"
2270    #       exit -1
2271        fi
2272    fi
2273    
2274  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2275  rm -rf .links.tmp  rm -rf .links.tmp
2276  mkdir .links.tmp  mkdir .links.tmp
2277    touch .links.tmp/foo
2278    if test ! -r ".links.tmp/foo" ; then
2279        echo
2280        echo "ERROR : something is wrong with your directory permissions or"
2281        echo "   your user file-creation mask (\"umask\") since creating a"
2282        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2283        echo "   not working.  Please try setting your umask to something"
2284        echo "   sane such as:"
2285        echo
2286        echo "      umask 0002"
2287        echo
2288        echo "   and please verify that you have the proper permissions for"
2289        echo "   creating sub-directories and then reading files created"
2290        echo "   within them."
2291        echo
2292        exit 1
2293    fi
2294    rm -f .links.tmp/foo
2295    
2296    if test "x$OPENAD" != x ; then
2297        OAD_DONT_COMPILE="/dev/null"
2298        OAD_DONT_TRANSFORM="/dev/null"
2299        OAD_KEEP_ORIGINAL="/dev/null"
2300        OAD_CB2M_FILES="/dev/null"
2301        echo "  looking for dontCompile file:  "
2302        for i in "." $MODS ; do
2303            if test -r $i"/dontCompile" ; then
2304                OAD_DONT_COMPILE=$i"/dontCompile"
2305                echo "     found $OAD_DONT_COMPILE"
2306                break
2307            fi
2308        done
2309        echo "  looking for dontTransform file:  "
2310        for i in "." $MODS ; do
2311            if test -r $i"/dontTransform" ; then
2312                OAD_DONT_TRANSFORM=$i"/dontTransform"
2313                echo "     found $OAD_DONT_TRANSFORM"
2314                break
2315            fi
2316        done
2317        echo "  looking for keepOriginal file:  "
2318        for i in "." $MODS ; do
2319            if test -r $i"/keepOriginal" ; then
2320                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2321                echo "     found $OAD_KEEP_ORIGINAL"
2322                break
2323            fi
2324        done
2325        echo "  looking for cb2mFiles:  "
2326        for i in "." $MODS ; do
2327            if test -r $i"/cb2mFiles" ; then
2328                OAD_CB2M_FILES=$i"/cb2mFiles"
2329                echo "     found $OAD_CB2M_FILES"
2330                break
2331            fi
2332        done
2333        echo "   OpenAD exceptions:  "
2334    fi
2335    
2336  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2337  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2338  echo -n 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2339  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2340  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2341  echo -n 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2342  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2343    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2344  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2345  for d in $alldirs ; do  for d in $alldirs ; do
2346      deplist=      deplist=
2347      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2348      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2349        if test "x$OPENAD" != x ; then
2350            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2351        fi
2352      for sf in $sfiles ; do      for sf in $sfiles ; do
2353          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2354              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2355                    ignore_f=f
2356                  case $d/$sf in                  case $d/$sf in
2357                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2358                            ignore_f=t
2359                          ;;                          ;;
2360                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2361                            ignore_f=t
2362                          ;;                          ;;
2363                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2364                            ignore_f=t
2365                            ;;
2366                      ./BUILD_INFO.h)
2367                            ignore_f=t
2368                            ;;
2369                      ./EMBEDDED_FILES.h)
2370                            ignore_f=t
2371                          ;;                          ;;
2372                    *)                    *)
2373                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
2374                          deplist="$deplist $sf"                          #  ignore all soft-links
2375                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2376                                ignore_f=t
2377                            else
2378                                touch .links.tmp/$sf
2379                                deplist="$deplist $sf"
2380                            fi
2381                          ;;                          ;;
2382                  esac                  esac
2383                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  if test "x$ignore_f" = xf ; then
2384                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2385                      F)                      case $extn in
2386                          echo    " \\"  >> srclist.inc                        F)
2387                          echo -n " $sf" >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2388                            printf " $sf" >> F77srclist.tmp
2389                            if test "x$OPENAD" != x ; then
2390                                basename=${sf%%.F}
2391                                isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2392                                if test -z "$isAD" ; then
2393                                    toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2394                                    if test -z "$toBeIgnored" ; then
2395                                        echo    " \\"  >> nonADF77srclist.tmp
2396                                        printf " $sf" >> nonADF77srclist.tmp
2397                                    else
2398                                        echo "    not to be compiled   :  $sf"
2399                                    fi
2400                                else # file is initially listed as an AD file we want to exclude it
2401                                     # or we want to retain the untransformed version
2402                                    notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2403                                    untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2404                                    if test -n "$notToBeTransformed"; then
2405                                        echo "    not to be transformed:  $sf"
2406                                    fi
2407                                    if test -n "$untransformedVersionToBeKept" ; then
2408                                        echo "    original to be kept  :  $sf"
2409                                    fi    
2410                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2411                                        echo    " \\"  >> nonADF77srclist.tmp
2412                                        printf " $sf" >> nonADF77srclist.tmp
2413                                    fi
2414                                fi
2415                            fi
2416                          ;;                          ;;
2417                      F90)                      F90)
2418                          echo    " \\"  >> f90srclist.inc                          echo    " \\"  >> F90srclist.tmp
2419                          echo -n " $sf" >> f90srclist.inc                          printf " $sf" >> F90srclist.tmp
2420                          ;;                          ;;
2421                      c)                      c)
2422                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.tmp
2423                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.tmp
2424                          ;;                          ;;
2425                      h)                      h)
2426                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hsrclist.tmp
2427                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hsrclist.tmp
2428                          ;;                          ;;
2429                      flow)                      flow)
2430                          echo    " \\"  >> ad_flow_files.inc                          echo    " \\"  >> ad_flow_files.tmp
2431                          echo -n " $sf" >> ad_flow_files.inc                          printf " $sf" >> ad_flow_files.tmp
2432                          ;;                          ;;
2433                  esac                     esac
2434                    fi
2435              fi              fi
2436          fi          fi
2437      done      done
2438      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2439          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2440            echo "" >> srclinks.tmp
2441          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2442          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2443          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2444    # This may happen when make thinks that a header file has to be "remade"
2445    # because a module it depends on has changed.  In this case we do nothing.
2446            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2447          fi
2448      fi      fi
2449  done  done
2450  rm -rf .links.tmp  rm -rf .links.tmp
2451  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2452  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2453  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2454  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2455  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2456    echo "" >> ad_flow_files.tmp
2457    
2458  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
2459      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
2460  fi  fi
2461  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1414  echo "#    $MACHINE" >> $MAKEFILE Line 2464  echo "#    $MACHINE" >> $MAKEFILE
2464  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2465  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2466  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2467  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2468  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2469  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2470    
2471  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2472  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1462  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2512  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2512  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2513    
2514  # These files are created by Makefile  # These files are created by Makefile
2515  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
   
2516  EOF  EOF
2517    
2518  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2519        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2520    else
2521        echo "EMBEDDED_FILES = " >>$MAKEFILE
2522    fi
2523    
2524    #  Note: figure out some way to add Hyades JAM libraries here
2525  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2526  # Unix ln (link)  # Unix ln (link)
2527  LN = ${LN}  LN = ${LN}
# Line 1481  KPP = ${KPP} Line 2535  KPP = ${KPP}
2535  FC = ${FC}  FC = ${FC}
2536  # Fortran compiler  # Fortran compiler
2537  F90C = ${F90C}  F90C = ${F90C}
2538    # C compiler
2539    CC = ${CC}
2540  # Link editor  # Link editor
2541  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2542    
2543  # Defines for CPP  # Defines for CPP
2544  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1492  INCLUDES = ${INCLUDES} Line 2548  INCLUDES = ${INCLUDES}
2548  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2549  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2550  # Optim./debug for FC  # Optim./debug for FC
2551  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2552  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2553  # Optim./debug for FC  # Optim./debug for FC
2554  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2555  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2556    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2557  # Flags for CC  # Flags for CC
2558  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2559  # Files that should not be optimized  # Files that should not be optimized
2560  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2561  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2562  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2563  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2564  # Name of the Mekfile  # Name of the Mekfile
2565  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2566    
2567  EOF  EOF
2568    
2569  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2570  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2571  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2572  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2573  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2574  echo               >> $MAKEFILE  cat ad_flow_files.tmp   >> $MAKEFILE
 echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  
 echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  
 echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  
2575    
2576  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
 rm -f ad_flow_files.inc  
2577    
2578  cat >>$MAKEFILE <<EOF  echo >> $MAKEFILE
2579    
2580  .SUFFIXES:  # add definitions for preprocessed sources
2581  .SUFFIXES: .o .f .p .F .c .F90 .f90  # and note that not all systems allow case sensitive extensions
2582    # hence the $FS and $FS90 here.
2583    # for fixed format f90 files we use ff90 or FF90 resp
2584    # but these are not expected to be the original source files
2585    
2586    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2587    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2588    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2589    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2590    echo >> $MAKEFILE
2591    echo '.SUFFIXES:' >> $MAKEFILE
2592    echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE
2593    
2594    cat >>$MAKEFILE <<EOF
2595    
2596  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2597  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2598          @echo Creating \$@ ...          @echo Creating \$@ ...
2599          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2600  depend:  depend:
2601          @make links          @make links
2602          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2603          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2604            -rm -f makedepend.out
2605    
2606    lib: libmitgcmuv.a
2607    
2608  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  libmitgcmuv.a: \$(OBJFILES)
2609            ar rcv libmitgcmuv.a \$(OBJFILES)
2610            ar d   libmitgcmuv.a main.o
2611    
2612  small_f: \$(F77FILES) \$(F90FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2613    
2614    small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2615    
2616  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2617          @printf 'running ... '          @printf 'running ... '
2618          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2619    
2620  clean:  clean:
2621          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2622            -rm -rf *.o
2623            -rm -rf *.$FS *.flowdir
2624            -rm -rf *.f$FS90 *_mod.h *_mod.F90 *.FF90 *.mod-whirl ad_input*
2625            -rm -rf temp.sed
2626  Clean:  Clean:
2627          @make clean          @make clean
2628          @make cleanlinks          @make cleanlinks
2629          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2630          -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 f90mkdepend.log *.bak
2631            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2632  CLEAN:  CLEAN:
2633          @make Clean          @make Clean
2634          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2635          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2636          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2637          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2638            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2639            -rm -rf mnc_test_*
2640    
2641  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2642  makefile:  makefile:
2643          $THIS_SCRIPT $@          $THIS_SCRIPT $G2ARGS
2644  cleanlinks:  cleanlinks:
2645          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2646    
2647  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2648  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2649          @echo Creating \$@ ...          @echo Creating \$@ ...
2650          @\$(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) > \$@
2651  AD_CONFIG.h:  AD_CONFIG.h:
2652          @echo Creating \$@ ...          @echo Creating \$@ ...
2653          @\$(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 > \$@
2654  FC_NAMEMANGLE.h:  FC_NAMEMANGLE.h:
2655          @echo Creating \$@ ...          @echo Creating \$@ ...
2656          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2657    
2658  # The normal chain of rules is (  .F - .f - .o  )  BUILD_INFO.h:
2659  .F.f:          @echo Creating \$@ ...
2660    EOF
2661    
2662    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2663    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2664    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2665    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2666    
2667    if test "x$EMBED_SRC" = xt ; then
2668        cat >>$MAKEFILE <<EOF
2669    
2670    decode_files.o : EMBEDDED_FILES.h
2671    
2672    ##  \$(F77_PP_SRC_FILES)
2673    all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2674            @echo Creating \$@ ...
2675            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2676            -rm -f all_fF.tar.gz
2677            -gzip all_fF.tar
2678    
2679    EMBEDDED_FILES.h : all_fF.tar.gz
2680            @echo Creating \$@ ...
2681            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2682    
2683    EOF
2684    fi
2685    
2686    cat >>$MAKEFILE <<EOF
2687    
2688    # The normal chain of rules is (  .F - .$FS - .o  )
2689    
2690    ## This nullifies any default implicit rules concerning these two file types:
2691    ## %.o : %.F
2692    
2693    .F.$FS:
2694          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2695  .f.o:  .$FS.o:
2696          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2697  .F90.f90:  .F90.$FS90:
2698            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2699    .FF90.f$FS90:
2700          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2701  .f90.o:  .$FS90.o:
2702          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2703    .f$FS90.o:
2704            cp \$< \$(basename  \$<).f90
2705            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2706  .c.o:  .c.o:
2707          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2708    .flow.flowdir:
2709            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2710    
2711  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2712  .F.p:  .F.p:
2713          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2714  .p.f:  .p.$FS:
2715          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2716    
2717    EOF
2718    
2719  #=========================================  #=========================================
2720  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2721    #===  for TAMC/TAF  ======================
2722    
2723    if test "x$OPENAD" == x ; then
2724    
2725    cat >>$MAKEFILE <<EOF
2726    
2727  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2728  TAF            = ${TAF}  TAF            = ${TAF}
# Line 1609  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2737  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2737  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2738  for i in $ad_vars ; do  for i in $ad_vars ; do
2739      name=$i      name=$i
2740      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2741      eval $t1      eval $t1
2742      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2743      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2744  done  done
2745    
2746  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2747  echo >> $MAKEFILE  echo >> $MAKEFILE
2748  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2749  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2750  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2751      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2752      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2753  done  done
2754  echo >> $MAKEFILE  echo >> $MAKEFILE
2755  rm -f ad_files  rm -f adSrcFiles.tmp
2756    
2757  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2758    
2759  # ... AD ...  # ... AD ...
2760  adall: ad_taf  adall: \$(EXE_AD)
2761  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2762  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2763    
2764  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2765          @\$(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
2766          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
2767          -rm -f ad_config.template          -rm -f ad_config.template
2768          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2769          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2770          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(FLOFILES) \$(AD_FILES) > ad_input_code.$FS
2771    
2772  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2773          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2774          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          ls -l ad_input_code_ad.$FS
2775            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2776    
2777  adtafonly:  adtafonly:
2778          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2779          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          ls -l ad_input_code_ad.$FS
2780            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2781  ad_taf: ad_taf_output.o \$(OBJFILES)  
2782          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2783            \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2784  ad_tamc_output.f: ad_input_code.f  
2785          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2786          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2787            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2788    
2789  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2790          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2791    
2792    adonlyfwd:
2793            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2794    
2795    adtrick:
2796            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2797    
2798  # ... FTL ...  # ... FTL ...
2799  ftlall: ftl_taf  ftlall: ftl_taf
2800  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2801  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2802    
2803  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2804          @\$(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
2805          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
2806          -rm -f ftl_config.template          -rm -f ftl_config.template
2807          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2808          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2809          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2810    
2811  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2812          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2813          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          ls -l ftl_input_code_ftl.$FS
2814            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2815    
2816  ftltafonly:  ftltafonly:
2817          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2818          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          ls -l ftl_input_code_ftl.$FS
2819            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2820    
2821  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2822          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2823    
2824  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2825          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2826          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
2827    
2828  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2829          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2830    
2831    
2832  # ... SVD ...  # ... SVD ...
2833  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2834  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2835            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2836    svdall: svd_touch svd_taf
2837    
2838  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2839          \$(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)
2840    
2841            @echo "--->>> Only COMPILE svd code! <<<---"
2842            @echo "--->>> Assumes you previously <<<---"
2843            @echo "--->>> did make svdtaf        <<<---"
2844    
2845    svd_touch:
2846            @echo "--->>> Only COMPILE svd code! <<<---"
2847            @echo "--->>> Assumes you previously <<<---"
2848            @echo "--->>> did make svdtaf        <<<---"
2849            touch ad_taf_output.$FS ftl_taf_output.$FS
2850            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2851            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2852            @$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
2853            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2854            -rm -f ftl_config.template
2855    
2856  #=========================================  EOF
2857    
2858    fi
2859    
2860    #===  for OpenAD  ========================
2861    
2862    if test "x$OPENAD" != x ; then
2863    
2864    # ============ begin OpenAD specific section ==============
2865    
2866    cat >>$MAKEFILE <<EOF
2867    
2868    # all the source files linked from the various locations:
2869    ALL_LINKED_FILES= \
2870    \$(F77_SRC_FILES) \
2871    \$(C_SRC_FILES) \
2872    \$(H_SRC_FILES) \
2873    \$(F90_SRC_FILES) \
2874    \$(SPECIAL_FILES)
2875    
2876    ifndef OPENADROOT
2877      \$(error "Error:  environment variable OPENADROOT not defined!")
2878    endif
2879    
2880    ifndef XAIFSCHEMAROOT
2881      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2882    endif
2883    
2884    ifndef XAIFBOOSTERROOT
2885      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2886    endif
2887    
2888  EOF  EOF
2889    
2890    echo "  Add the source list for common block to module conversion "
2891    echo >> $MAKEFILE
2892    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2893    for i in `cat ${OAD_CB2M_FILES}` ; do
2894      echo    " \\" >> $MAKEFILE
2895      printf " $i" >> $MAKEFILE
2896    done
2897    echo >> $MAKEFILE
2898    
2899    echo "  Add the source list for AD code generation"
2900    echo >> $MAKEFILE
2901    printf "AD_FILES = " >> $MAKEFILE
2902    for i in `cat ${OAD_CB2M_FILES}` ; do
2903      echo    " \\" >> $MAKEFILE
2904      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2905    done
2906    AD_FILES=`cat adSrcFiles.tmp`
2907    for i in $AD_FILES ; do
2908      basename=${i%%.f}
2909      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2910      if test -z "$toBeIgnored" ; then
2911        echo    " \\" >> $MAKEFILE
2912        printf " $i" >> $MAKEFILE
2913      fi
2914    done
2915    echo >> $MAKEFILE
2916    rm -f adSrcFiles.tmp
2917    
2918    cat >>$MAKEFILE <<EOF
2919    
2920    adAll: \$(EXE_AD)
2921    .PHONY: adAll
2922    
2923    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2924    
2925    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2926    
2927    .PHONY: adDepend
2928    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2929            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2930            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2931            -rm -f makedepend.out
2932    
2933    OPENAD_SUPPORT_F90_SRC_FILES = \
2934    w2f__types.F90 \
2935    OAD_active.F90 \
2936    OAD_cp.F90 \
2937    OAD_rev.F90 \
2938    OAD_tape.F90        
2939    
2940    OPENAD_SUPPORT_C_SRC_FILES = \
2941    iaddr.c \
2942    timeRatio.c
2943    
2944    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
2945            cat \$^ > \$@
2946    
2947    f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
2948            cat \$^ > \$@
2949    
2950    f95_test.out: f95_test_mods.f90 f95_test.f90
2951            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
2952            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
2953    
2954    AD_OBJ_FILES=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) all_mods.xb.x2w.w2f.pp.o  ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.o \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)
2955    
2956    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(AD_OBJ_FILES)
2957            @echo Creating \$@ ...
2958            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES) \$(LIBS)
2959    
2960    # makefile debug rule
2961    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
2962    .PHONY: openad
2963    
2964    # create the module files
2965    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
2966            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
2967    
2968    # create the header files
2969    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
2970            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
2971    
2972    # change everybody else to use the new module files:
2973    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
2974            ../OAD_support/cb2mUseModules.bash $< ${MPI}
2975    
2976    # makefile debug rule
2977    small_f: \$(CB2M_F90_PP_SRC_FILES)
2978    .PHONY: small_f
2979    
2980    ad_output.txt: \$(EXE_AD)
2981            @printf 'linking data files ... '
2982            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
2983            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
2984            @printf 'running ... '
2985            @./\$(EXE_AD) > \$@
2986    
2987    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
2988    ad_input_code.f$FS90: ../OAD_support/maxMinDefs.f \$(CB2M_AD_FILES)
2989            cat \$^ > \$@
2990    
2991    # strip all comments and blanks to reduce
2992    # the file size in order to reduce perl's memory requirements
2993    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
2994            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
2995    
2996    # mfef90 preprocessing
2997    # expand statement functions
2998    # expose mfef90 specific substring handling
2999    # add the w2f__types module
3000    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3001            ./mfef90 -r8 -z -F -N132 \$<
3002            mv \$<.B \$(basename \$<).B
3003            ./whirl2f -openad \$(basename \$<).B
3004            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3005    
3006    # canonicalizer
3007    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3008            ./preProcess.py --mode=reverse \$< -o \$@
3009    
3010    # F -> WHIRL
3011    # note that the canonicalized version cuts off at col 72
3012    # doing this also for string constants which is ok as long
3013    # as we are in fixed mode and cut of exactly there.
3014    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3015    # characters respectively.
3016    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3017            ./mfef90 -r8 -z -F \$<
3018            mv \$<.B \$@
3019    
3020    # WHIRL -> XAIF
3021    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3022            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3023    
3024    # XAIF -> XAIF'
3025    ad_input_code_sf.w2f.pre.xb.xaif : ad_input_code_sf.w2f.pre.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd openad_adm
3026            ./openad_adm -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3027    
3028    # XAIF' -> WHIRL'
3029    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3030            ./xaif2whirl --debug 1 --structured ad_input_code_sf.w2f.pre.B \$<
3031    
3032    # WHIRL' -> F'
3033    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3034            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3035    
3036    # insert template directives
3037    ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90 ../OAD_support/insertTemplateDir.bash
3038            ../OAD_support/insertTemplateDir.bash \$< \$@
3039    
3040    # postprocess F'
3041    ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 multi-pp.pl ../OAD_support/ad_inline.f \$(wildcard ../OAD_support/ad_template.*.f)
3042            perl multi-pp.pl -inline=../OAD_support/ad_inline.f \$<
3043            # the postprocessor still gets the name wrong
3044            cat \$<.pp | sed 's/RETURN//' > \$@
3045    
3046    # extract all transformed modules
3047    all_mods.xb.x2w.w2f.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3048            cat \$< | sed -n '/MODULE /,/END MODULE/p' > \$@
3049    
3050    # remove the transformed globals module from the
3051    # transformed ad_input_code file
3052    # and remove for now the duplicate variables
3053    # and fix 2 data statements
3054    ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3055            cat \$< | sed '/MODULE /,/END MODULE/d' | sed '/^      INTEGER(w2f__i4) DOLOOP_UB/d' > \$@
3056    
3057    # setup some links
3058    %.xsd:
3059            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3060    
3061    mfef90:
3062            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3063    
3064    # link the support files:
3065    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3066            \$(LN) ../OAD_support/\$@ .
3067    
3068    whirl2xaif xaif2whirl:
3069            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3070    
3071    %.pl:
3072            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3073    
3074    preProcess.py:
3075            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3076    
3077    whirl2f whirl2f_be:
3078            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3079    
3080    openad_adm:
3081            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/test/t \$@
3082    
3083    # ============ end OpenAD specific section ==============
3084    
3085    EOF
3086    
3087    fi
3088    
3089    #=========================================
3090    
3091  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3092      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3093  fi  fi
# Line 1715  for i in $KPPFILES ; do Line 3099  for i in $KPPFILES ; do
3099      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
3100          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
3101      fi      fi
3102      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
3103  done  done
3104    
3105  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1725  for i in $NOOPTFILES ; do Line 3109  for i in $NOOPTFILES ; do
3109      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
3110          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
3111      fi      fi
3112      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
3113      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
3114  done  done
3115    
# Line 1739  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3123  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3123  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3124    
3125  # Create special header files  # Create special header files
3126  $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"
3127  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3128      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3129  else  else
# Line 1753  else Line 3137  else
3137      fi      fi
3138  fi  fi
3139  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
3140      $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
3141  fi  fi
3142    
3143    
3144  #  Write the "state" for future records  #  Write the "state" for future records
3145  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
3146      echo -n "" > genmake_state      printf "" > genmake_state
3147      for i in $gm_state ; do      for i in $gm_state ; do
3148          t1="t2=\$$i"          t1="t2=\$$i"
3149          eval $t1          eval $t1

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.180

  ViewVC Help
Powered by ViewVC 1.1.22