/[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.45 by heimbach, Mon Nov 24 15:08:24 2003 UTC revision 1.69 by edhill, Wed Feb 25 19:12:10 2004 UTC
# Line 1  Line 1 
1  #!/bin/sh  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4  #  #
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      grep -i "#define.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99
17      RETVAL=$?      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99
18      if test "x${RETVAL}" = x0 ; then      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99
19          echo "Error: In $cpp_options there is an illegal line: #define ALLOW_$pkg"      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99
20          exit 99  }
21      fi  
22      grep -i "#undef.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1  # Search for particular CPP #cmds associated with MPI
23      RETVAL=$?  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
24      if test "x${RETVAL}" = x0 ; then  test_for_mpi_in_cpp_eeoptions() {
25          echo "Error: In $cpp_options there is an illegal line: #undef ALLOW_$pkg"      cpp_options=$1
26          exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99
27      fi      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99
28      grep -i "#define.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99
29        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99
30    }
31    
32    # Search for particular string in a file. Return 1 if detected, 0 if not
33    # usage: test_for_string_in_file file string
34    test_for_string_in_file() {
35        file=$1
36        strng=$2
37        grep -i "$strng" $file > /dev/null 2>&1
38      RETVAL=$?      RETVAL=$?
39      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
40          echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg"          echo -n "Error: In $file there is an illegal line: "
41          exit 99          grep -i "$strng" $file
42            return 1
43      fi      fi
44      grep -i "#undef.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1      return 0
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         echo "Error: In $cpp_options there is an illegal line: #undef DISABLE_$pkg"  
         exit 99  
    fi  
45  }  }
46    
47  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to  # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to
# Line 73  find_possible_configs()  { Line 78  find_possible_configs()  {
78      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
79      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
80      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
81      PLATFORM=`echo $tmp3 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
82        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
83        PLATFORM=$tmp2
84      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
85      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
86            
# Line 93  find_possible_configs()  { Line 100  find_possible_configs()  {
100          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
101      fi      fi
102    
103      # makedepend is not always available      #  The "original" makedepend is part of the Imake system that is
104        #  most often distributed with XFree86 or with an XFree86 source
105        #  package.  As a result, many machines (eg. generic Linux) do not
106        #  have a system-default "makedepend" available.  For those
107        #  systems, we have two fall-back options:
108        #
109        #    1) a makedepend implementation shipped with the cyrus-imapd
110        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
111        #
112        #    2) a known-buggy xmakedpend shell script
113        #
114        #  So the choices are, in order:
115        #
116        #    1) use the user-specified program
117        #    2) use a system-wide default
118        #    3) locally build and use the cyrus implementation
119        #    4) fall back to the buggy local xmakedpend script
120        #
121      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
122        which makedepend >& /dev/null        which makedepend >& /dev/null
123        RETVAL=$?        RETVAL=$?
124        if test "x${RETVAL}" = x1 ; then        if test ! "x${RETVAL}" = x0 ; then
125           echo "    makedepend was not found. Using xmakedpend instead."           echo "    a system-default makedepend was not found."
126           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'  
127             #  Try to build the cyrus impl
128             rm -f ./genmake_cy_md
129             (
130                 cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
131                     &&  ./configure > /dev/null 2>&1  \
132                     &&  make > /dev/null 2>&1  \
133                     &&  ./makedepend ifparser.c > /dev/null 2>&1  \
134                     &&  echo "true"
135             ) > ./genmake_cy_md
136             grep true ./genmake_cy_md > /dev/null 2>&1
137             RETVAL=$?
138             if test "x$RETVAL" = x0 ; then
139                 MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
140             else
141                 MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
142             fi
143             rm -f ./genmake_cy_md
144        fi        fi
145      fi      fi
146    
# Line 138  EOF Line 179  EOF
179          echo "   "$p_FC          echo "   "$p_FC
180          if test "x$FC" = x ; then          if test "x$FC" = x ; then
181              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
182                echo "  Setting FORTRAN compiler to: "$FC
183          fi          fi
184      fi      fi
185    
186      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
187          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
188          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
189              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
190              echo "  The options file:  $p_OF"          fi
191              echo "    appears to match so we'll use it."      fi
192              break  #    echo "  The options file:  $p_OF"
193          fi  #    echo "    appears to match so we'll use it."
194      done  #   for i in $p_FC ; do
195    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
196    #if test -r $p_OF ; then
197    #    OPTFILE=$p_OF
198    #    echo "  The options file:  $p_OF"
199    #    echo "    appears to match so we'll use it."
200    #    break
201    #fi
202    #   done
203      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
204          cat 1>&2 <<EOF          cat 1>&2 <<EOF
205    
# Line 246  Usage: "$0" [OPTIONS] Line 296  Usage: "$0" [OPTIONS]
296        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
297            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
298    
299        -makedepend NAME | -md NAME
300          --makedepend=NAME | -md=NAME
301              Use "NAME" for the MAKEDEPEND program.
302    
303      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
304        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
305            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
# Line 287  Usage: "$0" [OPTIONS] Line 341  Usage: "$0" [OPTIONS]
341            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
342            is being used.            is being used.
343    
344        -mpi | --mpi
345              Include MPI header files and link to MPI libraries
346        -mpi=PATH | --mpi=PATH
347              Include MPI header files and link to MPI libraries using MPI_ROOT
348              set to PATH. i.e. Include files from $PATH/include, link to libraries
349              from $PATH/lib and use binaries from $PATH/bin.
350    
351    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
352    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
353    
# Line 430  EOF Line 491  EOF
491  }  }
492    
493    
494    check_netcdf_libs()  {
495        cat <<EOF > genmake_tnc.F
496          program fgennc
497    #include "netcdf.inc"
498          integer iret, ncid, xid
499          iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
500          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
501          iret = nf_def_dim(ncid, 'X', 11, xid)
502          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
503          iret = nf_close(ncid)
504          IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
505          end
506    EOF
507        $CPP genmake_tnc.F > genmake_tnc.f  \
508            &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1
509        RET_COMPILE=$?
510        test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
511        RETVAL=$?
512        if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
513            HAVE_NETCDF=t
514        else
515            # try again with "-lnetcdf" added to the libs
516            $CPP genmake_tnc.F > genmake_tnc.f  \
517                &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
518                $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
519            RET_COMPILE=$?
520            test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
521            RETVAL=$?
522            if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
523                LIBS="$LIBS -lnetcdf"
524                HAVE_NETCDF=t
525            else
526                cat genmake_tnc.log >> genmake_warnings
527            fi
528        fi
529        rm -f genmake_tnc*
530    }
531    
532    
533    
534    ###############################################################################
535    #   Sequential part of script starts here
536    ###############################################################################
537    
538  #  Set defaults here  #  Set defaults here
539  COMMANDL="$0 $@"  COMMANDL="$0 $@"
540    
# Line 438  LN= Line 543  LN=
543  S64=  S64=
544  KPP=  KPP=
545  FC=  FC=
546    CPP=
547  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
548  DEFINES=  DEFINES=
549  PACKAGES=  PACKAGES=
550  ENABLE=  ENABLE=
# Line 460  LIBS= Line 565  LIBS=
565  KPPFILES=  KPPFILES=
566  NOOPTFILES=  NOOPTFILES=
567  NOOPTFLAGS=  NOOPTFLAGS=
568    MPI=
569    MPIPATH=
570    
571  # DEFINES checked by test compilation  # DEFINES checked by test compilation
572  HAVE_SYSTEM=  HAVE_SYSTEM=
573  HAVE_FDATE=  HAVE_FDATE=
574  FC_NAMEMANGLE=  FC_NAMEMANGLE=
575  HAVE_CLOC=  HAVE_CLOC=
576    HAVE_NETCDF=
577    
578  MODS=  MODS=
579  TOOLSDIR=  TOOLSDIR=
580  SOURCEDIRS=  SOURCEDIRS=
581  INCLUDEDIRS=  INCLUDEDIRS=
582  STANDARDDIRS=  STANDARDDIRS="USE_THE_DEFAULT"
583    
584  PWD=`pwd`  PWD=`pwd`
585  MAKE=make  MAKE=make
# Line 505  TAMC_EXTRA= Line 613  TAMC_EXTRA=
613    
614  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
615  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
616  gm_s2="FC IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"
617    
618  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
619  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
# Line 586  for ac_option ; do Line 694  for ac_option ; do
694          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
695              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
696                    
697          -adoptfile | --adoptfile | -ad | --ad)          -adoptfile | --adoptfile | -adof | --adof)
698              ac_prev=AD_OPTFILE ;;              ac_prev=AD_OPTFILE ;;
699          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
700              AD_OPTFILE=$ac_optarg ;;              AD_OPTFILE=$ac_optarg ;;
# Line 606  for ac_option ; do Line 714  for ac_option ; do
714          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
715              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
716                    
717            -makedepend | --makedepend | -md | --md)
718                ac_prev=MAKEDEPEND ;;
719            -makedepend=* | --makedepend=* | -md=* | --md=*)
720                MAKEDEPEND=$ac_optarg ;;
721            
722          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
723              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
724          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 657  for ac_option ; do Line 770  for ac_option ; do
770              IEEE=true ;;              IEEE=true ;;
771          -noieee | --noieee)          -noieee | --noieee)
772              IEEE= ;;              IEEE= ;;
773    
774            -mpi | --mpi)
775                MPI=true ;;
776            -mpi=* | --mpi=*)
777                MPIPATH=$ac_optarg
778                MPI=true ;;
779                    
780  #       -jam | --jam)  #       -jam | --jam)
781  #           JAM=1 ;;  #           JAM=1 ;;
# Line 798  fi Line 917  fi
917  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
918      LINK=$FC      LINK=$FC
919  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
920  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
921      MAKE="make"      MAKE="make"
922  fi  fi
923    if test "x$CPP" = x ; then
924        CPP=cpp
925    fi
926    #EH3 === UGLY ===
927    #  The following an ugly little hack to check for $CPP in /lib/ and it
928    #  should eventually be replaced with a more general function that
929    #  searches a combo of the user's path and a list of "usual suspects"
930    #  to find the correct location for binaries such as $CPP.
931    for i in " " "/lib/" ; do
932        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
933    done
934    #EH3 === UGLY ===
935  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
936  RETVAL=$?  RETVAL=$?
937  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 840  EOF Line 968  EOF
968  fi  fi
969  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
970    
971    if test ! "x$MPI" = x ; then
972          echo "  Turning on MPI cpp macros"
973          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
974    fi
975    
976  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
977  echo -n "  Do we have the system() command using $FC...  "  echo -n "  Do we have the system() command using $FC...  "
# Line 888  if test "x$HAVE_CLOC" != x ; then Line 1020  if test "x$HAVE_CLOC" != x ; then
1020  else  else
1021      echo "no"      echo "no"
1022  fi  fi
 echo "$FC_NAMEMANGLE" > FC_NAMEMANGLE.h.template  
 cmp FC_NAMEMANGLE.h FC_NAMEMANGLE.h.template > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" != x0 ; then  
     mv -f FC_NAMEMANGLE.h.template FC_NAMEMANGLE.h  
 fi  
1023  rm -f genmake_t*  rm -f genmake_t*
1024    
1025    echo -n "  Can we create NetCDF-enabled binaries...  "
1026    check_netcdf_libs
1027    if test "x$HAVE_NETCDF" != x ; then
1028        echo "yes"
1029    else
1030        echo "no"
1031    fi
1032    
1033    
1034  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1035  echo -n "  Adding MODS directories:  "  echo -n "  Adding MODS directories:  "
# Line 935  if test "x${TOOLSDIR}" = x ; then Line 1069  if test "x${TOOLSDIR}" = x ; then
1069      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1070  fi  fi
1071  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1072      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1073      exit 1      exit 1
1074  fi  fi
1075  if test "x$S64" = x ; then  if test "x$S64" = x ; then
# Line 956  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1090  if test -r $ROOTDIR"/eesupp/src/Makefile
1090          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1091      else      else
1092          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1093          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1094          exit 1          exit 1
1095      fi      fi
1096  fi  fi
1097    
1098    #same for exch2
1099    if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then
1100        echo "  Making source files in exch2 from  templates"
1101        ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1
1102        RETVAL=$?
1103        if test "x${RETVAL}" = x0 ; then
1104            rm -f make_exch2.errors
1105        else
1106            echo "Error: problem encountered while building source files in exch2:"
1107            cat make_exch2.errors 1>&2
1108            exit 1
1109        fi
1110    fi
1111    
1112  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1113  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
1114      tmp=$ROOTDIR"/pkg/pkg_depend"      tmp=$ROOTDIR"/pkg/pkg_depend"
# Line 1144  for i in $PACKAGES ; do Line 1292  for i in $PACKAGES ; do
1292      fi      fi
1293  done  done
1294    
1295    #  Build MNC templates and check for ability to build and use NetCDF
1296    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1297    RETVAL=$?
1298    if test "x$RETVAL" = x0 ; then
1299        ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1300        RETVAL=$?
1301        if test "x${RETVAL}" = x0 ; then
1302            rm -f make_mnc.errors
1303        else
1304            echo "Error: problem encountered while building source files in pkg/mnc:"
1305            cat make_mnc.errors 1>&2
1306            exit 1
1307        fi
1308        if test "x$HAVE_NETCDF" != xt ; then
1309            cat <<EOF
1310    
1311  # Create a list of #define and #undef to enable/disable packages  WARNING: the "mnc" package has been enabled but tests failed to
1312  PACKAGES_DOT_H=PACKAGES_CONFIG.h    compile and/or execute NetCDF applications.  Please check that:
 cat <<EOF >$PACKAGES_DOT_H".tmp"  
 C=== GENMAKE v2 ===  
 C  The following defines have been set by GENMAKE, so please do not  
 C  edit anything below these comments.  In general, you should  
 C  add or remove packages by re-running genmake with different  
 C  "-enable" and/or "-disable" options.  
   
 #ifndef PACKAGES_H  
 #define PACKAGES_H  
1313    
1314  C  Packages disabled by genmake:    1) NetCDF is installed for your compiler and
1315      2) the LIBS variable (within the 'optfile") specifies the correct
1316           NetCDF library to link against.
1317      
1318  EOF  EOF
1319        fi
1320    fi
1321    
1322    # Create a list of #define and #undef to enable/disable packages
1323    PACKAGES_DOT_H=PACKAGES_CONFIG.h
1324  #  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
1325  #  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
1326  #  file would eventually be split up so that all package-related #define  #  file would eventually be split up so that all package-related #define
# Line 1177  for n in $names ; do Line 1339  for n in $names ; do
1339          done          done
1340          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1341              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`
             echo "#undef $undef" >> $PACKAGES_DOT_H".tmp"  
