/[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.154 by edhill, Sat Aug 12 03:47:36 2006 UTC revision 1.206 by jmc, Sun May 23 18:34:43 2010 UTC
# Line 110  EOF Line 110  EOF
110              check_for_broken_Ff              check_for_broken_Ff
111          else          else
112              cat <<EOF 2>&1              cat <<EOF 2>&1
113  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
114    (fails the "cp" test) and this program cannot find a suitable    (fails the "cp" test) and this program cannot find a suitable
115    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
116    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
117    
118  EOF  EOF
# Line 146  EOF Line 146  EOF
146              check_for_broken_Ff              check_for_broken_Ff
147          else          else
148              cat <<EOF 2>&1              cat <<EOF 2>&1
149  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
150    (fails the "make/ln" test) and this program cannot find a suitable    (fails the "make/ln" test) and this program cannot find a suitable
151    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
152    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
153    
154  EOF  EOF
# Line 194  look_for_makedepend()  { Line 194  look_for_makedepend()  {
194          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
195  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
196  #  #
197  #   Some "makedepend" implementations will die if they cannot  #   Some "makedepend" implementations will die if they cannot
198  #   find a Makefile -- so this file is here to gives them an  #   find a Makefile -- so this file is here to gives them an
199  #   empty one to find and parse.  #   empty one to find and parse.
200  EOF  EOF
201          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
# Line 212  EOF Line 212  EOF
212              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
213          else          else
214              echo "    a system-default makedepend was not found."              echo "    a system-default makedepend was not found."
215                
216              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
217              build_cyrus_makedepend              build_cyrus_makedepend
218              RETVAL=$?              RETVAL=$?
# Line 269  build_embed_encode() Line 269  build_embed_encode()
269              return 1              return 1
270          fi          fi
271          clist="cc gcc c89 $CC"          clist="cc gcc c89 $CC"
272          for ic in $clist ; do          for ic in $clist ; do
273              comm="$ic -o encode_files encode_files.c"              comm="$ic -o encode_files encode_files.c"
274              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
275              RETVAL=$?              RETVAL=$?
# Line 304  find_possible_configs()  { Line 304  find_possible_configs()  {
304      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
305      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
306      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
307        
308      echo "test" > test      echo "test" > test
309      ln -s ./test link      ln -s ./test link
310      RETVAL=$?      RETVAL=$?
# Line 325  find_possible_configs()  { Line 325  find_possible_configs()  {
325    
326      #================================================================      #================================================================
327      #  look for possible C compilers      #  look for possible C compilers
328      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
329      p_CC=      p_CC=
330      for c in $tmp ; do      for c in $tmp ; do
331          rm -f ./genmake_hello.c  ./genmake_hello          rm -f ./genmake_hello.c  ./genmake_hello
# Line 364  EOF Line 364  EOF
364    
365      #================================================================      #================================================================
366      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
367      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 442  Error: No options file was found in:  $R Line 442  Error: No options file was found in:  $R
442  EOF  EOF
443          exit 1          exit 1
444      fi      fi
445        
446  #     # look for possible MPI libraries  #     # look for possible MPI libraries
447  #     mpi_libs=  #     mpi_libs=
448  #     mpi_fort=`which mpif77 2>/dev/null`  #     mpi_fort=`which mpif77 2>/dev/null`
# Line 461  EOF Line 461  EOF
461  #       if test "x${RETVAL}" = x0 ; then  #       if test "x${RETVAL}" = x0 ; then
462  #           a=`cat out`  #           a=`cat out`
463  #           for i in $a ; do  #           for i in $a ; do
464  #               case $i in  #               case $i in
465  #                   -*)  #                   -*)
466  #                       mpi_libs="$mpi_libs $i" ;;  #                       mpi_libs="$mpi_libs $i" ;;
467  #               esac  #               esac
# Line 480  get_pdepend_list()  { Line 480  get_pdepend_list()  {
480      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
481      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
482      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
483          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
484          > ./.pd_tmp          > ./.pd_tmp
485        RETVAL=$?
486        if test ! "x${RETVAL}" = x0 ; then
487          echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$1\""
488          exit 1
489        fi
490      . ./.pd_tmp      . ./.pd_tmp
491      rm -f ./.pd_tmp      rm -f ./.pd_tmp
492    
     printf "PNAME = "${}  
493  }  }
494    
495    
# Line 508  Usage: "$0" [OPTIONS] Line 512  Usage: "$0" [OPTIONS]
512        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
513        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
514            Use "NAME" as the optfile.  By default, an attempt will be            Use "NAME" as the optfile.  By default, an attempt will be
515            made to find an appropriate "standard" optfile in the            made to find an appropriate "standard" optfile in the
516            tools/build_options/ directory.            tools/build_options/ directory.
517    
518      -pdepend NAME | --pdepend NAME      -pdepend NAME | --pdepend NAME
# Line 519  Usage: "$0" [OPTIONS] Line 523  Usage: "$0" [OPTIONS]
523        -pdefault=NAME | --pdefault=NAME        -pdefault=NAME | --pdefault=NAME
524            Get the default package list from "NAME".            Get the default package list from "NAME".
525    
526        -bash NAME
527              Explicitly specify the Bourne or BASH shell to use
528    
529      -make NAME | -m NAME      -make NAME | -m NAME
530        --make=NAME | -m=NAME        --make=NAME | -m=NAME
531            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
532            many platforms, "gmake" is the preferred choice.            many platforms, "gmake" is the preferred choice.
533    
534      -makefile NAME | -mf NAME      -makefile NAME | -mf NAME
# Line 535  Usage: "$0" [OPTIONS] Line 542  Usage: "$0" [OPTIONS]
542      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
543        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
544            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
545            By default, genamke will try to find the location by            By default, genamke will try to find the location by
546            looking in parent directories (up to the 5th parent).            looking in parent directories (up to the 5th parent).
547    
548      -mods NAME | --mods NAME | -mo NAME | --mo NAME      -mods NAME | --mods NAME | -mo NAME | --mo NAME
549        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME        -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
550            Here, "NAME" specifies a list of directories that are            Here, "NAME" specifies a list of directories that are
551            used for additional source code.  Files found in the            used for additional source code.  Files found in the
552            "mods list" are given preference over files of the same            "mods list" are given preference over files of the same
553            name found elsewhere.            name found elsewhere.
554    
555      -disable NAME | --disable NAME      -disable NAME | --disable NAME
556        -disable=NAME | --disable=NAME        -disable=NAME | --disable=NAME
557            Here "NAME" specifies a list of packages that we don't            Here "NAME" specifies a list of packages that we don't
558            want to use.  If this violates package dependencies,            want to use.  If this violates package dependencies,
559            genamke will exit with an error message.            genamke will exit with an error message.
560    
561      -enable NAME | --enable NAME      -enable NAME | --enable NAME
562        -enable=NAME | --enable=NAME        -enable=NAME | --enable=NAME
563            Here "NAME" specifies a list of packages that we wish            Here "NAME" specifies a list of packages that we wish
564            to specifically enable.  If this violates package            to specifically enable.  If this violates package
565            dependencies, genamke will exit with an error message.            dependencies, genamke will exit with an error message.
566    
567      -standarddirs NAME | --standarddirs NAME      -standarddirs NAME | --standarddirs NAME
568        -standarddirs=NAME | --standarddirs=NAME        -standarddirs=NAME | --standarddirs=NAME
569            Here, "NAME" specifies a list of directories to be            Here, "NAME" specifies a list of directories to be
570            used as the "standard" code.            used as the "standard" code.
571    
572      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME      -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
573        -fc=NAME | --fc=NAME        -fc=NAME | --fc=NAME
574            Use "NAME" as the fortran compiler.  By default, genmake            Use "NAME" as the fortran compiler.  By default, genmake
575            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
576            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
577    
578      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME      -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
579            Use "NAME" as the C compiler.  By default, genmake            Use "NAME" as the C compiler.  By default, genmake
580            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
581            "usual suspects" such as gcc, c89, cc, etc.            "usual suspects" such as gcc, c89, cc, etc.
582    
583      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
584            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
585            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
586            is being used.            is being used.
587    
588        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
589              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
590              *only* works if CPP_EEOPTIONS.h allows this.
591    
592      -ignoretime | -ignore_time | --ignoretime | --ignore_time      -ignoretime | -ignore_time | --ignoretime | --ignore_time
593            Ignore all the "wall clock" routines entirely.  This will            Ignore all the "wall clock" routines entirely.  This will
594            not in any way hurt the model results -- it simply means            not in any way hurt the model results -- it simply means
595            that the code that checks how long the model spends in            that the code that checks how long the model spends in
596            various routines will give junk values.            various routines will give junk values.
597    
598      -ts | --ts      -ts | --ts
# Line 601  Usage: "$0" [OPTIONS] Line 612  Usage: "$0" [OPTIONS]
612    
613      -gsl | --gsl      -gsl | --gsl
614            Use GSL to control floating point rounding and precision            Use GSL to control floating point rounding and precision
615        -devel | --devel
616              Add additional warning and debugging flags for development
617    
618      -mpi | --mpi      -mpi | --mpi
619            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 609  Usage: "$0" [OPTIONS] Line 622  Usage: "$0" [OPTIONS]
622            set to PATH. i.e. Include files from \$PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
623            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
624    
625        -omp | --omp
626              Activate OpenMP code + use Compiler option OMPFLAG
627        -omp=OMPFLAG | --omp=OMPFLAG
628              Activate OpenMP code + use Compiler option OMPFLAG
629    
630      -es | --es | -embed-source | --embed-source      -es | --es | -embed-source | --embed-source
631            Embed a tarball containing the full source code            Embed a tarball containing the full source code
632            (including the Makefile, etc.) used to build the            (including the Makefile, etc.) used to build the
633            executable [off by default]            executable [off by default]
634    
635      -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  
636    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
637    
638      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'      --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
# Line 628  Usage: "$0" [OPTIONS] Line 643  Usage: "$0" [OPTIONS]
643    
644    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
645    
646      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
647    
648  EOF  EOF
649    
# Line 644  get_fortran_c_namemangling()  { Line 659  get_fortran_c_namemangling()  {
659      fi      fi
660    
661      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
662        
663      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
664  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
665  EOF  EOF
# Line 744  void FC_NAMEMANGLE(cloc) ( double *curti Line 759  void FC_NAMEMANGLE(cloc) ( double *curti
759   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
760  }  }
761  EOF  EOF
762      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
763        echo $COMM >> genmake_warnings
764        $COMM >> genmake_warnings 2>&1
765      RET_C=$?      RET_C=$?
766      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
767        program hello        program hello
# Line 754  EOF Line 771  EOF
771        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
772        end        end
773  EOF  EOF
774      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
775        echo $COMM >> genmake_warnings
776        $COMM >> genmake_warnings 2>&1
777      RET_F=$?      RET_F=$?
778      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
779      RETVAL=$?      RETVAL=$?
# Line 801  void FC_NAMEMANGLE(sigreg) (int * aip) Line 820  void FC_NAMEMANGLE(sigreg) (int * aip)
820      return;      return;
821  }  }
822  EOF  EOF
823      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
824        echo $COMM >> genmake_warnings
825        $COMM >> genmake_warnings 2>&1
826      RET_C=$?      RET_C=$?
827      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
828        program hello        program hello
# Line 849  void FC_NAMEMANGLE(setrlstk) () Line 870  void FC_NAMEMANGLE(setrlstk) ()
870      return;      return;
871  }  }
872  EOF  EOF
873      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
874        echo $COMM >> genmake_warnings
875        $COMM >> genmake_warnings 2>&1
876      RET_C=$?      RET_C=$?
877      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
878        program hello        program hello
# Line 893  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 916  void FC_NAMEMANGLE(tfsize) ( int *nbyte
916          *nbyte = -1;          *nbyte = -1;
917  }  }
918  EOF  EOF
919      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
920        echo $COMM >> genmake_warnings
921        $COMM >> genmake_tc.log 2>&1
922      RET_C=$?      RET_C=$?
923      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
924        program hello        program hello
# Line 946  EOF Line 971  EOF
971      RET_CPP=f      RET_CPP=f
972      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
973      echo "$COMM" >> genmake_tnc.log      echo "$COMM" >> genmake_tnc.log
974      $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t      eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
975      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
976          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
977              >> genmake_tnc.log              >> genmake_tnc.log
# Line 983  EOF Line 1008  EOF
1008          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
1009              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
1010              HAVE_NETCDF=t              HAVE_NETCDF=t
1011            else
1012            # try again with "-lnetcdff" added to the libs
1013                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1014                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1015                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1016                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1017                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1018                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1019                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1020                RET_COMPILE=$?
1021                cat genmake_tnc.log >> genmake_warnings
1022                if test "x$RET_COMPILE" = x0 ; then
1023                    LIBS="$LIBS -lnetcdff -lnetcdf"
1024                    HAVE_NETCDF=t
1025                fi
1026          fi          fi
1027      fi      fi
1028      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 1018  OPTFILE= Line 1058  OPTFILE=
1058  INCLUDES="-I. $INCLUDES"  INCLUDES="-I. $INCLUDES"
1059  FFLAGS=  FFLAGS=
1060  FOPTIM=  FOPTIM=
1061    FEXTRAFLAGS=
1062    USE_EXTENDED_SRC=
1063    EXTENDED_SRC_FLAG=
1064  CFLAGS=  CFLAGS=
1065  KFLAGS1=  KFLAGS1=
1066  KFLAGS2=  KFLAGS2=
# Line 1028  NOOPTFILES= Line 1071  NOOPTFILES=
1071  NOOPTFLAGS=  NOOPTFLAGS=
1072  MPI=  MPI=
1073  MPIPATH=  MPIPATH=
1074    OMP=
1075    OMPFLAG=
1076    USE_R4=
1077  TS=  TS=
1078  PAPIS=  PAPIS=
1079  PCLS=  PCLS=
# Line 1036  PAPI= Line 1082  PAPI=
1082  PCL=  PCL=
1083  HPMT=  HPMT=
1084  GSL=  GSL=
1085    DEVEL=
1086  HAVE_TEST_L=  HAVE_TEST_L=
1087    
1088  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 1094  TAMC_EXTRA= Line 1141  TAMC_EXTRA=
1141    
1142  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1143  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1144  gm_s2="FC CPP IEEE TS 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"
1145    
1146  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1147  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
1148  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1149  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1150  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
# Line 1124  EOF Line 1171  EOF
1171    
1172  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1173  gm_local="genmake_local"  gm_local="genmake_local"
 for i in . $MODS ; do  
     if test -r $i/$gm_local ; then  
         . $i/$gm_local  
         break  
     fi  
 done  
