aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorCory Fields <cory-nospam-@coryfields.com>2014-08-07 18:59:06 -0400
committerCory Fields <cory-nospam-@coryfields.com>2014-08-15 17:42:53 -0400
commit4975ae1722cd8af63eda2f02ef64a98091b6fb58 (patch)
tree763ed388dcea4bf57a2fbd4f6f731610cc170d47 /configure.ac
parent984ff68c679e9a40e14e791c6363c6136639a686 (diff)
build: add option for reducing exports
Enabled automatically if boost >= 1.49. See: https://svn.boost.org/trac/boost/ticket/2309 Also, check for a default visibility attribute, so that we can mark future api functions correctly.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac77
1 files changed, 77 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index d6d56fae34..bf45d7cd1c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -90,6 +90,12 @@ AC_ARG_ENABLE([hardening],
[use_hardening=$enableval],
[use_hardening=yes])
+AC_ARG_ENABLE([reduce-exports],
+ [AS_HELP_STRING([--enable-reduce-exports],
+ [attempt to reduce exported symbols in the resulting executables (default is yes)])],
+ [use_reduce_exports=$enableval],
+ [use_reduce_exports=auto])
+
AC_ARG_ENABLE([ccache],
[AS_HELP_STRING([--enable-ccache],
[use ccache for building (default is yes if ccache is found)])],
@@ -396,6 +402,40 @@ AC_TRY_COMPILE([#include <sys/socket.h>],
AC_SEARCH_LIBS([clock_gettime],[rt])
+AC_MSG_CHECKING([for visibility attribute])
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+ int foo_def( void ) __attribute__((visibility("default")));
+ int main(){}
+ ])],
+ [
+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ if test x$use_reduce_exports = xyes; then
+ AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduced-exports.])
+ fi
+ AC_MSG_WARN([Cannot find a working visibility attribute. Disabling reduced exports.])
+ use_reduce_exports=no
+ ]
+)
+
+if test x$use_reduce_exports != xno; then
+ AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
+ [
+ if test x$use_reduce_exports = xyes; then
+ AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduced-exports.])
+ fi
+ AC_MSG_WARN([Cannot set default symbol visibility. Disabling reduced exports.])
+ use_reduce_exports=no
+ ])
+ if test x$use_reduce_exports != xno; then
+ AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"])
+ CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS"
+ fi
+fi
+
LEVELDB_CPPFLAGS=
LIBLEVELDB=
LIBMEMENV=
@@ -420,6 +460,35 @@ fi
dnl Check for boost libs
AX_BOOST_BASE
+
+if test x$use_reduce_exports != xno; then
+ AC_MSG_CHECKING([for working boost reduced exports])
+ TEMP_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS"
+ AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <boost/version.hpp>
+ ]], [[
+ #if BOOST_VERSION >= 104900
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+ ]])],[
+ AC_MSG_RESULT(yes)
+ ],[:
+ if test x$use_reduce_exports = xauto; then
+ use_reduce_exports=no
+ else
+ if test x$use_reduce_exports = xyes; then
+ AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduced-exports.])
+ fi
+ fi
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([boost versions < 1.49 are known to have symbol visibility issues. Disabling reduced exports.])
+ ])
+ CPPFLAGS="$TEMP_CPPFLAGS"
+fi
+
AX_BOOST_SYSTEM
AX_BOOST_FILESYSTEM
AX_BOOST_PROGRAM_OPTIONS
@@ -672,6 +741,13 @@ else
AC_MSG_RESULT([no])
fi
+AC_MSG_CHECKING([whether to reduce exports])
+if test x$use_reduce_exports != xno; then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
if test "x$use_tests$build_bitcoind$use_qt" = "xnonono"; then
AC_MSG_ERROR([No targets! Please specify at least one of: --enable-cli --enable-daemon --enable-gui or --enable-tests])
fi
@@ -704,6 +780,7 @@ AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE)
AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR)
+AC_SUBST(RELDFLAGS)
AC_SUBST(LIBTOOL_LDFLAGS)
AC_SUBST(USE_UPNP)
AC_SUBST(USE_QRCODE)