/[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.138 by edhill, Sun Dec 4 13:57:08 2005 UTC revision 1.207 by jmc, Wed May 26 00:08:18 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 39  test_for_string_in_file() { Line 47  test_for_string_in_file() {
47      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
48          printf "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 102  EOF Line 110  EOF
110              check_for_broken_Ff              check_for_broken_Ff
111          else          else
112              cat <<EOF 2>&1              cat <<EOF 2>&1
113  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
114    (fails the "cp" test) and this program cannot find a suitable    (fails the "cp" test) and this program cannot find a suitable
115    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
116    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
117    
118  EOF  EOF
# Line 138  EOF Line 146  EOF
146              check_for_broken_Ff              check_for_broken_Ff
147          else          else
148              cat <<EOF 2>&1              cat <<EOF 2>&1
149  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
150    (fails the "make/ln" test) and this program cannot find a suitable    (fails the "make/ln" test) and this program cannot find a suitable
151    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
152    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
153    
154  EOF  EOF
# Line 186  look_for_makedepend()  { Line 194  look_for_makedepend()  {
194          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
195  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
196  #  #
197  #   Some "makedepend" implementations will die if they cannot  #   Some "makedepend" implementations will die if they cannot
198  #   find a Makefile -- so this file is here to gives them an  #   find a Makefile -- so this file is here to gives them an
199  #   empty one to find and parse.  #   empty one to find and parse.
200  EOF  EOF
201          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
# Line 204  EOF Line 212  EOF
212              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
213          else          else
214              echo "    a system-default makedepend was not found."              echo "    a system-default makedepend was not found."
215                
216              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
217              build_cyrus_makedepend              build_cyrus_makedepend
218              RETVAL=$?              RETVAL=$?
# Line 248  build_cyrus_makedepend()  { Line 256  build_cyrus_makedepend()  {
256      fi      fi
257  }  }
258    
259    
260    build_embed_encode()
261    {
262        printf "  building the embed-encode utility...  "
263        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
264            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
265                echo
266                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
267                echo
268                EMBED_SRC=f
269                return 1
270            fi
271            clist="cc gcc c89 $CC"
272            for ic in $clist ; do
273                comm="$ic -o encode_files encode_files.c"
274                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
275                RETVAL=$?
276                if test "x$RETVAL" = x0 ; then
277                    echo "OK"
278                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
279                    return 0
280                fi
281            done
282            echo
283            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
284            echo "      so it has been disabled"
285            echo
286            EMBED_SRC=f
287            return 1
288        fi
289        echo "OK"
290        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
291    }
292    
293    
294  # Guess possible config options for this host  # Guess possible config options for this host
295  find_possible_configs()  {  find_possible_configs()  {
296    
# Line 261  find_possible_configs()  { Line 304  find_possible_configs()  {
304      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
305      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
306      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
307        
308      echo "test" > test      echo "test" > test
309      ln -s ./test link      ln -s ./test link
310      RETVAL=$?      RETVAL=$?
# Line 282  find_possible_configs()  { Line 325  find_possible_configs()  {
325    
326      #================================================================      #================================================================
327      #  look for possible C compilers      #  look for possible C compilers
328      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
329      p_CC=      p_CC=
330      for c in $tmp ; do      for c in $tmp ; do
331          rm -f ./genmake_hello.c  ./genmake_hello          rm -f ./genmake_hello.c  ./genmake_hello
# Line 321  EOF Line 364  EOF
364    
365      #================================================================      #================================================================
366      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
367      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 399  Error: No options file was found in:  $R Line 442  Error: No options file was found in:  $R
442  EOF  EOF
443          exit 1          exit 1
444      fi      fi
445        
446  #     # look for possible MPI libraries  #     # look for possible MPI libraries
447  #     mpi_libs=  #     mpi_libs=
448  #     mpi_fort=`which mpif77 2>/dev/null`  #     mpi_fort=`which mpif77 2>/dev/null`
# Line 418  EOF Line 461  EOF
461  #       if test "x${RETVAL}" = x0 ; then  #       if test "x${RETVAL}" = x0 ; then
462  #           a=`cat out`  #           a=`cat out`
463  #           for i in $a ; do  #           for i in $a ; do
464  #               case $i in  #               case $i in
465  #                   -*)  #                   -*)
466  #                       mpi_libs="$mpi_libs $i" ;;  #                       mpi_libs="$mpi_libs $i" ;;
467  #               esac  #               esac
# Line 437  get_pdepend_list()  { Line 480  get_pdepend_list()  {
480      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
481      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
482      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
483          | $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}' \
484          > ./.pd_tmp          > ./.pd_tmp
485        RETVAL=$?
486        if test ! "x${RETVAL}" = x0 ; then
487          echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$1\""
488          exit 1
489        fi
490      . ./.pd_tmp      . ./.pd_tmp
491      rm -f ./.pd_tmp      rm -f ./.pd_tmp
492    
     printf "PNAME = "${}  
493  }  }
494    
495    
# Line 465  Usage: "$0" [OPTIONS] Line 512  Usage: "$0" [OPTIONS]
512        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
513        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
514            Use "NAME" as the optfile.  By default, an attempt will be            Use "NAME" as the optfile.  By default, an attempt will be
515            made to find an appropriate "standard" optfile in the            made to find an appropriate "standard" optfile in the
516            tools/build_options/ directory.            tools/build_options/ directory.
517    
518      -pdepend NAME | --pdepend NAME      -pdepend NAME | --pdepend NAME
# Line 476  Usage: "$0" [OPTIONS] Line 523  Usage: "$0" [OPTIONS]
523        -pdefault=NAME | --pdefault=NAME        -pdefault=NAME | --pdefault=NAME
524            Get the default package list from "NAME".            Get the default package list from "NAME".
525    
526        -bash NAME
527              Explicitly specify the Bourne or BASH shell to use
528    
529      -make NAME | -m NAME      -make NAME | -m NAME
530        --make=NAME | -m=NAME        --make=NAME | -m=NAME
531            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
532            many platforms, "gmake" is the preferred choice.            many platforms, "gmake" is the preferred choice.
533    
534      -makefile NAME | -mf NAME      -makefile NAME | -mf NAME
# Line 492  Usage: "$0" [OPTIONS] Line 542  Usage: "$0" [OPTIONS]
542      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
543        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
544            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
545            By default, genamke will try to find the location by            By default, genamke will try to find the location by
546            looking in parent directories (up to the 5th parent).            looking in parent directories (up to the 5th parent).
547    
548      -mods NAME | --mods NAME | -mo NAME | --mo NAME      -mods NAME | --mods NAME | -mo NAME | --mo NAME
549        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
550            Here, "NAME" specifies a list of directories that are            Here, "NAME" specifies a list of directories that are
551            used for additional source code.  Files found in the            used for additional source code.  Files found in the
552            "mods list" are given preference over files of the same            "mods list" are given preference over files of the same
553            name found elsewhere.            name found elsewhere.
554    
555      -disable NAME | --disable NAME      -disable NAME | --disable NAME
556        -disable=NAME | --disable=NAME        -disable=NAME | --disable=NAME
557            Here "NAME" specifies a list of packages that we don't            Here "NAME" specifies a list of packages that we don't
558            want to use.  If this violates package dependencies,            want to use.  If this violates package dependencies,
559            genamke will exit with an error message.            genamke will exit with an error message.
560    
561      -enable NAME | --enable NAME      -enable NAME | --enable NAME
562        -enable=NAME | --enable=NAME        -enable=NAME | --enable=NAME
563            Here "NAME" specifies a list of packages that we wish            Here "NAME" specifies a list of packages that we wish
564            to specifically enable.  If this violates package            to specifically enable.  If this violates package
565            dependencies, genamke will exit with an error message.            dependencies, genamke will exit with an error message.
566    
567      -standarddirs NAME | --standarddirs NAME      -standarddirs NAME | --standarddirs NAME
568        -standarddirs=NAME | --standarddirs=NAME        -standarddirs=NAME | --standarddirs=NAME
569            Here, "NAME" specifies a list of directories to be            Here, "NAME" specifies a list of directories to be
570            used as the "standard" code.            used as the "standard" code.
571    
572      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
573        -fc=NAME | --fc=NAME        -fc=NAME | --fc=NAME
574            Use "NAME" as the fortran compiler.  By default, genmake            Use "NAME" as the fortran compiler.  By default, genmake
575            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
576            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
577    
578      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
579            Use "NAME" as the C compiler.  By default, genmake            Use "NAME" as the C compiler.  By default, genmake
580            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
581            "usual suspects" such as gcc, c89, cc, etc.            "usual suspects" such as gcc, c89, cc, etc.
582    
583      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
584            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
585            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
586            is being used.            is being used.
587    
588        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
589              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
590              *only* works if CPP_EEOPTIONS.h allows this.
591    
592        -ignoretime | -ignore_time | --ignoretime | --ignore_time
593              Ignore all the "wall clock" routines entirely.  This will
594              not in any way hurt the model results -- it simply means
595              that the code that checks how long the model spends in
596              various routines will give junk values.
597    
598      -ts | --ts      -ts | --ts
599            Produce timing information per timestep            Produce timing information per timestep
600        -papis | --papis
601              Produce summary MFlop/s (and IPC) with PAPI per timestep
602        -pcls | --pcls
603              Produce summary MFlop/s etc. with PCL per timestep
604        -foolad | --foolad
605              Fool the AD code generator
606        -papi | --papi
607              Performance analysis with PAPI
608        -pcl | --pcl
609              Performance analysis with PCL
610        -hpmt | --hpmt
611              Performance analysis with the HPM Toolkit
612    
613        -gsl | --gsl
614              Use GSL to control floating point rounding and precision
615        -devel | --devel
616              Add additional warning and debugging flags for development
617    
618      -mpi | --mpi      -mpi | --mpi
619            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 545  Usage: "$0" [OPTIONS] Line 622  Usage: "$0" [OPTIONS]
622            set to PATH. i.e. Include files from \$PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
623            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
624    
625      -bash NAME      -omp | --omp
626            Explicitly specify the Bourne or BASH shell to use            Activate OpenMP code + use Compiler option OMPFLAG
627        -omp=OMPFLAG | --omp=OMPFLAG
628              Activate OpenMP code + use Compiler option OMPFLAG
629    
630        -es | --es | -embed-source | --embed-source
631              Embed a tarball containing the full source code
632              (including the Makefile, etc.) used to build the
633              executable [off by default]
634    
635    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
636    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
637    
638      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
# Line 559  Usage: "$0" [OPTIONS] Line 643  Usage: "$0" [OPTIONS]
643    
644    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
645    
646      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
647    
648  EOF  EOF
649    
# Line 575  get_fortran_c_namemangling()  { Line 659  get_fortran_c_namemangling()  {
659      fi      fi
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
# Line 675  void FC_NAMEMANGLE(cloc) ( double *curti Line 759  void FC_NAMEMANGLE(cloc) ( double *curti
759   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
760  }  }
761  EOF  EOF
762      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
763        echo $COMM >> genmake_warnings
764        $COMM >> genmake_warnings 2>&1
765      RET_C=$?      RET_C=$?
766      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
767        program hello        program hello
# Line 685  EOF Line 771  EOF
771        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
772        end        end
773  EOF  EOF
774      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
775        echo $COMM >> genmake_warnings
776        $COMM >> genmake_warnings 2>&1
777      RET_F=$?      RET_F=$?
778      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
779      RETVAL=$?      RETVAL=$?
# Line 698  EOF Line 786  EOF
786    
787    
788  check_HAVE_SIGREG()  {  check_HAVE_SIGREG()  {
789        if test ! "x$HAVE_SIGREG" = x ; then
790            return
791        fi
792      get_fortran_c_namemangling      get_fortran_c_namemangling
793      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
794  $FC_NAMEMANGLE  $FC_NAMEMANGLE
# Line 729  void FC_NAMEMANGLE(sigreg) (int * aip) Line 820  void FC_NAMEMANGLE(sigreg) (int * aip)
820      return;      return;
821  }  }
822  EOF  EOF
823      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
824        echo $COMM >> genmake_warnings
825        $COMM >> genmake_warnings 2>&1
826      RET_C=$?      RET_C=$?
827      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
828        program hello        program hello
# Line 755  EOF Line 848  EOF
848    
849    
850  check_HAVE_SETRLSTK()  {  check_HAVE_SETRLSTK()  {
851        if test "x$HAVE_SETRLSTK" = xt ; then
852            DEFINES="$DEFINES -DHAVE_SETRLSTK"
853            return
854        fi  
855        if test ! "x$HAVE_SETRLSTK" = x ; then
856            return
857        fi
858      get_fortran_c_namemangling      get_fortran_c_namemangling
859      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
860  $FC_NAMEMANGLE  $FC_NAMEMANGLE
# Line 770  void FC_NAMEMANGLE(setrlstk) () Line 870  void FC_NAMEMANGLE(setrlstk) ()
870      return;      return;
871  }  }
872  EOF  EOF
873      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
874        echo $COMM >> genmake_warnings
875        $COMM >> genmake_warnings 2>&1
876      RET_C=$?      RET_C=$?
877      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
878        program hello        program hello
# Line 814  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 916  void FC_NAMEMANGLE(tfsize) ( int *nbyte
916          *nbyte = -1;          *nbyte = -1;
917  }  }
918  EOF  EOF
919      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
920        echo $COMM >> genmake_warnings
921        $COMM >> genmake_tc.log 2>&1
922      RET_C=$?      RET_C=$?
923      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
924        program hello        program hello
# Line 865  EOF Line 969  EOF
969      cat genmake_tnc.F >> genmake_tnc.log      cat genmake_tnc.F >> genmake_tnc.log
970      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
971      RET_CPP=f      RET_CPP=f
972      COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F"      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
973      echo "$COMM" >> genmake_tnc.log      echo "$COMM" >> genmake_tnc.log
974      $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t      eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
975      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
976          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
977              >> genmake_tnc.log              >> genmake_tnc.log
# Line 875  EOF Line 979  EOF
979              >> genmake_tnc.log              >> genmake_tnc.log
980      fi      fi
981      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
982      echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log      echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
983      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
984          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
985      RET_COMPILE=$?      RET_COMPILE=$?
986      cat genmake_tnc.log >> genmake_warnings      cat genmake_tnc.log >> genmake_warnings
987    
# Line 893  EOF Line 997  EOF
997      else      else
998          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
999          echo "try again with added '-lnetcdf'" > genmake_tnc.log          echo "try again with added '-lnetcdf'" > genmake_tnc.log
1000          echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1001          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1002          echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log          echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1003          $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \          cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1004              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1005              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1              &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
1006          RET_COMPILE=$?          RET_COMPILE=$?
1007          cat genmake_tnc.log >> genmake_warnings          cat genmake_tnc.log >> genmake_warnings
1008          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
1009              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
1010              HAVE_NETCDF=t              HAVE_NETCDF=t
1011            else
1012            # try again with "-lnetcdff" added to the libs
1013                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1014                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1015                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1016                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1017                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1018                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1019                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1020                RET_COMPILE=$?
1021                cat genmake_tnc.log >> genmake_warnings
1022                if test "x$RET_COMPILE" = x0 ; then
1023                    LIBS="$LIBS -lnetcdff -lnetcdf"
1024                    HAVE_NETCDF=t
1025                fi
1026          fi          fi
1027      fi      fi
1028      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 939  OPTFILE= Line 1058  OPTFILE=
1058  INCLUDES="-I. $INCLUDES"  INCLUDES="-I. $INCLUDES"
1059  FFLAGS=  FFLAGS=
1060  FOPTIM=  FOPTIM=
1061    FEXTRAFLAGS=
1062    USE_EXTENDED_SRC=
1063    EXTENDED_SRC_FLAG=
1064  CFLAGS=  CFLAGS=
1065  KFLAGS1=  KFLAGS1=
1066  KFLAGS2=  KFLAGS2=
# Line 949  NOOPTFILES= Line 1071  NOOPTFILES=
1071  NOOPTFLAGS=  NOOPTFLAGS=
1072  MPI=  MPI=
1073  MPIPATH=  MPIPATH=
1074    OMP=
1075    OMPFLAG=
1076    USE_R4=
1077  TS=  TS=
1078    PAPIS=
1079    PCLS=
1080    FOOLAD=
1081    PAPI=
1082    PCL=
1083    HPMT=
1084    GSL=
1085    DEVEL=
1086  HAVE_TEST_L=  HAVE_TEST_L=
1087    
1088  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 957  HAVE_SYSTEM= Line 1090  HAVE_SYSTEM=
1090  HAVE_FDATE=  HAVE_FDATE=
1091  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1092  HAVE_CLOC=  HAVE_CLOC=
1093  HAVE_SETRLSTK=  # HAVE_SETRLSTK=
1094  HAVE_STAT=  HAVE_STAT=
1095  HAVE_NETCDF=  HAVE_NETCDF=
1096  HAVE_ETIME=  HAVE_ETIME=
# Line 974  BASH= Line 1107  BASH=
1107  PWD=`pwd`  PWD=`pwd`
1108  test "x$MAKE" = x  &&  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1109  test "x$AWK" = x   &&  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1110    EMBED_SRC=
1111  THISHOST=`hostname`  THISHOST=`hostname`
1112  THISCWD=`pwd`  THISCWD=`pwd`
1113  THISDATE=`date`  THISDATE=`date`
# Line 1007  TAMC_EXTRA= Line 1141  TAMC_EXTRA=
1141    
1142  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1143  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1144  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"
1145    
1146  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1147  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
1148  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1149  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1150  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
# Line 1037  EOF Line 1171  EOF
1171    
1172  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1173  gm_local="genmake_local"  gm_local="genmake_local"
 for i in . $MODS ; do  
     if test -r $i/$gm_local ; then  
         . $i/$gm_local  
         break  
     fi  
 done  
