/[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.59 by edhill, Sun Jan 11 17:02:47 2004 UTC revision 1.211 by jmc, Tue Nov 2 22:45:07 2010 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 48  test_for_string_in_file() { Line 56  test_for_string_in_file() {
56  # the package list.  # the package list.
57  expand_pkg_groups() {  expand_pkg_groups() {
58      new_packages=      new_packages=
     PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups"  
59      if test -r $PKG_GROUPS ; then      if test -r $PKG_GROUPS ; then
60          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp
61          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp
# Line 59  expand_pkg_groups() { Line 66  expand_pkg_groups() {
66              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" = x0 ; then
67                  matched=1                  matched=1
68                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
69                  echo "    replacing \"$i\" with: $replace"                  echo "    replacing \"$i\" with:$replace"
70                  new_packages="$new_packages $replace"                  new_packages="$new_packages $replace"
71              else              else
72                  new_packages="$new_packages $i"                  new_packages="$new_packages $i"
# Line 67  expand_pkg_groups() { Line 74  expand_pkg_groups() {
74          done          done
75          PACKAGES=$new_packages          PACKAGES=$new_packages
76          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
77            return $matched
78      else      else
79          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
80      fi      fi
81  }  }
82    
83    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
84    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
85    check_for_broken_Ff()  {
86        #  Do we have defaults for $FS and/or $FS90 ?
87        tfs=f
88        tfs9=f90
89        if test "x$FS" != x ; then
90            tfs="$FS"
91        fi
92        if test "x$FS90" != x ; then
93            tfs9="$FS90"
94        fi
95    
96        #  First check the ability to create a *.F/.f pair.
97        cat <<EOF >> genmake_hello.F
98          program hello
99          write(*,*) 'hi'
100          stop
101          end
102    EOF
103        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
104        RETVAL=$?
105        if test "x$RETVAL" != x0 ; then
106            if test "x$FS" = x ; then
107                FS='for'
108                FS90='fr9'
109                check_for_broken_Ff
110            else
111                cat <<EOF 2>&1
112    ERROR: Your file system cannot distinguish between *.F and *.f files
113      (fails the "cp" test) and this program cannot find a suitable
114      replacement extension.  Please try a different build environment or
115      contact the <MITgcm-support@mitgcm.org> list for help.
116    
117    EOF
118                exit -1
119            fi
120            return
121        fi
122        rm -f genmake_hello.*
123    
124        #  Check the ability of ${MAKE} and ${LN} to use the current set
125        #  of extensions.
126        cat <<EOF >> genmake_hello.F
127          program hello
128          write(*,*) 'hi'
129          stop
130          end
131    EOF
132        test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
133        cat <<EOF >> $MAKEFILE
134    .SUFFIXES:
135    .SUFFIXES: .$tfs .F
136    .F.$tfs:
137            $LN \$< \$@
138    EOF
139        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
140        RETVAL=$?
141        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
142            if test "x$FS" = x ; then
143                FS='for'
144                FS90='fr9'
145                check_for_broken_Ff
146            else
147                cat <<EOF 2>&1
148    ERROR: Your file system cannot distinguish between *.F and *.f files
149      (fails the "make/ln" test) and this program cannot find a suitable
150      replacement extension.  Please try a different build environment or
151      contact the <MITgcm-support@mitgcm.org> list for help.
152    
153    EOF
154                exit -1
155                return
156            fi
157        fi
158        rm -f genmake_hello.* $MAKEFILE
159        test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
160    
161        #  If we make it here, use the extensions
162        FS=$tfs
163        FS90=$tfs9
164        return
165    }
166    
167    
168    look_for_makedepend()  {
169    
170        #  The "original" makedepend is part of the Imake system that is
171        #  most often distributed with XFree86 or with an XFree86 source
172        #  package.  As a result, many machines (eg. generic Linux) do not
173        #  have a system-default "makedepend" available.  For those
174        #  systems, we have two fall-back options:
175        #
176        #    1) a makedepend implementation shipped with the cyrus-imapd
177        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
178        #
179        #    2) a known-buggy xmakedpend shell script
180        #
181        #  So the choices are, in order:
182        #
183        #    1) use the user-specified program
184        #    2) use a system-wide default
185        #    3) locally build and use the cyrus implementation
186        #    4) fall back to the buggy local xmakedpend script
187        #
188        if test "x${MAKEDEPEND}" = x ; then
189            which makedepend > /dev/null 2>&1
190            RV0=$?
191            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
192            #  echo 'MAKEFILE="'$MAKEFILE'"'
193            cat <<EOF >> $MAKEFILE
194    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
195    #
196    #   Some "makedepend" implementations will die if they cannot
197    #   find a Makefile -- so this file is here to gives them an
198    #   empty one to find and parse.
199    EOF
200            cat <<EOF >> genmake_tc.f
201          program test
202          write(*,*) 'test'
203          stop
204          end
205    EOF
206            makedepend genmake_tc.f > /dev/null 2>&1
207            RV1=$?
208            test -f $MAKEFILE  &&  rm -f $MAKEFILE
209            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
210            if test "x${RV0}${RV1}" = x00 ; then
211                MAKEDEPEND=makedepend
212            else
213                echo "    a system-default makedepend was not found."
214    
215                #  Try to build the cyrus implementation
216                build_cyrus_makedepend
217                RETVAL=$?
218                if test "x$RETVAL" != x0 ; then
219                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
220                fi
221                rm -f ./genmake_cy_md
222            fi
223        else
224            #  echo "MAKEDEPEND=${MAKEDEPEND}"
225            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
226            RETVAL=$?
227            if test x"$RETVAL" = x0 ; then
228                build_cyrus_makedepend
229            fi
230        fi
231    }
232    
233    
234    build_cyrus_makedepend()  {
235        rm -f ./genmake_cy_md
236        (
237            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
238                &&  ./configure > /dev/null 2>&1  \
239                &&  make > /dev/null 2>&1
240            if test -x ./makedepend.exe ; then
241                $LN ./makedepend.exe ./makedepend
242            fi
243            ./makedepend ifparser.c > /dev/null 2>&1  \
244                &&  echo "true"
245        ) > ./genmake_cy_md
246        grep true ./genmake_cy_md > /dev/null 2>&1
247        RETVAL=$?
248        rm -f ./genmake_cy_md
249        if test "x$RETVAL" = x0 ; then
250            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
251            return 0
252        else
253            echo "WARNING: unable to build cyrus-imapd-makedepend"
254            return 1
255        fi
256    }
257    
258    
259    build_embed_encode()
260    {
261        printf "  building the embed-encode utility...  "
262        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
263            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
264                echo
265                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
266                echo
267                EMBED_SRC=f
268                return 1
269            fi
270            clist="cc gcc c89 $CC"
271            for ic in $clist ; do
272                comm="$ic -o encode_files encode_files.c"
273                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
274                RETVAL=$?
275                if test "x$RETVAL" = x0 ; then
276                    echo "OK"
277                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
278                    return 0
279                fi
280            done
281            echo
282            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
283            echo "      so it has been disabled"
284            echo
285            EMBED_SRC=f
286            return 1
287        fi
288        echo "OK"
289        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
290    }
291    
292    
293  # Guess possible config options for this host  # Guess possible config options for this host
294  find_possible_configs()  {  find_possible_configs()  {
295    
# Line 80  find_possible_configs()  { Line 298  find_possible_configs()  {
298      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
299      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
300      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
301      PLATFORM=$tmp2      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
302        PLATFORM=$tmp3
303        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
304      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
305      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
306        
307      echo "test" > test      echo "test" > test
308      ln -s ./test link      ln -s ./test link
309      RETVAL=$?      RETVAL=$?
# Line 100  find_possible_configs()  { Line 320  find_possible_configs()  {
320          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
321      fi      fi
322    
323      # makedepend is not always available      look_for_makedepend
324      if test "x${MAKEDEPEND}" = x ; then  
325        which makedepend >& /dev/null      #================================================================
326        RETVAL=$?      #  look for possible C compilers
327        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
328           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
329           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
330        fi          rm -f ./genmake_hello.c  ./genmake_hello
331            cat >> genmake_hello.c << EOF
332    #include <stdio.h>
333    int main(int argc, char **argv) {
334      printf("Hello!\n");
335      return 0;
336    }
337    EOF
338            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
339            RETVAL=$?
340            if test "x${RETVAL}" = x0 ; then
341                p_CC="$p_CC $c"
342            fi
343        done
344        rm -f ./genmake_hello.c ./genmake_hello
345        if test "x${p_CC}" = x ; then
346            cat 1>&2 <<EOF
347    
348    Error: No C compilers were found in your path.  Please specify one using:
349    
350        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
351        2) the CC or MITGCM_CC environment variables.
352    
353    EOF
354            exit 1
355        else
356            echo "  The possible C compilers found in your path are:"
357            echo "   "$p_CC
358            if test "x$CC" = x ; then
359                CC=`echo $p_CC | $AWK '{print $1}'`
360                echo "  Setting C compiler to: "$CC
361            fi
362      fi      fi
363    
364      # look for possible fortran compilers      #================================================================
365      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible FORTRAN compilers
366        tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
367      p_FC=      p_FC=
368      for c in $tmp ; do      for c in $tmp ; do
369          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 136  Error: No Fortran compilers were found i Line 388  Error: No Fortran compilers were found i
388    
389      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
390      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
391      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
392    
393  EOF  EOF
394          exit 1          exit 1
395      else      else
396          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are:"
397          echo "   "$p_FC          echo "   "$p_FC
         if test "x$FC" = x ; then  
             FC=`echo $p_FC | $AWK '{print $1}'`  
         fi  
398      fi      fi
399    
400      for i in $p_FC ; do      #  Use the first of the compilers found in the current PATH
401          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i      #  that has a correctly-named optfile
402          if test -r $p_OF ; then      if test "x$OPTFILE" = x  -a  "x$FC" = x ; then
403              OPTFILE=$p_OF          for i in $p_FC ; do
404              echo "  The options file:  $p_OF"              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
405              echo "    appears to match so we'll use it."              if test -r $OPTFILE ; then
406              break                  echo "  Setting OPTFILE to: "$OPTFILE
407          fi                  break
408      done              fi
409            done
410        fi
411    
412        if test "x$OPTFILE" = x ; then
413            OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
414            if test ! -r $OPTFILE ; then
415                 echo "  I looked for the file "$OPTFILE" but did not find it"
416            fi
417        fi
418    #    echo "  The options file:  $p_OF"
419    #    echo "    appears to match so we'll use it."
420    #   for i in $p_FC ; do
421    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
422    #if test -r $p_OF ; then
423    #    OPTFILE=$p_OF
424    #    echo "  The options file:  $p_OF"
425    #    echo "    appears to match so we'll use it."
426    #    break
427    #fi
428    #   done
429      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
430          cat 1>&2 <<EOF          cat 1>&2 <<EOF
431    
# Line 172  Error: No options file was found in:  $R Line 441  Error: No options file was found in:  $R
441  EOF  EOF
442          exit 1          exit 1
443      fi      fi
444        
445  #     # look for possible MPI libraries  #     # look for possible MPI libraries
446  #     mpi_libs=  #     mpi_libs=
447  #     mpi_fort=`which mpif77 2>/dev/null`  #     mpi_fort=`which mpif77 2>/dev/null`
# Line 191  EOF Line 460  EOF
460  #       if test "x${RETVAL}" = x0 ; then  #       if test "x${RETVAL}" = x0 ; then
461  #           a=`cat out`  #           a=`cat out`
462  #           for i in $a ; do  #           for i in $a ; do
463  #               case $i in  #               case $i in
464  #                   -*)  #                   -*)
465  #                       mpi_libs="$mpi_libs $i" ;;  #                       mpi_libs="$mpi_libs $i" ;;
466  #               esac  #               esac
# Line 210  get_pdepend_list()  { Line 479  get_pdepend_list()  {
479      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
480      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
481      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
482          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
483          > ./.pd_tmp          > ./.pd_tmp
484        RETVAL=$?
485        if test ! "x${RETVAL}" = x0 ; then
486          echo "Error: unable to parse package dependencies -- please check PKG_DEPEND=\"$1\""
487          exit 1
488        fi
489      . ./.pd_tmp      . ./.pd_tmp
490      rm -f ./.pd_tmp      rm -f ./.pd_tmp
491    
     echo -n "PNAME = "${}  
492  }  }
493    
494    
# Line 229  Usage: "$0" [OPTIONS] Line 502  Usage: "$0" [OPTIONS]
502      -help | --help | -h | --h      -help | --help | -h | --h
503            Print this help message and exit.            Print this help message and exit.
504    
505        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
506          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
507              Use "NAME" as the adoptfile.  By default, the file at
508              "tools/adjoint_options/adjoint_default" will be used.
509    
510      -nooptfile | --nooptfile      -nooptfile | --nooptfile
511        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
512        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
513            Use "NAME" as the optfile.  By default, an attempt will be            Use "NAME" as the optfile.  By default, an attempt will be
514            made to find an appropriate "standard" optfile in the            made to find an appropriate "standard" optfile in the
515            tools/build_options/ directory.            tools/build_options/ directory.
516    
517      -pdepend NAME | --pdepend NAME      -pdepend NAME | --pdepend NAME
518        -pdepend=NAME | --pdepend=NAME        -pdepend=NAME | --pdepend=NAME
519            Get package dependency information from "NAME".            Get package dependency information from "NAME".
520    
521      -pdefault NAME | --pdefault NAME      -pgroups NAME | --pgroups NAME
522        -pdefault=NAME | --pdefault=NAME        -pgroups=NAME | --pgroups=NAME
523            Get the default package list from "NAME".            Get the package groups information from "NAME".
524    
525        -bash NAME
526              Explicitly specify the Bourne or BASH shell to use
527    
528      -make NAME | -m NAME      -make NAME | -m NAME
529        --make=NAME | -m=NAME        --make=NAME | -m=NAME
530            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
531            many platforms, "gmake" is the preferred choice.            many platforms, "gmake" is the preferred choice.
532    
533      -makefile NAME | -mf NAME      -makefile NAME | -mf NAME
534        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
535            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
536    
537        -makedepend NAME | -md NAME
538          --makedepend=NAME | -md=NAME
539              Use "NAME" for the MAKEDEPEND program.
540    
541      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
542        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
543            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
544            By default, genamke will try to find the location by            By default, genamke will try to find the location by
545            looking in parent directories (up to the 5th parent).            looking in parent directories (up to the 5th parent).
546    
547      -mods NAME | --mods NAME | -mo NAME | --mo NAME      -mods NAME | --mods NAME | -mo NAME | --mo NAME
548        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
549            Here, "NAME" specifies a list of directories that are            Here, "NAME" specifies a list of directories that are
550            used for additional source code.  Files found in the            used for additional source code.  Files found in the
551            "mods list" are given preference over files of the same            "mods list" are given preference over files of the same
552            name found elsewhere.            name found elsewhere.
553    
554      -disable NAME | --disable NAME      -disable NAME | --disable NAME
555        -disable=NAME | --disable=NAME        -disable=NAME | --disable=NAME
556            Here "NAME" specifies a list of packages that we don't            Here "NAME" specifies a list of packages that we don't
557            want to use.  If this violates package dependencies,            want to use.  If this violates package dependencies,
558            genamke will exit with an error message.            genamke will exit with an error message.
559    
560      -enable NAME | --enable NAME      -enable NAME | --enable NAME
561        -enable=NAME | --enable=NAME        -enable=NAME | --enable=NAME
562            Here "NAME" specifies a list of packages that we wish            Here "NAME" specifies a list of packages that we wish
563            to specifically enable.  If this violates package            to specifically enable.  If this violates package
564            dependencies, genamke will exit with an error message.            dependencies, genamke will exit with an error message.
565    
566      -standarddirs NAME | --standarddirs NAME      -standarddirs NAME | --standarddirs NAME
567        -standarddirs=NAME | --standarddirs=NAME        -standarddirs=NAME | --standarddirs=NAME
568            Here, "NAME" specifies a list of directories to be            Here, "NAME" specifies a list of directories to be
569            used as the "standard" code.            used as the "standard" code.
570    
571      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
572        -fc=NAME | --fc=NAME        -fc=NAME | --fc=NAME
573            Use "NAME" as the fortran compiler.  By default, genmake            Use "NAME" as the fortran compiler.  By default, genmake
574            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
575            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
576    
577        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
578              Use "NAME" as the C compiler.  By default, genmake
579              will search for a working compiler by trying a list of
580              "usual suspects" such as gcc, c89, cc, etc.
581    
582      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
583            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
584            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
585            is being used.            is being used.
586    
587    While it is most often a single word, the "NAME" variables specified      -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
588              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
589              *only* works if CPP_EEOPTIONS.h allows this.
590    
591        -ignoretime | -ignore_time | --ignoretime | --ignore_time
592              Ignore all the "wall clock" routines entirely.  This will
593              not in any way hurt the model results -- it simply means
594              that the code that checks how long the model spends in
595              various routines will give junk values.
596    
597        -ts | --ts
598              Produce timing information per timestep
599        -papis | --papis
600              Produce summary MFlop/s (and IPC) with PAPI per timestep
601        -pcls | --pcls
602              Produce summary MFlop/s etc. with PCL per timestep
603        -foolad | --foolad
604              Fool the AD code generator
605        -papi | --papi
606              Performance analysis with PAPI
607        -pcl | --pcl
608              Performance analysis with PCL
609        -hpmt | --hpmt
610              Performance analysis with the HPM Toolkit
611    
612        -gsl | --gsl
613              Use GSL to control floating point rounding and precision
614        -devel | --devel
615              Add additional warning and debugging flags for development
616    
617        -mpi | --mpi
618              Include MPI header files and link to MPI libraries
619        -mpi=PATH | --mpi=PATH
620              Include MPI header files and link to MPI libraries using MPI_ROOT
621              set to PATH. i.e. Include files from \$PATH/include, link to libraries
622              from \$PATH/lib and use binaries from \$PATH/bin.
623    
624        -omp | --omp
625              Activate OpenMP code + use Compiler option OMPFLAG
626        -omp=OMPFLAG | --omp=OMPFLAG
627              Activate OpenMP code + use Compiler option OMPFLAG
628    
629        -es | --es | -embed-source | --embed-source
630              Embed a tarball containing the full source code
631              (including the Makefile, etc.) used to build the
632              executable [off by default]
633    
634      While it is most often a single word, the "NAME" variables specified
635    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
636    
637      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
# Line 305  Usage: "$0" [OPTIONS] Line 642  Usage: "$0" [OPTIONS]
642    
643    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
644    
645      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
646    
647  EOF  EOF
648    
# Line 314  EOF Line 651  EOF
651    
652  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
653  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
654    
655        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
656        if test ! "x$FC_NAMEMANGLE" = x ; then
657            return 0
658        fi
659        echo "running: get_fortran_c_namemangling()" >> $LOGFILE
660    
661      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
662        
663      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
664  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
665  EOF  EOF
666      $MAKE genmake_test.o >> genmake_warnings 2>&1      $MAKE genmake_test.o >> $LOGFILE 2>&1
667      RETVAL=$?      RETVAL=$?
668      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
669          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
670          cat <<EOF>> genmake_errors          cat <<EOF>> $LOGFILE
671    
672  WARNING: C test compile fails  WARNING: C test compile fails
673  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
# Line 331  WARNING: Please contact <MITgcm-support@ Line 675  WARNING: Please contact <MITgcm-support@
675  EOF  EOF
676          return 1          return 1
677      fi      fi
678      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`
679      RETVAL=$?      RETVAL=$?
680      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
681          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
682          cat <<EOF>> genmake_warnings          cat <<EOF>> $LOGFILE
683    
684  WARNING: The "nm" command failed.  WARNING: The "nm" command failed.
685  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
# Line 343  WARNING: Please contact <MITgcm-support@ Line 687  WARNING: Please contact <MITgcm-support@
687  EOF  EOF
688          return 1          return 1
689      fi      fi
690      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
691        subroutine tcall( string )        subroutine tcall( string )
692        character*(*) string        character*(*) string
693        call tsub( string )        call tsub( string )
694        end        end
695  EOF  EOF
696      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> $LOGFILE 2>&1
697      RETVAL=$?      RETVAL=$?
698      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
699          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
700          cat <<EOF>> genmake_warnings          cat <<EOF>> $LOGFILE
701    
702  WARNING: FORTRAN test compile fails -- please see "genmake_errors"  WARNING: FORTRAN test compile fails -- please see '$LOGFILE'
703  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
704  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
705  EOF  EOF
706          return 1          return 1
707      fi      fi
708      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`
709      RETVAL=$?      RETVAL=$?
710      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
711          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
712          cat <<EOF>> genmake_warnings          cat <<EOF>> $LOGFILE
713    
714  WARNING: The "nm" command failed.  WARNING: The "nm" command failed.
715  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
# Line 399  EOF Line 743  EOF
743    
744    
745  check_HAVE_CLOC()  {  check_HAVE_CLOC()  {
746        echo >> $LOGFILE
747        echo "running: check_HAVE_CLOC()" >> $LOGFILE
748      get_fortran_c_namemangling      get_fortran_c_namemangling
749      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
750  $FC_NAMEMANGLE  $FC_NAMEMANGLE
# Line 415  void FC_NAMEMANGLE(cloc) ( double *curti Line 761  void FC_NAMEMANGLE(cloc) ( double *curti
761   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
762  }  }
763  EOF  EOF
764      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
765        echo $COMM >> $LOGFILE
766        $COMM >> $LOGFILE 2>&1
767      RET_C=$?      RET_C=$?
768      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
769        program hello        program hello
770        Real*8 wtime        REAL*8 wtime
771        external cloc        external cloc
772        call cloc(wtime)        call cloc(wtime)
773        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
774        end program hello        end
775  EOF  EOF
776      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
777        echo $COMM >> $LOGFILE
778        $COMM >> $LOGFILE 2>&1
779      RET_F=$?      RET_F=$?
780      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> $LOGFILE 2>&1
781      RETVAL=$?      RETVAL=$?
782      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
783          HAVE_CLOC=t          HAVE_CLOC=t
# Line 437  EOF Line 787  EOF
787  }  }
788    
789    
790    check_HAVE_SIGREG()  {
791        if test ! "x$HAVE_SIGREG" = x ; then
792            return
793        fi
794        echo >> $LOGFILE
795        echo "running: check_HAVE_SIGREG()" >> $LOGFILE
796        get_fortran_c_namemangling
797        cat <<EOF > genmake_tc_1.c
798    $FC_NAMEMANGLE
799    #include <stdlib.h>
800    #include <stdio.h>
801    #include <signal.h>
802    #include <errno.h>
803    #include <ucontext.h>
804    
805    int * ip;
806    
807    static void killhandler(
808        unsigned int sn, siginfo_t  si, struct ucontext *sc )
809    {
810        *ip = *ip + 1;
811        return;
812    }
813    
814    void FC_NAMEMANGLE(sigreg) (int * aip)
815    {
816        struct sigaction s;
817        ip = aip;
818        s.sa_flags = SA_SIGINFO;
819        s.sa_sigaction = (void *)killhandler;
820        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
821            printf("Sigaction returned error = %d\n", errno);
822            exit(0);
823        }
824        return;
825    }
826    EOF
827        COMM="$CC $CFLAGS -c genmake_tc_1.c"
828        echo $COMM >> $LOGFILE
829        $COMM >> $LOGFILE 2>&1
830        RET_C=$?
831        cat <<EOF > genmake_tc_2.$FS
832          program hello
833          integer anint
834          common /iv/ anint
835          external sigreg
836          call sigreg(anint)
837          end
838    EOF
839        cat genmake_tc_2.$FS >> $LOGFILE
840        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
841        echo $COMM >> $LOGFILE
842        $COMM >> $LOGFILE 2>&1
843        RETVAL=$?
844        if test "x$RETVAL" = x0 ; then
845            HAVE_SIGREG=t
846            DEFINES="$DEFINES -DHAVE_SIGREG"
847        fi
848        rm -f genmake_tc*
849    }
850    
851    
852    check_HAVE_SETRLSTK()  {
853        if test "x$HAVE_SETRLSTK" = xt ; then
854            DEFINES="$DEFINES -DHAVE_SETRLSTK"
855            return
856        fi  
857        if test ! "x$HAVE_SETRLSTK" = x ; then
858            return
859        fi
860        echo >> $LOGFILE
861        echo "running: check_HAVE_SETRLSTK()" >> $LOGFILE
862        get_fortran_c_namemangling
863        cat <<EOF > genmake_tc_1.c
864    $FC_NAMEMANGLE
865    #include <sys/time.h>
866    #include <sys/resource.h>
867    #include <unistd.h>
868    void FC_NAMEMANGLE(setrlstk) ()
869    {
870        struct rlimit rls;
871        rls.rlim_cur = RLIM_INFINITY;
872        rls.rlim_max = RLIM_INFINITY;
873        setrlimit(RLIMIT_STACK, &rls);
874        return;
875    }
876    EOF
877        COMM="$CC $CFLAGS -c genmake_tc_1.c"
878        echo $COMM >> $LOGFILE
879        $COMM >> $LOGFILE 2>&1
880        RET_C=$?
881        cat <<EOF > genmake_tc_2.$FS
882          program hello
883          external setrlstk
884          call setrlstk()
885          end
886    EOF
887        cat genmake_tc_2.$FS >> $LOGFILE
888        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
889        echo $COMM >> $LOGFILE
890        $COMM >> $LOGFILE 2>&1
891        RETVAL=$?
892        if test "x$RETVAL" = x0 ; then
893            HAVE_SETRLSTK=t
894            DEFINES="$DEFINES -DHAVE_SETRLSTK"
895        fi
896        rm -f genmake_tc*
897    }
898    
899    
900    check_HAVE_STAT()  {
901        echo >> $LOGFILE
902        echo "running: check_HAVE_STAT()" >> $LOGFILE
903        get_fortran_c_namemangling
904        cat <<EOF > genmake_tc_1.c
905    $FC_NAMEMANGLE
906    #include <stdio.h>
907    #include <stdlib.h>
908    #include <unistd.h>
909    #include <sys/stat.h>
910    #include <sys/types.h>
911    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
912    {
913        char name[512];
914        struct stat astat;
915    
916        name[0] = 'a'; name[1] = '\0';
917        if (! stat(name, &astat))
918            *nbyte = (int)(astat.st_size);
919        else
920            *nbyte = -1;
921    }
922    EOF
923        COMM="$CC $CFLAGS -c genmake_tc_1.c"
924        echo $COMM >> $LOGFILE
925        $COMM >> genmake_tc.log 2>&1
926        RET_C=$?
927        cat <<EOF > genmake_tc_2.$FS
928          program hello
929          integer nbyte
930          call tfsize(nbyte)
931          print *," HELLO WORLD", nbyte
932          end
933    EOF
934        cat genmake_tc_2.$FS >> $LOGFILE
935        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
936        echo $COMM >> $LOGFILE
937        $COMM >> genmake_tc.log 2>&1
938        RETVAL=$?
939        if test "x$RETVAL" = x0 ; then
940            HAVE_STAT=t
941            DEFINES="$DEFINES -DHAVE_STAT"
942        fi
943        rm -f genmake_tc*
944    }
945    
946    
947    check_netcdf_libs()  {
948        if test ! "x$SKIP_NETCDF_CHECK" = x ; then
949            return
950        fi
951        echo >> $LOGFILE
952        echo "running: check_netcdf_libs()" >> $LOGFILE
953        cat <<EOF > genmake_tnc.F
954          program fgennc
955    #include "netcdf.inc"
956    EOF
957        if test ! "x$MPI" = x ; then
958            echo '#include "mpif.h"' >> genmake_tnc.F
959        fi
960        cat <<EOF >> genmake_tnc.F
961          integer iret, ncid, xid
962          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
963          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
964          iret = nf_def_dim(ncid, 'X', 11, xid)
965          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
966          iret = nf_close(ncid)
967          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
968          end
969    EOF
970        echo "===  genmake_tnc.F  >>>" > genmake_tnc.log
971        cat genmake_tnc.F >> genmake_tnc.log
972        echo "<<<  genmake_tnc.F  ===" >> genmake_tnc.log
973        RET_CPP=f
974        COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
975        echo "$COMM" >> genmake_tnc.log
976        eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
977        if test "x$RET_CPP" = xf ; then
978            echo "  WARNING: CPP failed to pre-process the netcdf test." \
979                >> genmake_tnc.log
980            echo "    Please check that \$INCLUDES is properly set." \
981                >> genmake_tnc.log
982        fi
983        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
984        echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
985        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
986            &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
987        RET_COMPILE=$?
988        cat genmake_tnc.log >> $LOGFILE
989    
990        #EH3  Remove test program execution for machines that either disallow
991        #EH3  execution or cannot support it (eg. cross-compilers)
992        #EH3
993        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
994        #EH3 RETVAL=$?
995        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
996    
997        if test "x$RET_COMPILE" = x0 ; then
998            HAVE_NETCDF=t
999            echo "check_netcdf: successful" >> $LOGFILE
1000        else
1001            # try again with "-lnetcdf" added to the libs
1002            echo "==> try again with added '-lnetcdf'" > genmake_tnc.log
1003            echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1004            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1005            echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1006            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1007                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1008                &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
1009            RET_COMPILE=$?
1010            echo >> $LOGFILE
1011            cat genmake_tnc.log >> $LOGFILE
1012            if test "x$RET_COMPILE" = x0 ; then
1013                LIBS="$LIBS -lnetcdf"
1014                HAVE_NETCDF=t
1015                echo "check_netcdf: successful" >> $LOGFILE
1016            else
1017            # try again with "-lnetcdff" added to the libs
1018                echo "==> try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1019                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1020                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1021                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1022                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1023                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1024                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1025                RET_COMPILE=$?
1026                echo >> $LOGFILE
1027                cat genmake_tnc.log >> $LOGFILE
1028                if test "x$RET_COMPILE" = x0 ; then
1029                    LIBS="$LIBS -lnetcdff -lnetcdf"
1030                    HAVE_NETCDF=t
1031                    echo "check_netcdf: successful" >> $LOGFILE
1032                fi
1033            fi
1034        fi
1035        rm -f genmake_tnc*
1036    }
1037    
1038    
1039    
1040    ###############################################################################
1041    #   Sequential part of script starts here
1042    ###############################################################################
1043    
1044  #  Set defaults here  #  Set defaults here
1045  COMMANDL="$0 $@"  COMMANDL="$0 $@"
1046    
# Line 444  PLATFORM= Line 1048  PLATFORM=
1048  LN=  LN=
1049  S64=  S64=
1050  KPP=  KPP=
1051  FC=  #FC=
1052    #CC=gcc
1053    #CPP=
1054  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
1055  DEFINES=  DEFINES=
1056  PACKAGES=  PACKAGES=
1057  ENABLE=  ENABLE=
1058  DISABLE=  DISABLE=
1059  MAKEFILE=  # MAKEFILE=
1060  MAKEDEPEND=  # MAKEDEPEND=
1061  PDEPEND=  PKG_DEPEND=
1062  DUMPSTATE=t  PKG_GROUPS=
1063  PDEFAULT=  DUMPSTATE=f
1064  OPTFILE=  OPTFILE=
1065  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
1066  FFLAGS=  FFLAGS=
1067  FOPTIM=  FOPTIM=
1068    FEXTRAFLAGS=
1069    USE_EXTENDED_SRC=
1070    EXTENDED_SRC_FLAG=
1071  CFLAGS=  CFLAGS=
1072  KFLAGS1=  KFLAGS1=
1073  KFLAGS2=  KFLAGS2=
1074    #LDADD=
1075  LIBS=  LIBS=
1076  KPPFILES=  KPPFILES=
1077  NOOPTFILES=  NOOPTFILES=
1078  NOOPTFLAGS=  NOOPTFLAGS=
1079    MPI=
1080    MPIPATH=
1081    OMP=
1082    OMPFLAG=
1083    USE_R4=
1084    TS=
1085    PAPIS=
1086    PCLS=
1087    FOOLAD=
1088    PAPI=
1089    PCL=
1090    HPMT=
1091    GSL=
1092    DEVEL=
1093    HAVE_TEST_L=
1094    
1095  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
1096  HAVE_SYSTEM=  HAVE_SYSTEM=
1097  HAVE_FDATE=  HAVE_FDATE=
1098  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1099  HAVE_CLOC=  HAVE_CLOC=
1100    # HAVE_SETRLSTK=
1101    HAVE_STAT=
1102    HAVE_NETCDF=
1103    HAVE_ETIME=
1104    IGNORE_TIME=
1105    
1106  MODS=  MODS=
1107  TOOLSDIR=  TOOLSDIR=
# Line 480  SOURCEDIRS= Line 1109  SOURCEDIRS=
1109  INCLUDEDIRS=  INCLUDEDIRS=
1110  STANDARDDIRS="USE_THE_DEFAULT"  STANDARDDIRS="USE_THE_DEFAULT"
1111    
1112    G2ARGS=
1113    BASH=
1114  PWD=`pwd`  PWD=`pwd`
1115  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1116  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1117  THISHOSTNAME=`hostname`  EMBED_SRC=
1118    THISHOST=`hostname`
1119  THISCWD=`pwd`  THISCWD=`pwd`
1120  THISDATE=`date`  THISDATE=`date`
1121    THISUSER=`echo $USER`
1122    THISVER=
1123  MACHINE=`uname -a`  MACHINE=`uname -a`
1124  EXECUTABLE=  EXECUTABLE=
1125  EXEHOOK=  EXEHOOK=
# Line 495  IEEE= Line 1129  IEEE=
1129  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
1130      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
1131  fi  fi
1132    FS=
1133    FS90=
1134    
1135  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
1136  AD_OPTFILE=  AD_OPTFILE=
# Line 509  FTL_TAF_FLAGS= Line 1145  FTL_TAF_FLAGS=
1145  SVD_TAMC_FLAGS=  SVD_TAMC_FLAGS=
1146  TAMC_EXTRA=  TAMC_EXTRA=
1147    
   
