dnl Process this file with autoconf to produce a configure script.
AC_INIT(agent/extensible/extensible.c)
AC_CONFIG_HEADER(config.h)

AC_ARG_ENABLE(debugging,[  --enable-debugging      Outputs extra debugging information.],AC_DEFINE(DODEBUG))
AC_ARG_WITH(defaults,[  --with-defaults         Use defaults for prompted values.],defaults="yes",defaults="no")
AC_ARG_WITH(root-access,[  --without-root-access   The agent does not exit if it can not open /dev/kmem.])

dnl Only define if specifically chosen as --without (ie, default to true). 
if test "x$with_root_access" = "xno"; then
  AC_DEFINE(NO_ROOT_ACCESS)
fi

dnl Checks for programs.
AC_CHECK_PROGS(CC,cc gcc c89 shlicc2,cc)
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PATH_PROG(PSPROG,ps)
AC_PATH_PROG(UNAMEPROG,uname)
AC_DEFINE_UNQUOTED(UNAMEPROG,"$UNAMEPROG")
AC_CHECK_PROGS(SED,sed gsed)

AC_AIX

dnl system check
AC_CANONICAL_SYSTEM
changequote(, )
CFLAGS="$CFLAGS -D`echo $target_os | sed 's/[-._].*//'`"
changequote([, ])

AC_MSG_CHECKING(for additional cpp flags)
dnl gcc extra CPPFLAGS
if test "x$GCC" = "xyes" -a "x$CPP" = "x$CC -E"; then
  dnl extra cpp flags for gnu c compiler to allow .in file extensions.
  EXTRACPPFLAGS="-x c"
else
  EXTRACPPFLAGS=""
fi
dnl Solaris extra cpp flags.
if test "x$GCC" != "xyes"; then
  case $target_os in
    solaris*) EXTRACPPFLAGS="$EXTRACPPFLAGS -Xs" ;;
  esac
fi

AC_SUBST(EXTRACPPFLAGS,$EXTRACPPFLAGS)
AC_MSG_RESULT($EXTRACPPFLAGS)

dnl Set SNMPLIBPATH
if test "x$prefix" = "xNONE"; then
AC_DEFINE_UNQUOTED(SNMPLIBPATH,"$ac_default_prefix/lib/snmp")
else
AC_DEFINE_UNQUOTED(SNMPLIBPATH,"$prefix/lib/snmp")
fi

dnl
dnl Check for kernel location
dnl

AC_CACHE_CHECK(for location of sytem kernel,ac_cv_KERNEL_LOC,
[ac_cv_KERNEL_LOC="unknown"
for i in /vmunix /hp-ux /stand/vmunix /kernel/unix /dev/ksyms /kernel/genunix /netbsd /unix /kernel /bsd
  do
  if test -f $i; then
    ac_cv_KERNEL_LOC="$i"
    break;
  fi
done
if test $i = "unknown"; then
  AC_MSG_WARN(Can't find system kernel...  Setting to /vmunix)
  ac_cv_KERNEL_LOC="/vmunix"
fi
])

AC_DEFINE_UNQUOTED(KERNEL_LOC,"$ac_cv_KERNEL_LOC")

dnl
dnl Check for mount table location
dnl

AC_CACHE_CHECK(for mount table location,ac_cv_ETC_MNTTAB,
[ac_cv_ETC_MNTTAB="unknown"
for i in /etc/mnttab /etc/mtab
  do
  if test -f $i; then
    ac_cv_ETC_MNTTAB="$i"
    break;
  fi
done
])

AC_DEFINE_UNQUOTED(ETC_MNTTAB,"$ac_cv_ETC_MNTTAB")

dnl Check for /dev/dmem or /dev/drum location
AC_CACHE_CHECK(for location of swap device,ac_cv_DMEM_LOC,
[
dnl First determine if test expects a -f or a -c (character device (SYSV))

if test -f /dev/kmem; then
  CTEST="test -f"
elif test -c /dev/kmem; then
  CTEST="test -c"
else
  dnl fall back
  CTEST="test -f"
fi

if $CTEST /dev/dmem; then
  ac_cv_DMEM_LOC="/dev/dmem"
elif $CTEST /dev/drum; then
  ac_cv_DMEM_LOC="/dev/drum"
else
  ac_cv_DMEM_LOC="none"
fi
])

if test "x$ac_cv_DMEM_LOC" != "xnone"; then
  AC_DEFINE_UNQUOTED(DMEM_LOC,"$ac_cv_DMEM_LOC")
fi

dnl Checks for libraries.
dnl AC_CHECK_LIB(des, main)
AC_CHECK_LIB(elf, nlist)
AC_CHECK_LIB(m, asin)
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, getservbyname)
dnl AC_CHECK_LIB(ucb, bzero)

