/[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.205 by jmc, Sun May 23 03:45:58 2010 UTC revision 1.209 by jmc, Mon Nov 1 00:20:28 2010 UTC
# Line 56  test_for_string_in_file() { Line 56  test_for_string_in_file() {
56  # the package list.  # the package list.
57  expand_pkg_groups() {  expand_pkg_groups() {
58      new_packages=      new_packages=
     PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups"  
59      if test -r $PKG_GROUPS ; then      if test -r $PKG_GROUPS ; then
60          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp
61          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp
# Line 67  expand_pkg_groups() { Line 66  expand_pkg_groups() {
66              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" = x0 ; then
67                  matched=1                  matched=1
68                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`                  replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'`
69                  echo "    replacing \"$i\" with: $replace"                  echo "    replacing \"$i\" with:$replace"
70                  new_packages="$new_packages $replace"                  new_packages="$new_packages $replace"
71              else              else
72                  new_packages="$new_packages $i"                  new_packages="$new_packages $i"
# Line 110  EOF Line 109  EOF
109              check_for_broken_Ff              check_for_broken_Ff
110          else          else
111              cat <<EOF 2>&1              cat <<EOF 2>&1
112  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
113    (fails the "cp" test) and this program cannot find a suitable    (fails the "cp" test) and this program cannot find a suitable
114    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
115    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
116    
117  EOF  EOF
# Line 146  EOF Line 145  EOF
145              check_for_broken_Ff              check_for_broken_Ff
146          else          else
147              cat <<EOF 2>&1              cat <<EOF 2>&1
148  ERROR: Your file system cannot distinguish between *.F and *.f files  ERROR: Your file system cannot distinguish between *.F and *.f files
149    (fails the "make/ln" test) and this program cannot find a suitable    (fails the "make/ln" test) and this program cannot find a suitable
150    replacement extension.  Please try a different build environment or    replacement extension.  Please try a different build environment or
151    contact the <MITgcm-support@mitgcm.org> list for help.    contact the <MITgcm-support@mitgcm.org> list for help.
152    
153  EOF  EOF
# Line 194  look_for_makedepend()  { Line 193  look_for_makedepend()  {
193          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
194  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"  #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
195  #  #
196  #   Some "makedepend" implementations will die if they cannot  #   Some "makedepend" implementations will die if they cannot
197  #   find a Makefile -- so this file is here to gives them an  #   find a Makefile -- so this file is here to gives them an
198  #   empty one to find and parse.  #   empty one to find and parse.
199  EOF  EOF
200          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
# Line 212  EOF Line 211  EOF
211              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
212          else          else
213              echo "    a system-default makedepend was not found."              echo "    a system-default makedepend was not found."
214                
215              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
216              build_cyrus_makedepend              build_cyrus_makedepend
217              RETVAL=$?              RETVAL=$?
# Line 269  build_embed_encode() Line 268  build_embed_encode()
268              return 1              return 1
269          fi          fi
270          clist="cc gcc c89 $CC"          clist="cc gcc c89 $CC"
271          for ic in $clist ; do          for ic in $clist ; do
272              comm="$ic -o encode_files encode_files.c"              comm="$ic -o encode_files encode_files.c"
273              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1              ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
274              RETVAL=$?              RETVAL=$?
# Line 304  find_possible_configs()  { Line 303  find_possible_configs()  {
303      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
304      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
305      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
306        
307      echo "test" > test      echo "test" > test
308      ln -s ./test link      ln -s ./test link
309      RETVAL=$?      RETVAL=$?
# Line 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 484  get_pdepend_list()  { Line 483  get_pdepend_list()  {
483          > ./.pd_tmp          > ./.pd_tmp
484      RETVAL=$?      RETVAL=$?
485      if test ! "x${RETVAL}" = x0 ; then      if test ! "x${RETVAL}" = x0 ; then
486        echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$1\""        echo "Error: unable to parse package dependencies -- please check PKG_DEPEND=\"$1\""
487        exit 1        exit 1
488      fi      fi
489      . ./.pd_tmp      . ./.pd_tmp
# Line 512  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      -bash NAME
526            Explicitly specify the Bourne or BASH shell to use            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 542  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      -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
# Line 591  Usage: "$0" [OPTIONS] Line 590  Usage: "$0" [OPTIONS]
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 628  Usage: "$0" [OPTIONS] Line 627  Usage: "$0" [OPTIONS]
627            Activate OpenMP code + use Compiler option OMPFLAG            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    While it is most often a single word, the "NAME" variables specified    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 659  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 1051  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 1138  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 IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP 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 1169  quick list of options, use "genmake -h" Line 1167  quick list of options, use "genmake -h"
1167    
1168  EOF  EOF
1169    
1170    #- clean-up previous genmake logfiles:
1171    rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
1172    
1173  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1174  gm_local="genmake_local"  gm_local="genmake_local"
1175  printf "  getting local config information:  "  printf "  getting local config information:  "
# Line 1194  for ac_option in "$@" ; do Line 1195  for ac_option in "$@" ; do
1195          ac_prev=          ac_prev=
1196          continue          continue
1197      fi      fi
1198        
1199      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1200        
1201      case $ac_option in      case $ac_option in
1202                    
1203          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 1215  for ac_option in "$@" ; do Line 1216  for ac_option in "$@" ; do
1216              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
1217                    
1218          -pdepend | --pdepend)          -pdepend | --pdepend)
1219              ac_prev=PDEPEND ;;              ac_prev=PKG_DEPEND ;;
1220          -pdepend=* | --pdepend=*)          -pdepend=* | --pdepend=*)
1221              PDEPEND=$ac_optarg ;;              PKG_DEPEND=$ac_optarg ;;
1222                    
1223          -pdefault | --pdefault)          -pgroups | --pgroups)
1224              ac_prev=PDEFAULT ;;              ac_prev=PKG_GROUPS ;;
1225          -pdefault=* | --pdefault=*)          -pgroups=* | --pgroups=*)
1226              PDEFAULT=$ac_optarg ;;              PKG_GROUPS=$ac_optarg ;;
1227                    
1228          -make | --make | -m | --m)          -make | --make | -m | --m)
1229              ac_prev=MAKE ;;              ac_prev=MAKE ;;
# Line 1372  for ac_option in "$@" ; do Line 1373  for ac_option in "$@" ; do
1373              ;;              ;;
1374                    
1375      esac      esac
1376        
1377  done  done
1378    
1379    
# Line 1384  if test -f ./.genmakerc ; then Line 1385  if test -f ./.genmakerc ; then
1385      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1386      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1387      echo "WARNING: ignore \"./.genmakerc\" and continue."      echo "WARNING: ignore \"./.genmakerc\" and continue."
1388      echo      echo
1389  fi  fi
1390    
1391  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
# Line 1853  ERROR: neither of the two default script Line 1854  ERROR: neither of the two default script
1854      ${TOOLSDIR}/set64bitConst.sh      ${TOOLSDIR}/set64bitConst.sh
1855      ${TOOLSDIR}/set64bitConst.csh      ${TOOLSDIR}/set64bitConst.csh
1856    
1857    are working so please check paths or specify (with \$S64) a    are working so please check paths or specify (with \$S64) a
1858    working version of this script.    working version of this script.
1859    
1860  EOF  EOF
# Line 1874  echo " $STANDARDDIRS " | grep ' model ' Line 1875  echo " $STANDARDDIRS " | grep ' model '
1875  ckM=$?  ckM=$?
1876  echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1  echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1877  ckE=$?  ckE=$?
1878  if test $ckM = 0 -a $ckE = 1 ; then  if test $ckM = 0 -a $ckE = 1 ; then
1879      STANDARDDIRS="$STANDARDDIRS eesupp"      STANDARDDIRS="$STANDARDDIRS eesupp"
1880  fi  fi
1881    
# Line 1883  fi Line 1884  fi
1884  #  they appear as regular source code  #  they appear as regular source code
1885  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then  if test -r $ROOTDIR"/eesupp/src/Makefile" ; then
1886      echo "  Making source files in eesupp from templates"      echo "  Making source files in eesupp from templates"
1887      ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1      ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \
1888        ) > make_eesupp.errors 2>&1
1889      RETVAL=$?      RETVAL=$?
1890      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
1891          rm -f make_eesupp.errors          rm -f make_eesupp.errors
# Line 1898  fi Line 1900  fi
1900  for pdir in exch2 regrid ; do  for pdir in exch2 regrid ; do
1901      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1902          echo "  Making source files in pkg/${pdir} from templates"          echo "  Making source files in pkg/${pdir} from templates"
1903          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \
1904            ) > make_${pdir}.errors 2>&1
1905          RETVAL=$?          RETVAL=$?
1906          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
1907              rm -f make_${pdir}.errors              rm -f make_${pdir}.errors
# Line 1911  for pdir in exch2 regrid ; do Line 1914  for pdir in exch2 regrid ; do
1914  done  done
1915    
1916  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1917  if  test "x${PDEPEND}" = x ; then  if  test "x${PKG_DEPEND}" = x ; then
1918      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
1919      if test -r $tmp ; then      if test -r $tmp ; then PKG_DEPEND=$tmp ; fi
1920          PDEPEND=$tmp  fi
1921      else  if  test "x${PKG_DEPEND}" = x ; then
1922          echo "Warning:  No package dependency information was specified."          echo "Warning:  No package dependency information was specified."
1923          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."          echo "  Please check that ROOTDIR/pkg/pkg_depend exists."
1924    else
1925        if test ! -r ${PKG_DEPEND} ; then
1926            echo "Error:  can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\""
1927            exit 1
1928      fi      fi
1929        echo "  getting package dependency info from  $PKG_DEPEND"
1930    #  Strip the comments and then convert the dependency file into arrays: PNAME, DNAME
1931        get_pdepend_list $PKG_DEPEND
1932    fi
1933    
1934    # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided
1935    #  to define the "default_pkg_list" and package groups (for convenience, one
1936    #  can specify a group of packages using names like "ocean" and "atmosphere").
1937    if test "x${PKG_GROUPS}" = x ; then
1938        tmp=$ROOTDIR"/pkg/pkg_groups"
1939        if test -r $tmp ; then PKG_GROUPS=$tmp ; fi
1940    fi
1941    if test "x${PKG_GROUPS}" = x ; then
1942            echo "Warning:  No package groups information was specified."
1943            echo "  Please check that ROOTDIR/pkg/pkg_groups exists."
1944  else  else
1945      if test ! -r ${PDEPEND} ; then      if test ! -r ${PKG_GROUPS} ; then
1946          echo "Error:  can't read package dependency info from PDEPEND=\"$PDEPEND\""          echo "Error:  can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\""
1947          exit 1          exit 1
1948      fi      fi
1949        echo "  getting package groups info from      $PKG_GROUPS"
1950  fi  fi
1951  echo "  getting package dependency info from  $PDEPEND"  
1952  #  Strip the comments and then convert the dependency file into  #  Search for packages to compile.
1953  #  two arrays: PNAME, DNAME  echo "  checking list of packages to compile:"
1954  get_pdepend_list $PDEPEND  PKG_LIST=
1955    if test "x${PKG_LIST}" = x ; then
 #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  
 #  file has been added so that, for convenience, one can specify  
 #  groups of packages using names like "ocean" and "atmosphere".  
 echo "  checking default package list:  "  
 if test "x${PDEFAULT}" = x ; then  