1174  printf "  getting local config information:  "  printf "  getting local config information:  "
1175  if test -f $gm_local ; then  if test -f $gm_local ; then
1176      echo "using $gm_local"      echo "using $gm_local"
# Line 1054  else Line 1182  else
1182  fi  fi
1183    
1184  #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  
1185  #parse_options  #parse_options
1186  ac_prev=  ac_prev=
1187  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1075  for ac_option in "$@" ; do Line 1194  for ac_option in "$@" ; do
1194          ac_prev=          ac_prev=
1195          continue          continue
1196      fi      fi
1197        
1198      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1199        
1200      case $ac_option in      case $ac_option in
1201                    
1202          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 1187  for ac_option in "$@" ; do Line 1306  for ac_option in "$@" ; do
1306          -noieee | --noieee)          -noieee | --noieee)
1307              IEEE= ;;              IEEE= ;;
1308    
1309            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1310                USE_R4=true ;;
1311    
1312          -ts | --ts)          -ts | --ts)
1313              TS=true ;;              TS=true ;;
1314            -papis | --papis)
1315                PAPIS=true ;;
1316            -pcls | --pcls)
1317                PCLS=true ;;
1318            -foolad | --foolad)
1319                FOOLAD=true ;;
1320            -papi | --papi)
1321                PAPI=true ;;
1322            -pcl | --pcl)
1323                PCL=true ;;
1324            -hpmt | --hpmt)
1325                HPMT=true ;;
1326    
1327            -gsl | --gsl)
1328                GSL=true ;;
1329    
1330            -devel | --devel)
1331                DEVEL=true ;;
1332    
1333          -mpi | --mpi)          -mpi | --mpi)
1334              MPI=true ;;              MPI=true ;;
# Line 1196  for ac_option in "$@" ; do Line 1336  for ac_option in "$@" ; do
1336              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1337              MPI=true ;;              MPI=true ;;
1338                    
1339  #       -jam | --jam)          -omp | --omp)
1340  #           JAM=1 ;;              OMP=true ;;
1341  #       -nojam | --nojam)          -omp=* | --omp=*)
1342  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1343                OMP=true ;;
1344                    
1345          -ds | --ds)          -ds | --ds)
1346              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1217  for ac_option in "$@" ; do Line 1358  for ac_option in "$@" ; do
1358          -ignoretime | -ignore_time | --ignoretime | --ignore_time)          -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1359              IGNORE_TIME="-DIGNORE_TIME" ;;              IGNORE_TIME="-DIGNORE_TIME" ;;
1360    
1361            -es | --es | -embed-source | --embed-source)
1362                EMBED_SRC=t ;;
1363    
1364          -*)          -*)
1365              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
1366              usage              usage
# Line 1228  for ac_option in "$@" ; do Line 1372  for ac_option in "$@" ; do
1372              ;;              ;;
1373                    
1374      esac      esac
1375        
1376  done  done
1377    
1378    
1379  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1380      echo      echo
1381      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1382      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1383      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1384      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1385        echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1386        echo "WARNING: ignore \"./.genmakerc\" and continue."
1387      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  
1388  fi  fi
1389    
1390  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
1391  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1392      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1393      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
1394          ROOTDIR=".."          ROOTDIR=".."
1395      else      else
1396          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 1272  if test ! -d ${ROOTDIR} ; then Line 1415  if test ! -d ${ROOTDIR} ; then
1415  fi  fi
1416    
1417  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1418  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1419      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1420        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1421    #-  remove ./BUILD_INFO.h file if older than version_file
1422        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1423            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1424            rm -f ./BUILD_INFO.h
1425        fi
1426  fi  fi
1427    
1428  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1429  if test ! "x$MPI" = x ; then Line 1578  if test ! "x$MPI" = x ; then
1578        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1579        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1580  fi  fi
1581    if test ! "x$OMP" = x ; then
1582          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1583          FFLAGS="$FFLAGS $OMPFLAG"
1584          F90FLAGS="$F90FLAGS $OMPFLAG"
1585          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1586    fi
1587    
1588    if test ! "x$USE_R4" = x ; then
1589          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1590          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1591    fi
1592    
1593  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1594        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
1595        DEFINES="$DEFINES -DTIME_PER_TIMESTEP"        if test ! "x$FOOLAD" = x ; then
1596                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1597          else
1598                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1599          fi
1600          PACKAGES="$PACKAGES showflops"
1601    fi
1602    if test ! "x$PAPIS" = x ; then
1603          echo "  Turning on PAPI flop summary per timestep"
1604          echo "  Please make sure PAPIINC, PAPILIB are defined"
1605          if test ! "x$FOOLAD" = x ; then
1606                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1607          else
1608                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1609          fi
1610          INCLUDES="$INCLUDES $PAPIINC"
1611          LIBS="$LIBS $PAPILIB"
1612          PACKAGES="$PACKAGES showflops"
1613    fi
1614    if test ! "x$PCLS" = x ; then
1615          echo "  Turning on PCL counter summary per timestep"
1616          echo "  Please make sure PCLINC, PCLLIB are defined"
1617          if test ! "x$FOOLAD" = x ; then
1618                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1619          else
1620                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1621          fi
1622          INCLUDES="$INCLUDES $PCLINC"
1623          LIBS="$LIBS $PCLLIB"
1624          PACKAGES="$PACKAGES showflops"
1625    fi
1626    if test ! "x$PAPI" = x ; then
1627          if test ! "x$PAPIS" = x ; then
1628              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1629              echo "  Sticking with PAPI flop summary per timestep!"
1630          else
1631              echo "  Turning on performance analysis with PAPI"
1632              echo "  Please make sure PAPIINC, PAPILIB are defined"
1633              DEFINES="$DEFINES -DUSE_PAPI"
1634              INCLUDES="$INCLUDES $PAPIINC"
1635              LIBS="$LIBS $PAPILIB"
1636          fi
1637    fi
1638    if test ! "x$PCL" = x ; then
1639          if test ! "x$PCLS" = x ; then
1640              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1641              echo "  Sticking with PCL flop summary per timestep!"
1642          else
1643              echo "  Turning on performance analysis with PCL"
1644              echo "  Please make sure PCLINC, PCLLIB are defined"
1645              DEFINES="$DEFINES -DUSE_PCL"
1646              INCLUDES="$INCLUDES $PCLINC"
1647              LIBS="$LIBS $PCLLIB"
1648          fi
1649    fi
1650    if test ! "x$HPMT" = x ; then
1651          if test ! "x$PAPI" = x ; then
1652              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1653              echo "  Sticking with PAPI!"
1654          else if test ! "x$PCL" = x ; then
1655              echo "  PCL and the HPM Toolkit cannot co-exist!"
1656              echo "  Sticking with PCL!"
1657          else
1658              echo "  Turning on performance analysis with the HPM Toolkit"
1659              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1660              DEFINES="$DEFINES -DUSE_LIBHPM"
1661              INCLUDES="$INCLUDES $HPMTINC"
1662              LIBS="$LIBS $HPMTLIB"
1663          fi
1664          fi
1665    fi
1666    if test ! "x$GSL" = x ; then
1667          echo "  Turning on use of GSL to control floating point calculations"
1668          echo "  Please make sure GSLINC, GSLLIB are defined"
1669          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1670          INCLUDES="$INCLUDES $GSLINC"
1671          LIBS="$LIBS $GSLLIB"
1672    fi
1673    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1674    if test ! "x$USE_EXTENDED_SRC" = x ; then
1675          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1676          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1677  fi  fi
1678    
1679  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
# Line 1503  if test "x$HAVE_CLOC" != x ; then Line 1744  if test "x$HAVE_CLOC" != x ; then
1744      echo "yes"      echo "yes"
1745  else  else
1746      echo "no"      echo "no"
1747        if test "x$EMBED_SRC" = xt ; then
1748            echo "    WARNING: you requested file embedding but it has"
1749            echo "      been disabled since C code cannot be called"
1750            EMBED_SRC=
1751        fi
1752  fi  fi
1753  rm -f genmake_t*  rm -f genmake_t*
1754    
1755  printf "  Can we unlimit the stack size using $FC...  "  printf "  Can we unlimit the stack size using $FC...  "
1756  check_HAVE_SETRLSTK  check_HAVE_SETRLSTK
1757  if test "x$HAVE_SETRLSTK" != x ; then  if test "x$HAVE_SETRLSTK" = xt ; then
1758      echo "yes"      echo "yes"
1759  else  else
1760      echo "no"      echo "no"
# Line 1517  rm -f genmake_t* Line 1763  rm -f genmake_t*
1763    
1764  printf "  Can we register a signal handler using $FC...  "  printf "  Can we register a signal handler using $FC...  "
1765  check_HAVE_SIGREG  check_HAVE_SIGREG
1766  if test "x$HAVE_SIGREG" != x ; then  if test "x$HAVE_SIGREG" = xt ; then
1767      echo "yes"      echo "yes"
1768  else  else
1769      echo "no"      echo "no"
# Line 1542  else Line 1788  else
1788  fi  fi
1789  DEFINES="$DEFINES $IGNORE_TIME"  DEFINES="$DEFINES $IGNORE_TIME"
1790    
1791    if test "x$EMBED_SRC" = xt ; then
1792        build_embed_encode
1793    fi
1794    if test "x$EMBED_SRC" = xt ; then
1795        ENABLE="$ENABLE embed_files"
1796    fi
1797    
1798    
1799  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1800  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1801  for d in $MODS ; do  for d in $MODS ; do
1802      if test ! -d $d ; then      if test ! -d $d ; then
1803          echo          echo
1804          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1805          exit 1          exit 1
1806      else      else
1807          printf " $d"          printf "$d "
1808          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1809          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1810      fi      fi
# Line 1599  ERROR: neither of the two default script Line 1853  ERROR: neither of the two default script
1853      ${TOOLSDIR}/set64bitConst.sh      ${TOOLSDIR}/set64bitConst.sh
1854      ${TOOLSDIR}/set64bitConst.csh      ${TOOLSDIR}/set64bitConst.csh
1855    
1856    are working so please check paths or specify (with \$S64) a    are working so please check paths or specify (with \$S64) a
1857    working version of this script.    working version of this script.
1858    
1859  EOF  EOF
# Line 1611  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD Line 1865  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD
1865    
1866  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1867    
1868    #  Set Standard Code Directories:
1869    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1870        STANDARDDIRS="eesupp model"
1871    fi
1872    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1873    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1874    ckM=$?
1875    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1876    ckE=$?
1877    if test $ckM = 0 -a $ckE = 1 ; then
1878        STANDARDDIRS="$STANDARDDIRS eesupp"
1879    fi
1880    
1881  #  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
1882  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1883  #  they appear as regular source code  #  they appear as regular source code
1884  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1885      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1886      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
1887        ) > make_eesupp.errors 2>&1
1888      RETVAL=$?      RETVAL=$?
1889      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1890          rm -f make_eesupp.errors          rm -f make_eesupp.errors
# Line 1627  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1895  if test -r $ROOTDIR"/eesupp/src/Makefile
1895      fi      fi
1896  fi  fi
1897    
1898  #same for exch2  #same for pkg/exch2 and pkg/regrid
1899  if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then  for pdir in exch2 regrid ; do
1900      echo "  Making source files in exch2 from  templates"      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1901      ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1          echo "  Making source files in pkg/${pdir} from templates"
1902      RETVAL=$?          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
1903      if test "x${RETVAL}" = x0 ; then          ) > make_${pdir}.errors 2>&1
1904          rm -f make_exch2.errors          RETVAL=$?
1905      else          if test "x${RETVAL}" = x0 ; then
1906          echo "Error: problem encountered while building source files in exch2:"              rm -f make_${pdir}.errors
1907          cat make_exch2.errors 1>&2          else
1908          exit 1              echo "Error: problem encountered while building source files in pkg/${pdir}:"
1909                cat make_${pdir}.errors 1>&2
1910                exit 1
1911            fi
1912      fi      fi
1913  fi  done
1914    
1915  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1916  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
# Line 1659  fi Line 1930  fi
1930  echo "  getting package dependency info from  $PDEPEND"  echo "  getting package dependency info from  $PDEPEND"
1931  #  Strip the comments and then convert the dependency file into  #  Strip the comments and then convert the dependency file into
1932  #  two arrays: PNAME, DNAME  #  two arrays: PNAME, DNAME
1933  cat $PDEPEND | sed -e 's/#.*$//g' \  get_pdepend_list $PDEPEND
     | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \  
     > ./.pd_tmp  
 RETVAL=$?  
 if test ! "x${RETVAL}" = x0 ; then  
     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  
     exit 1  
 fi  
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1934    
1935  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1936  #  file should eventually be added so that, for convenience, one can  #  file has been added so that, for convenience, one can specify
1937  #  specify groups of packages using names like "ocean" and "atmosphere".  #  groups of packages using names like "ocean" and "atmosphere".
1938  echo "  checking default package list:  "  echo "  checking default package list:  "
1939  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1940      for i in "." $MODS ; do      for i in "." $MODS ; do
# Line 1703  else Line 1965  else
1965          for i in $def ; do          for i in $def ; do
1966              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1967          done          done
1968          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are:$PACKAGES"
1969          RET=1          RET=1
1970          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1971          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are: $PACKAGES"
1972      fi      fi
1973  fi  fi
1974    
1975  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1976    echo "" > ./.tmp_pack
1977  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1978      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1979  done  done
# Line 1748  for i in `grep -v "-" ./.tmp_pack | sort Line 2011  for i in `grep -v "-" ./.tmp_pack | sort
2011      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2012  done  done
2013  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2014  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2015    
2016  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2017  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2018  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2019  RETVAL=$?  mnc_in=$?
2020  if test "x$RETVAL" = x0 ; then  if test "x$HAVE_NETCDF" != xt ; then
2021      if test "x$HAVE_NETCDF" != xt ; then      if test "x$mnc_in" = x0 ; then
2022          cat <<EOF          cat <<EOF
2023    
2024  *********************************************************************  *********************************************************************
# Line 1763  WARNING: the "mnc" package was enabled b Line 2026  WARNING: the "mnc" package was enabled b
2026    NetCDF applications.  Please check that:    NetCDF applications.  Please check that:
2027    
2028    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2029    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2030         NetCDF library to link against.         NetCDF library to link against.
2031    
2032    Due to this failure, the "mnc" package is now DISABLED.    Due to this failure, the "mnc" package is now DISABLED.
# Line 1773  EOF Line 2036  EOF
2036          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2037          DISABLE="$DISABLE mnc"          DISABLE="$DISABLE mnc"
2038      else      else
2039          ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1      #  this prevent to add mnc (due to pdepend rules) if not available
2040          RETVAL=$?          DISABLE="$DISABLE mnc"
2041          if test "x${RETVAL}" = x0 ; then      fi
2042              rm -f make_mnc.errors  else
2043        # we have NetCDF, we try to build MNC template files
2044        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2045        RETVAL=$?
2046        if test "x${RETVAL}" = x0 ; then
2047            rm -f make_mnc.errors
2048        else
2049            echo "Error: problem encountered while building source files in pkg/mnc:"
2050            cat make_mnc.errors 1>&2
2051            if test "x$mnc_in" = x0 ; then
2052                exit 1
2053          else          else
2054              echo "Error: problem encountered while building source files in pkg/mnc:"              DISABLE="$DISABLE mnc"
             cat make_mnc.errors 1>&2  
             exit 1  