1148  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1149  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS MAKEFILE MAKEDEPEND PLATFORM ROOTDIR MODS DISABLE ENABLE"
1150  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"
1151    
1152  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1153  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
1154  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"
1155  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD THISHOST THISUSER THISDATE THISVER MACHINE"
1156  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1157  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME"
1158    
1159  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1160  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 533  cat <<EOF Line 1168  cat <<EOF
1168    
1169  GENMAKE :  GENMAKE :
1170    
1171  A program for GENerating MAKEfiles for the MITgcm project.  For a  A program for GENerating MAKEfiles for the MITgcm project.
1172  quick list of options, use "genmake -h" or for more detail see:     For a quick list of options, use "genmake2 -h"
1173    or for more detail see the Developer's HOWTO manual at:
1174    http://mitgcm.org/devel_HOWTO/     http://mitgcm.org/public/docs.html
1175    
1176  EOF  EOF
1177    
1178    LOGFILE="genmake.log"
1179    #- clean-up previous genmake logfiles:
1180    rm -f genmake_state genmake_*optfile $LOGFILE
1181    
1182  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1183  gm_local="genmake_local"  gm_local="genmake_local"
1184  for i in . $MODS ; do  printf "  getting local config information:  "
1185      if test -r $i/$gm_local ; then  if test -f $gm_local ; then
         . $i/$gm_local  
         break  
     fi  
 done  
 echo -n "  getting local config information:  "  
 if test -e $gm_local ; then  
