/[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.91 by edhill, Fri Jul 30 14:31:40 2004 UTC revision 1.107 by edhill, Fri Oct 15 19:54:56 2004 UTC
# Line 124  EOF Line 124  EOF
124  EOF  EOF
125      test -f Makefile  &&  mv -f Makefile Makefile.bak      test -f Makefile  &&  mv -f Makefile Makefile.bak
126      cat <<EOF >> Makefile      cat <<EOF >> Makefile
 %.$tfs : %.F  
127  .SUFFIXES:  .SUFFIXES:
128  genmake_hello.$tfs: genmake_hello.F  .SUFFIXES: .$tfs .F
129          $LN genmake_hello.F genmake_hello.$tfs  .F.$tfs:
130            $LN \$< \$@
131  EOF  EOF
132      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133      RETVAL=$?      RETVAL=$?
# Line 520  Usage: "$0" [OPTIONS] Line 520  Usage: "$0" [OPTIONS]
520            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
521      -mpi=PATH | --mpi=PATH      -mpi=PATH | --mpi=PATH
522            Include MPI header files and link to MPI libraries using MPI_ROOT            Include MPI header files and link to MPI libraries using MPI_ROOT
523            set to PATH. i.e. Include files from $PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
524            from $PATH/lib and use binaries from $PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
525    
526      -bash NAME      -bash NAME
527            Explicitly specify the Bourne or BASH shell to use            Explicitly specify the Bourne or BASH shell to use
# Line 689  check_netcdf_libs()  { Line 689  check_netcdf_libs()  {
689        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
690        end        end
691  EOF  EOF
692      #echo "$CPP $DEFINES $INCLUDES"      #echo "$CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f"
693        #echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.f"
694        #echo "$LINK -o genmake_tnc.o $LIBS"
695      $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \      $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
696          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1          &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \
697            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
698      RET_COMPILE=$?      RET_COMPILE=$?
699      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1  
700      RETVAL=$?      #EH3  Remove test program execution for machines that either disallow
701      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      #EH3  execution or cannot support it (eg. cross-compilers)
702        #EH3
703        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
704        #EH3 RETVAL=$?
705        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
706    
707        if test "x$RET_COMPILE" = x0 ; then
708          HAVE_NETCDF=t          HAVE_NETCDF=t
709      else      else
710          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
711          $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \          $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
712              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \
713              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
714          RET_COMPILE=$?          RET_COMPILE=$?
715          test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1          if test "x$RET_COMPILE" = x0 ; then
         RETVAL=$?  
         if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then  
716              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
717              HAVE_NETCDF=t              HAVE_NETCDF=t
718          else          else
# Line 729  LN= Line 736  LN=
736  S64=  S64=
737  KPP=  KPP=
738  FC=  FC=
739  CC=  #CC=gcc
740  CPP=  CPP=
741  LINK=  LINK=
742  DEFINES=  DEFINES=
# Line 775  BASH= Line 782  BASH=
782  PWD=`pwd`  PWD=`pwd`
783  MAKE=make  MAKE=make
784  AWK=awk  AWK=awk
785  THISHOSTNAME=`hostname`  THISHOST=`hostname`
786  THISCWD=`pwd`  THISCWD=`pwd`
787  THISDATE=`date`  THISDATE=`date`
788    THISUSER=`echo $USER`
789    THISVER=
790  MACHINE=`uname -a`  MACHINE=`uname -a`
791  EXECUTABLE=  EXECUTABLE=
792  EXEHOOK=  EXEHOOK=
# Line 811  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STA Line 820  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STA
820  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
821  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 "
822  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
823  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
824  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
825  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
826    
# Line 852  else Line 861  else
861      echo "none found"      echo "none found"
862  fi  fi
863    
864  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
865  #OPTIONS=  #OPTIONS=
866  #n=0  #n=0
867  #for i ; do  #for i ; do
# Line 864  fi Line 873  fi
873  #done  #done
874  #parse_options  #parse_options
875  ac_prev=  ac_prev=
876  for ac_option in $@ ; do  for ac_option in "$@" ; do
877    
878      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
879    
# Line 1036  if test -f ./.genmakerc ; then Line 1045  if test -f ./.genmakerc ; then
1045      echo      echo
1046  fi  fi
1047    
1048    #  Find the MITgcm ${ROOTDIR}
1049  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1050      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1051      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
# Line 1062  if test ! -d ${ROOTDIR} ; then Line 1072  if test ! -d ${ROOTDIR} ; then
1072      exit 1      exit 1
1073  fi  fi
1074    
1075    #  Find the MITgcm ${THISVER}
1076    if test -f "${ROOTDIR}/doc/tag-index" ; then
1077        THISVER=`grep checkpoint ${ROOTDIR}/doc/tag-index | head -1`
1078    fi
1079    
1080  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1081  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1082      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 1138  EOF Line 1153  EOF
1153      exit 1      exit 1
1154  fi  fi
1155  if test "x$CC" = x ; then  if test "x$CC" = x ; then
1156      cat <<EOF 1>&2      CC=cc
1157    #     cat <<EOF 1>&2
1158  Error: no C compiler: please specify using one of the following:  # Error: no C compiler: please specify using one of the following:
1159    1) within the options file ("CC=...") as specified by "-of=OPTFILE"  #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1160    2) the "-cc=XXX" command-line option  #   2) the "-cc=XXX" command-line option
1161    3) the "./genmake_local" file  #   3) the "./genmake_local" file
1162  EOF  # EOF
1163      exit 1  #     exit 1
1164  fi  fi
1165  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1166      LINK=$FC      LINK=$FC
# Line 1330  if test ! -d ${TOOLSDIR} ; then Line 1345  if test ! -d ${TOOLSDIR} ; then
1345      exit 1      exit 1
1346  fi  fi
1347  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1348      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1349        RETVAL=$?
1350        if test "x${RETVAL}" = x0 ; then
1351            S64='$(TOOLSDIR)/set64bitConst.sh'
1352        else
1353            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1354            RETVAL=$?
1355            if test "x${RETVAL}" = x0 ; then
1356                S64='$(TOOLSDIR)/set64bitConst.csh'
1357            else
1358                cat <<EOF
1359    
1360    ERROR: neither of the two default scripts:
1361    
1362        ${TOOLSDIR}/set64bitConst.sh
1363        ${TOOLSDIR}/set64bitConst.csh
1364    
1365      are working so please check paths or specify (with \$S64) a
1366      working version of this script.
1367    
1368    EOF
1369                exit 1
1370            fi
1371        fi
1372  fi  fi
1373  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1374    
# Line 1475  done Line 1513  done
1513  rm -f ./.tmp_pack  rm -f ./.tmp_pack
1514  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1515    
1516    #  Check availability of NetCDF and then either build the MNC template
1517    #  files or delete mnc from the list of available packages.
1518    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1519    RETVAL=$?
1520    if test "x$RETVAL" = x0 ; then
1521        if test "x$HAVE_NETCDF" != xt ; then
1522            cat <<EOF
1523    
1524    *********************************************************************
1525    WARNING: the "mnc" package was enabled but tests failed to compile
1526      NetCDF applications.  Please check that:
1527    
1528      1) NetCDF is correctly installed for this compiler and
1529      2) the LIBS variable (within the "optfile") specifies the correct
1530           NetCDF library to link against.
1531    
1532      Due to this failure, the "mnc" package is now DISABLED.
1533    *********************************************************************
1534    
1535    EOF
1536            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1537            DISABLE="$DISABLE mnc"
1538        else
1539            ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1540            RETVAL=$?
1541            if test "x${RETVAL}" = x0 ; then
1542                rm -f make_mnc.errors
1543            else
1544                echo "Error: problem encountered while building source files in pkg/mnc:"
1545                cat make_mnc.errors 1>&2
1546                exit 1
1547            fi
1548        fi
1549    fi
1550    
1551  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1552  ck=  ck=
1553  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1559  for i in $PACKAGES ; do Line 1632  for i in $PACKAGES ; do
1632      fi      fi
1633  done  done
1634    
 #  Build MNC templates and check for ability to build and use NetCDF  
 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" = x0 ; then  
     ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1  
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         rm -f make_mnc.errors  
     else  
         echo "Error: problem encountered while building source files in pkg/mnc:"  
         cat make_mnc.errors 1>&2  
         exit 1  
     fi  
     if test "x$HAVE_NETCDF" != xt ; then  
         cat <<EOF  
   
 WARNING: the "mnc" package has been enabled but tests failed to  
   compile and/or execute NetCDF applications.  Please check that:  
   
   1) NetCDF is installed for your compiler and  
   2) the LIBS variable (within the 'optfile") specifies the correct  
        NetCDF library to link against.  
     
 EOF  
     fi  
 fi  
   
1635  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
1636  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
1637  #  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
# Line 1732  for d in $alldirs ; do Line 1778  for d in $alldirs ; do
1778                          ;;                          ;;
1779                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
1780                          ;;                          ;;
1781                      ./BUILD_INFO.h)
1782                            ;;
1783                    *)                    *)
1784                          touch .links.tmp/$sf                          touch .links.tmp/$sf
1785                          deplist="$deplist $sf"                          deplist="$deplist $sf"
# Line 1788  echo "#    $THISDATE" >> $MAKEFILE Line 1836  echo "#    $THISDATE" >> $MAKEFILE
1836  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1837  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1838  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1839  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
1840    
1841  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
1842  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1834  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 1882  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
1882  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
1883    
1884  # These files are created by Makefile  # These files are created by Makefile
1885  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
1886    
1887  EOF  EOF
1888    
# Line 1853  KPP = ${KPP} Line 1901  KPP = ${KPP}
1901  FC = ${FC}  FC = ${FC}
1902  # Fortran compiler  # Fortran compiler
1903  F90C = ${F90C}  F90C = ${F90C}
1904    # C compiler
1905    CC = ${CC}
1906  # Link editor  # Link editor
1907  LINK = ${LINK} ${LDADD}  LINK = ${LINK} ${LDADD}
1908    
# Line 1875  CFLAGS = ${CFLAGS} Line 1925  CFLAGS = ${CFLAGS}
1925  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
1926  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
1927  # Flags and libraries needed for linking  # Flags and libraries needed for linking
1928  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
1929  # Name of the Mekfile  # Name of the Mekfile
1930  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
1931    
# Line 1936  makefile: Line 1986  makefile:
1986  cleanlinks:  cleanlinks:
1987          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
1988    
1989  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are create by make
1990  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
1991          @echo Creating \$@ ...          @echo Creating \$@ ...
1992          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
# Line 1947  FC_NAMEMANGLE.h: Line 1997  FC_NAMEMANGLE.h:
1997          @echo Creating \$@ ...          @echo Creating \$@ ...
1998          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
1999    
2000    BUILD_INFO.h:
2001            @echo Creating \$@ ...
2002    EOF
2003    
2004    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2005    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2006    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2007    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2008    
2009    cat >>$MAKEFILE <<EOF
2010    
2011  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
2012    
2013  %.o : %.F  ## This nullifies any default implicit rules concerning these two file types:
2014    ## %.o : %.F
2015    
2016  .F.$FS:  .F.$FS:
2017          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
# Line 2034  ad_tamc_output.f: ad_input_code.f Line 2096  ad_tamc_output.f: ad_input_code.f
2096  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2097          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2098    
2099    adonlyfwd:
2100            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2101    
2102    adtrick:
2103            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2104    
2105  # ... FTL ...  # ... FTL ...
2106  ftlall: ftl_taf  ftlall: ftl_taf

Legend:
Removed from v.1.91  
changed lines
  Added in v.1.107

  ViewVC Help
Powered by ViewVC 1.1.22