Commit 56c7e207 authored by Peter Griess's avatar Peter Griess

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
parent a617a905
...@@ -24,11 +24,8 @@ ...@@ -24,11 +24,8 @@
#include <iterator> #include <iterator>
#include <glog/logging.h> #include <glog/logging.h>
#undef FOLLY_DEMANGLE #if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK
#if defined(__GNUG__) && __GNUG__ >= 4
# include <cxxabi.h> # include <cxxabi.h>
# define FOLLY_DEMANGLE 1
// From libiberty // From libiberty
// //
...@@ -310,7 +307,7 @@ size_t my_strlcpy(char* dest, const char* src, size_t size) { ...@@ -310,7 +307,7 @@ size_t my_strlcpy(char* dest, const char* src, size_t size) {
} // namespace } // namespace
#ifdef FOLLY_DEMANGLE #if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK
fbstring demangle(const char* name) { fbstring demangle(const char* name) {
int status; int status;
...@@ -376,7 +373,6 @@ size_t demangle(const char* name, char* out, size_t outSize) { ...@@ -376,7 +373,6 @@ size_t demangle(const char* name, char* out, size_t outSize) {
} }
#endif #endif
#undef FOLLY_DEMANGLE
namespace detail { namespace detail {
......
...@@ -141,6 +141,12 @@ AC_LINK_IFELSE( ...@@ -141,6 +141,12 @@ AC_LINK_IFELSE(
AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], AC_DEFINE([HAVE_WEAK_SYMBOLS], [1],
[Define to 1 if the linker supports weak symbols.])]) [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 # Check for clock_gettime(2). This is not in an AC_CHECK_FUNCS() because we
# want to link with librt if necessary. # want to link with librt if necessary.
AC_SEARCH_LIBS([clock_gettime], [rt], AC_SEARCH_LIBS([clock_gettime], [rt],
......
...@@ -463,6 +463,7 @@ struct ThisIsAVeryLongStructureName { ...@@ -463,6 +463,7 @@ struct ThisIsAVeryLongStructureName {
}; };
} // namespace folly_test } // namespace folly_test
#if FOLLY_HAVE_CPLUS_DEMANGLE_V3_CALLBACK
TEST(System, demangle) { TEST(System, demangle) {
char expected[] = "folly_test::ThisIsAVeryLongStructureName"; char expected[] = "folly_test::ThisIsAVeryLongStructureName";
EXPECT_STREQ( EXPECT_STREQ(
...@@ -482,6 +483,7 @@ TEST(System, demangle) { ...@@ -482,6 +483,7 @@ TEST(System, demangle) {
EXPECT_STREQ("folly_test", buf); EXPECT_STREQ("folly_test", buf);
} }
} }
#endif
namespace { namespace {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment