| # -*- 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([closedir fgetc_unlocked flockfile ] dnl |
| [fork funlockfile getipnodebyname ] dnl |
| [gettimeofday if_nametoindex mkstemp ] dnl |
| [opendir readdir regcomp ] dnl |
| [setenv setitimer setlocale ] dnl |
| [setsid snprintf strcasestr ] dnl |
| [strdup strerror strncasecmp ] dnl |
| [sysconf times vsnprintf ] ) |
| |
| # IPv4/IPv6 function checks. AC_CHECK_FUNC() can't find these on MinGW |
| # since these functions have the __cdecl calling convention on MinGW. |
| case x$target_os in |
| xmingw*) |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <ws2tcpip.h>], |
| [ gai_strerror(0); ])], |
| [ ac_cv_func_gai_strerror=yes |
| AS_ECHO "#define HAVE_GAI_STRERROR 1" >>confdefs.h |
| ], [ ]) |
| |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <ws2tcpip.h>], |
| [ getaddrinfo(NULL, NULL, NULL, NULL); ])], |
| [ ac_cv_func_getaddrinfo=yes |
| AS_ECHO "#define HAVE_GETADDRINFO 1" >>confdefs.h |
| ], [ ]) |
| |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <winsock2.h>], |
| [ gethostbyname(NULL); ])], |
| [ ac_cv_func_gethostbyname=yes |
| AS_ECHO "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h |
| ], [ ]) |
| |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <winsock2.h>], |
| [ gethostbyaddr(NULL); ])], |
| [ ac_cv_func_gethostaddr=yes |
| AS_ECHO "#define HAVE_GETHOSTBYADDR 1" >>confdefs.h |
| ], [ ]) |
| |
| AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <winsock2.h>], |
| [ gethostname(NULL, 0); ])], |
| [ ac_cv_func_gethostname=yes |
| AS_ECHO "#define HAVE_GETHOSTNAME 1" >>confdefs.h |
| ], [ ]) |
| ;; |
| |
| *) |
| AC_CHECK_FUNCS([gai_strerror getaddrinfo gethostbyname gethostbyname2 gethostname gethostbyaddr]) |
| ;; |
| esac |
| |
| AC_CONFIG_LIBOBJ_DIR([snmplib]) |
| |
| AC_REPLACE_FUNCS([getopt inet_ntop inet_pton ] dnl |
| [strlcat strlcpy strtok_r ] dnl |
| [strtol strtoul strtoull ] ) |
| |
| # Agent: |
| AC_CHECK_FUNCS([cgetnext chown execv ] dnl |
| [gai_strerror getgrnam ] dnl |
| [gethostname getloadavg ] dnl |
| [getpid getpwnam ] dnl |
| [hasmntopt initgroups ] dnl |
| [if_nameindex if_indextoname if_nametoindex ] dnl |
| [localtime_r mkstemp mktime ] dnl |
| [poll regcomp ] dnl |
| [setgid setgroups ] dnl |
| [setmntent setuid ] dnl |
| [sigaction sigblock sighold ] dnl |
| [sigprocmask ] 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_RUN_IFELSE([AC_LANG_SOURCE([[ |
| #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([AC_LANG_SOURCE([ |
| 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]) |
| |
| ## |
| # Check how to print a uint32_t variable |
| ## |
| |
| AC_CACHE_CHECK( |
| [the underlying type of an uint32_t], |
| netsnmp_cv_uint32_t_type, |
| [m4_foreach([TYPE], [[char],[short],[int],[long],[long long]], |
| [if [[ x$netsnmp_cv_uint32_t_type = x ]] ; then |
| AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM( |
| [AC_INCLUDES_DEFAULT() |
| extern unsigned TYPE variable; |
| extern uint32_t variable;], |
| [])], |
| [netsnmp_cv_uint32_t_type="TYPE"]) |
| fi |
| ])]) |
| |
| AC_MSG_CHECKING([how to printf a uint32_t]) |
| case "$netsnmp_cv_uint32_t_type" in |
| char|short|int) netsnmp_PRI32="" ;; |
| long) netsnmp_PRI32="l" ;; |
| "long long") netsnmp_PRI32="ll" ;; |
| *) AC_MSG_ERROR([underlying type of uint32_t not known]) ;; |
| esac |
| AC_MSG_RESULT($netsnmp_PRI32) |
| AC_DEFINE_UNQUOTED([NETSNMP_PRI32], ["$netsnmp_PRI32"], |
| [Size prefix to use to printf a uint32_t]) |
| |
| # check to see if the openssl is good enough for DTLS |
| # (BIO_dgram_get_peer is a macro, not a true function) |
| if echo " $transport_result_list " | $GREP "DTLS" > /dev/null; then |
| AC_CACHE_VAL( |
| netsnmp_cv_bio_dgram_get_peer, |
| AC_MSG_CHECKING([[for BIO_dgram_get_peer]]) |
| [ |
| oldLIBS="$LIBS" |
| LIBS="$LIBS -lcrypto" |
| AC_LINK_IFELSE( |
| [AC_LANG_PROGRAM( |
| [[#include <openssl/bio.h>]], |
| [[BIO_dgram_get_peer(NULL, NULL);]])], [], |
| [AC_MSG_ERROR(DTLS support requires a newer version of OpenSSL)]) |
| |
| LIBS="$oldLIBS" |
| ] |
| AC_MSG_RESULT(yes) |
| ) |
| fi |
| |