1186      echo "using $gm_local"      echo "using $gm_local"
1187      . $gm_local      . $gm_local
1188      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 558  else Line 1191  else
1191      echo "none found"      echo "none found"
1192  fi  fi
1193    
1194  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
 #OPTIONS=  
 #n=0  
 #for i ; do  
 #   echo "$i  $n"  
 #   setvar="OPTIONS[$n]='$i'"  
 #   #  echo "  $setvar"  
 #   eval "$setvar"  
 #   n=$(( $n + 1 ))  
 #done  
1195  #parse_options  #parse_options
1196  ac_prev=  ac_prev=
1197  for ac_option ; do  for ac_option in "$@" ; do
1198    
1199        G2ARGS="$G2ARGS \"$ac_option\""
1200    
1201      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
1202      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 578  for ac_option ; do Line 1204  for ac_option ; do
1204          ac_prev=          ac_prev=
1205          continue          continue
1206      fi      fi
1207        
1208      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1209        
1210      case $ac_option in      case $ac_option in
1211                    
1212          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 599  for ac_option ; do Line 1225  for ac_option ; do
1225              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
1226                    
1227          -pdepend | --pdepend)          -pdepend | --pdepend)
1228              ac_prev=PDEPEND ;;              ac_prev=PKG_DEPEND ;;
1229          -pdepend=* | --pdepend=*)          -pdepend=* | --pdepend=*)
1230              PDEPEND=$ac_optarg ;;              PKG_DEPEND=$ac_optarg ;;
1231                    
1232          -pdefault | --pdefault)          -pgroups | --pgroups)
1233              ac_prev=PDEFAULT ;;              ac_prev=PKG_GROUPS ;;
1234          -pdefault=* | --pdefault=*)          -pgroups=* | --pgroups=*)
1235              PDEFAULT=$ac_optarg ;;              PKG_GROUPS=$ac_optarg ;;
1236                    
1237          -make | --make | -m | --m)          -make | --make | -m | --m)
1238              ac_prev=MAKE ;;              ac_prev=MAKE ;;
1239          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
1240              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
1241                    
1242            -bash | --bash)
1243                ac_prev=BASH ;;
1244            -bash=* | --bash=*)
1245                BASH=$ac_optarg ;;
1246            
1247            -makedepend | --makedepend | -md | --md)
1248                ac_prev=MAKEDEPEND ;;
1249            -makedepend=* | --makedepend=* | -md=* | --md=*)
1250                MAKEDEPEND=$ac_optarg ;;
1251            
1252          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
1253              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
1254          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 654  for ac_option ; do Line 1290  for ac_option ; do
1290  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1291  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1292  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1293                        
1294            -cc | --cc)
1295                ac_prev=CC ;;
1296            -cc=* | --cc=*)
1297                CC=$ac_optarg ;;
1298            
1299          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1300              ac_prev=FC ;;              ac_prev=FC ;;
1301          -fc=* | --fc=*)          -fc=* | --fc=*)
1302              FC=$ac_optarg ;;              FC=$ac_optarg ;;
1303                    
1304            -fs | --fs)
1305                ac_prev=FS ;;
1306            -fs=* | --fs=*)
1307                FS=$ac_optarg ;;
1308            
1309            -fs90 | --fs90)
1310                ac_prev=FS90 ;;
1311            -fs90=* | --fs90=*)
1312                FS90=$ac_optarg ;;
1313            
1314          -ieee | --ieee)          -ieee | --ieee)
1315              IEEE=true ;;              IEEE=true ;;
1316          -noieee | --noieee)          -noieee | --noieee)
1317              IEEE= ;;              IEEE= ;;
1318    
1319            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1320                USE_R4=true ;;
1321    
1322            -ts | --ts)
1323                TS=true ;;
1324            -papis | --papis)
1325                PAPIS=true ;;
1326            -pcls | --pcls)
1327                PCLS=true ;;
1328            -foolad | --foolad)
1329                FOOLAD=true ;;
1330            -papi | --papi)
1331                PAPI=true ;;
1332            -pcl | --pcl)
1333                PCL=true ;;
1334            -hpmt | --hpmt)
1335                HPMT=true ;;
1336    
1337            -gsl | --gsl)
1338                GSL=true ;;
1339    
1340            -devel | --devel)
1341                DEVEL=true ;;
1342    
1343            -mpi | --mpi)
1344                MPI=true ;;
1345            -mpi=* | --mpi=*)
1346                MPIPATH=$ac_optarg
1347                MPI=true ;;
1348                    
1349  #       -jam | --jam)          -omp | --omp)
1350  #           JAM=1 ;;              OMP=true ;;
1351  #       -nojam | --nojam)          -omp=* | --omp=*)
1352  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1353                OMP=true ;;
1354                    
1355          -ds | --ds)          -ds | --ds)
1356              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 682  for ac_option ; do Line 1364  for ac_option ; do
1364              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1365          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1366              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1367            
1368            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1369                IGNORE_TIME="-DIGNORE_TIME" ;;
1370    
1371            -es | --es | -embed-source | --embed-source)
1372                EMBED_SRC=t ;;
1373    
1374          -*)          -*)
1375              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 694  for ac_option ; do Line 1382  for ac_option ; do
1382              ;;              ;;
1383                    
1384      esac      esac
1385        
1386  done  done
1387    
1388    
1389  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1390      echo      echo
1391      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1392      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1393      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1394      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1395        echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1396        echo "WARNING: ignore \"./.genmakerc\" and continue."
1397      echo      echo
     echo "  for directions on how to setup and use the new \"genmake2\" input"  
     echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."  
     echo  