1956      for i in "." $MODS ; do      for i in "." $MODS ; do
1957          if test -r $i"/packages.conf" ; then          if test -r $i"/packages.conf" ; then
1958                  PDEFAULT=$i"/packages.conf"                  PKG_LIST=$i"/packages.conf"
1959                  break                  break
1960          fi          fi
1961      done      done
1962  fi  fi
1963  if test "x${PDEFAULT}" = x ; then  if test "x${PKG_LIST}" = x ; then
1964      PDEFAULT="$ROOTDIR/pkg/pkg_default"      pkg_list='default_pkg_list'
1965  fi      if test "x${PKG_GROUPS}" = x ; then
1966  if test "x${PDEFAULT}" = xNONE ; then          echo "Error:  need package groups info to expand pkg_list=\"$pkg_list\""
1967      echo "    default packages file disabled"          exit 1
1968        fi
1969  else  else
1970      if test ! -r $PDEFAULT ; then      if test ! -r $PKG_LIST ; then
1971          echo "Warning:  can't read default packages from PDEFAULT=\"$PDEFAULT\""          echo "Error:  can't read package list from PKG_LIST=\"$PKG_LIST\""
1972            exit 1
1973      else      else
1974          echo "    using PDEFAULT=\"$PDEFAULT\""          echo "    using PKG_LIST=\"$PKG_LIST\""
1975          #  Strip the comments and add all the names          #  Strip the comments and add all the names
1976          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          pkg_list=`cat $PKG_LIST | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1977          RETVAL=$?          RETVAL=$?
1978          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1979              printf "Error: can't parse default package list "              printf "Error: can't parse package list "
1980              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PKG_LIST=\"$PKG_LIST\""
1981              exit 1              exit 1
1982          fi          fi
         for i in $def ; do  
             PACKAGES="$PACKAGES $i"  
         done  
         echo "    before group expansion packages are:$PACKAGES"  
         RET=1  
         while test $RET = 1 ; do expand_pkg_groups; RET=$?; done  
         echo "    after group expansion packages are: $PACKAGES"  
1983      fi      fi
1984  fi  fi
1985    for i in $pkg_list ; do
1986        PACKAGES="$PACKAGES $i"
1987    done
1988    echo     "    before group expansion packages are:$PACKAGES"
1989    if test "x${PKG_GROUPS}" != x ; then
1990        RET=1
1991        while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1992        echo "    after group expansion packages are: $PACKAGES"
1993    fi
1994    
1995  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1996  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
# Line 1999  PACKAGES="$PACKAGES $ENABLE" Line 2021  PACKAGES="$PACKAGES $ENABLE"
2021  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2022      j=`echo $i | sed 's/[-+]//'`      j=`echo $i | sed 's/[-+]//'`
2023      if test ! -d "$ROOTDIR/pkg/$j" ; then      if test ! -d "$ROOTDIR/pkg/$j" ; then
2024          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
2025          exit 1          exit 1
2026      fi      fi
2027      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
# Line 2011  done Line 2033  done
2033  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2034  echo "    packages are: $PACKAGES"  echo "    packages are: $PACKAGES"
2035    
2036  #  Check for package MNC: if NetCDF is available, then build the MNC  #  Check for package MNC: if NetCDF is available, then build the MNC
2037  #  template files ; otherwise, delete mnc from the list of packages.  #  template files ; otherwise, delete mnc from the list of packages.
2038  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2039  RETVAL=$?  mnc_in=$?
2040  if test "x$RETVAL" = x0 ; then  if test "x$HAVE_NETCDF" != xt ; then
2041      if test "x$HAVE_NETCDF" != xt ; then      if test "x$mnc_in" = x0 ; then
2042          cat <<EOF          cat <<EOF
   
2043  *********************************************************************  *********************************************************************
2044  WARNING: the "mnc" package was enabled but tests failed to compile  WARNING: the "mnc" package was enabled but tests failed to compile
2045    NetCDF applications.  Please check that:    NetCDF applications.  Please check that:
2046    
2047    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2048    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2049         NetCDF library to link against.         NetCDF library to link against.
2050    
2051    Due to this failure, the "mnc" package is now DISABLED.    Due to this failure, the "mnc" package is now DISABLED.
2052  *********************************************************************  *********************************************************************
   
2053  EOF  EOF
2054          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
2055          DISABLE="$DISABLE mnc"          DISABLE="$DISABLE mnc"
2056      else      else
2057          ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1      #  this prevent to add mnc (due to pdepend rules) if not available
2058          RETVAL=$?          DISABLE="$DISABLE mnc"
2059          if test "x${RETVAL}" = x0 ; then      fi
2060              rm -f make_mnc.errors  else
2061        # we have NetCDF, we try to build MNC template files
2062        ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
2063        RETVAL=$?
2064        if test "x${RETVAL}" = x0 ; then
2065            rm -f make_mnc.errors
2066        else
2067            echo "Error: problem encountered while building source files in pkg/mnc:"
2068            cat make_mnc.errors 1>&2
2069            if test "x$mnc_in" = x0 ; then
2070                exit 1
2071          else          else
2072              echo "Error: problem encountered while building source files in pkg/mnc:"              DISABLE="$DISABLE mnc"
             cat make_mnc.errors 1>&2  
             exit 1  
2073          fi          fi
2074      fi      fi
2075  fi  fi
2076    
2077  #  Check for package PROFILES: if NetCDF is not available,  #  Check for package PROFILES: if NetCDF is not available,
2078  #  then delete profiles from the list of available packages.  #  then delete profiles from the list of available packages.
2079  echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1  if test "x$HAVE_NETCDF" != xt ; then
2080  RETVAL=$?      echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2081  if test "x$RETVAL" = x0 ; then      RETVAL=$?
2082      if test "x$HAVE_NETCDF" != xt ; then      if test "x$RETVAL" = x0 ; then
2083          cat <<EOF          cat <<EOF
   
2084  *********************************************************************  *********************************************************************
2085  WARNING: the "profiles" package was enabled but tests failed to  WARNING: the "profiles" package was enabled but tests failed to
2086    compile NetCDF applications.  Please check that:    compile NetCDF applications.  Please check that:
2087    
2088    1) NetCDF is correctly installed for this compiler and    1) NetCDF is correctly installed for this compiler and
2089    2) the LIBS variable (within the "optfile") specifies the correct    2) the LIBS variable (within the "optfile") specifies the correct
2090         NetCDF library to link against.         NetCDF library to link against.
2091    
2092    Due to this failure, the "profiles" package is now DISABLED.    Due to this failure, the "profiles" package is now DISABLED.
2093  *********************************************************************  *********************************************************************
   
2094  EOF  EOF
2095          PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`          PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2096          DISABLE="$DISABLE profiles"          DISABLE="$DISABLE profiles"
2097        else
2098        #  this prevent to add profiles (due to pdepend rules) if not available
2099            DISABLE="$DISABLE profiles"
2100      fi      fi
2101  fi  fi
2102    
2103  echo "  applying package dependency rules"  if  test "x${PKG_DEPEND}" != x ; then
2104  ck=    echo "  applying package dependency rules"
2105  while test "x$ck" != xtt ; do    ck=
2106      while test "x$ck" != xtt ; do
2107      i=0      i=0
2108      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2109      rtot=$nname      rtot=$nname
# Line 2136  while test "x$ck" != xtt ; do Line 2166  while test "x$ck" != xtt ; do
2166          #  Do we need to get rid of $dname according to the dependency rules?          #  Do we need to get rid of $dname according to the dependency rules?
2167          if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then          if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then
2168              echo "Error: can't satisfy package dependencies:"              echo "Error: can't satisfy package dependencies:"
2169              echo "  \"$pname\" was requested but is disallowed by"              echo "  \"$pname\" was requested but is disallowed by"
2170              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2171              exit 1              exit 1
2172          fi          fi
# Line 2144  while test "x$ck" != xtt ; do Line 2174  while test "x$ck" != xtt ; do
2174          #i=$(( $i + 1 ))          #i=$(( $i + 1 ))
2175      done      done
2176      ck=$ck"t"      ck=$ck"t"
2177  done    done
2178  echo "    packages are: $PACKAGES"    echo "    packages are: $PACKAGES"
2179    fi
2180  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2181      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2182      if test -d $adr ; then      if test -d $adr ; then
# Line 2162  done Line 2193  done
2193    
2194  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2195  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2196  #  The following UGLY HACK sets multiple "#undef"s and it needs to go  #  The following UGLY HACK sets multiple "#undef"s and it needs to go
2197  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h  #  away.  On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h
2198  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
2199  #  statements could be separated and handled only by genmake.  #  statements could be separated and handled only by genmake.
2200  names=`ls -1 "$ROOTDIR/pkg"`  names=`ls -1 "$ROOTDIR/pkg"`
# Line 2191  for i in $PACKAGES ; do Line 2222  for i in $PACKAGES ; do
2222  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2223    
2224  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
2225      case $i in      case $i in
2226          aim_v23)          aim_v23)
2227              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
2228              echo "Warning: ALLOW_AIM is set to enable aim_v23."              echo "Warning: ALLOW_AIM is set to enable aim_v23."
# Line 2261  if test -f ./adSrcFiles.tmp ; then Line 2292  if test -f ./adSrcFiles.tmp ; then
2292      rm -f ./adSrcFiles.tmp      rm -f ./adSrcFiles.tmp
2293  fi  fi
2294  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2295    touch adSrcFiles.tmp
2296  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2297      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2298      for j in $list_files ; do      for j in $list_files ; do
# Line 2293  if test ! "x$DIVA" = x ; then Line 2325  if test ! "x$DIVA" = x ; then
2325          fi          fi
2326          MPIINCLUDEDIR='$MPIHOME/include'          MPIINCLUDEDIR='$MPIHOME/include'
2327      fi      fi
2328        
2329      if test -r $MPIINCLUDEDIR/mpif.h ; then      if test -r $MPIINCLUDEDIR/mpif.h ; then
2330          for i in $MPI_HEADER_FILES; do          for i in $MPI_HEADER_FILES; do
2331              cp -p $MPIINCLUDEDIR/$i ./mpi_headers              cp -p $MPIINCLUDEDIR/$i ./mpi_headers
# Line 2328  if test ! -r ".links.tmp/foo" ; then Line 2360  if test ! -r ".links.tmp/foo" ; then
2360  fi  fi
2361  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2362    
2363  if test "x$OPENAD" != x ; then  if test "x$OPENAD" != x ; then
2364      OAD_DONT_COMPILE="/dev/null"      OAD_DONT_COMPILE="/dev/null"
2365      OAD_DONT_TRANSFORM="/dev/null"      OAD_DONT_TRANSFORM="/dev/null"
2366      OAD_KEEP_ORIGINAL="/dev/null"      OAD_KEEP_ORIGINAL="/dev/null"
# Line 2381  for d in $alldirs ; do Line 2413  for d in $alldirs ; do
2413      deplist=      deplist=
2414      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2415      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2416      if test "x$OPENAD" != x ; then      if test "x$OPENAD" != x ; then
2417          sfiles=`( echo $sfiles | grep -v _cb2m\. )`          sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2418      fi      fi
2419      for sf in $sfiles ; do      for sf in $sfiles ; do
# Line 2421  for d in $alldirs ; do Line 2453  for d in $alldirs ; do
2453                        F)                        F)
2454                          echo    " \\"  >> F77srclist.tmp                          echo    " \\"  >> F77srclist.tmp
2455                          printf " $sf" >> F77srclist.tmp                          printf " $sf" >> F77srclist.tmp
2456                          if test "x$OPENAD" != x ; then                          if test "x$OPENAD" != x ; then
2457                              basename=${sf%%.F}                              basename=${sf%%.F}
2458                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2459                              if test -z "$isAD" ; then                              if test -z "$isAD" ; then
2460                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2461                                  if test -z "$toBeIgnored" ; then                                  if test -z "$toBeIgnored" ; then
2462                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> nonADF77srclist.tmp
2463                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> nonADF77srclist.tmp
2464                                  else                                  else
2465                                      echo "    not to be compiled   :  $sf"                                      echo "    not to be compiled   :  $sf"
2466                                  fi                                  fi
2467                              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
2468                                   # or we want to retain the untransformed version                                   # or we want to retain the untransformed version
2469                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2470                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2471                                  if test -n "$notToBeTransformed"; then                                  if test -n "$notToBeTransformed"; then
2472                                      echo "    not to be transformed:  $sf"                                      echo "    not to be transformed:  $sf"
2473                                  fi                                  fi
2474                                  if test -n "$untransformedVersionToBeKept" ; then                                  if test -n "$untransformedVersionToBeKept" ; then
2475                                      echo "    original to be kept  :  $sf"                                      echo "    original to be kept  :  $sf"
2476                                  fi                                      fi
2477                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2478                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> nonADF77srclist.tmp
2479                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> nonADF77srclist.tmp
# Line 2666  Clean: Line 2698  Clean:
2698          @make clean          @make clean
2699          @make cleanlinks          @make cleanlinks
2700          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
         -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors  
