FindThreads: Try pthreads with no special option first (#11333)

QNX has the phtread stuff in the standard library.  The best way would
IMHO be to check if a program that uses pthread_* can be successfully
linked without specifying any linker option before trying out the
different flags.
This commit is contained in:
Rolf Eike Beer 2011-04-25 11:33:15 -04:00 committed by David Cole
parent 7dcbb66315
commit fd61be7140
1 changed files with 29 additions and 20 deletions

View File

@ -23,6 +23,7 @@
INCLUDE (CheckIncludeFiles) INCLUDE (CheckIncludeFiles)
INCLUDE (CheckLibraryExists) INCLUDE (CheckLibraryExists)
INCLUDE (CheckSymbolExists)
SET(Threads_FOUND FALSE) SET(Threads_FOUND FALSE)
# Do we have sproc? # Do we have sproc?
@ -44,33 +45,41 @@ ELSE()
# #
SET(CMAKE_HAVE_THREADS_LIBRARY) SET(CMAKE_HAVE_THREADS_LIBRARY)
IF(NOT THREADS_HAVE_PTHREAD_ARG) IF(NOT THREADS_HAVE_PTHREAD_ARG)
# Check if pthread functions are in normal C library
# Do we have -lpthreads CHECK_SYMBOL_EXISTS(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE)
CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE) IF(CMAKE_HAVE_LIBC_CREATE)
IF(CMAKE_HAVE_PTHREADS_CREATE) SET(CMAKE_THREAD_LIBS_INIT "")
SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
SET(CMAKE_HAVE_THREADS_LIBRARY 1) SET(CMAKE_HAVE_THREADS_LIBRARY 1)
SET(Threads_FOUND TRUE) SET(Threads_FOUND TRUE)
ENDIF() ENDIF()
# Ok, how about -lpthread IF(NOT CMAKE_HAVE_THREADS_LIBRARY)
CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE) # Do we have -lpthreads
IF(CMAKE_HAVE_PTHREAD_CREATE) CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
SET(CMAKE_THREAD_LIBS_INIT "-lpthread") IF(CMAKE_HAVE_PTHREADS_CREATE)
SET(Threads_FOUND TRUE) SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
SET(CMAKE_HAVE_THREADS_LIBRARY 1)
ENDIF()
IF(CMAKE_SYSTEM MATCHES "SunOS.*")
# On sun also check for -lthread
CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
IF(CMAKE_HAVE_THR_CREATE)
SET(CMAKE_THREAD_LIBS_INIT "-lthread")
SET(CMAKE_HAVE_THREADS_LIBRARY 1) SET(CMAKE_HAVE_THREADS_LIBRARY 1)
SET(Threads_FOUND TRUE) SET(Threads_FOUND TRUE)
ENDIF() ENDIF()
ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")
# Ok, how about -lpthread
CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE)
IF(CMAKE_HAVE_PTHREAD_CREATE)
SET(CMAKE_THREAD_LIBS_INIT "-lpthread")
SET(CMAKE_HAVE_THREADS_LIBRARY 1)
SET(Threads_FOUND TRUE)
ENDIF()
IF(CMAKE_SYSTEM MATCHES "SunOS.*")
# On sun also check for -lthread
CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
IF(CMAKE_HAVE_THR_CREATE)
SET(CMAKE_THREAD_LIBS_INIT "-lthread")
SET(CMAKE_HAVE_THREADS_LIBRARY 1)
SET(Threads_FOUND TRUE)
ENDIF()
ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")
ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY)
ENDIF(NOT THREADS_HAVE_PTHREAD_ARG) ENDIF(NOT THREADS_HAVE_PTHREAD_ARG)
IF(NOT CMAKE_HAVE_THREADS_LIBRARY) IF(NOT CMAKE_HAVE_THREADS_LIBRARY)
@ -111,7 +120,7 @@ ELSE()
ENDIF(CMAKE_HAVE_PTHREAD_H) ENDIF(CMAKE_HAVE_PTHREAD_H)
ENDIF() ENDIF()
IF(CMAKE_THREAD_LIBS_INIT) IF(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE)
SET(CMAKE_USE_PTHREADS_INIT 1) SET(CMAKE_USE_PTHREADS_INIT 1)
SET(Threads_FOUND TRUE) SET(Threads_FOUND TRUE)
ENDIF() ENDIF()