2055          fi          fi
2056      fi      fi
2057  fi  fi
2058    
2059    #  Check for package PROFILES: if NetCDF is not available,
2060    #  then delete profiles from the list of available packages.
2061    if test "x$HAVE_NETCDF" != xt ; then
2062        echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2063        RETVAL=$?
2064        if test "x$RETVAL" = x0 ; then
2065            cat <<EOF
2066    
2067    *********************************************************************
2068    WARNING: the "profiles" package was enabled but tests failed to
2069      compile NetCDF applications.  Please check that:
2070    
2071      1) NetCDF is correctly installed for this compiler and
2072      2) the LIBS variable (within the "optfile") specifies the correct
2073           NetCDF library to link against.
2074    
2075      Due to this failure, the "profiles" package is now DISABLED.
2076    *********************************************************************
2077    
2078    EOF
2079            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2080            DISABLE="$DISABLE profiles"
2081        else
2082        #  this prevent to add profiles (due to pdepend rules) if not available
2083            DISABLE="$DISABLE profiles"
2084        fi
2085    fi
2086    
2087  echo "  applying package dependency rules"  echo "  applying package dependency rules"
2088  ck=  ck=
2089  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
2090      i=0      i=0
2091      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2092      rtot=$nname      rtot=$nname
2093      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2094    
2095          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2096          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1803  while test "x$ck" != xtt ; do Line 2102  while test "x$ck" != xtt ; do
2102                  pin="t"                  pin="t"
2103              fi              fi
2104          done          done
2105            #  or in the current $STANDARDDIRS list?
2106            for p in $STANDARDDIRS ; do
2107                if test "x$p" = "x$pname" ; then pin="t" ; fi
2108            done
2109    
2110          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2111          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 1825  while test "x$ck" != xtt ; do Line 2128  while test "x$ck" != xtt ; do
2128    
2129          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2130          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
2131                #echo "   " $pname ": need to add :" $dname
2132              in_dis="f"              in_dis="f"
2133              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2134                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 1845  while test "x$ck" != xtt ; do Line 2149  while test "x$ck" != xtt ; do
2149          #  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?
2150          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
2151              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2152              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2153              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2154              exit 1              exit 1
2155          fi          fi
# Line 1854  while test "x$ck" != xtt ; do Line 2158  while test "x$ck" != xtt ; do
2158      done      done
2159      ck=$ck"t"      ck=$ck"t"
2160  done  done
2161  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2162  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2163      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2164      if test -d $adr ; then      if test -d $adr ; then
# Line 1871  done Line 2175  done
2175    
2176  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2177  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2178  #  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
2179  #  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
2180  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2181  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2182  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 1900  for i in $PACKAGES ; do Line 2204  for i in $PACKAGES ; do
2204  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2205    
2206  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2207      case $i in      case $i in
2208          aim_v23)          aim_v23)
2209              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2210              echo "Warning: ALLOW_AIM is set to enable aim_v23."              echo "Warning: ALLOW_AIM is set to enable aim_v23."
# Line 1910  for i in $PACKAGES ; do Line 2214  for i in $PACKAGES ; do
2214    
2215  done  done
2216    
2217  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2218  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2219  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2220      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2221          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 1969  fi Line 2270  fi
2270    
2271  #  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
2272  #  compiler.  #  compiler.
2273  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2274      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2275  fi  fi
2276  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2277    touch adSrcFiles.tmp
2278  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2279      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2280      for j in $list_files ; do      for j in $list_files ; do
2281          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2282      done      done
2283  done  done
2284  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2285      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2286      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2287  fi  fi
2288    
2289  echo  echo
# Line 1993  for i in $INCLUDEDIRS ; do Line 2295  for i in $INCLUDEDIRS ; do
2295      fi      fi
2296  done  done
2297    
2298    if test ! "x$DIVA" = x ; then
2299        echo "  Creating the pseudo-MPI include directory"
2300        INCLUDES="-I./mpi_headers $INCLUDES"
2301        rm -rf ./mpi_headers
2302        mkdir -p ./mpi_headers
2303    
2304        if test "x$MPIINCLUDEDIR" = x ; then
2305            if test "x$MPIHOME" = x ; then
2306                MPIHOME='/usr'
2307            fi
2308            MPIINCLUDEDIR='$MPIHOME/include'
2309        fi
2310    
2311        if test -r $MPIINCLUDEDIR/mpif.h ; then
2312            for i in $MPI_HEADER_FILES; do
2313                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2314            done
2315    
2316            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2317        else
2318            echo " We cannot create a copy of mpif.h!"
2319    #       exit -1
2320        fi
2321    fi
2322    
2323  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2324  rm -rf .links.tmp  rm -rf .links.tmp
2325  mkdir .links.tmp  mkdir .links.tmp
2326    touch .links.tmp/foo
2327    if test ! -r ".links.tmp/foo" ; then
2328        echo
2329        echo "ERROR : something is wrong with your directory permissions or"
2330        echo "   your user file-creation mask (\"umask\") since creating a"
2331        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2332        echo "   not working.  Please try setting your umask to something"
2333        echo "   sane such as:"
2334        echo
2335        echo "      umask 0002"
2336        echo
2337        echo "   and please verify that you have the proper permissions for"
2338        echo "   creating sub-directories and then reading files created"
2339        echo "   within them."
2340        echo
2341        exit 1
2342    fi
2343    rm -f .links.tmp/foo
2344    
2345    if test "x$OPENAD" != x ; then
2346        OAD_DONT_COMPILE="/dev/null"
2347        OAD_DONT_TRANSFORM="/dev/null"
2348        OAD_KEEP_ORIGINAL="/dev/null"
2349        OAD_CB2M_FILES="/dev/null"
2350        echo "  looking for dontCompile file:  "
2351        for i in "." $MODS ; do
2352            if test -r $i"/dontCompile" ; then
2353                OAD_DONT_COMPILE=$i"/dontCompile"
2354                echo "     found $OAD_DONT_COMPILE"
2355                break
2356            fi
2357        done
2358        echo "  looking for dontTransform file:  "
2359        for i in "." $MODS ; do
2360            if test -r $i"/dontTransform" ; then
2361                OAD_DONT_TRANSFORM=$i"/dontTransform"
2362                echo "     found $OAD_DONT_TRANSFORM"
2363                break
2364            fi
2365        done
2366        echo "  looking for keepOriginal file:  "
2367        for i in "." $MODS ; do
2368            if test -r $i"/keepOriginal" ; then
2369                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2370                echo "     found $OAD_KEEP_ORIGINAL"
2371                break
2372            fi
2373        done
2374        echo "  looking for cb2mFiles:  "
2375        for i in "." $MODS ; do
2376            if test -r $i"/cb2mFiles" ; then
2377                OAD_CB2M_FILES=$i"/cb2mFiles"
2378                echo "     found $OAD_CB2M_FILES"
2379                break
2380            fi
2381        done
2382        echo "   OpenAD exceptions:  "
2383    fi
2384    
2385  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2386  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2387  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2388  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2389  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2390  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2391  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2392    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2393  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2394  for d in $alldirs ; do  for d in $alldirs ; do
2395      deplist=      deplist=
2396      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2397      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2398        if test "x$OPENAD" != x ; then
2399            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2400        fi
2401      for sf in $sfiles ; do      for sf in $sfiles ; do
2402          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2403              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2404                  ignore_f=f                  ignore_f=f
2405                  case $d/$sf in                  case $d/$sf in
2406                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2407                            ignore_f=t
2408                          ;;                          ;;
2409                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2410                            ignore_f=t
2411                          ;;                          ;;
2412                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2413                            ignore_f=t
2414                          ;;                          ;;
2415                    ./BUILD_INFO.h)                    ./BUILD_INFO.h)
2416                            ignore_f=t
2417                            ;;
2418                      ./EMBEDDED_FILES.h)
2419                            ignore_f=t
2420                          ;;                          ;;
2421                    *)                    *)
2422                          #  For the local directory *ONLY*,                          #  For the local directory *ONLY*,
# Line 2035  for d in $alldirs ; do Line 2432  for d in $alldirs ; do
2432                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2433                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2434                      case $extn in                      case $extn in
2435                          F)                        F)
2436                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2437                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2438                              ;;                          if test "x$OPENAD" != x ; then
2439                          F90)                              basename=${sf%%.F}
2440                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2441                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2442                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2443                          c)                                  if test -z "$toBeIgnored" ; then
2444                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2445                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2446                              ;;                                  else
2447                          h)                                      echo "    not to be compiled   :  $sf"
2448                              echo    " \\"  >> hlist.inc                                  fi
2449                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2450                              ;;                                   # or we want to retain the untransformed version
2451                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2452                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2453                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2454                              ;;                                      echo "    not to be transformed:  $sf"
2455                      esac                                  fi
2456                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2457                                        echo "    original to be kept  :  $sf"
2458                                    fi
2459                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2460                                        echo    " \\"  >> nonADF77srclist.tmp
2461                                        printf " $sf" >> nonADF77srclist.tmp
2462                                    fi
2463                                fi
2464                            fi
2465                            ;;
2466                        F90)
2467                            echo    " \\"  >> F90srclist.tmp
2468                            printf " $sf" >> F90srclist.tmp
2469                            ;;
2470                        c)
2471                            echo    " \\"  >> csrclist.tmp
2472                            printf " $sf" >> csrclist.tmp
2473                            ;;
2474                        h)
2475                            echo    " \\"  >> hsrclist.tmp
2476                            printf " $sf" >> hsrclist.tmp
2477                            ;;
2478                        flow)
2479                            echo    " \\"  >> ad_flow_files.tmp
2480                            printf " $sf" >> ad_flow_files.tmp
2481                            ;;
2482                       esac
2483                    fi
2484              fi              fi
2485          fi          fi
2486      done      done
2487      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2488          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2489            echo "" >> srclinks.tmp
2490          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2491          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2492          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2493    # This may happen when make thinks that a header file has to be "remade"
2494    # because a module it depends on has changed.  In this case we do nothing.
2495            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2496          fi
2497      fi      fi
2498  done  done
2499  rm -rf .links.tmp  rm -rf .links.tmp
2500  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2501  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2502  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2503  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2504  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2505    echo "" >> ad_flow_files.tmp
2506    
2507    CMDLINE=$0
2508    for xx in "$@" ; do nw=`echo $xx | wc -w`
2509        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2510                            else CMDLINE="$CMDLINE '$xx'" ; fi
2511    done
2512    
2513  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2514      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2515  fi  fi
2516  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2517  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 2083  echo "#    $MACHINE" >> $MAKEFILE Line 2519  echo "#    $MACHINE" >> $MAKEFILE
2519  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2520  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2521  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2522  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2523  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2524  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2525    
# Line 2094  EXE_SVD=$EXECUTABLE"_svd" Line 2530  EXE_SVD=$EXECUTABLE"_svd"
2530  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2531  #  #
2532  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2533  #  #
2534  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2535  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2536  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 2114  cat >>$MAKEFILE <<EOF Line 2550  cat >>$MAKEFILE <<EOF
2550  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2551    
2552  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2553  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2554  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2555  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2556  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 2132  DISABLED_PACKAGES = ${DISABLED_PACKAGES} Line 2568  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2568    
2569  # These files are created by Makefile  # These files are created by Makefile
2570  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
   
