--- MITgcm/tools/genmake2 2003/11/24 14:54:12 1.44 +++ MITgcm/tools/genmake2 2003/12/05 15:08:33 1.53 @@ -1,6 +1,6 @@ -#!/bin/sh +#! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.44 2003/11/24 14:54:12 adcroft Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.53 2003/12/05 15:08:33 edhill Exp $ # # Makefile generator for MITgcm UV codes # created by cnh 03/98 @@ -13,30 +13,35 @@ test_for_package_in_cpp_options() { cpp_options=$1 pkg=$2 - grep -i "#define.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1 - RETVAL=$? - if test "x${RETVAL}" = x0 ; then - echo "Error: In $cpp_options there is an illegal line: #define ALLOW_$pkg" - exit 99 - fi - grep -i "#undef.*ALLOW_$pkg" $cpp_options > /dev/null 2>&1 - RETVAL=$? - if test "x${RETVAL}" = x0 ; then - echo "Error: In $cpp_options there is an illegal line: #undef ALLOW_$pkg" - exit 99 - fi - grep -i "#define.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1 + test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99 +} + +# Search for particular CPP #cmds associated with MPI +# usage: test_for_mpi_in_cpp_eeoptions CPP_file +test_for_mpi_in_cpp_eeoptions() { + cpp_options=$1 + test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99 + test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99 +} + +# Search for particular string in a file. Return 1 if detected, 0 if not +# usage: test_for_string_in_file file string +test_for_string_in_file() { + file=$1 + strng=$2 + grep -i "$strng" $file > /dev/null 2>&1 RETVAL=$? if test "x${RETVAL}" = x0 ; then - echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg" - exit 99 + echo -n "Error: In $file there is an illegal line: " + grep -i "$strng" $file + return 1 fi - grep -i "#undef.*DISABLE_$pkg" $cpp_options > /dev/null 2>&1 - RETVAL=$? - if test "x${RETVAL}" = x0 ; then - echo "Error: In $cpp_options there is an illegal line: #undef DISABLE_$pkg" - exit 99 - fi + return 0 } # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to @@ -586,7 +591,7 @@ -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;; - -adoptfile | --adoptfile | -ad | --ad) + -adoptfile | --adoptfile | -adof | --adof) ac_prev=AD_OPTFILE ;; -adoptfile=* | --adoptfile=* | -adof=* | --adof=*) AD_OPTFILE=$ac_optarg ;; @@ -888,12 +893,6 @@ else echo "no" 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 rm -f genmake_t* @@ -1147,18 +1146,6 @@ # Create a list of #define and #undef to enable/disable packages PACKAGES_DOT_H=PACKAGES_CONFIG.h -cat <$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 - -C Packages disabled by genmake: -EOF # The following UGLY HACK sets multiple "#undef"s and it needs to go # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h # file would eventually be split up so that all package-related #define @@ -1177,50 +1164,27 @@ done if test "x$has_pack" = xf ; then undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'` - echo "#undef $undef" >> $PACKAGES_DOT_H".tmp" DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef" fi fi done -cat <>$PACKAGES_DOT_H".tmp" - -C Packages enabled by genmake: -EOF ENABLED_PACKAGES= for i in $PACKAGES ; do def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'` - echo "#define $def" >> $PACKAGES_DOT_H".tmp" ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def" #eh3 DEFINES="$DEFINES -D$def" #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! case $i in aim_v23) - echo "#define ALLOW_AIM" >> $PACKAGES_DOT_H".tmp" DEFINES="$DEFINES -DALLOW_AIM" + ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM" echo "Warning: ALLOW_AIM is set to enable aim_v23. This is REALLY ugly Jean-Michel :-)" ;; esac #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! done -cat <>$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 echo " Adding STANDARDDIRS" BUILDDIR=${BUILDDIR:-.} @@ -1246,29 +1210,36 @@ fi done -echo " Searching for CPP_OPTIONS.h in order to warn about the presence" -echo " of \"#define ALLOW_PKGNAME\"-type statements:" +echo " Searching for *OPTIONS.h files in order to warn about the presence" +echo " of \"#define \"-type statements that are no longer allowed:" CPP_OPTIONS= +CPP_EEOPTIONS= spaths=". $INCLUDEDIRS" +names=`ls -1 "$ROOTDIR/pkg"` for i in $spaths ; do try="$i/CPP_OPTIONS.h" - # echo -n " trying $try : " - if test -f $try -a -r $try ; then + if test -f $try -a -r $try -a "x$CPP_OPTIONS" == x ; then echo " found CPP_OPTIONS=\"$try\"" CPP_OPTIONS="$try" - break + # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h + for n in $names ; do + test_for_package_in_cpp_options $CPP_OPTIONS $n + done + fi + try="$i/CPP_EEOPTIONS.h" + if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" == x ; then + echo " found CPP_EEOPTIONS=\"$try\"" + # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h +#**** not yet enabled **** +# test_for_mpi_in_cpp_eeoptions $try +#**** not yet enabled **** + CPP_EEOPTIONS="$try" fi done if test "x$CPP_OPTIONS" = x ; then echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths" exit 1 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 - # Here, we build the list of files to be "run through" the adjoint # compiler. @@ -1382,6 +1353,8 @@ EXE_SVD=$EXECUTABLE"_svd" cat >>$MAKEFILE <> \$(MAKEFILE) -links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) ${PACKAGES_DOT_H} AD_CONFIG.h +links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES) small_f: \$(F77FILES) \$(F90FILES) @@ -1503,8 +1479,8 @@ Clean: @make clean @make cleanlinks - -rm -f ${PACKAGES_DOT_H} AD_CONFIG.h - -rm -f Makefile.bak genmake_state genmake_*optfile genmake_warnings make.log + -rm -f \$(SPECIAL_FILES) + -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak CLEAN: @make Clean -find \$(EXEDIR) -name "*.meta" -exec rm {} \; @@ -1518,13 +1494,16 @@ cleanlinks: -find . -type l -exec rm {} \; -# Special targets +# Special targets ($SPECIAL_FILES) which are create by make ${PACKAGES_DOT_H}: @echo Creating \$@ ... - @\$(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) > \$@ AD_CONFIG.h: @echo Creating \$@ ... - @\$(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 > \$@ +FC_NAMEMANGLE.h: + @echo Creating \$@ ... + echo "$FC_NAMEMANGLE" > \$@ # The normal chain of rules is ( .F - .f - .o ) .F.f: @@ -1689,44 +1668,23 @@ printf "\n=== Done ===\n" -# Write the "template" files for the adjoint builds -cat >AD_CONFIG.template <ad_config.template <ftl_config.template <svd_config.template < $PACKAGES_DOT_H".tmp" +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 +if test ! -f AD_CONFIG.h ; then + $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 +fi # Write the "state" for future records