/[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.183 by utke, Wed Jan 14 20:08:40 2009 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 611  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 630  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 646  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 1038  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=
# Line 1058  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 1122  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 DEVEL 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 FEXTRAFLAGS"  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 1166  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 1187  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 1208  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 1299  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 1326  for ac_option in "$@" ; do Line 1334  for ac_option in "$@" ; do
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 1361  for ac_option in "$@" ; do Line 1370  for ac_option in "$@" ; do
1370              ;;              ;;
1371                    
1372      esac      esac
1373        
1374  done  done
1375    
1376    
# Line 1373  if test -f ./.genmakerc ; then Line 1382  if test -f ./.genmakerc ; then
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."      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1384      echo "WARNING: ignore \"./.genmakerc\" and continue."      echo "WARNING: ignore \"./.genmakerc\" and continue."
1385      echo      echo
1386  fi  fi
1387    
1388  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
# Line 1406  fi Line 1415  fi
1415  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1416  version_file="${ROOTDIR}/doc/tag-index"  version_file="${ROOTDIR}/doc/tag-index"
1417  if test -f $version_file ; then  if test -f $version_file ; then
1418      THISVER=`grep '^checkpoint' $version_file | head -1`      THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1419  #-  remove ./BUILD_INFO.h file if older than version_file  #-  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      if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1421          echo "  remove ./BUILD_INFO.h (older than ${version_file})"          echo "  remove ./BUILD_INFO.h (older than ${version_file})"
# Line 1567  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 1775  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 1831  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 1843  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 1863  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 1876  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 1972  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 1982  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 for package MNC: if NetCDF is available, then build the MNC  #  Check for package MNC: if NetCDF is available, then build the MNC
2034  #  template files ; otherwise, delete mnc from the list of 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  #  Check for package PROFILES: if NetCDF is not available,  #  Check for package PROFILES: if NetCDF is not available,
2075  #  then delete profiles from the list of available packages.  #  then delete profiles from the list of available packages.
2076  echo $PACKAGES | grep ' profiles ' > /dev/null 2>&1  if test "x$HAVE_NETCDF" != xt ; then
2077  RETVAL=$?      echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2078  if test "x$RETVAL" = x0 ; then      RETVAL=$?
2079      if test "x$HAVE_NETCDF" != xt ; then      if test "x$RETVAL" = x0 ; then
2080          cat <<EOF          cat <<EOF
   
2081  *********************************************************************  *********************************************************************
2082  WARNING: the "profiles" package was enabled but tests failed to  WARNING: the "profiles" package was enabled but tests failed to
2083    compile NetCDF applications.  Please check that:    compile NetCDF applications.  Please check that:
2084    
2085    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2086    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2087         NetCDF library to link against.         NetCDF library to link against.
2088    
2089    Due to this failure, the "profiles" package is now DISABLED.    Due to this failure, the "profiles" package is now DISABLED.
2090  *********************************************************************  *********************************************************************
   
2091  EOF  EOF
2092          PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2093          DISABLE="$DISABLE profiles"          DISABLE="$DISABLE profiles"
2094        else
2095        #  this prevent to add profiles (due to pdepend rules) if not available
2096            DISABLE="$DISABLE profiles"
2097      fi      fi
2098  fi  fi
2099    
2100  echo "  applying package dependency rules"  if  test "x${PKG_DEPEND}" != x ; then
2101  ck=    echo "  applying package dependency rules"
2102  while test "x$ck" != xtt ; do    ck=
2103      while test "x$ck" != xtt ; do
2104      i=0      i=0
2105      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2106      rtot=$nname      rtot=$nname
# Line 2062  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 2105  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 2113  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 2131  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 2160  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 2170  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 2233  if test -f ./adSrcFiles.tmp ; then Line 2289  if test -f ./adSrcFiles.tmp ; then
2289      rm -f ./adSrcFiles.tmp      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
# Line 2265  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 2300  if test ! -r ".links.tmp/foo" ; then Line 2357  if test ! -r ".links.tmp/foo" ; then
2357  fi  fi
2358  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2359    
2360  if test "x$OPENAD" != x ; then  if test "x$OPENAD" != x ; then
2361      OAD_DONT_COMPILE="/dev/null"      OAD_DONT_COMPILE="/dev/null"
2362      OAD_DONT_TRANSFORM="/dev/null"      OAD_DONT_TRANSFORM="/dev/null"
2363      OAD_KEEP_ORIGINAL="/dev/null"      OAD_KEEP_ORIGINAL="/dev/null"
# Line 2353  for d in $alldirs ; do Line 2410  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      if test "x$OPENAD" != x ; then
2414          sfiles=`( echo $sfiles | grep -v _cb2m\. )`          sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2415      fi      fi
2416      for sf in $sfiles ; do      for sf in $sfiles ; do
# Line 2393  for d in $alldirs ; do Line 2450  for d in $alldirs ; do
2450                        F)                        F)
2451                          echo    " \\"  >> F77srclist.tmp                          echo    " \\"  >> F77srclist.tmp
2452                          printf " $sf" >> F77srclist.tmp                          printf " $sf" >> F77srclist.tmp
2453                          if test "x$OPENAD" != x ; then                          if test "x$OPENAD" != x ; then
2454                              basename=${sf%%.F}                              basename=${sf%%.F}
2455                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2456                              if test -z "$isAD" ; then                              if test -z "$isAD" ; then
2457                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2458                                  if test -z "$toBeIgnored" ; then                                  if test -z "$toBeIgnored" ; then
2459                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> nonADF77srclist.tmp
2460                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> nonADF77srclist.tmp
2461                                  else                                  else
2462                                      echo "    not to be compiled   :  $sf"                                      echo "    not to be compiled   :  $sf"
2463                                  fi                                  fi
2464                              else # file is initially listed as an AD file we want to exclude it                              else # file is initially listed as an AD file we want to exclude it
2465                                   # or we want to retain the untransformed version                                   # or we want to retain the untransformed version
2466                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2467                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2468                                  if test -n "$notToBeTransformed"; then                                  if test -n "$notToBeTransformed"; then
2469                                      echo "    not to be transformed:  $sf"                                      echo "    not to be transformed:  $sf"
2470                                  fi                                  fi
2471                                  if test -n "$untransformedVersionToBeKept" ; then                                  if test -n "$untransformedVersionToBeKept" ; then
2472                                      echo "    original to be kept  :  $sf"                                      echo "    original to be kept  :  $sf"
2473                                  fi                                      fi
2474                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2475                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> nonADF77srclist.tmp
2476                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> nonADF77srclist.tmp
# Line 2462  echo "" >> F90srclist.tmp Line 2519  echo "" >> F90srclist.tmp
2519  echo "" >> hsrclist.tmp  echo "" >> hsrclist.tmp
2520  echo "" >> ad_flow_files.tmp  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 2471  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 2482  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 2502  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 2528  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 2584  rm -f F77srclist.tmp nonADF77srclist.tmp Line 2646  rm -f F77srclist.tmp nonADF77srclist.tmp
2646    
2647  echo >> $MAKEFILE  echo >> $MAKEFILE
2648    
2649  # add definitions for preprocessed sources  # add definitions for preprocessed sources
2650  # and note that not all systems allow case sensitive extensions  # and note that not all systems allow case sensitive extensions
2651  # hence the $FS and $FS90 here.  # hence the $FS and $FS90 here.
2652  # for fixed format f90 files we use ff90 or FF90 resp  # for fixed format f90 files we use ff90 or FF90 resp
2653  # but these are not expected to be the original source files  # but these are not expected to be the original source files
2654    
2655  echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
# Line 2628  clean: Line 2690  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 *.flowdir          -rm -rf *.$FS *.flowdir
2693          -rm -rf *.f$FS90 *_mod.h *_mod.F90 *.FF90 *.mod-whirl ad_input*          -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
         -rm -rf temp.sed  
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 f90mkdepend.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          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2701  CLEAN:  CLEAN:
2702          @make Clean          @make Clean
# Line 2676  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  ##  \$(F77_PP_SRC_FILES)  ##  \$(F77_PP_SRC_FILES)
2742  all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) 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) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) 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
# Line 2727  EOF Line 2789  EOF
2789  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2790  #===  for TAMC/TAF  ======================  #===  for TAMC/TAF  ======================
2791    
2792  if test "x$OPENAD" == x ; then  if test "x$OPENAD" = x ; then
2793    
2794  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2795    
# Line 2768  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) \$(H_SRC_FILES)  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 \$(F77_PP_SRC_FILES)          @make \$(F77_PP_SRC_FILES)
2838          @make \$(FLOFILES)          @make \$(FLOFILES)
2839          cat \$(FLOFILES) \$(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
# Line 2787  adtafonly: Line 2849  adtafonly:
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 2826  ftltafonly: Line 2888  ftltafonly:
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 2862  svd_touch: Line 2924  svd_touch:
2924    
2925  EOF  EOF
2926    
2927  fi  fi
2928    
2929  #===  for OpenAD  ========================  #===  for OpenAD  ========================
2930    
2931  if test "x$OPENAD" != x ; then  if test "x$OPENAD" != x ; then
2932    
2933  # ============ begin OpenAD specific section ==============  # ============ begin OpenAD specific section ==============
2934    
2935  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2936    
2937  # all the source files linked from the various locations:  # all the source files linked from the various locations:
2938  ALL_LINKED_FILES= \  ALL_LINKED_FILES= \
2939  \$(F77_SRC_FILES) \  \$(F77_SRC_FILES) \
2940  \$(C_SRC_FILES) \  \$(C_SRC_FILES) \
# Line 2924  rm -f adSrcFiles.tmp Line 2986  rm -f adSrcFiles.tmp
2986    
2987  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2988    
2989  adAll: \$(EXE_AD)  adAll: \$(EXE_AD)
2990  .PHONY: adAll  .PHONY: adAll
2991    
2992  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
# Line 2942  w2f__types.F90 \ Line 3004  w2f__types.F90 \
3004  OAD_active.F90 \  OAD_active.F90 \
3005  OAD_cp.F90 \  OAD_cp.F90 \
3006  OAD_rev.F90 \  OAD_rev.F90 \
3007  OAD_tape.F90          OAD_tape.F90
3008    
3009  OPENAD_SUPPORT_C_SRC_FILES = \  OPENAD_SUPPORT_C_SRC_FILES = \
3010  iaddr.c \  iaddr.c \
# Line 2951  timeRatio.c Line 3013  timeRatio.c
3013  f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)  f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3014          cat \$^ > \$@          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  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 \$^ > \$@          cat \$^ > \$@
3018    
3019  f95_test.out: f95_test_mods.f90 f95_test.f90  f95_test.out: f95_test_mods.f90 f95_test.f90
3020          f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1          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          f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
3022    
3023  AD_OBJ_FILES=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) all_mods.xb.x2w.w2f.pp.o  ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.o \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)  # 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)) \$(AD_OBJ_FILES)  \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3043          @echo Creating \$@ ...  ifeq (\$(MAKELEVEL),1)
3044          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3045    else
3046            touch \$@
3047    endif
3048    
3049  # makefile debug rule  # makefile debug rule
3050  openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90  openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3051  .PHONY: openad  .PHONY: openad
3052    
3053  # create the module files  # create the module files
3054  %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk  %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3055          ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk          ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3056    
3057  # create the header files  # create the header files
3058  %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk  %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3059          ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)          ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3060    
3061  # change everybody else to use the new module files:  # change everybody else to use the new module files:
# Line 2992  ad_output.txt: \$(EXE_AD) Line 3074  ad_output.txt: \$(EXE_AD)
3074          @./\$(EXE_AD) > \$@          @./\$(EXE_AD) > \$@
3075    
3076  CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)  CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3077  ad_input_code.f$FS90: ../OAD_support/maxMinDefs.f \$(CB2M_AD_FILES)  ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3078          cat \$^ > \$@          cat \$^ > \$@
3079    
3080  # strip all comments and blanks to reduce  # strip all comments and blanks to reduce
3081  # the file size in order to reduce perl's memory requirements  # the file size in order to reduce perl's memory requirements
3082  ad_input_code_sf.f$FS90 : ad_input_code.f$FS90  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 > \$@          cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3084    
3085  # mfef90 preprocessing  # mfef90 preprocessing
3086  # expand statement functions  # expand statement functions
3087  # expose mfef90 specific substring handling  # expose mfef90 specific substring handling
3088  # add the w2f__types module  # 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  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 \$<          ./mfef90 -r8 -z -F -N132 \$<
3091          mv \$<.B \$(basename \$<).B          mv \$<.B \$(basename \$<).B
3092          ./whirl2f -openad \$(basename \$<).B          ./whirl2f -openad \$(basename \$<).B
3093          cat w2f__types.f90 \$(basename \$<).w2f.f > \$@          cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3094    
3095  # canonicalizer  # canonicalizer
3096  ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py  ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3097          ./preProcess.py -H -S \$< -o \$@          ./preProcess.py --timing --r8 -H -S \$< -o \$@
3098    
3099  # F -> WHIRL  # F -> WHIRL
3100  # note that the canonicalized version cuts off at col 72  # note that the canonicalized version cuts off at col 72
3101  # doing this also for string constants which is ok as long  # doing this also for string constants which is ok as long
3102  # as we are in fixed mode and cut of exactly there.  # as we are in fixed mode and cut of exactly there.
3103  # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)  # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3104  # characters respectively.  # characters respectively.
3105  ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90  ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3106          ./mfef90 -r8 -z -F \$<          ./mfef90 -r8 -z -F \$<
# Line 3034  ad_input_code_sf.w2f.pre.xb.xaif : ad_in Line 3116  ad_input_code_sf.w2f.pre.xb.xaif : ad_in
3116    
3117  # XAIF' -> WHIRL'  # XAIF' -> WHIRL'
3118  ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl  ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3119          ./xaif2whirl --debug 1 --structured ad_input_code_sf.w2f.pre.B \$<          ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3120    
3121  # WHIRL' -> F'  # 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  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 \$<          ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3124    
3125  # insert template directives  # 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  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 \$< \$@          ../OAD_support/insertTemplateDir.bash \$< \$@
3128    
3129    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3130  # postprocess F'  # postprocess F'
3131  ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 multi-pp.pl ../OAD_support/ad_inline.f \$(wildcard ../OAD_support/ad_template.*.f)  postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3132          perl multi-pp.pl -inline=../OAD_support/ad_inline.f \$<          # the target is a placeholder to signal execution of the rule
3133          # the postprocessor still gets the name wrong          touch \$@
3134          cat \$<.pp | sed 's/RETURN//' > \$@          # 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  # extract all transformed modules          # the include directive above for any rule, e.g. make clean
3137  all_mods.xb.x2w.w2f.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90          ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
         cat \$< | sed -n '/MODULE /,/END MODULE/p' > \$@  
   
 # remove the transformed globals module from the  
 # transformed ad_input_code file  
 # and remove for now the duplicate variables  
 # and fix 2 data statements  
 ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.pp.f$FS90  
         cat \$< | sed '/MODULE /,/END MODULE/d' | sed '/^      INTEGER(w2f__i4) DOLOOP_UB/d' > \$@  
3138    
3139  # setup some links  # setup some links
3140  %.xsd:  %.xsd:
3141          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3142    
3143  mfef90:  mfef90:
3144          \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .          \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3145    
3146  # link the support files:  # link the support files:
3147  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3148          \$(LN) ../OAD_support/\$@ .          \$(LN) ../OAD_support/\$@ .
3149    
3150  whirl2xaif xaif2whirl:  whirl2xaif xaif2whirl:
3151          \$(LN) \${OPENADFORTTK}/bin/\$@ .          \$(LN) \${OPENADFORTTK}/bin/\$@ .
3152    
3153  %.pl:  preProcess.py postProcess.py:
         \$(LN) \${OPENADFORTTK}/bin/\$@ .  
   
 preProcess.py:  
3154          \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .          \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3155    
3156  whirl2f whirl2f_be:  whirl2f whirl2f_be:
# Line 3087  whirl2f whirl2f_be: Line 3159  whirl2f whirl2f_be:
3159  oadDriver:  oadDriver:
3160          \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@          \$(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 ==============  # ============ end OpenAD specific section ==============
3165    
3166  EOF  EOF
# Line 3130  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.183  
changed lines
  Added in v.1.208

  ViewVC Help
Powered by ViewVC 1.1.22