| #!/bin/sh |
| |
| # |
| # feature-remove: removes features by defining special variables |
| # indicating particular code segments are unneeded. This is done by |
| # examining the list of provided features and defining a REMOVE |
| # equivalent if no other module required it. |
| # |
| # Arguments: |
| # feature-remove mainheader.h globalheader.h THEREST |
| # |
| # Where THEREST are a list of features to remove (default) or add. |
| # |
| # --add switches to "adding" and --remove switches back. |
| # |
| # E.G. |
| # feature-remove mainheader.h globalheader.h oid_stash --add container_null |
| # |
| CP=cp |
| |
| featureheader="$1" |
| featureheaderin="$1.in" |
| featureheaderglobal="$2" |
| shift |
| shift |
| |
| argumenttype="--remove" |
| removethese="" |
| addthese="" |
| |
| while test "x$1" != "x" ; do |
| uc=`echo $1 | tr a-z A-Z` |
| case $1 in |
| --*) |
| argumenttype="$1" |
| ;; |
| |
| *) |
| if test "x$argumenttype" = "x--remove" ; then |
| removethese="$removethese $uc" |
| else |
| addthese="$addthese $uc" |
| fi |
| ;; |
| esac |
| shift |
| done |
| |
| echo "" > $featureheader |
| echo "/* The following defines features that Net-SNMP HAS or has REMOVEd */" >> $featureheader |
| |
| haslist=" " |
| |
| for i in `grep NETSNMP_FEATURE_PROVIDE_ $featureheaderin | sed 's/.*FEATURE_PROVIDE_//;s/ .*//'` ; do |
| # |
| # If we were specifically asked to include it, then do so |
| # |
| if echo " $addthese " | grep " ${i} " > /dev/null ; then |
| # The user required it ; report we're using it |
| echo "#define NETSNMP_FEATURE_HAS_$i 1" >> $featureheader |
| haslist="${haslist}${i} " |
| |
| # |
| # check to see if something requried it |
| # |
| elif grep "NETSNMP_FEATURE_REQUIRE_${i} " $featureheaderglobal > /dev/null ; then |
| # if so, make sure we weren't asked to remove it |
| if echo " $removethese "| grep " $i " > /dev/null ; then |
| # Uh oh; they specifically wanted it removed but it was required |
| echo "Feature Error:" |
| echo " Feature '$i' was asked to be removed but something required it" |
| echo " See the $featureheaderglobal file for dependency details" |
| echo "" |
| rm -f $featureheader |
| exit 1 |
| fi |
| |
| # something required it ; report we're using it |
| echo "#define NETSNMP_FEATURE_HAS_$i 1" >> $featureheader |
| haslist="${haslist}${i} " |
| |
| # |
| # check to see if something "wanted" it |
| # |
| elif grep "NETSNMP_FEATURE_WANT_${i} " $featureheaderglobal > /dev/null ; then |
| # nothing required it, but something "wanted" it |
| |
| # check to make sure we weren't asked to exclude it |
| if echo " $removethese " | grep " $i " > /dev/null ; then |
| # we were specifically asked *not* to use this feature |
| echo "#define NETSNMP_FEATURE_REMOVE_$i 1" >> $featureheader |
| else |
| # something wanted it, so we'll include it |
| echo "#define NETSNMP_FEATURE_HAS_$i 1" >> $featureheader |
| haslist="${haslist}${i} " |
| fi |
| |
| |
| # |
| # check to see if something required a parent |
| # |
| elif egrep NETSNMP_FEATURE_${i}_CHILD_OF $featureheaderglobal > /dev/null ; then |
| parentnames=`egrep NETSNMP_FEATURE_${i}_CHILD_OF $featureheaderglobal | sed 's/.*CHILD_OF_//;s/ .*//;'` |
| |
| foundone=0 |
| for parentname in $parentnames ; do |
| # if the parent was desired, then we are too: |
| |
| if test $foundone = 0 ; then |
| if egrep "NETSNMP_FEATURE_HAS_${parentname} " $featureheader > /dev/null ; then |
| echo "#define NETSNMP_FEATURE_HAS_$i 1" >> $featureheader |
| haslist="${haslist}${i} " |
| foundone=1 |
| fi |
| fi |
| done |
| if test $foundone = 0 ; then |
| echo "#define NETSNMP_FEATURE_REMOVE_$i 1" >> $featureheader |
| fi |
| |
| # |
| # no one required or wanted it -- it is safe to remove it |
| # |
| else |
| echo "#define NETSNMP_FEATURE_REMOVE_$i 1" >> $featureheader |
| fi |
| done |
| |