/[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.157 by heimbach, Sat Nov 4 21:01:37 2006 UTC revision 1.209 by jmc, Mon Nov 1 00:20:28 2010 UTC
# Line 56  test_for_string_in_file() { Line 56  test_for_string_in_file() {
56  # the package list.  # the package list.
57  expand_pkg_groups() {  expand_pkg_groups() {
58      new_packages=      new_packages=
     PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups"  
59      if test -r $PKG_GROUPS ; then      if test -r $PKG_GROUPS ; then
60          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp
61          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp
# Line 67  expand_pkg_groups() { Line 66  expand_pkg_groups() {
66              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" = x0 ; then
67                  matched=1                  matched=1
68                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
69                  echo "    replacing \"$i\" with: $replace"                  echo "    replacing \"$i\" with:$replace"
70                  new_packages="$new_packages $replace"                  new_packages="$new_packages $replace"
71              else              else
72                  new_packages="$new_packages $i"                  new_packages="$new_packages $i"
# Line 110  EOF Line 109  EOF
109              check_for_broken_Ff              check_for_broken_Ff
110          else          else
111              cat <<EOF 2>&1              cat <<EOF 2>&1
112  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
113    (fails the "cp" test) and this program cannot find a suitable    (fails the "cp" test) and this program cannot find a suitable
114    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
115    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
116    
117  EOF  EOF
# Line 146  EOF Line 145  EOF
145              check_for_broken_Ff              check_for_broken_Ff
146          else          else
147              cat <<EOF 2>&1              cat <<EOF 2>&1
148  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
149    (fails the "make/ln" test) and this program cannot find a suitable    (fails the "make/ln" test) and this program cannot find a suitable
150    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
151    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
152    
153  EOF  EOF
# Line 194  look_for_makedepend()  { Line 193  look_for_makedepend()  {
193          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
194  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
195  #  #
196  #   Some "makedepend" implementations will die if they cannot  #   Some "makedepend" implementations will die if they cannot
197  #   find a Makefile -- so this file is here to gives them an  #   find a Makefile -- so this file is here to gives them an
198  #   empty one to find and parse.  #   empty one to find and parse.
199  EOF  EOF
200          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
# Line 212  EOF Line 211  EOF
211              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
212          else          else
213              echo "    a system-default makedepend was not found."              echo "    a system-default makedepend was not found."
214                
215              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
216              build_cyrus_makedepend              build_cyrus_makedepend
217              RETVAL=$?              RETVAL=$?
# Line 269  build_embed_encode() Line 268  build_embed_encode()
268              return 1              return 1
269          fi          fi
270          clist="cc gcc c89 $CC"          clist="cc gcc c89 $CC"
271          for ic in $clist ; do          for ic in $clist ; do
272              comm="$ic -o encode_files encode_files.c"              comm="$ic -o encode_files encode_files.c"
273              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
274              RETVAL=$?              RETVAL=$?
# Line 304  find_possible_configs()  { Line 303  find_possible_configs()  {
303      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
304      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
305      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
306        
307      echo "test" > test      echo "test" > test
308      ln -s ./test link      ln -s ./test link
309      RETVAL=$?      RETVAL=$?
# Line 325  find_possible_configs()  { Line 324  find_possible_configs()  {
324    
325      #================================================================      #================================================================
326      #  look for possible C compilers      #  look for possible C compilers
327      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
328      p_CC=      p_CC=
329      for c in $tmp ; do      for c in $tmp ; do
330          rm -f ./genmake_hello.c  ./genmake_hello          rm -f ./genmake_hello.c  ./genmake_hello
# Line 364  EOF Line 363  EOF
363    
364      #================================================================      #================================================================
365      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
366      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"
367      p_FC=      p_FC=
368      for c in $tmp ; do      for c in $tmp ; do
369          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 442  Error: No options file was found in:  $R Line 441  Error: No options file was found in:  $R
441  EOF  EOF
442          exit 1          exit 1
443      fi      fi
444        
445  #     # look for possible MPI libraries  #     # look for possible MPI libraries
446  #     mpi_libs=  #     mpi_libs=
447  #     mpi_fort=`which mpif77 2>/dev/null`  #     mpi_fort=`which mpif77 2>/dev/null`
# Line 461  EOF Line 460  EOF
460  #       if test "x${RETVAL}" = x0 ; then  #       if test "x${RETVAL}" = x0 ; then
461  #           a=`cat out`  #           a=`cat out`
462  #           for i in $a ; do  #           for i in $a ; do
463  #               case $i in  #               case $i in
464  #                   -*)  #                   -*)
465  #                       mpi_libs="$mpi_libs $i" ;;  #                       mpi_libs="$mpi_libs $i" ;;
466  #               esac  #               esac
# Line 480  get_pdepend_list()  { Line 479  get_pdepend_list()  {
479      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
480      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
481      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
482          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
483          > ./.pd_tmp          > ./.pd_tmp
484        RETVAL=$?
485        if test ! "x${RETVAL}" = x0 ; then
486          echo "Error: unable to parse package dependencies -- please check PKG_DEPEND=\"$1\""
487          exit 1
488        fi
489      . ./.pd_tmp      . ./.pd_tmp
490      rm -f ./.pd_tmp      rm -f ./.pd_tmp
491    
     printf "PNAME = "${}  
492  }  }
493    
494    
# Line 508  Usage: "$0" [OPTIONS] Line 511  Usage: "$0" [OPTIONS]
511        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
512        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
513            Use "NAME" as the optfile.  By default, an attempt will be            Use "NAME" as the optfile.  By default, an attempt will be
514            made to find an appropriate "standard" optfile in the            made to find an appropriate "standard" optfile in the
515            tools/build_options/ directory.            tools/build_options/ directory.
516    
517      -pdepend NAME | --pdepend NAME      -pdepend NAME | --pdepend NAME
518        -pdepend=NAME | --pdepend=NAME        -pdepend=NAME | --pdepend=NAME
519            Get package dependency information from "NAME".            Get package dependency information from "NAME".
520    
521      -pdefault NAME | --pdefault NAME      -pgroups NAME | --pgroups NAME
522        -pdefault=NAME | --pdefault=NAME        -pgroups=NAME | --pgroups=NAME
523            Get the default package list from "NAME".            Get the package groups information from "NAME".
524    
525        -bash NAME
526              Explicitly specify the Bourne or BASH shell to use
527    
528      -make NAME | -m NAME      -make NAME | -m NAME
529        --make=NAME | -m=NAME        --make=NAME | -m=NAME
530            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
531            many platforms, "gmake" is the preferred choice.            many platforms, "gmake" is the preferred choice.
532    
533      -makefile NAME | -mf NAME      -makefile NAME | -mf NAME
# Line 535  Usage: "$0" [OPTIONS] Line 541  Usage: "$0" [OPTIONS]
541      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
542        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
543            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
544            By default, genamke will try to find the location by            By default, genamke will try to find the location by
545            looking in parent directories (up to the 5th parent).            looking in parent directories (up to the 5th parent).
546    
547      -mods NAME | --mods NAME | -mo NAME | --mo NAME      -mods NAME | --mods NAME | -mo NAME | --mo NAME
548        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
549            Here, "NAME" specifies a list of directories that are            Here, "NAME" specifies a list of directories that are
550            used for additional source code.  Files found in the            used for additional source code.  Files found in the
551            "mods list" are given preference over files of the same            "mods list" are given preference over files of the same
552            name found elsewhere.            name found elsewhere.
553    
554      -disable NAME | --disable NAME      -disable NAME | --disable NAME
555        -disable=NAME | --disable=NAME        -disable=NAME | --disable=NAME
556            Here "NAME" specifies a list of packages that we don't            Here "NAME" specifies a list of packages that we don't
557            want to use.  If this violates package dependencies,            want to use.  If this violates package dependencies,
558            genamke will exit with an error message.            genamke will exit with an error message.
559    
560      -enable NAME | --enable NAME      -enable NAME | --enable NAME
561        -enable=NAME | --enable=NAME        -enable=NAME | --enable=NAME
562            Here "NAME" specifies a list of packages that we wish            Here "NAME" specifies a list of packages that we wish
563            to specifically enable.  If this violates package            to specifically enable.  If this violates package
564            dependencies, genamke will exit with an error message.            dependencies, genamke will exit with an error message.
565    
566      -standarddirs NAME | --standarddirs NAME      -standarddirs NAME | --standarddirs NAME
567        -standarddirs=NAME | --standarddirs=NAME        -standarddirs=NAME | --standarddirs=NAME
568            Here, "NAME" specifies a list of directories to be            Here, "NAME" specifies a list of directories to be
569            used as the "standard" code.            used as the "standard" code.
570    
571      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
572        -fc=NAME | --fc=NAME        -fc=NAME | --fc=NAME
573            Use "NAME" as the fortran compiler.  By default, genmake            Use "NAME" as the fortran compiler.  By default, genmake
574            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
575            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
576    
577      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
578            Use "NAME" as the C compiler.  By default, genmake            Use "NAME" as the C compiler.  By default, genmake
579            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
580            "usual suspects" such as gcc, c89, cc, etc.            "usual suspects" such as gcc, c89, cc, etc.
581    
582      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
583            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
584            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
585            is being used.            is being used.
586    
587        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
588              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
589              *only* works if CPP_EEOPTIONS.h allows this.
590    
591      -ignoretime | -ignore_time | --ignoretime | --ignore_time      -ignoretime | -ignore_time | --ignoretime | --ignore_time
592            Ignore all the "wall clock" routines entirely.  This will            Ignore all the "wall clock" routines entirely.  This will
593            not in any way hurt the model results -- it simply means            not in any way hurt the model results -- it simply means
594            that the code that checks how long the model spends in            that the code that checks how long the model spends in
595            various routines will give junk values.            various routines will give junk values.
596    
597      -ts | --ts      -ts | --ts
# Line 601  Usage: "$0" [OPTIONS] Line 611  Usage: "$0" [OPTIONS]
611    
612      -gsl | --gsl      -gsl | --gsl
613            Use GSL to control floating point rounding and precision            Use GSL to control floating point rounding and precision
614        -devel | --devel
615              Add additional warning and debugging flags for development
616    
617      -mpi | --mpi      -mpi | --mpi
618            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 609  Usage: "$0" [OPTIONS] Line 621  Usage: "$0" [OPTIONS]
621            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
622            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
623    
624        -omp | --omp
625              Activate OpenMP code + use Compiler option OMPFLAG
626        -omp=OMPFLAG | --omp=OMPFLAG
627              Activate OpenMP code + use Compiler option OMPFLAG
628    
629      -es | --es | -embed-source | --embed-source      -es | --es | -embed-source | --embed-source
630            Embed a tarball containing the full source code            Embed a tarball containing the full source code
631            (including the Makefile, etc.) used to build the            (including the Makefile, etc.) used to build the
632            executable [off by default]            executable [off by default]
633    
634      -bash NAME    While it is most often a single word, the "NAME" variables specified
           Explicitly specify the Bourne or BASH shell to use  
   
   While it is most often a single word, the "NAME" variables specified  
635    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
636    
637      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
# Line 628  Usage: "$0" [OPTIONS] Line 642  Usage: "$0" [OPTIONS]
642    
643    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
644    
645      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
646    
647  EOF  EOF
648    
# Line 644  get_fortran_c_namemangling()  { Line 658  get_fortran_c_namemangling()  {
658      fi      fi
659    
660      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
661        
662      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
663  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
664  EOF  EOF
# Line 744  void FC_NAMEMANGLE(cloc) ( double *curti Line 758  void FC_NAMEMANGLE(cloc) ( double *curti
758   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
759  }  }
760  EOF  EOF
761      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
762        echo $COMM >> genmake_warnings
763        $COMM >> genmake_warnings 2>&1
764      RET_C=$?      RET_C=$?
765      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
766        program hello        program hello
# Line 754  EOF Line 770  EOF
770        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
771        end        end
772  EOF  EOF
773      $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"
774        echo $COMM >> genmake_warnings
775        $COMM >> genmake_warnings 2>&1
776      RET_F=$?      RET_F=$?
777      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
778      RETVAL=$?      RETVAL=$?
# Line 801  void FC_NAMEMANGLE(sigreg) (int * aip) Line 819  void FC_NAMEMANGLE(sigreg) (int * aip)
819      return;      return;
820  }  }
821  EOF  EOF
822      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
823        echo $COMM >> genmake_warnings
824        $COMM >> genmake_warnings 2>&1
825      RET_C=$?      RET_C=$?
826      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
827        program hello        program hello
# Line 849  void FC_NAMEMANGLE(setrlstk) () Line 869  void FC_NAMEMANGLE(setrlstk) ()
869      return;      return;
870  }  }
871  EOF  EOF
872      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
873        echo $COMM >> genmake_warnings
874        $COMM >> genmake_warnings 2>&1
875      RET_C=$?      RET_C=$?
876      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
877        program hello        program hello
# Line 893  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 915  void FC_NAMEMANGLE(tfsize) ( int *nbyte
915          *nbyte = -1;          *nbyte = -1;
916  }  }
917  EOF  EOF
918      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
919        echo $COMM >> genmake_warnings
920        $COMM >> genmake_tc.log 2>&1
921      RET_C=$?      RET_C=$?
922      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
923        program hello        program hello
# Line 983  EOF Line 1007  EOF
1007          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
1008              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
1009              HAVE_NETCDF=t              HAVE_NETCDF=t
1010            else
1011            # try again with "-lnetcdff" added to the libs
1012                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1013                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1014                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1015                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1016                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1017                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1018                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1019                RET_COMPILE=$?
1020                cat genmake_tnc.log >> genmake_warnings
1021                if test "x$RET_COMPILE" = x0 ; then
1022                    LIBS="$LIBS -lnetcdff -lnetcdf"
1023                    HAVE_NETCDF=t
1024                fi
1025          fi          fi
1026      fi      fi
1027      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 1011  ENABLE= Line 1050  ENABLE=
1050  DISABLE=  DISABLE=
1051  # MAKEFILE=  # MAKEFILE=
1052  # MAKEDEPEND=  # MAKEDEPEND=
1053  PDEPEND=  PKG_DEPEND=
1054    PKG_GROUPS=
1055  DUMPSTATE=t  DUMPSTATE=t
 PDEFAULT=  