2701          -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"          -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2702          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2703  CLEAN:  CLEAN:
2704          @make Clean          @make Clean
2705            -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2706          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2707          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2708          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
# Line 2760  EOF Line 2792  EOF
2792  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2793  #===  for TAMC/TAF  ======================  #===  for TAMC/TAF  ======================
2794    
2795  if test "x$OPENAD" = x ; then  if test "x$OPENAD" = x ; then
2796    
2797  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2798    
# Line 2820  adtafonly: Line 2852  adtafonly:
2852          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2853    
2854  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2855          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2856    
2857  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2858          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2859          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2860    
2861  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2862          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2863    
2864  adonlyfwd:  adonlyfwd:
2865          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2866    
2867  adtrick:  adtrick:
2868          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2869    
# Line 2859  ftltafonly: Line 2891  ftltafonly:
2891          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2892    
2893  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2894          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2895    
2896  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
2897          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2898          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2899    
2900  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2901          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2902    
2903    
2904  # ... SVD ...  # ... SVD ...
# Line 2895  svd_touch: Line 2927  svd_touch:
2927    
2928  EOF  EOF
2929    
2930  fi  fi
2931    
2932  #===  for OpenAD  ========================  #===  for OpenAD  ========================
2933    
2934  if test "x$OPENAD" != x ; then  if test "x$OPENAD" != x ; then
2935    
2936  # ============ begin OpenAD specific section ==============  # ============ begin OpenAD specific section ==============
2937    
2938  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2939    
2940  # all the source files linked from the various locations:  # all the source files linked from the various locations:
2941  ALL_LINKED_FILES= \  ALL_LINKED_FILES= \
2942  \$(F77_SRC_FILES) \  \$(F77_SRC_FILES) \
2943  \$(C_SRC_FILES) \  \$(C_SRC_FILES) \
# Line 2957  rm -f adSrcFiles.tmp Line 2989  rm -f adSrcFiles.tmp
2989    
2990  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2991    
2992  adAll: \$(EXE_AD)  adAll: \$(EXE_AD)
2993  .PHONY: adAll  .PHONY: adAll
2994    
2995  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 2975  w2f__types.F90 \ Line 3007  w2f__types.F90 \
3007  OAD_active.F90 \  OAD_active.F90 \
3008  OAD_cp.F90 \  OAD_cp.F90 \
3009  OAD_rev.F90 \  OAD_rev.F90 \
3010  OAD_tape.F90          OAD_tape.F90
3011    
3012  OPENAD_SUPPORT_C_SRC_FILES = \  OPENAD_SUPPORT_C_SRC_FILES = \
3013  iaddr.c \  iaddr.c \
# Line 2984  timeRatio.c Line 3016  timeRatio.c
3016  f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)  f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
3017          cat \$^ > \$@          cat \$^ > \$@
3018    
3019  f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90  f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3020          cat \$^ > \$@          cat \$^ > \$@
3021    
3022  f95_test.out: f95_test_mods.f90 f95_test.f90  f95_test.out: f95_test_mods.f90 f95_test.f90
3023          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
3024          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
3025    
3026  # the file included below is created by the  # the file included below is created by the
3027  # postProcessor and its inclusion sets the  # postProcessor and its inclusion sets the
3028  # variable POSTPROCESSEDFILES  # variable POSTPROCESSEDFILES
3029  # used below. Because the file is made during  # used below. Because the file is made during
3030  # make it won't be read until the second (recursive)  # make it won't be read until the second (recursive)
3031  # invocation in the rule below  # invocation in the rule below
3032  -include postProcess.make  -include postProcess.make
3033    
# Line 3021  endif Line 3053  endif
3053  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
3054  .PHONY: openad  .PHONY: openad
3055    
3056  # create the module files  # create the module files
3057  %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk  %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3058          ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk          ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3059    
3060  # create the header files  # create the header files
3061  %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk  %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3062          ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)          ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3063    
3064  # change everybody else to use the new module files:  # change everybody else to use the new module files:
# Line 3048  CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS9 Line 3080  CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS9
3080  ad_input_code.f$FS90:  \$(CB2M_AD_FILES)  ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3081          cat \$^ > \$@          cat \$^ > \$@
3082    
3083  # strip all comments and blanks to reduce  # strip all comments and blanks to reduce
3084  # the file size in order to reduce perl's memory requirements  # the file size in order to reduce perl's memory requirements
3085  ad_input_code_sf.f$FS90 : ad_input_code.f$FS90  ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3086          cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@          cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3087    
3088  # mfef90 preprocessing  # mfef90 preprocessing
3089  # expand statement functions  # expand statement functions
3090  # expose mfef90 specific substring handling  # expose mfef90 specific substring handling
3091  # add the w2f__types module  # add the w2f__types module
3092  ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90  ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3093          ./mfef90 -r8 -z -F -N132 \$<          ./mfef90 -r8 -z -F -N132 \$<
3094          mv \$<.B \$(basename \$<).B          mv \$<.B \$(basename \$<).B
3095          ./whirl2f -openad \$(basename \$<).B          ./whirl2f -openad \$(basename \$<).B
3096          cat w2f__types.f90 \$(basename \$<).w2f.f > \$@          cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3097    
# Line 3068  ad_input_code_sf.w2f.pre.f$FS90: ad_inpu Line 3100  ad_input_code_sf.w2f.pre.f$FS90: ad_inpu
3100          ./preProcess.py --timing --r8 -H -S \$< -o \$@          ./preProcess.py --timing --r8 -H -S \$< -o \$@
3101    
3102  # F -> WHIRL  # F -> WHIRL
3103  # note that the canonicalized version cuts off at col 72  # note that the canonicalized version cuts off at col 72
3104  # doing this also for string constants which is ok as long  # doing this also for string constants which is ok as long
3105  # as we are in fixed mode and cut of exactly there.  # as we are in fixed mode and cut of exactly there.
3106  # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)  # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3107  # characters respectively.  # characters respectively.
3108  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
3109          ./mfef90 -r8 -z -F \$<          ./mfef90 -r8 -z -F \$<
# Line 3091  ad_input_code_sf.w2f.pre.xb.x2w.B : ad_i Line 3123  ad_input_code_sf.w2f.pre.xb.x2w.B : ad_i
3123    
3124  # WHIRL' -> F'  # WHIRL' -> F'
3125  ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be  ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3126          ./whirl2f -FLIST:ftn_file=\$@ -openad \$<          ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3127    
3128  # insert template directives  # insert template directives
3129  ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90 ../OAD_support/insertTemplateDir.bash  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
# Line 3100  ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f Line 3132  ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f
3132  PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F  PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3133  # postprocess F'  # postprocess F'
3134  postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)  postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3135          # the target is a placeholder to signal execution of the rule          # the target is a placeholder to signal execution of the rule
3136          touch \$@          touch \$@
3137          # this step also creates the file postProcess.make but we cannot          # this step also creates the file postProcess.make but we cannot
3138          # name it as the target or else make will try to remake it for          # name it as the target or else make will try to remake it for
3139          # the include directive above for any rule, e.g. make clean          # the include directive above for any rule, e.g. make clean
3140          ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<          ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3141    
# Line 3111  postProcess.tag: ad_input_code_sf.w2f.pr Line 3143  postProcess.tag: ad_input_code_sf.w2f.pr
3143  %.xsd:  %.xsd:
3144          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3145    
3146  mfef90:  mfef90:
3147          \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .          \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3148    
3149  # link the support files:  # link the support files:
3150  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3151          \$(LN) ../OAD_support/\$@ .          \$(LN) ../OAD_support/\$@ .
3152    
3153  whirl2xaif xaif2whirl:  whirl2xaif xaif2whirl:
3154          \$(LN) \${OPENADFORTTK}/bin/\$@ .          \$(LN) \${OPENADFORTTK}/bin/\$@ .
3155    
3156  preProcess.py postProcess.py:  preProcess.py postProcess.py:
3157          \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .          \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3158    
3159  whirl2f whirl2f_be:  whirl2f whirl2f_be:
# Line 3175  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 3207  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
3207  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
3208    
3209  # Create special header files  # Create special header files
3210  $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"  $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"
3211  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
3212      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
3213  else  else

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

  ViewVC Help
Powered by ViewVC 1.1.22