diff options
Diffstat (limited to 'Modules/FindThreads.cmake')
-rw-r--r-- | Modules/FindThreads.cmake | 104 |
1 files changed, 43 insertions, 61 deletions
diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake index 691b1b7..9c96a1b 100644 --- a/Modules/FindThreads.cmake +++ b/Modules/FindThreads.cmake @@ -12,7 +12,6 @@ The following variables are set :: CMAKE_THREAD_LIBS_INIT - the thread library - CMAKE_USE_SPROC_INIT - are we using sproc? CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? CMAKE_USE_PTHREADS_INIT - are we using pthreads CMAKE_HP_PTHREADS_INIT - are we using hp pthreads @@ -23,12 +22,6 @@ The following import target is created Threads::Threads -For systems with multiple thread libraries, caller can set - -:: - - CMAKE_THREAD_PREFER_PTHREAD - If the use of the -pthread compiler and linker flag is preferred then the caller can set @@ -55,12 +48,6 @@ else() message(FATAL_ERROR "FindThreads only works if either C or CXX language is enabled") endif() -# Do we have sproc? -if(CMAKE_SYSTEM_NAME MATCHES IRIX AND NOT CMAKE_THREAD_PREFER_PTHREAD) - include (CheckIncludeFiles) - CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h" CMAKE_HAVE_SPROC_H) -endif() - # Internal helper macro. # Do NOT even think about using it outside of this file! macro(_check_threads_lib LIBNAME FUNCNAME VARNAME) @@ -113,58 +100,53 @@ macro(_check_pthreads_flag) endif() endmacro() -if(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD) - # We have sproc - set(CMAKE_USE_SPROC_INIT 1) +# Do we have pthreads? +if(CMAKE_C_COMPILER_LOADED) + CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) else() - # Do we have pthreads? - if(CMAKE_C_COMPILER_LOADED) - CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) - else() - CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H) - endif() - if(CMAKE_HAVE_PTHREAD_H) - - # - # We have pthread.h - # Let's check for the library now. - # - set(CMAKE_HAVE_THREADS_LIBRARY) - if(NOT THREADS_HAVE_PTHREAD_ARG) - # Check if pthread functions are in normal C library. - # If the pthread functions already exist in C library, we could just use - # them instead of linking to the additional pthread library. We could - # try to check any pthread symbol name, but here is an exception. If we - # use clang asan build, we will find the pthread_create() symbol in the - # libc(libasan). However, it doesn't have the full pthread implementation. - # So, we can't assume that we have the pthread implementation in libc - # using the pthread_create() checking here. Then, we turn to check the - # pthread_kill() symbol instead. - CHECK_SYMBOL_EXISTS(pthread_kill pthread.h CMAKE_HAVE_LIBC_PTHREAD_KILL) - if(CMAKE_HAVE_LIBC_PTHREAD_KILL) - set(CMAKE_THREAD_LIBS_INIT "") - set(CMAKE_HAVE_THREADS_LIBRARY 1) - set(Threads_FOUND TRUE) - else() - - # Check for -pthread first if enabled. This is the recommended - # way, but not backwards compatible as one must also pass -pthread - # as compiler flag then. - if (THREADS_PREFER_PTHREAD_FLAG) - _check_pthreads_flag() - endif () - - _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE) - _check_threads_lib(pthread pthread_create CMAKE_HAVE_PTHREAD_CREATE) - if(CMAKE_SYSTEM_NAME MATCHES "SunOS") - # On sun also check for -lthread - _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE) - endif() + CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H) +endif() +if(CMAKE_HAVE_PTHREAD_H) + + # + # We have pthread.h + # Let's check for the library now. + # + set(CMAKE_HAVE_THREADS_LIBRARY) + if(NOT THREADS_HAVE_PTHREAD_ARG) + # Check if pthread functions are in normal C library. + # If the pthread functions already exist in C library, we could just use + # them instead of linking to the additional pthread library. We could + # try to check any pthread symbol name, but here is an exception. If we + # use clang asan build, we will find the pthread_create() symbol in the + # libc(libasan). However, it doesn't have the full pthread implementation. + # So, we can't assume that we have the pthread implementation in libc + # using the pthread_create() checking here. Then, we turn to check the + # pthread_kill() symbol instead. + CHECK_SYMBOL_EXISTS(pthread_kill pthread.h CMAKE_HAVE_LIBC_PTHREAD_KILL) + if(CMAKE_HAVE_LIBC_PTHREAD_KILL) + set(CMAKE_THREAD_LIBS_INIT "") + set(CMAKE_HAVE_THREADS_LIBRARY 1) + set(Threads_FOUND TRUE) + else() + + # Check for -pthread first if enabled. This is the recommended + # way, but not backwards compatible as one must also pass -pthread + # as compiler flag then. + if (THREADS_PREFER_PTHREAD_FLAG) + _check_pthreads_flag() + endif () + + _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE) + _check_threads_lib(pthread pthread_create CMAKE_HAVE_PTHREAD_CREATE) + if(CMAKE_SYSTEM_NAME MATCHES "SunOS") + # On sun also check for -lthread + _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE) endif() endif() - - _check_pthreads_flag() endif() + + _check_pthreads_flag() endif() if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD_KILL) |