/[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.158 by heimbach, Thu Nov 23 05:23:05 2006 UTC revision 1.208 by jmc, Thu May 27 02:09:13 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 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 1124  EOF Line 1169  EOF
1169    
1170  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1171  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  
1172  printf "  getting local config information:  "  printf "  getting local config information:  "
1173  if test -f $gm_local ; then  if test -f $gm_local ; then
1174      echo "using $gm_local"      echo "using $gm_local"
# Line 1141  else Line 1180  else
1180  fi  fi
1181    
1182  #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  
1183  #parse_options  #parse_options
1184  ac_prev=  ac_prev=
1185  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1162  for ac_option in "$@" ; do Line 1192  for ac_option in "$@" ; do
1192          ac_prev=          ac_prev=
1193          continue          continue
1194      fi      fi
1195        
1196      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1197        
1198      case $ac_option in      case $ac_option in
1199                    
1200          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 1183  for ac_option in "$@" ; do Line 1213  for ac_option in "$@" ; do
1213              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
1214                    
1215          -pdepend | --pdepend)          -pdepend | --pdepend)
1216              ac_prev=PDEPEND ;;              ac_prev=PKG_DEPEND ;;
1217          -pdepend=* | --pdepend=*)          -pdepend=* | --pdepend=*)
1218              PDEPEND=$ac_optarg ;;              PKG_DEPEND=$ac_optarg ;;
1219                    
1220          -pdefault | --pdefault)          -pgroups | --pgroups)
1221              ac_prev=PDEFAULT ;;              ac_prev=PKG_GROUPS ;;
1222          -pdefault=* | --pdefault=*)          -pgroups=* | --pgroups=*)
1223              PDEFAULT=$ac_optarg ;;              PKG_GROUPS=$ac_optarg ;;
1224                    
1225          -make | --make | -m | --m)          -make | --make | -m | --m)
1226              ac_prev=MAKE ;;              ac_prev=MAKE ;;
# Line 1274  for ac_option in "$@" ; do Line 1304  for ac_option in "$@" ; do
1304          -noieee | --noieee)          -noieee | --noieee)
1305              IEEE= ;;              IEEE= ;;
1306    
1307            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1308                USE_R4=true ;;
1309    
1310          -ts | --ts)          -ts | --ts)
1311              TS=true ;;              TS=true ;;
1312          -papis | --papis)          -papis | --papis)
# Line 1292  for ac_option in "$@" ; do Line 1325  for ac_option in "$@" ; do
1325          -gsl | --gsl)          -gsl | --gsl)
1326              GSL=true ;;              GSL=true ;;
1327    
1328            -devel | --devel)
1329                DEVEL=true ;;
1330    
1331          -mpi | --mpi)          -mpi | --mpi)
1332              MPI=true ;;              MPI=true ;;
1333          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
1334              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1335              MPI=true ;;              MPI=true ;;
1336                    
1337  #       -jam | --jam)          -omp | --omp)
1338  #           JAM=1 ;;              OMP=true ;;
1339  #       -nojam | --nojam)          -omp=* | --omp=*)
1340  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1341                OMP=true ;;
1342                    
1343          -ds | --ds)          -ds | --ds)
1344              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1333  for ac_option in "$@" ; do Line 1370  for ac_option in "$@" ; do
1370              ;;              ;;
1371                    
1372      esac      esac
1373        
1374  done  done
1375    
1376    
1377  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1378      echo      echo
1379      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1380      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1381      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1382      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1383        echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1384        echo "WARNING: ignore \"./.genmakerc\" and continue."
1385      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  
1386  fi  fi
1387    
1388  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
# Line 1377  if test ! -d ${ROOTDIR} ; then Line 1413  if test ! -d ${ROOTDIR} ; then
1413  fi  fi
1414    
1415  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1416  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1417      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1418        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1419    #-  remove ./BUILD_INFO.h file if older than version_file
1420        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1421            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1422            rm -f ./BUILD_INFO.h
1423        fi
1424  fi  fi
1425    
1426  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1534  if test ! "x$MPI" = x ; then Line 1576  if test ! "x$MPI" = x ; then
1576        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1577        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1578  fi  fi
1579    if test ! "x$OMP" = x ; then
1580          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1581          FFLAGS="$FFLAGS $OMPFLAG"
1582          F90FLAGS="$F90FLAGS $OMPFLAG"
1583          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1584    fi
1585    
1586    if test ! "x$USE_R4" = x ; then
1587          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1588          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1589    fi
1590    
1591  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1592        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
# Line 1542  if test ! "x$TS" = x ; then Line 1595  if test ! "x$TS" = x ; then
1595        else        else
1596              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1597        fi        fi
1598          PACKAGES="$PACKAGES showflops"
1599  fi  fi
1600  if test ! "x$PAPIS" = x ; then  if test ! "x$PAPIS" = x ; then
1601        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 1607  if test ! "x$PAPIS" = x ; then
1607        fi        fi
1608        INCLUDES="$INCLUDES $PAPIINC"        INCLUDES="$INCLUDES $PAPIINC"
1609        LIBS="$LIBS $PAPILIB"        LIBS="$LIBS $PAPILIB"
1610          PACKAGES="$PACKAGES showflops"
1611  fi  fi
1612  if test ! "x$PCLS" = x ; then  if test ! "x$PCLS" = x ; then
1613        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 1619  if test ! "x$PCLS" = x ; then
1619        fi        fi
1620        INCLUDES="$INCLUDES $PCLINC"        INCLUDES="$INCLUDES $PCLINC"
1621        LIBS="$LIBS $PCLLIB"        LIBS="$LIBS $PCLLIB"
1622          PACKAGES="$PACKAGES showflops"
1623  fi  fi
1624  if test ! "x$PAPI" = x ; then  if test ! "x$PAPI" = x ; then
1625        if test ! "x$PAPIS" = x ; then        if test ! "x$PAPIS" = x ; then
# Line 1612  if test ! "x$GSL" = x ; then Line 1668  if test ! "x$GSL" = x ; then
1668        INCLUDES="$INCLUDES $GSLINC"        INCLUDES="$INCLUDES $GSLINC"
1669        LIBS="$LIBS $GSLLIB"        LIBS="$LIBS $GSLLIB"
1670  fi  fi
1671    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1672    if test ! "x$USE_EXTENDED_SRC" = x ; then
1673          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1674          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1675    fi
1676    
1677  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1678  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
# Line 1734  fi Line 1795  fi
1795    
1796    
1797  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1798  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1799  for d in $MODS ; do  for d in $MODS ; do
1800      if test ! -d $d ; then      if test ! -d $d ; then
1801          echo          echo
1802          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1803          exit 1          exit 1
1804      else      else
1805          printf " $d"          printf "$d "
1806          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1807          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1808      fi      fi
# Line 1790  ERROR: neither of the two default script Line 1851  ERROR: neither of the two default script
1851      ${TOOLSDIR}/set64bitConst.sh      ${TOOLSDIR}/set64bitConst.sh
1852      ${TOOLSDIR}/set64bitConst.csh      ${TOOLSDIR}/set64bitConst.csh
1853    
1854    are working so please check paths or specify (with \$S64) a    are working so please check paths or specify (with \$S64) a
1855    working version of this script.    working version of this script.
1856    
1857  EOF  EOF
# Line 1802  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD Line 1863  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD
1863    
1864  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1865    
1866    #  Set Standard Code Directories:
1867    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1868        STANDARDDIRS="eesupp model"
1869    fi
1870    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1871    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1872    ckM=$?
1873    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1874    ckE=$?
1875    if test $ckM = 0 -a $ckE = 1 ; then
1876        STANDARDDIRS="$STANDARDDIRS eesupp"
1877    fi
1878    
1879  #  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
1880  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1881  #  they appear as regular source code  #  they appear as regular source code
1882  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1883      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1884      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
1885        ) > make_eesupp.errors 2>&1
1886      RETVAL=$?      RETVAL=$?
1887      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1888          rm -f make_eesupp.errors          rm -f make_eesupp.errors
# Line 1822  fi Line 1897  fi
1897  for pdir in exch2 regrid ; do  for pdir in exch2 regrid ; do
1898      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1899          echo "  Making source files in pkg/${pdir} from templates"          echo "  Making source files in pkg/${pdir} from templates"
1900          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
1901            ) > make_${pdir}.errors 2>&1
1902          RETVAL=$?          RETVAL=$?
1903          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
1904              rm -f make_${pdir}.errors              rm -f make_${pdir}.errors
# Line 1835  for pdir in exch2 regrid ; do Line 1911  for pdir in exch2 regrid ; do
1911  done  done
1912    
1913  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1914  if  test "x${PDEPEND}" = x ; then  if  test "x${PKG_DEPEND}" = x ; then
1915      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
1916      if test -r $tmp ; then      if test -r $tmp ; then PKG_DEPEND=$tmp ; fi
1917          PDEPEND=$tmp  fi
1918      else  if  test "x${PKG_DEPEND}" = x ; then
1919          echo "Warning:  No package dependency information was specified."          echo "Warning:  No package dependency information was specified."
1920          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."
     fi  