1056  OPTFILE=  OPTFILE=
1057  INCLUDES="-I. $INCLUDES"  INCLUDES="-I. $INCLUDES"
1058  FFLAGS=  FFLAGS=
1059  FOPTIM=  FOPTIM=
1060    FEXTRAFLAGS=
1061    USE_EXTENDED_SRC=
1062    EXTENDED_SRC_FLAG=
1063  CFLAGS=  CFLAGS=
1064  KFLAGS1=  KFLAGS1=
1065  KFLAGS2=  KFLAGS2=
# Line 1028  NOOPTFILES= Line 1070  NOOPTFILES=
1070  NOOPTFLAGS=  NOOPTFLAGS=
1071  MPI=  MPI=
1072  MPIPATH=  MPIPATH=
1073    OMP=
1074    OMPFLAG=
1075    USE_R4=
1076  TS=  TS=
1077  PAPIS=  PAPIS=
1078  PCLS=  PCLS=
# Line 1036  PAPI= Line 1081  PAPI=
1081  PCL=  PCL=
1082  HPMT=  HPMT=
1083  GSL=  GSL=
1084    DEVEL=
1085  HAVE_TEST_L=  HAVE_TEST_L=
1086    
1087  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 1091  FTL_TAF_FLAGS= Line 1137  FTL_TAF_FLAGS=
1137  SVD_TAMC_FLAGS=  SVD_TAMC_FLAGS=
1138  TAMC_EXTRA=  TAMC_EXTRA=
1139    
   