1342              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1343          fi          fi
1344      fi      fi
1345  done  done
 cat <<EOF >>$PACKAGES_DOT_H".tmp"  
   
 C  Packages enabled by genmake:  
 EOF  
1346  ENABLED_PACKAGES=  ENABLED_PACKAGES=
1347  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1348      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`
     echo "#define $def" >> $PACKAGES_DOT_H".tmp"  
1349      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1350  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1351    
1352  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1353      case $i in      case $i in
1354          aim_v23)          aim_v23)
1355              echo "#define   ALLOW_AIM" >> $PACKAGES_DOT_H".tmp"              ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM"
1356              DEFINES="$DEFINES -DALLOW_AIM"              echo "Warning: ALLOW_AIM is set to enable aim_v23."
             echo "Warning: ALLOW_AIM is set to enable aim_v23. This is REALLY ugly Jean-Michel :-)"  
1357              ;;              ;;
1358      esac      esac
1359  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!  #EH3  WARNING :  This is an UGLY HACK that needs to be removed!!!
1360    
1361  done  done
 cat <<EOF >>$PACKAGES_DOT_H".tmp"  
   
 #endif /* PACKAGES_H */  
 EOF  
   
 if test ! -f $PACKAGES_DOT_H ; then  
     mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
 else  
     cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     RETVAL=$?  
     if test "x$RETVAL" = x0 ; then  
         rm -f $PACKAGES_DOT_H".tmp"  
     else  
         mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"  
         mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H  
     fi  
 fi  
1362    
1363  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS"
1364  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
1365  if test "x$STANDARDDIRS" = x ; then  if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1366      STANDARDDIRS="eesupp model"      STANDARDDIRS="eesupp model"
1367  fi  fi
1368  for d in $STANDARDDIRS ; do  if test "x$STANDARDDIRS" != x ; then
1369      adr="$ROOTDIR/$d/src"      for d in $STANDARDDIRS ; do
1370      if test ! -d $adr ; then          adr="$ROOTDIR/$d/src"
1371          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1372          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1373          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1374      else              exit 1
1375          SOURCEDIRS="$SOURCEDIRS $adr"          else
1376      fi              SOURCEDIRS="$SOURCEDIRS $adr"
1377      adr="$ROOTDIR/$d/inc"          fi
1378      if test ! -d $adr ; then          adr="$ROOTDIR/$d/inc"
1379          echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""          if test ! -d $adr ; then
1380          echo "  is correct and that you correctly specified the STANDARDDIRS option"              echo "Error:  directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\""
1381          exit 1              echo "  is correct and that you correctly specified the STANDARDDIRS option"
1382      else              exit 1
1383          INCLUDEDIRS="$INCLUDEDIRS $adr"          else
1384      fi              INCLUDEDIRS="$INCLUDEDIRS $adr"
1385  done          fi
1386        done
1387    fi
1388    
1389  echo "  Searching for CPP_OPTIONS.h in order to warn about the presence"  echo "  Searching for *OPTIONS.h files in order to warn about the presence"
1390  echo "    of \"#define ALLOW_PKGNAME\"-type statements:"  echo "    of \"#define \"-type statements that are no longer allowed:"
1391  CPP_OPTIONS=  CPP_OPTIONS=
1392    CPP_EEOPTIONS=
1393  spaths=". $INCLUDEDIRS"  spaths=". $INCLUDEDIRS"
1394    names=`ls -1 "$ROOTDIR/pkg"`
1395  for i in $spaths ; do  for i in $spaths ; do
1396      try="$i/CPP_OPTIONS.h"      try="$i/CPP_OPTIONS.h"
1397      #  echo -n "    trying $try : "      if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then
     if test -f $try -a -r $try ; then  
1398          echo "    found CPP_OPTIONS=\"$try\""          echo "    found CPP_OPTIONS=\"$try\""
1399          CPP_OPTIONS="$try"          CPP_OPTIONS="$try"
1400          break          # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h
1401            for n in $names ; do
1402                test_for_package_in_cpp_options $CPP_OPTIONS $n
1403            done
1404        fi
1405        try="$i/CPP_EEOPTIONS.h"
1406        if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then
1407            echo "    found CPP_EEOPTIONS=\"$try\""
1408            # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h
1409    #**** not yet enabled ****
1410    #        test_for_mpi_in_cpp_eeoptions $try
1411    #**** not yet enabled ****
1412            CPP_EEOPTIONS="$try"
1413      fi      fi
1414  done  done
1415  if test "x$CPP_OPTIONS" = x ; then  if test "x$CPP_OPTIONS" = x ; then
1416      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"      echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths"
1417      exit 1      exit 1
1418  fi  fi
 # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h  
 names=`ls -1 "$ROOTDIR/pkg"`  
 for n in $names ; do  
     test_for_package_in_cpp_options $CPP_OPTIONS $n  
 done  
   
1419    
1420  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
1421  #  compiler.  #  compiler.
# Line 1283  for i in $SOURCEDIRS ; do Line 1430  for i in $SOURCEDIRS ; do
1430      done      done
1431  done  done
1432    
1433    
1434  echo  echo
1435  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1436  echo "  setting INCLUDES"  echo "  setting INCLUDES"
# Line 1382  EXE_FTL=$EXECUTABLE"_ftl" Line 1530  EXE_FTL=$EXECUTABLE"_ftl"
1530  EXE_SVD=$EXECUTABLE"_svd"  EXE_SVD=$EXECUTABLE"_svd"
1531    
1532  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1533    #
1534    # OPTFILE="$OPTFILE"
1535  #  #
1536  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
1537  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
# Line 1418  EXE_SVD     = ${EXE_SVD} Line 1568  EXE_SVD     = ${EXE_SVD}
1568  ENABLED_PACKAGES = ${ENABLED_PACKAGES}  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1569  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1570    
1571    # These files are created by Makefile
1572    SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h
1573    
1574  EOF  EOF
1575    
1576  #  Note: figure out some way to add Hyades JAM libraries here  #  Note: figure out some way to add Hyades JAM libraries here
# Line 1482  cat >>$MAKEFILE <<EOF Line 1635  cat >>$MAKEFILE <<EOF
1635  .SUFFIXES: .o .f .p .F .c .F90 .f90  .SUFFIXES: .o .f .p .F .c .F90 .f90
1636    
1637  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
1638  \$(EXECUTABLE): links \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1639          @echo Creating \$@ ...          @echo Creating \$@ ...
1640          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1641  depend:  depend:
# Line 1490  depend: Line 1643  depend:
1643          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1644          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1645    
1646  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) ${PACKAGES_DOT_H} AD_CONFIG.h  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1647    
1648  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
1649    
# Line 1503  clean: Line 1656  clean:
1656  Clean:  Clean:
1657          @make clean          @make clean
1658          @make cleanlinks          @make cleanlinks
1659          -rm -f ${PACKAGES_DOT_H} AD_CONFIG.h          -rm -f \$(SPECIAL_FILES)
1660          -rm -f Makefile.bak genmake_state genmake_*optfile genmake_warnings make.log          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak
1661  CLEAN:  CLEAN:
1662          @make Clean          @make Clean
1663          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
# Line 1518  makefile: Line 1671  makefile:
1671  cleanlinks:  cleanlinks:
1672          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
1673    
1674  # Special targets  # Special targets ($SPECIAL_FILES) which are create by make
1675  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
1676          @echo Creating \$@ ...          @echo Creating \$@ ...
1677          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warngin - this file is automatically generated - do NOT edit" "Enabled packages:" \$(ENABLED_PACKAGES) " " "Disabled packages:" \$(DISABLED_PACKAGES) > \$@          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
1678  AD_CONFIG.h:  AD_CONFIG.h:
1679          @echo Creating \$@ ...          @echo Creating \$@ ...
1680          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@
1681    FC_NAMEMANGLE.h:
1682            @echo Creating \$@ ...
1683            echo "$FC_NAMEMANGLE" > \$@
1684    
1685  # The normal chain of rules is (  .F - .f - .o  )  # The normal chain of rules is (  .F - .f - .o  )
1686  .F.f:  .F.f:
# Line 1584  adall: ad_taf Line 1740  adall: ad_taf
1740  adtaf: ad_taf_output.f  adtaf: ad_taf_output.f
1741  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.f
1742    
1743  ad_input_code.f: links \$(AD_FILES) \$(HEADERFILES)  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1744          @\$(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          @\$(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
1745          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
1746          -rm -f ad_config.template          -rm -f ad_config.template
# Line 1616  ftlall: ftl_taf Line 1772  ftlall: ftl_taf
1772  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.f
1773  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.f
1774    
1775  ftl_input_code.f: links \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
1776          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
1777          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
1778          -rm -f ftl_config.template          -rm -f ftl_config.template
# Line 1689  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 1845  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
1845    
1846  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
1847    
1848  #  Write the "template" files for the adjoint builds  # Create special header files
1849  cat >AD_CONFIG.template <<EOF  $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"
1850  C  WARNING: This file is automatically generated by genmake2 and  if test ! -f $PACKAGES_DOT_H ; then
1851  C    used by the Makefile rules.  Please DO NOT EDIT this file      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1852  C    unless you are CERTAIN that you know what you are doing.  else
1853        cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H > /dev/null 2>&1
1854  #undef ALLOW_ADJOINT_RUN      RETVAL=$?
1855  #undef ALLOW_TANGENTLINEAR_RUN      if test "x$RETVAL" = x0 ; then
1856  #undef ALLOW_ECCO_OPTIMIZATION          rm -f $PACKAGES_DOT_H".tmp"
1857  EOF      else
1858  cat >ad_config.template <<EOF          mv -f $PACKAGES_DOT_H $PACKAGES_DOT_H".bak"
1859  C  WARNING: This file is automatically generated by genmake2 and          mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
1860  C    used by the Makefile rules.  Please DO NOT EDIT this file      fi
1861  C    unless you are CERTAIN that you know what you are doing.  fi
1862    if test ! -f AD_CONFIG.h ; then
1863  #define ALLOW_ADJOINT_RUN      $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h
1864  #undef ALLOW_TANGENTLINEAR_RUN  fi
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cat >ftl_config.template <<EOF  
 C  WARNING: This file is automatically generated by genmake2 and  
 C    used by the Makefile rules.  Please DO NOT EDIT this file  
 C    unless you are CERTAIN that you know what you are doing.  
   
 #undef ALLOW_ADJOINT_RUN  
 #define ALLOW_TANGENTLINEAR_RUN  
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cat >svd_config.template <<EOF  
 C  WARNING: This file is automatically generated by genmake2 and  
 C    used by the Makefile rules.  Please DO NOT EDIT this file  
 C    unless you are CERTAIN that you know what you are doing.  
   
 #undef ALLOW_ADJOINT_RUN  
 #undef ALLOW_TANGENTLINEAR_RUN  
 #undef ALLOW_ECCO_OPTIMIZATION  
 EOF  
 cp AD_CONFIG.template AD_CONFIG.h  
1865    
1866    
1867  #  Write the "state" for future records  #  Write the "state" for future records

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.69

  ViewVC Help
Powered by ViewVC 1.1.22