/[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.15 by edhill, Tue Oct 21 18:35:08 2003 UTC revision 1.89 by edhill, Wed Jul 21 16:34:46 2004 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4  #  #
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      grep -i "#define.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17      RETVAL=$?      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18      if test "x${RETVAL}" = x0 ; then      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19          echo "Error: In $cpp_options there is an illegal line: #define ALLOW_$pkg"      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20          exit 99  }
21      fi  
22      grep -i "#undef.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1  # Search for particular CPP #cmds associated with MPI
23      RETVAL=$?  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24      if test "x${RETVAL}" = x0 ; then  test_for_mpi_in_cpp_eeoptions() {
25          echo "Error: In $cpp_options there is an illegal line: #undef ALLOW_$pkg"      cpp_options=$1
26          exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27      fi      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28      grep -i "#define.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99
29        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99
30    }
31    
32    # Search for particular string in a file. Return 1 if detected, 0 if not
33    # usage: test_for_string_in_file file string
34    test_for_string_in_file() {
35        file=$1
36        strng=$2
37        grep -i "$strng" $file > /dev/null 2>&1
38      RETVAL=$?      RETVAL=$?
39      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
40          echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg"          printf "Error: In $file there is an illegal line: "
41          exit 99          grep -i "$strng" $file
42            return 1
43      fi      fi
44      grep -i "#undef.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      return 0
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         echo "Error: In $cpp_options there is an illegal line: #undef DISABLE_$pkg"  
         exit 99  
    fi  
45  }  }
46    
47  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
# Line 62  expand_pkg_groups() { Line 67  expand_pkg_groups() {
67          done          done
68          PACKAGES=$new_packages          PACKAGES=$new_packages
69          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
70            return $matched
71      else      else
72          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73      fi      fi
74  }  }
75    
76    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
77    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
78    check_for_broken_Ff()  {
79        #  Do we have defaults for $FS and/or $FS90 ?
80        tfs=f
81        tfs9=f90
82        if test "x$FS" != x ; then
83            tfs="$FS"
84        fi
85        if test "x$FS90" != x ; then
86            tfs9="$FS90"
87        fi
88    
89        #  First check the ability to create a *.F/.f pair.
90        cat <<EOF >> genmake_hello.F
91          program hello
92          write(*,*) 'hi'
93          stop
94          end
95    EOF
96        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97        RETVAL=$?
98        if test "x$RETVAL" != x0 ; then
99            if test "x$FS" = x ; then
100                FS='for'
101                FS90='fr9'
102                check_for_broken_Ff
103            else
104                cat <<EOF 2>&1
105    ERROR: Your file system cannot distinguish between *.F and *.f files
106      (fails the "cp" test) and this program cannot find a suitable
107      replacement extension.  Please try a different build environment or
108      contact the <MITgcm-support@mitgcm.org> list for help.
109    
110    EOF
111                exit -1
112            fi
113            return
114        fi
115        rm -f genmake_hello.*
116    
117        #  Check the ability of ${MAKE} and ${LN} to use the current set
118        #  of extensions.
119        cat <<EOF >> genmake_hello.F
120          program hello
121          write(*,*) 'hi'
122          stop
123          end
124    EOF
125        test -f Makefile  &&  mv -f Makefile Makefile.bak
126        cat <<EOF >> Makefile
127    %.$tfs : %.F
128    .SUFFIXES:
129    genmake_hello.$tfs: genmake_hello.F
130            $LN genmake_hello.F genmake_hello.$tfs
131    EOF
132        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133        RETVAL=$?
134        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135            if test "x$FS" = x ; then
136                FS='for'
137                FS90='fr9'
138                check_for_broken_Ff
139            else
140                cat <<EOF 2>&1
141    ERROR: Your file system cannot distinguish between *.F and *.f files
142      (fails the "make/ln" test) and this program cannot find a suitable
143      replacement extension.  Please try a different build environment or
144      contact the <MITgcm-support@mitgcm.org> list for help.
145    
146    EOF
147                exit -1
148                return
149            fi
150        fi
151        rm -f genmake_hello.* Makefile
152        test -f Makefile  &&  mv -f Makefile.bak Makefile
153    
154        #  If we make it here, use the extensions
155        FS=$tfs
156        FS90=$tfs9
157        return
158    }
159    
160    
161    look_for_makedepend()  {
162    
163        #  The "original" makedepend is part of the Imake system that is
164        #  most often distributed with XFree86 or with an XFree86 source
165        #  package.  As a result, many machines (eg. generic Linux) do not
166        #  have a system-default "makedepend" available.  For those
167        #  systems, we have two fall-back options:
168        #
169        #    1) a makedepend implementation shipped with the cyrus-imapd
170        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
171        #
172        #    2) a known-buggy xmakedpend shell script
173        #
174        #  So the choices are, in order:
175        #
176        #    1) use the user-specified program
177        #    2) use a system-wide default
178        #    3) locally build and use the cyrus implementation
179        #    4) fall back to the buggy local xmakedpend script
180        #
181        if test "x${MAKEDEPEND}" = x ; then
182            which makedepend > /dev/null 2>&1
183            RV0=$?
184            cat <<EOF >> genmake_tc.f
185          program test
186          write(*,*) 'test'
187          stop
188          end
189    EOF
190            makedepend genmake_tc.f > /dev/null 2>&1
191            RV1=$?
192            if test "x${RV0}${RV1}" = x00 ; then
193                MAKEDEPEND=makedepend
194            else
195                echo "    a system-default makedepend was not found."
196                
197                #  Try to build the cyrus implementation
198                rm -f ./genmake_cy_md
199                (
200                    cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
201                        &&  ./configure > /dev/null 2>&1  \
202                        &&  make > /dev/null 2>&1
203                    if test -x ./makedepend.exe ; then
204                        $LN ./makedepend.exe ./makedepend
205                    fi
206                    ./makedepend ifparser.c > /dev/null 2>&1  \
207                        &&  echo "true"
208                ) > ./genmake_cy_md
209                grep true ./genmake_cy_md > /dev/null 2>&1
210                RETVAL=$?
211                if test "x$RETVAL" = x0 ; then
212                    MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
213                else
214                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
215                fi
216                rm -f ./genmake_cy_md
217            fi
218        fi
219    }
220    
221    
222  # Guess possible config options for this host  # Guess possible config options for this host
223  find_possible_configs()  {  find_possible_configs()  {
224    
225      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
226      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
227      PLATFORM=`echo $tmp2 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
228        tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
229        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
230        tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
231        PLATFORM=$tmp3
232        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
233      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
234      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
 #     if test "x$OFLIST" = x ; then  
 #       echo "  No pre-defined options files were found matching this platform"  
 #       echo "  but examples for other platforms can be found in:"  
 #       echo "    $ROOTDIR/tools/build_options"  
 #     else  
 #       echo "  Options files (located in $ROOTDIR/tools/build_options) that"  
 #       echo "  may work with this machine are:"  
 #       for i in $OFLIST ; do  
 #           echo "    $i"  
 #       done  
 #     fi  
235            
236      echo "test" > test      echo "test" > test
237      ln -s ./test link      ln -s ./test link
# Line 103  find_possible_configs()  { Line 249  find_possible_configs()  {
249          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
250      fi      fi
251    
252        look_for_makedepend
253    
254      # look for possible fortran compilers      # look for possible fortran compilers
255      tmp="$MITGCM_FC $FC g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
256      p_FC=      p_FC=
257      for c in $tmp ; do      for c in $tmp ; do
258          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 121  EOF Line 269  EOF
269              p_FC="$p_FC $c"              p_FC="$p_FC $c"
270          fi          fi
271      done      done
272        rm -f ./hello.f ./hello
273      if test "x${p_FC}" = x ; then      if test "x${p_FC}" = x ; then
274          cat 1>&2 <<EOF          cat 1>&2 <<EOF
275    
# Line 137  EOF Line 286  EOF
286          echo "   "$p_FC          echo "   "$p_FC
287          if test "x$FC" = x ; then          if test "x$FC" = x ; then
288              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
289                echo "  Setting FORTRAN compiler to: "$FC
290          fi          fi
291      fi      fi
292    
293      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
294          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
295          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
296              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
297              echo "  The options file:  $p_OF"          fi
298              echo "    appears to match so we'll use it."      fi
299              break  #    echo "  The options file:  $p_OF"
300          fi  #    echo "    appears to match so we'll use it."
301      done  #   for i in $p_FC ; do
302    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
303    #if test -r $p_OF ; then
304    #    OPTFILE=$p_OF
305    #    echo "  The options file:  $p_OF"
306    #    echo "    appears to match so we'll use it."
307    #    break
308    #fi
309    #   done
310      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
311          cat 1>&2 <<EOF          cat 1>&2 <<EOF
312    
# Line 204  get_pdepend_list()  { Line 362  get_pdepend_list()  {
362      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
363          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \
364          > ./.pd_tmp          > ./.pd_tmp
365      source ./.pd_tmp      . ./.pd_tmp
366      rm -f ./.pd_tmp      rm -f ./.pd_tmp
367    
368      echo -n "PNAME = "${}      printf "PNAME = "${}
369  }  }
370    
371    
372  #  Explain usage  #  Explain usage
373  usage()  {  usage()  {
374      echo  cat <<EOF
375      echo "Usage: "$0" [OPTIONS]"  
376      echo "  where [OPTIONS] can be:"  Usage: "$0" [OPTIONS]
377      echo    where [OPTIONS] can be:
378      echo "    -help | --help | -h | --h"  
379      echo "    -nooptfile | --nooptfile"      -help | --help | -h | --h
380      echo "      -optfile NAME | --optfile NAME | -of NAME | --of NAME"            Print this help message and exit.
381      echo "      -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME"  
382      echo "    -pdepend NAME | --pdepend NAME"      -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
383      echo "      -pdepend=NAME | --pdepend=NAME"        -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
384      echo "    -pdefault NAME | --pdefault NAME"            Use "NAME" as the adoptfile.  By default, the file at
385      echo "      -pdefault=NAME | --pdefault=NAME"            "tools/adjoint_options/adjoint_default" will be used.
386      echo "    -make NAME | -m NAME"  
387      echo "      --make=NAME | -m=NAME"      -nooptfile | --nooptfile
388      echo "    -makefile NAME | -mf NAME"        -optfile NAME | --optfile NAME | -of NAME | --of NAME
389      echo "      --makefile=NAME | -mf=NAME"        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
390      echo "    -platform NAME | --platform NAME | -pl NAME | --pl NAME"            Use "NAME" as the optfile.  By default, an attempt will be
391      echo "      -platform=NAME | --platform=NAME | -pl=NAME | --pl=NAME"            made to find an appropriate "standard" optfile in the
392      echo "    -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME"            tools/build_options/ directory.
393      echo "      -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME"  
394      echo "    -mods NAME | --mods NAME | -mo NAME | --mo NAME"      -pdepend NAME | --pdepend NAME
395      echo "      -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME"        -pdepend=NAME | --pdepend=NAME
396      echo "    -disable NAME | --disable NAME"            Get package dependency information from "NAME".
397      echo "      -disable=NAME | --disable=NAME"  
398      echo "    -enable NAME | --enable NAME"      -pdefault NAME | --pdefault NAME
399      echo "      -enable=NAME | --enable=NAME"        -pdefault=NAME | --pdefault=NAME
400      echo "    -standarddirs NAME | --standarddirs NAME"            Get the default package list from "NAME".
401      echo "      -standarddirs=NAME | --standarddirs=NAME"  
402      echo "    -noopt NAME | --noopt NAME"      -make NAME | -m NAME
403      echo "      -noopt=NAME | --noopt=NAME"        --make=NAME | -m=NAME
404  #    echo "    -cpp NAME | --cpp NAME"            Use "NAME" for the MAKE program. The default is "make" but
405  #    echo "      -cpp=NAME | --cpp=NAME"            many platforms, "gmake" is the preferred choice.
406      echo "    -fortran NAME | --fortran NAME | -fc NAME | --fc NAME"  
407      echo "      -fc=NAME | --fc=NAME"      -makefile NAME | -mf NAME
408      echo "    -[no]ieee | --[no]ieee"        --makefile=NAME | -mf=NAME
409      echo "    -[no]mpi | --[no]mpi"            Call the makefile "NAME".  The default is "Makefile".
410      echo "    -[no]jam | --[no]jam"  
411      echo      -makedepend NAME | -md NAME
412      echo "  and NAME is a string such as:"        --makedepend=NAME | -md=NAME
413      echo            Use "NAME" for the MAKEDEPEND program.
414      echo "    --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'"  
415      echo "    -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'"      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
416      echo "    -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'"        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
417      echo            Specify the location of the MITgcm ROOTDIR as "NAME".
418      echo "  which, depending upon your shell, may need to be single-quoted"            By default, genamke will try to find the location by
419      echo "  if it contains spaces, dashes, or other special characters."            looking in parent directories (up to the 5th parent).
420    
421        -mods NAME | --mods NAME | -mo NAME | --mo NAME
422          -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
423              Here, "NAME" specifies a list of directories that are
424              used for additional source code.  Files found in the
425              "mods list" are given preference over files of the same
426              name found elsewhere.
427    
428        -disable NAME | --disable NAME
429          -disable=NAME | --disable=NAME
430              Here "NAME" specifies a list of packages that we don't
431              want to use.  If this violates package dependencies,
432              genamke will exit with an error message.
433    
434        -enable NAME | --enable NAME
435          -enable=NAME | --enable=NAME
436              Here "NAME" specifies a list of packages that we wish
437              to specifically enable.  If this violates package
438              dependencies, genamke will exit with an error message.
439    
440        -standarddirs NAME | --standarddirs NAME
441          -standarddirs=NAME | --standarddirs=NAME
442              Here, "NAME" specifies a list of directories to be
443              used as the "standard" code.
444    
445        -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
446          -fc=NAME | --fc=NAME
447              Use "NAME" as the fortran compiler.  By default, genmake
448              will search for a working compiler by trying a list of
449              "usual suspects" such as g77, f77, etc.
450    
451        -[no]ieee | --[no]ieee
452              Do or don't use IEEE numerics.  Note that this option
453              *only* works if it is supported by the OPTFILE that
454              is being used.
455    
456        -mpi | --mpi
457              Include MPI header files and link to MPI libraries
458        -mpi=PATH | --mpi=PATH
459              Include MPI header files and link to MPI libraries using MPI_ROOT
460              set to PATH. i.e. Include files from $PATH/include, link to libraries
461              from $PATH/lib and use binaries from $PATH/bin.
462    
463        -bash NAME
464              Explicitly specify the Bourne or BASH shell to use
465    
466      While it is most often a single word, the "NAME" variables specified
467      above can in many cases be a space-delimited string such as:
468    
469        --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
470        -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'
471        -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
472    
473      which, depending upon your shell, may need to be single-quoted.
474    
475      For more detailed genmake documentation, please see:
476    
477        http://mitgcm.org/devel_HOWTO/
478    
479    EOF
480    
481      exit 1      exit 1
482  }  }
483    
484  #eh3 # This is the generic configuration.  #  Build a CPP macro to automate calling C routines from FORTRAN
485  #eh3 set LN         = ( 'ln -s' )  get_fortran_c_namemangling()  {
486  #eh3 set CPP        = ( '/lib/cpp -P' )  
487  #eh3 set S64        = ( '$(TOOLSDIR)/set64bitConst.sh' )      #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
488  #eh3 set KPP        = (  )      if test ! "x$FC_NAMEMANGLE" = x ; then
489  #eh3 set FC         = ( 'f77' )          return 0
490  #eh3 set LINK       = $FC      fi
491  #eh3 set MAKEDEPEND = ( 'makedepend' )  
492  #eh3 set INCLUDES   = ( -I. )      default_nm="#define FC_NAMEMANGLE(X) X ## _"
493  #eh3 set FFLAGS     = (  )      
494  #eh3 set FOPTIM     = (  )      cat > genmake_test.c <<EOF
495  #eh3 set CFLAGS     = (  )  void tcall( char * string ) { tsub( string ); }
496  #eh3 set KFLAGS1    = (  )  EOF
497  #eh3 set KFLAGS2    = (  )      $MAKE genmake_test.o >> genmake_warnings 2>&1
498  #eh3 set LIBS       = (  )      RETVAL=$?
499  #eh3 set KPPFILES   = (  )      if test "x$RETVAL" != x0 ; then
500  #eh3 if (! $?NOOPTFILES ) set NOOPTFILES = (  )          FC_NAMEMANGLE=$default_nm
501  #eh3 if (! $?NOOPTFLAGS ) set NOOPTFLAGS = (  )          cat <<EOF>> genmake_errors
502    
503    WARNING: C test compile fails
504    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
505    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
506    EOF
507            return 1
508        fi
509        c_tcall=`nm genmake_test.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`
510        RETVAL=$?
511        if test "x$RETVAL" != x0 ; then
512            FC_NAMEMANGLE=$default_nm
513            cat <<EOF>> genmake_warnings
514    
515    WARNING: The "nm" command failed.
516    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
517    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
518    EOF
519            return 1
520        fi
521        cat > genmake_tcomp.f <<EOF
522          subroutine tcall( string )
523          character*(*) string
524          call tsub( string )
525          end
526    EOF
527        $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1
528        RETVAL=$?
529        if test "x$RETVAL" != x0 ; then
530            FC_NAMEMANGLE=$default_nm
531            cat <<EOF>> genmake_warnings
532    
533    WARNING: FORTRAN test compile fails -- please see "genmake_errors"
534    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
535    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
536    EOF
537            return 1
538        fi
539        f_tcall=`nm genmake_tcomp.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`
540        RETVAL=$?
541        if test "x$RETVAL" != x0 ; then
542            FC_NAMEMANGLE=$default_nm
543            cat <<EOF>> genmake_warnings
544    
545    WARNING: The "nm" command failed.
546    WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
547    WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
548    EOF
549            return 1
550        fi
551    
552        c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
553        f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'`
554        c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
555        f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'`
556    
557        nmangle="X"
558        if test "x$c_a" != "x$f_a" ; then
559            comm="echo x$f_a | sed -e 's|x$c_a||'"
560            a=`eval $comm`
561            nmangle="$a ## $nmangle"
562        fi
563        if test "x$c_b" != "x$f_b" ; then
564            comm="echo x$f_b | sed -e 's|x$c_b||'"
565            b=`eval $comm`
566            nmangle="$nmangle ## $b"
567        fi
568    
569        FC_NAMEMANGLE="#define FC_NAMEMANGLE(X)  $nmangle"
570    
571        #  cleanup the testing files
572        rm -f genmake_tcomp.* genmake_test.*
573    }
574    
575    
576    check_HAVE_CLOC()  {
577        get_fortran_c_namemangling
578        cat <<EOF > genmake_tc_1.c
579    $FC_NAMEMANGLE
580    #include <stdio.h>
581    #include <stdlib.h>
582    #include <unistd.h>
583    #include <assert.h>
584    #include <sys/time.h>
585    void FC_NAMEMANGLE(cloc) ( double *curtim )
586    {
587     struct timeval tv1;
588     gettimeofday(&tv1 , (void *)NULL );
589     *curtim =  (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6);
590     *curtim = *curtim/1.E6;
591    }
592    EOF
593        make genmake_tc_1.o >> genmake_tc.log 2>&1
594        RET_C=$?
595        cat <<EOF > genmake_tc_2.f
596          program hello
597          Real*8 wtime
598          external cloc
599          call cloc(wtime)
600          print *," HELLO WORLD", wtime
601          end program hello
602    EOF
603        $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1
604        RET_F=$?
605        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1
606        RETVAL=$?
607        if test "x$RETVAL" = x0 ; then
608            HAVE_CLOC=t
609            DEFINES="$DEFINES -DHAVE_CLOC"
610        fi
611        rm -f genmake_tc*
612    }
613    
614    
615    check_netcdf_libs()  {
616        cat <<EOF > genmake_tnc.for
617          program fgennc
618    #include "netcdf.inc"
619          integer iret, ncid, xid
620          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
621          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
622          iret = nf_def_dim(ncid, 'X', 11, xid)
623          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
624          iret = nf_close(ncid)
625          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
626          end
627    EOF
628        #echo "$CPP $DEFINES $INCLUDES"
629        $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f  \
630            &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1
631        RET_COMPILE=$?
632        test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
633        RETVAL=$?
634        if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
635            HAVE_NETCDF=t
636        else
637            # try again with "-lnetcdf" added to the libs
638            $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f  \
639                &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
640                $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
641            RET_COMPILE=$?
642            test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
643            RETVAL=$?
644            if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
645                LIBS="$LIBS -lnetcdf"
646                HAVE_NETCDF=t
647            else
648                cat genmake_tnc.log >> genmake_warnings
649            fi
650        fi
651        rm -f genmake_tnc*
652    }
653    
654    
655    
656    ###############################################################################
657    #   Sequential part of script starts here
658    ###############################################################################
659    
660  #  Set defaults here  #  Set defaults here
661  COMMANDL="$0 $@"  COMMANDL="$0 $@"
# Line 289  LN= Line 665  LN=
665  S64=  S64=
666  KPP=  KPP=
667  FC=  FC=
668    CPP=
669  LINK=  LINK=
670  DEFINES="-DWORDLENGTH=4"  DEFINES=
671  PACKAGES=  PACKAGES=
672  ENABLE=  ENABLE=
673  DISABLE=  DISABLE=
# Line 306  FOPTIM= Line 683  FOPTIM=
683  CFLAGS=  CFLAGS=
684  KFLAGS1=  KFLAGS1=
685  KFLAGS2=  KFLAGS2=
686    #LDADD=
687  LIBS=  LIBS=
688  KPPFILES=  KPPFILES=
689  NOOPTFILES=  NOOPTFILES=
690  NOOPTFLAGS=  NOOPTFLAGS=
691    MPI=
692    MPIPATH=
693    
694    # DEFINES checked by test compilation
695    HAVE_SYSTEM=
696    HAVE_FDATE=
697    FC_NAMEMANGLE=
698    HAVE_CLOC=
699    HAVE_NETCDF=
700    HAVE_ETIME=
701    
702  MODS=  MODS=
703  TOOLSDIR=  TOOLSDIR=
704  SOURCEDIRS=  SOURCEDIRS=
705  INCLUDEDIRS=  INCLUDEDIRS=
706  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
707    
708    G2ARGS=
709    BASH=
710  PWD=`pwd`  PWD=`pwd`
711  MAKE=make  MAKE=make
712  AWK=awk  AWK=awk
# Line 332  IEEE= Line 722  IEEE=
722  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
723      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
724  fi  fi
725    FS=
726    FS90=
727    
728  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
729  AD_OPTFILE=  AD_OPTFILE=
730    TAF=
731    AD_TAF_FLAGS=
732    FTL_TAF_FLAGS=
733    SVD_TAF_FLAGS=
734    TAF_EXTRA=
735    TAMC=
736    AD_TAMC_FLAGS=
737    FTL_TAF_FLAGS=
738    SVD_TAMC_FLAGS=
739    TAMC_EXTRA=
740    
741    
742  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
743  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE NOOPT"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
744  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
745    
746  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
747  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 "
748  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
749  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
750  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
751    gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
752    
753  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
754  gm_s7="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF DIFF_FLAGS AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
755  gm_s8="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"  gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
756  gm_s9=""  gm_s12="TAF_EXTRA TAMC_EXTRA"
757    
758  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8"  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"
759    gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
760    
761    cat <<EOF
762    
763    GENMAKE :
764    
765    A program for GENerating MAKEfiles for the MITgcm project.  For a
766    quick list of options, use "genmake -h" or for more detail see:
767    
768      http://mitgcm.org/devel_HOWTO/
769    
770    EOF
771    
 echo  
772  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
773  gm_local="genmake_local"  gm_local="genmake_local"
774  for i in . $MODS ; do  for i in . $MODS ; do
775      if test -r $i/$gm_local ; then      if test -r $i/$gm_local ; then
776          source $i/$gm_local          . $i/$gm_local
777          break          break
778      fi      fi
779  done  done
780  echo -n "  getting local config information:  "  printf "  getting local config information:  "
781  if test -e $gm_local ; then  if test -f $gm_local ; then
782      echo "using $gm_local"      echo "using $gm_local"
783      source $gm_local      . $gm_local
784      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
785      # echo "ENABLE=$ENABLE"      # echo "ENABLE=$ENABLE"
786  else  else
# Line 385  fi Line 799  fi
799  #done  #done
800  #parse_options  #parse_options
801  ac_prev=  ac_prev=
802  for ac_option ; do  for ac_option in $@ ; do
803    
804        G2ARGS="$G2ARGS \"$ac_option\""
805    
806      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
807      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 408  for ac_option ; do Line 824  for ac_option ; do
824          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
825              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
826                    
827          -adoptfile | --adoptfile | -ad | --ad)          -adoptfile | --adoptfile | -adof | --adof)
828              ac_prev=AD_OPTFILE ;;              ac_prev=AD_OPTFILE ;;
829          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
830              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
# Line 428  for ac_option ; do Line 844  for ac_option ; do
844          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
845              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
846                    
847            -bash | --bash)
848                ac_prev=BASH ;;
849            -bash=* | --bash=*)
850                BASH=$ac_optarg ;;
851            
852            -makedepend | --makedepend | -md | --md)
853                ac_prev=MAKEDEPEND ;;
854            -makedepend=* | --makedepend=* | -md=* | --md=*)
855                MAKEDEPEND=$ac_optarg ;;
856            
857          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
858              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
859          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
860              MAKEFILE=$ac_optarg ;;              MAKEFILE=$ac_optarg ;;
861                    
862          -platform | --platform | -pl | --pl)          -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*)
863              ac_prev=PLATFORM ;;              echo "ERROR: The platform option has been removed.  Please specify"
864          -platform=* | --platform=* | -pl=* | --pl=*)              echo "  the build options using the \"optfile\" mechanism."
865              PLATFORM=$ac_optarg ;;              echo
866                usage
867                ;;
868                    
869          -rootdir | --rootdir | -rd | --rd)          -rootdir | --rootdir | -rd | --rd)
870              ac_prev=ROOTDIR ;;              ac_prev=ROOTDIR ;;
# Line 463  for ac_option ; do Line 891  for ac_option ; do
891          -standarddirs=* | --standarddirs=*)          -standarddirs=* | --standarddirs=*)
892              STANDARDDIRS=$ac_optarg ;;              STANDARDDIRS=$ac_optarg ;;
893    
         -noopt | --noopt)  
             ac_prev=NOOPT ;;  
         -noopt=* | --noopt=*)  
             NOOPT=$ac_optarg ;;  
           
