diff options
| author | Ben Boeckel <ben.boeckel@kitware.com> | 2018-10-26 17:26:02 -0400 |
|---|---|---|
| committer | Ben Boeckel <ben.boeckel@kitware.com> | 2018-10-26 18:23:37 -0400 |
| commit | 2437bbbf152c983523b7577b68e16173e9b3a924 (patch) | |
| tree | 7959773408ecad48888c053e23af41efc86aeb5d | |
| parent | 35eb793ff6b411cc88fc578b4d99e34cd25ca613 (diff) | |
| download | PROJ-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.txt | 21 |
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) |
