aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac33
-rw-r--r--src/compat/glibc_sanity_fdelt.cpp3
2 files changed, 36 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index a3ba8ce808..579aeed49d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -758,6 +758,39 @@ fi
AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h])
+# FD_ZERO may be dependent on a declaration of memcpy, e.g. in SmartOS
+# check that it fails to build without memcpy, then that it builds with
+AC_MSG_CHECKING(FD_ZERO memcpy dependence)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <cstddef>
+ #if HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ ]],[[
+ #if HAVE_SYS_SELECT_H
+ fd_set fds;
+ FD_ZERO(&fds);
+ #endif
+ ]])],
+ [ AC_MSG_RESULT(no) ],
+ [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <cstring>
+ #if HAVE_SYS_SELECT_H
+ #include <sys/select.h>
+ #endif
+ ]], [[
+ #if HAVE_SYS_SELECT_H
+ fd_set fds;
+ FD_ZERO(&fds);
+ #endif
+ ]])],
+ [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CSTRING_DEPENDENT_FD_ZERO, 1, [Define this symbol if FD_ZERO is dependent of a memcpy declaration being available]) ],
+ [ AC_MSG_ERROR(failed with cstring include) ]
+ )
+ ]
+)
+
AC_CHECK_DECLS([getifaddrs, freeifaddrs],,,
[#include <sys/types.h>
#include <ifaddrs.h>]
diff --git a/src/compat/glibc_sanity_fdelt.cpp b/src/compat/glibc_sanity_fdelt.cpp
index 13661d3eef..87140d0c71 100644
--- a/src/compat/glibc_sanity_fdelt.cpp
+++ b/src/compat/glibc_sanity_fdelt.cpp
@@ -7,6 +7,9 @@
#endif
#if defined(HAVE_SYS_SELECT_H)
+#ifdef HAVE_CSTRING_DEPENDENT_FD_ZERO
+#include <cstring>
+#endif
#include <sys/select.h>
// trigger: Call FD_SET to trigger __fdelt_chk. FORTIFY_SOURCE must be defined