diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd9c67b..cabdc468 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,14 @@ find_package(Pango) find_package(GdkPixbuf) find_package(PAM) +find_package(Backtrace) +if(Backtrace_FOUND) + include_directories(${Backtrace_INCLUDE_DIRS}) + target_link_libraries(${Backtrace_LIBRARIES}) + add_definitions(-DSWAY_Backtrace_FOUND=1) + set(SWAY_Backtrace_HEADER "${Backtrace_HEADER}") +endif() + include(FeatureSummary) include(Manpage) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index a40f096d..95617e15 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,4 +1,5 @@ add_library(sway-common + ${SWAY_Backtrace_HEADER} ipc-client.c list.c log.c diff --git a/common/log.c b/common/log.c index 02aac4c1..f9242bf4 100644 --- a/common/log.c +++ b/common/log.c @@ -10,7 +10,6 @@ #include #include #include -#include int colored = 1; log_importance_t loglevel_default = L_ERROR; @@ -137,6 +136,7 @@ bool _sway_assert(bool condition, const char* format, ...) { } void error_handler(int sig) { +#if SWAY_Backtrace_FOUND int i; int max_lines = 20; void *array[max_lines]; @@ -155,5 +155,8 @@ void error_handler(int sig) { for (i = 0; (size_t)i < bt_len; i++) { sway_log(L_ERROR, "Backtrace: %s", bt[i]); } +#else + sway_log(L_ERROR, "Error: Signal %d.", sig); +#endif exit(1); }