blob: a7162d6e13b3889873107ca827f0a465ec589247 [file] [log] [blame]
# -*- autoconf -*-
#########################################
##
# Checks for library functions.
##
#########################################
##
# Standard checks:
##
AC_FUNC_ALLOCA # alloca()
AC_PROG_GCC_TRADITIONAL
if test "$cross_compiling" = yes -a "${ac_cv_func_memcmp_working+set}" != set
then
# Cross-compiling and ac_cv_func_memcmp_working has not been set - assume
# that memcmp() is available.
ac_cv_func_memcmp_working=yes
else
# Native compilation - test for the availability of memcmp().
AC_FUNC_MEMCMP
fi
AC_TYPE_SIGNAL
##
# Stand-alone function checks:
##
# Core:
AC_CHECK_FUNCS([lrand48 rand random ] dnl
[signal sigset ] )
# Library:
AC_CHECK_FUNCS([fork gai_strerror ] dnl
[getaddrinfo gethostname gethostbyname ] dnl
[getipnodebyname gettimeofday ] dnl
[if_nametoindex mkstemp regcomp ] dnl
[readdir ] dnl
[setenv setitimer setlocale ] dnl
[setsid snprintf ] dnl
[strcasestr strdup strerror ] dnl
[strlcat strlcpy strncasecmp ] dnl
[strtok_r strtol strtoul ] dnl
[strtoull sysconf times ] dnl
[vsnprintf ] )
# Agent:
AC_CHECK_FUNCS([cgetnext execv gai_strerror ] dnl
[getfsstat getgrnam gethostname ] dnl
[ getloadavg ] dnl
[getpid getpwnam getvfsstat ] dnl
[hasmntopt initgroups ] dnl
[if_nameindex if_nametoindex ] dnl
[kinfo_get_cpus ] dnl
[mkstemp mktime ] dnl
[poll regcomp ] dnl
[setgid setgroups ] dnl
[setmntent setuid ] dnl
[sigaction sigblock sighold ] dnl
[statfs statvfs stime ] dnl
[strncasecmp system ] dnl
[uname usleep ] )
# Apps:
AC_CHECK_FUNCS([getdtablesize ] dnl
[getgrnam getpid getpwnam ] dnl
[setgid setgroups setuid ] dnl
[tcgetattr ] )
# Not-Used:
AC_CHECK_FUNCS([if_freenameindex getpagesize ] dnl
[lseek64 pread64 ] dnl
[select sigalrm socket ] )
##
# More complex function checks:
# (Agent)
##
# rpmGetPath check needs clean LIBS environment (Linux)
#
if test "x$with_rpm" != "xno"; then
OLDLIBS=$LIBS
LIBS=$LMIBLIBS
AC_CHECK_FUNCS(rpmGetPath)
LIBS=$OLDLIBS
fi
# statfs( char *, struct fs_data* ) (Ultrix)
#
AC_MSG_CHECKING([[for two-argument statfs with struct fs_data (Ultrix)]])
AC_CACHE_VAL(
fu_cv_sys_stat_fs_data,
[AC_TRY_RUN([
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include <sys/types.h>
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
#ifdef HAVE_SYS_FS_TYPES_H
#include <sys/fs_types.h>
#endif
main ()
{
struct fs_data fsd;
/* Ultrix's statfs returns 1 for success,
0 for not mounted, -1 for failure. */
exit (statfs (".", &fsd) != 1);
}],
fu_cv_sys_stat_fs_data=yes,
fu_cv_sys_stat_fs_data=no,
fu_cv_sys_stat_fs_data=no)])
AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
if test $fu_cv_sys_stat_fs_data = yes; then
AC_DEFINE(STAT_STATFS_FS_DATA, 1,
[Define if statfs takes 2 args and the second argument has
type struct fs_data. @<:@Ultrix@:>@])
fi
##
# Other function-related checks:
# (general build)
##
# How to get the name of the current function
#
AC_CACHE_CHECK([how to get the name of the current function],
[netsnmp_cv__func__name],[
netsnmp_cv__func__name=no
AC_COMPILE_IFELSE(
AC_LANG_PROGRAM(,[[const char* cp = __func__;]]),
[netsnmp_cv__func__name=__func__])
if test "$netsnmp_cv__func__name" = no ; then
AC_COMPILE_IFELSE(
AC_LANG_PROGRAM(,[[const char* cp = __FUNCTION__;]]),
[netsnmp_cv__func__name=__FUNCTION__])
fi])
if test "$netsnmp_cv__func__name" != no; then
AC_DEFINE_UNQUOTED([NETSNMP_FUNCTION],[$netsnmp_cv__func__name],
[Should evaluate to the name of the current function if defined])
fi
# Whether static inline functions are broken (SCO Unixware)
#
AC_CACHE_CHECK([[whether static inline functions are broken (Unixware)]],
[netsnmp_cv_c_broken_inline],
AC_COMPILE_IFELSE([[
static inline int nested_inline_function(void) {
return 0;
}
inline int main_inline_function( void ) {
return nested_inline_function();
}
]],
netsnmp_cv_broken_inline=no,
netsnmp_cv_broken_inline=yes))
# Yes - static inline functions are broken (Solaris 2.x)
#
case "$target_os" in
solaris*)
netsnmp_cv_broken_inline=yes
;;
*)
;;
esac
if test "$netsnmp_cv_broken_inline" = yes ; then
AC_DEFINE(NETSNMP_BROKEN_INLINE, 1,
[Define if static inline functions are unsupported])
fi
##
# Mis-placed (non-function) checks:
##
AC_CACHE_CHECK([for SIOCGIFADDR in sys/ioctl.h],
netsnmp_cv_sys_ioctl_h_has_SIOCGIFADDR,
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
#ifndef SIOCGIFADDR
No SIOCGIFADDR found here.
#endif
]])],
[netsnmp_cv_sys_ioctl_h_has_SIOCGIFADDR=yes],
[netsnmp_cv_sys_ioctl_h_has_SIOCGIFADDR=no]))
if test $netsnmp_cv_sys_ioctl_h_has_SIOCGIFADDR = yes; then
AC_DEFINE(SYS_IOCTL_H_HAS_SIOCGIFADDR, 1,
[define if SIOCGIFADDR exists in sys/ioctl.h])
fi
##
# Check how to print a size_t variable
##
AC_CACHE_CHECK(
[the underlying type of a size_t],
netsnmp_cv_size_t_type,
[m4_foreach([TYPE], [[int],[long],[long long],[short],[char]],
[if [[ x$netsnmp_cv_size_t_type = x ]] ; then
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[AC_INCLUDES_DEFAULT()
extern unsigned TYPE variable;
extern size_t variable;],
[])],
[netsnmp_cv_size_t_type="TYPE"])
fi
])])
AC_MSG_CHECKING([how to printf a size_t])
case "$netsnmp_cv_size_t_type" in
char|short|int) netsnmp_PRIz="" ;;
long) netsnmp_PRIz="l" ;;
"long long") netsnmp_PRIz="ll" ;;
*) AC_MSG_ERROR([underlying type of size_t not known]) ;;
esac
AC_MSG_RESULT($netsnmp_PRIz)
AC_DEFINE_UNQUOTED([NETSNMP_PRIz], ["$netsnmp_PRIz"],
[Size prefix to use to printf a size_t or ssize_t])