Detect availability of cplus_demangle_v3_callback()
authorPeter Griess <pgriess@fb.com>
Fri, 20 Dec 2013 19:26:44 +0000 (11:26 -0800)
committerPeter Griess <pgriess@fb.com>
Thu, 26 Dec 2013 21:25:52 +0000 (13:25 -0800)
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
folly/configure.ac
folly/test/StringTest.cpp

index a90dd2250527037a07e0d4cf6977c9857f61cd2d..89373e10f5e0df4d97ee95319ce3494924c8219c 100644 (file)
 #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 {
 
index 825668f74a456e0f3a2a08b19df27e97c1c0ee95..8c7a41e545df94c756e1a4fbaa68f97fc71f5772 100644 (file)
@@ -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],
index 54547b5a674c92531140f1a2059052f1c6abe945..92f6ba97d76844e60850ec1f6e7240ce78b2a00d 100644 (file)
@@ -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 {