1921  else  else
1922      if test ! -r ${PDEPEND} ; then      if test ! -r ${PKG_DEPEND} ; then
1923          echo "Error:  can't read package dependency info from PDEPEND=\"$PDEPEND\""          echo "Error:  can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\""
1924          exit 1          exit 1
1925      fi      fi
1926        echo "  getting package dependency info from  $PKG_DEPEND"
1927    #  Strip the comments and then convert the dependency file into arrays: PNAME, DNAME
1928        get_pdepend_list $PKG_DEPEND
1929  fi  fi
1930  echo "  getting package dependency info from  $PDEPEND"  
1931  #  Strip the comments and then convert the dependency file into  # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided
1932  #  two arrays: PNAME, DNAME  #  to define the "default_pkg_list" and package groups (for convenience, one
1933  cat $PDEPEND | sed -e 's/#.*$//g' \  #  can specify a group of packages using names like "ocean" and "atmosphere").
1934      | $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
1935      > ./.pd_tmp      tmp=$ROOTDIR"/pkg/pkg_groups"
1936  RETVAL=$?      if test -r $tmp ; then PKG_GROUPS=$tmp ; fi
1937  if test ! "x${RETVAL}" = x0 ; then  fi
1938      echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  if test "x${PKG_GROUPS}" = x ; then
1939      exit 1          echo "Warning:  No package groups information was specified."
1940            echo "  Please check that ROOTDIR/pkg/pkg_groups exists."
1941    else
1942        if test ! -r ${PKG_GROUPS} ; then
1943            echo "Error:  can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\""
1944            exit 1
1945        fi
1946        echo "  getting package groups info from      $PKG_GROUPS"
1947  fi  fi
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1948    
1949  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for packages to compile.
1950  #  file should eventually be added so that, for convenience, one can  echo "  checking list of packages to compile:"
1951  #  specify groups of packages using names like "ocean" and "atmosphere".  PKG_LIST=
1952  echo "  checking default package list:  "  if test "x${PKG_LIST}" = x ; then
 if test "x${PDEFAULT}" = x ; then  
