mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 19:00:54 -06:00
FindThreads: Revert libc symbol check to pthread_create
Since commit e9a1ddc594 (FindThreads: Replace the pthread symbol
checking in libc., 2018-11-18, v3.14.0-rc1~292^2) we check libc for
`pthread_kill` instead of `pthread_create`. However, on FreeBSD
`pthread_kill` is in libc but not `pthread_create`. Discussion in the
original merge request for the above commit also considered
`pthread_key_create`, `pthread_self`, and `pthread_attr_init`. Every
symbol seems to have some reason it is not an appropriate choice.
Revert to the pre-3.14 behavior of using `pthread_create` pending
further investigation.
This commit is contained in:
@@ -118,18 +118,8 @@ if(CMAKE_HAVE_PTHREAD_H)
|
||||
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. It is in the "signal.h" header, but
|
||||
# the purpose of this check is to verify that the pthread API works with
|
||||
# pure libc, so verify that "pthread.h" can be included too.
|
||||
CHECK_SYMBOL_EXISTS(pthread_kill "signal.h;pthread.h" CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
if(CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
CHECK_SYMBOL_EXISTS(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE)
|
||||
if(CMAKE_HAVE_LIBC_CREATE)
|
||||
set(CMAKE_THREAD_LIBS_INIT "")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(Threads_FOUND TRUE)
|
||||
@@ -154,7 +144,7 @@ if(CMAKE_HAVE_PTHREAD_H)
|
||||
_check_pthreads_flag()
|
||||
endif()
|
||||
|
||||
if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(Threads_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user