- #!/bin/sh
- #
- # $Id: net-snmp-config.in,v 5.32.2.7 2005/10/12 21:39:02 tanders Exp $
- #
- # this shell script is designed to merely dump the configuration
- # information about how the net-snmp package was compiled. The
- # information is particularily useful for applications that need to
- # link against the net-snmp libraries and hence must know about any
- # other libraries that must be linked in as well.
- check_build_dir()
- {
- build_dir=$1
- if test "x$build_dir" = "x" ; then
- echo "You must specify a build directory."
- exit 1
- fi
- # is it the src dir?
- if test -f $build_dir/net-snmp-config.in ; then
- return
- fi
- # make sure we can find build dir
- if ! test -d $build_dir/snmplib/.libs ; then
- echo "$build_dir does not appear to be a build directory."
- exit 1
- fi
- }
- prefix=@prefix@
- exec_prefix=@exec_prefix@
- includedir=@includedir@
- libdir=@libdir@
- NSC_LDFLAGS="@LDFLAGS@"
- NSC_INCLUDEDIR=${includedir}
- NSC_LIBDIR=-L${libdir}
- NSC_LIBS="@LIBS@ @WRAPLIBS@"
- NSC_AGENTLIBS="@AGENTLIBS@ @WRAPLIBS@ @PERLLDOPTS@"
- NSC_PREFIX=$prefix
- NSC_EXEC_PREFIX=$exec_prefix
- NSC_SRCDIR=@srcdir@
- NSC_INCDIR=${NSC_PREFIX}/include
- NSC_BASE_SUBAGENT_LIBS="-lnetsnmpagent -lnetsnmphelpers -lnetsnmp"
- NSC_BASE_AGENT_LIBS="-lnetsnmpmibs -lnetsnmpagent -lnetsnmphelpers -lnetsnmp"
- NSC_SRC_LIBDIRS="agent/.libs snmplib/.libs agent/helpers/.libs"
- NSC_SRC_LIBDEPS="agent/.libs/libnetsnmpmibs.a agent/.libs/libnetsnmpagent.a agent/helpers/.libs/libnetsnmphelpers.a snmplib/.libs/libnetsnmp.a"
- if test "x$NSC_SRCDIR" = "x." ; then
- NSC_SRCDIR="NET-SNMP-SOURCE-DIR"
- fi
- if test "x$1" = "x"; then
- usage="yes"
- else
- while test "x$done" = "x" -a "x$1" != "x" -a "x$usage" != "xyes"; do
- case "$1" in
- -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) optarg= ;;
- esac
- case $1 in
- --prefix=*)
- prefix=$optarg
- NSC_PREFIX=${prefix}
- NSC_INCLUDEDIR=${prefix}/include
- NSC_LIBDIR=-L${prefix}/lib
- ;;
- --exec-prefix=*)
- exec_prefix=$optarg
- NSC_EXEC_PREFIX=${exec_prefix}
- NSC_LIBDIR=-L${exec_prefix}/lib
- ;;
- --debug-tokens|--deb*|--dbg*)
- echo "find $NSC_SRCDIR -name "*.c" -print | xargs grep DEBUGMSGT | grep \" | cut -f 2 -d\" | sort -u"
- if test "x$NSC_SRCDIR" != "xNET-SNMP-SOURCE-DIR" ; then
- /usr/bin/find $NSC_SRCDIR -name "*.c" -print | xargs grep DEBUGMSGT | grep " | cut -f 2 -d" | sort -u
- fi
- ;;
- --indent-options|--in*)
- echo "indent -orig -nbc -bap -nut -nfca `(cd $NSC_INCDIR/net-snmp; perl -n -e 'print "-T $1 " if (/}s*(netsnmp_w+)s*;/);' */*.h)`"
- ;;
- --configure-options|--con*)
- echo @CONFIGURE_OPTIONS@
- ;;
- --snmpd-module-list|--mod*)
- echo @MODULE_LIST@
- ;;
- --default-mibs|--mibs|--MIBS)
- echo @DEFAULT_MIBS@
- ;;
- --default-mibdirs|--mibdirs|--MIBDIRS)
- echo @DEFAULT_MIBDIRS@
- ;;
- --snmpconfpath|--SNMPCONFPATH)
- echo "@SNMPCONFPATH@@ENV_SEPARATOR@@SNMPSHAREPATH@@ENV_SEPARATOR@@SNMPLIBPATH@@ENV_SEPARATOR@$HOME/.snmp@ENV_SEPARATOR@@PERSISTENT_DIRECTORY@"
- ;;
- --persistent-directory|--persistent-dir)
- echo @PERSISTENT_DIRECTORY@
- ;;
- #################################################### compile
- --base-cflags)
- echo @CFLAGS@ @CPPFLAGS@ -I${NSC_INCLUDEDIR}
- ;;
- --cflags|--cf*)
- echo @CFLAGS@ @DEVFLAGS@ @CPPFLAGS@ -I. -I${NSC_INCLUDEDIR}
- ;;
- --srcdir)
- echo $NSC_SRCDIR
- ;;
- #################################################### linking
- --libdir|--lib-dir)
- echo $NSC_LIBDIR
- ;;
- --ldflags|--ld*)
- echo $NSC_LDFLAGS
- ;;
- --build-lib-dirs)
- shift
- build_dir=$1
- check_build_dir $build_dir
- for dir in $NSC_SRC_LIBDIRS; do
- result="$result -L$build_dir/$dir"
- done
- echo $result
- ;;
- --build-lib-deps)
- shift
- build_dir=$1
- check_build_dir $build_dir
- for dir in $NSC_SRC_LIBDEPS; do
- result="$result $build_dir/$dir"
- done
- echo $result
- ;;
- --build-includes)
- shift
- build_dir=$1
- check_build_dir $build_dir
- result="-I$build_dir/include"
- if test "$build_dir" != "$NSC_SRCDIR" -a "$NSC_SRCDIR" != "NET-SNMP-SOURCE-DIR"
- then
- result="$result -I$NSC_SRCDIR/include"
- fi
- echo $result
- ;;
- #################################################### client lib
- --libs)
- # use this one == --netsnmp-libs + --external-libs
- echo $NSC_LDFLAGS $NSC_LIBDIR -lnetsnmp $NSC_LIBS
- ;;
- --netsnmp-libs)
- echo $NSC_LIBDIR -lnetsnmp
- ;;
- --external-libs)
- echo $NSC_LDFLAGS $NSC_LIBS
- ;;
- #################################################### agent lib
- --base-agent-libs)
- echo $NSC_BASE_AGENT_LIBS
- ;;
- --base-subagent-libs)
- echo $NSC_BASE_SUBAGENT_LIBS
- ;;
- --agent-libs)
- # use this one == --netsnmp-agent-libs + --external-libs
- echo $NSC_LDFLAGS $NSC_LIBDIR $NSC_BASE_AGENT_LIBS $NSC_AGENTLIBS
- ;;
- --netsnmp-agent-libs)
- echo $NSC_LIBDIR $NSC_BASE_AGENT_LIBS
- ;;
- --external-agent-libs)
- echo $NSC_LDFLAGS $NSC_AGENTLIBS
- ;;
- ####################################################
- --version|--ver*)
- echo @VERSION@
- ;;
- --help)
- usage="yes"
- ;;
- --prefix|--pre*)
- echo $NSC_PREFIX
- ;;
- --exec-prefix)
- echo $NSC_EXEC_PREFIX
- ;;
- ####################################################
- --create-snmpv3-user)
- if @PSCMD@ | egrep ' snmpd *$' > /dev/null 2>&1 ; then
- echo "Apparently at least one snmpd demon is already running."
- echo "You must stop them in order to use this command."
- exit 1
- fi
- Aalgorithm="MD5"
- Xalgorithm="DES"
- token=rwuser
- shift
- while test "x$done" = "x" -a "x$1" != "x" ; do
- case $1 in
- -A)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify an authentication algorithm"
- exit 1
- fi
- Aalgorithm=$1
- shift
- ;;
- -X)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify an encryption algorithm"
- exit 1
- fi
- Xalgorithm=$1
- shift
- ;;
- -a)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify an authentication pass phrase"
- exit 1
- fi
- apassphrase=$1
- shift
- ;;
- -x)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify an encryption pass phrase"
- exit 1
- fi
- xpassphrase=$1
- shift
- ;;
- -ro)
- token="rouser"
- shift
- ;;
- -*)
- echo "unknown suboption to --create-snmpv3-user: $1"
- exit 1
- ;;
- *)
- done=1
- ;;
- esac
- done
- if test "x$1" = "x" ; then
- prompt=yes
- echo "Enter a SNMPv3 user name to create: "
- read user
- else
- user=$1
- shift
- fi
- if test "x$user" = "x" ; then
- echo "You must specify a user name"
- exit 1
- fi
- if test "x$apassphrase" = "x" ; then
- prompt=yes
- echo "Enter authentication pass-phrase: "
- read apassphrase
- fi
- if test "x$apassphrase" = "x" ; then
- echo "You must specify an authentication pass-phrase"
- exit 1
- fi
- if test "x$prompt" = "xyes" -a "x$xpassphrase" = "x" ; then
- echo "Enter encryption pass-phrase: "
- echo " [press return to reuse the authentication pass-phrase]"
- read xpassphrase
- fi
- outdir="@PERSISTENT_DIRECTORY@"
- outfile="$outdir/snmpd.conf"
- line="createUser $user $Aalgorithm "$apassphrase" $Xalgorithm $xpassphrase"
- echo "adding the following line to $outfile:"
- echo " " $line
- # in case it hasn't ever been started yet, start it.
- if ! test -d $outdir ; then
- mkdir $outdir
- fi
- if ! test -d $outfile ; then
- touch $outfile
- fi
- echo $line >> $outfile
- outfile="@datadir@/snmp/snmpd.conf"
- line="$token $user"
- echo "adding the following line to $outfile:"
- echo " " $line
- if ! test -d $outfile ; then
- touch $outfile
- fi
- echo $line >> $outfile
- ;;
- ####################################################
- --compile-subagent)
- shift
- while test "x$done" = "x" -a "x$1" != "x" ; do
- case $1 in
- --norm)
- norm=1
- shift
- ;;
- --cflags)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify the extra cflags"
- exit 1
- fi
- cflags=$1
- echo "setting extra cflags: $cflags"
- shift
- ;;
- --ldflags)
- shift
- if test "x$1" = "x" ; then
- echo "You must specify the extra ldflags"
- exit 1
- fi
- ldflags=$1
- echo "setting extra ldflags: $ldflags"
- shift
- ;;
- --*)
- echo "unknown suboption to --compile-subagent: $1"
- exit 1
- ;;
- *)
- if test "x$outname" = "x"; then
- outname=$1
- shift
- else
- done=1
- fi
- ;;
- esac
- done
- tmpfile=netsnmptmp.$$.c
- if test -f $tmpfile; then
- echo "Ack. Can't create $tmpfile: already exists"
- exit 1
- fi
- echo "generating the tmporary code file: $tmpfile"
- rm -f $tmpfile
- cat > $tmpfile <<EOF
- /* generated from net-snmp-config */
- #include <net-snmp/net-snmp-config.h>
- #ifdef HAVE_SIGNAL_H
- #include <signal.h>
- #endif /* HAVE_SIGNAL_H */
- #include <net-snmp/net-snmp-includes.h>
- #include <net-snmp/agent/net-snmp-agent-includes.h>
- EOF
- # If we were only given a single filename
- # (and no explicit output name)
- # then use that as the base of the output name
- #
- # If we weren't even given that, then bomb out
- if test "x$1" = "x"; then
- if test "x$outname" = "x"; then
- echo "No MIB module codefile specified"
- rm -f $tmpfile
- exit 1
- else
- cfiles=$outname
- outname=`basename $cfiles | sed 's/.[co]$//'`
- if test -f $outname.h; then
- if grep "init_$outname" $outname.h; then
- echo " #include "$outname.h"" >> $tmpfile
- fi
- fi
- fi
- fi
- # add include files
- while test "$1" != ""; do
- cfiles="$cfiles $1"
- name=`basename $1 | sed 's/.[co]$//'`
- if test -f $name.h; then
- if grep "init_$name" $name.h; then
- echo " #include "$name.h"" >> $tmpfile
- fi
- fi
- shift
- done
- cat >> $tmpfile <<EOF
- static int keep_running;
- RETSIGTYPE
- stop_server(int a) {
- keep_running = 0;
- }
- int
- main (int argc, char **argv) {
- /* print log errors to stderr */
- snmp_enable_stderrlog();
- /* we are a subagent */
- netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
- /* initialize tcpip, if necessary */
- SOCK_STARTUP;
- /* initialize the agent library */
- init_agent("$outname");
- /* initialize your mib code here */
- EOF
- # add init routines
- for i in $cfiles ; do
- name=`basename $i | sed 's/.[co]$//'`
- echo checking for init_$name in $i
- if grep "init_$name" $i ; then
- echo " init_${name}();" >> $tmpfile
- fi
- shift
- done
- # finish file
- cat >> $tmpfile <<EOF
- /* ustMain will be used to read ustMain.conf files. */
- init_snmp("$outname");
- /* In case we recevie a request to stop (kill -TERM or kill -INT) */
- keep_running = 1;
- #ifdef SIGTERM
- signal(SIGTERM, stop_server);
- #endif
- #ifdef SIGINT
- signal(SIGINT, stop_server);
- #endif
- /* main loop here... */
- while(keep_running) {
- agent_check_and_process(1);
- }
- /* at shutdown time */
- snmp_shutdown("$outname");
- SOCK_CLEANUP;
- exit(0);
- }
- EOF
- if test "$?" != 0 -o ! -f "$tmpfile" ; then
- echo "Ack. Can't create $tmpfile."
- exit 1
- fi
- cmd="@CC@ $cflags @CFLAGS@ @DEVFLAGS@ -I. -I${NSC_INCLUDEDIR} -o $outname $tmpfile $cfiles $NSC_LDFLAGS $NSC_LIBDIR $NSC_BASE_AGENT_LIBS $NSC_AGENTLIBS $ldflags"
- echo "running: $cmd"
- `$cmd`
- if test "x$norm" != "x1" ; then
- echo "removing the tmporary code file: $tmpfile"
- rm -f $tmpfile
- else
- echo "leaving the tmporary code file: $tmpfile"
- fi
- if test -f $outname ; then
- echo "subagent program $outname created"
- fi
- ;;
- *)
- echo "unknown option $1"
- usage="yes"
- ;;
- esac
- shift
- done
- fi
- if test "x$usage" = "xyes"; then
- echo ""
- echo "Usage:"
- echo " net-snmp-config [--cflags] [--agent-libs] [--libs] [--version]"
- echo " ... [see below for complete flag list]"
- echo ""
- echo " --version displays the net-snmp version number"
- echo " --indent-options displays the indent options from the Coding Style"
- echo " --debug-tokens displays a example command line to search to source"
- echo " code for a list of available debug tokens"
- echo ""
- echo " SNMP Setup commands:"
- echo ""
- echo " --create-snmpv3-user [-ro] [-a authpass] [-x privpass] [-X DES]"
- echo " [-A MD5|SHA] [username]"
- echo ""
- echo " These options produce the various compilation flags needed when"
- echo " building external SNMP applications:"
- echo ""
- echo " --base-cflags lists additional compilation flags needed"
- echo " --cflags lists additional compilation flags needed"
- echo " (includes -I. and extra developer warning flags)"
- echo ""
- echo " These options produce the various link flags needed when"
- echo " building external SNMP applications:"
- echo ""
- echo " --libs lists libraries needed for building applications"
- echo " --agent-libs lists libraries needed for building subagents"
- echo ""
- echo " These options produce various link flags broken down into parts."
- echo " (Most of the time the simple options above should be used.)"
- echo ""
- echo " --libdir path to netsnmp libraries"
- echo ""
- echo " --base-agent-libs netsnmp specific agent libraries"
- echo ""
- echo " --netsnmp-libs netsnmp specific libraries (with path)"
- echo " --netsnmp-agent-libs netsnmp specific agent libraries (with path)"
- echo ""
- echo " --ldflags link flags for external libraries"
- echo " --external-libs external libraries needed by netsnmp libs"
- echo " --external-agent-libs external libraries needed by netsnmp agent libs"
- echo ""
- echo " These options produce various link flags used when linking an"
- echo " external application against an uninstalled build directory."
- echo ""
- echo " --build-includes include path to build/source includes"
- echo " --build-lib-dirs link path to libraries"
- echo " --build-lib-deps path to libraries for dependency target"
- echo ""
- echo " Automatted subagent building (produces an OUTPUTNAME binary file):"
- echo " [this feature has not been tested very well yet. use at your risk.]"
- echo ""
- echo " --compile-subagent OUTPUTNAME [--norm] [--cflags flags]"
- echo " [--ldflags flags] mibmodule1.c [...]]"
- echo ""
- echo " --norm leave the generated .c file around to read."
- echo " --cflags flags extra cflags to use (e.g. -I...)."
- echo " --ldflags flags extra ld flags to use (e.g. -L... -l...)."
- echo ""
- echo " Details on how the net-snmp package was compiled:"
- echo ""
- echo " --configure-options display original configure arguments"
- echo " --prefix display the installation prefix"
- echo " --snmpd-module-list display the modules compiled into the agent"
- echo " --default-mibs display default list of MIBs"
- echo " --default-mibdirs display default list of MIB directories"
- echo " --snmpconfpath display default SNMPCONFPATH"
- echo " --persistent-directory display default persistent directory"
- echo ""
- exit
- fi