894  #           -cpp | --cpp)  #           -cpp | --cpp)
895  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
896  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
# Line 478  for ac_option ; do Line 901  for ac_option ; do
901          -fc=* | --fc=*)          -fc=* | --fc=*)
902              FC=$ac_optarg ;;              FC=$ac_optarg ;;
903                    
904            -fs | --fs)
905                ac_prev=FS ;;
906            -fs=* | --fs=*)
907                FS=$ac_optarg ;;
908            
909            -fs90 | --fs90)
910                ac_prev=FS90 ;;
911            -fs90=* | --fs90=*)
912                FS90=$ac_optarg ;;
913            
914          -ieee | --ieee)          -ieee | --ieee)
915              IEEE=true ;;              IEEE=true ;;
916          -noieee | --noieee)          -noieee | --noieee)
917              IEEE= ;;              IEEE= ;;
918            
919          -mpi | --mpi)          -mpi | --mpi)
920              MPI=true ;;              MPI=true ;;
921          -nompi | --nompi)          -mpi=* | --mpi=*)
922              MPI= ;;              MPIPATH=$ac_optarg
923                MPI=true ;;
924                    
925          -jam | --jam)  #       -jam | --jam)
926              JAM=1 ;;  #           JAM=1 ;;
927          -nojam | --nojam)  #       -nojam | --nojam)
928              JAM=0 ;;  #           JAM=0 ;;
929                    
930          -ds | --ds)          -ds | --ds)
931              DUMPSTATE=t ;;              DUMPSTATE=t ;;
932                    
933            -taf_extra | --taf_extra)
934                ac_prev=TAF_EXTRA ;;
935            -taf_extra=* | --taf_extra=*)
936                TAF_EXTRA=$ac_optarg ;;
937    
938            -tamc_extra | --tamc_extra)
939                ac_prev=TAMC_EXTRA ;;
940            -tamc_extra=* | --tamc_extra=*)
941                TAMC_EXTRA=$ac_optarg ;;
942    
943          -*)          -*)
944              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
945              usage              usage
# Line 523  if test -f ./.genmakerc ; then Line 967  if test -f ./.genmakerc ; then
967  fi  fi
968    
969  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
970      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
971        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
972          ROOTDIR=".."          ROOTDIR=".."
973      else      else
974          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
975              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
976                  ROOTDIR=$d                  ROOTDIR=$d
977                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
978                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
979                  break                  break
980              fi              fi
# Line 560  fi Line 1005  fi
1005  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
1006      if test -f "$OPTFILE" -a -r "$OPTFILE" ; then      if test -f "$OPTFILE" -a -r "$OPTFILE" ; then
1007          echo "    using OPTFILE=\"$OPTFILE\""          echo "    using OPTFILE=\"$OPTFILE\""
1008          source "$OPTFILE"          . "$OPTFILE"
1009          RETVAL=$?          RETVAL=$?
1010          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1011              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1012              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1013              exit 1              exit 1
1014          fi          fi
# Line 576  if test "x$OPTFILE" != xNONE ; then Line 1021  if test "x$OPTFILE" != xNONE ; then
1021      fi      fi
1022  fi  fi
1023    
1024    #  Check for broken systems that cannot correctly distinguish *.F and *.f files
1025    # check_for_broken_Ff
1026    
1027  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1028  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1029      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 587  fi Line 1035  fi
1035  if test "x${AD_OPTFILE}" != xNONE ; then  if test "x${AD_OPTFILE}" != xNONE ; then
1036      if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then      if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then
1037          echo "    using AD_OPTFILE=\"$AD_OPTFILE\""          echo "    using AD_OPTFILE=\"$AD_OPTFILE\""
1038          source "$AD_OPTFILE"          . "$AD_OPTFILE"
1039          RETVAL=$?          RETVAL=$?
1040          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1041              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1042              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1043              exit 1              exit 1
1044          fi          fi
# Line 603  if test "x${AD_OPTFILE}" != xNONE ; then Line 1051  if test "x${AD_OPTFILE}" != xNONE ; then
1051      fi      fi
1052  fi  fi
1053    
1054  #  Check that FC, LINK, CPP, and S64 are defined.  If not, complain  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1055  #  and abort!  #  either set defaults or complain and abort!
1056    if test ! "x$BASH" = x ; then
1057        # add a trailing space so that it works within the Makefile syntax (see below)
1058        BASH="$BASH "
1059    fi
1060  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1061      cat <<EOF 1>&2      cat <<EOF 1>&2
1062    
# Line 618  fi Line 1070  fi
1070  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1071      LINK=$FC      LINK=$FC
1072  fi  fi
1073    if test "x$MAKE" = x ; then
1074        MAKE="make"
1075    fi
1076  if test "x$CPP" = x ; then  if test "x$CPP" = x ; then
1077      CPP="cpp"      CPP=cpp
1078  fi  fi
1079    #EH3 === UGLY ===
1080    #  The following is an ugly little hack to check for $CPP in /lib/ and
1081    #  it should eventually be replaced with a more general function that
1082    #  searches a combo of the user's path and a list of "usual suspects"
1083    #  to find the correct location for binaries such as $CPP.
1084    for i in " " "/lib/" ; do
1085        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1086    done
1087    #EH3 === UGLY ===
1088  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1089  RETVAL=$?  RETVAL=$?
1090  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 630  Error: C pre-processor "$CPP" failed the Line 1094  Error: C pre-processor "$CPP" failed the
1094    
1095    1) within the options file ("CPP=...") as specified by "-of=OPTFILE"    1) within the options file ("CPP=...") as specified by "-of=OPTFILE"
1096    2) the "./genmake_local" file    2) the "./genmake_local" file
1097      3) with the CPP environment variable
1098    
1099  EOF  EOF
1100      exit 1      exit 1
1101  else  else
1102      rm -f test_cpp      rm -f test_cpp
1103  fi  fi
1104  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
1105      MAKEDEPEND=makedepend  if test "x$LN" = x ; then
1106        LN="ln -s"
1107    fi
1108    echo "test" > genmake_test_ln
1109    $LN genmake_test_ln genmake_tlink
1110    RETVAL=$?
1111    if test "x$RETVAL" != x0 ; then
1112        cat <<EOF 1>&2
1113    
1114    Error: The command "ln -s" failed -- please specify a working soft-link
1115      command in the optfile.
1116    
1117    EOF
1118        exit 1
1119    fi
1120    rm -f genmake_test_ln genmake_tlink
1121    
1122    #  Check for broken *.F/*.f handling and fix if possible
1123    check_for_broken_Ff
1124    
1125    if test ! "x$MPI" = x ; then
1126          echo "  Turning on MPI cpp macros"
1127          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1128  fi  fi
1129    
1130    printf "\n===  Checking system libraries  ===\n"
1131    printf "  Do we have the system() command using $FC...  "
1132    cat > genmake_tcomp.f <<EOF
1133          program hello
1134          call system('echo hi')
1135          end
1136    EOF
1137    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1138    RETVAL=$?
1139    if test "x$RETVAL" = x0 ; then
1140        HAVE_SYSTEM=t
1141        DEFINES="$DEFINES -DHAVE_SYSTEM"
1142        echo "yes"
1143    else
1144        HAVE_SYSTEM=
1145        echo "no"
1146    fi
1147    rm -f genmake_tcomp*
1148    
1149    printf "  Do we have the fdate() command using $FC...  "
1150    cat > genmake_tcomp.f <<EOF
1151          program hello
1152          CHARACTER(128) string
1153          string = ' '
1154          call fdate( string )
1155          print *, string
1156          end
1157    EOF
1158    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1159    RETVAL=$?
1160    if test "x$RETVAL" = x0 ; then
1161        HAVE_FDATE=t
1162        DEFINES="$DEFINES -DHAVE_FDATE"
1163        echo "yes"
1164    else
1165        HAVE_FDATE=
1166        echo "no"
1167    fi
1168    rm -f genmake_tcomp*
1169    
1170    printf "  Do we have the etime() command using $FC...  "
1171    cat > genmake_tcomp.f <<EOF
1172          program hello
1173          REAL*4 ACTUAL, TARRAY(2)
1174          EXTERNAL ETIME
1175          REAL*4 ETIME
1176          actual = etime( tarray )
1177          print *, tarray
1178          end
1179    EOF
1180    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1181    RETVAL=$?
1182    if test "x$RETVAL" = x0 ; then
1183        HAVE_ETIME=t
1184        DEFINES="$DEFINES -DHAVE_ETIME"
1185        echo "yes"
1186    else
1187        HAVE_ETIME=
1188        echo "no"
1189    fi
1190    rm -f genmake_tcomp*
1191    
1192    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1193    check_HAVE_CLOC
1194    if test "x$HAVE_CLOC" != x ; then
1195        echo "yes"
1196    else
1197        echo "no"
1198    fi
1199    rm -f genmake_t*
1200    
1201    printf "  Can we create NetCDF-enabled binaries...  "
1202    check_netcdf_libs
1203    if test "x$HAVE_NETCDF" != x ; then
1204        echo "yes"
1205    else
1206        echo "no"
1207    fi
1208    
1209    
1210  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1211  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1212  for d in $MODS ; do  for d in $MODS ; do
1213      if test ! -d $d ; then      if test ! -d $d ; then
1214          echo          echo
1215          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1216          exit 1          exit 1
1217      else      else
1218          echo -n " $d"          printf " $d"
1219          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1220          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1221      fi      fi
# Line 663  if test "x${PLATFORM}" = x ; then Line 1230  if test "x${PLATFORM}" = x ; then
1230  fi  fi
1231    
1232  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1233      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1234        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1235          EXEDIR=../exe          EXEDIR=../exe
1236      else      else
1237          EXEDIR=.          EXEDIR=.
# Line 678  if test "x${TOOLSDIR}" = x ; then Line 1246  if test "x${TOOLSDIR}" = x ; then
1246      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1247  fi  fi
1248  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1249      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1250      exit 1      exit 1
1251  fi  fi
1252  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1253      S64='$(TOOLSDIR)/set64bitConst.sh'      S64='$(TOOLSDIR)/set64bitConst.sh'
1254  fi  fi
1255    THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1256    
1257  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1258    
# Line 692  EXECUTABLE=${EXECUTABLE:-mitgcmuv} Line 1261  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1261  #  they appear as regular source code  #  they appear as regular source code
1262  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1263      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1264      $MAKE -C $ROOTDIR"/eesupp/src/" > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1
1265      RETVAL=$?      RETVAL=$?
1266      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1267          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1268      else      else
1269          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1270          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1271          exit 1          exit 1
1272      fi      fi
1273  fi  fi
1274    
1275    #same for exch2
1276    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1277        echo "  Making source files in exch2 from  templates"
1278        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1279        RETVAL=$?
1280        if test "x${RETVAL}" = x0 ; then
1281            rm -f make_exch2.errors
1282        else
1283            echo "Error: problem encountered while building source files in exch2:"
1284            cat make_exch2.errors 1>&2
1285            exit 1
1286        fi
1287    fi
1288    
1289  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1290  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1291      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 729  if test ! "x${RETVAL}" = x0 ; then Line 1312  if test ! "x${RETVAL}" = x0 ; then
1312      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""
1313      exit 1      exit 1
1314  fi  fi
1315  source ./.pd_tmp  . ./.pd_tmp
1316  rm -f ./.pd_tmp  rm -f ./.pd_tmp
1317    
1318  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1319  #  file should eventually be added so that, for convenience, one can  #  file should eventually be added so that, for convenience, one can
1320  #  specify groups of packages using names like "ocean" and "atmosphere".  #  specify groups of packages using names like "ocean" and "atmosphere".
1321  echo  -n "  checking default package list:  "  echo "  checking default package list:  "
1322  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1323      for i in "." $MODS ; do      for i in "." $MODS ; do
1324          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
# Line 748  if test "x${PDEFAULT}" = x ; then Line 1331  if test "x${PDEFAULT}" = x ; then
1331      PDEFAULT="$ROOTDIR/pkg/pkg_default"      PDEFAULT="$ROOTDIR/pkg/pkg_default"
1332  fi  fi
1333  if test "x${PDEFAULT}" = xNONE ; then  if test "x${PDEFAULT}" = xNONE ; then
1334      echo "default packages file disabled"      echo "    default packages file disabled"
1335  else  else
1336      if test ! -r $PDEFAULT ; then      if test ! -r $PDEFAULT ; then
         echo ""  
