aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCory Fields <cory-nospam-@coryfields.com>2016-01-08 13:31:55 -0500
committerCory Fields <cory-nospam-@coryfields.com>2016-01-08 13:32:00 -0500
commitc0cf48d1ac5b661aa1dfbcd284c773f8f5bbe806 (patch)
tree10a02afac4991c43503827cdae1260c217fcbe1c
parent9de541a9c95a47c3f5c9e443a0ad3040b9791a2f (diff)
downloadbitcoin-c0cf48d1ac5b661aa1dfbcd284c773f8f5bbe806.tar.xz
c++11: add scoped enum fallbacks to CPPFLAGS rather than defining them locally
Due to include ordering, defining in one place was not enough to ensure correct usage. Use global defines so that we don't have to worry abou this ordering. Also add a comment in configure about the test.
-rw-r--r--configure.ac13
-rw-r--r--src/wallet/walletdb.cpp5
2 files changed, 12 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 07f9a4a6f3..347016064c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -619,6 +619,17 @@ if test x$use_boost = xyes; then
BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB"
+
+dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums
+dnl using c++98 constructs. Unfortunately, this implementation detail leaked into
+dnl the abi. This was fixed in 1.57.
+
+dnl When building against that installed version using c++11, the headers pick up
+dnl on the native c++11 scoped enum support and enable it, however it will fail to
+dnl link. This can be worked around by disabling c++11 scoped enums if linking will
+dnl fail.
+dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51.
+
TEMP_LIBS="$LIBS"
LIBS="$BOOST_LIBS $LIBS"
TEMP_CPPFLAGS="$CPPFLAGS"
@@ -640,7 +651,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
choke;
#endif
]])],
- [AC_MSG_RESULT(mismatched); AC_DEFINE(FORCE_BOOST_EMULATED_SCOPED_ENUMS, 1, [Define this symbol if boost scoped enums are emulated])], [AC_MSG_RESULT(ok)])
+ [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)])
LIBS="$TEMP_LIBS"
CPPFLAGS="$TEMP_CPPFLAGS"
diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp
index 5266946ca0..67511976df 100644
--- a/src/wallet/walletdb.cpp
+++ b/src/wallet/walletdb.cpp
@@ -15,11 +15,6 @@
#include "utiltime.h"
#include "wallet/wallet.h"
-#if defined(FORCE_BOOST_EMULATED_SCOPED_ENUMS)
-#define BOOST_NO_SCOPED_ENUMS
-#define BOOST_NO_CXX11_SCOPED_ENUMS
-#endif
-
#include <boost/version.hpp>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>