summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOBATA Akio <obache@wizdas.com>2020-08-16 18:15:33 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-08-17 23:07:26 +0900
commita6be89461fec308f187f811ad952fc2b4019c561 (patch)
tree12105b32217b7c8061741bc7a47d4e578a954f35
parentf5a0ae91d37e4b965a3c26c9791e2958bb789754 (diff)
downloadtdelibs-a6be89461fec308f187f811ad952fc2b4019c561.tar.gz
tdelibs-a6be89461fec308f187f811ad952fc2b4019c561.zip
Allow to use backtrace(3) external library for kdebug
Signed-off-by: OBATA Akio <obache@wizdas.com> (cherry picked from commit 2167207adc49b498536a5a8533c27fc67e0c6e9c)
-rw-r--r--CMakeLists.txt13
-rw-r--r--config.h.cmake5
-rw-r--r--tdecore/kdebug.cpp6
3 files changed, 21 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9f646b13e..d1b2c29a0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -330,7 +330,18 @@ check_symbol_exists( gethostbyname2_r "netdb.h" HAVE_GETHOSTBYNAME2_R )
check_symbol_exists( gethostbyname_r "netdb.h" HAVE_GETHOSTBYNAME_R )
check_symbol_exists( gai_strerror "sys/types.h;sys/socket.h;netdb.h" HAVE_GAI_STRERROR )
check_symbol_exists( getaddrinfo "sys/types.h;sys/socket.h;netdb.h" HAVE_GETADDRINFO )
-check_symbol_exists( backtrace "execinfo.h" HAVE_BACKTRACE )
+if ( CMAKE_MAJOR_VERSION LESS "3" )
+ check_symbol_exists( backtrace "execinfo.h" HAVE_BACKTRACE )
+ if ( HAVE_BACKTRACE )
+ set ( Backtrace_LIBRARY "" )
+ set ( Backtrace_HEADER "execinfo.h" )
+ endif ()
+else ()
+ find_package( Backtrace )
+ if ( Backtrace_FOUND )
+ set ( HAVE_BACKTRACE 1 )
+ endif ()
+endif ()
check_cxx_source_compiles( "#include <cxxabi.h>
int main() { abi::__cxa_demangle(0, 0, 0, 0); return 0; }"
HAVE_ABI_CXA_DEMANGLE )
diff --git a/config.h.cmake b/config.h.cmake
index c7c9e116b..8900f2e86 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -66,8 +66,11 @@
/* Define if you have strvercmp prototype */
#cmakedefine HAVE_STRVERCMP_PROTO 1
-/* Define to 1 if execinfo.h exists and defines backtrace (GLIBC >= 2.1) */
+/* Define to 1 if GLIBC >= 2.1 compatible backtrace facility exists */
#cmakedefine HAVE_BACKTRACE 1
+#ifdef HAVE_BACKTRACE
+#define BACKTRACE_H <@Backtrace_HEADER@>
+#endif
/* Define to 1 if gcc (or may be some over compiller) provides abi::__cxa_demangle() */
#cmakedefine HAVE_ABI_CXA_DEMANGLE 1
diff --git a/tdecore/kdebug.cpp b/tdecore/kdebug.cpp
index d906f67fc..9cc32225c 100644
--- a/tdecore/kdebug.cpp
+++ b/tdecore/kdebug.cpp
@@ -59,7 +59,11 @@
#include <config.h>
#ifdef HAVE_BACKTRACE
-#include <execinfo.h>
+#include BACKTRACE_H
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
#ifdef HAVE_ABI_CXA_DEMANGLE
#include <cxxabi.h>