summaryrefslogtreecommitdiff
path: root/local/minimalist/feature-remove
diff options
context:
space:
mode:
Diffstat (limited to 'local/minimalist/feature-remove')
-rwxr-xr-xlocal/minimalist/feature-remove128
1 files changed, 128 insertions, 0 deletions
diff --git a/local/minimalist/feature-remove b/local/minimalist/feature-remove
new file mode 100755
index 0000000..aae340d
--- /dev/null
+++ b/local/minimalist/feature-remove
@@ -0,0 +1,128 @@
+#!/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
+