From 56c7e2070808ff450f31033da626aea6747921c1 Mon Sep 17 00:00:00 2001 From: Peter Griess <pgriess@fb.com> Date: Fri, 20 Dec 2013 11:26:44 -0800 Subject: [PATCH] Detect availability of cplus_demangle_v3_callback() Summary: - Add autoconf check for cplus_demangle_v3_callback() in libiberty and avoid is usage when not available. Clang/libc++ on Mac OS X doesn't support this. Test Plan: - fbconfig -r folly && fbmake runtests - ./configure && make check on Mac OS X Reviewed By: tudorb@fb.com FB internal diff: D1108543 --- folly/String.cpp | 8 ++------ folly/configure.ac | 6 ++++++ folly/test/StringTest.cpp | 2 ++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/folly/String.cpp b/folly/String.cpp index a90dd225..89373e10 100644 --- a/folly/String.cpp +++ b/folly/String.cpp @@ -24,11 +24,8 @@ #include <iterator> #include <glog/logging.h> -#undef FOLLY_DEMANGLE - -#if defined(__GNUG__) && __GNUG__ >= 4 +#if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK # include <cxxabi.h> -# define FOLLY_DEMANGLE 1 // From libiberty // @@ -310,7 +307,7 @@ size_t my_strlcpy(char* dest, const char* src, size_t size) { } // namespace -#ifdef FOLLY_DEMANGLE +#if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK fbstring demangle(const char* name) { int status; @@ -376,7 +373,6 @@ size_t demangle(const char* name, char* out, size_t outSize) { } #endif -#undef FOLLY_DEMANGLE namespace detail { diff --git a/folly/configure.ac b/folly/configure.ac index 825668f7..8c7a41e5 100644 --- a/folly/configure.ac +++ b/folly/configure.ac @@ -141,6 +141,12 @@ AC_LINK_IFELSE( AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [Define to 1 if the linker supports weak symbols.])]) +AC_SEARCH_LIBS([cplus_demangle_v3_callback], [iberty]) +if test "$ac_cv_search_cplus_demangle_v3_callback" != "no" ; then + AC_DEFINE([HAVE_CPLUS_DEMANGLE_V3_CALLBACK], [1], + [Define to 1 if we have cplus_demangle_v3_callback.]) +fi + # Check for clock_gettime(2). This is not in an AC_CHECK_FUNCS() because we # want to link with librt if necessary. AC_SEARCH_LIBS([clock_gettime], [rt], diff --git a/folly/test/StringTest.cpp b/folly/test/StringTest.cpp index 54547b5a..92f6ba97 100644 --- a/folly/test/StringTest.cpp +++ b/folly/test/StringTest.cpp @@ -463,6 +463,7 @@ struct ThisIsAVeryLongStructureName { }; } // namespace folly_test +#if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK TEST(System, demangle) { char expected[] = "folly_test::ThisIsAVeryLongStructureName"; EXPECT_STREQ( @@ -482,6 +483,7 @@ TEST(System, demangle) { EXPECT_STREQ("folly_test", buf); } } +#endif namespace { -- 2.34.1