1953      for i in "." $MODS ; do      for i in "." $MODS ; do
1954          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
1955                  PDEFAULT=$i"/packages.conf"                  PKG_LIST=$i"/packages.conf"
1956                  break                  break
1957          fi          fi
1958      done      done
1959  fi  fi
1960  if test "x${PDEFAULT}" = x ; then  if test "x${PKG_LIST}" = x ; then
1961      PDEFAULT="$ROOTDIR/pkg/pkg_default"      pkg_list='default_pkg_list'
1962  fi      if test "x${PKG_GROUPS}" = x ; then
1963  if test "x${PDEFAULT}" = xNONE ; then          echo "Error:  need package groups info to expand pkg_list=\"$pkg_list\""
1964      echo "    default packages file disabled"          exit 1
1965        fi
1966  else  else
1967      if test ! -r $PDEFAULT ; then      if test ! -r $PKG_LIST ; then
1968          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Error:  can't read package list from PKG_LIST=\"$PKG_LIST\""
1969            exit 1
1970      else      else
1971          echo "    using PDEFAULT=\"$PDEFAULT\""          echo "    using PKG_LIST=\"$PKG_LIST\""
1972          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1973          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}'`
1974          RETVAL=$?          RETVAL=$?
1975          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1976              printf "Error: can't parse default package list "              printf "Error: can't parse package list "
1977              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PKG_LIST=\"$PKG_LIST\""
1978              exit 1              exit 1
1979          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"  
1980      fi      fi
1981  fi  fi
1982    for i in $pkg_list ; do
1983        PACKAGES="$PACKAGES $i"
1984    done
1985    echo     "    before group expansion packages are:$PACKAGES"
1986    if test "x${PKG_GROUPS}" != x ; then
1987        RET=1
1988        while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1989        echo "    after group expansion packages are: $PACKAGES"
1990    fi
1991    
1992  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1993    echo "" > ./.tmp_pack
1994  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1995      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1996  done  done
# Line 1931  PACKAGES="$PACKAGES $ENABLE" Line 2018  PACKAGES="$PACKAGES $ENABLE"
2018  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2019      j=`echo $i | sed 's/[-+]//'`      j=`echo $i | sed 's/[-+]//'`
2020      if test ! -d "$ROOTDIR/pkg/$j" ; then      if test ! -d "$ROOTDIR/pkg/$j" ; then
2021          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
2022          exit 1          exit 1
2023      fi      fi
2024      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
# Line 1941  for i in `grep -v "-" ./.tmp_pack | sort Line 2028  for i in `grep -v "-" ./.tmp_pack | sort
2028      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2029  done  done
2030  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2031  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2032    
2033  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2034  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2035  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2036  RETVAL=$?  mnc_in=$?
2037  if test "x$RETVAL" = x0 ; then  if test "x$HAVE_NETCDF" != xt ; then
2038      if test "x$HAVE_NETCDF" != xt ; then      if test "x$mnc_in" = x0 ; then
2039          cat <<EOF          cat <<EOF
   
2040  *********************************************************************  *********************************************************************
2041  WARNING: the "mnc" package was enabled but tests failed to compile  WARNING: the "mnc" package was enabled but tests failed to compile
2042    NetCDF applications.  Please check that:    NetCDF applications.  Please check that:
2043    
2044    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2045    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2046         NetCDF library to link against.         NetCDF library to link against.
2047    
2048    Due to this failure, the "mnc" package is now DISABLED.    Due to this failure, the "mnc" package is now DISABLED.
2049  *********************************************************************  *********************************************************************
   
