diff options
author | John Wiegley <johnw@newartisans.com> | 2012-04-28 05:23:36 -0500 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2012-04-28 05:23:36 -0500 |
commit | c8f58ea6860b1ce2d4f0d8d039fd3a58727743a5 (patch) | |
tree | 1bb073ee58788a2f292d7364ae9cf438659fb5b0 | |
parent | 1a45d745438b4571d23c19a0c3fe97f68bccd4f0 (diff) | |
download | fork-ledger-c8f58ea6860b1ce2d4f0d8d039fd3a58727743a5.tar.gz fork-ledger-c8f58ea6860b1ce2d4f0d8d039fd3a58727743a5.tar.bz2 fork-ledger-c8f58ea6860b1ce2d4f0d8d039fd3a58727743a5.zip |
Added support for building with Clang and libc++ in C++11
-rwxr-xr-x | acprep | 4 | ||||
-rw-r--r-- | src/pyutils.h | 2 | ||||
-rw-r--r-- | src/utils.cc | 4 | ||||
-rw-r--r-- | src/utils.h | 8 | ||||
-rw-r--r-- | tools/configure.ac | 28 |
5 files changed, 37 insertions, 9 deletions
@@ -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 |