1337          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""
1338      else      else
1339          echo "  using PDEFAULT=\"$PDEFAULT\""          echo "    using PDEFAULT=\"$PDEFAULT\""
1340          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1341          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1342          RETVAL=$?          RETVAL=$?
1343          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1344              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1345              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1346              exit 1              exit 1
1347          fi          fi
# Line 767  else Line 1349  else
1349              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1350          done          done
1351          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1352          expand_pkg_groups          RET=1
1353            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1354          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1355      fi      fi
1356  fi  fi
1357    
1358  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1359    for i in $PACKAGES ; do
1360        echo $i >> ./.tmp_pack
1361    done
1362    for i in `grep  "-" ./.tmp_pack` ; do
1363        j=`echo $i | sed 's/[-]//'`
1364        DISABLE="$DISABLE $j"
1365    done
1366  pack=  pack=
1367  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1368      addit="t"      addit="t"
# Line 789  PACKAGES="$pack" Line 1379  PACKAGES="$pack"
1379  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1380  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1381  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1382    # Test if each explicitly referenced package exists
1383  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1384      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1385        if test ! -d "$ROOTDIR/pkg/$j" ; then
1386          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1387          exit 1          exit 1
1388      fi      fi
1389      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1390  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1391  PACKAGES=  PACKAGES=
1392  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1393      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1394  done  done
1395    rm -f ./.tmp_pack
1396  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1397    
1398  echo "  applying package dependency rules"  echo "  applying package dependency rules"
# Line 868  while test "x$ck" != xtt ; do Line 1459  while test "x$ck" != xtt ; do
1459              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1460              exit 1              exit 1
1461          fi          fi
1462          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1463            #i=$(( $i + 1 ))
1464      done      done
1465      ck=$ck"t"      ck=$ck"t"
1466  done  done
# Line 887  for i in $PACKAGES ; do Line 1479  for i in $PACKAGES ; do
1479      fi      fi
1480  done  done
1481    
1482  #  This is compatible with the old genmake.  The "DISABLE_*" flags  #  Build MNC templates and check for ability to build and use NetCDF
1483  #  need to be replaced by the "ALLOW_*" flags set below.  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1484  #  RETVAL=$?
1485  # echo -n "  Setting package-specific CPP flags:  "  if test "x$RETVAL" = x0 ; then
1486  # pkrm=( mom_fluxform mom_vecinv generic_advdiff )      ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1487  # pkrmdef=( -DDISABLE_MOM_FLUXFORM -DDISABLE_MOM_VECINV -DDISABLE_GENERIC_ADVDIFF -DDISABLE_DEBUGMODE )      RETVAL=$?
1488  # echo -n "  "      if test "x${RETVAL}" = x0 ; then
1489  # i=0          rm -f make_mnc.errors
1490  # while test $i -lt "${#pkrm[@]}" ; do      else
1491  #     echo "$PACKAGES" | grep "${pk[$i]}" > /dev/null 2>&1          echo "Error: problem encountered while building source files in pkg/mnc:"
1492  #     RETVAL=$?          cat make_mnc.errors 1>&2
1493  #     if test "x$RETVAL" = x1 ; then          exit 1
1494  #       DEFINES="$DEFINES ${pkdef[$i]}"      fi
1495  #       echo -n " ${pkdef[$i]}"      if test "x$HAVE_NETCDF" != xt ; then
1496  #     fi          cat <<EOF
 #     i=$(( $i + 1 ))  
 # done  
 # echo  
   
 # Create a list of #define and #undef to enable/disable packages  
 PACKAGES_DOT_H=PACKAGES_CONFIG.h  
 cat <<EOF >$PACKAGES_DOT_H".tmp"  
 C=== GENMAKE v2 ===  
 C  The following defines have been set by GENMAKE, so please do not  
 C  edit anything below these comments.  In general, you should  
 C  add or remove packages by re-running genmake with different  
 C  "-enable" and/or "-disable" options.  