1398  fi  fi
1399    
1400    #  Find the MITgcm ${ROOTDIR}
1401  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1402      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1403        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
1404          ROOTDIR=".."          ROOTDIR=".."
1405      else      else
1406          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1407              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
1408                  ROOTDIR=$d                  ROOTDIR=$d
1409                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1410                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1411                  break                  break
1412              fi              fi
# Line 734  if test ! -d ${ROOTDIR} ; then Line 1424  if test ! -d ${ROOTDIR} ; then
1424      exit 1      exit 1
1425  fi  fi
1426    
1427    #  Find the MITgcm ${THISVER}
1428    version_file="${ROOTDIR}/doc/tag-index"
1429    if test -f $version_file ; then
1430        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1431    #-  remove ./BUILD_INFO.h file if older than version_file
1432        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1433            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1434            rm -f ./BUILD_INFO.h
1435        fi
1436    fi
1437    
1438    if test "x$MAKEFILE" = x ; then
1439        MAKEFILE="Makefile"
1440    fi
1441    
1442  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1443  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1444      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 750  if test "x$OPTFILE" != xNONE ; then Line 1455  if test "x$OPTFILE" != xNONE ; then
1455          . "$OPTFILE"          . "$OPTFILE"
1456          RETVAL=$?          RETVAL=$?
1457          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1458              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1459              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1460              exit 1              exit 1
1461          fi          fi
1462          if test "x$DUMPSTATE" != xf ; then          if test "x$DUMPSTATE" = xt ; then
1463              cp -f $OPTFILE "genmake_optfile"              cp -f $OPTFILE "genmake_optfile"
1464          fi          fi
1465      else      else
# Line 777  if test "x${AD_OPTFILE}" != xNONE ; then Line 1482  if test "x${AD_OPTFILE}" != xNONE ; then
1482          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1483          RETVAL=$?          RETVAL=$?
1484          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1485              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1486              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1487              exit 1              exit 1
1488          fi          fi
1489          if test "x$DUMPSTATE" != xf ; then          if test "x$DUMPSTATE" = xt ; then
1490              cp -f $AD_OPTFILE "genmake_ad_optfile"              cp -f $AD_OPTFILE "genmake_ad_optfile"
1491          fi          fi
1492      else      else
# Line 790  if test "x${AD_OPTFILE}" != xNONE ; then Line 1495  if test "x${AD_OPTFILE}" != xNONE ; then
1495      fi      fi
1496  fi  fi
1497    
1498  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1499    #  Set default values if not set by the optfile
1500    #
1501    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1502  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1503    if test ! "x$BASH" = x ; then
1504        # add a trailing space so that it works within the Makefile syntax (see below)
1505        BASH="$BASH "
1506    fi
1507  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1508      cat <<EOF 1>&2      cat <<EOF 1>&2
1509    
# Line 802  Error: no Fortran compiler: please speci Line 1514  Error: no Fortran compiler: please speci
1514  EOF  EOF
1515      exit 1      exit 1
1516  fi  fi
1517    if test "x$CC" = x ; then
1518        CC=cc
1519    #     cat <<EOF 1>&2
1520    # Error: no C compiler: please specify using one of the following:
1521    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1522    #   2) the "-cc=XXX" command-line option
1523    #   3) the "./genmake_local" file
1524    # EOF
1525    #     exit 1
1526    fi
1527  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1528      LINK=$FC      LINK=$FC
1529  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1530  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1531      MAKE="make"      MAKE="make"
1532  fi  fi
1533    if test "x$CPP" = x ; then
1534        CPP=cpp
1535    fi
1536    #EH3 === UGLY ===
1537    #  The following is an ugly little hack to check for $CPP in /lib/ and
1538    #  it should eventually be replaced with a more general function that
1539    #  searches a combo of the user's path and a list of "usual suspects"
1540    #  to find the correct location for binaries such as $CPP.
1541    for i in " " "/lib/" ; do
1542        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1543    done
1544    #EH3 === UGLY ===
1545  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1546  RETVAL=$?  RETVAL=$?
1547  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 827  EOF Line 1558  EOF
1558  else  else
1559      rm -f test_cpp      rm -f test_cpp
1560  fi  fi
1561  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1562  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1563      LN="ln -s"      LN="ln -s"
1564  fi  fi
# Line 845  Error: The command "ln -s" failed -- ple Line 1574  Error: The command "ln -s" failed -- ple
1574  EOF  EOF
1575      exit 1      exit 1
1576  fi  fi
1577    test -L genmake_tlink > /dev/null 2>&1
1578    RETVAL=$?
1579    if test "x$RETVAL" = x0 ; then
1580        HAVE_TEST_L=t
1581    fi
1582  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1583    
1584    #  Check for broken *.F/*.f handling and fix if possible
1585    check_for_broken_Ff
1586    
1587    if test ! "x$MPI" = x ; then
1588          echo "  Turning on MPI cpp macros"
1589          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1590    fi
1591    if test ! "x$OMP" = x ; then
1592          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1593          FFLAGS="$FFLAGS $OMPFLAG"
1594          F90FLAGS="$F90FLAGS $OMPFLAG"
1595          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1596    fi
1597    
1598    if test ! "x$USE_R4" = x ; then
1599          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1600          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1601    fi
1602    
1603    if test ! "x$TS" = x ; then
1604          echo "  Turning on timing per timestep"
1605          if test ! "x$FOOLAD" = x ; then
1606                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1607          else
1608                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1609          fi
1610          PACKAGES="$PACKAGES showflops"
1611    fi
1612    if test ! "x$PAPIS" = x ; then
1613          echo "  Turning on PAPI flop summary per timestep"
1614          echo "  Please make sure PAPIINC, PAPILIB are defined"
1615          if test ! "x$FOOLAD" = x ; then
1616                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1617          else
1618                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1619          fi
1620          INCLUDES="$INCLUDES $PAPIINC"
1621          LIBS="$LIBS $PAPILIB"
1622          PACKAGES="$PACKAGES showflops"
1623    fi
1624    if test ! "x$PCLS" = x ; then
1625          echo "  Turning on PCL counter summary per timestep"
1626          echo "  Please make sure PCLINC, PCLLIB are defined"
1627          if test ! "x$FOOLAD" = x ; then
1628                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1629          else
1630                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1631          fi
1632          INCLUDES="$INCLUDES $PCLINC"
1633          LIBS="$LIBS $PCLLIB"
1634          PACKAGES="$PACKAGES showflops"
1635    fi
1636    if test ! "x$PAPI" = x ; then
1637          if test ! "x$PAPIS" = x ; then
1638              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1639              echo "  Sticking with PAPI flop summary per timestep!"
1640          else
1641              echo "  Turning on performance analysis with PAPI"
1642              echo "  Please make sure PAPIINC, PAPILIB are defined"
1643              DEFINES="$DEFINES -DUSE_PAPI"
1644              INCLUDES="$INCLUDES $PAPIINC"
1645              LIBS="$LIBS $PAPILIB"
1646          fi
1647    fi
1648    if test ! "x$PCL" = x ; then
1649          if test ! "x$PCLS" = x ; then
1650              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1651              echo "  Sticking with PCL flop summary per timestep!"
1652          else
1653              echo "  Turning on performance analysis with PCL"
1654              echo "  Please make sure PCLINC, PCLLIB are defined"
1655              DEFINES="$DEFINES -DUSE_PCL"
1656              INCLUDES="$INCLUDES $PCLINC"
1657              LIBS="$LIBS $PCLLIB"
1658          fi
1659    fi
1660    if test ! "x$HPMT" = x ; then
1661          if test ! "x$PAPI" = x ; then
1662              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1663              echo "  Sticking with PAPI!"
1664          else if test ! "x$PCL" = x ; then
1665              echo "  PCL and the HPM Toolkit cannot co-exist!"
1666              echo "  Sticking with PCL!"
1667          else
1668              echo "  Turning on performance analysis with the HPM Toolkit"
1669              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1670              DEFINES="$DEFINES -DUSE_LIBHPM"
1671              INCLUDES="$INCLUDES $HPMTINC"
1672              LIBS="$LIBS $HPMTLIB"
1673          fi
1674          fi
1675    fi
1676    if test ! "x$GSL" = x ; then
1677          echo "  Turning on use of GSL to control floating point calculations"
1678          echo "  Please make sure GSLINC, GSLLIB are defined"
1679          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1680          INCLUDES="$INCLUDES $GSLINC"
1681          LIBS="$LIBS $GSLLIB"
1682    fi
1683    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1684    if test ! "x$USE_EXTENDED_SRC" = x ; then
1685          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1686          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1687    fi
1688    
1689  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1690  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1691  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1692        program hello        program hello
1693        call system('echo hi')        call system('echo hi')
1694        end        end
1695  EOF  EOF
1696  $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
1697  RETVAL=$?  RETVAL=$?
1698  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1699      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 867  else Line 1705  else
1705  fi  fi
1706  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1707    
1708  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1709  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1710        program hello        program hello
1711        CHARACTER(128) string        CHARACTER*(128) string
1712        string = ' '        string = ' '
1713        call fdate( string )        call fdate( string )
1714        print *, string        print *, string
1715        end        end
1716  EOF  EOF
1717  $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
1718  RETVAL=$?  RETVAL=$?
1719  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1720      HAVE_FDATE=t      HAVE_FDATE=t
# Line 888  else Line 1726  else
1726  fi  fi
1727  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1728    
1729  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1730    cat > genmake_tcomp.$FS <<EOF
1731          program hello
1732          REAL*4 ACTUAL, TARRAY(2)
1733          EXTERNAL ETIME
1734          REAL*4 ETIME
1735          actual = etime( tarray )
1736          print *, tarray
1737          end
1738    EOF
1739    $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1740    RETVAL=$?
1741    if test "x$RETVAL" = x0 ; then
1742        HAVE_ETIME=t
1743        DEFINES="$DEFINES -DHAVE_ETIME"
1744        echo "yes"
1745    else
1746        HAVE_ETIME=
1747        echo "no"
1748    fi
1749    rm -f genmake_tcomp*
1750    
1751    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1752  check_HAVE_CLOC  check_HAVE_CLOC
1753  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1754      echo "yes"      echo "yes"
1755  else  else
1756      echo "no"      echo "no"
1757        if test "x$EMBED_SRC" = xt ; then
1758            echo "    WARNING: you requested file embedding but it has"
1759            echo "      been disabled since C code cannot be called"
1760            EMBED_SRC=
1761        fi
1762    fi
1763    rm -f genmake_t*
1764    
1765    printf "  Can we unlimit the stack size using $FC...  "
1766    check_HAVE_SETRLSTK
1767    if test "x$HAVE_SETRLSTK" = xt ; then
1768        echo "yes"
1769    else
1770        echo "no"
1771    fi
1772    rm -f genmake_t*
1773    
1774    printf "  Can we register a signal handler using $FC...  "
1775    check_HAVE_SIGREG
1776    if test "x$HAVE_SIGREG" = xt ; then
1777        echo "yes"
1778    else
1779        echo "no"
1780    fi
1781    rm -f genmake_t*
1782    
1783    printf "  Can we use stat() through C calls...  "
1784    check_HAVE_STAT
1785    if test "x$HAVE_STAT" != x ; then
1786        echo "yes"
1787    else
1788        echo "no"
1789  fi  fi
1790  rm -f genmake_t*  rm -f genmake_t*
1791    
1792    printf "  Can we create NetCDF-enabled binaries...  "
1793    check_netcdf_libs
1794    if test "x$HAVE_NETCDF" != x ; then
1795        echo "yes"
1796    else
1797        echo "no"
1798    fi
1799    DEFINES="$DEFINES $IGNORE_TIME"
1800    
1801    if test "x$EMBED_SRC" = xt ; then
1802        build_embed_encode
1803    fi
1804    if test "x$EMBED_SRC" = xt ; then
1805        ENABLE="$ENABLE embed_files"
1806    fi
1807    
1808    
1809  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1810  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1811  for d in $MODS ; do  for d in $MODS ; do
1812      if test ! -d $d ; then      if test ! -d $d ; then
1813          echo          echo
1814          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1815          exit 1          exit 1
1816      else      else
1817          echo -n " $d"          printf "$d "
1818          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1819          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1820      fi      fi
1821  done  done
1822  echo  echo
1823    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1824  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1825      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1826  fi  fi
1827    
1828  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1829      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1830        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1831          EXEDIR=../exe          EXEDIR=../exe
1832      else      else
1833          EXEDIR=.          EXEDIR=.
# Line 936  if test "x${TOOLSDIR}" = x ; then Line 1842  if test "x${TOOLSDIR}" = x ; then
1842      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1843  fi  fi
1844  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1845      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1846      exit 1      exit 1
1847  fi  fi
1848  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1849      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1850        RETVAL=$?
1851        if test "x${RETVAL}" = x0 ; then
1852            S64='$(TOOLSDIR)/set64bitConst.sh'
1853        else
1854            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1855            RETVAL=$?
1856            if test "x${RETVAL}" = x0 ; then
1857                S64='$(TOOLSDIR)/set64bitConst.csh'
1858            else
1859                cat <<EOF
1860    
1861    ERROR: neither of the two default scripts:
1862    
1863        ${TOOLSDIR}/set64bitConst.sh
1864        ${TOOLSDIR}/set64bitConst.csh
1865    
1866      are working so please check paths or specify (with \$S64) a
1867      working version of this script.
1868    
1869    EOF
1870                exit 1
1871            fi
1872        fi
1873  fi  fi
1874  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1875    
1876  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1877    
1878    #  Set Standard Code Directories:
1879    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1880        STANDARDDIRS="eesupp model"
1881    fi
1882    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1883    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1884    ckM=$?
1885    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1886    ckE=$?
1887    if test $ckM = 0 -a $ckE = 1 ; then
1888        STANDARDDIRS="$STANDARDDIRS eesupp"
1889    fi
1890    
1891  #  We have a special set of source files in eesupp/src which are  #  We have a special set of source files in eesupp/src which are
1892  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1893  #  they appear as regular source code  #  they appear as regular source code
1894  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1895      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1896      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
1897        ) > make_eesupp.errors 2>&1
1898      RETVAL=$?      RETVAL=$?
1899      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1900          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1901      else      else
1902          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1903          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1904          exit 1          exit 1
1905      fi      fi
1906  fi  fi
1907    
1908  #same for exch2  #same for pkg/exch2 and pkg/regrid
1909  if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then  for pdir in exch2 regrid ; do
1910      echo "  Making source files in exch2 from  templates"      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1911      ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1          echo "  Making source files in pkg/${pdir} from templates"
1912      RETVAL=$?          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
1913      if test "x${RETVAL}" = x0 ; then          ) > make_${pdir}.errors 2>&1
1914          rm -f make_exch2.errors          RETVAL=$?
1915      else          if test "x${RETVAL}" = x0 ; then
1916          echo "Error: problem encountered while building source files in exch2:"              rm -f make_${pdir}.errors
1917          cat make_exch2.errors          else
1918          exit 1              echo "Error: problem encountered while building source files in pkg/${pdir}:"
1919                cat make_${pdir}.errors 1>&2
1920                exit 1
1921            fi
1922      fi      fi
1923  fi  done
1924    
1925  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1926  if  test "x${PDEPEND}" = x ; then  if  test "x${PKG_DEPEND}" = x ; then
1927      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
1928      if test -r $tmp ; then      if test -r $tmp ; then PKG_DEPEND=$tmp ; fi
1929          PDEPEND=$tmp  fi
1930      else  if  test "x${PKG_DEPEND}" = x ; then
1931          echo "Warning:  No package dependency information was specified."          echo "Warning:  No package dependency information was specified."
1932          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."
     fi  