1174  printf "  getting local config information:  "  printf "  getting local config information:  "
1175  if test -f $gm_local ; then  if test -f $gm_local ; then
1176      echo "using $gm_local"      echo "using $gm_local"
# Line 1141  else Line 1182  else
1182  fi  fi
1183    
1184  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
 #OPTIONS=  
 #n=0  
 #for i ; do  
 #   echo "$i  $n"  
 #   setvar="OPTIONS[$n]='$i'"  
 #   #  echo "  $setvar"  
 #   eval "$setvar"  
 #   n=$(( $n + 1 ))  
 #done  
1185  #parse_options  #parse_options
1186  ac_prev=  ac_prev=
1187  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1162  for ac_option in "$@" ; do Line 1194  for ac_option in "$@" ; do
1194          ac_prev=          ac_prev=
1195          continue          continue
1196      fi      fi
1197        
1198      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1199        
1200      case $ac_option in      case $ac_option in
1201                    
1202          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 1274  for ac_option in "$@" ; do Line 1306  for ac_option in "$@" ; do
1306          -noieee | --noieee)          -noieee | --noieee)
1307              IEEE= ;;              IEEE= ;;
1308    
1309            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1310                USE_R4=true ;;
1311    
1312          -ts | --ts)          -ts | --ts)
1313              TS=true ;;              TS=true ;;
1314          -papis | --papis)          -papis | --papis)
# Line 1292  for ac_option in "$@" ; do Line 1327  for ac_option in "$@" ; do
1327          -gsl | --gsl)          -gsl | --gsl)
1328              GSL=true ;;              GSL=true ;;
1329    
1330            -devel | --devel)
1331                DEVEL=true ;;
1332    
1333          -mpi | --mpi)          -mpi | --mpi)
1334              MPI=true ;;              MPI=true ;;
1335          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
1336              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1337              MPI=true ;;              MPI=true ;;
1338                    
1339  #       -jam | --jam)          -omp | --omp)
1340  #           JAM=1 ;;              OMP=true ;;
1341  #       -nojam | --nojam)          -omp=* | --omp=*)
1342  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1343                OMP=true ;;
1344                    
1345          -ds | --ds)          -ds | --ds)
1346              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1333  for ac_option in "$@" ; do Line 1372  for ac_option in "$@" ; do
1372              ;;              ;;
1373                    
1374      esac      esac
1375        
1376  done  done
1377    
1378    
1379  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1380      echo      echo
1381      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1382      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1383      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1384      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1385        echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1386        echo "WARNING: ignore \"./.genmakerc\" and continue."
1387      echo      echo
     echo "  for directions on how to setup and use the new \"genmake2\" input"  
     echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."  
     echo  
