/[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.55 by jmc, Sat Dec 6 00:34:29 2003 UTC revision 1.157 by heimbach, Sat Nov 4 21:01:37 2006 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    
297      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
298      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
299      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
300      PLATFORM=`echo $tmp3 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
301        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
302        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 98  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"
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 f90 f95 mpif77 mpf77 mpxlf95 gfortran"
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 134  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 213  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 227  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 251  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 287  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    
605        -mpi | --mpi
606              Include MPI header files and link to MPI libraries
607        -mpi=PATH | --mpi=PATH
608              Include MPI header files and link to MPI libraries using MPI_ROOT
609              set to PATH. i.e. Include files from \$PATH/include, link to libraries
610              from \$PATH/lib and use binaries from \$PATH/bin.
611    
612        -es | --es | -embed-source | --embed-source
613              Embed a tarball containing the full source code
614              (including the Makefile, etc.) used to build the
615              executable [off by default]
616    
617        -bash NAME
618              Explicitly specify the Bourne or BASH shell to use
619    
620    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
621    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
622    
# Line 312  EOF Line 637  EOF
637    
638  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
639  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
640    
641        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
642        if test ! "x$FC_NAMEMANGLE" = x ; then
643            return 0
644        fi
645    
646      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
647            
648      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 329  WARNING: Please contact <MITgcm-support@ Line 660  WARNING: Please contact <MITgcm-support@
660  EOF  EOF
661          return 1          return 1
662      fi      fi
663      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`
664      RETVAL=$?      RETVAL=$?
665      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
666          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 341  WARNING: Please contact <MITgcm-support@ Line 672  WARNING: Please contact <MITgcm-support@
672  EOF  EOF
673          return 1          return 1
674      fi      fi
675      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
676        subroutine tcall( string )        subroutine tcall( string )
677        character*(*) string        character*(*) string
678        call tsub( string )        call tsub( string )
679        end        end
680  EOF  EOF
681      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
682      RETVAL=$?      RETVAL=$?
683      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
684          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 359  WARNING: Please contact <MITgcm-support@ Line 690  WARNING: Please contact <MITgcm-support@
690  EOF  EOF
691          return 1          return 1
692      fi      fi
693      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`
694      RETVAL=$?      RETVAL=$?
695      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
696          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 413  void FC_NAMEMANGLE(cloc) ( double *curti Line 744  void FC_NAMEMANGLE(cloc) ( double *curti
744   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
745  }  }
746  EOF  EOF
747      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_warnings 2>&1
748      RET_C=$?      RET_C=$?
749      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
750        program hello        program hello
751        Real*8 wtime        REAL*8 wtime
752        external cloc        external cloc
753        call cloc(wtime)        call cloc(wtime)
754        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
755        end program hello        end
756  EOF  EOF
757      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
758      RET_F=$?      RET_F=$?
759      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
760      RETVAL=$?      RETVAL=$?
761      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
762          HAVE_CLOC=t          HAVE_CLOC=t
# Line 435  EOF Line 766  EOF
766  }  }
767    
768    
769    check_HAVE_SIGREG()  {
770        if test ! "x$HAVE_SIGREG" = x ; then
771            return
772        fi
773        get_fortran_c_namemangling
774        cat <<EOF > genmake_tc_1.c
775    $FC_NAMEMANGLE
776    #include <stdlib.h>
777    #include <stdio.h>
778    #include <signal.h>
779    #include <errno.h>
780    #include <ucontext.h>
781    
782    int * ip;
783    
784    static void killhandler(
785        unsigned int sn, siginfo_t  si, struct ucontext *sc )
786    {
787        *ip = *ip + 1;
788        return;
789    }
790    
791    void FC_NAMEMANGLE(sigreg) (int * aip)
792    {
793        struct sigaction s;
794        ip = aip;
795        s.sa_flags = SA_SIGINFO;
796        s.sa_sigaction = (void *)killhandler;
797        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
798            printf("Sigaction returned error = %d\n", errno);
799            exit(0);
800        }
801        return;
802    }
803    EOF
804        make genmake_tc_1.o >> genmake_warnings 2>&1
805        RET_C=$?
806        cat <<EOF > genmake_tc_2.$FS
807          program hello
808          integer anint
809          common /iv/ anint
810          external sigreg
811          call sigreg(anint)
812          end
813    EOF
814        echo >> genmake_warnings
815        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
816        cat genmake_tc_2.$FS >> genmake_warnings
817        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
818        echo $COMM >> genmake_warnings
819        $COMM >> genmake_warnings 2>&1
820        RETVAL=$?
821        if test "x$RETVAL" = x0 ; then
822            HAVE_SIGREG=t
823            DEFINES="$DEFINES -DHAVE_SIGREG"
824        fi
825        rm -f genmake_tc*
826    }
827    
828    
829    check_HAVE_SETRLSTK()  {
830        if test "x$HAVE_SETRLSTK" = xt ; then
831            DEFINES="$DEFINES -DHAVE_SETRLSTK"
832            return
833        fi  
834        if test ! "x$HAVE_SETRLSTK" = x ; then
835            return
836        fi
837        get_fortran_c_namemangling
838        cat <<EOF > genmake_tc_1.c
839    $FC_NAMEMANGLE
840    #include <sys/time.h>
841    #include <sys/resource.h>
842    #include <unistd.h>
843    void FC_NAMEMANGLE(setrlstk) ()
844    {
845        struct rlimit rls;
846        rls.rlim_cur = RLIM_INFINITY;
847        rls.rlim_max = RLIM_INFINITY;
848        setrlimit(RLIMIT_STACK, &rls);
849        return;
850    }
851    EOF
852        make genmake_tc_1.o >> genmake_warnings 2>&1
853        RET_C=$?
854        cat <<EOF > genmake_tc_2.$FS
855          program hello
856          external setrlstk
857          call setrlstk()
858          end
859    EOF
860        echo >> genmake_warnings
861        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
862        cat genmake_tc_2.$FS >> genmake_warnings
863        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
864        echo $COMM >> genmake_warnings
865        $COMM >> genmake_warnings 2>&1
866        RETVAL=$?
867        if test "x$RETVAL" = x0 ; then
868            HAVE_SETRLSTK=t
869            DEFINES="$DEFINES -DHAVE_SETRLSTK"
870        fi
871        rm -f genmake_tc*
872    }
873    
874    
875    check_HAVE_STAT()  {
876        get_fortran_c_namemangling
877        cat <<EOF > genmake_tc_1.c
878    $FC_NAMEMANGLE
879    #include <stdio.h>
880    #include <stdlib.h>
881    #include <unistd.h>
882    #include <sys/stat.h>
883    #include <sys/types.h>
884    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
885    {
886        char name[512];
887        struct stat astat;
888    
889        name[0] = 'a'; name[1] = '\0';
890        if (! stat(name, &astat))
891            *nbyte = (int)(astat.st_size);
892        else
893            *nbyte = -1;
894    }
895    EOF
896        make genmake_tc_1.o >> genmake_tc.log 2>&1
897        RET_C=$?
898        cat <<EOF > genmake_tc_2.$FS
899          program hello
900          integer nbyte
901          call tfsize(nbyte)
902          print *," HELLO WORLD", nbyte
903          end
904    EOF
905        echo >> genmake_warnings
906        echo "running: check_HAVE_STAT()" >> genmake_warnings
907        cat genmake_tc_2.$FS >> genmake_warnings
908        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
909        echo $COMM >> genmake_warnings
910        $COMM >> genmake_tc.log 2>&1
911        RETVAL=$?
912        if test "x$RETVAL" = x0 ; then
913            HAVE_STAT=t
914            DEFINES="$DEFINES -DHAVE_STAT"
915        fi
916        rm -f genmake_tc*
917    }
918    
919    
920    check_netcdf_libs()  {
921        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
922            return
923        fi
924        echo >> genmake_warnings
925        echo "running: check_netcdf_libs()" >> genmake_warnings
926        cat <<EOF > genmake_tnc.F
927          program fgennc
928    #include "netcdf.inc"
929    EOF
930        if test ! "x$MPI" = x ; then
931            echo '#include "mpif.h"' >> genmake_tnc.F
932        fi
933        cat <<EOF >> genmake_tnc.F
934          integer iret, ncid, xid
935          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
936          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
937          iret = nf_def_dim(ncid, 'X', 11, xid)
938          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
939          iret = nf_close(ncid)
940          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
941          end
942    EOF
943        echo "===  genmake_tnc.F  ===" > genmake_tnc.log
944        cat genmake_tnc.F >> genmake_tnc.log
945        echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
946        RET_CPP=f
947        COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
948        echo "$COMM" >> genmake_tnc.log
949        eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
950        if test "x$RET_CPP" = xf ; then
951            echo "  WARNING: CPP failed to pre-process the netcdf test." \
952                >> genmake_tnc.log
953            echo "    Please check that \$INCLUDES is properly set." \
954                >> genmake_tnc.log
955        fi
956        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
957        echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
958        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
959            &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
960        RET_COMPILE=$?
961        cat genmake_tnc.log >> genmake_warnings
962    
963        #EH3  Remove test program execution for machines that either disallow
964        #EH3  execution or cannot support it (eg. cross-compilers)
965        #EH3
966        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
967        #EH3 RETVAL=$?
968        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
969    
970        if test "x$RET_COMPILE" = x0 ; then
971            HAVE_NETCDF=t
972        else
973            # try again with "-lnetcdf" added to the libs
974            echo "try again with added '-lnetcdf'" > genmake_tnc.log
975            echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
976            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
977            echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
978            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
979                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
980                &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
981            RET_COMPILE=$?
982            cat genmake_tnc.log >> genmake_warnings
983            if test "x$RET_COMPILE" = x0 ; then
984                LIBS="$LIBS -lnetcdf"
985                HAVE_NETCDF=t
986            fi
987        fi
988        rm -f genmake_tnc*
989    }
990    
991    
992    
993    ###############################################################################
994    #   Sequential part of script starts here
995    ###############################################################################
996    
997  #  Set defaults here  #  Set defaults here
998  COMMANDL="$0 $@"  COMMANDL="$0 $@"
999    
# Line 442  PLATFORM= Line 1001  PLATFORM=
1001  LN=  LN=
1002  S64=  S64=
1003  KPP=  KPP=
1004  FC=  #FC=
1005    #CC=gcc
1006    #CPP=
1007  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
1008  DEFINES=  DEFINES=
1009  PACKAGES=  PACKAGES=
1010  ENABLE=  ENABLE=
1011  DISABLE=  DISABLE=
1012  MAKEFILE=  # MAKEFILE=
1013  MAKEDEPEND=  # MAKEDEPEND=
1014  PDEPEND=  PDEPEND=
1015  DUMPSTATE=t  DUMPSTATE=t
1016  PDEFAULT=  PDEFAULT=
1017  OPTFILE=  OPTFILE=
1018  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
1019  FFLAGS=  FFLAGS=
1020  FOPTIM=  FOPTIM=
1021  CFLAGS=  CFLAGS=
1022  KFLAGS1=  KFLAGS1=
1023  KFLAGS2=  KFLAGS2=
1024    #LDADD=
1025  LIBS=  LIBS=
1026  KPPFILES=  KPPFILES=
1027  NOOPTFILES=  NOOPTFILES=
1028  NOOPTFLAGS=  NOOPTFLAGS=
1029    MPI=
1030    MPIPATH=
1031    TS=
1032    PAPIS=
1033    PCLS=
1034    FOOLAD=
1035    PAPI=
1036    PCL=
1037    HPMT=
1038    GSL=
1039    HAVE_TEST_L=
1040    
1041  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
1042  HAVE_SYSTEM=  HAVE_SYSTEM=
1043  HAVE_FDATE=  HAVE_FDATE=
1044  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1045  HAVE_CLOC=  HAVE_CLOC=
1046    # HAVE_SETRLSTK=
1047    HAVE_STAT=
1048    HAVE_NETCDF=
1049    HAVE_ETIME=
1050    IGNORE_TIME=
1051    
1052  MODS=  MODS=
1053  TOOLSDIR=  TOOLSDIR=
1054  SOURCEDIRS=  SOURCEDIRS=
1055  INCLUDEDIRS=  INCLUDEDIRS=
1056  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
1057    
1058    G2ARGS=
1059    BASH=
1060  PWD=`pwd`  PWD=`pwd`
1061  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1062  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1063  THISHOSTNAME=`hostname`  EMBED_SRC=
1064    THISHOST=`hostname`
1065  THISCWD=`pwd`  THISCWD=`pwd`
1066  THISDATE=`date`  THISDATE=`date`
1067    THISUSER=`echo $USER`
1068    THISVER=
1069  MACHINE=`uname -a`  MACHINE=`uname -a`
1070  EXECUTABLE=  EXECUTABLE=
1071  EXEHOOK=  EXEHOOK=
# Line 493  IEEE= Line 1075  IEEE=
1075  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
1076      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
1077  fi  fi
1078    FS=
1079    FS90=
1080    
1081  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
1082  AD_OPTFILE=  AD_OPTFILE=
# Line 510  TAMC_EXTRA= Line 1094  TAMC_EXTRA=
1094    
1095  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1096  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1097  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"
1098    
1099  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1100  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 "
1101  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1102  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1103  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1104  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
1105    
1106  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1107  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 546  for i in . $MODS ; do Line 1130  for i in . $MODS ; do
1130          break          break
1131      fi      fi
1132  done  done
1133  echo -n "  getting local config information:  "  printf "  getting local config information:  "
1134  if test -e $gm_local ; then  if test -f $gm_local ; then
1135      echo "using $gm_local"      echo "using $gm_local"
1136      . $gm_local      . $gm_local
1137      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 556  else Line 1140  else
1140      echo "none found"      echo "none found"
1141  fi  fi
1142    
1143  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
1144  #OPTIONS=  #OPTIONS=
1145  #n=0  #n=0
1146  #for i ; do  #for i ; do
# Line 568  fi Line 1152  fi
1152  #done  #done
1153  #parse_options  #parse_options
1154  ac_prev=  ac_prev=
1155  for ac_option ; do  for ac_option in "$@" ; do
1156    
1157        G2ARGS="$G2ARGS \"$ac_option\""
1158    
1159      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
1160      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 611  for ac_option ; do Line 1197  for ac_option ; do
1197          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1198              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1199                    
1200            -bash | --bash)
1201                ac_prev=BASH ;;
1202            -bash=* | --bash=*)
1203                BASH=$ac_optarg ;;
1204            
1205            -makedepend | --makedepend | -md | --md)
1206                ac_prev=MAKEDEPEND ;;
1207            -makedepend=* | --makedepend=* | -md=* | --md=*)
1208                MAKEDEPEND=$ac_optarg ;;
1209            
1210          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1211              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1212          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 652  for ac_option ; do Line 1248  for ac_option ; do
1248  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1249  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1250  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1251                        
1252            -cc | --cc)
1253                ac_prev=CC ;;
1254            -cc=* | --cc=*)
1255                CC=$ac_optarg ;;
1256            
1257          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1258              ac_prev=FC ;;              ac_prev=FC ;;
1259          -fc=* | --fc=*)          -fc=* | --fc=*)
1260              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1261                    
1262            -fs | --fs)
1263                ac_prev=FS ;;
1264            -fs=* | --fs=*)
1265                FS=$ac_optarg ;;
1266            
1267            -fs90 | --fs90)
1268                ac_prev=FS90 ;;
1269            -fs90=* | --fs90=*)
1270                FS90=$ac_optarg ;;
1271            
1272          -ieee | --ieee)          -ieee | --ieee)
1273              IEEE=true ;;              IEEE=true ;;
1274          -noieee | --noieee)          -noieee | --noieee)
1275              IEEE= ;;              IEEE= ;;
1276    
1277            -ts | --ts)
1278                TS=true ;;
1279            -papis | --papis)
1280                PAPIS=true ;;
1281            -pcls | --pcls)
1282                PCLS=true ;;
1283            -foolad | --foolad)
1284                FOOLAD=true ;;
1285            -papi | --papi)
1286                PAPI=true ;;
1287            -pcl | --pcl)
1288                PCL=true ;;
1289            -hpmt | --hpmt)
1290                HPMT=true ;;
1291    
1292            -gsl | --gsl)
1293                GSL=true ;;
1294    
1295            -mpi | --mpi)
1296                MPI=true ;;
1297            -mpi=* | --mpi=*)
1298                MPIPATH=$ac_optarg
1299                MPI=true ;;
1300                    
1301  #       -jam | --jam)  #       -jam | --jam)
1302  #           JAM=1 ;;  #           JAM=1 ;;
# Line 680  for ac_option ; do Line 1315  for ac_option ; do
1315              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1316          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1317              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1318            
1319            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1320                IGNORE_TIME="-DIGNORE_TIME" ;;
1321    
1322            -es | --es | -embed-source | --embed-source)
1323                EMBED_SRC=t ;;
1324    
1325          -*)          -*)
1326              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 695  for ac_option ; do Line 1336  for ac_option ; do
1336            
1337  done  done
1338    
1339    
1340  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1341      echo      echo
1342      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
# Line 707  if test -f ./.genmakerc ; then Line 1349  if test -f ./.genmakerc ; then
1349      echo      echo
1350  fi  fi
1351    
1352    #  Find the MITgcm ${ROOTDIR}
1353  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1354      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1355        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
1356          ROOTDIR=".."          ROOTDIR=".."
1357      else      else
1358          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1359              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
1360                  ROOTDIR=$d                  ROOTDIR=$d
1361                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1362                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1363                  break                  break
1364              fi              fi
# Line 732  if test ! -d ${ROOTDIR} ; then Line 1376  if test ! -d ${ROOTDIR} ; then
1376      exit 1      exit 1
1377  fi  fi
1378    
1379    #  Find the MITgcm ${THISVER}
1380    if test -f "${ROOTDIR}/doc/tag-index" ; then
1381        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1382    fi
1383    
1384    if test "x$MAKEFILE" = x ; then
1385        MAKEFILE="Makefile"
1386    fi
1387    
1388  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1389  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1390      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 748  if test "x$OPTFILE" != xNONE ; then Line 1401  if test "x$OPTFILE" != xNONE ; then
1401          . "$OPTFILE"          . "$OPTFILE"
1402          RETVAL=$?          RETVAL=$?
1403          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1404              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1405              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1406              exit 1              exit 1
1407          fi          fi
# Line 775  if test "x${AD_OPTFILE}" != xNONE ; then Line 1428  if test "x${AD_OPTFILE}" != xNONE ; then
1428          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1429          RETVAL=$?          RETVAL=$?
1430          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1431              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1432              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1433              exit 1              exit 1
1434          fi          fi
# Line 788  if test "x${AD_OPTFILE}" != xNONE ; then Line 1441  if test "x${AD_OPTFILE}" != xNONE ; then
1441      fi      fi
1442  fi  fi
1443    
1444  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1445    #  Set default values if not set by the optfile
1446    #
1447    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1448  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1449    if test ! "x$BASH" = x ; then
1450        # add a trailing space so that it works within the Makefile syntax (see below)
1451        BASH="$BASH "
1452    fi
1453  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1454      cat <<EOF 1>&2      cat <<EOF 1>&2
1455    
# Line 800  Error: no Fortran compiler: please speci Line 1460  Error: no Fortran compiler: please speci
1460  EOF  EOF
1461      exit 1      exit 1
1462  fi  fi
1463    if test "x$CC" = x ; then
1464        CC=cc
1465    #     cat <<EOF 1>&2
1466    # Error: no C compiler: please specify using one of the following:
1467    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1468    #   2) the "-cc=XXX" command-line option
1469    #   3) the "./genmake_local" file
1470    # EOF
1471    #     exit 1
1472    fi
1473  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1474      LINK=$FC      LINK=$FC
1475  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1476  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1477      MAKE="make"      MAKE="make"
1478  fi  fi
1479    if test "x$CPP" = x ; then
1480        CPP=cpp
1481    fi
1482    #EH3 === UGLY ===
1483    #  The following is an ugly little hack to check for $CPP in /lib/ and
1484    #  it should eventually be replaced with a more general function that
1485    #  searches a combo of the user's path and a list of "usual suspects"
1486    #  to find the correct location for binaries such as $CPP.
1487    for i in " " "/lib/" ; do
1488        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1489    done
1490    #EH3 === UGLY ===
1491  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1492  RETVAL=$?  RETVAL=$?
1493  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 825  EOF Line 1504  EOF
1504  else  else
1505      rm -f test_cpp      rm -f test_cpp
1506  fi  fi
1507  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1508  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1509      LN="ln -s"      LN="ln -s"
1510  fi  fi
# Line 843  Error: The command "ln -s" failed -- ple Line 1520  Error: The command "ln -s" failed -- ple
1520  EOF  EOF
1521      exit 1      exit 1
1522  fi  fi
1523    test -L genmake_tlink > /dev/null 2>&1
1524    RETVAL=$?
1525    if test "x$RETVAL" = x0 ; then
1526        HAVE_TEST_L=t
1527    fi
1528  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1529    
1530    #  Check for broken *.F/*.f handling and fix if possible
1531    check_for_broken_Ff
1532    
1533    if test ! "x$MPI" = x ; then
1534          echo "  Turning on MPI cpp macros"
1535          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1536    fi
1537    
1538    if test ! "x$TS" = x ; then
1539          echo "  Turning on timing per timestep"
1540          if test ! "x$FOOLAD" = x ; then
1541                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1542          else
1543                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1544          fi
1545    fi
1546    if test ! "x$PAPIS" = x ; then
1547          echo "  Turning on PAPI flop summary per timestep"
1548          echo "  Please make sure PAPIINC, PAPILIB are defined"
1549          if test ! "x$FOOLAD" = x ; then
1550                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1551          else
1552                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1553          fi
1554          INCLUDES="$INCLUDES $PAPIINC"
1555          LIBS="$LIBS $PAPILIB"
1556    fi
1557    if test ! "x$PCLS" = x ; then
1558          echo "  Turning on PCL counter summary per timestep"
1559          echo "  Please make sure PCLINC, PCLLIB are defined"
1560          if test ! "x$FOOLAD" = x ; then
1561                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1562          else
1563                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1564          fi
1565          INCLUDES="$INCLUDES $PCLINC"
1566          LIBS="$LIBS $PCLLIB"
1567    fi
1568    if test ! "x$PAPI" = x ; then
1569          if test ! "x$PAPIS" = x ; then
1570              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1571              echo "  Sticking with PAPI flop summary per timestep!"
1572          else
1573              echo "  Turning on performance analysis with PAPI"
1574              echo "  Please make sure PAPIINC, PAPILIB are defined"
1575              DEFINES="$DEFINES -DUSE_PAPI"
1576              INCLUDES="$INCLUDES $PAPIINC"
1577              LIBS="$LIBS $PAPILIB"
1578          fi
1579    fi
1580    if test ! "x$PCL" = x ; then
1581          if test ! "x$PCLS" = x ; then
1582              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1583              echo "  Sticking with PCL flop summary per timestep!"
1584          else
1585              echo "  Turning on performance analysis with PCL"
1586              echo "  Please make sure PCLINC, PCLLIB are defined"
1587              DEFINES="$DEFINES -DUSE_PCL"
1588              INCLUDES="$INCLUDES $PCLINC"
1589              LIBS="$LIBS $PCLLIB"
1590          fi
1591    fi
1592    if test ! "x$HPMT" = x ; then
1593          if test ! "x$PAPI" = x ; then
1594              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1595              echo "  Sticking with PAPI!"
1596          else if test ! "x$PCL" = x ; then
1597              echo "  PCL and the HPM Toolkit cannot co-exist!"
1598              echo "  Sticking with PCL!"
1599          else
1600              echo "  Turning on performance analysis with the HPM Toolkit"
1601              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1602              DEFINES="$DEFINES -DUSE_LIBHPM"
1603              INCLUDES="$INCLUDES $HPMTINC"
1604              LIBS="$LIBS $HPMTLIB"
1605          fi
1606          fi
1607    fi
1608    if test ! "x$GSL" = x ; then
1609          echo "  Turning on use of GSL to control floating point calculations"
1610          echo "  Please make sure GSLINC, GSLLIB are defined"
1611          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1612          INCLUDES="$INCLUDES $GSLINC"
1613          LIBS="$LIBS $GSLLIB"
1614    fi
1615    
1616  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1617  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1618  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1619        program hello        program hello
1620        call system('echo hi')        call system('echo hi')
1621        end        end
1622  EOF  EOF
1623  $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
1624  RETVAL=$?  RETVAL=$?
1625  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1626      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 865  else Line 1632  else
1632  fi  fi
1633  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1634    
1635  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1636  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1637        program hello        program hello
1638        CHARACTER(128) string        CHARACTER*(128) string
1639        string = ' '        string = ' '
1640        call fdate( string )        call fdate( string )
1641        print *, string        print *, string
1642        end        end
1643  EOF  EOF
1644  $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
1645  RETVAL=$?  RETVAL=$?
1646  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1647      HAVE_FDATE=t      HAVE_FDATE=t
# Line 886  else Line 1653  else
1653  fi  fi
1654  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1655    
1656  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1657    cat > genmake_tcomp.$FS <<EOF
1658          program hello
1659          REAL*4 ACTUAL, TARRAY(2)
1660          EXTERNAL ETIME
1661          REAL*4 ETIME
1662          actual = etime( tarray )
1663          print *, tarray
1664          end
1665    EOF
1666    $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1667    RETVAL=$?
1668    if test "x$RETVAL" = x0 ; then
1669        HAVE_ETIME=t
1670        DEFINES="$DEFINES -DHAVE_ETIME"
1671        echo "yes"
1672    else
1673        HAVE_ETIME=
1674        echo "no"
1675    fi
1676    rm -f genmake_tcomp*
1677    
1678    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1679  check_HAVE_CLOC  check_HAVE_CLOC
1680  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1681      echo "yes"      echo "yes"
1682  else  else
1683      echo "no"      echo "no"
1684        if test "x$EMBED_SRC" = xt ; then
1685            echo "    WARNING: you requested file embedding but it has"
1686            echo "      been disabled since C code cannot be called"
1687            EMBED_SRC=
1688        fi
1689    fi
1690    rm -f genmake_t*
1691    
1692    printf "  Can we unlimit the stack size using $FC...  "
1693    check_HAVE_SETRLSTK
1694    if test "x$HAVE_SETRLSTK" = xt ; then
1695        echo "yes"
1696    else
1697        echo "no"
1698    fi
1699    rm -f genmake_t*
1700    
1701    printf "  Can we register a signal handler using $FC...  "
1702    check_HAVE_SIGREG
1703    if test "x$HAVE_SIGREG" = xt ; then
1704        echo "yes"
1705    else
1706        echo "no"
1707    fi
1708    rm -f genmake_t*
1709    
1710    printf "  Can we use stat() through C calls...  "
1711    check_HAVE_STAT
1712    if test "x$HAVE_STAT" != x ; then
1713        echo "yes"
1714    else
1715        echo "no"
1716  fi  fi
1717  rm -f genmake_t*  rm -f genmake_t*
1718    
1719    printf "  Can we create NetCDF-enabled binaries...  "
1720    check_netcdf_libs
1721    if test "x$HAVE_NETCDF" != x ; then
1722        echo "yes"
1723    else
1724        echo "no"
1725    fi
1726    DEFINES="$DEFINES $IGNORE_TIME"
1727    
1728    if test "x$EMBED_SRC" = xt ; then
1729        build_embed_encode
1730    fi
1731    if test "x$EMBED_SRC" = xt ; then
1732        ENABLE="$ENABLE embed_files"
1733    fi
1734    
1735    
1736  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1737  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1738  for d in $MODS ; do  for d in $MODS ; do
1739      if test ! -d $d ; then      if test ! -d $d ; then
1740          echo          echo
1741          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1742          exit 1          exit 1
1743      else      else
1744          echo -n " $d"          printf " $d"
1745          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1746          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1747      fi      fi
1748  done  done
1749  echo  echo
1750    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1751  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1752      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1753  fi  fi
1754    
1755  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1756      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1757        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1758          EXEDIR=../exe          EXEDIR=../exe
1759      else      else
1760          EXEDIR=.          EXEDIR=.
# Line 934  if test "x${TOOLSDIR}" = x ; then Line 1769  if test "x${TOOLSDIR}" = x ; then
1769      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1770  fi  fi
1771  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1772      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1773      exit 1      exit 1
1774  fi  fi
1775  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1776      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1777        RETVAL=$?
1778        if test "x${RETVAL}" = x0 ; then
1779            S64='$(TOOLSDIR)/set64bitConst.sh'
1780        else
1781            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1782            RETVAL=$?
1783            if test "x${RETVAL}" = x0 ; then
1784                S64='$(TOOLSDIR)/set64bitConst.csh'
1785            else
1786                cat <<EOF
1787    
1788    ERROR: neither of the two default scripts:
1789    
1790        ${TOOLSDIR}/set64bitConst.sh
1791        ${TOOLSDIR}/set64bitConst.csh
1792    
1793      are working so please check paths or specify (with \$S64) a
1794      working version of this script.
1795    
1796    EOF
1797                exit 1
1798            fi
1799        fi
1800  fi  fi
1801  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1802    
# Line 955  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1813  if test -r $ROOTDIR"/eesupp/src/Makefile
1813          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1814      else      else
1815          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1816          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1817          exit 1          exit 1
1818      fi      fi
1819  fi  fi
1820    
1821    #same for pkg/exch2 and pkg/regrid
1822    for pdir in exch2 regrid ; do
1823        if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1824            echo "  Making source files in pkg/${pdir} from templates"
1825            ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1
1826            RETVAL=$?
1827            if test "x${RETVAL}" = x0 ; then
1828                rm -f make_${pdir}.errors
1829            else
1830                echo "Error: problem encountered while building source files in pkg/${pdir}:"
1831                cat make_${pdir}.errors 1>&2
1832                exit 1
1833            fi
1834        fi
1835    done
1836    
1837  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1838  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1839      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 1015  else Line 1889  else
1889          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1890          RETVAL=$?          RETVAL=$?
1891          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1892              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1893              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1894              exit 1              exit 1
1895          fi          fi
# Line 1023  else Line 1897  else
1897              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1898          done          done
1899          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1900          expand_pkg_groups          RET=1
1901            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1902          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1903      fi      fi
1904  fi  fi
1905    
1906  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1907    for i in $PACKAGES ; do
1908        echo $i >> ./.tmp_pack
1909    done
1910    for i in `grep  "-" ./.tmp_pack` ; do
1911        j=`echo $i | sed 's/[-]//'`
1912        DISABLE="$DISABLE $j"
1913    done
1914  pack=  pack=
1915  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1916      addit="t"      addit="t"
# Line 1045  PACKAGES="$pack" Line 1927  PACKAGES="$pack"
1927  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1928  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1929  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1930    # Test if each explicitly referenced package exists
1931  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1932      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1933        if test ! -d "$ROOTDIR/pkg/$j" ; then
1934          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1935          exit 1          exit 1
1936      fi      fi
1937      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1938  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1939  PACKAGES=  PACKAGES=
1940  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1941      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1942  done  done
1943    rm -f ./.tmp_pack
1944  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1945    
1946    #  Check availability of NetCDF and then either build the MNC template
1947    #  files or delete mnc from the list of available packages.
1948    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1949    RETVAL=$?
1950    if test "x$RETVAL" = x0 ; then
1951        if test "x$HAVE_NETCDF" != xt ; then
1952            cat <<EOF
1953    
1954    *********************************************************************
1955    WARNING: the "mnc" package was enabled but tests failed to compile
1956      NetCDF applications.  Please check that:
1957    
1958      1) NetCDF is correctly installed for this compiler and
1959      2) the LIBS variable (within the "optfile") specifies the correct
1960           NetCDF library to link against.
1961    
1962      Due to this failure, the "mnc" package is now DISABLED.
1963    *********************************************************************
1964    
1965    EOF
1966            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1967            DISABLE="$DISABLE mnc"
1968        else
1969            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1970            RETVAL=$?
1971            if test "x${RETVAL}" = x0 ; then
1972                rm -f make_mnc.errors
1973            else
1974                echo "Error: problem encountered while building source files in pkg/mnc:"
1975                cat make_mnc.errors 1>&2
1976                exit 1
1977            fi
1978        fi
1979    fi
1980    
1981  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1982  ck=  ck=
1983  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1124  while test "x$ck" != xtt ; do Line 2042  while test "x$ck" != xtt ; do
2042              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2043              exit 1              exit 1
2044          fi          fi
2045          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
2046            #i=$(( $i + 1 ))
2047      done      done
2048      ck=$ck"t"      ck=$ck"t"
2049  done  done
# Line 1143  for i in $PACKAGES ; do Line 2062  for i in $PACKAGES ; do
2062      fi      fi
2063  done  done
2064    
   
2065  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2066  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2067  #  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 1163  for n in $names ; do Line 2081  for n in $names ; do
2081              fi              fi
2082          done          done
2083          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2084              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2085              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2086          fi          fi
2087      fi      fi
2088  done  done
2089  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2090  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2091      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2092      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2093  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2094    
# Line 1187  done Line 2105  done
2105    
2106  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
2107  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
2108  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
2109      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
2110  fi  fi
2111  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
2112      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
2113      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
2114          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
2115          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
2116          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
2117      else              exit 1
2118          SOURCEDIRS="$SOURCEDIRS $adr"          else
2119      fi              SOURCEDIRS="$SOURCEDIRS $adr"
2120      adr="$ROOTDIR/$d/inc"          fi
2121      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
2122          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
2123          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
2124          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
2125      else              exit 1
2126          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
2127      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
2128  done          fi
2129        done
2130    fi
2131    
2132  echo "  Searching for *OPTIONS.h files in order to warn about the presence"  echo "  Searching for *OPTIONS.h files in order to warn about the presence"
2133  echo "    of \"#define \"-type statements that are no longer allowed:"  echo "    of \"#define \"-type statements that are no longer allowed:"
# Line 1252  for i in $SOURCEDIRS ; do Line 2172  for i in $SOURCEDIRS ; do
2172          cat $i/$j >> ad_files          cat $i/$j >> ad_files
2173      done      done
2174  done  done
2175    if test ! "x"$FS = "x.f" ; then
2176        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
2177        mv -f ad_files_f ad_files
2178    fi
2179    
2180  echo  echo
2181  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
2182  echo "  setting INCLUDES"  echo "  setting INCLUDES"
2183  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
2184      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
2185          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
2186      fi      fi
2187  done  done
2188    
2189    if test ! "x$DIVA" = x ; then
2190        echo "  Creating the pseudo-MPI include directory"
2191        INCLUDES="-I./mpi_headers $INCLUDES"
2192        rm -rf ./mpi_headers
2193        mkdir -p ./mpi_headers
2194    
2195        if test "x$MPIINCLUDEDIR" = x ; then
2196            if test "x$MPIHOME" = x ; then
2197                MPIHOME='/usr'
2198            fi
2199            MPIINCLUDEDIR='$MPIHOME/include'
2200        fi
2201        
2202        if test -r $MPIINCLUDEDIR/mpif.h ; then
2203            for i in $MPI_HEADER_FILES; do
2204                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2205            done
2206    
2207            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2208        else
2209            echo " We cannot create a copy of mpif.h!"
2210    #       exit -1
2211        fi
2212    fi
2213    
2214  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2215  rm -rf .links.tmp  rm -rf .links.tmp
2216  mkdir .links.tmp  mkdir .links.tmp
2217    touch .links.tmp/foo
2218    if test ! -r ".links.tmp/foo" ; then
2219        echo
2220        echo "ERROR : something is wrong with your directory permissions or"
2221        echo "   your user file-creation mask (\"umask\") since creating a"
2222        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2223        echo "   not working.  Please try setting your umask to something"
2224        echo "   sane such as:"
2225        echo
2226        echo "      umask 0002"
2227        echo
2228        echo "   and please verify that you have the proper permissions for"
2229        echo "   creating sub-directories and then reading files created"
2230        echo "   within them."
2231        echo
2232        exit 1
2233    fi
2234    rm -f .links.tmp/foo
2235  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2236  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2237  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
2238  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
2239  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
2240  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
2241  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
2242  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2243  for d in $alldirs ; do  for d in $alldirs ; do
2244      deplist=      deplist=
# Line 1282  for d in $alldirs ; do Line 2247  for d in $alldirs ; do
2247      for sf in $sfiles ; do      for sf in $sfiles ; do
2248          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2249              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2250                    ignore_f=f
2251                  case $d/$sf in                  case $d/$sf in
2252                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2253                            ignore_f=t
2254                          ;;                          ;;
2255                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2256                            ignore_f=t
2257                          ;;                          ;;
2258                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2259                            ignore_f=t
2260                          ;;                          ;;
2261                    *)                    ./BUILD_INFO.h)
2262                          touch .links.tmp/$sf                          ignore_f=t
                         deplist="$deplist $sf"  
                         ;;  
                 esac  
                 extn=`echo $sf | $AWK -F '.' '{print $NF}'`  
                 case $extn in  
                     F)  
                         echo    " \\"  >> srclist.inc  
                         echo -n " $sf" >> srclist.inc  
                         ;;  
                     F90)  
                         echo    " \\"  >> f90srclist.inc  
                         echo -n " $sf" >> f90srclist.inc  
2263                          ;;                          ;;
2264                      c)                    ./EMBEDDED_FILES.h)
2265                          echo    " \\"  >> csrclist.inc                          ignore_f=t
                         echo -n " $sf" >> csrclist.inc  
2266                          ;;                          ;;
2267                      h)                    *)
2268                          echo    " \\"  >> hlist.inc                          #  For the local directory *ONLY*,
2269                          echo -n " $sf" >> hlist.inc                          #  ignore all soft-links
2270                          ;;                          if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2271                      flow)                              ignore_f=t
2272                          echo    " \\"  >> ad_flow_files.inc                          else
2273                          echo -n " $sf" >> ad_flow_files.inc                              touch .links.tmp/$sf
2274                                deplist="$deplist $sf"
2275                            fi
2276                          ;;                          ;;
2277                  esac                  esac
2278                    if test "x$ignore_f" = xf ; then
2279                        extn=`echo $sf | $AWK -F. '{print $NF}'`
2280                        case $extn in
2281                            F)
2282                                echo    " \\"  >> srclist.inc
2283                                printf " $sf" >> srclist.inc
2284                                ;;
2285                            F90)
2286                                echo    " \\"  >> f90srclist.inc
2287                                printf " $sf" >> f90srclist.inc
2288                                ;;
2289                            c)
2290                                echo    " \\"  >> csrclist.inc
2291                                printf " $sf" >> csrclist.inc
2292                                ;;
2293                            h)
2294                                echo    " \\"  >> hlist.inc
2295                                printf " $sf" >> hlist.inc
2296                                ;;
2297                            flow)
2298                                echo    " \\"  >> ad_flow_files.inc
2299                                printf " $sf" >> ad_flow_files.inc
2300                                ;;
2301                        esac
2302                    fi
2303              fi              fi
2304          fi          fi
2305      done      done
# Line 1334  echo "" >> f90srclist.inc Line 2317  echo "" >> f90srclist.inc
2317  echo "" >> hlist.inc  echo "" >> hlist.inc
2318  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
2319    
2320  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
2321      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
2322  fi  fi
2323  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1343  echo "#    $MACHINE" >> $MAKEFILE Line 2326  echo "#    $MACHINE" >> $MAKEFILE
2326  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2327  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2328  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2329  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2330  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2331  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2332    
2333  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2334  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1391  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2374  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2374  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2375    
2376  # These files are created by Makefile  # These files are created by Makefile
2377  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
   
2378  EOF  EOF
2379    
2380  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2381        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2382    else
2383        echo "EMBEDDED_FILES = " >>$MAKEFILE
2384    fi
2385    
2386    #  Note: figure out some way to add Hyades JAM libraries here
2387  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2388  # Unix ln (link)  # Unix ln (link)
2389  LN = ${LN}  LN = ${LN}
# Line 1410  KPP = ${KPP} Line 2397  KPP = ${KPP}
2397  FC = ${FC}  FC = ${FC}
2398  # Fortran compiler  # Fortran compiler
2399  F90C = ${F90C}  F90C = ${F90C}
2400    # C compiler
2401    CC = ${CC}
2402  # Link editor  # Link editor
2403  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2404    
2405  # Defines for CPP  # Defines for CPP
2406  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1432  CFLAGS = ${CFLAGS} Line 2421  CFLAGS = ${CFLAGS}
2421  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2422  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2423  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2424  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2425  # Name of the Mekfile  # Name of the Mekfile
2426  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2427    
# Line 1443  cat csrclist.inc      >> $MAKEFILE Line 2432  cat csrclist.inc      >> $MAKEFILE
2432  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
2433  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
2434  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2435  echo               >> $MAKEFILE  echo >> $MAKEFILE
2436  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2437  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2438  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2439    echo >> $MAKEFILE
2440    echo '.SUFFIXES:' >> $MAKEFILE
2441    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
2442  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
2443  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
2444    
2445  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2446    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
2447  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2448  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2449          @echo Creating \$@ ...          @echo Creating \$@ ...
2450          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2451  depend:  depend:
2452          @make links          @make links
2453          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
2454          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2455            -rm -f makedepend.out
2456    
2457    lib: libmitgcmuv.a
2458    
2459    libmitgcmuv.a: \$(OBJFILES)
2460            ar rcv libmitgcmuv.a \$(OBJFILES)
2461    
2462  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2463    
# Line 1474  output.txt: \$(EXECUTABLE) Line 2468  output.txt: \$(EXECUTABLE)
2468          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2469    
2470  clean:  clean:
2471          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2472            -rm -rf *.o
2473            -rm -rf *.$FS
2474  Clean:  Clean:
2475          @make clean          @make clean
2476          @make cleanlinks          @make cleanlinks
# Line 1485  CLEAN: Line 2481  CLEAN:
2481          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2482          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2483          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2484          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2485            -rm -rf mnc_test_*
2486    
2487  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2488  makefile:  makefile:
2489          $THIS_SCRIPT $@          $THIS_SCRIPT $G2ARGS
2490  cleanlinks:  cleanlinks:
2491          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2492    
2493  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are create by make
2494  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2495          @echo Creating \$@ ...          @echo Creating \$@ ...
2496          @\$(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) > \$@
2497  AD_CONFIG.h:  AD_CONFIG.h:
2498          @echo Creating \$@ ...          @echo Creating \$@ ...
2499          @\$(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 > \$@
2500  FC_NAMEMANGLE.h:  FC_NAMEMANGLE.h:
2501          @echo Creating \$@ ...          @echo Creating \$@ ...
2502          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2503    
2504  # The normal chain of rules is (  .F - .f - .o  )  BUILD_INFO.h:
2505  .F.f:          @echo Creating \$@ ...
2506    EOF
2507    
2508    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2509    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2510    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2511    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2512    
2513    if test "x$EMBED_SRC" = xt ; then
2514        cat >>$MAKEFILE <<EOF
2515    
2516    decode_files.o : EMBEDDED_FILES.h
2517    
2518    ##  \$(F77FILES)
2519    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2520            @echo Creating \$@ ...
2521            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2522            -rm -f all_fF.tar.gz
2523            -gzip all_fF.tar
2524    
2525    EMBEDDED_FILES.h : all_fF.tar.gz
2526            @echo Creating \$@ ...
2527            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2528    
2529    EOF
2530    fi
2531    
2532    cat >>$MAKEFILE <<EOF
2533    
2534    # The normal chain of rules is (  .F - .$FS - .o  )
2535    
2536    ## This nullifies any default implicit rules concerning these two file types:
2537    ## %.o : %.F
2538    
2539    .F.$FS:
2540          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2541  .f.o:  .$FS.o:
2542          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2543  .F90.f90:  .F90.$FS90:
2544          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2545  .f90.o:  .$FS90.o:
2546          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2547  .c.o:  .c.o:
2548          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2549    
2550  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2551  .F.p:  .F.p:
2552          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2553  .p.f:  .p.$FS:
2554          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2555    
2556  #=========================================  #=========================================
# Line 1538  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2569  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2569  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2570  for i in $ad_vars ; do  for i in $ad_vars ; do
2571      name=$i      name=$i
2572      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2573      eval $t1      eval $t1
2574      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2575      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2576  done  done
2577    
2578  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2579  echo >> $MAKEFILE  echo >> $MAKEFILE
2580  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2581  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
2582  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2583      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2584      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2585  done  done
2586  echo >> $MAKEFILE  echo >> $MAKEFILE
2587  rm -f ad_files  rm -f ad_files
# Line 1558  rm -f ad_files Line 2589  rm -f ad_files
2589  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2590    
2591  # ... AD ...  # ... AD ...
2592  adall: ad_taf  adall: \$(EXE_AD)
2593  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2594  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2595    
2596  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2597          @\$(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
2598          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
2599          -rm -f ad_config.template          -rm -f ad_config.template
2600          @make \$(F77FILES)          @make \$(F77FILES)
2601          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2602          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2603    
2604  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2605          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2606          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2607    
2608  adtafonly:  adtafonly:
2609          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2610          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2611    
2612  ad_taf: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2613          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2614    
2615  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2616          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2617          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2618    
2619  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2620          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2621    
2622    adonlyfwd:
2623            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2624    
2625    adtrick:
2626            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2627    
2628  # ... FTL ...  # ... FTL ...
2629  ftlall: ftl_taf  ftlall: ftl_taf
2630  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2631  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2632    
2633  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2634          @\$(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
2635          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
2636          -rm -f ftl_config.template          -rm -f ftl_config.template
2637          @make \$(F77FILES)          @make \$(F77FILES)
2638          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2639          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2640    
2641  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2642          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2643          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2644    
2645  ftltafonly:  ftltafonly:
2646          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2647          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2648    
2649  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2650          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2651    
2652  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2653          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2654          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
2655    
2656  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2657          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2658    
2659    
2660  # ... SVD ...  # ... SVD ...
2661  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2662  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2663            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2664    svdall: svd_touch svd_taf
2665    
2666  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2667          \$(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)
2668    
2669            @echo "--->>> Only COMPILE svd code! <<<---"
2670            @echo "--->>> Assumes you previously <<<---"
2671            @echo "--->>> did make svdtaf        <<<---"
2672    
2673    svd_touch:
2674            @echo "--->>> Only COMPILE svd code! <<<---"
2675            @echo "--->>> Assumes you previously <<<---"
2676            @echo "--->>> did make svdtaf        <<<---"
2677            touch ad_taf_output.$FS ftl_taf_output.$FS
2678            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2679            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2680            @$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
2681            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2682            -rm -f ftl_config.template
2683    
2684  #=========================================  #=========================================
2685    
# Line 1644  for i in $KPPFILES ; do Line 2696  for i in $KPPFILES ; do
2696      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2697          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2698      fi      fi
2699      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2700  done  done
2701    
2702  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1654  for i in $NOOPTFILES ; do Line 2706  for i in $NOOPTFILES ; do
2706      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2707          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2708      fi      fi
2709      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2710      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2711  done  done
2712    
# Line 1668  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2720  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2720  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2721    
2722  # Create special header files  # Create special header files
2723  $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"
2724  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
2725      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2726  else  else
2727      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2728      RETVAL=$?      RETVAL=$?
2729      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
2730          rm -f $PACKAGES_DOT_H".tmp"          rm -f $PACKAGES_DOT_H".tmp"
# Line 1682  else Line 2734  else
2734      fi      fi
2735  fi  fi
2736  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
2737      $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
2738  fi  fi
2739    
2740    
2741  #  Write the "state" for future records  #  Write the "state" for future records
2742  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2743      echo -n "" > genmake_state      printf "" > genmake_state
2744      for i in $gm_state ; do      for i in $gm_state ; do
2745          t1="t2=\$$i"          t1="t2=\$$i"
2746          eval $t1          eval $t1

Legend:
Removed from v.1.55  
changed lines
  Added in v.1.157

  ViewVC Help
Powered by ViewVC 1.1.22