1497    
1498  #ifndef PACKAGES_H  WARNING: the "mnc" package has been enabled but tests failed to
1499  #define PACKAGES_H    compile and/or execute NetCDF applications.  Please check that:
1500    
1501  C  Packages disabled by genmake:    1) NetCDF is installed for your compiler and
1502      2) the LIBS variable (within the 'optfile") specifies the correct
1503           NetCDF library to link against.
1504      
1505  EOF  EOF
1506        fi
1507    fi
1508    
1509    # Create a list of #define and #undef to enable/disable packages
1510    PACKAGES_DOT_H=PACKAGES_CONFIG.h
1511  #  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
1512  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
1513  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
1514  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
1515  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
1516  all_pack=  all_pack=
1517    DISABLED_PACKAGES=
1518  for n in $names ; do  for n in $names ; do
1519      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then      if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then
1520          has_pack="f"          has_pack="f"
# Line 937  for n in $names ; do Line 1526  for n in $names ; do
1526          done          done
1527          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1528              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
1529              echo "#undef $undef" >> $PACKAGES_DOT_H".tmp"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
 #           DEFINES="$DEFINES -U$undef"  
   
 #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  
             case $n in  
                 mom_fluxform)  
                     DEFINES="$DEFINES -DDISABLE_MOM_FLUXFORM"  
                     ;;  
                 mom_vecinv)  
                     DEFINES="$DEFINES -DDISABLE_MOM_VECINV"  
                     ;;  
                 debug)  
                     DEFINES="$DEFINES -DDISABLE_DEBUGMODE"  
                     ;;  
             esac  
 #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  
   