1388  fi  fi
1389    
1390  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
# Line 1377  if test ! -d ${ROOTDIR} ; then Line 1415  if test ! -d ${ROOTDIR} ; then
1415  fi  fi
1416    
1417  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1418  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1419      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1420        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1421    #-  remove ./BUILD_INFO.h file if older than version_file
1422        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1423            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1424            rm -f ./BUILD_INFO.h
1425        fi
1426  fi  fi
1427    
1428  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1534  if test ! "x$MPI" = x ; then Line 1578  if test ! "x$MPI" = x ; then
1578        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1579        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1580  fi  fi
1581    if test ! "x$OMP" = x ; then
1582          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1583          FFLAGS="$FFLAGS $OMPFLAG"
1584          F90FLAGS="$F90FLAGS $OMPFLAG"
1585          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1586    fi
1587    
1588    if test ! "x$USE_R4" = x ; then
1589          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1590          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1591    fi
1592    
1593  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1594        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
# Line 1542  if test ! "x$TS" = x ; then Line 1597  if test ! "x$TS" = x ; then
1597        else        else
1598              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1599        fi        fi
1600          PACKAGES="$PACKAGES showflops"
1601  fi  fi
1602  if test ! "x$PAPIS" = x ; then  if test ! "x$PAPIS" = x ; then
1603        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 1609  if test ! "x$PAPIS" = x ; then
1609        fi        fi
1610        INCLUDES="$INCLUDES $PAPIINC"        INCLUDES="$INCLUDES $PAPIINC"
1611        LIBS="$LIBS $PAPILIB"        LIBS="$LIBS $PAPILIB"
1612          PACKAGES="$PACKAGES showflops"
1613  fi  fi
1614  if test ! "x$PCLS" = x ; then  if test ! "x$PCLS" = x ; then
1615        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 1621  if test ! "x$PCLS" = x ; then
1621        fi        fi
1622        INCLUDES="$INCLUDES $PCLINC"        INCLUDES="$INCLUDES $PCLINC"
1623        LIBS="$LIBS $PCLLIB"        LIBS="$LIBS $PCLLIB"
1624          PACKAGES="$PACKAGES showflops"
1625  fi  fi
1626  if test ! "x$PAPI" = x ; then  if test ! "x$PAPI" = x ; then
1627        if test ! "x$PAPIS" = x ; then        if test ! "x$PAPIS" = x ; then
# Line 1612  if test ! "x$GSL" = x ; then Line 1670  if test ! "x$GSL" = x ; then
1670        INCLUDES="$INCLUDES $GSLINC"        INCLUDES="$INCLUDES $GSLINC"
1671        LIBS="$LIBS $GSLLIB"        LIBS="$LIBS $GSLLIB"
1672  fi  fi
1673    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1674    if test ! "x$USE_EXTENDED_SRC" = x ; then
1675          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1676          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1677    fi
1678    
1679  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1680  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
# Line 1734  fi Line 1797  fi
1797    
1798    
1799  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1800  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1801  for d in $MODS ; do  for d in $MODS ; do
1802      if test ! -d $d ; then      if test ! -d $d ; then
1803          echo          echo
1804          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1805          exit 1          exit 1
1806      else      else
1807          printf " $d"          printf "$d "
1808          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1809          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1810      fi      fi
# Line 1790  ERROR: neither of the two default script Line 1853  ERROR: neither of the two default script
1853      ${TOOLSDIR}/set64bitConst.sh      ${TOOLSDIR}/set64bitConst.sh
1854      ${TOOLSDIR}/set64bitConst.csh      ${TOOLSDIR}/set64bitConst.csh
1855    
1856    are working so please check paths or specify (with \$S64) a    are working so please check paths or specify (with \$S64) a
1857    working version of this script.    working version of this script.
1858    
1859  EOF  EOF
# Line 1802  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD Line 1865  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD
1865    
1866  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1867    
1868    #  Set Standard Code Directories:
1869    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1870        STANDARDDIRS="eesupp model"
1871    fi
1872    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1873    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1874    ckM=$?
1875    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1876    ckE=$?
1877    if test $ckM = 0 -a $ckE = 1 ; then
1878        STANDARDDIRS="$STANDARDDIRS eesupp"
1879    fi
1880    
1881  #  We have a special set of source files in eesupp/src which are  #  We have a special set of source files in eesupp/src which are
1882  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1883  #  they appear as regular source code  #  they appear as regular source code
# Line 1852  fi Line 1928  fi
1928  echo "  getting package dependency info from  $PDEPEND"  echo "  getting package dependency info from  $PDEPEND"
1929  #  Strip the comments and then convert the dependency file into  #  Strip the comments and then convert the dependency file into
1930  #  two arrays: PNAME, DNAME  #  two arrays: PNAME, DNAME
1931  cat $PDEPEND | sed -e 's/#.*$//g' \  get_pdepend_list $PDEPEND
     | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \  
     > ./.pd_tmp  
 RETVAL=$?  
 if test ! "x${RETVAL}" = x0 ; then  
     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  
     exit 1  
 fi  
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1932    
1933  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1934  #  file should eventually be added so that, for convenience, one can  #  file has been added so that, for convenience, one can specify
1935  #  specify groups of packages using names like "ocean" and "atmosphere".  #  groups of packages using names like "ocean" and "atmosphere".
1936  echo "  checking default package list:  "  echo "  checking default package list:  "
1937  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1938      for i in "." $MODS ; do      for i in "." $MODS ; do
# Line 1896  else Line 1963  else
1963          for i in $def ; do          for i in $def ; do
1964              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1965          done          done
1966          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are:$PACKAGES"
1967          RET=1          RET=1
1968          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1969          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are: $PACKAGES"
1970      fi      fi
1971  fi  fi
1972    
1973  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1974    echo "" > ./.tmp_pack
1975  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1976      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1977  done  done
# Line 1941  for i in `grep -v "-" ./.tmp_pack | sort Line 2009  for i in `grep -v "-" ./.tmp_pack | sort
2009      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2010  done  done
2011  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2012  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2013    
2014  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2015  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2016  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2017  RETVAL=$?  mnc_in=$?
2018  if test "x$RETVAL" = x0 ; then  if test "x$HAVE_NETCDF" != xt ; then
2019      if test "x$HAVE_NETCDF" != xt ; then      if test "x$mnc_in" = x0 ; then
2020          cat <<EOF          cat <<EOF
2021    
2022  *********************************************************************  *********************************************************************
# Line 1956  WARNING: the "mnc" package was enabled b Line 2024  WARNING: the "mnc" package was enabled b
2024    NetCDF applications.  Please check that:    NetCDF applications.  Please check that:
2025    
2026    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2027    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2028         NetCDF library to link against.         NetCDF library to link against.
2029    
2030    Due to this failure, the "mnc" package is now DISABLED.    Due to this failure, the "mnc" package is now DISABLED.
# Line 1966  EOF Line 2034  EOF
2034          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2035          DISABLE="$DISABLE mnc"          DISABLE="$DISABLE mnc"
2036      else      else
2037          ( 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
2038          RETVAL=$?          DISABLE="$DISABLE mnc"
2039          if test "x${RETVAL}" = x0 ; then      fi
2040              rm -f make_mnc.errors  else
2041        # we have NetCDF, we try to build MNC template files
2042        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2043        RETVAL=$?
2044        if test "x${RETVAL}" = x0 ; then
2045            rm -f make_mnc.errors
2046        else
2047            echo "Error: problem encountered while building source files in pkg/mnc:"
2048            cat make_mnc.errors 1>&2
2049            if test "x$mnc_in" = x0 ; then
2050                exit 1
2051          else          else
2052              echo "Error: problem encountered while building source files in pkg/mnc:"              DISABLE="$DISABLE mnc"
             cat make_mnc.errors 1>&2  
             exit 1  
2053          fi          fi
2054      fi      fi
2055  fi  fi
2056    
2057    #  Check for package PROFILES: if NetCDF is not available,
2058    #  then delete profiles from the list of available packages.
2059    if test "x$HAVE_NETCDF" != xt ; then
2060        echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2061        RETVAL=$?
2062        if test "x$RETVAL" = x0 ; then
2063            cat <<EOF
2064    
2065    *********************************************************************
2066    WARNING: the "profiles" package was enabled but tests failed to
2067      compile NetCDF applications.  Please check that:
2068    
2069      1) NetCDF is correctly installed for this compiler and
2070      2) the LIBS variable (within the "optfile") specifies the correct
2071           NetCDF library to link against.
2072    
2073      Due to this failure, the "profiles" package is now DISABLED.
2074    *********************************************************************
2075    
2076    EOF
2077            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2078            DISABLE="$DISABLE profiles"
2079        else
2080        #  this prevent to add profiles (due to pdepend rules) if not available
2081            DISABLE="$DISABLE profiles"
2082        fi
2083    fi
2084    
2085  echo "  applying package dependency rules"  echo "  applying package dependency rules"
2086  ck=  ck=
2087  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
2088      i=0      i=0
2089      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2090      rtot=$nname      rtot=$nname
2091      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2092    
2093          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2094          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1996  while test "x$ck" != xtt ; do Line 2100  while test "x$ck" != xtt ; do
2100                  pin="t"                  pin="t"
2101              fi              fi
2102          done          done
2103            #  or in the current $STANDARDDIRS list?
2104            for p in $STANDARDDIRS ; do
2105                if test "x$p" = "x$pname" ; then pin="t" ; fi
2106            done
2107    
2108          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2109          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 2018  while test "x$ck" != xtt ; do Line 2126  while test "x$ck" != xtt ; do
2126    
2127          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2128          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
2129                #echo "   " $pname ": need to add :" $dname
2130              in_dis="f"              in_dis="f"
2131              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2132                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 2038  while test "x$ck" != xtt ; do Line 2147  while test "x$ck" != xtt ; do
2147          #  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?
2148          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
2149              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2150              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2151              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2152              exit 1              exit 1
2153          fi          fi
# Line 2047  while test "x$ck" != xtt ; do Line 2156  while test "x$ck" != xtt ; do
2156      done      done
2157      ck=$ck"t"      ck=$ck"t"
2158  done  done
2159  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2160  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2161      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2162      if test -d $adr ; then      if test -d $adr ; then
# Line 2064  done Line 2173  done
2173    
2174  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2175  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2176  #  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
2177  #  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
2178  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2179  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2180  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 2093  for i in $PACKAGES ; do Line 2202  for i in $PACKAGES ; do
2202  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2203    
2204  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2205      case $i in      case $i in
2206          aim_v23)          aim_v23)
2207              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2208              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 2212  for i in $PACKAGES ; do
2212    
2213  done  done
2214    
2215  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2216  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2217  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2218      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2219          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 2162  fi Line 2268  fi
2268    
2269  #  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
2270  #  compiler.  #  compiler.
2271  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2272      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2273  fi  fi
2274  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2275  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2276      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2277      for j in $list_files ; do      for j in $list_files ; do
2278          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2279      done      done
2280  done  done
2281  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2282      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2283      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2284  fi  fi
2285    
2286  echo  echo
# Line 2198  if test ! "x$DIVA" = x ; then Line 2304  if test ! "x$DIVA" = x ; then
2304          fi          fi
2305          MPIINCLUDEDIR='$MPIHOME/include'          MPIINCLUDEDIR='$MPIHOME/include'
2306      fi      fi
2307        
2308      if test -r $MPIINCLUDEDIR/mpif.h ; then      if test -r $MPIINCLUDEDIR/mpif.h ; then
2309          for i in $MPI_HEADER_FILES; do          for i in $MPI_HEADER_FILES; do
2310              cp -p $MPIINCLUDEDIR/$i ./mpi_headers              cp -p $MPIINCLUDEDIR/$i ./mpi_headers
# Line 2207  if test ! "x$DIVA" = x ; then Line 2313  if test ! "x$DIVA" = x ; then
2313          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2314      else      else
2315          echo " We cannot create a copy of mpif.h!"          echo " We cannot create a copy of mpif.h!"
2316          exit -1  #       exit -1
2317      fi      fi
2318  fi  fi
2319    
# Line 2232  if test ! -r ".links.tmp/foo" ; then Line 2338  if test ! -r ".links.tmp/foo" ; then
2338      exit 1      exit 1
2339  fi  fi
2340  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2341    
2342    if test "x$OPENAD" != x ; then
2343        OAD_DONT_COMPILE="/dev/null"
2344        OAD_DONT_TRANSFORM="/dev/null"
2345        OAD_KEEP_ORIGINAL="/dev/null"
2346        OAD_CB2M_FILES="/dev/null"
2347        echo "  looking for dontCompile file:  "
2348        for i in "." $MODS ; do
2349            if test -r $i"/dontCompile" ; then
2350                OAD_DONT_COMPILE=$i"/dontCompile"
2351                echo "     found $OAD_DONT_COMPILE"
2352                break
2353            fi
2354        done
2355        echo "  looking for dontTransform file:  "
2356        for i in "." $MODS ; do
2357            if test -r $i"/dontTransform" ; then
2358                OAD_DONT_TRANSFORM=$i"/dontTransform"
2359                echo "     found $OAD_DONT_TRANSFORM"
2360                break
2361            fi
2362        done
2363        echo "  looking for keepOriginal file:  "
2364        for i in "." $MODS ; do
2365            if test -r $i"/keepOriginal" ; then
2366                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2367                echo "     found $OAD_KEEP_ORIGINAL"
2368                break
2369            fi
2370        done
2371        echo "  looking for cb2mFiles:  "
2372        for i in "." $MODS ; do
2373            if test -r $i"/cb2mFiles" ; then
2374                OAD_CB2M_FILES=$i"/cb2mFiles"
2375                echo "     found $OAD_CB2M_FILES"
2376                break
2377            fi
2378        done
2379        echo "   OpenAD exceptions:  "
2380    fi
2381    
2382  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2383  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2384  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2385  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2386  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2387  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2388  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2389    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2390  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2391  for d in $alldirs ; do  for d in $alldirs ; do
2392      deplist=      deplist=
2393      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2394      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2395        if test "x$OPENAD" != x ; then
2396            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2397        fi
2398      for sf in $sfiles ; do      for sf in $sfiles ; do
2399          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2400              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
# Line 2278  for d in $alldirs ; do Line 2429  for d in $alldirs ; do
2429                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2430                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2431                      case $extn in                      case $extn in
2432                          F)                        F)
2433                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2434                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2435                              ;;                          if test "x$OPENAD" != x ; then
2436                          F90)                              basename=${sf%%.F}
2437                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2438                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2439                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2440                          c)                                  if test -z "$toBeIgnored" ; then
2441                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2442                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2443                              ;;                                  else
2444                          h)                                      echo "    not to be compiled   :  $sf"
2445                              echo    " \\"  >> hlist.inc                                  fi
2446                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2447                              ;;                                   # or we want to retain the untransformed version
2448                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2449                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2450                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2451                              ;;                                      echo "    not to be transformed:  $sf"
2452                      esac                                  fi
2453                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2454                                        echo "    original to be kept  :  $sf"
2455                                    fi
2456                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2457                                        echo    " \\"  >> nonADF77srclist.tmp
2458                                        printf " $sf" >> nonADF77srclist.tmp
2459                                    fi
2460                                fi
2461                            fi
2462                            ;;
2463                        F90)
2464                            echo    " \\"  >> F90srclist.tmp
2465                            printf " $sf" >> F90srclist.tmp
2466                            ;;
2467                        c)
2468                            echo    " \\"  >> csrclist.tmp
2469                            printf " $sf" >> csrclist.tmp
2470                            ;;
2471                        h)
2472                            echo    " \\"  >> hsrclist.tmp
2473                            printf " $sf" >> hsrclist.tmp
2474                            ;;
2475                        flow)
2476                            echo    " \\"  >> ad_flow_files.tmp
2477                            printf " $sf" >> ad_flow_files.tmp
2478                            ;;
2479                       esac
2480                    fi
2481              fi              fi
2482          fi          fi
2483      done      done
2484      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2485          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2486            echo "" >> srclinks.tmp
2487          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2488          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2489          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2490    # This may happen when make thinks that a header file has to be "remade"
2491    # because a module it depends on has changed.  In this case we do nothing.
2492            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2493          fi
2494      fi      fi
2495  done  done
2496  rm -rf .links.tmp  rm -rf .links.tmp
2497  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2498  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2499  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2500  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2501  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2502    echo "" >> ad_flow_files.tmp
2503    
2504    CMDLINE=$0
2505    for xx in "$@" ; do nw=`echo $xx | wc -w`
2506        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2507                            else CMDLINE="$CMDLINE '$xx'" ; fi
2508    done
2509    
2510  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2511      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2512  fi  fi
2513  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2514  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 2326  echo "#    $MACHINE" >> $MAKEFILE Line 2516  echo "#    $MACHINE" >> $MAKEFILE
2516  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2517  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2518  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2519  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2520  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2521  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2522    
# Line 2337  EXE_SVD=$EXECUTABLE"_svd" Line 2527  EXE_SVD=$EXECUTABLE"_svd"
2527  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2528  #  #
2529  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2530  #  #
2531  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2532  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2533  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 2357  cat >>$MAKEFILE <<EOF Line 2547  cat >>$MAKEFILE <<EOF
2547  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2548    
2549  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2550  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2551  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2552  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2553  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 2383  else Line 2573  else
2573      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2574  fi  fi
2575    
 #  Note: figure out some way to add Hyades JAM libraries here  
