aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2018-10-26 17:26:02 -0400
committerBen Boeckel <ben.boeckel@kitware.com>2018-10-26 18:23:37 -0400
commit2437bbbf152c983523b7577b68e16173e9b3a924 (patch)
tree7959773408ecad48888c053e23af41efc86aeb5d
parent35eb793ff6b411cc88fc578b4d99e34cd25ca613 (diff)
downloadPROJ-2437bbbf152c983523b7577b68e16173e9b3a924.tar.gz
PROJ-2437bbbf152c983523b7577b68e16173e9b3a924.zip
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
-rw-r--r--CMakeLists.txt21
1 files 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 <pthread.h>
+
+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)