1933  else  else
1934      if test ! -r ${PDEPEND} ; then      if test ! -r ${PKG_DEPEND} ; then
1935          echo "Error:  can't read package dependency info from PDEPEND=\"$PDEPEND\""          echo "Error:  can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\""
1936          exit 1          exit 1
1937      fi      fi
1938        echo "  getting package dependency info from  $PKG_DEPEND"
1939    #  Strip the comments and then convert the dependency file into arrays: PNAME, DNAME
1940        get_pdepend_list $PKG_DEPEND
1941  fi  fi
1942  echo "  getting package dependency info from  $PDEPEND"  
1943  #  Strip the comments and then convert the dependency file into  # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided
1944  #  two arrays: PNAME, DNAME  #  to define the "default_pkg_list" and package groups (for convenience, one
1945  cat $PDEPEND | sed -e 's/#.*$//g' \  #  can specify a group of packages using names like "ocean" and "atmosphere").
1946      | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \  if test "x${PKG_GROUPS}" = x ; then
1947      > ./.pd_tmp      tmp=$ROOTDIR"/pkg/pkg_groups"
1948  RETVAL=$?      if test -r $tmp ; then PKG_GROUPS=$tmp ; fi
1949  if test ! "x${RETVAL}" = x0 ; then  fi
1950      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  if test "x${PKG_GROUPS}" = x ; then
1951      exit 1          echo "Warning:  No package groups information was specified."
1952            echo "  Please check that ROOTDIR/pkg/pkg_groups exists."
1953    else
1954        if test ! -r ${PKG_GROUPS} ; then
1955            echo "Error:  can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\""
1956            exit 1
1957        fi
1958        echo "  getting package groups info from      $PKG_GROUPS"
1959  fi  fi
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1960    
1961  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for packages to compile.
1962  #  file should eventually be added so that, for convenience, one can  echo "  checking list of packages to compile:"
1963  #  specify groups of packages using names like "ocean" and "atmosphere".  PKG_LIST=
1964  echo "  checking default package list:  "  if test "x${PKG_LIST}" = x ; then
 if test "x${PDEFAULT}" = x ; then  