1140  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1141  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS MAKEFILE MAKEDEPEND PLATFORM ROOTDIR MODS DISABLE ENABLE"
1142  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"
1143    
1144  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1145  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
1146  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"
1147  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD THISHOST THISUSER THISDATE THISVER MACHINE"
1148  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1149  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"  gm_s7="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME"
1150    
1151  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1152  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
# Line 1122  quick list of options, use "genmake -h" Line 1167  quick list of options, use "genmake -h"
1167    
1168  EOF  EOF
1169    
1170    #- clean-up previous genmake logfiles:
1171    rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
1172    
1173  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1174  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  
1175  printf "  getting local config information:  "  printf "  getting local config information:  "
1176  if test -f $gm_local ; then  if test -f $gm_local ; then
1177      echo "using $gm_local"      echo "using $gm_local"
# Line 1141  else Line 1183  else
1183  fi  fi
1184    
1185  #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  
1186  #parse_options  #parse_options
1187  ac_prev=  ac_prev=
1188  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1162  for ac_option in "$@" ; do Line 1195  for ac_option in "$@" ; do
1195          ac_prev=          ac_prev=
1196          continue          continue
1197      fi      fi
1198        
1199      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1200        
1201      case $ac_option in      case $ac_option in
1202                    
1203          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 1183  for ac_option in "$@" ; do Line 1216  for ac_option in "$@" ; do
1216              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
1217                    
1218          -pdepend | --pdepend)          -pdepend | --pdepend)
1219              ac_prev=PDEPEND ;;              ac_prev=PKG_DEPEND ;;
1220          -pdepend=* | --pdepend=*)          -pdepend=* | --pdepend=*)
1221              PDEPEND=$ac_optarg ;;              PKG_DEPEND=$ac_optarg ;;
1222                    
1223          -pdefault | --pdefault)          -pgroups | --pgroups)
1224              ac_prev=PDEFAULT ;;              ac_prev=PKG_GROUPS ;;
1225          -pdefault=* | --pdefault=*)          -pgroups=* | --pgroups=*)
1226              PDEFAULT=$ac_optarg ;;              PKG_GROUPS=$ac_optarg ;;
1227                    
1228          -make | --make | -m | --m)          -make | --make | -m | --m)
1229              ac_prev=MAKE ;;              ac_prev=MAKE ;;
# Line 1274  for ac_option in "$@" ; do Line 1307  for ac_option in "$@" ; do
1307          -noieee | --noieee)          -noieee | --noieee)
1308              IEEE= ;;              IEEE= ;;
1309    
1310            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1311                USE_R4=true ;;
1312    
1313          -ts | --ts)          -ts | --ts)
1314              TS=true ;;              TS=true ;;
1315          -papis | --papis)          -papis | --papis)
# Line 1292  for ac_option in "$@" ; do Line 1328  for ac_option in "$@" ; do
1328          -gsl | --gsl)          -gsl | --gsl)
1329              GSL=true ;;              GSL=true ;;
1330    
1331            -devel | --devel)
1332                DEVEL=true ;;
1333    
1334          -mpi | --mpi)          -mpi | --mpi)
1335              MPI=true ;;              MPI=true ;;
1336          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
1337              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1338              MPI=true ;;              MPI=true ;;
1339                    
1340  #       -jam | --jam)          -omp | --omp)
1341  #           JAM=1 ;;              OMP=true ;;
1342  #       -nojam | --nojam)          -omp=* | --omp=*)
1343  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1344                OMP=true ;;
1345                    
1346          -ds | --ds)          -ds | --ds)
1347              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1333  for ac_option in "$@" ; do Line 1373  for ac_option in "$@" ; do
1373              ;;              ;;
1374                    
1375      esac      esac
1376        
1377  done  done
1378    
1379    
1380  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1381      echo      echo
1382      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1383      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1384      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1385      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1386        echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1387        echo "WARNING: ignore \"./.genmakerc\" and continue."
1388      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  
1389  fi  fi
1390    
1391  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
# Line 1377  if test ! -d ${ROOTDIR} ; then Line 1416  if test ! -d ${ROOTDIR} ; then
1416  fi  fi
1417    
1418  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1419  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1420      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1421        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1422    #-  remove ./BUILD_INFO.h file if older than version_file
1423        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1424            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1425            rm -f ./BUILD_INFO.h
1426        fi
1427  fi  fi
1428    
1429  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1534  if test ! "x$MPI" = x ; then Line 1579  if test ! "x$MPI" = x ; then
1579        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1580        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1581  fi  fi
1582    if test ! "x$OMP" = x ; then
1583          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1584          FFLAGS="$FFLAGS $OMPFLAG"
1585          F90FLAGS="$F90FLAGS $OMPFLAG"
1586          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1587    fi
1588    
1589    if test ! "x$USE_R4" = x ; then
1590          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1591          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1592    fi
1593    
1594  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1595        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
# Line 1542  if test ! "x$TS" = x ; then Line 1598  if test ! "x$TS" = x ; then
1598        else        else
1599              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1600        fi        fi
1601          PACKAGES="$PACKAGES showflops"
1602  fi  fi
1603  if test ! "x$PAPIS" = x ; then  if test ! "x$PAPIS" = x ; then
1604        echo "  Turning on PAPI flop summary per timestep"        echo "  Turning on PAPI flop summary per timestep"
# Line 1553  if test ! "x$PAPIS" = x ; then Line 1610  if test ! "x$PAPIS" = x ; then
1610        fi        fi
1611        INCLUDES="$INCLUDES $PAPIINC"        INCLUDES="$INCLUDES $PAPIINC"
1612        LIBS="$LIBS $PAPILIB"        LIBS="$LIBS $PAPILIB"
1613          PACKAGES="$PACKAGES showflops"
1614  fi  fi
1615  if test ! "x$PCLS" = x ; then  if test ! "x$PCLS" = x ; then
1616        echo "  Turning on PCL counter summary per timestep"        echo "  Turning on PCL counter summary per timestep"
# Line 1564  if test ! "x$PCLS" = x ; then Line 1622  if test ! "x$PCLS" = x ; then
1622        fi        fi
1623        INCLUDES="$INCLUDES $PCLINC"        INCLUDES="$INCLUDES $PCLINC"
1624        LIBS="$LIBS $PCLLIB"        LIBS="$LIBS $PCLLIB"
1625          PACKAGES="$PACKAGES showflops"
1626  fi  fi
1627  if test ! "x$PAPI" = x ; then  if test ! "x$PAPI" = x ; then
1628        if test ! "x$PAPIS" = x ; then        if test ! "x$PAPIS" = x ; then
# Line 1612  if test ! "x$GSL" = x ; then Line 1671  if test ! "x$GSL" = x ; then
1671        INCLUDES="$INCLUDES $GSLINC"        INCLUDES="$INCLUDES $GSLINC"
1672        LIBS="$LIBS $GSLLIB"        LIBS="$LIBS $GSLLIB"
1673  fi  fi
1674    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1675    if test ! "x$USE_EXTENDED_SRC" = x ; then
1676          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1677          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1678    fi
1679    
1680  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1681  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
# Line 1734  fi Line 1798  fi
1798    
1799    
1800  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1801  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1802  for d in $MODS ; do  for d in $MODS ; do
1803      if test ! -d $d ; then      if test ! -d $d ; then
1804          echo          echo
1805          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1806          exit 1          exit 1
1807      else      else
1808          printf " $d"          printf "$d "
1809          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1810          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1811      fi      fi
# Line 1790  ERROR: neither of the two default script Line 1854  ERROR: neither of the two default script
1854      ${TOOLSDIR}/set64bitConst.sh      ${TOOLSDIR}/set64bitConst.sh
1855      ${TOOLSDIR}/set64bitConst.csh      ${TOOLSDIR}/set64bitConst.csh
1856    
1857    are working so please check paths or specify (with \$S64) a    are working so please check paths or specify (with \$S64) a
1858    working version of this script.    working version of this script.
1859    
1860  EOF  EOF
# Line 1802  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD Line 1866  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD
1866    
1867  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1868    
1869    #  Set Standard Code Directories:
1870    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1871        STANDARDDIRS="eesupp model"
1872    fi
1873    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1874    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1875    ckM=$?
1876    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1877    ckE=$?
1878    if test $ckM = 0 -a $ckE = 1 ; then
1879        STANDARDDIRS="$STANDARDDIRS eesupp"
1880    fi
1881    
1882  #  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
1883  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1884  #  they appear as regular source code  #  they appear as regular source code
1885  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1886      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1887      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
1888        ) > make_eesupp.errors 2>&1
1889      RETVAL=$?      RETVAL=$?
1890      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1891          rm -f make_eesupp.errors          rm -f make_eesupp.errors
# Line 1822  fi Line 1900  fi
1900  for pdir in exch2 regrid ; do  for pdir in exch2 regrid ; do
1901      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1902          echo "  Making source files in pkg/${pdir} from templates"          echo "  Making source files in pkg/${pdir} from templates"
1903          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
1904            ) > make_${pdir}.errors 2>&1
1905          RETVAL=$?          RETVAL=$?
1906          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
1907              rm -f make_${pdir}.errors              rm -f make_${pdir}.errors
# Line 1835  for pdir in exch2 regrid ; do Line 1914  for pdir in exch2 regrid ; do
1914  done  done
1915    
1916  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1917  if  test "x${PDEPEND}" = x ; then  if  test "x${PKG_DEPEND}" = x ; then
1918      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
1919      if test -r $tmp ; then      if test -r $tmp ; then PKG_DEPEND=$tmp ; fi
1920          PDEPEND=$tmp  fi
1921      else  if  test "x${PKG_DEPEND}" = x ; then
1922          echo "Warning:  No package dependency information was specified."          echo "Warning:  No package dependency information was specified."
1923          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."
     fi  
1924  else  else
1925      if test ! -r ${PDEPEND} ; then      if test ! -r ${PKG_DEPEND} ; then
1926          echo "Error:  can't read package dependency info from PDEPEND=\"$PDEPEND\""          echo "Error:  can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\""
1927          exit 1          exit 1
1928      fi      fi
1929        echo "  getting package dependency info from  $PKG_DEPEND"
1930    #  Strip the comments and then convert the dependency file into arrays: PNAME, DNAME
1931        get_pdepend_list $PKG_DEPEND
1932  fi  fi
1933  echo "  getting package dependency info from  $PDEPEND"  
1934  #  Strip the comments and then convert the dependency file into  # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided
1935  #  two arrays: PNAME, DNAME  #  to define the "default_pkg_list" and package groups (for convenience, one
1936  cat $PDEPEND | sed -e 's/#.*$//g' \  #  can specify a group of packages using names like "ocean" and "atmosphere").
1937      | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \  if test "x${PKG_GROUPS}" = x ; then
1938      > ./.pd_tmp      tmp=$ROOTDIR"/pkg/pkg_groups"
1939  RETVAL=$?      if test -r $tmp ; then PKG_GROUPS=$tmp ; fi
1940  if test ! "x${RETVAL}" = x0 ; then  fi
1941      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  if test "x${PKG_GROUPS}" = x ; then
1942      exit 1          echo "Warning:  No package groups information was specified."
1943            echo "  Please check that ROOTDIR/pkg/pkg_groups exists."
1944    else
1945        if test ! -r ${PKG_GROUPS} ; then
1946            echo "Error:  can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\""
1947            exit 1
1948        fi
1949        echo "  getting package groups info from      $PKG_GROUPS"
1950  fi  fi
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1951    
1952  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for packages to compile.
1953  #  file should eventually be added so that, for convenience, one can  echo "  checking list of packages to compile:"
1954  #  specify groups of packages using names like "ocean" and "atmosphere".  PKG_LIST=
1955  echo "  checking default package list:  "  if test "x${PKG_LIST}" = x ; then
 if test "x${PDEFAULT}" = x ; then  
