summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xacprep4
-rw-r--r--src/pyutils.h2
-rw-r--r--src/utils.cc4
-rw-r--r--src/utils.h8
-rw-r--r--tools/configure.ac28
5 files changed, 37 insertions, 9 deletions
diff --git a/acprep b/acprep
index e303ea61..463f028d 100755
--- a/acprep
+++ b/acprep
@@ -1022,14 +1022,11 @@ class PrepareBuild(CommandLineApp):
self.boost_lib_ident = "clang-darwin"
if self.options.use_cpp11:
- self.CXXFLAGS.append('-std=c++11')
- self.CXXFLAGS.append('-stdlib=libc++')
self.CXXFLAGS.append('-nostdlibinc')
self.CXXFLAGS.append('-isystem /usr/local/include')
self.CXXFLAGS.append('-isystem /usr/local/include/c++/v1')
self.CXXFLAGS.append('-isystem /usr/include')
- self.LDFLAGS.append('-stdlib=libc++')
self.LDFLAGS.append('/usr/local/lib/libc++.dylib')
self.log.debug('Using Clang ident: %s/%s' %
@@ -1231,6 +1228,7 @@ class PrepareBuild(CommandLineApp):
self.CXXFLAGS.append('-Wno-missing-noreturn')
self.CXXFLAGS.append('-Wno-disabled-macro-expansion')
self.CXXFLAGS.append('-Wno-unused-parameter')
+ self.CXXFLAGS.append('-Wno-c++98-compat')
self.CXXFLAGS.append('-fno-limit-debug-info')
#self.CXXFLAGS.append('-Wold-style-cast')
diff --git a/src/pyutils.h b/src/pyutils.h
index 44bb6d90..2c7dfaeb 100644
--- a/src/pyutils.h
+++ b/src/pyutils.h
@@ -180,7 +180,9 @@ namespace boost { namespace python {
BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(T,expr, pytype) \
BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE(T,expr)
+#if !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
BOOST_PYTHON_TO_PYTHON_BY_VALUE(ledger::string, ::PyUnicode_FromEncodedObject(::PyString_FromString(x.c_str()), "UTF-8", NULL), &PyUnicode_Type)
+#endif
} } // namespace boost::python
diff --git a/src/utils.cc b/src/utils.cc
index 17118904..ada6b600 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -489,7 +489,7 @@ void report_memory(std::ostream& out, bool report_all)
namespace ledger {
-#if defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#if !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
string::string() : std::string() {
TRACE_CTOR(string, "");
@@ -527,7 +527,7 @@ string::~string() throw() {
TRACE_DTOR(string);
}
-#endif // defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#endif // !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
string empty_string("");
diff --git a/src/utils.h b/src/utils.h
index 8f11f75a..34011e3f 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -72,7 +72,7 @@
namespace ledger {
using namespace boost;
-#if defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#if !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
class string;
#else
typedef std::string string;
@@ -93,7 +93,7 @@ namespace ledger {
}
#if BOOST_FILESYSTEM_VERSION == 3
-#if defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#if !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
namespace boost { namespace filesystem3 { namespace path_traits {
template<> struct is_pathable<ledger::string> { static const bool value = true; };
}}}
@@ -193,7 +193,7 @@ void report_memory(std::ostream& out, bool report_all = false);
namespace ledger {
-#if defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#if !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
class string : public std::string
{
@@ -272,7 +272,7 @@ inline bool operator!=(const char* __lhs, const string& __rhs)
inline bool operator!=(const string& __lhs, const char* __rhs)
{ return __lhs.compare(__rhs) != 0; }
-#endif // defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON)
+#endif // !defined(HAVE_CPP11) && (defined(VERIFY_ON) || defined(HAVE_BOOST_PYTHON))
extern string empty_string;
diff --git a/tools/configure.ac b/tools/configure.ac
index f7623f62..99eb7df5 100644
--- a/tools/configure.ac
+++ b/tools/configure.ac
@@ -527,6 +527,34 @@ AC_CACHE_CHECK(
AM_CONDITIONAL(HAVE_BOOST_TEST, test x$boost_test_avail_cv_ = xtrue)
+# check for C++11 and libc++
+AC_CACHE_CHECK(
+ [if C++11 and libc++ are available],
+ [cpp11_avail_cv_],
+ [cpp11_save_cxxflags=$CXXFLAGS
+ cpp11_save_ldflags=$LDFLAGS
+ CXXFLAGS="-std=c++11 -stdlib=libc++ $CXXFLAGS"
+ LDFLAGS="-stdlib=libc++ $LDFLAGS"
+ AC_LANG_PUSH(C++)
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <boost/regex.hpp>
+ #include <iostream>]],
+ [[boost::regex foo_regexp("Hello, world!");
+ for (auto i : "Hello, world")
+ std::cout << i << std::endl;]])],
+ [cpp11_avail_cv_=true],
+ [cpp11_avail_cv_=false])
+ AC_LANG_POP
+ CXXFLAGS="$cpp11_save_cxxflags"
+ LDFLAGS="$cpp11_save_ldflags"])
+
+if [test x$cpp11_avail_cv_ = xtrue]; then
+ AC_DEFINE([HAVE_CPP11], [1], [Whether C++11 and libc++ are available])
+ CXXFLAGS="-std=c++11 -stdlib=libc++ $CXXFLAGS"
+ LDFLAGS="-stdlib=libc++ $LDFLAGS"
+fi
+
# Checks for header files.
AC_HEADER_STDC
AC_HEADER_STAT