2050  EOF  EOF
2051          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2052          DISABLE="$DISABLE mnc"          DISABLE="$DISABLE mnc"
2053      else      else
2054          ( 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
2055          RETVAL=$?          DISABLE="$DISABLE mnc"
2056          if test "x${RETVAL}" = x0 ; then      fi
2057              rm -f make_mnc.errors  else
2058        # we have NetCDF, we try to build MNC template files
2059        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2060        RETVAL=$?
2061        if test "x${RETVAL}" = x0 ; then
2062            rm -f make_mnc.errors
2063        else
2064            echo "Error: problem encountered while building source files in pkg/mnc:"
2065            cat make_mnc.errors 1>&2
2066            if test "x$mnc_in" = x0 ; then
2067                exit 1
2068          else          else
2069              echo "Error: problem encountered while building source files in pkg/mnc:"              DISABLE="$DISABLE mnc"
             cat make_mnc.errors 1>&2  
             exit 1  
2070          fi          fi
2071      fi      fi
2072  fi  fi
2073    
2074  echo "  applying package dependency rules"  #  Check for package PROFILES: if NetCDF is not available,
2075  ck=  #  then delete profiles from the list of available packages.
2076  while test "x$ck" != xtt ; do  if test "x$HAVE_NETCDF" != xt ; then
2077        echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2078        RETVAL=$?
2079        if test "x$RETVAL" = x0 ; then
2080            cat <<EOF
2081    *********************************************************************
2082    WARNING: the "profiles" package was enabled but tests failed to
2083      compile NetCDF applications.  Please check that:
2084    
2085      1) NetCDF is correctly installed for this compiler and
2086      2) the LIBS variable (within the "optfile") specifies the correct
2087           NetCDF library to link against.
2088    
2089      Due to this failure, the "profiles" package is now DISABLED.
2090    *********************************************************************
2091    EOF
2092            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2093            DISABLE="$DISABLE profiles"
2094        else
2095        #  this prevent to add profiles (due to pdepend rules) if not available
2096            DISABLE="$DISABLE profiles"
2097        fi
2098    fi
2099    
2100    if  test "x${PKG_DEPEND}" != x ; then
2101      echo "  applying package dependency rules"
2102      ck=
2103      while test "x$ck" != xtt ; do
2104      i=0      i=0
2105      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2106      rtot=$nname      rtot=$nname
2107      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2108    
2109          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2110          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1996  while test "x$ck" != xtt ; do Line 2116  while test "x$ck" != xtt ; do
2116                  pin="t"                  pin="t"
2117              fi              fi
2118          done          done
2119            #  or in the current $STANDARDDIRS list?
2120            for p in $STANDARDDIRS ; do
2121                if test "x$p" = "x$pname" ; then pin="t" ; fi
2122            done
2123    
2124          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2125          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 2018  while test "x$ck" != xtt ; do Line 2142  while test "x$ck" != xtt ; do
2142    
2143          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2144          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
2145                #echo "   " $pname ": need to add :" $dname
2146              in_dis="f"              in_dis="f"
2147              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2148                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 2038  while test "x$ck" != xtt ; do Line 2163  while test "x$ck" != xtt ; do
2163          #  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?
2164          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
2165              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2166              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2167              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2168              exit 1              exit 1
2169          fi          fi
# Line 2046  while test "x$ck" != xtt ; do Line 2171  while test "x$ck" != xtt ; do
2171          #i=$(( $i + 1 ))          #i=$(( $i + 1 ))
2172      done      done
2173      ck=$ck"t"      ck=$ck"t"
2174  done    done
2175  echo "    packages are:  $PACKAGES"    echo "    packages are: $PACKAGES"
2176    fi
2177  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2178      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2179      if test -d $adr ; then      if test -d $adr ; then
# Line 2064  done Line 2190  done
2190    
2191  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2192  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2193  #  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
2194  #  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
2195  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2196  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2197  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 2093  for i in $PACKAGES ; do Line 2219  for i in $PACKAGES ; do
2219  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2220    
2221  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2222      case $i in      case $i in
2223          aim_v23)          aim_v23)
2224              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2225              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 2229  for i in $PACKAGES ; do
2229    
2230  done  done
2231    
2232  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2233  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2234  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2235      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2236          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 2162  fi Line 2285  fi
2285    
2286  #  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
2287  #  compiler.  #  compiler.
2288  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2289      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2290  fi  fi
2291  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2292    touch adSrcFiles.tmp
2293  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2294      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2295      for j in $list_files ; do      for j in $list_files ; do
2296          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2297      done      done
2298  done  done
2299  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2300      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2301      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2302  fi  fi
2303    
2304  echo  echo
# Line 2198  if test ! "x$DIVA" = x ; then Line 2322  if test ! "x$DIVA" = x ; then
2322          fi          fi
2323          MPIINCLUDEDIR='$MPIHOME/include'          MPIINCLUDEDIR='$MPIHOME/include'
2324      fi      fi
2325        
2326      if test -r $MPIINCLUDEDIR/mpif.h ; then      if test -r $MPIINCLUDEDIR/mpif.h ; then
2327          for i in $MPI_HEADER_FILES; do          for i in $MPI_HEADER_FILES; do
2328              cp -p $MPIINCLUDEDIR/$i ./mpi_headers              cp -p $MPIINCLUDEDIR/$i ./mpi_headers
# Line 2232  if test ! -r ".links.tmp/foo" ; then Line 2356  if test ! -r ".links.tmp/foo" ; then
2356      exit 1      exit 1
2357  fi  fi
2358  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2359    
2360    if test "x$OPENAD" != x ; then
2361        OAD_DONT_COMPILE="/dev/null"
2362        OAD_DONT_TRANSFORM="/dev/null"
2363        OAD_KEEP_ORIGINAL="/dev/null"
2364        OAD_CB2M_FILES="/dev/null"
2365        echo "  looking for dontCompile file:  "
2366        for i in "." $MODS ; do
2367            if test -r $i"/dontCompile" ; then
2368                OAD_DONT_COMPILE=$i"/dontCompile"
2369                echo "     found $OAD_DONT_COMPILE"
2370                break
2371            fi
2372        done
2373        echo "  looking for dontTransform file:  "
2374        for i in "." $MODS ; do
2375            if test -r $i"/dontTransform" ; then
2376                OAD_DONT_TRANSFORM=$i"/dontTransform"
2377                echo "     found $OAD_DONT_TRANSFORM"
2378                break
2379            fi
2380        done
2381        echo "  looking for keepOriginal file:  "
2382        for i in "." $MODS ; do
2383            if test -r $i"/keepOriginal" ; then
2384                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2385                echo "     found $OAD_KEEP_ORIGINAL"
2386                break
2387            fi
2388        done
2389        echo "  looking for cb2mFiles:  "
2390        for i in "." $MODS ; do
2391            if test -r $i"/cb2mFiles" ; then
2392                OAD_CB2M_FILES=$i"/cb2mFiles"
2393                echo "     found $OAD_CB2M_FILES"
2394                break
2395            fi
2396        done
2397        echo "   OpenAD exceptions:  "
2398    fi
2399    
2400  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2401  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2402  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2403  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2404  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2405  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2406  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2407    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2408  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2409  for d in $alldirs ; do  for d in $alldirs ; do
2410      deplist=      deplist=
2411      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2412      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2413        if test "x$OPENAD" != x ; then
2414            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2415        fi
2416      for sf in $sfiles ; do      for sf in $sfiles ; do
2417          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2418              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
# Line 2278  for d in $alldirs ; do Line 2447  for d in $alldirs ; do
2447                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2448                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2449                      case $extn in                      case $extn in
2450                          F)                        F)
2451                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2452                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2453                              ;;                          if test "x$OPENAD" != x ; then
2454                          F90)                              basename=${sf%%.F}
2455                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2456                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2457                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2458                          c)                                  if test -z "$toBeIgnored" ; then
2459                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2460                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2461                              ;;                                  else
2462                          h)                                      echo "    not to be compiled   :  $sf"
2463                              echo    " \\"  >> hlist.inc                                  fi
2464                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2465                              ;;                                   # or we want to retain the untransformed version
2466                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2467                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2468                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2469                              ;;                                      echo "    not to be transformed:  $sf"
2470                      esac                                  fi
2471                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2472                                        echo "    original to be kept  :  $sf"
2473                                    fi
2474                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2475                                        echo    " \\"  >> nonADF77srclist.tmp
2476                                        printf " $sf" >> nonADF77srclist.tmp
2477                                    fi
2478                                fi
2479                            fi
2480                            ;;
2481                        F90)
2482                            echo    " \\"  >> F90srclist.tmp
2483                            printf " $sf" >> F90srclist.tmp
2484                            ;;
2485                        c)
2486                            echo    " \\"  >> csrclist.tmp
2487                            printf " $sf" >> csrclist.tmp
2488                            ;;
2489                        h)
2490                            echo    " \\"  >> hsrclist.tmp
2491                            printf " $sf" >> hsrclist.tmp
2492                            ;;
2493                        flow)
2494                            echo    " \\"  >> ad_flow_files.tmp
2495                            printf " $sf" >> ad_flow_files.tmp
2496                            ;;
2497                       esac
2498                    fi
2499              fi              fi
2500          fi          fi
2501      done      done
2502      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2503          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2504            echo "" >> srclinks.tmp
2505          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2506          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2507          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2508    # This may happen when make thinks that a header file has to be "remade"
2509    # because a module it depends on has changed.  In this case we do nothing.
2510            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2511          fi
2512      fi      fi
2513  done  done
2514  rm -rf .links.tmp  rm -rf .links.tmp
2515  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2516  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2517  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2518  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2519  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2520    echo "" >> ad_flow_files.tmp
2521    
2522    CMDLINE=$0
2523    for xx in "$@" ; do nw=`echo $xx | wc -w`
2524        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2525                            else CMDLINE="$CMDLINE '$xx'" ; fi
2526    done
2527    
2528  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2529      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2530  fi  fi
2531  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2532  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 2326  echo "#    $MACHINE" >> $MAKEFILE Line 2534  echo "#    $MACHINE" >> $MAKEFILE
2534  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2535  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2536  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2537  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2538  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2539  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2540    
# Line 2337  EXE_SVD=$EXECUTABLE"_svd" Line 2545  EXE_SVD=$EXECUTABLE"_svd"
2545  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2546  #  #
2547  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2548  #  #
2549  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2550  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2551  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 2357  cat >>$MAKEFILE <<EOF Line 2565  cat >>$MAKEFILE <<EOF
2565  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2566    
2567  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2568  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2569  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2570  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2571  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 2383  else Line 2591  else
2591      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2592  fi  fi
2593    
 #  Note: figure out some way to add Hyades JAM libraries here  