2576  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2577  # Unix ln (link)  # Unix ln (link)
2578  LN = ${LN}  LN = ${LN}
# Line 2410  INCLUDES = ${INCLUDES} Line 2599  INCLUDES = ${INCLUDES}
2599  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2600  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2601  # Optim./debug for FC  # Optim./debug for FC
2602  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2603  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2604  # Optim./debug for FC  # Optim./debug for FC
2605  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2606  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2607    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2608  # Flags for CC  # Flags for CC
2609  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2610  # Files that should not be optimized  # Files that should not be optimized
# Line 2427  MAKEFILE=${MAKEFILE} Line 2617  MAKEFILE=${MAKEFILE}
2617    
2618  EOF  EOF
2619    
2620  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2621  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2622  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2623  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2624  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2625    cat ad_flow_files.tmp   >> $MAKEFILE
2626    
2627    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2628    
2629  echo >> $MAKEFILE  echo >> $MAKEFILE
2630  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2631  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2632  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2633    # hence the $FS and $FS90 here.
2634    # for fixed format f90 files we use ff90 or FF90 resp
2635    # but these are not expected to be the original source files
2636    
2637    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2638    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2639    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2640    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2641  echo >> $MAKEFILE  echo >> $MAKEFILE
2642  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2643  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  
2644    
2645  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2646    
2647  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2648  \$(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)
2649          @echo Creating \$@ ...          @echo Creating \$@ ...
2650          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2651  depend:  depend:
2652          @make links          @make links
2653          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2654          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2655          -rm -f makedepend.out          -rm -f makedepend.out
2656    
# Line 2458  lib: libmitgcmuv.a Line 2658  lib: libmitgcmuv.a
2658    
2659  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2660          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2661            ar d   libmitgcmuv.a main.o
2662    
2663  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2664    
2665  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2666    
2667  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2668          @printf 'running ... '          @printf 'running ... '
2669          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2670    
2671  clean:  clean:
2672          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2673            -rm -rf *.o
2674            -rm -rf *.$FS *.flowdir
2675            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2676  Clean:  Clean:
2677          @make clean          @make clean
2678          @make cleanlinks          @make cleanlinks
2679          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2680          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2681            -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2682            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2683  CLEAN:  CLEAN:
2684          @make Clean          @make Clean
2685          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2686          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2687          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2688          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2689            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2690          -rm -rf mnc_test_*          -rm -rf mnc_test_*
2691    
2692  #eh3 Makefile: makefile  #eh3 Makefile: makefile
# Line 2488  makefile: Line 2695  makefile:
2695  cleanlinks:  cleanlinks:
2696          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2697    
2698  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2699  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2700          @echo Creating \$@ ...          @echo Creating \$@ ...
2701          @$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 2513  if test "x$EMBED_SRC" = xt ; then Line 2720  if test "x$EMBED_SRC" = xt ; then
2720    
2721  decode_files.o : EMBEDDED_FILES.h  decode_files.o : EMBEDDED_FILES.h
2722    
2723  ##  \$(F77FILES)  ##  \$(F77_PP_SRC_FILES)
2724  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
2725          @echo Creating \$@ ...          @echo Creating \$@ ...
2726          -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
2727          -rm -f all_fF.tar.gz          -rm -f all_fF.tar.gz
2728          -gzip all_fF.tar          -gzip all_fF.tar
2729    
# Line 2540  cat >>$MAKEFILE <<EOF Line 2747  cat >>$MAKEFILE <<EOF
2747          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2748  .F90.$FS90:  .F90.$FS90:
2749          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2750    .FF90.f$FS90:
2751            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2752  .$FS90.o:  .$FS90.o:
2753          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2754    .f$FS90.o:
2755            cp \$< \$(basename  \$<).f90
2756            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2757  .c.o:  .c.o:
2758          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2759    .flow.flowdir:
2760            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2761    
2762  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2763  .F.p:  .F.p:
# Line 2551  cat >>$MAKEFILE <<EOF Line 2765  cat >>$MAKEFILE <<EOF
2765  .p.$FS:  .p.$FS:
2766          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2767    
2768    EOF
2769    
2770  #=========================================  #=========================================
2771  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2772    #===  for TAMC/TAF  ======================
2773    
2774    if test "x$OPENAD" = x ; then
2775    
2776    cat >>$MAKEFILE <<EOF
2777    
2778  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2779  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2576  done Line 2797  done
2797  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2798  echo >> $MAKEFILE  echo >> $MAKEFILE
2799  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2800  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2801  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2802      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2803      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2804  done  done
2805  echo >> $MAKEFILE  echo >> $MAKEFILE
2806  rm -f ad_files  rm -f adSrcFiles.tmp
2807    
2808  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2809    
# Line 2591  adall: \$(EXE_AD) Line 2812  adall: \$(EXE_AD)
2812  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2813  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2814    
2815  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2816          @$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
2817          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
2818          -rm -f ad_config.template          -rm -f ad_config.template
2819          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2820          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2821          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2822    
2823  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2824          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2825            ls -l ad_input_code_ad.$FS
2826          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
2827    
2828  adtafonly:  adtafonly:
2829          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2830            ls -l ad_input_code_ad.$FS
2831          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
2832    
2833  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2834          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2835    
2836  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2837          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2838          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
2839    
2840  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2841          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2842    
2843  adonlyfwd:  adonlyfwd:
2844          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2845    
2846  adtrick:  adtrick:
2847          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2848    
# Line 2628  ftlall: ftl_taf Line 2851  ftlall: ftl_taf
2851  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2852  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2853    
2854  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2855          @$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
2856          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
2857          -rm -f ftl_config.template          -rm -f ftl_config.template
2858          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2859          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2860          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2861    
2862  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2863          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2864            ls -l ftl_input_code_ftl.$FS
2865          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
2866    
2867  ftltafonly:  ftltafonly:
2868          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2869            ls -l ftl_input_code_ftl.$FS
2870          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
2871    
2872  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2873          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2874    
2875  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
2876          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2877          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
2878    
2879  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2880          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2881    
2882    
2883  # ... SVD ...  # ... SVD ...
# Line 2679  svd_touch: Line 2904  svd_touch:
2904          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
2905          -rm -f ftl_config.template          -rm -f ftl_config.template
2906    
2907  #=========================================  EOF
2908    
2909    fi
2910    
2911    #===  for OpenAD  ========================
2912    
2913    if test "x$OPENAD" != x ; then
2914    
2915    # ============ begin OpenAD specific section ==============
2916    
2917    cat >>$MAKEFILE <<EOF
2918    
2919    # all the source files linked from the various locations:
2920    ALL_LINKED_FILES= \
2921    \$(F77_SRC_FILES) \
2922    \$(C_SRC_FILES) \
2923    \$(H_SRC_FILES) \
2924    \$(F90_SRC_FILES) \
2925    \$(SPECIAL_FILES)
2926    
2927    ifndef OPENADROOT
2928      \$(error "Error:  environment variable OPENADROOT not defined!")
2929    endif
2930    
2931    ifndef XAIFSCHEMAROOT
2932      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2933    endif
2934    
2935    ifndef XAIFBOOSTERROOT
2936      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2937    endif
2938    
2939    EOF
2940    
2941    echo "  Add the source list for common block to module conversion "
2942    echo >> $MAKEFILE
2943    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2944    for i in `cat ${OAD_CB2M_FILES}` ; do
2945      echo    " \\" >> $MAKEFILE
2946      printf " $i" >> $MAKEFILE
2947    done
2948    echo >> $MAKEFILE
2949    
2950    echo "  Add the source list for AD code generation"
2951    echo >> $MAKEFILE
2952    printf "AD_FILES = " >> $MAKEFILE
2953    for i in `cat ${OAD_CB2M_FILES}` ; do
2954      echo    " \\" >> $MAKEFILE
2955      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2956    done
2957    AD_FILES=`cat adSrcFiles.tmp`
2958    for i in $AD_FILES ; do
2959      basename=${i%%.f}
2960      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2961      if test -z "$toBeIgnored" ; then
2962        echo    " \\" >> $MAKEFILE
2963        printf " $i" >> $MAKEFILE
2964      fi
2965    done
2966    echo >> $MAKEFILE
2967    rm -f adSrcFiles.tmp
2968    
2969    cat >>$MAKEFILE <<EOF
2970    
2971    adAll: \$(EXE_AD)
2972    .PHONY: adAll
2973    
2974    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2975    
2976    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2977    
2978    .PHONY: adDepend
2979    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2980            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2981            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2982            -rm -f makedepend.out
2983    
2984    OPENAD_SUPPORT_F90_SRC_FILES = \
2985    w2f__types.F90 \
2986    OAD_active.F90 \
2987    OAD_cp.F90 \
2988    OAD_rev.F90 \
2989    OAD_tape.F90
2990    
2991    OPENAD_SUPPORT_C_SRC_FILES = \
2992    iaddr.c \
2993    timeRatio.c
2994    
2995    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
2996            cat \$^ > \$@
2997    
2998    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
2999            cat \$^ > \$@
3000    
3001    f95_test.out: f95_test_mods.f90 f95_test.f90
3002            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
3003            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3004    
3005    # the file included below is created by the
3006    # postProcessor and its inclusion sets the
3007    # variable POSTPROCESSEDFILES
3008    # used below. Because the file is made during
3009    # make it won't be read until the second (recursive)
3010    # invocation in the rule below
3011    -include postProcess.make
3012    
3013    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3014    
3015    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)
3016    
3017    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3018    ifeq (\$(MAKELEVEL),0)
3019            \$(MAKE) adAll
3020    else
3021            touch \$@
3022    endif
3023    
3024    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3025    ifeq (\$(MAKELEVEL),1)
3026            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3027    else
3028            touch \$@
3029    endif
3030    
3031    # makefile debug rule
3032    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3033    .PHONY: openad
3034    
3035    # create the module files
3036    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3037            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3038    
3039    # create the header files
3040    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3041            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3042    
3043    # change everybody else to use the new module files:
3044    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3045            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3046    
3047    # makefile debug rule
3048    small_f: \$(CB2M_F90_PP_SRC_FILES)
3049    .PHONY: small_f
3050    
3051    ad_output.txt: \$(EXE_AD)
3052            @printf 'linking data files ... '
3053            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3054            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3055            @printf 'running ... '
3056            @./\$(EXE_AD) > \$@
3057    
3058    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3059    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3060            cat \$^ > \$@
3061    
3062    # strip all comments and blanks to reduce
3063    # the file size in order to reduce perl's memory requirements
3064    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3065            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3066    
3067    # mfef90 preprocessing
3068    # expand statement functions
3069    # expose mfef90 specific substring handling
3070    # add the w2f__types module
3071    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3072            ./mfef90 -r8 -z -F -N132 \$<
3073            mv \$<.B \$(basename \$<).B
3074            ./whirl2f -openad \$(basename \$<).B
3075            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3076    
3077    # canonicalizer
3078    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3079            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3080    
3081    # F -> WHIRL
3082    # note that the canonicalized version cuts off at col 72
3083    # doing this also for string constants which is ok as long
3084    # as we are in fixed mode and cut of exactly there.
3085    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3086    # characters respectively.
3087    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3088            ./mfef90 -r8 -z -F \$<
3089            mv \$<.B \$@
3090    
3091    # WHIRL -> XAIF
3092    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3093            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3094    
3095    # XAIF -> XAIF'
3096    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
3097            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3098    
3099    # XAIF' -> WHIRL'
3100    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3101            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3102    
3103    # WHIRL' -> F'
3104    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3105            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3106    
3107    # insert template directives
3108    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
3109            ../OAD_support/insertTemplateDir.bash \$< \$@
3110    
3111    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3112    # postprocess F'
3113    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3114            # the target is a placeholder to signal execution of the rule
3115            touch \$@
3116            # this step also creates the file postProcess.make but we cannot
3117            # name it as the target or else make will try to remake it for
3118            # the include directive above for any rule, e.g. make clean
3119            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3120    
3121    # setup some links
3122    %.xsd:
3123            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3124    
3125    mfef90:
3126            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3127    
3128    # link the support files:
3129    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3130            \$(LN) ../OAD_support/\$@ .
3131    
3132    whirl2xaif xaif2whirl:
3133            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3134    
3135    preProcess.py postProcess.py:
3136            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3137    
3138    whirl2f whirl2f_be:
3139            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3140    
3141    oadDriver:
3142            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3143    
3144    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3145    
3146    # ============ end OpenAD specific section ==============
3147    
3148  EOF  EOF
3149    
3150    fi
3151    
3152    #=========================================
3153    
3154  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3155      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3156  fi  fi
# Line 2718  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3186  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3186  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3187    
3188  # Create special header files  # Create special header files
3189  $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"
3190  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3191      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3192  else  else

Legend:
Removed from v.1.154  
changed lines
  Added in v.1.206

  ViewVC Help
Powered by ViewVC 1.1.22