Blame configure.d/config_os_misc4

Packit fcad23
# -*- autoconf -*-
Packit fcad23
#########################################
Packit fcad23
##
Packit fcad23
# Miscellaneous Operating-System characteristics
Packit fcad23
##
Packit fcad23
#########################################
Packit fcad23
Packit fcad23
Packit fcad23
#	Determine how to test for character devices
Packit fcad23
#	[We assume that /dev/null does actually exist!]
Packit fcad23
#
Packit fcad23
if test -c /dev/null; then
Packit fcad23
    CDEV_TEST_FLAG="-c"
Packit fcad23
elif test -f /dev/null; then
Packit fcad23
    CDEV_TEST_FLAG="-f"
Packit fcad23
else
Packit fcad23
    AC_MSG_WARN([Can't reliably detect character devices])
Packit fcad23
    # Is it actually sensible to fall back on "test -f" ?
Packit fcad23
    CDEV_TEST_FLAG="-f"
Packit fcad23
fi
Packit fcad23
Packit fcad23
#       Kernel Location
Packit fcad23
#	    used in library/agent
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([for location of system kernel],
Packit fcad23
    ac_cv_KERNEL_LOC,
Packit fcad23
   [ac_cv_KERNEL_LOC="unknown"
Packit fcad23
    for i in /vmunix /hp-ux /stand/vmunix /dev/ksyms /kernel/unix /kernel/genunix /netbsd /unix /kernel /bsd /mach_kernel /boot/kernel/kernel
Packit fcad23
    do
Packit fcad23
        if test $CDEV_TEST_FLAG $i; then
Packit fcad23
            ac_cv_KERNEL_LOC="$i"
Packit fcad23
            break;
Packit fcad23
        fi
Packit fcad23
    done
Packit fcad23
    #
Packit fcad23
    # In principle, this test is meant to provide a default path to the kernel
Packit fcad23
    # In practice, the test is broken and the kernel path is set to "unknown"
Packit fcad23
    #
Packit fcad23
    # Note that on certain systems (e.g. some Linux distributions),
Packit fcad23
    #    it is impossible to predict the name of the kernel,
Packit fcad23
    #    particularly if it includes the kernel version, architecture, etc
Packit fcad23
    #
Packit fcad23
    # Since this default will never actually be used, then don't try to set it
Packit fcad23
    #
Packit fcad23
    if test $i = "unknown"; then
Packit fcad23
        AC_MSG_WARN([Can't find system kernel... hopefully this won't be needed!])
Packit fcad23
    fi
Packit fcad23
])
Packit fcad23
AC_DEFINE_UNQUOTED(KERNEL_LOC,"$ac_cv_KERNEL_LOC", [location of UNIX kernel])
Packit fcad23
Packit fcad23
Packit fcad23
#       /dev/kmem existence
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([for /dev/kmem],
Packit fcad23
    ac_cv_HAVE_KMEM,
Packit fcad23
   [if test $CDEV_TEST_FLAG /dev/kmem; then
Packit fcad23
        ac_cv_HAVE_KMEM="/dev/kmem"
Packit fcad23
    fi
Packit fcad23
])
Packit fcad23
#
Packit fcad23
#  Note that it's OK if this device is not found
Packit fcad23
#
Packit fcad23
if test "x$ac_cv_HAVE_KMEM" = "x/dev/kmem"; then
Packit fcad23
    AC_DEFINE_UNQUOTED(HAVE_KMEM,"$ac_cv_HAVE_KMEM", [Define if you have /dev/kmem])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#       Swap device Location
Packit fcad23
#           (/dev/dmem or /dev/drum)
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([for location of swap device],
Packit fcad23
    ac_cv_DMEM_LOC,
Packit fcad23
   [if test $CDEV_TEST_FLAG /dev/dmem; then
Packit fcad23
        ac_cv_DMEM_LOC="/dev/dmem"
Packit fcad23
    elif test $CDEV_TEST_FLAG /dev/drum; then
Packit fcad23
        ac_cv_DMEM_LOC="/dev/drum"
Packit fcad23
    else
Packit fcad23
        ac_cv_DMEM_LOC="none"
Packit fcad23
    fi
Packit fcad23
])
Packit fcad23
#
Packit fcad23
#  Note that it's OK if this device is not found
Packit fcad23
#
Packit fcad23
if test "x$ac_cv_DMEM_LOC" != "xnone"; then
Packit fcad23
    AC_DEFINE_UNQUOTED(DMEM_LOC,"$ac_cv_DMEM_LOC", [location of swap device])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#       Mount table Location
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([for mount table location],
Packit fcad23
    ac_cv_ETC_MNTTAB,
Packit fcad23
   [ac_cv_ETC_MNTTAB="${with_mnttab:-unknown}"
Packit fcad23
    if test "$ac_cv_ETC_MNTTAB" = "unknown"; then
Packit fcad23
        for i in /etc/mnttab /etc/mtab /etc/filesystems /dev/mnttab
Packit fcad23
        do
Packit fcad23
            if test -f $i -o -c $i; then
Packit fcad23
                ac_cv_ETC_MNTTAB="$i"
Packit fcad23
                break;
Packit fcad23
            fi
Packit fcad23
        done
Packit fcad23
    fi
Packit fcad23
])
Packit fcad23
AC_DEFINE_UNQUOTED(ETC_MNTTAB,"$ac_cv_ETC_MNTTAB", [location of mount table list])
Packit fcad23
Packit fcad23
Packit fcad23
#       Printing
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
AC_PATH_PROG([LPSTAT_PATH],lpstat)
Packit fcad23
if test x$LPSTAT_PATH != x; then
Packit fcad23
    AC_DEFINE_UNQUOTED(LPSTAT_PATH, "$LPSTAT_PATH",
Packit fcad23
	[Path to the lpstat command])
Packit fcad23
    AC_DEFINE(HAVE_LPSTAT, 1, [Set if the lpstat command is available])
Packit fcad23
fi
Packit fcad23
if test -r /etc/printcap; then
Packit fcad23
    AC_DEFINE(HAVE_PRINTCAP, 1, [Set if /etc/printcap exists])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#       Check ps args
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([for correct flags to ps],
Packit fcad23
     ac_cv_ps_flags,
Packit fcad23
     [
Packit fcad23
if test "`($PSPROG -e 2>&1) | $EGREP ' (ps) *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="-e"
Packit fcad23
elif test "`($PSPROG -el 2>&1) | $EGREP ' (ps) *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="-el"
Packit fcad23
elif test "`($PSPROG acx 2>&1) | $EGREP ' (ps) *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="acx"
Packit fcad23
elif test "`($PSPROG -acx 2>&1) | $EGREP ' (ps) *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="-acx"
Packit fcad23
elif test "`($PSPROG -o pid,tt,state,time,ucomm 2>&1) | $EGREP ' ps *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="-o pid,tt,state,time,ucomm"
Packit fcad23
elif test "`($PSPROG ax 2>&1) | $EGREP ' (ps) *$' | awk '{print $NF}'`" = "ps" ; then
Packit fcad23
    ac_cv_ps_flags="ax"
Packit fcad23
elif test "x$PARTIALTARGETOS" = "xcygwin"; then
Packit fcad23
    ac_cv_ps_flags="-e"
Packit fcad23
elif test "x$PARTIALTARGETOS" = "xmingw32" -o "x$PARTIALTARGETOS" = "xmingw32msvc"; then 
Packit fcad23
    ac_cv_ps_flags="-e"
Packit fcad23
else
Packit fcad23
    AC_MSG_WARN([Unable to determine valid ps flags...  defaulting...])
Packit fcad23
    ac_cv_ps_flags="-acx"
Packit fcad23
fi
Packit fcad23
])
Packit fcad23
Packit fcad23
PSCMD="$PSPROG $ac_cv_ps_flags"
Packit fcad23
AC_SUBST(PSCMD)
Packit fcad23
AC_DEFINE_UNQUOTED(PSCMD, "$PSPROG $ac_cv_ps_flags",
Packit fcad23
  [Command to generate ps output, the final column must be the process
Packit fcad23
   name withOUT arguments])
Packit fcad23
Packit fcad23
Packit fcad23
##
Packit fcad23
#   System/Compilation-related
Packit fcad23
##
Packit fcad23
Packit fcad23
#       Test for SIGHUP
Packit fcad23
#
Packit fcad23
Packit fcad23
AC_MSG_CHECKING([for SIGHUP])
Packit fcad23
AC_COMPILE_IFELSE(
Packit fcad23
    [AC_LANG_PROGRAM([#include <signal.h>], [return SIGHUP])],
Packit fcad23
    [netsnmp_have_sighup=yes],
Packit fcad23
    [netsnmp_have_sighup=no]
Packit fcad23
)
Packit fcad23
AC_MSG_RESULT([$netsnmp_have_sighup])
Packit fcad23
if test "x$netsnmp_have_sighup" = xyes; then
Packit fcad23
    AC_DEFINE([HAVE_SIGHUP], [1],
Packit fcad23
              [Define if SIGHUP is defined in <signal.h>.])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#       Check whether sysctl() is usable
Packit fcad23
#	    used in library/agent
Packit fcad23
#
Packit fcad23
if test $cross_compiling = yes; then
Packit fcad23
    AC_MSG_WARN([Can't check sysctl, manually define NETSNMP_CAN_USE_SYSCTL if platform support available])
Packit fcad23
else
Packit fcad23
    AC_CACHE_CHECK([if sysctl can read kernel information],
Packit fcad23
        ac_cv_NETSNMP_CAN_USE_SYSCTL,
Packit fcad23
       [AC_TRY_RUN([
Packit fcad23
#if TIME_WITH_SYS_TIME
Packit fcad23
# include <sys/time.h>
Packit fcad23
# include <time.h>
Packit fcad23
#else
Packit fcad23
# if HAVE_SYS_TIME_H
Packit fcad23
#  include <sys/time.h>
Packit fcad23
# else
Packit fcad23
#  include <time.h>
Packit fcad23
# endif
Packit fcad23
#endif
Packit fcad23
#if HAVE_SYS_PARAM_H
Packit fcad23
# include <sys/param.h>
Packit fcad23
#endif
Packit fcad23
#include <sys/types.h>
Packit fcad23
#if HAVE_SYS_SYSCTL_H
Packit fcad23
# include <sys/sysctl.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
main() {
Packit fcad23
  int                 mib[2];
Packit fcad23
  size_t              len;
Packit fcad23
  struct timeval boottime;
Packit fcad23
  
Packit fcad23
  mib[0] = CTL_KERN;
Packit fcad23
  mib[1] = KERN_BOOTTIME;
Packit fcad23
  
Packit fcad23
  len = sizeof(boottime);
Packit fcad23
  sysctl(mib, 2, &boottime, &len, NULL, NULL);
Packit fcad23
  if (boottime.tv_sec != 0)
Packit fcad23
    exit(0);
Packit fcad23
  else
Packit fcad23
    exit(1);
Packit fcad23
}
Packit fcad23
        ],
Packit fcad23
        ac_cv_NETSNMP_CAN_USE_SYSCTL=yes,
Packit fcad23
        ac_cv_NETSNMP_CAN_USE_SYSCTL=no,
Packit fcad23
        ac_cv_NETSNMP_CAN_USE_SYSCTL=no)])
Packit fcad23
fi
Packit fcad23
Packit fcad23
if test "x$ac_cv_NETSNMP_CAN_USE_SYSCTL" = "xyes"; then
Packit fcad23
  AC_DEFINE(NETSNMP_CAN_USE_SYSCTL, 1, [sysctl works to get boottime, etc...])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#   Check whether TCP timer constants are indeed constant
Packit fcad23
#       or depend on the kernel clock tick 'hz'.        (FreeBSD 4.x)
Packit fcad23
#
Packit fcad23
#       If the latter, then we will need to have a local
Packit fcad23
#       variable 'hz' defined and with a suitable value,
Packit fcad23
#       whenever we want to  use one one of these 'constants'.
Packit fcad23
#
Packit fcad23
# 	    used in agent only
Packit fcad23
#
Packit fcad23
AC_CACHE_CHECK([whether TCP timers depend on 'hz'],
Packit fcad23
    ac_cv_TCPTV_NEEDS_HZ,
Packit fcad23
   [AC_EGREP_CPP(hz,
Packit fcad23
        [
Packit fcad23
#include <netinet/tcp_timer.h>
Packit fcad23
TCPTV_SRTTDFLT
Packit fcad23
        ],
Packit fcad23
        ac_cv_TCPTV_NEEDS_HZ=yes,
Packit fcad23
        ac_cv_TCPTV_NEEDS_HZ=no)])
Packit fcad23
Packit fcad23
if test "x$ac_cv_TCPTV_NEEDS_HZ" = "xyes"; then
Packit fcad23
    AC_DEFINE(TCPTV_NEEDS_HZ, 1,
Packit fcad23
        [Define if the TCP timer constants in <netinet/tcp_timer.h>
Packit fcad23
         depend on the integer variable 'hz'.  @<:@FreeBSD 4.x@:>@])
Packit fcad23
fi
Packit fcad23
Packit fcad23
Packit fcad23
#   Check whether IP Route table is cached              (Solaris)
Packit fcad23
#	    used in agent only
Packit fcad23
#
Packit fcad23
case $target_os in
Packit fcad23
  solaris*)
Packit fcad23
    #    Header checks                                  (Solaris 2.6/7)
Packit fcad23
    #
Packit fcad23
    AC_CHECK_HEADERS(inet/common.h)
Packit fcad23
    AC_CHECK_HEADERS(inet/ip.h,ac_inet_ip_h=yes,ac_inet_ip_h=no,
Packit fcad23
        AC_INCLUDES_DEFAULT([])
Packit fcad23
        [
Packit fcad23
#if HAVE_SYS_STREAM_H
Packit fcad23
#include <sys/stream.h>
Packit fcad23
#endif
Packit fcad23
#if HAVE_INET_COMMON_H
Packit fcad23
#include <inet/common.h>
Packit fcad23
#endif
Packit fcad23
        ])
Packit fcad23
    if test $ac_inet_ip_h = yes ; then
Packit fcad23
        AC_CACHE_CHECK([for mib2_ipRouteEntry_t in inet/mib2.h],
Packit fcad23
            ac_cv_mib2_ipRouteEntry_t,
Packit fcad23
           [AC_TRY_COMPILE([
Packit fcad23
#if HAVE_INET_MIB2_H
Packit fcad23
#include <inet/mib2.h>
Packit fcad23
#endif
Packit fcad23
               ],[
Packit fcad23
  mib2_ipRouteEntry_t testit;
Packit fcad23
  if(sizeof(testit))
Packit fcad23
    return(0);
Packit fcad23
               ],
Packit fcad23
               ac_cv_mib2_ipRouteEntry_t=yes,
Packit fcad23
               ac_cv_mib2_ipRouteEntry_t=no)])
Packit fcad23
Packit fcad23
        if test "x$ac_cv_mib2_ipRouteEntry_t" = "xyes" ; then
Packit fcad23
            AC_CACHE_CHECK([whether IRE_CACHE is defined in inet/ip.h],
Packit fcad23
                ac_cv_ire_cache,
Packit fcad23
               [AC_TRY_COMPILE([
Packit fcad23
#if HAVE_INET_IP_H
Packit fcad23
#include <inet/ip.h>
Packit fcad23
#endif
Packit fcad23
                   ],[
Packit fcad23
  int testit=IRE_CACHE;
Packit fcad23
  if(testit)
Packit fcad23
    return(0);
Packit fcad23
                   ],
Packit fcad23
                   ac_cv_ire_cache=yes,
Packit fcad23
                   ac_cv_ire_cache=no)])
Packit fcad23
        else
Packit fcad23
            ac_cv_ire_cache=no
Packit fcad23
        fi
Packit fcad23
Packit fcad23
        if test "x$ac_cv_ire_cache" = "xyes" ; then
Packit fcad23
            AC_DEFINE(HAVE_DEFINED_IRE_CACHE,[],
Packit fcad23
                [define to 1 if you have IRE_CACHE defined in <inet/ip.h> header file.])
Packit fcad23
        else
Packit fcad23
            AC_MSG_WARN([It seems that you have inet/ip.h, but IRE_CACHE is not defined. \
Packit fcad23
That means that your query to ipRoute MIB could generate over 20k results! \
Packit fcad23
And this can be very slow.])
Packit fcad23
        fi
Packit fcad23
    fi         # "test $ac_inet_ip_h = yes"
Packit fcad23
    ;;
Packit fcad23
esac
Packit fcad23
Packit fcad23
#   Check whether IP_PKTINFO is usable.
Packit fcad23
#
Packit fcad23
Packit fcad23
AC_CACHE_CHECK([for IP_PKTINFO ],
Packit fcad23
                [ac_cv_have_ip_pktinfo],
Packit fcad23
[AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit fcad23
#include <stdio.h>  /* printf() */
Packit fcad23
#include <stdlib.h> /* malloc() */
Packit fcad23
#include <string.h> /* memset() */
Packit fcad23
#include <sys/types.h>
Packit fcad23
#include <sys/socket.h>
Packit fcad23
#include <netinet/in.h>
Packit fcad23
], [
Packit fcad23
    void *buf;
Packit fcad23
    int len;
Packit fcad23
    void *from;
Packit fcad23
    socklen_t *fromlen;
Packit fcad23
Packit fcad23
    struct iovec iov;
Packit fcad23
    char *cmsg = malloc(CMSG_SPACE(sizeof(struct in_pktinfo)));
Packit fcad23
    struct cmsghdr *cm;
Packit fcad23
    struct msghdr msg;
Packit fcad23
Packit fcad23
    iov.iov_base = buf;
Packit fcad23
    iov.iov_len = len;
Packit fcad23
Packit fcad23
    memset(&msg, 0, sizeof msg);
Packit fcad23
    msg.msg_name = from;
Packit fcad23
    msg.msg_namelen = *fromlen;
Packit fcad23
    msg.msg_iov = &iov;
Packit fcad23
    msg.msg_iovlen = 1;
Packit fcad23
    msg.msg_control = &cmsg;
Packit fcad23
    msg.msg_controllen = sizeof(cmsg);
Packit fcad23
Packit fcad23
    for (cm = CMSG_FIRSTHDR(&msg;; cm; cm = CMSG_NXTHDR(&msg, cm)) {
Packit fcad23
        if (cm->cmsg_level == SOL_IP && cm->cmsg_type == IP_PKTINFO) {
Packit fcad23
            struct in_pktinfo* src = (struct in_pktinfo *)CMSG_DATA(cm);
Packit fcad23
            printf("Address: %s; index: %d\n", inet_ntoa(src->ipi_addr),
Packit fcad23
	           src->ipi_ifindex);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
])],
Packit fcad23
[ac_cv_have_ip_pktinfo=yes],
Packit fcad23
[ac_cv_have_ip_pktinfo=no]
Packit fcad23
)])
Packit fcad23
if test x$ac_cv_have_ip_pktinfo = xyes; then
Packit fcad23
    AC_DEFINE(HAVE_IP_PKTINFO, 1, [Set if IP_PKTINFO is usable])
Packit fcad23
fi
Packit fcad23
Packit fcad23
#   Check whether IP_RECVDSTADDR is usable.
Packit fcad23
#
Packit fcad23
Packit fcad23
AC_CACHE_CHECK([for IP_RECVDSTADDR ],
Packit fcad23
                [ac_cv_have_ip_recvdstaddr],
Packit fcad23
[AC_LINK_IFELSE([AC_LANG_PROGRAM([
Packit fcad23
#include <stdio.h>  /* printf() */
Packit fcad23
#include <stdlib.h> /* malloc() */
Packit fcad23
#include <string.h> /* memset() */
Packit fcad23
#include <sys/types.h>
Packit fcad23
#include <sys/socket.h>
Packit fcad23
#include <netinet/in.h>
Packit fcad23
], [
Packit fcad23
    void *buf;
Packit fcad23
    int len;
Packit fcad23
    void *from;
Packit fcad23
    socklen_t *fromlen;
Packit fcad23
Packit fcad23
    struct iovec iov;
Packit fcad23
    char *cmsg = malloc(CMSG_SPACE(sizeof(struct in_addr)));
Packit fcad23
    struct cmsghdr *cm;
Packit fcad23
    struct msghdr msg;
Packit fcad23
Packit fcad23
    iov.iov_base = buf;
Packit fcad23
    iov.iov_len = len;
Packit fcad23
Packit fcad23
    memset(&msg, 0, sizeof msg);
Packit fcad23
    msg.msg_name = from;
Packit fcad23
    msg.msg_namelen = *fromlen;
Packit fcad23
    msg.msg_iov = &iov;
Packit fcad23
    msg.msg_iovlen = 1;
Packit fcad23
    msg.msg_control = &cmsg;
Packit fcad23
    msg.msg_controllen = sizeof(cmsg);
Packit fcad23
Packit fcad23
    for (cm = CMSG_FIRSTHDR(&msg;; cm; cm = CMSG_NXTHDR(&msg, cm)) {
Packit fcad23
        if (cm->cmsg_level == IPPROTO_IP && cm->cmsg_type == IP_RECVDSTADDR) {
Packit fcad23
            struct in_addr* src = (struct in_addr *)CMSG_DATA(cm);
Packit fcad23
            printf("Address: %s\n", inet_ntoa(src));
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
])],
Packit fcad23
[ac_cv_have_ip_recvdstaddr=yes],
Packit fcad23
[ac_cv_have_ip_recvdstaddr=no]
Packit fcad23
)])
Packit fcad23
if test x$ac_cv_have_ip_recvdstaddr = xyes; then
Packit fcad23
    AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Set if IP_RECVDSTADDR is usable])
Packit fcad23
fi