2571  EOF  EOF
2572    
2573  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2574        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2575    else
2576        echo "EMBEDDED_FILES = " >>$MAKEFILE
2577    fi
2578    
2579  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2580  # Unix ln (link)  # Unix ln (link)
2581  LN = ${LN}  LN = ${LN}
# Line 2163  INCLUDES = ${INCLUDES} Line 2602  INCLUDES = ${INCLUDES}
2602  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2603  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2604  # Optim./debug for FC  # Optim./debug for FC
2605  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2606  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2607  # Optim./debug for FC  # Optim./debug for FC
2608  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2609  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2610    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2611  # Flags for CC  # Flags for CC
2612  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2613  # Files that should not be optimized  # Files that should not be optimized
# Line 2180  MAKEFILE=${MAKEFILE} Line 2620  MAKEFILE=${MAKEFILE}
2620    
2621  EOF  EOF
2622    
2623  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2624  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2625  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2626  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2627  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2628    cat ad_flow_files.tmp   >> $MAKEFILE
2629    
2630    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2631    
2632  echo >> $MAKEFILE  echo >> $MAKEFILE
2633  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2634  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2635  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2636    # hence the $FS and $FS90 here.
2637    # for fixed format f90 files we use ff90 or FF90 resp
2638    # but these are not expected to be the original source files
2639    
2640    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2641    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2642    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2643    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2644  echo >> $MAKEFILE  echo >> $MAKEFILE
2645  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2646  echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE  echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE
 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  
 rm -f ad_flow_files.inc  
2647    
2648  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2649    
2650  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2651  \$(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)
2652          @echo Creating \$@ ...          @echo Creating \$@ ...
2653          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2654  depend:  depend:
2655          @make links          @make links
2656          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2657          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2658          -rm -f makedepend.out          -rm -f makedepend.out
2659    
# Line 2211  lib: libmitgcmuv.a Line 2661  lib: libmitgcmuv.a
2661    
2662  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2663          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2664            ar d   libmitgcmuv.a main.o
2665    
2666  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2667    
2668  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2669    
2670  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2671          @printf 'running ... '          @printf 'running ... '
2672          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2673    
2674  clean:  clean:
2675          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2676            -rm -rf *.o
2677            -rm -rf *.$FS *.flowdir
2678            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2679  Clean:  Clean:
2680          @make clean          @make clean
2681          @make cleanlinks          @make cleanlinks
2682          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2683          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2684            -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2685            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2686  CLEAN:  CLEAN:
2687          @make Clean          @make Clean
2688          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2689          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2690          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2691          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2692            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2693            -rm -rf mnc_test_*
2694    
2695  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2696  makefile:  makefile:
# Line 2240  makefile: Line 2698  makefile:
2698  cleanlinks:  cleanlinks:
2699          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2700    
2701  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2702  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2703          @echo Creating \$@ ...          @echo Creating \$@ ...
2704          @$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) > \$@          @$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) > \$@
# Line 2260  test ! "x$THISUSER" = x && echo "      -echo Line 2718  test ! "x$THISUSER" = x && echo "      -echo
2718  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2719  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2720    
2721    if test "x$EMBED_SRC" = xt ; then
2722        cat >>$MAKEFILE <<EOF
2723    
2724    decode_files.o : EMBEDDED_FILES.h
2725    
2726    ##  \$(F77_PP_SRC_FILES)
2727    all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2728            @echo Creating \$@ ...
2729            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2730            -rm -f all_fF.tar.gz
2731            -gzip all_fF.tar
2732    
2733    EMBEDDED_FILES.h : all_fF.tar.gz
2734            @echo Creating \$@ ...
2735            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2736    
2737    EOF
2738    fi
2739    
2740  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2741    
2742  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
# Line 2273  cat >>$MAKEFILE <<EOF Line 2750  cat >>$MAKEFILE <<EOF
2750          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2751  .F90.$FS90:  .F90.$FS90:
2752          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2753    .FF90.f$FS90:
2754            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2755  .$FS90.o:  .$FS90.o:
2756          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2757    .f$FS90.o:
2758            cp \$< \$(basename  \$<).f90
2759            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2760  .c.o:  .c.o:
2761          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2762    .flow.flowdir:
2763            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2764    
2765  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2766  .F.p:  .F.p:
# Line 2284  cat >>$MAKEFILE <<EOF Line 2768  cat >>$MAKEFILE <<EOF
2768  .p.$FS:  .p.$FS:
2769          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2770    
2771    EOF
2772    
2773  #=========================================  #=========================================
2774  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2775    #===  for TAMC/TAF  ======================
2776    
2777    if test "x$OPENAD" = x ; then
2778    
2779    cat >>$MAKEFILE <<EOF
2780    
2781  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2782  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2300  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2791  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2791  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2792  for i in $ad_vars ; do  for i in $ad_vars ; do
2793      name=$i      name=$i
2794      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2795      eval $t1      eval $t1
2796      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2797      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2798  done  done
2799    
2800  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2801  echo >> $MAKEFILE  echo >> $MAKEFILE
2802  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2803  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2804  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2805      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2806      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2807  done  done
2808  echo >> $MAKEFILE  echo >> $MAKEFILE
2809  rm -f ad_files  rm -f adSrcFiles.tmp
2810    
2811  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2812    
2813  # ... AD ...  # ... AD ...
2814  adall: ad_taf  adall: \$(EXE_AD)
2815  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2816  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2817    
2818  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2819          @$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          @$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
2820          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
2821          -rm -f ad_config.template          -rm -f ad_config.template
2822          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2823          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2824          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2825    
2826  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2827          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2828            ls -l ad_input_code_ad.$FS
2829          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2830    
2831  adtafonly:  adtafonly:
2832          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2833            ls -l ad_input_code_ad.$FS
2834          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2835    
2836  ad_taf: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2837          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2838    
2839  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2840          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2841          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2842    
2843  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2844          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2845    
2846  adonlyfwd:  adonlyfwd:
2847          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2848    
2849  adtrick:  adtrick:
2850          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2851    
# Line 2361  ftlall: ftl_taf Line 2854  ftlall: ftl_taf
2854  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2855  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2856    
2857  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2858          @$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          @$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
2859          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
2860          -rm -f ftl_config.template          -rm -f ftl_config.template
2861          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2862          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2863          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2864    
2865  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2866          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2867            ls -l ftl_input_code_ftl.$FS
2868          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2869    
2870  ftltafonly:  ftltafonly:
2871          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2872            ls -l ftl_input_code_ftl.$FS
2873          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2874    
2875  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2876          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2877    
2878  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
2879          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2880          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2881    
2882  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2883          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2884    
2885    
2886  # ... SVD ...  # ... SVD ...
# Line 2412  svd_touch: Line 2907  svd_touch:
2907          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
2908          -rm -f ftl_config.template          -rm -f ftl_config.template
2909    
2910  #=========================================  EOF
2911    
2912    fi
2913    
2914    #===  for OpenAD  ========================
2915    
2916    if test "x$OPENAD" != x ; then
2917    
2918    # ============ begin OpenAD specific section ==============
2919    
2920    cat >>$MAKEFILE <<EOF
2921    
2922    # all the source files linked from the various locations:
2923    ALL_LINKED_FILES= \
2924    \$(F77_SRC_FILES) \
2925    \$(C_SRC_FILES) \
2926    \$(H_SRC_FILES) \
2927    \$(F90_SRC_FILES) \
2928    \$(SPECIAL_FILES)
2929    
2930    ifndef OPENADROOT
2931      \$(error "Error:  environment variable OPENADROOT not defined!")
2932    endif
2933    
2934    ifndef XAIFSCHEMAROOT
2935      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2936    endif
2937    
2938    ifndef XAIFBOOSTERROOT
2939      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2940    endif
2941    
2942  EOF  EOF
2943    
2944    echo "  Add the source list for common block to module conversion "
2945    echo >> $MAKEFILE
2946    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2947    for i in `cat ${OAD_CB2M_FILES}` ; do
2948      echo    " \\" >> $MAKEFILE
2949      printf " $i" >> $MAKEFILE
2950    done
2951    echo >> $MAKEFILE
2952    
2953    echo "  Add the source list for AD code generation"
2954    echo >> $MAKEFILE
2955    printf "AD_FILES = " >> $MAKEFILE
2956    for i in `cat ${OAD_CB2M_FILES}` ; do
2957      echo    " \\" >> $MAKEFILE
2958      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2959    done
2960    AD_FILES=`cat adSrcFiles.tmp`
2961    for i in $AD_FILES ; do
2962      basename=${i%%.f}
2963      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2964      if test -z "$toBeIgnored" ; then
2965        echo    " \\" >> $MAKEFILE
2966        printf " $i" >> $MAKEFILE
2967      fi
2968    done
2969    echo >> $MAKEFILE
2970    rm -f adSrcFiles.tmp
2971    
2972    cat >>$MAKEFILE <<EOF
2973    
2974    adAll: \$(EXE_AD)
2975    .PHONY: adAll
2976    
2977    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2978    
2979    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2980    
2981    .PHONY: adDepend
2982    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2983            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2984            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2985            -rm -f makedepend.out
2986    
2987    OPENAD_SUPPORT_F90_SRC_FILES = \
2988    w2f__types.F90 \
2989    OAD_active.F90 \
2990    OAD_cp.F90 \
2991    OAD_rev.F90 \
2992    OAD_tape.F90
2993    
2994    OPENAD_SUPPORT_C_SRC_FILES = \
2995    iaddr.c \
2996    timeRatio.c
2997    
2998    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
2999            cat \$^ > \$@
3000    
3001    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
3002            cat \$^ > \$@
3003    
3004    f95_test.out: f95_test_mods.f90 f95_test.f90
3005            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3006            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3007    
3008    # the file included below is created by the
3009    # postProcessor and its inclusion sets the
3010    # variable POSTPROCESSEDFILES
3011    # used below. Because the file is made during
3012    # make it won't be read until the second (recursive)
3013    # invocation in the rule below
3014    -include postProcess.make
3015    
3016    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3017    
3018    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)
3019    
3020    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3021    ifeq (\$(MAKELEVEL),0)
3022            \$(MAKE) adAll
3023    else
3024            touch \$@
3025    endif
3026    
3027    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3028    ifeq (\$(MAKELEVEL),1)
3029            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3030    else
3031            touch \$@
3032    endif
3033    
3034    # makefile debug rule
3035    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3036    .PHONY: openad
3037    
3038    # create the module files
3039    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3040            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3041    
3042    # create the header files
3043    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3044            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3045    
3046    # change everybody else to use the new module files:
3047    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3048            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3049    
3050    # makefile debug rule
3051    small_f: \$(CB2M_F90_PP_SRC_FILES)
3052    .PHONY: small_f
3053    
3054    ad_output.txt: \$(EXE_AD)
3055            @printf 'linking data files ... '
3056            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3057            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3058            @printf 'running ... '
3059            @./\$(EXE_AD) > \$@
3060    
3061    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3062    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3063            cat \$^ > \$@
3064    
3065    # strip all comments and blanks to reduce
3066    # the file size in order to reduce perl's memory requirements
3067    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3068            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3069    
3070    # mfef90 preprocessing
3071    # expand statement functions
3072    # expose mfef90 specific substring handling
3073    # add the w2f__types module
3074    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3075            ./mfef90 -r8 -z -F -N132 \$<
3076            mv \$<.B \$(basename \$<).B
3077            ./whirl2f -openad \$(basename \$<).B
3078            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3079    
3080    # canonicalizer
3081    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3082            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3083    
3084    # F -> WHIRL
3085    # note that the canonicalized version cuts off at col 72
3086    # doing this also for string constants which is ok as long
3087    # as we are in fixed mode and cut of exactly there.
3088    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3089    # characters respectively.
3090    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3091            ./mfef90 -r8 -z -F \$<
3092            mv \$<.B \$@
3093    
3094    # WHIRL -> XAIF
3095    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3096            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3097    
3098    # XAIF -> XAIF'
3099    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
3100            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3101    
3102    # XAIF' -> WHIRL'
3103    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3104            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3105    
3106    # WHIRL' -> F'
3107    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3108            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3109    
3110    # insert template directives
3111    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
3112            ../OAD_support/insertTemplateDir.bash \$< \$@
3113    
3114    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3115    # postprocess F'
3116    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3117            # the target is a placeholder to signal execution of the rule
3118            touch \$@
3119            # this step also creates the file postProcess.make but we cannot
3120            # name it as the target or else make will try to remake it for
3121            # the include directive above for any rule, e.g. make clean
3122            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3123    
3124    # setup some links
3125    %.xsd:
3126            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3127    
3128    mfef90:
3129            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3130    
3131    # link the support files:
3132    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3133            \$(LN) ../OAD_support/\$@ .
3134    
3135    whirl2xaif xaif2whirl:
3136            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3137    
3138    preProcess.py postProcess.py:
3139            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3140    
3141    whirl2f whirl2f_be:
3142            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3143    
3144    oadDriver:
3145            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3146    
3147    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3148    
3149    # ============ end OpenAD specific section ==============
3150    
3151    EOF
3152    
3153    fi
3154    
3155    #=========================================
3156    
3157  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3158      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3159  fi  fi
# Line 2451  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3189  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3189  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3190    
3191  # Create special header files  # Create special header files
3192  $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"  $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"
3193  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3194      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3195  else  else

Legend:
Removed from v.1.138  
changed lines
  Added in v.1.207

  ViewVC Help
Powered by ViewVC 1.1.22