--- MITgcm/tools/genmake2 2003/09/29 16:15:23 1.11 +++ MITgcm/tools/genmake2 2003/10/01 20:47:26 1.11.2.3 @@ -1,6 +1,6 @@ #!/bin/bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.11 2003/09/29 16:15:23 edhill Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.11.2.3 2003/10/01 20:47:26 edhill Exp $ # # Makefile generator for MITgcm UV codes # created by cnh 03/98 @@ -8,6 +8,37 @@ # modified by aja 01/00 # rewritten in bash by eh3 08/03 +# Search for particular CPP #cmds associated with packages +# usage: test_for_package_in_cpp_options CPP_file package_name +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 + RETVAL=$? + if test "x${RETVAL}" = x0 ; then + echo "Error: In $cpp_options there is an illegal line: #define DISABLE_$pkg" + exit 99 + 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 +} + # Guess possible config options for this host find_possible_configs() { @@ -603,8 +634,19 @@ source ./.pd_tmp rm -f ./.pd_tmp +# Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups" +# file should eventually be added so that, for convenience, one can +# specify groups of packages using names like "ocean" and "atmosphere". echo -n " checking default package list: " if test "x${PDEFAULT}" = x ; then + for i in "." $MODS ; do + if test -r $i"/packages.conf" ; then + PDEFAULT=$i"/packages.conf" + break + fi + done +fi +if test "x${PDEFAULT}" = x ; then PDEFAULT="$ROOTDIR/pkg/pkg_default" fi if test "x${PDEFAULT}" = xNONE ; then @@ -645,7 +687,7 @@ done PACKAGES="$pack" echo " applying ENABLE settings" -rm -f ./.tmp_pack +echo "" > ./.tmp_pack PACKAGES="$PACKAGES $ENABLE" for i in $PACKAGES ; do if test ! -d "$ROOTDIR/pkg/$i" ; then @@ -761,34 +803,14 @@ # done # echo -echo " Searching for CPP_OPTIONS.h (macros and flags for configuring the model):" -CPP_OPTIONS= -spaths=". $SOURCEDIRS" -for i in $spaths ; do - try="$i/CPP_OPTIONS.h" - # echo -n " trying $try : " - if test -f $try -a -r $try ; then - echo " found CPP_OPTIONS=\"$try\"" - CPP_OPTIONS="$try" - if test "x$i" != "x." ; then - cp -f $CPP_OPTIONS . - fi - break - 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 -if test -e CPP_OPTIONS.h ; then - if test ! -e CPP_OPTIONS.h.bak ; then - cp -f CPP_OPTIONS.h CPP_OPTIONS.h.bak - fi - cat CPP_OPTIONS.h \ +# Create a list of #define and #undef to enable/disable packages +PACKAGES_DOT_H=PACKAGES.h +if test -e $PACKAGES_DOT_H ; then + cat $PACKAGES_DOT_H \ | awk 'BEGIN{p=1;} ($1=="C===" && $2=="GENMAKE"){p=0;} {if (p==1) print $0}' \ - > CPP_OPTIONS.h.tmp + > $PACKAGES_DOT_H".tmp" fi -cat <>CPP_OPTIONS.h.tmp +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 @@ -814,7 +836,8 @@ done if test "x$has_pack" = xf ; then undef=`echo "ALLOW_$n" | awk '{print toupper($0)}'` - echo "#undef $undef" >> CPP_OPTIONS.h.tmp + echo "#undef $undef" >> $PACKAGES_DOT_H".tmp" +# DEFINES="$DEFINES -U$undef" #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! case $n in @@ -824,9 +847,6 @@ mom_vecinv) DEFINES="$DEFINES -DDISABLE_MOM_VECINV" ;; - generic_advdiff) - DEFINES="$DEFINES -DDISABLE_GENERIC_ADVDIFF" - ;; debug) DEFINES="$DEFINES -DDISABLE_DEBUGMODE" ;; @@ -836,24 +856,32 @@ fi fi done -cat <>CPP_OPTIONS.h.tmp +cat <>$PACKAGES_DOT_H".tmp" C Packages enabled by genmake: EOF for i in $PACKAGES ; do def=`echo "ALLOW_$i" | awk '{print toupper($0)}'` - echo "#define $def" >> CPP_OPTIONS.h.tmp + echo "#define $def" >> $PACKAGES_DOT_H".tmp" +#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" >> CPP_OPTIONS.h.tmp + echo "#define ALLOW_AIM" >> $PACKAGES_DOT_H".tmp" + DEFINES="$DEFINES -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 -mv -f CPP_OPTIONS.h.tmp CPP_OPTIONS.h +cmp $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H +RETVAL=$? +if test "x$RETVAL" = x0 ; then + mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H".bak" + mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H +fi echo " Adding STANDARDDIRS" BUILDDIR=${BUILDDIR:-.} @@ -877,14 +905,37 @@ fi done +echo " Searching for CPP_OPTIONS.h in order to warn about the presence" +echo " of \"#define ALLOW_PKGNAME\"-type statements:" +CPP_OPTIONS= +spaths=". $INCLUDEDIRS" +for i in $spaths ; do + try="$i/CPP_OPTIONS.h" + # echo -n " trying $try : " + if test -f $try -a -r $try ; then + echo " found CPP_OPTIONS=\"$try\"" + CPP_OPTIONS="$try" + break + 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 + echo echo "=== Creating the Makefile ===" echo " setting INCLUDES" for i in $INCLUDEDIRS ; do - if test -d $i ; then - INCLUDES="$INCLUDES -I$i" - else + if ! test -d $i ; then +# INCLUDES="$INCLUDES -I$i" +# else echo "Warning: can't find INCLUDEDIRS=\"$i\"" fi done @@ -1064,13 +1115,13 @@ Clean: @make clean @make cleanlinks - -rm -f Makefile.bak + -rm -f Makefile.bak gm_state gm_optfile make.log PACKAGES.h* CLEAN: @make Clean -find \$(EXEDIR) -name "*.meta" -exec rm {} \; -find \$(EXEDIR) -name "*.data" -exec rm {} \; -find \$(EXEDIR) -name "fort.*" -exec rm {} \; - -rm -f \$(EXECUTABLE) + -rm -f \$(EXECUTABLE) output.txt makefile: ${0} $@