From 2437bbbf152c983523b7577b68e16173e9b3a924 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 26 Oct 2018 17:26:02 -0400 Subject: cmake: detect PTHREAD_MUTEX_RECURSIVE by compiling The `check_symbol_exists` cannot detect `#define symbol 1` because it takes the address of the symbol to detect it, but the address of a literal is not allowed. Some platforms define `PTHREAD_MUTEX_RECURSIVE` by such a literal. Fixes #1158 --- CMakeLists.txt | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69e93deb..391afad2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,11 +82,6 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package (Threads) include(CheckIncludeFiles) -include(CheckSymbolExists) -CHECK_SYMBOL_EXISTS(PTHREAD_MUTEX_RECURSIVE pthread.h HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) -if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) - add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1) -endif() include (CheckCSourceCompiles) if (MSVC) @@ -112,6 +107,22 @@ else () add_definitions (-DHAVE_C99_MATH=0) endif () +if (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) + set (CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}") + check_c_source_compiles(" +#include + +int main(int argc, char* argv[]) { + (void)PTHREAD_MUTEX_RECURSIVE; + (void)argv; + return argc; +} + " HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) + if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) + add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1) + endif() +endif () + boost_report_value(PROJ_PLATFORM_NAME) boost_report_value(PROJ_COMPILER_NAME) -- cgit v1.2.3