build: linux does not always have execinfo.h (#7101)

Closes #7099
This commit is contained in:
Justin M. Keyes
2017-07-30 23:02:41 +02:00
committed by GitHub
parent 5cd68b3900
commit a7538371fe
4 changed files with 18 additions and 4 deletions

View File

@@ -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}") string(REGEX REPLACE "-Wl($| )" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
endif() endif()
check_c_source_compiles("
#include <execinfo.h>
int main(void)
{
void *trace[1];
int trace_size = backtrace(trace, 1);
return 0;
}
" HAVE_EXECINFO_BACKTRACE)
if(MSVC) if(MSVC)
# XXX: /W4 gives too many warnings. #3241 # XXX: /W4 gives too many warnings. #3241
add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
@@ -324,7 +334,6 @@ main(void)
return MSGPACK_OBJECT_FLOAT32; return MSGPACK_OBJECT_FLOAT32;
} }
" MSGPACK_HAS_FLOAT32) " MSGPACK_HAS_FLOAT32)
if(MSGPACK_HAS_FLOAT32) if(MSGPACK_HAS_FLOAT32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32")
endif() endif()

View File

@@ -68,4 +68,6 @@
#cmakedefine ORDER_BIG_ENDIAN #cmakedefine ORDER_BIG_ENDIAN
#define ENDIAN_INCLUDE_FILE <@ENDIAN_INCLUDE_FILE@> #define ENDIAN_INCLUDE_FILE <@ENDIAN_INCLUDE_FILE@>
#cmakedefine HAVE_EXECINFO_BACKTRACE
#endif // AUTO_CONFIG_H #endif // AUTO_CONFIG_H

View File

@@ -25,6 +25,10 @@ static uv_mutex_t mutex;
# include "log.c.generated.h" # include "log.c.generated.h"
#endif #endif
#ifdef HAVE_EXECINFO_BACKTRACE
# include <execinfo.h>
#endif
static bool log_try_create(char *fname) static bool log_try_create(char *fname)
{ {
if (fname == NULL || fname[0] == '\0') { if (fname == NULL || fname[0] == '\0') {
@@ -173,8 +177,7 @@ FILE *open_log_file(void)
return stderr; return stderr;
} }
#if defined(__linux__) #ifdef HAVE_EXECINFO_BACKTRACE
# include <execinfo.h>
void log_callstack(const char *const func_name, const int line_num) void log_callstack(const char *const func_name, const int line_num)
{ {
void *trace[100]; void *trace[100];

View File

@@ -61,7 +61,7 @@
__VA_ARGS__) __VA_ARGS__)
#endif #endif
#if defined(__linux__) #ifdef HAVE_EXECINFO_BACKTRACE
# define LOG_CALLSTACK() log_callstack(__func__, __LINE__) # define LOG_CALLSTACK() log_callstack(__func__, __LINE__)
#endif #endif