2594  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2595  # Unix ln (link)  # Unix ln (link)
2596  LN = ${LN}  LN = ${LN}
# Line 2410  INCLUDES = ${INCLUDES} Line 2617  INCLUDES = ${INCLUDES}
2617  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2618  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2619  # Optim./debug for FC  # Optim./debug for FC
2620  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2621  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2622  # Optim./debug for FC  # Optim./debug for FC
2623  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2624  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2625    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2626  # Flags for CC  # Flags for CC
2627  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2628  # Files that should not be optimized  # Files that should not be optimized
# Line 2427  MAKEFILE=${MAKEFILE} Line 2635  MAKEFILE=${MAKEFILE}
2635    
2636  EOF  EOF
2637    
2638  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2639  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2640  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2641  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2642  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2643    cat ad_flow_files.tmp   >> $MAKEFILE
2644    
2645    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2646    
2647  echo >> $MAKEFILE  echo >> $MAKEFILE
2648  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2649  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2650  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2651    # hence the $FS and $FS90 here.
2652    # for fixed format f90 files we use ff90 or FF90 resp
2653    # but these are not expected to be the original source files
2654    
2655    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2656    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2657    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2658    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2659  echo >> $MAKEFILE  echo >> $MAKEFILE
2660  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2661  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  
2662    
2663  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2664    
2665  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2666  \$(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)
2667          @echo Creating \$@ ...          @echo Creating \$@ ...
2668          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2669  depend:  depend:
2670          @make links          @make links
2671          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2672          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2673          -rm -f makedepend.out          -rm -f makedepend.out
2674    
# Line 2458  lib: libmitgcmuv.a Line 2676  lib: libmitgcmuv.a
2676    
2677  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2678          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2679            ar d   libmitgcmuv.a main.o
2680    
2681  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2682    
2683  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2684    
2685  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2686          @printf 'running ... '          @printf 'running ... '
# Line 2470  output.txt: \$(EXECUTABLE) Line 2689  output.txt: \$(EXECUTABLE)
2689  clean:  clean:
2690          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2691          -rm -rf *.o          -rm -rf *.o
2692          -rm -rf *.$FS          -rm -rf *.$FS *.flowdir
2693            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2694  Clean:  Clean:
2695          @make clean          @make clean
2696          @make cleanlinks          @make cleanlinks
2697          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2698          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2699            -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2700            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2701  CLEAN:  CLEAN:
2702          @make Clean          @make Clean
2703          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2704          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2705          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2706          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2707            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2708          -rm -rf mnc_test_*          -rm -rf mnc_test_*
2709    
2710  #eh3 Makefile: makefile  #eh3 Makefile: makefile
# Line 2490  makefile: Line 2713  makefile:
2713  cleanlinks:  cleanlinks:
2714          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2715    
2716  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2717  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2718          @echo Creating \$@ ...          @echo Creating \$@ ...
2719          @$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 2738  if test "x$EMBED_SRC" = xt ; then
2738    
2739  decode_files.o : EMBEDDED_FILES.h  decode_files.o : EMBEDDED_FILES.h
2740    
2741  ##  \$(F77FILES)  ##  \$(F77_PP_SRC_FILES)
2742  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
2743          @echo Creating \$@ ...          @echo Creating \$@ ...
2744          -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
2745          -rm -f all_fF.tar.gz          -rm -f all_fF.tar.gz
2746          -gzip all_fF.tar          -gzip all_fF.tar
2747    
# Line 2542  cat >>$MAKEFILE <<EOF Line 2765  cat >>$MAKEFILE <<EOF
2765          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2766  .F90.$FS90:  .F90.$FS90:
2767          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2768    .FF90.f$FS90:
2769            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2770  .$FS90.o:  .$FS90.o:
2771          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2772    .f$FS90.o:
2773            cp \$< \$(basename  \$<).f90
2774            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2775  .c.o:  .c.o:
2776          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2777    .flow.flowdir:
2778            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2779    
2780  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2781  .F.p:  .F.p:
# Line 2553  cat >>$MAKEFILE <<EOF Line 2783  cat >>$MAKEFILE <<EOF
2783  .p.$FS:  .p.$FS:
2784          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2785    
2786    EOF
2787    
2788  #=========================================  #=========================================
2789  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2790    #===  for TAMC/TAF  ======================
2791    
2792    if test "x$OPENAD" = x ; then
2793    
2794    cat >>$MAKEFILE <<EOF
2795    
2796  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2797  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2578  done Line 2815  done
2815  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2816  echo >> $MAKEFILE  echo >> $MAKEFILE
2817  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2818  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2819  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2820      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2821      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2822  done  done
2823  echo >> $MAKEFILE  echo >> $MAKEFILE
2824  rm -f ad_files  rm -f adSrcFiles.tmp
2825    
2826  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2827    
# Line 2593  adall: \$(EXE_AD) Line 2830  adall: \$(EXE_AD)
2830  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2831  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2832    
2833  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2834          @$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
2835          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
2836          -rm -f ad_config.template          -rm -f ad_config.template
2837          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2838          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2839          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2840    
2841  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2842          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2843            ls -l ad_input_code_ad.$FS
2844          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
2845    
2846  adtafonly:  adtafonly:
2847          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2848            ls -l ad_input_code_ad.$FS
2849          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
2850    
2851  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2852          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2853    
2854  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2855          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2856          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
2857    
2858  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2859          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2860    
2861  adonlyfwd:  adonlyfwd:
2862          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2863    
2864  adtrick:  adtrick:
2865          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2866    
# Line 2630  ftlall: ftl_taf Line 2869  ftlall: ftl_taf
2869  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2870  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2871    
2872  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2873          @$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
2874          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
2875          -rm -f ftl_config.template          -rm -f ftl_config.template
2876          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2877          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2878          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2879    
2880  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2881          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2882            ls -l ftl_input_code_ftl.$FS
2883          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
2884    
2885  ftltafonly:  ftltafonly:
2886          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2887            ls -l ftl_input_code_ftl.$FS
2888          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
2889    
2890  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2891          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2892    
2893  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
2894          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2895          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
2896    
2897  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2898          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2899    
2900    
2901  # ... SVD ...  # ... SVD ...
# Line 2681  svd_touch: Line 2922  svd_touch:
2922          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
2923          -rm -f ftl_config.template          -rm -f ftl_config.template
2924    
2925  #=========================================  EOF
2926    
2927    fi
2928    
2929    #===  for OpenAD  ========================
2930    
2931    if test "x$OPENAD" != x ; then
2932    
2933    # ============ begin OpenAD specific section ==============
2934    
2935    cat >>$MAKEFILE <<EOF
2936    
2937    # all the source files linked from the various locations:
2938    ALL_LINKED_FILES= \
2939    \$(F77_SRC_FILES) \
2940    \$(C_SRC_FILES) \
2941    \$(H_SRC_FILES) \
2942    \$(F90_SRC_FILES) \
2943    \$(SPECIAL_FILES)
2944    
2945    ifndef OPENADROOT
2946      \$(error "Error:  environment variable OPENADROOT not defined!")
2947    endif
2948    
2949    ifndef XAIFSCHEMAROOT
2950      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2951    endif
2952    
2953    ifndef XAIFBOOSTERROOT
2954      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2955    endif
2956    
2957    EOF
2958    
2959    echo "  Add the source list for common block to module conversion "
2960    echo >> $MAKEFILE
2961    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2962    for i in `cat ${OAD_CB2M_FILES}` ; do
2963      echo    " \\" >> $MAKEFILE
2964      printf " $i" >> $MAKEFILE
2965    done
2966    echo >> $MAKEFILE
2967    
2968    echo "  Add the source list for AD code generation"
2969    echo >> $MAKEFILE
2970    printf "AD_FILES = " >> $MAKEFILE
2971    for i in `cat ${OAD_CB2M_FILES}` ; do
2972      echo    " \\" >> $MAKEFILE
2973      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2974    done
2975    AD_FILES=`cat adSrcFiles.tmp`
2976    for i in $AD_FILES ; do
2977      basename=${i%%.f}
2978      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2979      if test -z "$toBeIgnored" ; then
2980        echo    " \\" >> $MAKEFILE
2981        printf " $i" >> $MAKEFILE
2982      fi
2983    done
2984    echo >> $MAKEFILE
2985    rm -f adSrcFiles.tmp
2986    
2987    cat >>$MAKEFILE <<EOF
2988    
2989    adAll: \$(EXE_AD)
2990    .PHONY: adAll
2991    
2992    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2993    
2994    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2995    
2996    .PHONY: adDepend
2997    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2998            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2999            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
3000            -rm -f makedepend.out
3001    
3002    OPENAD_SUPPORT_F90_SRC_FILES = \
3003    w2f__types.F90 \
3004    OAD_active.F90 \
3005    OAD_cp.F90 \
3006    OAD_rev.F90 \
3007    OAD_tape.F90
3008    
3009    OPENAD_SUPPORT_C_SRC_FILES = \
3010    iaddr.c \
3011    timeRatio.c
3012    
3013    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3014            cat \$^ > \$@
3015    
3016    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
3017            cat \$^ > \$@
3018    
3019    f95_test.out: f95_test_mods.f90 f95_test.f90
3020            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3021            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3022    
3023    # the file included below is created by the
3024    # postProcessor and its inclusion sets the
3025    # variable POSTPROCESSEDFILES
3026    # used below. Because the file is made during
3027    # make it won't be read until the second (recursive)
3028    # invocation in the rule below
3029    -include postProcess.make
3030    
3031    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3032    
3033    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)
3034    
3035    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3036    ifeq (\$(MAKELEVEL),0)
3037            \$(MAKE) adAll
3038    else
3039            touch \$@
3040    endif
3041    
3042    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3043    ifeq (\$(MAKELEVEL),1)
3044            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3045    else
3046            touch \$@
3047    endif
3048    
3049    # makefile debug rule
3050    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3051    .PHONY: openad
3052    
3053    # create the module files
3054    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3055            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3056    
3057    # create the header files
3058    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3059            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3060    
3061    # change everybody else to use the new module files:
3062    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3063            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3064    
3065    # makefile debug rule
3066    small_f: \$(CB2M_F90_PP_SRC_FILES)
3067    .PHONY: small_f
3068    
3069    ad_output.txt: \$(EXE_AD)
3070            @printf 'linking data files ... '
3071            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3072            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3073            @printf 'running ... '
3074            @./\$(EXE_AD) > \$@
3075    
3076    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3077    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3078            cat \$^ > \$@
3079    
3080    # strip all comments and blanks to reduce
3081    # the file size in order to reduce perl's memory requirements
3082    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3083            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3084    
3085    # mfef90 preprocessing
3086    # expand statement functions
3087    # expose mfef90 specific substring handling
3088    # add the w2f__types module
3089    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3090            ./mfef90 -r8 -z -F -N132 \$<
3091            mv \$<.B \$(basename \$<).B
3092            ./whirl2f -openad \$(basename \$<).B
3093            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3094    
3095    # canonicalizer
3096    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3097            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3098    
3099    # F -> WHIRL
3100    # note that the canonicalized version cuts off at col 72
3101    # doing this also for string constants which is ok as long
3102    # as we are in fixed mode and cut of exactly there.
3103    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3104    # characters respectively.
3105    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3106            ./mfef90 -r8 -z -F \$<
3107            mv \$<.B \$@
3108    
3109    # WHIRL -> XAIF
3110    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3111            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3112    
3113    # XAIF -> XAIF'
3114    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
3115            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3116    
3117    # XAIF' -> WHIRL'
3118    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3119            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3120    
3121    # WHIRL' -> F'
3122    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3123            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3124    
3125    # insert template directives
3126    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
3127            ../OAD_support/insertTemplateDir.bash \$< \$@
3128    
3129    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3130    # postprocess F'
3131    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3132            # the target is a placeholder to signal execution of the rule
3133            touch \$@
3134            # this step also creates the file postProcess.make but we cannot
3135            # name it as the target or else make will try to remake it for
3136            # the include directive above for any rule, e.g. make clean
3137            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3138    
3139    # setup some links
3140    %.xsd:
3141            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3142    
3143    mfef90:
3144            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3145    
3146    # link the support files:
3147    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3148            \$(LN) ../OAD_support/\$@ .
3149    
3150    whirl2xaif xaif2whirl:
3151            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3152    
3153    preProcess.py postProcess.py:
3154            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3155    
3156    whirl2f whirl2f_be:
3157            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3158    
3159    oadDriver:
3160            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3161    
3162    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3163    
3164    # ============ end OpenAD specific section ==============
3165    
3166  EOF  EOF
3167    
3168    fi
3169    
3170    #=========================================
3171    
3172  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3173      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3174  fi  fi
# Line 2720  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3204  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3204  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3205    
3206  # Create special header files  # Create special header files
3207  $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"
3208  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3209      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3210  else  else

Legend:
Removed from v.1.158  
changed lines
  Added in v.1.208

  ViewVC Help
Powered by ViewVC 1.1.22