1965      for i in "." $MODS ; do      for i in "." $MODS ; do
1966          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
1967                  PDEFAULT=$i"/packages.conf"                  PKG_LIST=$i"/packages.conf"
1968                  break                  break
1969          fi          fi
1970      done      done
1971  fi  fi
1972  if test "x${PDEFAULT}" = x ; then  if test "x${PKG_LIST}" = x ; then
1973      PDEFAULT="$ROOTDIR/pkg/pkg_default"      pkg_list='default_pkg_list'
1974  fi      if test "x${PKG_GROUPS}" = x ; then
1975  if test "x${PDEFAULT}" = xNONE ; then          echo "Error:  need package groups info to expand pkg_list=\"$pkg_list\""
1976      echo "    default packages file disabled"          exit 1
1977        fi
1978  else  else
1979      if test ! -r $PDEFAULT ; then      if test ! -r $PKG_LIST ; then
1980          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Error:  can't read package list from PKG_LIST=\"$PKG_LIST\""
1981            exit 1
1982      else      else
1983          echo "    using PDEFAULT=\"$PDEFAULT\""          echo "    using PKG_LIST=\"$PKG_LIST\""
1984          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1985          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          pkg_list=`cat $PKG_LIST | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1986          RETVAL=$?          RETVAL=$?
1987          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1988              echo -n "Error: can't parse default package list "              printf "Error: can't parse package list "
1989              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PKG_LIST=\"$PKG_LIST\""
1990              exit 1              exit 1
1991          fi          fi
         for i in $def ; do  
             PACKAGES="$PACKAGES $i"  
         done  
         echo "    before group expansion packages are: $PACKAGES"  
         expand_pkg_groups  
         echo "    after group expansion packages are:  $PACKAGES"  
1992      fi      fi
1993  fi  fi
1994    for i in $pkg_list ; do
1995        PACKAGES="$PACKAGES $i"
1996    done
1997    echo     "    before group expansion packages are:$PACKAGES"
1998    if test "x${PKG_GROUPS}" != x ; then
1999        RET=1
2000        while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
2001        echo "    after group expansion packages are: $PACKAGES"
2002    fi
2003    
2004  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
2005    echo "" > ./.tmp_pack
2006    for i in $PACKAGES ; do
2007        echo $i >> ./.tmp_pack
2008    done
2009    for i in `grep  "-" ./.tmp_pack` ; do
2010        j=`echo $i | sed 's/[-]//'`
2011        DISABLE="$DISABLE $j"
2012    done
2013  pack=  pack=
2014  for p in $PACKAGES ; do  for p in $PACKAGES ; do
2015      addit="t"      addit="t"
# Line 1061  PACKAGES="$pack" Line 2026  PACKAGES="$pack"
2026  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
2027  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
2028  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
2029    # Test if each explicitly referenced package exists
2030  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2031      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
2032          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""      if test ! -d "$ROOTDIR/pkg/$j" ; then
2033          exit 1          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
2034            exit 1
2035      fi      fi
2036      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
2037  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
2038  PACKAGES=  PACKAGES=
2039  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
2040      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2041  done  done
2042  echo "    packages are:  $PACKAGES"  rm -f ./.tmp_pack
2043    echo "    packages are: $PACKAGES"
2044    
2045  echo "  applying package dependency rules"  #  Check for package MNC: if NetCDF is available, then build the MNC
2046  ck=  #  template files ; otherwise, delete mnc from the list of packages.
2047  while test "x$ck" != xtt ; do  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2048    mnc_in=$?
2049    if test "x$HAVE_NETCDF" != xt ; then
2050        if test "x$mnc_in" = x0 ; then
2051            cat <<EOF
2052    *********************************************************************
2053    WARNING: the "mnc" package was enabled but tests failed to compile
2054      NetCDF applications.  Please check that:
2055    
2056      1) NetCDF is correctly installed for this compiler and
2057      2) the LIBS variable (within the "optfile") specifies the correct
2058           NetCDF library to link against.
2059    
2060      Due to this failure, the "mnc" package is now DISABLED.
2061    *********************************************************************
2062    EOF
2063            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2064            DISABLE="$DISABLE mnc"
2065        else
2066        #  this prevent to add mnc (due to pdepend rules) if not available
2067            DISABLE="$DISABLE mnc"
2068        fi
2069    else
2070        # we have NetCDF, we try to build MNC template files
2071        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2072        RETVAL=$?
2073        if test "x${RETVAL}" = x0 ; then
2074            rm -f make_mnc.errors
2075        else
2076            echo "Error: problem encountered while building source files in pkg/mnc:"
2077            cat make_mnc.errors 1>&2
2078            if test "x$mnc_in" = x0 ; then
2079                exit 1
2080            else
2081                DISABLE="$DISABLE mnc"
2082            fi
2083        fi
2084    fi
2085    
2086    #  Check for package PROFILES: if NetCDF is not available,
2087    #  then delete profiles from the list of available packages.
2088    if test "x$HAVE_NETCDF" != xt ; then
2089        echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2090        RETVAL=$?
2091        if test "x$RETVAL" = x0 ; then
2092            cat <<EOF
2093    *********************************************************************
2094    WARNING: the "profiles" package was enabled but tests failed to
2095      compile NetCDF applications.  Please check that:
2096    
2097      1) NetCDF is correctly installed for this compiler and
2098      2) the LIBS variable (within the "optfile") specifies the correct
2099           NetCDF library to link against.
2100    
2101      Due to this failure, the "profiles" package is now DISABLED.
2102    *********************************************************************
2103    EOF
2104            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2105            DISABLE="$DISABLE profiles"
2106        else
2107        #  this prevent to add profiles (due to pdepend rules) if not available
2108            DISABLE="$DISABLE profiles"
2109        fi
2110    fi
2111    
2112    if  test "x${PKG_DEPEND}" != x ; then
2113      echo "  applying package dependency rules"
2114      ck=
2115      while test "x$ck" != xtt ; do
2116      i=0      i=0
2117      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2118      rtot=$nname      rtot=$nname
2119      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2120    
2121          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2122          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1094  while test "x$ck" != xtt ; do Line 2128  while test "x$ck" != xtt ; do
2128                  pin="t"                  pin="t"
2129              fi              fi
2130          done          done
2131            #  or in the current $STANDARDDIRS list?
2132            for p in $STANDARDDIRS ; do
2133                if test "x$p" = "x$pname" ; then pin="t" ; fi
2134            done
2135    
2136          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2137          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 1116  while test "x$ck" != xtt ; do Line 2154  while test "x$ck" != xtt ; do
2154    
2155          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2156          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
2157                #echo "   " $pname ": need to add :" $dname
2158              in_dis="f"              in_dis="f"
2159              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2160                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 1136  while test "x$ck" != xtt ; do Line 2175  while test "x$ck" != xtt ; do
2175          #  Do we need to get rid of $dname according to the dependency rules?          #  Do we need to get rid of $dname according to the dependency rules?
2176          if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then          if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
2177              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2178              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2179              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2180              exit 1              exit 1
2181          fi          fi
2182          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
2183            #i=$(( $i + 1 ))
2184      done      done
2185      ck=$ck"t"      ck=$ck"t"
2186  done    done
2187  echo "    packages are:  $PACKAGES"    echo "    packages are: $PACKAGES"
2188    fi
2189  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2190      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2191      if test -d $adr ; then      if test -d $adr ; then
# Line 1159  for i in $PACKAGES ; do Line 2200  for i in $PACKAGES ; do
2200      fi      fi
2201  done  done
2202    
   
2203  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2204  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2205  #  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
2206  #  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
2207  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2208  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2209  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 1179  for n in $names ; do Line 2219  for n in $names ; do
2219              fi              fi
2220          done          done
2221          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2222              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2223              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2224          fi          fi
2225      fi      fi
2226  done  done
2227  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2228  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2229      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2230      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2231  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2232    
2233  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2234      case $i in      case $i in
2235          aim_v23)          aim_v23)
2236              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2237              echo "Warning: ALLOW_AIM is set to enable aim_v23."              echo "Warning: ALLOW_AIM is set to enable aim_v23."
# Line 1201  for i in $PACKAGES ; do Line 2241  for i in $PACKAGES ; do
2241    
2242  done  done
2243    
2244  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2245  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2246  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2247      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2248          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 1260  fi Line 2297  fi
2297    
2298  #  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
2299  #  compiler.  #  compiler.
2300  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2301      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2302  fi  fi
2303  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2304    touch adSrcFiles.tmp
2305  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2306      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2307      for j in $list_files ; do      for j in $list_files ; do
2308          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2309      done      done
2310  done  done
2311    if test ! "x"$FS = "x.f" ; then
2312        cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2313        mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2314    fi
2315    
2316  echo  echo
2317  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
2318  echo "  setting INCLUDES"  echo "  setting INCLUDES"
2319  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
2320      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
2321          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
2322      fi      fi
2323  done  done
2324    
2325    if test ! "x$DIVA" = x ; then
2326        echo "  Creating the pseudo-MPI include directory"
2327        INCLUDES="-I./mpi_headers $INCLUDES"
2328        rm -rf ./mpi_headers
2329        mkdir -p ./mpi_headers
2330    
2331        if test "x$MPIINCLUDEDIR" = x ; then
2332            if test "x$MPIHOME" = x ; then
2333                MPIHOME='/usr'
2334            fi
2335            MPIINCLUDEDIR='$MPIHOME/include'
2336        fi
2337    
2338        if test -r $MPIINCLUDEDIR/mpif.h ; then
2339            for i in $MPI_HEADER_FILES; do
2340                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2341            done
2342    
2343            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2344        else
2345            echo " We cannot create a copy of mpif.h!"
2346    #       exit -1
2347        fi
2348    fi
2349    
2350  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2351  rm -rf .links.tmp  rm -rf .links.tmp
2352  mkdir .links.tmp  mkdir .links.tmp
2353    touch .links.tmp/foo
2354    if test ! -r ".links.tmp/foo" ; then
2355        echo
2356        echo "ERROR : something is wrong with your directory permissions or"
2357        echo "   your user file-creation mask (\"umask\") since creating a"
2358        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2359        echo "   not working.  Please try setting your umask to something"
2360        echo "   sane such as:"
2361        echo
2362        echo "      umask 0002"
2363        echo
2364        echo "   and please verify that you have the proper permissions for"
2365        echo "   creating sub-directories and then reading files created"
2366        echo "   within them."
2367        echo
2368        exit 1
2369    fi
2370    rm -f .links.tmp/foo
2371    
2372    if test "x$OPENAD" != x ; then
2373        OAD_DONT_COMPILE="/dev/null"
2374        OAD_DONT_TRANSFORM="/dev/null"
2375        OAD_KEEP_ORIGINAL="/dev/null"
2376        OAD_CB2M_FILES="/dev/null"
2377        echo "  looking for dontCompile file:  "
2378        for i in "." $MODS ; do
2379            if test -r $i"/dontCompile" ; then
2380                OAD_DONT_COMPILE=$i"/dontCompile"
2381                echo "     found $OAD_DONT_COMPILE"
2382                break
2383            fi
2384        done
2385        echo "  looking for dontTransform file:  "
2386        for i in "." $MODS ; do
2387            if test -r $i"/dontTransform" ; then
2388                OAD_DONT_TRANSFORM=$i"/dontTransform"
2389                echo "     found $OAD_DONT_TRANSFORM"
2390                break
2391            fi
2392        done
2393        echo "  looking for keepOriginal file:  "
2394        for i in "." $MODS ; do
2395            if test -r $i"/keepOriginal" ; then
2396                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2397                echo "     found $OAD_KEEP_ORIGINAL"
2398                break
2399            fi
2400        done
2401        echo "  looking for cb2mFiles:  "
2402        for i in "." $MODS ; do
2403            if test -r $i"/cb2mFiles" ; then
2404                OAD_CB2M_FILES=$i"/cb2mFiles"
2405                echo "     found $OAD_CB2M_FILES"
2406                break
2407            fi
2408        done
2409        echo "   OpenAD exceptions:  "
2410    fi
2411    
2412  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2413  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2414  echo -n 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2415  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2416  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2417  echo -n 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2418  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2419    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2420  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2421  for d in $alldirs ; do  for d in $alldirs ; do
2422      deplist=      deplist=
2423      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2424      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2425        if test "x$OPENAD" != x ; then
2426            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2427        fi
2428      for sf in $sfiles ; do      for sf in $sfiles ; do
2429          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2430              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2431                    ignore_f=f
2432                  case $d/$sf in                  case $d/$sf in
2433                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2434                            ignore_f=t
2435                          ;;                          ;;
2436                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2437                            ignore_f=t
2438                          ;;                          ;;
2439                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2440                            ignore_f=t
2441                            ;;
2442                      ./BUILD_INFO.h)
2443                            ignore_f=t
2444                            ;;
2445                      ./EMBEDDED_FILES.h)
2446                            ignore_f=t
2447                          ;;                          ;;
2448                    *)                    *)
2449                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
2450                          deplist="$deplist $sf"                          #  ignore all soft-links
2451                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2452                                ignore_f=t
2453                            else
2454                                touch .links.tmp/$sf
2455                                deplist="$deplist $sf"
2456                            fi
2457                          ;;                          ;;
2458                  esac                  esac
2459                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  if test "x$ignore_f" = xf ; then
2460                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2461                      F)                      case $extn in
2462                          echo    " \\"  >> srclist.inc                        F)
2463                          echo -n " $sf" >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2464                            printf " $sf" >> F77srclist.tmp
2465                            if test "x$OPENAD" != x ; then
2466                                basename=${sf%%.F}
2467                                isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2468                                if test -z "$isAD" ; then
2469                                    toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2470                                    if test -z "$toBeIgnored" ; then
2471                                        echo    " \\"  >> nonADF77srclist.tmp
2472                                        printf " $sf" >> nonADF77srclist.tmp
2473                                    else
2474                                        echo "    not to be compiled   :  $sf"
2475                                    fi
2476                                else # file is initially listed as an AD file we want to exclude it
2477                                     # or we want to retain the untransformed version
2478                                    notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2479                                    untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2480                                    if test -n "$notToBeTransformed"; then
2481                                        echo "    not to be transformed:  $sf"
2482                                    fi
2483                                    if test -n "$untransformedVersionToBeKept" ; then
2484                                        echo "    original to be kept  :  $sf"
2485                                    fi
2486                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2487                                        echo    " \\"  >> nonADF77srclist.tmp
2488                                        printf " $sf" >> nonADF77srclist.tmp
2489                                    fi
2490                                fi
2491                            fi
2492                          ;;                          ;;
2493                      F90)                      F90)
2494                          echo    " \\"  >> f90srclist.inc                          echo    " \\"  >> F90srclist.tmp
2495                          echo -n " $sf" >> f90srclist.inc                          printf " $sf" >> F90srclist.tmp
2496                          ;;                          ;;
2497                      c)                      c)
2498                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.tmp
2499                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.tmp
2500                          ;;                          ;;
2501                      h)                      h)
2502                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hsrclist.tmp
2503                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hsrclist.tmp
2504                          ;;                          ;;
2505                      flow)                      flow)
2506                          echo    " \\"  >> ad_flow_files.inc                          echo    " \\"  >> ad_flow_files.tmp
2507                          echo -n " $sf" >> ad_flow_files.inc                          printf " $sf" >> ad_flow_files.tmp
2508                          ;;                          ;;
2509                  esac                     esac
2510                    fi
2511              fi              fi
2512          fi          fi
2513      done      done
2514      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2515          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2516            echo "" >> srclinks.tmp
2517          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2518          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2519          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2520    # This may happen when make thinks that a header file has to be "remade"
2521    # because a module it depends on has changed.  In this case we do nothing.
2522            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2523          fi
2524      fi      fi
2525  done  done
2526  rm -rf .links.tmp  rm -rf .links.tmp
2527  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2528  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2529  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2530  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2531  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2532    echo "" >> ad_flow_files.tmp
2533    
2534    CMDLINE=$0
2535    for xx in "$@" ; do nw=`echo $xx | wc -w`
2536        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2537                            else CMDLINE="$CMDLINE '$xx'" ; fi
2538    done
2539    
2540  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
2541      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2542  fi  fi
2543  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2544  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 1361  echo "#    $MACHINE" >> $MAKEFILE Line 2546  echo "#    $MACHINE" >> $MAKEFILE
2546  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2547  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2548  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2549  echo "#    $0 $@" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2550  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2551  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2552    
2553  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2554  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1372  EXE_SVD=$EXECUTABLE"_svd" Line 2557  EXE_SVD=$EXECUTABLE"_svd"
2557  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2558  #  #
2559  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2560  #  #
2561  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2562  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2563  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 1392  cat >>$MAKEFILE <<EOF Line 2577  cat >>$MAKEFILE <<EOF
2577  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2578    
2579  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2580  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2581  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2582  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2583  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 1409  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2594  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2594  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2595    
2596  # These files are created by Makefile  # These files are created by Makefile
2597  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
   
2598  EOF  EOF
2599    
2600  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2601        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2602    else
2603        echo "EMBEDDED_FILES = " >>$MAKEFILE
2604    fi
2605    
2606  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2607  # Unix ln (link)  # Unix ln (link)
2608  LN = ${LN}  LN = ${LN}
# Line 1428  KPP = ${KPP} Line 2616  KPP = ${KPP}
2616  FC = ${FC}  FC = ${FC}
2617  # Fortran compiler  # Fortran compiler
2618  F90C = ${F90C}  F90C = ${F90C}
2619    # C compiler
2620    CC = ${CC}
2621  # Link editor  # Link editor
2622  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
2623    
2624  # Defines for CPP  # Defines for CPP
2625  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1439  INCLUDES = ${INCLUDES} Line 2629  INCLUDES = ${INCLUDES}
2629  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2630  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2631  # Optim./debug for FC  # Optim./debug for FC
2632  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2633  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2634  # Optim./debug for FC  # Optim./debug for FC
2635  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2636  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2637    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2638  # Flags for CC  # Flags for CC
2639  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2640  # Files that should not be optimized  # Files that should not be optimized
2641  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2642  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2643  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2644  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2645  # Name of the Mekfile  # Name of the Mekfile
2646  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2647    
2648  EOF  EOF
2649    
2650  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2651  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2652  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2653  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2654  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2655  echo               >> $MAKEFILE  cat ad_flow_files.tmp   >> $MAKEFILE
 echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  
 echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  
 echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  
2656    
2657  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
 rm -f ad_flow_files.inc  
2658    
2659  cat >>$MAKEFILE <<EOF  echo >> $MAKEFILE
2660    
2661  .SUFFIXES:  # add definitions for preprocessed sources
2662  .SUFFIXES: .o .f .p .F .c .F90 .f90  # and note that not all systems allow case sensitive extensions
2663    # hence the $FS and $FS90 here.
2664    # for fixed format f90 files we use ff90 or FF90 resp
2665    # but these are not expected to be the original source files
2666    
2667    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2668    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2669    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2670    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2671    echo >> $MAKEFILE
2672    echo '.SUFFIXES:' >> $MAKEFILE
2673    echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE
2674    
2675    cat >>$MAKEFILE <<EOF
2676    
2677  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2678  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2679          @echo Creating \$@ ...          @echo Creating \$@ ...
2680          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2681  depend:  depend:
2682          @make links          @make links
2683          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2684          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2685            -rm -f makedepend.out
2686    
2687    lib: libmitgcmuv.a
2688    
2689    libmitgcmuv.a: \$(OBJFILES)
2690            ar rcv libmitgcmuv.a \$(OBJFILES)
2691            ar d   libmitgcmuv.a main.o
2692    
2693  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2694    
2695  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2696    
2697  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2698          @printf 'running ... '          @printf 'running ... '
2699          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2700    
2701    # remove most of the files that "make" generates
2702  clean:  clean:
2703          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2704            -rm -rf *.o
2705            -rm -rf *.$FS *.flowdir
2706            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2707    
2708    # remove most of the files that "make" and "make depend" generate
2709  Clean:  Clean:
2710          @make clean          @make clean
2711          @make cleanlinks          @make cleanlinks
2712          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES) f90mkdepend.log
2713          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2714            -rm -f genmake_warnings genmake_errors make.log
2715    
2716    # remove also the executable, files that "genmake2" generates (except Makefile)
2717    #         and output from a run (plus log files from testreport)
2718  CLEAN:  CLEAN:
2719          @make Clean          @make Clean
2720            -rm -f \$(EXECUTABLE) \$(EXE_AD) *.bak $MAKEFILE.old
2721            -rm -f $LOGFILE genmake_state genmake_*optfile genmake.tr_log make.tr_log
2722          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2723          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2724          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2725          -rm -f \$(EXECUTABLE) output.txt          -rm -f *.txt STD* *diagnostics.log datetime
2726            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2727            -rm -rf mnc_test_*
2728    
 #eh3 Makefile: makefile  
2729  makefile:  makefile:
2730          $THIS_SCRIPT $@          $THIS_SCRIPT $G2ARGS
2731  cleanlinks:  cleanlinks:
2732          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2733    
2734  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2735  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2736          @echo Creating \$@ ...          @echo Creating \$@ ...
2737          @\$(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) > \$@
2738  AD_CONFIG.h:  AD_CONFIG.h:
2739          @echo Creating \$@ ...          @echo Creating \$@ ...
2740          @\$(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 > \$@
2741  FC_NAMEMANGLE.h:  FC_NAMEMANGLE.h:
2742          @echo Creating \$@ ...          @echo Creating \$@ ...
2743          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2744    
2745  # The normal chain of rules is (  .F - .f - .o  )  BUILD_INFO.h:
2746  .F.f:          @echo Creating \$@ ...
2747    EOF
2748    
2749    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2750    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2751    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2752    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2753    
2754    if test "x$EMBED_SRC" = xt ; then
2755        cat >>$MAKEFILE <<EOF
2756    
2757    decode_files.o : EMBEDDED_FILES.h
2758    
2759    ##  \$(F77_PP_SRC_FILES)
2760    all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2761            @echo Creating \$@ ...
2762            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2763            -rm -f all_fF.tar.gz
2764            -gzip all_fF.tar
2765    
2766    EMBEDDED_FILES.h : all_fF.tar.gz
2767            @echo Creating \$@ ...
2768            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2769    
2770    EOF
2771    fi
2772    
2773    cat >>$MAKEFILE <<EOF
2774    
2775    # The normal chain of rules is (  .F - .$FS - .o  )
2776    
2777    ## This nullifies any default implicit rules concerning these two file types:
2778    ## %.o : %.F
2779    
2780    .F.$FS:
2781          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2782  .f.o:  .$FS.o:
2783          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2784  .F90.f90:  .F90.$FS90:
2785          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2786  .f90.o:  .FF90.f$FS90:
2787            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2788    .$FS90.o:
2789          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2790    .f$FS90.o:
2791            cp \$< \$(basename  \$<).f90
2792            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2793  .c.o:  .c.o:
2794          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2795    .flow.flowdir:
2796            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2797    
2798  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2799  .F.p:  .F.p:
2800          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2801  .p.f:  .p.$FS:
2802          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2803    
2804    EOF
2805    
2806  #=========================================  #=========================================
2807  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2808    #===  for TAMC/TAF  ======================
2809    
2810    if test "x$OPENAD" = x ; then
2811    
2812    cat >>$MAKEFILE <<EOF
2813    
2814  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2815  TAF            = ${TAF}  TAF            = ${TAF}
# Line 1556  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2824  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2824  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2825  for i in $ad_vars ; do  for i in $ad_vars ; do
2826      name=$i      name=$i
2827      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2828      eval $t1      eval $t1
2829      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2830      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2831  done  done
2832    
2833  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2834  echo >> $MAKEFILE  echo >> $MAKEFILE
2835  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2836  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2837  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2838      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2839      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2840  done  done
2841  echo >> $MAKEFILE  echo >> $MAKEFILE
2842  rm -f ad_files  rm -f adSrcFiles.tmp
2843    
2844  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2845    
2846  # ... AD ...  # ... AD ...
2847  adall: ad_taf  adall: \$(EXE_AD)
2848  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2849  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2850    
2851  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2852          @\$(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
2853          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
2854          -rm -f ad_config.template          -rm -f ad_config.template
2855          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2856          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2857          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2858    
2859  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2860          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2861          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          ls -l ad_input_code_ad.$FS
2862            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2863    
2864  adtafonly:  adtafonly:
2865          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2866          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          ls -l ad_input_code_ad.$FS
2867            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2868  ad_taf: ad_taf_output.o \$(OBJFILES)  
2869          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2870            \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2871  ad_tamc_output.f: ad_input_code.f  
2872          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2873          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2874            cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2875    
2876  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2877          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2878    
2879    adonlyfwd:
2880            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2881    
2882    adtrick:
2883            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2884    
2885  # ... FTL ...  # ... FTL ...
2886  ftlall: ftl_taf  ftlall: ftl_taf
2887  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2888  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2889    
2890  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2891          @\$(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
2892          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
2893          -rm -f ftl_config.template          -rm -f ftl_config.template
2894          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2895          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2896          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2897    
2898  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2899          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2900          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          ls -l ftl_input_code_ftl.$FS
2901            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2902    
2903  ftltafonly:  ftltafonly:
2904          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2905          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          ls -l ftl_input_code_ftl.$FS
2906            cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2907    
2908  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2909          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2910    
2911  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2912          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2913          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
2914    
2915  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2916          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2917    
2918    
2919  # ... SVD ...  # ... SVD ...
2920  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2921  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2922            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2923    svdall: svd_touch svd_taf
2924    
2925  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2926          \$(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)
2927    
2928            @echo "--->>> Only COMPILE svd code! <<<---"
2929            @echo "--->>> Assumes you previously <<<---"
2930            @echo "--->>> did make svdtaf        <<<---"
2931    
2932    svd_touch:
2933            @echo "--->>> Only COMPILE svd code! <<<---"
2934            @echo "--->>> Assumes you previously <<<---"
2935            @echo "--->>> did make svdtaf        <<<---"
2936            touch ad_taf_output.$FS ftl_taf_output.$FS
2937            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2938            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2939            @$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
2940            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2941            -rm -f ftl_config.template
2942    
2943  #=========================================  EOF
2944    
2945    fi
2946    
2947    #===  for OpenAD  ========================
2948    
2949    if test "x$OPENAD" != x ; then
2950    
2951    # ============ begin OpenAD specific section ==============
2952    
2953    cat >>$MAKEFILE <<EOF
2954    
2955    # all the source files linked from the various locations:
2956    ALL_LINKED_FILES= \
2957    \$(F77_SRC_FILES) \
2958    \$(C_SRC_FILES) \
2959    \$(H_SRC_FILES) \
2960    \$(F90_SRC_FILES) \
2961    \$(SPECIAL_FILES)
2962    
2963    ifndef OPENADROOT
2964      \$(error "Error:  environment variable OPENADROOT not defined!")
2965    endif
2966    
2967    ifndef XAIFSCHEMAROOT
2968      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2969    endif
2970    
2971    ifndef XAIFBOOSTERROOT
2972      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2973    endif
2974    
2975    EOF
2976    
2977    echo "  Add the source list for common block to module conversion "
2978    echo >> $MAKEFILE
2979    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2980    for i in `cat ${OAD_CB2M_FILES}` ; do
2981      echo    " \\" >> $MAKEFILE
2982      printf " $i" >> $MAKEFILE
2983    done
2984    echo >> $MAKEFILE
2985    
2986    echo "  Add the source list for AD code generation"
2987    echo >> $MAKEFILE
2988    printf "AD_FILES = " >> $MAKEFILE
2989    for i in `cat ${OAD_CB2M_FILES}` ; do
2990      echo    " \\" >> $MAKEFILE
2991      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2992    done
2993    AD_FILES=`cat adSrcFiles.tmp`
2994    for i in $AD_FILES ; do
2995      basename=${i%%.f}
2996      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2997      if test -z "$toBeIgnored" ; then
2998        echo    " \\" >> $MAKEFILE
2999        printf " $i" >> $MAKEFILE
3000      fi
3001    done
3002    echo >> $MAKEFILE
3003    rm -f adSrcFiles.tmp
3004    
3005    cat >>$MAKEFILE <<EOF
3006    
3007    adAll: \$(EXE_AD)
3008    .PHONY: adAll
3009    
3010    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
3011    
3012    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
3013    
3014    .PHONY: adDepend
3015    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
3016            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
3017            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
3018            -rm -f makedepend.out
3019    
3020    OPENAD_SUPPORT_F90_SRC_FILES = \
3021    w2f__types.F90 \
3022    OAD_active.F90 \
3023    OAD_cp.F90 \
3024    OAD_rev.F90 \
3025    OAD_tape.F90
3026    
3027    OPENAD_SUPPORT_C_SRC_FILES = \
3028    iaddr.c \
3029    timeRatio.c
3030    
3031    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3032            cat \$^ > \$@
3033    
3034    f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3035            cat \$^ > \$@
3036    
3037    f95_test.out: f95_test_mods.f90 f95_test.f90
3038            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3039            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3040    
3041    # the file included below is created by the
3042    # postProcessor and its inclusion sets the
3043    # variable POSTPROCESSEDFILES
3044    # used below. Because the file is made during
3045    # make it won't be read until the second (recursive)
3046    # invocation in the rule below
3047    -include postProcess.make
3048    
3049    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3050    
3051    AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)
3052    
3053    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3054    ifeq (\$(MAKELEVEL),0)
3055            \$(MAKE) adAll
3056    else
3057            touch \$@
3058    endif
3059    
3060    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3061    ifeq (\$(MAKELEVEL),1)
3062            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3063    else
3064            touch \$@
3065    endif
3066    
3067    # makefile debug rule
3068    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3069    .PHONY: openad
3070    
3071    # create the module files
3072    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3073            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3074    
3075    # create the header files
3076    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3077            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3078    
3079    # change everybody else to use the new module files:
3080    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3081            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3082    
3083    # makefile debug rule
3084    small_f: \$(CB2M_F90_PP_SRC_FILES)
3085    .PHONY: small_f
3086    
3087    ad_output.txt: \$(EXE_AD)
3088            @printf 'linking data files ... '
3089            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3090            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3091            @printf 'running ... '
3092            @./\$(EXE_AD) > \$@
3093    
3094    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3095    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3096            cat \$^ > \$@
3097    
3098    # strip all comments and blanks to reduce
3099    # the file size in order to reduce perl's memory requirements
3100    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3101            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3102    
3103    # mfef90 preprocessing
3104    # expand statement functions
3105    # expose mfef90 specific substring handling
3106    # add the w2f__types module
3107    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3108            ./mfef90 -r8 -z -F -N132 \$<
3109            mv \$<.B \$(basename \$<).B
3110            ./whirl2f -openad \$(basename \$<).B
3111            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3112    
3113    # canonicalizer
3114    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3115            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3116    
3117    # F -> WHIRL
3118    # note that the canonicalized version cuts off at col 72
3119    # doing this also for string constants which is ok as long
3120    # as we are in fixed mode and cut of exactly there.
3121    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3122    # characters respectively.
3123    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3124            ./mfef90 -r8 -z -F \$<
3125            mv \$<.B \$@
3126    
3127    # WHIRL -> XAIF
3128    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3129            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3130    
3131    # XAIF -> XAIF'
3132    ad_input_code_sf.w2f.pre.xb.xaif : ad_input_code_sf.w2f.pre.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd oadDriver
3133            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3134    
3135    # XAIF' -> WHIRL'
3136    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3137            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3138    
3139    # WHIRL' -> F'
3140    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3141            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3142    
3143    # insert template directives
3144    ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90 ../OAD_support/insertTemplateDir.bash
3145            ../OAD_support/insertTemplateDir.bash \$< \$@
3146    
3147    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3148    # postprocess F'
3149    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3150            # the target is a placeholder to signal execution of the rule
3151            touch \$@
3152            # this step also creates the file postProcess.make but we cannot
3153            # name it as the target or else make will try to remake it for
3154            # the include directive above for any rule, e.g. make clean
3155            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3156    
3157    # setup some links
3158    %.xsd:
3159            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3160    
3161    mfef90:
3162            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3163    
3164    # link the support files:
3165    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3166            \$(LN) ../OAD_support/\$@ .
3167    
3168    whirl2xaif xaif2whirl:
3169            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3170    
3171    preProcess.py postProcess.py:
3172            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3173    
3174    whirl2f whirl2f_be:
3175            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3176    
3177    oadDriver:
3178            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3179    
3180    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3181    
3182    # ============ end OpenAD specific section ==============
3183    
3184  EOF  EOF
3185    
3186    fi
3187    
3188    #=========================================
3189    
3190  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3191      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3192  fi  fi
# Line 1662  for i in $KPPFILES ; do Line 3198  for i in $KPPFILES ; do
3198      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
3199          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
3200      fi      fi
3201      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
3202  done  done
3203    
3204  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1672  for i in $NOOPTFILES ; do Line 3208  for i in $NOOPTFILES ; do
3208      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
3209          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
3210      fi      fi
3211      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
3212      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
3213  done  done
3214    
# Line 1686  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3222  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3222  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3223    
3224  # Create special header files  # Create special header files
3225  $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"
3226  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3227      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3228  else  else
3229      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
3230      RETVAL=$?      RETVAL=$?
3231      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
3232          rm -f $PACKAGES_DOT_H".tmp"          rm -f $PACKAGES_DOT_H".tmp"
# Line 1700  else Line 3236  else
3236      fi      fi
3237  fi  fi
3238  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
3239      $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
3240  fi  fi
3241    
3242    
3243  #  Write the "state" for future records  #  Write the "state" for future records
3244  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" = xt ; then
3245      echo -n "" > genmake_state      printf "" > genmake_state
3246      for i in $gm_state ; do      for i in $gm_state ; do
3247          t1="t2=\$$i"          t1="t2=\$$i"
3248          eval $t1          eval $t1

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.211

  ViewVC Help
Powered by ViewVC 1.1.22