dnl Replace `main' with a function in -ltcl:
dnl AC_CHECK_LIB(tcl, main)
dnl Replace `main' with a function in -ltk:
dnl AC_CHECK_LIB(tk, main)
dnl Replace `main' with a function in -lkstat:
AC_CHECK_LIB(kstat, kstat_lookup)
dnl Replace `main' with a function in -lkvm:
AC_CHECK_LIB(kvm, kvm_read)
dnl Check for nlist in mld (irix)
AC_CHECK_LIB(mld, nlist)

dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_DIRENT
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(strings.h fcntl.h limits.h sys/file.h sys/ioctl.h syslog.h unistd.h netinet/tcpip.h netinet/in.h sys/dmap.h machine/pte.h xti.h sys/sockio.h fstab.h sys/fs.h mtab.h ufs/fs.h ufs/ffs/fs.h sys/fixpoint.h machine/param.h sys/vm.h vm/vm.h sys/vmmeter.h sys/vmparam.h sys/vmmac.h sys/vmsystm.h sys/mbuf.h sys/time.h sys/swap.h inet/mib2.h sys/statvfs.h sys/vfs.h sys/mnttab.h sys/user.h sys/proc.h sys/select.h mntent.h)
dnl FreeBSD required headers
AC_CHECK_HEADERS(malloc.h sys/param.h net/if_dl.h sys/sysctl.h stdlib.h net/if_types.h)
dnl Linux (lame) doesn't have these
AC_CHECK_HEADERS(sys/conf.h netinet/in_var.h netinet/in_pcb.h netinet/if_ether.h netinet/ip_var.h netinet/tcp_timer.h netinet/tcp_var.h netinet/tcp_fsm.h netinet/udp_var.h netinet/icmp_var.h sys/protosw.h)
dnl NetBSD required headers
AC_CHECK_HEADERS(arpa/inet.h kvm.h)
dnl BSDi2 headers
AC_CHECK_HEADERS(sys/mount.h vm/swap_pager.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_HEADER_TIME

dnl Check ps args
AC_CACHE_CHECK(for correct flags to ps, ac_cv_ps_flags,
[if test "`($PSPROG -e 2>&1) | egrep ' ps$' | awk '{print $NF}'`" = "ps" ; then
  ac_cv_ps_flags="-e"
elif test "`($PSPROG -el 2>&1) | egrep ' ps$' | awk '{print $NF}''`" = "ps" ; then
  ac_cv_ps_flags="-el"
elif test "`($PSPROG -acx 2>&1) | egrep ' ps$' | awk '{print $NF}''`" = "ps" ; then
  ac_cv_ps_flags="-acx"
else
  AC_MSG_WARN(Unable to determine valid ps flags...  defaulting...)
  ac_cv_ps_flags="-acx"
fi
])

AC_DEFINE_UNQUOTED(PSCMD, "$PSPROG $ac_cv_ps_flags")

dnl Checks for byte order
AC_C_BIGENDIAN

dnl Checks for library functions.
AC_FUNC_ALLOCA
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MEMCMP
AC_TYPE_SIGNAL
AC_FUNC_GETMNTENT
AC_CHECK_FUNCS(setmntent gethostname gettimeofday select socket strtol)
AC_CHECK_FUNCS(strchr memcpy memmove index bcopy signal sigset sigblock sighold)
AC_CHECK_FUNCS(random lrand48 rand)
AC_CHECK_FUNCS(getloadavg)
AC_CHECK_FUNCS(kvm_openfiles)
dnl BSDi2 functions differ
AC_CHECK_FUNCS(statvfs statfs)

dnl check if compiler accepts void pointers
AC_CACHE_CHECK(if $CC allows pointers to void,ac_cv_PTR_TO_VOID,
[
AC_TRY_COMPILE([
void generic_function(a)
  void *a;
{
}
],[
char *cp;
generic_function((void *) cp);
], ac_cv_PTR_TO_VOID=yes, ac_cv_PTR_TO_VOID=no)])

if test "x$ac_cv_PTR_TO_VOID" = "xno"; then
  AC_DEFINE(void,char)
fi

dnl checking for 4.3 vs 4.4 rtentry.
AC_CACHE_CHECK(type of rtentry structure,ac_cv_RTENTRY_TYPE,
[

dnl 4.4 compat
AC_TRY_COMPILE([
#include <sys/types.h>
#define KERNEL
#define _KERNEL
#include <sys/socket.h>
#undef KERNEL
#undef _KERNEL
#include <net/route.h>
],[
  struct rtentry rt; 
  rt.rt_nodes[0].rn_b = 1;
  ], ac_cv_RTENTRY_TYPE="BSD-4.4")

dnl 4.3 compat
if test "x$ac_cv_RTENTRY_TYPE" = "x"; then
AC_TRY_COMPILE([
#include <sys/types.h>
#define KERNEL
#define _KERNEL
#include <sys/socket.h>
#undef KERNEL
#undef _KERNEL
#include <net/route.h>
],[
struct rtentry rt; 
rt.rt_hash;
], ac_cv_RTENTRY_TYPE="BSD-4.3")
fi

dnl else ack.
if test "x$ac_cv_RTENTRY_TYPE" = "x"; then
  AC_MSG_WARN(Unknown)
  ac_cv_RTENTRY_TYPE="unknown"
fi

])

if test "x$ac_cv_RTENTRY_TYPE" = "xBSD-4.4"; then
  AC_DEFINE(RTENTRY_4_4)
fi

dnl checking for alpha's ortentry vs rtentry
if test "x$ac_cv_RTENTRY_TYPE" = "xunknown"; then
AC_CACHE_CHECK(for struct rtentry, ac_cv_struct_rtentry,
[AC_EGREP_CPP(ortentry, [#define KERNEL
#include<net/route.h>
],  ac_cv_struct_rtentry=ortentry,  ac_cv_struct_rtentry=rtentry )
if test "x$ac_cv_struct_rtentry" = "xrtentry" ; then
  AC_DEFINE(RTENTRY,struct rtentry)
else
  AC_DEFINE(RTENTRY,struct ortentry)
fi
])
else
  RTENTRY_TYPE="rtentry"
  AC_DEFINE(RTENTRY,struct rtentry)
fi

dnl check for 4.3's rtentry->rt_next
if test "x$ac_cv_RTENTRY_TYPE" = "xBSD-4.3"; then
AC_CACHE_CHECK(for struct rtentry has a rt_next node, 
	ac_cv_struct_rtentry_rt_next,
[
AC_TRY_COMPILE([
#include <sys/types.h>
#define KERNEL
#define _KERNEL
#include <sys/socket.h>
#undef KERNEL
#undef _KERNEL
#include <net/route.h>
],[
struct rtentry rt; 
rt.rt_next;
], ac_cv_struct_rtentry_rt_next=yes,  ac_cv_struct_rtentry_rt_next=no )
])

if test "x$ac_cv_struct_rtentry_rt_next" = "xyes"; then
  AC_DEFINE(RTENTRY_RT_NEXT)
fi

fi

dnl Check tcpstat for tcpstat.tcp_rcvmemdrop
AC_CHECK_STRUCT_FOR([
#ifdef HAVE_NETINET_TCP_VAR_H
#include<netinet/tcp_var.h>
#endif
], tcpstat, tcp_rcvmemdrop)

dnl Check ifnet entries using macro defined in aclocal.m4.
AC_CHECK_IFNET_FOR(if_baudrate)
AC_CHECK_IFNET_FOR(if_type)
AC_CHECK_IFNET_FOR(if_imcasts)
AC_CHECK_IFNET_FOR(if_iqdrops)
AC_CHECK_IFNET_FOR(if_noproto)
AC_CHECK_IFNET_FOR(if_omcasts)
AC_CHECK_IFNET_FOR(if_xname,no)
AC_CHECK_IFNET_FOR(if_lastchange.tv_sec)
AC_CHECK_IFNET_FOR(if_obytes)
AC_CHECK_IFNET_FOR(if_ibytes)

AC_CHECK_STRUCT_FOR([
#if HAVE_NETINET_UDP_VAR_H
#include <netinet/udp_var.h>
#endif
],udpstat,udps_discard)

AC_CHECK_STRUCT_FOR([
#include<sys/types.h>
#include<sys/socket.h>
#include<net/if.h>
#if HAVE_NETINET_IN_H
#include<netinet/in.h>
#endif
#if HAVE_NETINET_IF_ETHER_H
#include<netinet/if_ether.h>
#endif
],arphd,at_next)

AC_CACHE_CHECK(if you have run configure before, ac_cv_have_warned,
[
if test "x$defaults" = "xno"; then
cat << EOF

	 ************** Configuration Section **************

	You are about to be prompted by a series of questions.  Answer
them carefully, as they determine how the snmp agent and related
applications are to function.

	After the configure script finishes, you can browse the newly
created config.h file for further - less important - parameters to
modify.  Be careful if you re-run configure though since config.h will
be over written.

-Press return to continue-
EOF

read tmpinput
ac_cv_have_warned="yes"
echo $ac_n "disabling above prompt for future runs...  $ac_c"
else
  ac_cv_have_warned="no"
fi
])

ME=`whoami`
if test -f /etc/resolv.conf; then
  LOC=`cat /etc/resolv.conf | grep '^domain' | tail -1 | awk '{print $NF}'`
else
  LOC="@no.where"
fi

AC_PROMPT_USER(SYS_CONTACT,[

*** System Contact Information:

	Describes who should be contacted about the host the agent is
running on.  This information is available in the MIB-II tree.  This
Can Also Be Over-Ridden Using The \"syscontact\" Syntax In The Agent'S
Configuration Files.

System Contact Information],$ME@$LOC,1)

AC_PROMPT_USER(SYS_LOC,[

*** System Location:

	Describes the location of the system.  This information is
available in the MIB-II tree.  This Can Also Be Over-Ridden Using The
\"syslocation\" Syntax In The Agent'S Configuration Files.

System Location],Unknown,1)

if test -d /var/log; then
  defaultlog="/var/log/snmpd.log"
else
  defaultlog="/usr/adm/snmpd.log"
fi
  
AC_PROMPT_USER(LOGFILE,[

*** Logfile location:

	Enter the default location for the snmpd agent to dump
information & errors to.  If not defined (enter the keyword \"none\"
at the prompt below) the agent will use stdout and stderr instead.
(Note: This value can be over-ridden using the command line options.)

Location to write logfile],$defaultlog,1)

AC_PROMPT_USER(GLOBALSECURITY,[

*** SNMP Security/Authentication:

	You may pick one of two types of SNMP authentication to use
for this agent.  Only the extensible section is affected by the
following choices.  This will be handled better in version 3.2 and
above.  Note that to use anything other than SNMPV1 the configuration
files must be set up properly for SNMPV2 usage.

	(Encryption is not supported because of U.S. cryptography laws)

SNMPV1       Any type of snmp transmission can access the extensible tree.
SNMPV2ANY    Any type of snmpV2 transmissions can access the extensible tree.
SNMPV2AUTH   Only authenticated V2 transmissions can access the extensible tree.

	If you don't understand any of the above sentences: pick SNMPV1.

What type of security to use],SNMPV1)

AC_OUTPUT(Makefile snmplib/Makefile snmptcl/Makefile agent/Makefile apps/Makefile apps/snmpnetstat/Makefile agent/extensible/Makefile local/Makefile man/Makefile ov/Makefile, echo timestamp > stamp-h)

dnl Local Variables:
dnl mode: sh
dnl End:
