aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Woosley <ben.woosley@gmail.com>2019-03-09 12:37:09 -0500
committerBen Woosley <ben.woosley@gmail.com>2019-04-13 20:21:02 -0700
commitb4fd0ca9be14c81023db759c405c0f67cfa78166 (patch)
tree087c594164ddd6f2d5d96669e4cdc18b1edb67f9
parent7fb886b1b1110de4c79478ac094e64cdcb81f3c8 (diff)
downloadbitcoin-b4fd0ca9be14c81023db759c405c0f67cfa78166.tar.xz
Include cstring for sanity_test_fdelt if required
SmartOS FD_ZERO is implemented in a way that requires an external declaration of memcpy. We can not simply include cstring in the existing file because sanity_test_memcpy is attempting to replace memcpy, but we can do so here, now that the fdelt test is split out.
-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