1956      for i in "." $MODS ; do      for i in "." $MODS ; do
1957          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
1958                  PDEFAULT=$i"/packages.conf"                  PKG_LIST=$i"/packages.conf"
1959                  break                  break
1960          fi          fi
1961      done      done
1962  fi  fi
1963  if test "x${PDEFAULT}" = x ; then  if test "x${PKG_LIST}" = x ; then
1964      PDEFAULT="$ROOTDIR/pkg/pkg_default"      pkg_list='default_pkg_list'
1965  fi      if test "x${PKG_GROUPS}" = x ; then
1966  if test "x${PDEFAULT}" = xNONE ; then          echo "Error:  need package groups info to expand pkg_list=\"$pkg_list\""
1967      echo "    default packages file disabled"          exit 1
1968        fi
1969  else  else
1970      if test ! -r $PDEFAULT ; then      if test ! -r $PKG_LIST ; then
1971          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Error:  can't read package list from PKG_LIST=\"$PKG_LIST\""
1972            exit 1
1973      else      else
1974          echo "    using PDEFAULT=\"$PDEFAULT\""          echo "    using PKG_LIST=\"$PKG_LIST\""
1975          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1976          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          pkg_list=`cat $PKG_LIST | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1977          RETVAL=$?          RETVAL=$?
1978          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1979              printf "Error: can't parse default package list "              printf "Error: can't parse package list "
1980              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PKG_LIST=\"$PKG_LIST\""
1981              exit 1              exit 1
1982          fi          fi
         for i in $def ; do  
             PACKAGES="$PACKAGES $i"  
         done  
         echo "    before group expansion packages are: $PACKAGES"  
         RET=1  
         while test $RET = 1 ; do expand_pkg_groups; RET=$?; done  
         echo "    after group expansion packages are:  $PACKAGES"  
1983      fi      fi
1984  fi  fi
1985    for i in $pkg_list ; do
1986        PACKAGES="$PACKAGES $i"
1987    done
1988    echo     "    before group expansion packages are:$PACKAGES"
1989    if test "x${PKG_GROUPS}" != x ; then
1990        RET=1
1991        while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1992        echo "    after group expansion packages are: $PACKAGES"
1993    fi
1994    
1995  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1996    echo "" > ./.tmp_pack
1997  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1998      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1999  done  done
# Line 1931  PACKAGES="$PACKAGES $ENABLE" Line 2021  PACKAGES="$PACKAGES $ENABLE"
2021  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2022      j=`echo $i | sed 's/[-+]//'`      j=`echo $i | sed 's/[-+]//'`
2023      if test ! -d "$ROOTDIR/pkg/$j" ; then      if test ! -d "$ROOTDIR/pkg/$j" ; then
2024          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
2025          exit 1          exit 1
2026      fi      fi
2027      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
# Line 1941  for i in `grep -v "-" ./.tmp_pack | sort Line 2031  for i in `grep -v "-" ./.tmp_pack | sort
2031      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2032  done  done
2033  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2034  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2035    
2036  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2037  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2038  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2039  RETVAL=$?  mnc_in=$?
2040  if test "x$RETVAL" = x0 ; then  if test "x$HAVE_NETCDF" != xt ; then
2041      if test "x$HAVE_NETCDF" != xt ; then      if test "x$mnc_in" = x0 ; then
2042          cat <<EOF          cat <<EOF
   
2043  *********************************************************************  *********************************************************************
2044  WARNING: the "mnc" package was enabled but tests failed to compile  WARNING: the "mnc" package was enabled but tests failed to compile
2045    NetCDF applications.  Please check that:    NetCDF applications.  Please check that:
2046    
2047    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2048    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2049         NetCDF library to link against.         NetCDF library to link against.
2050    
2051    Due to this failure, the "mnc" package is now DISABLED.    Due to this failure, the "mnc" package is now DISABLED.
2052  *********************************************************************  *********************************************************************
   
2053  EOF  EOF
2054          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2055          DISABLE="$DISABLE mnc"          DISABLE="$DISABLE mnc"
2056      else      else
2057          ( 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
2058          RETVAL=$?          DISABLE="$DISABLE mnc"
2059          if test "x${RETVAL}" = x0 ; then      fi
2060              rm -f make_mnc.errors  else
2061        # we have NetCDF, we try to build MNC template files
2062        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2063        RETVAL=$?
2064        if test "x${RETVAL}" = x0 ; then
2065            rm -f make_mnc.errors
2066        else
2067            echo "Error: problem encountered while building source files in pkg/mnc:"
2068            cat make_mnc.errors 1>&2
2069            if test "x$mnc_in" = x0 ; then
2070                exit 1
2071          else          else
2072              echo "Error: problem encountered while building source files in pkg/mnc:"              DISABLE="$DISABLE mnc"
             cat make_mnc.errors 1>&2  
             exit 1  
2073          fi          fi
2074      fi      fi
2075  fi  fi
2076    
2077  echo "  applying package dependency rules"  #  Check for package PROFILES: if NetCDF is not available,
2078  ck=  #  then delete profiles from the list of available packages.
2079  while test "x$ck" != xtt ; do  if test "x$HAVE_NETCDF" != xt ; then
2080        echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2081        RETVAL=$?
2082        if test "x$RETVAL" = x0 ; then
2083            cat <<EOF
2084    *********************************************************************
2085    WARNING: the "profiles" package was enabled but tests failed to
2086      compile NetCDF applications.  Please check that:
2087    
2088      1) NetCDF is correctly installed for this compiler and
2089      2) the LIBS variable (within the "optfile") specifies the correct
2090           NetCDF library to link against.
2091    
2092      Due to this failure, the "profiles" package is now DISABLED.
2093    *********************************************************************
2094    EOF
2095            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2096            DISABLE="$DISABLE profiles"
2097        else
2098        #  this prevent to add profiles (due to pdepend rules) if not available
2099            DISABLE="$DISABLE profiles"
2100        fi
2101    fi
2102    
2103    if  test "x${PKG_DEPEND}" != x ; then
2104      echo "  applying package dependency rules"
2105      ck=
2106      while test "x$ck" != xtt ; do
2107      i=0      i=0
2108      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2109      rtot=$nname      rtot=$nname
2110      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2111    
2112          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2113          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1996  while test "x$ck" != xtt ; do Line 2119  while test "x$ck" != xtt ; do
2119                  pin="t"                  pin="t"
2120              fi              fi
2121          done          done
2122            #  or in the current $STANDARDDIRS list?
2123            for p in $STANDARDDIRS ; do
2124                if test "x$p" = "x$pname" ; then pin="t" ; fi
2125            done
2126    
2127          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2128          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 2018  while test "x$ck" != xtt ; do Line 2145  while test "x$ck" != xtt ; do
2145    
2146          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2147          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
2148                #echo "   " $pname ": need to add :" $dname
2149              in_dis="f"              in_dis="f"
2150              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2151                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 2038  while test "x$ck" != xtt ; do Line 2166  while test "x$ck" != xtt ; do
2166          #  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?
2167          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
2168              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2169              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2170              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2171              exit 1              exit 1
2172          fi          fi
# Line 2046  while test "x$ck" != xtt ; do Line 2174  while test "x$ck" != xtt ; do
2174          #i=$(( $i + 1 ))          #i=$(( $i + 1 ))
2175      done      done
2176      ck=$ck"t"      ck=$ck"t"
2177  done    done
2178  echo "    packages are:  $PACKAGES"    echo "    packages are: $PACKAGES"
2179    fi
2180  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2181      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2182      if test -d $adr ; then      if test -d $adr ; then
# Line 2064  done Line 2193  done
2193    
2194  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2195  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2196  #  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
2197  #  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
2198  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2199  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2200  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 2093  for i in $PACKAGES ; do Line 2222  for i in $PACKAGES ; do
2222  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2223    
2224  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2225      case $i in      case $i in
2226          aim_v23)          aim_v23)
2227              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2228              echo "Warning: ALLOW_AIM is set to enable aim_v23."              echo "Warning: ALLOW_AIM is set to enable aim_v23."
# Line 2103  for i in $PACKAGES ; do Line 2232  for i in $PACKAGES ; do
2232    
2233  done  done
2234    
2235  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2236  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2237  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2238      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2239          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 2162  fi Line 2288  fi
2288    
2289  #  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
2290  #  compiler.  #  compiler.
2291  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2292      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2293  fi  fi
2294  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2295    touch adSrcFiles.tmp
2296  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2297      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2298      for j in $list_files ; do      for j in $list_files ; do
2299          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2300      done      done
2301  done  done
2302  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2303      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2304      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2305  fi  fi
2306    
2307  echo  echo
# Line 2198  if test ! "x$DIVA" = x ; then Line 2325  if test ! "x$DIVA" = x ; then
2325          fi          fi
2326          MPIINCLUDEDIR='$MPIHOME/include'          MPIINCLUDEDIR='$MPIHOME/include'
2327      fi      fi
2328        
2329      if test -r $MPIINCLUDEDIR/mpif.h ; then      if test -r $MPIINCLUDEDIR/mpif.h ; then
2330          for i in $MPI_HEADER_FILES; do          for i in $MPI_HEADER_FILES; do
2331              cp -p $MPIINCLUDEDIR/$i ./mpi_headers              cp -p $MPIINCLUDEDIR/$i ./mpi_headers
# Line 2232  if test ! -r ".links.tmp/foo" ; then Line 2359  if test ! -r ".links.tmp/foo" ; then
2359      exit 1      exit 1
2360  fi  fi
2361  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2362    
2363    if test "x$OPENAD" != x ; then
2364        OAD_DONT_COMPILE="/dev/null"
2365        OAD_DONT_TRANSFORM="/dev/null"
2366        OAD_KEEP_ORIGINAL="/dev/null"
2367        OAD_CB2M_FILES="/dev/null"
2368        echo "  looking for dontCompile file:  "
2369        for i in "." $MODS ; do
2370            if test -r $i"/dontCompile" ; then
2371                OAD_DONT_COMPILE=$i"/dontCompile"
2372                echo "     found $OAD_DONT_COMPILE"
2373                break
2374            fi
2375        done
2376        echo "  looking for dontTransform file:  "
2377        for i in "." $MODS ; do
2378            if test -r $i"/dontTransform" ; then
2379                OAD_DONT_TRANSFORM=$i"/dontTransform"
2380                echo "     found $OAD_DONT_TRANSFORM"
2381                break
2382            fi
2383        done
2384        echo "  looking for keepOriginal file:  "
2385        for i in "." $MODS ; do
2386            if test -r $i"/keepOriginal" ; then
2387                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2388                echo "     found $OAD_KEEP_ORIGINAL"
2389                break
2390            fi
2391        done
2392        echo "  looking for cb2mFiles:  "
2393        for i in "." $MODS ; do
2394            if test -r $i"/cb2mFiles" ; then
2395                OAD_CB2M_FILES=$i"/cb2mFiles"
2396                echo "     found $OAD_CB2M_FILES"
2397                break
2398            fi
2399        done
2400        echo "   OpenAD exceptions:  "
2401    fi
2402    
2403  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2404  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2405  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2406  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2407  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2408  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2409  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2410    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2411  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2412  for d in $alldirs ; do  for d in $alldirs ; do
2413      deplist=      deplist=
2414      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2415      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2416        if test "x$OPENAD" != x ; then
2417            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2418        fi
2419      for sf in $sfiles ; do      for sf in $sfiles ; do
2420          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2421              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
# Line 2278  for d in $alldirs ; do Line 2450  for d in $alldirs ; do
2450                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2451                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2452                      case $extn in                      case $extn in
2453                          F)                        F)
2454                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2455                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2456                              ;;                          if test "x$OPENAD" != x ; then
2457                          F90)                              basename=${sf%%.F}
2458                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2459                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2460                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2461                          c)                                  if test -z "$toBeIgnored" ; then
2462                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2463                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2464                              ;;                                  else
2465                          h)                                      echo "    not to be compiled   :  $sf"
2466                              echo    " \\"  >> hlist.inc                                  fi
2467                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2468                              ;;                                   # or we want to retain the untransformed version
2469                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2470                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2471                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2472                              ;;                                      echo "    not to be transformed:  $sf"
2473                      esac                                  fi
2474                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2475                                        echo "    original to be kept  :  $sf"
2476                                    fi
2477                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2478                                        echo    " \\"  >> nonADF77srclist.tmp
2479                                        printf " $sf" >> nonADF77srclist.tmp
2480                                    fi
2481                                fi
2482                            fi
2483                            ;;
2484                        F90)
2485                            echo    " \\"  >> F90srclist.tmp
2486                            printf " $sf" >> F90srclist.tmp
2487                            ;;
2488                        c)
2489                            echo    " \\"  >> csrclist.tmp
2490                            printf " $sf" >> csrclist.tmp
2491                            ;;
2492                        h)
2493                            echo    " \\"  >> hsrclist.tmp
2494                            printf " $sf" >> hsrclist.tmp
2495                            ;;
2496                        flow)
2497                            echo    " \\"  >> ad_flow_files.tmp
2498                            printf " $sf" >> ad_flow_files.tmp
2499                            ;;
2500                       esac
2501                    fi
2502              fi              fi
2503          fi          fi
2504      done      done
2505      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2506          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2507            echo "" >> srclinks.tmp
2508          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2509          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2510          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2511    # This may happen when make thinks that a header file has to be "remade"
2512    # because a module it depends on has changed.  In this case we do nothing.
2513            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2514          fi
2515      fi      fi
2516  done  done
2517  rm -rf .links.tmp  rm -rf .links.tmp
2518  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2519  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2520  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2521  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2522  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2523    echo "" >> ad_flow_files.tmp
2524    
2525    CMDLINE=$0
2526    for xx in "$@" ; do nw=`echo $xx | wc -w`
2527        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2528                            else CMDLINE="$CMDLINE '$xx'" ; fi
2529    done
2530    
2531  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2532      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2533  fi  fi
2534  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2535  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 2326  echo "#    $MACHINE" >> $MAKEFILE Line 2537  echo "#    $MACHINE" >> $MAKEFILE
2537  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2538  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2539  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2540  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2541  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2542  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2543    
# Line 2337  EXE_SVD=$EXECUTABLE"_svd" Line 2548  EXE_SVD=$EXECUTABLE"_svd"
2548  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2549  #  #
2550  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2551  #  #
2552  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2553  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2554  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 2357  cat >>$MAKEFILE <<EOF Line 2568  cat >>$MAKEFILE <<EOF
2568  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2569    
2570  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2571  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2572  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2573  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2574  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 2383  else Line 2594  else
2594      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2595  fi  fi
2596    
 #  Note: figure out some way to add Hyades JAM libraries here  
2597  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2598  # Unix ln (link)  # Unix ln (link)
2599  LN = ${LN}  LN = ${LN}
# Line 2410  INCLUDES = ${INCLUDES} Line 2620  INCLUDES = ${INCLUDES}
2620  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2621  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2622  # Optim./debug for FC  # Optim./debug for FC
2623  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2624  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2625  # Optim./debug for FC  # Optim./debug for FC
2626  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2627  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2628    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2629  # Flags for CC  # Flags for CC
2630  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2631  # Files that should not be optimized  # Files that should not be optimized
# Line 2427  MAKEFILE=${MAKEFILE} Line 2638  MAKEFILE=${MAKEFILE}
2638    
2639  EOF  EOF
2640    
2641  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2642  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2643  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2644  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2645  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2646    cat ad_flow_files.tmp   >> $MAKEFILE
2647    
2648    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2649    
2650  echo >> $MAKEFILE  echo >> $MAKEFILE
2651  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2652  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2653  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2654    # hence the $FS and $FS90 here.
2655    # for fixed format f90 files we use ff90 or FF90 resp
2656    # but these are not expected to be the original source files
2657    
2658    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2659    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2660    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2661    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2662  echo >> $MAKEFILE  echo >> $MAKEFILE
2663  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2664  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  
2665    
2666  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2667    
2668  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2669  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2670          @echo Creating \$@ ...          @echo Creating \$@ ...
2671          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2672  depend:  depend:
2673          @make links          @make links
2674          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2675          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2676          -rm -f makedepend.out          -rm -f makedepend.out
2677    
# Line 2458  lib: libmitgcmuv.a Line 2679  lib: libmitgcmuv.a
2679    
2680  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2681          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2682            ar d   libmitgcmuv.a main.o
2683    
2684  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2685    
2686  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2687    
2688  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2689          @printf 'running ... '          @printf 'running ... '
# Line 2470  output.txt: \$(EXECUTABLE) Line 2692  output.txt: \$(EXECUTABLE)
2692  clean:  clean:
2693          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2694          -rm -rf *.o          -rm -rf *.o
2695          -rm -rf *.$FS          -rm -rf *.$FS *.flowdir
2696            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2697  Clean:  Clean:
2698          @make clean          @make clean
2699          @make cleanlinks          @make cleanlinks
2700          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2701          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2702            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2703  CLEAN:  CLEAN:
2704          @make Clean          @make Clean
2705            -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2706          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2707          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2708          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2709          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2710            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2711          -rm -rf mnc_test_*          -rm -rf mnc_test_*
2712    
2713  #eh3 Makefile: makefile  #eh3 Makefile: makefile
# Line 2490  makefile: Line 2716  makefile:
2716  cleanlinks:  cleanlinks:
2717          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2718    
2719  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2720  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2721          @echo Creating \$@ ...          @echo Creating \$@ ...
2722          @$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 2515  if test "x$EMBED_SRC" = xt ; then Line 2741  if test "x$EMBED_SRC" = xt ; then
2741    
2742  decode_files.o : EMBEDDED_FILES.h  decode_files.o : EMBEDDED_FILES.h
2743    
2744  ##  \$(F77FILES)  ##  \$(F77_PP_SRC_FILES)
2745  all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile  all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2746          @echo Creating \$@ ...          @echo Creating \$@ ...
2747          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2748          -rm -f all_fF.tar.gz          -rm -f all_fF.tar.gz
2749          -gzip all_fF.tar          -gzip all_fF.tar
2750    
# Line 2542  cat >>$MAKEFILE <<EOF Line 2768  cat >>$MAKEFILE <<EOF
2768          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2769  .F90.$FS90:  .F90.$FS90:
2770          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2771    .FF90.f$FS90:
2772            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2773  .$FS90.o:  .$FS90.o:
2774          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2775    .f$FS90.o:
2776            cp \$< \$(basename  \$<).f90
2777            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2778  .c.o:  .c.o:
2779          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2780    .flow.flowdir:
2781            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2782    
2783  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2784  .F.p:  .F.p:
# Line 2553  cat >>$MAKEFILE <<EOF Line 2786  cat >>$MAKEFILE <<EOF
2786  .p.$FS:  .p.$FS:
2787          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2788    
2789    EOF
2790    
2791  #=========================================  #=========================================
2792  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2793    #===  for TAMC/TAF  ======================
2794    
2795    if test "x$OPENAD" = x ; then
2796    
2797    cat >>$MAKEFILE <<EOF
2798    
2799  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2800  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2578  done Line 2818  done
2818  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2819  echo >> $MAKEFILE  echo >> $MAKEFILE
2820  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2821  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2822  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2823      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2824      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2825  done  done
2826  echo >> $MAKEFILE  echo >> $MAKEFILE
2827  rm -f ad_files  rm -f adSrcFiles.tmp
2828    
2829  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2830    
# Line 2593  adall: \$(EXE_AD) Line 2833  adall: \$(EXE_AD)
2833  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2834  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2835    
2836  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2837          @$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
2838          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
2839          -rm -f ad_config.template          -rm -f ad_config.template
2840          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2841          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2842          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2843    
2844  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2845          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2846            ls -l ad_input_code_ad.$FS
2847          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
2848    
2849  adtafonly:  adtafonly:
2850          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2851            ls -l ad_input_code_ad.$FS
2852          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
2853    
2854  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2855          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2856    
2857  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2858          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2859          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
2860    
2861  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2862          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2863    
2864  adonlyfwd:  adonlyfwd:
2865          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2866    
2867  adtrick:  adtrick:
2868          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2869    
# Line 2630  ftlall: ftl_taf Line 2872  ftlall: ftl_taf
2872  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2873  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2874    
2875  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2876          @$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
2877          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
2878          -rm -f ftl_config.template          -rm -f ftl_config.template
2879          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2880          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2881          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2882    
2883  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2884          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2885            ls -l ftl_input_code_ftl.$FS
2886          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
2887    
2888  ftltafonly:  ftltafonly:
2889          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2890            ls -l ftl_input_code_ftl.$FS
2891          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
2892    
2893  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2894          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2895    
2896  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
2897          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2898          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
2899    
2900  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2901          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2902    
2903    
2904  # ... SVD ...  # ... SVD ...
# Line 2681  svd_touch: Line 2925  svd_touch:
2925          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
2926          -rm -f ftl_config.template          -rm -f ftl_config.template
2927    
2928  #=========================================  EOF
2929    
2930    fi
2931    
2932    #===  for OpenAD  ========================
2933    
2934    if test "x$OPENAD" != x ; then
2935    
2936    # ============ begin OpenAD specific section ==============
2937    
2938    cat >>$MAKEFILE <<EOF
2939    
2940    # all the source files linked from the various locations:
2941    ALL_LINKED_FILES= \
2942    \$(F77_SRC_FILES) \
2943    \$(C_SRC_FILES) \
2944    \$(H_SRC_FILES) \
2945    \$(F90_SRC_FILES) \
2946    \$(SPECIAL_FILES)
2947    
2948    ifndef OPENADROOT
2949      \$(error "Error:  environment variable OPENADROOT not defined!")
2950    endif
2951    
2952    ifndef XAIFSCHEMAROOT
2953      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2954    endif
2955    
2956    ifndef XAIFBOOSTERROOT
2957      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2958    endif
2959    
2960    EOF
2961    
2962    echo "  Add the source list for common block to module conversion "
2963    echo >> $MAKEFILE
2964    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2965    for i in `cat ${OAD_CB2M_FILES}` ; do
2966      echo    " \\" >> $MAKEFILE
2967      printf " $i" >> $MAKEFILE
2968    done
2969    echo >> $MAKEFILE
2970    
2971    echo "  Add the source list for AD code generation"
2972    echo >> $MAKEFILE
2973    printf "AD_FILES = " >> $MAKEFILE
2974    for i in `cat ${OAD_CB2M_FILES}` ; do
2975      echo    " \\" >> $MAKEFILE
2976      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2977    done
2978    AD_FILES=`cat adSrcFiles.tmp`
2979    for i in $AD_FILES ; do
2980      basename=${i%%.f}
2981      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2982      if test -z "$toBeIgnored" ; then
2983        echo    " \\" >> $MAKEFILE
2984        printf " $i" >> $MAKEFILE
2985      fi
2986    done
2987    echo >> $MAKEFILE
2988    rm -f adSrcFiles.tmp
2989    
2990    cat >>$MAKEFILE <<EOF
2991    
2992    adAll: \$(EXE_AD)
2993    .PHONY: adAll
2994    
2995    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2996    
2997    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2998    
2999    .PHONY: adDepend
3000    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
3001            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
3002            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
3003            -rm -f makedepend.out
3004    
3005    OPENAD_SUPPORT_F90_SRC_FILES = \
3006    w2f__types.F90 \
3007    OAD_active.F90 \
3008    OAD_cp.F90 \
3009    OAD_rev.F90 \
3010    OAD_tape.F90
3011    
3012    OPENAD_SUPPORT_C_SRC_FILES = \
3013    iaddr.c \
3014    timeRatio.c
3015    
3016    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3017            cat \$^ > \$@
3018    
3019    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
3020            cat \$^ > \$@
3021    
3022    f95_test.out: f95_test_mods.f90 f95_test.f90
3023            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3024            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3025    
3026    # the file included below is created by the
3027    # postProcessor and its inclusion sets the
3028    # variable POSTPROCESSEDFILES
3029    # used below. Because the file is made during
3030    # make it won't be read until the second (recursive)
3031    # invocation in the rule below
3032    -include postProcess.make
3033    
3034    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3035    
3036    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)
3037    
3038    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3039    ifeq (\$(MAKELEVEL),0)
3040            \$(MAKE) adAll
3041    else
3042            touch \$@
3043    endif
3044    
3045    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3046    ifeq (\$(MAKELEVEL),1)
3047            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3048    else
3049            touch \$@
3050    endif
3051    
3052    # makefile debug rule
3053    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3054    .PHONY: openad
3055    
3056    # create the module files
3057    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3058            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3059    
3060    # create the header files
3061    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3062            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3063    
3064    # change everybody else to use the new module files:
3065    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3066            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3067    
3068    # makefile debug rule
3069    small_f: \$(CB2M_F90_PP_SRC_FILES)
3070    .PHONY: small_f
3071    
3072    ad_output.txt: \$(EXE_AD)
3073            @printf 'linking data files ... '
3074            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3075            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3076            @printf 'running ... '
3077            @./\$(EXE_AD) > \$@
3078    
3079    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3080    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3081            cat \$^ > \$@
3082    
3083    # strip all comments and blanks to reduce
3084    # the file size in order to reduce perl's memory requirements
3085    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3086            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3087    
3088    # mfef90 preprocessing
3089    # expand statement functions
3090    # expose mfef90 specific substring handling
3091    # add the w2f__types module
3092    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3093            ./mfef90 -r8 -z -F -N132 \$<
3094            mv \$<.B \$(basename \$<).B
3095            ./whirl2f -openad \$(basename \$<).B
3096            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3097    
3098    # canonicalizer
3099    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3100            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3101    
3102    # F -> WHIRL
3103    # note that the canonicalized version cuts off at col 72
3104    # doing this also for string constants which is ok as long
3105    # as we are in fixed mode and cut of exactly there.
3106    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3107    # characters respectively.
3108    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3109            ./mfef90 -r8 -z -F \$<
3110            mv \$<.B \$@
3111    
3112    # WHIRL -> XAIF
3113    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3114            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3115    
3116    # XAIF -> XAIF'
3117    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
3118            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3119    
3120    # XAIF' -> WHIRL'
3121    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3122            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3123    
3124    # WHIRL' -> F'
3125    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3126            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3127    
3128    # insert template directives
3129    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
3130            ../OAD_support/insertTemplateDir.bash \$< \$@
3131    
3132    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3133    # postprocess F'
3134    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3135            # the target is a placeholder to signal execution of the rule
3136            touch \$@
3137            # this step also creates the file postProcess.make but we cannot
3138            # name it as the target or else make will try to remake it for
3139            # the include directive above for any rule, e.g. make clean
3140            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3141    
3142    # setup some links
3143    %.xsd:
3144            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3145    
3146    mfef90:
3147            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3148    
3149    # link the support files:
3150    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3151            \$(LN) ../OAD_support/\$@ .
3152    
3153    whirl2xaif xaif2whirl:
3154            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3155    
3156    preProcess.py postProcess.py:
3157            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3158    
3159    whirl2f whirl2f_be:
3160            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3161    
3162    oadDriver:
3163            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3164    
3165    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3166    
3167    # ============ end OpenAD specific section ==============
3168    
3169  EOF  EOF
3170    
3171    fi
3172    
3173    #=========================================
3174    
3175  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3176      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3177  fi  fi
# Line 2720  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3207  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3207  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3208    
3209  # Create special header files  # Create special header files
3210  $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"
3211  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3212      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3213  else  else

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

  ViewVC Help
Powered by ViewVC 1.1.22