1530          fi          fi
1531      fi      fi
1532  done  done
1533  cat <<EOF >>$PACKAGES_DOT_H".tmp"  ENABLED_PACKAGES=
   
 C  Packages enabled by genmake:  
 EOF  
1534  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1535      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
1536      echo "#define $def" >> $PACKAGES_DOT_H".tmp"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1537  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1538    
1539  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1540      case $i in      case $i in
1541          aim_v23)          aim_v23)
1542              echo "#define   ALLOW_AIM" >> $PACKAGES_DOT_H".tmp"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1543              DEFINES="$DEFINES -DALLOW_AIM"              echo "Warning: ALLOW_AIM is set to enable aim_v23."
             echo "Warning: ALLOW_AIM is set to enable aim_v23. This is REALLY ugly Jean-Michel :-)"  
1544              ;;              ;;
1545      esac      esac
1546  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1547    
1548  done  done
 cat <<EOF >>$PACKAGES_DOT_H".tmp"  
   
 #endif /* PACKAGES_H */  
 EOF  
   
 if test ! -f $PACKAGES_DOT_H ; then  
     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
 else  
     cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     RETVAL=$?  
     if test "x$RETVAL" = x0 ; then  
         rm -f $PACKAGES_DOT_H".tmp"  
     else  
         mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"  
         mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     fi  
 fi  
