| # -*- autoconf -*- |
| # |
| # generate empty files |
| # |
| # Create include file list for snmp_vars.h to use. |
| mibdir="agent/mibgroup" |
| if test ! -d agent; then |
| mkdir agent |
| fi |
| if test ! -d agent/mibgroup; then |
| mkdir agent/mibgroup |
| fi |
| j="$mibdir/mib_module_includes.h $mibdir/agent_module_includes.h \ |
| $mibdir/mib_module_inits.h $mibdir/agent_module_inits.h \ |
| $mibdir/mib_module_shutdown.h $mibdir/agent_module_shutdown.h \ |
| include/net-snmp/agent/mib_module_config.h \ |
| include/net-snmp/agent/agent_module_config.h \ |
| $mibdir/mib_module_dot_conf.h $mibdir/agent_module_dot_conf.h" |
| |
| for i in $j; do |
| rm -f $i |
| echo "/* This file is automatically generated by configure. Do not modify by hand. */" > $i |
| done |
| |
| # |
| # Do hairy agent module processing. |
| # |
| AC_MSG_CHECKING([for and configuring mib modules to use]) |
| |
| # set up the CPP command |
| MODULECPP="$CPP $PARTIALTARGETFLAGS $CPPFLAGS -DNETSNMP_FEATURE_CHECKING -I${srcdir}/include -I${srcdir}/agent/mibgroup" |
| if test "x$enable_mfd_rewrites" = "xyes"; then |
| MODULECPP="$MODULECPP -DNETSNMP_ENABLE_MFD_REWRITES" |
| fi |
| |
| module_list="" |
| mib_module_list="" |
| agent_module_list="" |
| new_with_mib_modules=`echo $with_mib_modules | $SED 's/,/ /g;'` |
| new_with_out_mib_modules=`echo $with_out_mib_modules | $SED 's/,/ /g;'` |
| |
| # set up initial module list |
| new_module_list="$new_with_mib_modules default_modules" |
| |
| # minor modifications |
| if test "x$enable_agent" = "xno"; then |
| # minimum mib module list for snmptrapd |
| new_module_list="mibII/vacm_vars mibII/vacm_conf utilities/execute $new_with_mib_modules" |
| default_mibs=SNMPv2-MIB:IF-MIB:IP-MIB:TCP-MIB:UDP-MIB |
| default_mibs_install=" " |
| elif test "x$mini_agent" = "xyes"; then |
| # define the mini agent flag to reduce our load list from default_mibs.h |
| MODULECPP="$MODULECPP -DNETSNMP_MINI_AGENT" |
| fi |
| |
| test_modules="$new_module_list" |
| new_module_list="" |
| |
| # remove modules that were explicitly excluded |
| for i in $test_modules |
| do |
| if echo " $new_with_out_mib_modules " | $GREP " $i " > /dev/null; then |
| mib_cfg_msg="mib module '$i' is both included and excluded." |
| AC_MSG_WARN([mib module conflict]) |
| if test "x$with_mib_cfg_checks" = "xyes"; then |
| AC_MSG_WARN([user with : $with_mib_modules]) |
| AC_MSG_WARN([final with : $new_module_list]) |
| AC_MSG_WARN([user without : $with_out_mib_modules]) |
| AC_MSG_WARN([final without: $new_with_out_mib_modules]) |
| AC_MSG_ERROR([$mib_cfg_msg]) |
| else |
| AC_MSG_WARN([$mib_cfg_msg It will be excluded]) |
| AC_MSG_CACHE_ADD([*** MIB Module warning *** $mib_cfg_msg It has been excluded.]) |
| fi |
| else |
| new_module_list="$new_module_list $i" |
| fi |
| done |
| |
| new_module_list=`(echo $new_module_list | tr ' ' '\n' | sort | tr '\n' ' '; echo '') | $SED 's/ $//'` |
| |
| AC_MSG_RESULT([$new_module_list.]) |
| |
| #--------------------- |
| # loop over module list |
| # |
| all_warnings="" |
| if test "x$with_mib_cfg_debug" = "xyes"; then |
| module_debug=1 |
| else |
| module_debug=0 |
| fi |
| first_pass=1 |
| output_to=normal |
| |
| if test ! -d mk ; then |
| mkdir mk |
| fi |
| |
| |
| module_rules=mk/module_rules.mk |
| echo "# contents below built automatically by configure; do not edit by hand" > $module_rules |
| |
| # |
| # make file sub-pieces |
| # |
| for i in module_list_deps mib_module_list_deps agent_module_list_deps ; do |
| eval "$i=mk/${i}.mk" |
| echo "# contents below built automatically by configure; do not edit by hand" > mk/${i}.mk |
| done |
| |
| # |
| # variable settings sub-pieces |
| # |
| for i in module_list_code mib_module_list_code agent_module_list_code module_list mib_module_list agent_module_list ; do |
| eval "$i=mk/${i}.mk" |
| echo "# contents below built automatically by configure; do not edit by hand" > mk/${i}.mk |
| echo "$i= \\" >> mk/${i}.mk |
| done |
| |
| echo $ECHO_N "echo " $ECHO_C > mk/MODULE_LIST.mk |
| MODULE_LIST=mk/MODULE_LIST.mk |
| |
| |
| #--------------------- |
| # until we have an empty module list... |
| # (modules may add new modules, and until all dependencies are done...) |
| # |
| while test "x$new_module_list" != "x"; do |
| AC_MSG_MODULE_DBG(-e,"\n****************************************************************") |
| AC_MSG_MODULE_DBG("nml: $new_module_list") |
| |
| #--------------------- |
| # loop over all the modules in the current list |
| # |
| for j in $new_module_list |
| do |
| |
| #--------------------- |
| # figure out which sub-blocks to build in parts |
| if echo "$j" | $GREP "=" ; then |
| # build a shared object file |
| # format: sofilename=module1:module2 |
| # XXX: currently doesn't do this |
| dl_name=`echo $j | $SED 's/=.*//'` |
| dl_names="$dl_names $dl_name" |
| dl_objects=`echo $j | $SED 's/.*=//'` |
| module_sublist=`echo $dl_objects | $SED 's/:/ /g'` |
| saved_sublist="" |
| saved_sublist_code="" |
| output_to=separate |
| |
| # create output files |
| # these actually get nuked later |
| output_inits="agent/mibgroup/${dl_name}-dll.c" |
| output_hdrs="agent/mibgroup/${dl_name}-hdrs.h" |
| else |
| # not a special token invocation |
| module_sublist=$j |
| output_to=normal |
| output_t= |
| fi |
| |
| while test "x$module_sublist" != "x" ; do |
| |
| #--------------------- |
| # loop over all the modules in the sub list |
| for i in $module_sublist |
| do |
| |
| AC_MSG_MODULE_DBG(-e "\n================================================================") |
| AC_MSG_MODULE_DBG("testing $i") |
| need_header=0 |
| |
| #--------------------- |
| # build a pseudo include header that includes current config and |
| # system symbols: |
| rm -f conftest.$ac_ext module_tmp_header.h |
| AC_LANG_CONFTEST([AC_LANG_SOURCE([[ |
| #include NETSNMP_SYSTEM_INCLUDE_FILE |
| #include "$srcdir/$mibdir/$i.h"]])]) |
| mv conftest.$ac_ext module_tmp_header.h |
| |
| #--------------------- |
| # macro: config_belongs_in(ARG) |
| # ARG: either |
| # - mib_module => libnetsnmpmibs (default) |
| # - agent_module => libnetsnmpagent |
| # |
| AH_TOP([#define config_belongs_in(x)]) |
| module_type=mib_module |
| if test -f $srcdir/$mibdir/$i.h; then |
| changequote(, ) |
| module_type=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's@.*config_belongs_in(\([^)]*\)).*@\1@p'` |
| changequote([, ]) |
| fi |
| if test "x$module_type" = "x" ; then |
| module_type=mib_module |
| fi |
| if test "x$output_to" = "xnormal" ; then |
| output_inits="$mibdir/${module_type}_inits.h" |
| output_hdrs="$mibdir/${module_type}_includes.h" |
| fi |
| |
| #-------------------- |
| # check for duplicates within the dll system. |
| # - if found in a dll, then remove from the dll and add to main |
| dblfix="" |
| for dltest in $dl_names ; do |
| eval mod_files="\"\$dl_${dltest}_files\"" |
| if echo " $mod_files " | $GREP " $i " > /dev/null; then |
| # some dll module has already seen this, unload it from that list |
| # and include it in the core (again) |
| AC_MSG_MODULE_DBG("removing $i from $dltest") |
| mod_files=`echo " $mod_files " | $SED "s@ $i @@"` |
| dblfix="__XXX__" |
| eval "dl_${dltest}_files=\"$mod_files\"" |
| |
| module_list="$module_list $i" |
| echo "read_config.lo: mibgroup/$i.h" >> $module_list_deps |
| if test $module_type = "agent_module" ; then |
| echo "snmp_vars.lo: mibgroup/$i.h" >> $agent_module_list_deps |
| else |
| echo "mib_modules.lo: mibgroup/$i.h" >> $mib_module_list_deps |
| fi |
| eval ${module_type}_list="\"\$${module_type}_list $i\"" |
| echo " $i \\" >> $module_list_code |
| echo $ECHO_N " $i" $ECHO_C >> $MODULE_LIST |
| eval tmpfilevar=\$`echo ${module_type}_list_code` |
| echo " $i \\" >> $tmpfilevar |
| |
| # XXX: add this to the main init list; this is possible not |
| # quite in the right spot any longer but we're stuck with it. |
| # Adding it back to the original ordered spot would be a |
| # nightmare. Ok, we're already in nightmare code so that |
| # wolud have to be a night-terror. |
| mnm=`echo $i | $SED 's/.*\///;s/\.c$//;'` |
| output_inits_tmp="$mibdir/${module_type}_inits.h" |
| echo " if (should_init(\"$mnm\")) init_$mnm();" >> $output_inits_tmp |
| # XXX: even worse, we loose whether the header is needed or not. |
| output_hdrs_tmp="$mibdir/${module_type}_includes.h" |
| echo '#include "'"mibgroup/$i.h"'"' >> $output_hdrs_tmp |
| fi |
| done |
| |
| #--------------------- |
| # make sure module wasn't explicitly excluded, or already added |
| # |
| if test "x$dblfix" != "x" ; then |
| AC_MSG_MODULE_DBG("$i was duplicated -- putting into main") |
| elif echo " $new_with_out_mib_modules " | $GREP " $i " > /dev/null; then |
| AC_MSG_MODULE_DBG("$i was excluded") |
| elif echo " $module_list " | $GREP " $i " > /dev/null; then |
| AC_MSG_MODULE_DBG("$i already tested") |
| else |
| |
| #--------------------- |
| # process modules header, checking for config_ pseudo-macros |
| # |
| |
| #--------------------- |
| # does the header file for the module exist? |
| # macros are only processed if it does |
| if test -f $srcdir/$mibdir/$i.h; then |
| new_list="" |
| |
| #--------------------- |
| # macro: config_exclude(modules) |
| # - lists conflicts with other modules |
| # - EG: new MIB implementations exclude old and vice-versa |
| # |
| # check if $i has any conflicts |
| # |
| AH_TOP([#define config_exclude(x)]) |
| new_list_excl=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_exclude(\(.*\)).*/\1/p'` |
| if test "x$new_list_excl" != "x"; then |
| AC_MSG_MODULE_DBG("$i excludes $new_list_excl") |
| for j in $new_list_excl |
| do |
| if echo " $module_list $new_mib_module_list $new_list_two " | $GREP " $j " > /dev/null; then |
| mib_cfg_msg="mib module '$i' excludes module '$j' but another module requires it" |
| AC_MSG_WARN([mib module error]) |
| if test "x$with_mib_cfg_checks" = "xyes"; then |
| AC_MSG_ERROR([$mib_cfg_msg]) |
| else |
| AC_MSG_WARN([$mib_cfg_msg]) |
| AC_MSG_CACHE_ADD([*** MIB Module warning *** $mib_cfg_msg]) |
| fi |
| else |
| new_with_out_mib_modules="$j $new_with_out_mib_modules" |
| AC_MSG_MODULE_DBG("$j added to excluded list") |
| fi |
| done |
| fi |
| |
| #--------------------- |
| # macro: config_arch_require(ARCH,modules) |
| # - lists modules required for a given ARCH |
| # |
| # check if $i has any architecture specific requirements |
| # |
| AH_TOP([#define config_arch_require(x,y)]) |
| changequote(, ) |
| new_list_arch=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_arch_require( *\([^ ]*\) *, *\([^ ]*\) *).*/\1-xarchx-\2/p'` |
| changequote([, ]) |
| if test "x$new_list_arch" != "x"; then |
| for j in $new_list_arch |
| do |
| archtest=`echo $j | $SED 's/-xarchx-.*//'` |
| # target_os may have been changed to a #define of 1... |
| if test "x$archtest" = "x1" -o "x$target_os" = "x$archtest" -o "x$PARTIALTARGETOS" = "x$archtest"; then |
| new_list="$new_list `echo $j | $SED 's/.*-xarchx-//'`" |
| AC_MSG_MODULE_DBG(" $i required adding arch files: `echo $j | $SED 's/.*-xarchx-//'`") |
| fi |
| done |
| fi |
| AC_MSG_MODULE_DBG(" $i required arch files: $new_list") |
| |
| #--------------------- |
| # macro: config_version_require((base, version, version-modules, ...)) |
| # - lists alternative modules used from different versions. |
| # |
| AH_TOP([#define config_version_require(x)]) |
| [new_list_alt3=`$MODULECPP module_tmp_header.h | \ |
| $AWK ' |
| BEGIN { |
| if("'"$enable_new_features"'" == "yes") |
| method="max"; |
| else if("'"$enable_old_features"'" == "yes") |
| method="max-less"; |
| else |
| method="max-less-equal"; |
| FS = "."; |
| split("'"$with_features_of"'", a); |
| version=sprintf("%03d%03d%03d%03d", a[1], a[2], a[3], a[4]); |
| } |
| /config_version_require/ { |
| gsub("^.*config_version_require *\\\\(\\\\(", ""); |
| gsub("\\\\)\\\\).*$", ""); |
| gsub(", *", ","); |
| FS = ","; |
| n = split($0, a); |
| FS = "."; |
| actver = "000000000000"; |
| actstr = a[1]; |
| for(i = 2; i < n; i += 2) { |
| split(a[i], b); |
| curver=sprintf("%03d%03d%03d%03d", b[1], b[2], b[3], b[4]); |
| if (curver > actver && (method != "max-less" || curver < version) && (method != "max-less-equal" || curver <= version)) { |
| actver = curver; |
| actstr = a[i + 1]; |
| } |
| } |
| printf(" %s", actstr); |
| }'`] |
| AC_MSG_MODULE_DBG(" $i required versioned features: $new_list_alt3") |
| new_list="${new_list}${new_list_alt3}" |
| |
| #--------------------- |
| # macro: config_require(modules) |
| # - lists modules required for this module |
| # |
| # check if $i has any other required modules |
| # |
| AH_TOP([#define config_require(x)]) |
| new_list="$new_list `$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_require(\(.*\)).*/\1/p'`" |
| AC_MSG_MODULE_DBG(" $i will test: $new_list") |
| if test "x$new_list" != "x"; then |
| for j in $new_list |
| do |
| AC_MSG_MODULE_DBG(-n " $i wants to add $j: ") |
| if test ! -f $srcdir/$mibdir/$j.h -a ! -f $srcdir/$mibdir/$j.c; then |
| AC_MSG_WARN([mib module error]) |
| AC_MSG_ERROR([mib module "$i" requires module "$j" but $j.h or $j.c could not be found in $srcdir/$mibdir]) |
| elif echo " $new_with_out_mib_modules " | $GREP " $j " > /dev/null; then |
| if test "x$i" != "xdefault_modules" ; then |
| mib_cfg_msg="mib module '$i' requires module '$j' but someone told me to compile without it" |
| AC_MSG_WARN([mib module error]) |
| if test "x$with_mib_cfg_checks" = "xyes"; then |
| AC_MSG_ERROR([$mib_cfg_msg]) |
| else |
| AC_MSG_WARN([$mib_cfg_msg]) |
| AC_MSG_CACHE_ADD([*** MIB Module warning *** $mib_cfg_msg]) |
| fi |
| # elif echo " $module_list $new_list_two $new_module_list " | $GREP " $j " > /dev/null; then |
| # AC_MSG_MODULE_DBG(" $j included previously") |
| fi |
| else |
| new_list_two="$new_list_two $j" |
| AC_MSG_MODULE_DBG(" $j included") |
| fi |
| done |
| fi |
| |
| #--------------------- |
| # macro: config_add_mib(SOME-MIB) |
| # - lists MIBs to be added to the default to-load list. |
| # |
| # check if $i has any mibs to add |
| # |
| AH_TOP([#define config_add_mib(x)]) |
| new_mibs=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_add_mib(\(.*\)).*/\1/p'` |
| if test "x$new_mibs" != "x"; then |
| for j in $new_mibs |
| do |
| if test "x`echo :$default_mibs: | $GREP :$j:`" = "x"; then |
| default_mibs="$default_mibs:$j" |
| fi |
| if test -f $srcdir/mibs/$j.txt; then |
| if echo $default_mibs_install | $GREP " $j " > /dev/null; then |
| : |
| else |
| default_mibs_install="$default_mibs_install $j.txt" |
| fi |
| fi |
| done |
| fi # new mibs |
| |
| #------------------- |
| # add the current module to the list of stuff to compile, etc. |
| # |
| # add $i to module list |
| # |
| AC_MSG_MODULE_DBG(" $i added (based on $i.h)") |
| module_list="$module_list $i" |
| eval ${module_type}_list="\"\$${module_type}_list $i\"" |
| |
| echo "read_config.lo: mibgroup/$i.h" >> $module_list_deps |
| if test $module_type = "agent_module" ; then |
| echo "snmp_vars.lo: mibgroup/$i.h" >> $agent_module_list_deps |
| else |
| echo "mib_modules.lo: mibgroup/$i.h" >> $mib_module_list_deps |
| fi |
| |
| #------------------- |
| # check for unsupported config_load_mib |
| # |
| if $MODULECPP module_tmp_header.h | $GREP -q config_load_mib; then |
| AC_MSG_WARN([mib module error]) |
| AC_MSG_WARN([mib module "$i" uses the "config_load_mib" directive, which is no longer supported. It probably won't work.]) |
| fi # grep config_load_mib |
| |
| #------------------- |
| # check for config_parse_dot_conf |
| # (generally not used any longer; old auto-load a .conf token) |
| # |
| AH_TOP([#define config_parse_dot_conf(w,x,y,z)]) |
| changequote(, ) |
| $MODULECPP module_tmp_header.h | \ |
| $SED -n 's@.*config_parse_dot_conf(\([^)]*\), *\([^),]*\), *\([^),]*\), *\([^),]*\)).*@register_config_handler("snmpd",\1, \2, \3, \4);@p' >> $mibdir/mib_module_dot_conf.h |
| changequote([, ]) |
| |
| #--------------------- |
| # macro: config_error(error text) |
| # - used to signal a configuration error from a module |
| # |
| # check if $i has any errors, or warnings |
| # |
| AH_TOP([#define config_error(x)]) |
| error=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_error(\(.*\)).*/\1/p'` |
| if test "x$error" != "x"; then |
| echo |
| echo |
| AC_MSG_ERROR([$i: *** $error ***]) |
| fi |
| |
| #--------------------- |
| # macro: config_warning(warning text) |
| # - used to signal a configuration "warning" to be printed to the user |
| # |
| AH_TOP([#define config_warning(x)]) |
| warning=`$MODULECPP module_tmp_header.h | \ |
| $SED -n 's/.*config_warning(\(.*\)).*/\1/p'` |
| if test "x$warning" != "x"; then |
| all_warnings="$all_warnings $warning |
| " |
| fi |
| |
| #--------------------- |
| # Check for a .c file if the .h didn't exist |
| # |
| elif test -f $srcdir/$mibdir/$i.c; then |
| if echo " $module_list $new_list_two $new_module_list " | $GREP " $i " > /dev/null; then |
| AC_MSG_MODULE_DBG(" $i already included") |
| else |
| AC_MSG_MODULE_DBG(" $i added (based on $i.c)") |
| module_list="$module_list $i" |
| mib_module_list="$mib_module_list $i" |
| fi |
| |
| #--------------------- |
| # No .h or .c = error! (typo?) |
| # |
| else # no $i.h or $i.c |
| AC_MSG_WARN([mib module error]) |
| AC_MSG_ERROR([module files $i.h or $i.c could not be found in $srcdir/$mibdir]) |
| fi # no $i.h |
| |
| #------------------- |
| # check for init/shutdown routines too |
| # |
| has_c_code=no |
| if test -f $srcdir/$mibdir/$i.c; then |
| if test "x$output_to" = "xnormal" ; then |
| echo " $i \\" >> $module_list_code |
| echo $ECHO_N " $i" $ECHO_C >> $MODULE_LIST |
| eval tmpfilevar=\$`echo ${module_type}_list_code` |
| echo " $i \\" >> $tmpfilevar |
| else |
| eval "dl_${dl_name}_files=\"\$dl_${dl_name}_files $i\"" |
| saved_sublist_code="$saved_sublist_code $i" |
| fi |
| mnm=`echo $i | $SED 's/.*\///;s/\.c$//;'` |
| AC_MSG_MODULE_DBG(-e "\nchecking '$srcdir/$mibdir/$i.c' ($mnm/`basename $i`) C file for init/shutdown") |
| if test "x$mnm" != "x`basename $i`"; then |
| AC_MSG_WARN([mib module error]) |
| AC_MSG_ERROR([conflicting names: $mnm != `basename $i`]) |
| fi |
| temp_init=`$GREP init_$mnm $srcdir/$mibdir/$i.c | $GREP -v _init_$mnm` |
| if test "x$temp_init" != "x"; then |
| AC_MSG_MODULE_DBG(-e "adding init_$mnm() to list") |
| need_header=1 |
| echo " if (should_init(\"$mnm\")) init_$mnm();" >> $output_inits |
| fi |
| $GREP shutdown_$mnm $srcdir/$mibdir/$i.c > /dev/null |
| if test $? -eq 0 ; then |
| if test $module_debug -eq 1; then |
| echo -e "\nadding shutdown_$mnm() to list" |
| fi |
| need_header=1 |
| echo " if (should_init(\"$mnm\")) shutdown_$mnm();" >> $mibdir/${module_type}_shutdown.h |
| fi |
| fi # test -f $srcdir/$mibdir/$i.c |
| |
| #------------------- |
| # if there is a shutdown/init list, |
| # |
| if test $need_header -eq 1 ; then |
| echo '#include "'"mibgroup/$i.h"'"' >> $output_hdrs |
| else |
| echo '/*#include "'"mibgroup/$i.h"'"*/' >> $output_hdrs |
| fi |
| |
| #------------------- |
| # check for output directory (for building outside of source tree |
| # |
| changequote(, ) |
| if test "x`echo $i | $SED 's/\///g;'`" != "x$i"; then |
| mnd=`echo $i | $SED 's/\/[^/]*$//;'` |
| if test ! -d ./$mibdir/$mnd; then |
| module_directories="$module_directories ./$mibdir/$mnd" |
| fi |
| fi # module directory test |
| changequote([, ]) |
| |
| #------------------- |
| # define USING_*_MODULE |
| # |
| changequote(, ) |
| sym="`echo ${i} | $SED 's/[^a-zA-Z0-9_]/_/g' | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`" |
| changequote([, ]) |
| echo "/* Define if compiling with the ${i} module files. */" >> include/net-snmp/agent/${module_type}_config.h |
| echo "#define USING_${sym}_MODULE 1" >> include/net-snmp/agent/${module_type}_config.h |
| echo " " >> include/net-snmp/agent/${module_type}_config.h |
| |
| #------------------- |
| echo $ECHO_N " $i$ECHO_C" |
| fi # |
| done # for i in $module_sublist |
| |
| if test "$output_to" = "separate" ; then |
| if test "x$new_list_two" = "x" ; then |
| # no new sub-modules to add to the current target |
| output_to="normal" |
| |
| dllcleans="$saved_sublist_o $dllcleans" |
| output_inits="" |
| module_sublist="" |
| else |
| # a module had sub-modules required; keep goin' |
| saved_sublist="$saved_sublist $module_sublist" |
| module_sublist="$new_list_two" |
| new_list_two="" |
| fi |
| else |
| module_sublist="" |
| fi |
| |
| done # while module_sublist |
| done # for j in $new_module_list |
| |
| # remember the top level modules for later reporting |
| if test $first_pass = 1 ; then |
| # remember this list for later reporting |
| top_level_modules="$new_module_list => $new_list_two" |
| first_pass=0 |
| fi |
| #------------------- |
| # if $i added new modules vis config_*, |
| # check those modules for requirements too |
| # |
| # transfer the new module to check list to the normal variable |
| # |
| if test "x$new_list_two" ; then |
| output_to=normal |
| fi |
| new_module_list="$new_list_two" |
| new_list_two="" |
| done # while test "x$new_module_list" != "x"; do |
| echo "" |
| |
| #-------------------- |
| # construct the dll code files and make rules. This can't be done |
| # until now because duplicate use of a module means it gets removed |
| # from the dll and put into the main agent. |
| # |
| for i in $dl_names ; do |
| eval mod_files="\"\$dl_${i}_files\"" |
| echo "components in the $i dll: $mod_files" |
| |
| output_inits="agent/mibgroup/${i}-dll.c" |
| output_hdrs="agent/mibgroup/${i}-hdrs.h" |
| |
| AC_MSG_MODULE_DBG("creating dll file: $output_inits") |
| for ofile in $output_inits $output_hdrs ; do |
| if test -f $ofile ; then |
| if $GREP "this file created automatically by configure" $ofile > /dev/null 2>&1 ; then |
| : |
| else |
| AC_MSG_ERROR([$ofile already existed ; can't build dll object $i]) |
| fi |
| fi |
| cat > $ofile << EOFIF |
| /* xDo not edit; this file created automatically by configure */ |
| EOFIF |
| done |
| |
| cat >> $output_inits << EOFOC |
| #include <net-snmp/net-snmp-config.h> |
| #include <net-snmp/net-snmp-includes.h> |
| #include <net-snmp/agent/net-snmp-agent-includes.h> |
| #include "${i}-hdrs.h" |
| void |
| init_$i(void) { |
| EOFOC |
| |
| # create the .so rule |
| saved_sublist_o=`echo "$mod_files " | $SED 's/^ *//g;s/ */.o /g;'` |
| |
| # create the rules for each object |
| for j in $mod_files ; do |
| cat >> $module_rules << EOFR |
| $j.o: $j.c |
| \$(CC) -c \$(CPPFLAGS) \$(CFLAGS) \$(DLFLAGS) -o \$@ \$< |
| |
| EOFR |
| mnm=`echo $j | $SED 's/.*\///;s/\.c$//;'` |
| echo " if (should_init(\"$mnm\")) init_$mnm();" >> $output_inits |
| done |
| |
| # create the rule for the .so and wrapper code |
| cat >> $module_rules << EOFM |
| ${i}-dll.o: ${i}-dll.c |
| \$(CC) -c \$(CPPFLAGS) \$(CFLAGS) \$(DLFLAGS) -o \$@ \$< |
| |
| ${i}.so: $saved_sublist_o ${i}-dll.o |
| \$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(DLFLAGS) -o \$@ $saved_sublist_o ${i}-dll.o |
| |
| EOFM |
| cat >> $output_inits << EOFOCFIN |
| } |
| EOFOCFIN |
| |
| done |
| |
| # cleanup |
| rm -f conftest.$ac_ext module_tmp_header.h |
| |
| #------------------- |
| # build module lists for Makefiles |
| # |
| changequote(, ) |
| |
| for i in module_list_o module_list_c module_list_lo module_list_ft mib_module_list_o mib_module_list_c mib_module_list_lo mib_module_list_ft mibgroup_list_o mibgroup_list_lo mibgroup_list_ft agent_module_list_o agent_module_list_c agent_module_list_lo agent_module_list_ft agentgroup_list_o agentgroup_list_lo agentgroup_list_ft ; do |
| eval "$i=mk/${i}.mk" |
| done |
| |
| $SED 's/^module_list_code/module_list_o/;s/\([^=]\) *\\/\1.o \\/g' < $module_list_code > $module_list_o |
| $SED 's/^module_list_code/module_list_c/;s/\([^=]\) *\\/\1.c \\/g' < $module_list_code > $module_list_c |
| $SED 's/^module_list_code/module_list_lo/;s/\([^=]\) *\\/\1.lo \\/g' < $module_list_code > $module_list_lo |
| $SED 's/^module_list_code/module_list_ft/;s/\([^=]\) *\\/\1.ft \\/g' < $module_list_code > $module_list_ft |
| |
| $SED 's/^mib_module_list_code/mib_module_list_o/;s/\([^=]\) *\\/\1.o \\/g' < $mib_module_list_code > $mib_module_list_o |
| $SED 's/^mib_module_list_code/mib_module_list_c/;s/\([^=]\) *\\/\1.c \\/g' < $mib_module_list_code > $mib_module_list_c |
| $SED 's/^mib_module_list_code/mib_module_list_lo/;s/\([^=]\) *\\/\1.lo \\/g' < $mib_module_list_code > $mib_module_list_lo |
| $SED 's/^mib_module_list_code/mib_module_list_ft/;s/\([^=]\) *\\/\1.ft \\/g' < $mib_module_list_code > $mib_module_list_ft |
| |
| $SED 's/^mib_module_list_o/mibgroup_list_o/;s@\([^ ]*\)\.o@mibgroup/\1.o@g' < $mib_module_list_o > $mibgroup_list_o |
| $SED 's/^mib_module_list_lo/mibgroup_list_lo/;s@\([^ ]*\)\.lo@mibgroup/\1.lo@g' < $mib_module_list_lo > $mibgroup_list_lo |
| $SED 's/^mib_module_list_ft/mibgroup_list_ft/;s@\([^ ]*\)\.ft@mibgroup/\1.ft@g' < $mib_module_list_ft > $mibgroup_list_ft |
| |
| $SED 's/^agent_module_list_code/agent_module_list_o/;s/\([^=]\) *\\/\1.o \\/g' < $agent_module_list_code > $agent_module_list_o |
| $SED 's/^agent_module_list_code/agent_module_list_c/;s/\([^=]\) *\\/\1.c \\/g' < $agent_module_list_code > $agent_module_list_c |
| $SED 's/^agent_module_list_code/agent_module_list_lo/;s/\([^=]\) *\\/\1.lo \\/g' < $agent_module_list_code > $agent_module_list_lo |
| $SED 's/^agent_module_list_code/agent_module_list_ft/;s/\([^=]\) *\\/\1.ft \\/g' < $agent_module_list_code > $agent_module_list_ft |
| |
| $SED 's/^agent_module_list_o/agentgroup_list_o/;s@\([^ ]*\)\.o@mibgroup/\1.o@g' < $agent_module_list_o > $agentgroup_list_o |
| $SED 's/^agent_module_list_lo/agentgroup_list_lo/;s@\([^ ]*\)\.lo@mibgroup/\1.lo@g' < $agent_module_list_lo > $agentgroup_list_lo |
| $SED 's/^agent_module_list_ft/agentgroup_list_ft/;s@\([^ ]*\)\.ft@mibgroup/\1.ft@g' < $agent_module_list_ft > $agentgroup_list_ft |
| |
| for i in module_list_o module_list_c module_list_lo module_list_ft mib_module_list_o mib_module_list_c mib_module_list_lo mib_module_list_ft mibgroup_list_o mibgroup_list_lo mibgroup_list_ft agent_module_list_o agent_module_list_c agent_module_list_lo agent_module_list_ft agentgroup_list_o agentgroup_list_lo agentgroup_list_ft ; do |
| # hpux make (at least) doesn't like a trailing \ on the last |
| # line even when the next line contains nothing but |
| # whitespace. |
| lasttoken=`awk '{lasttoken=$1}END{print lasttoken}' mk/$i.mk` |
| $SED "s#$lasttoken \\\\#$lasttoken#" < mk/$i.mk > mk/$i.mk.tmp |
| mv mk/$i.mk.tmp mk/$i.mk |
| |
| # add a closing comment |
| echo "" >> mk/$i.mk |
| echo "# end configure generated code" >> mk/$i.mk |
| done |
| |
| changequote([, ]) |
| |
| if test $module_debug -eq 1; then |
| echo -e "\nFinal module list: $module_list_code" |
| exit |
| fi |
| if test "x$with_mib_cfg_checks" = "xyes"; then |
| AC_MSG_CACHE_ADD([Agent Module list: $module_list_code]) |
| fi |
| AC_SUBST_FILE(MODULE_LIST) |
| AC_SUBST_FILE(module_list_c) |
| AC_SUBST_FILE(module_list_o) |
| AC_SUBST_FILE(module_list_lo) |
| AC_SUBST_FILE(module_list_ft) |
| AC_SUBST_FILE(mib_module_list_c) |
| AC_SUBST_FILE(mib_module_list_o) |
| AC_SUBST_FILE(mib_module_list_lo) |
| AC_SUBST_FILE(mib_module_list_ft) |
| AC_SUBST_FILE(agent_module_list_c) |
| AC_SUBST_FILE(agent_module_list_o) |
| AC_SUBST_FILE(agent_module_list_lo) |
| AC_SUBST_FILE(agent_module_list_ft) |
| AC_SUBST_FILE(mibgroup_list_o) |
| AC_SUBST_FILE(mibgroup_list_lo) |
| AC_SUBST_FILE(mibgroup_list_ft) |
| AC_SUBST_FILE(agentgroup_list_o) |
| AC_SUBST_FILE(agentgroup_list_lo) |
| AC_SUBST_FILE(agentgroup_list_ft) |
| |
| AC_SUBST(default_mibs_install) |
| AC_SUBST(dllcleans) |
| AC_SUBST_FILE(module_rules) |
| AC_SUBST_FILE(module_list_deps) |
| AC_SUBST_FILE(mib_module_list_deps) |
| AC_SUBST_FILE(agent_module_list_deps) |
| |
| AC_MSG_RESULT(.) |
| |
| if test $module_debug -eq 1; then |
| AC_MSG_CACHE_ADD(Agent MIB code: $module_list) |
| fi |
| AC_MSG_CACHE_ADD(Agent MIB code: $top_level_modules) |
| |
| # end hairy agent module processing |
| |
| AC_MSG_CHECKING([if directories need to be created]) |
| for i in $module_directories; do |
| $srcdir/mkinstalldirs $i |
| done |
| AC_MSG_RESULT(.) |
| |
| #------------------- |
| # Define default mibs |
| # |
| AC_MSG_CHECKING([default mib files to read]) |
| if test "x$NETSNMP_DEFAULT_MIBS" = "x"; then |
| NETSNMP_DEFAULT_MIBS="$default_mibs" |
| fi |
| if test "x$ENV_SEPARATOR" != "x"; then |
| : |
| elif test "x$PARTIALTARGETOS" = "xmingw32" -o "x$PARTIALTARGETOS" = "xmingw32msvc" -o "x$PARTIALTARGETOS" = "xcygwin"; then |
| # mingw32 and cygwin use ';' as the default environment variable separator |
| ENV_SEPARATOR=";" |
| NETSNMP_DEFAULT_MIBS=`echo "$NETSNMP_DEFAULT_MIBS" | $SED 's/:/;/g'` |
| default_mibs=`echo "$default_mibs" | $SED 's/:/;/g'` |
| else |
| ENV_SEPARATOR=":" |
| fi |
| AC_SUBST(ENV_SEPARATOR) |
| AC_DEFINE_UNQUOTED([ENV_SEPARATOR], ["$ENV_SEPARATOR"], |
| [Environment separator character surrounded by double quotes.]) |
| AC_DEFINE_UNQUOTED([ENV_SEPARATOR_CHAR], ['$ENV_SEPARATOR'], |
| [Environment separator character surrounded by single quotes.]) |
| AC_DEFINE_UNQUOTED(NETSNMP_DEFAULT_MIBS,"$NETSNMP_DEFAULT_MIBS") |
| AC_SUBST(NETSNMP_DEFAULT_MIBS) |
| AC_MSG_RESULT($NETSNMP_DEFAULT_MIBS) |
| |
| #------------------- |
| # Define symbols for conditional compilation in makefiles |
| # |
| |
| if echo " $agent_module_list " | \ |
| fgrep ' agentx/agentx_config ' | \ |
| fgrep ' agentx/client ' | \ |
| fgrep ' agentx/protocol ' > /dev/null ; then |
| NETSNMP_HAVE_AGENTX_LIBS_TRUE='' |
| NETSNMP_HAVE_AGENTX_LIBS_FALSE='#' |
| else |
| NETSNMP_HAVE_AGENTX_LIBS_TRUE='#' |
| NETSNMP_HAVE_AGENTX_LIBS_FALSE='' |
| fi |
| AC_SUBST([NETSNMP_HAVE_AGENTX_LIBS_TRUE]) |
| AC_SUBST([NETSNMP_HAVE_AGENTX_LIBS_FALSE]) |