From 944d939ce13980e02d603df3038eb7c4b8feac84 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 12 Apr 2017 13:51:00 +0000 Subject: [PATCH] Fix detection of backtrace() availability on FreeBSD On FreeBSD backtrace is not part of libc and depends on libexecinfo being available. Instead of using manual checks we can use the builtin CMake module FindBacktrace.cmake to detect availability of backtrace() in a portable way. Patch By: Alex Richardson Differential Revision: https://reviews.llvm.org/D27143 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300062 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/config-ix.cmake | 5 +++-- include/llvm/Config/config.h.cmake | 2 ++ lib/Support/CMakeLists.txt | 5 ++++- lib/Support/Unix/Signals.inc | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake index e5050018046..0331d0fa10a 100755 --- a/cmake/config-ix.cmake +++ b/cmake/config-ix.cmake @@ -46,7 +46,6 @@ endfunction() check_include_file(dirent.h HAVE_DIRENT_H) check_include_file(dlfcn.h HAVE_DLFCN_H) check_include_file(errno.h HAVE_ERRNO_H) -check_include_file(execinfo.h HAVE_EXECINFO_H) check_include_file(fcntl.h HAVE_FCNTL_H) check_include_file(inttypes.h HAVE_INTTYPES_H) check_include_file(link.h HAVE_LINK_H) @@ -165,7 +164,9 @@ endif() # function checks check_symbol_exists(arc4random "stdlib.h" HAVE_DECL_ARC4RANDOM) -check_symbol_exists(backtrace "execinfo.h" HAVE_BACKTRACE) +find_package(Backtrace) +set(HAVE_BACKTRACE ${Backtrace_FOUND}) +set(BACKTRACE_HEADER ${Backtrace_HEADER}) check_symbol_exists(_Unwind_Backtrace "unwind.h" HAVE__UNWIND_BACKTRACE) check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE) check_symbol_exists(sysconf unistd.h HAVE_SYSCONF) diff --git a/include/llvm/Config/config.h.cmake b/include/llvm/Config/config.h.cmake index 3ee48a0d1ba..a3c919d3980 100644 --- a/include/llvm/Config/config.h.cmake +++ b/include/llvm/Config/config.h.cmake @@ -16,6 +16,8 @@ /* Define to 1 if you have the `backtrace' function. */ #cmakedefine HAVE_BACKTRACE ${HAVE_BACKTRACE} +#define BACKTRACE_HEADER <${BACKTRACE_HEADER}> + /* Define to 1 if you have the header file. */ #cmakedefine HAVE_CRASHREPORTERCLIENT_H diff --git a/lib/Support/CMakeLists.txt b/lib/Support/CMakeLists.txt index a46167e8714..491614b4bf6 100644 --- a/lib/Support/CMakeLists.txt +++ b/lib/Support/CMakeLists.txt @@ -9,6 +9,9 @@ elseif( CMAKE_HOST_UNIX ) if( HAVE_LIBDL ) set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) endif() + if( HAVE_BACKTRACE ) + set(system_libs ${system_libs} ${Backtrace_LIBRARIES}) + endif() if(LLVM_ENABLE_TERMINFO) if(HAVE_TERMINFO) set(system_libs ${system_libs} ${TERMINFO_LIBS}) @@ -140,7 +143,7 @@ add_llvm_library(LLVMSupport Windows ${LLVM_MAIN_INCLUDE_DIR}/llvm/ADT ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support - + ${Backtrace_INCLUDE_DIRS} LINK_LIBS ${system_libs} ) diff --git a/lib/Support/Unix/Signals.inc b/lib/Support/Unix/Signals.inc index 756d0f5a95e..88ad21e9806 100644 --- a/lib/Support/Unix/Signals.inc +++ b/lib/Support/Unix/Signals.inc @@ -25,8 +25,8 @@ #include "llvm/Support/raw_ostream.h" #include #include -#if HAVE_EXECINFO_H -# include // For backtrace(). +#ifdef HAVE_BACKTRACE +# include BACKTRACE_HEADER // For backtrace(). #endif #if HAVE_SIGNAL_H #include -- 2.50.1