1549    
1550  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1551  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1552  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1553      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
1554  fi  fi
1555  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
1556      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
1557      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
1558          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1559          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1560          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1561      else              exit 1
1562          SOURCEDIRS="$SOURCEDIRS $adr"          else
1563      fi              SOURCEDIRS="$SOURCEDIRS $adr"
1564      adr="$ROOTDIR/$d/inc"          fi
1565      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
1566          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1567          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1568          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1569      else              exit 1
1570          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
1571      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
1572  done          fi
1573        done
1574    fi
1575    
1576  echo " Searching for CPP_OPTIONS.h in order to warn about the presence"  echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1577  echo " of \"#define ALLOW_PKGNAME\"-type statements:"  echo "    of \"#define \"-type statements that are no longer allowed:"
1578  CPP_OPTIONS=  CPP_OPTIONS=
1579    CPP_EEOPTIONS=
1580  spaths=". $INCLUDEDIRS"  spaths=". $INCLUDEDIRS"
1581    names=`ls -1 "$ROOTDIR/pkg"`
1582  for i in $spaths ; do  for i in $spaths ; do
1583      try="$i/CPP_OPTIONS.h"      try="$i/CPP_OPTIONS.h"
1584      #  echo -n "    trying $try : "      if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
     if test -f $try -a -r $try ; then  
1585          echo "    found CPP_OPTIONS=\"$try\""          echo "    found CPP_OPTIONS=\"$try\""
1586          CPP_OPTIONS="$try"          CPP_OPTIONS="$try"
1587          break          # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1588            for n in $names ; do
1589                test_for_package_in_cpp_options $CPP_OPTIONS $n
1590            done
1591        fi
1592        try="$i/CPP_EEOPTIONS.h"
1593        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1594            echo "    found CPP_EEOPTIONS=\"$try\""
1595            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1596    #**** not yet enabled ****
1597    #        test_for_mpi_in_cpp_eeoptions $try
1598    #**** not yet enabled ****
1599            CPP_EEOPTIONS="$try"
1600      fi      fi
1601  done  done
1602  if test "x$CPP_OPTIONS" = x ; then  if test "x$CPP_OPTIONS" = x ; then
1603      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1604      exit 1      exit 1
1605  fi  fi
 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h  
 names=`ls -1 "$ROOTDIR/pkg"`  
 for n in $names ; do  
     test_for_package_in_cpp_options $CPP_OPTIONS $n  
 done  
   
1606    
1607  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
1608  #  compiler.  #  compiler.
# Line 1056  for i in $SOURCEDIRS ; do Line 1617  for i in $SOURCEDIRS ; do
1617      done      done
1618  done  done
1619    
 cat <<EOF > adjoint_sed  
 s/call adopen(/call adopen ( mythid,\\  
      \&           /g  
 s/call adclose(/call adclose( mythid,\\  
      \&           /g  
 s/call adread(/call adread ( mythid,\\  
      \&           /g  
 s/call adwrite(/call adwrite( mythid,\\  
      \&           /g  
   
 EOF  
1620    
1621  echo  echo
1622  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1623  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1624  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1625      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1626          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1627      fi      fi
1628  done  done
# Line 1084  rm -rf .links.tmp Line 1632  rm -rf .links.tmp
1632  mkdir .links.tmp  mkdir .links.tmp
1633  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1634  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1635  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1636  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1637  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1638  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1639  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1640  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1641  for d in $alldirs ; do  for d in $alldirs ; do
1642      deplist=      deplist=
# Line 1097  for d in $alldirs ; do Line 1645  for d in $alldirs ; do
1645      for sf in $sfiles ; do      for sf in $sfiles ; do
1646          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
1647              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
1648                    case $d/$sf in
1649                      ./$PACKAGES_DOT_H)
1650                            ;;
1651                      ./AD_CONFIG.h)
1652                            ;;
1653                      ./FC_NAMEMANGLE.h)
1654                            ;;
1655                      *)
1656                            touch .links.tmp/$sf
1657                            deplist="$deplist $sf"
1658                            ;;
1659                    esac
1660                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`
                 touch .links.tmp/$sf  
                 deplist="$deplist $sf"  
1661                  case $extn in                  case $extn in
1662                      F)                      F)
1663                          echo    " \\"  >> srclist.inc                          echo    " \\"  >> srclist.inc
1664                          echo -n " $sf" >> srclist.inc                          printf " $sf" >> srclist.inc
1665                          ;;                          ;;
1666                      F90)                      F90)
1667                          echo    " \\"  >> f90srclist.inc                          echo    " \\"  >> f90srclist.inc
1668                          echo -n " $sf" >> f90srclist.inc                          printf " $sf" >> f90srclist.inc
1669                          ;;                          ;;
1670                      c)                      c)
1671                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.inc
1672                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.inc
1673                          ;;                          ;;
1674                      h)                      h)
1675                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hlist.inc
1676                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hlist.inc
1677                          ;;                          ;;
1678                      flow)                      flow)
1679                          echo    " \\"  >> ad_flow_files.inc                          echo    " \\"  >> ad_flow_files.inc
1680                          echo -n " $sf" >> ad_flow_files.inc                          printf " $sf" >> ad_flow_files.inc
1681                          ;;                          ;;
1682                  esac                  esac
1683              fi              fi
# Line 1139  echo "" >> f90srclist.inc Line 1697  echo "" >> f90srclist.inc
1697  echo "" >> hlist.inc  echo "" >> hlist.inc
1698  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1699    
1700  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1701      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1702  fi  fi
1703  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1148  echo "#    $MACHINE" >> $MAKEFILE Line 1706  echo "#    $MACHINE" >> $MAKEFILE
1706  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
1707  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
1708  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1709  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1710  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1711  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1712    
1713    EXE_AD=$EXECUTABLE"_ad"
1714    EXE_FTL=$EXECUTABLE"_ftl"
1715    EXE_SVD=$EXECUTABLE"_svd"
1716    
1717  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1718    #
1719    # OPTFILE="$OPTFILE"
1720  #  #
1721  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
1722  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 1181  TOOLSDIR    = ${TOOLSDIR} Line 1746  TOOLSDIR    = ${TOOLSDIR}
1746    
1747  #eh3  new defines for the adjoint work  #eh3  new defines for the adjoint work
1748  AUTODIFF    = ${ROOTDIR}/pkg/autodiff  AUTODIFF    = ${ROOTDIR}/pkg/autodiff
1749    EXE_AD      = ${EXE_AD}
1750    EXE_FTL     = ${EXE_FTL}
1751    EXE_SVD     = ${EXE_SVD}
1752    
1753    ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1754    DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1755    
1756    # These files are created by Makefile
1757    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1758    
1759  EOF  EOF
1760    
# Line 1200  FC = ${FC} Line 1774  FC = ${FC}
1774  # Fortran compiler  # Fortran compiler
1775  F90C = ${F90C}  F90C = ${F90C}
1776  # Link editor  # Link editor
1777  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
1778    
1779  # Defines for CPP  # Defines for CPP
1780  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1232  cat csrclist.inc      >> $MAKEFILE Line 1806  cat csrclist.inc      >> $MAKEFILE
1806  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
1807  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
1808  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
1809  echo               >> $MAKEFILE  echo >> $MAKEFILE
1810  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
1811  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1812  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1813    echo >> $MAKEFILE
1814    echo '.SUFFIXES:' >> $MAKEFILE
1815    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1816  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
1817  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
1818    
1819  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1820    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
1821  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
1822  \$(EXECUTABLE): \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1823            @echo Creating \$@ ...
1824          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1825  depend:  depend:
1826          @make links          @make links
1827          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1828          ${TOOLSDIR}/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1829            -rm -f makedepend.out
1830    
1831  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1832    
1833  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
1834    
# Line 1262  output.txt: \$(EXECUTABLE) Line 1837  output.txt: \$(EXECUTABLE)
1837          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
1838    
1839  clean:  clean:
1840          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl}          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
1841  Clean:  Clean:
1842          @make clean          @make clean
1843          @make cleanlinks          @make cleanlinks
1844          -rm -f Makefile.bak genmake_state genmake_optfile make.log          -rm -f \$(SPECIAL_FILES)
1845            -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1846  CLEAN:  CLEAN:
1847          @make Clean          @make Clean
1848          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1849          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1850          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1851          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
1852    
1853  Makefile: makefile  #eh3 Makefile: makefile
1854  makefile:  makefile:
1855          ${0} $@          $THIS_SCRIPT $G2ARGS
1856  cleanlinks:  cleanlinks:
1857          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
1858    
1859  # The normal chain of rules is (  .F - .f - .o  )  # Special targets ($SPECIAL_FILES) which are create by make
1860  .F.f:  ${PACKAGES_DOT_H}:
1861            @echo Creating \$@ ...
1862            @$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) > \$@
1863    AD_CONFIG.h:
1864            @echo Creating \$@ ...
1865            @$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 > \$@
1866    FC_NAMEMANGLE.h:
1867            @echo Creating \$@ ...
1868            echo "$FC_NAMEMANGLE" > \$@
1869    
1870    # The normal chain of rules is (  .F - .$FS - .o  )
1871    
1872    %.o : %.F
1873    
1874    .F.$FS:
1875          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1876  .f.o:  .$FS.o:
1877          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1878  .F90.f90:  .F90.$FS90:
1879          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1880  .f90.o:  .$FS90.o:
1881          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1882  .c.o:  .c.o:
1883          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
1884    
1885  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
1886  .F.p:  .F.p:
1887          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1888  .p.f:  .p.$FS:
1889          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1890    
1891  #=========================================  #=========================================
# Line 1304  cleanlinks: Line 1894  cleanlinks:
1894  TAMC           = ${TAMC}  TAMC           = ${TAMC}
1895  TAF            = ${TAF}  TAF            = ${TAF}
1896    
1897    TAF_EXTRA      = ${TAF_EXTRA}
1898    TAMC_EXTRA     = ${TAMC_EXTRA}
1899    
1900  EOF  EOF
1901    
1902  ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"  ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS"
# Line 1319  done Line 1912  done
1912    
1913  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
1914  echo >> $MAKEFILE  echo >> $MAKEFILE
1915  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
1916  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
1917  for i in $AD_FILES ; do  for i in $AD_FILES ; do
1918      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
1919      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
1920  done  done
1921  echo >> $MAKEFILE  echo >> $MAKEFILE
1922    rm -f ad_files
1923    
1924  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1925    
1926    # ... AD ...
1927  ad_input_code.f: \$(F77FILES)  adall: ad_taf
1928    adtaf: ad_taf_output.f
1929    adtamc: ad_tamc_output.f
1930    
1931    ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1932            @$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
1933            cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
1934            -rm -f ad_config.template
1935            @make \$(F77FILES)
1936          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
1937          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f
1938    
   
1939  ad_taf_output.f: ad_input_code.f  ad_taf_output.f: ad_input_code.f
1940          \$(TAF) \$(AD_TAF_FLAGS) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1941          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1942    
1943  ad_taf: ad_taf_output.o \$(OBJFILES)  adtafonly:
1944          \$(LINK) -o ${EXECUTABLE} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f
1945            cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f
1946    
1947    ad_taf: ad_taf_output.o \$(OBJFILES)
1948            \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
1949    
1950  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.f: ad_input_code.f
1951          \$(TAMC) \$(AD_TAMC_FLAGS) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f
1952          cat ad_input_code_ad.f | sed -f adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f
1953    
1954  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
1955          \$(LINK) -o ${EXECUTABLE} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
1956    
1957    
1958    # ... FTL ...
1959    ftlall: ftl_taf
1960    ftltaf: ftl_taf_output.f
1961    ftltamc: ftl_tamc_output.f
1962    
1963    ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1964            @$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
1965            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
1966            -rm -f ftl_config.template
1967            @make \$(F77FILES)
1968            @make \$(AD_FLOW_FILES)
1969            cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f
1970    
1971    ftl_taf_output.f: ftl_input_code.f
1972            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1973            cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1974    
1975    ftltafonly:
1976            \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f
1977            cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f
1978    
1979    ftl_taf: ftl_taf_output.o \$(OBJFILES)
1980            \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
1981    
1982    ftl_tamc_output.f: ftl_input_code.f
1983            \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f
1984            cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f
1985    
1986  flt_taf_output.f: ad_input_code.f  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
1987          \$(TAF) \$(FTL_TAF_FLAGS) ad_input_code.f          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
         cat ad_input_code_ad.f | sed -f adjoint_sed > flt_taf_output.f  
1988    
 flt_taf: flt_taf_output.o \$(OBJFILES)  
         \$(LINK) -o ${EXECUTABLE} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) flt_taf_output.o \$(LIBS)  
1989    
1990    # ... SVD ...
1991    svdtaf: ad_taf_output.f ftl_taf_output.f
1992    svdall: svd_taf
1993    
1994    svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)
1995            \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
1996    
1997    
1998  #=========================================  #=========================================
# Line 1375  for i in $KPPFILES ; do Line 2010  for i in $KPPFILES ; do
2010      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2011          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2012      fi      fi
2013      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2014  done  done
2015    
2016  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1385  for i in $NOOPTFILES ; do Line 2020  for i in $NOOPTFILES ; do
2020      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2021          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2022      fi      fi
2023      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2024      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2025  done  done
2026    
# Line 1398  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2033  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2033    
2034  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2035    
2036    # Create special header files
2037    $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"
2038    if test ! -f $PACKAGES_DOT_H ; then
2039        mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2040    else
2041        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
2042        RETVAL=$?
2043        if test "x$RETVAL" = x0 ; then
2044            rm -f $PACKAGES_DOT_H".tmp"
2045        else
2046            mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
2047            mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2048        fi
2049    fi
2050    if test ! -f AD_CONFIG.h ; then
2051        $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
2052    fi
2053    
2054    
2055  #  Write the "state" for future records  #  Write the "state" for future records
2056  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2057      echo -n "" > genmake_state      printf "" > genmake_state
2058      for i in $gm_state ; do      for i in $gm_state ; do
2059          t1="t2=\$$i"          t1="t2=\$$i"
2060          eval $t1          eval $t1

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.89

  ViewVC Help
Powered by ViewVC 1.1.22