diff --git a/CMakeLists.txt b/CMakeLists.txt index 099f6e3787952a..594f631ba07d61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,16 @@ if(CMAKE_EXE_LINKER_FLAGS MATCHES "--sort-common" OR string(REGEX REPLACE "-Wl($| )" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") endif() +check_c_source_compiles(" +#include +int main(void) +{ + void *trace[1]; + int trace_size = backtrace(trace, 1); + return 0; +} +" HAVE_EXECINFO_BACKTRACE) + if(MSVC) # XXX: /W4 gives too many warnings. #3241 add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) @@ -324,7 +334,6 @@ main(void) return MSGPACK_OBJECT_FLOAT32; } " MSGPACK_HAS_FLOAT32) - if(MSGPACK_HAS_FLOAT32) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32") endif() diff --git a/config/config.h.in b/config/config.h.in index f26b5a50a87ca5..962eefd7a7678f 100644 --- a/config/config.h.in +++ b/config/config.h.in @@ -68,4 +68,6 @@ #cmakedefine ORDER_BIG_ENDIAN #define ENDIAN_INCLUDE_FILE <@ENDIAN_INCLUDE_FILE@> +#cmakedefine HAVE_EXECINFO_BACKTRACE + #endif // AUTO_CONFIG_H diff --git a/src/nvim/log.c b/src/nvim/log.c index 252fe5438d0c8f..b64aef3cac76ac 100644 --- a/src/nvim/log.c +++ b/src/nvim/log.c @@ -25,6 +25,10 @@ static uv_mutex_t mutex; # include "log.c.generated.h" #endif +#ifdef HAVE_EXECINFO_BACKTRACE +# include +#endif + static bool log_try_create(char *fname) { if (fname == NULL || fname[0] == '\0') { @@ -173,8 +177,7 @@ FILE *open_log_file(void) return stderr; } -#if defined(__linux__) -# include +#ifdef HAVE_EXECINFO_BACKTRACE void log_callstack(const char *const func_name, const int line_num) { void *trace[100]; diff --git a/src/nvim/log.h b/src/nvim/log.h index 2bd18f5776c2f2..743a8d17aa5e45 100644 --- a/src/nvim/log.h +++ b/src/nvim/log.h @@ -61,7 +61,7 @@ __VA_ARGS__) #endif -#if defined(__linux__) +#ifdef HAVE_EXECINFO_BACKTRACE # define LOG_CALLSTACK() log_callstack(__func__, __LINE__) #endif