diff --git a/Modules/CMakeBackwardCompatibilityC.cmake b/Modules/CMakeBackwardCompatibilityC.cmake index a41cc1cc3..b9a3a85a4 100644 --- a/Modules/CMakeBackwardCompatibilityC.cmake +++ b/Modules/CMakeBackwardCompatibilityC.cmake @@ -26,3 +26,27 @@ CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) INCLUDE (${CMAKE_ROOT}/Modules/FindX11.cmake) +INCLUDE (${CMAKE_ROOT}/Modules/FindThreads.cmake) + +SET (CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS}" CACHE STRING + "Thread library used.") + +SET (CMAKE_USE_PTHREADS "${CMAKE_USE_PTHREADS}" CACHE BOOL + "Use the pthreads library.") + +SET (CMAKE_USE_WIN32_THREADS "${CMAKE_USE_WIN32_THREADS}" CACHE BOOL + "Use the win32 thread library.") + +SET (CMAKE_HP_PTHREADS ${CMAKE_HP_PTHREADS} CACHE BOOL + "Use HP pthreads.") + +SET (CMAKE_USE_SPROC ${CMAKE_USE_SPROC} CACHE BOOL + "Use sproc libs.") + +MARK_AS_ADVANCED( +CMAKE_THREAD_LIBS +CMAKE_USE_PTHREADS +CMAKE_USE_WIN32_THREADS +CMAKE_USE_SPROC +CMAKE_HP_PTHREADS) + diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake index ce3d6e7d1..7388f2d98 100644 --- a/Modules/CheckLibraryExists.cmake +++ b/Modules/CheckLibraryExists.cmake @@ -8,7 +8,7 @@ MACRO(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) SET(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION -DCHECK_FUNCTION_EXISTS=${FUNCTION}) - +MESSAGE("Lib: ${LIBRARY} FUN: ${FUNCTION} LOC: ${LOCATION} VAR: ${VARIABLE} ") TRY_COMPILE(${VARIABLE} ${PROJECT_BINARY_DIR} ${CMAKE_ROOT}/Modules/CheckFunctionExists.c diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake new file mode 100644 index 000000000..5354b4da0 --- /dev/null +++ b/Modules/FindThreads.cmake @@ -0,0 +1,68 @@ +# This module determines the thread library of the system. +# The following variables are set +# CMAKE_THREAD_LIBS - the thread library to link into an application (-lpthread ) +# CMAKE_USE_SPROC - are we using sproc? +# CMAKE_USE_WIN32_THREADS - are we using WIN32 threads +# CMAKE_USE_PTHREADS - are we using pthreads +# + +INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) +INCLUDE (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake) + +IF(CMAKE_SYSTEM MATCHES IRIX) + CHECK_INCLUDE_FILE("sys/prctl.h" CMAKE_HAVE_SPROC_H) +ENDIF(CMAKE_SYSTEM MATCHES IRIX) + +CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) +IF(CMAKE_HAVE_PTHREAD_H) + IF(NOT CMAKE_HAVE_SPROC_H) + CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE) + IF(CMAKE_HAVE_PTHREADS_CREATE) + SET(CMAKE_THREAD_LIBS "-lpthreads") + ENDIF(CMAKE_HAVE_PTHREADS_CREATE) + CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE) + IF(CMAKE_HAVE_PTHREAD_CREATE) + SET(CMAKE_THREAD_LIBS "-lpthread") + ENDIF(CMAKE_HAVE_PTHREAD_CREATE) + IF(CMAKE_SYSTEM MATCHES "SunOS.*") + CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE) + IF(CMAKE_HAVE_THR_CREATE) + SET(CMAKE_THREAD_LIBS "-lthread") + ENDIF(CMAKE_HAVE_THR_CREATE) + ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*") + ENDIF(NOT CMAKE_HAVE_SPROC_H) +ENDIF(CMAKE_HAVE_PTHREAD_H) + +IF(CMAKE_HAVE_SPROC_H) + SET(CMAKE_USE_SPROC 1) +ENDIF(CMAKE_HAVE_SPROC_H) +IF(CMAKE_THREAD_LIBS) + SET(CMAKE_USE_PTHREADS 1) +ENDIF(CMAKE_THREAD_LIBS) + +IF(CMAKE_SYSTEM MATCHES "Windows") + SET(CMAKE_USE_WIN32_THREADS 1) +ENDIF(CMAKE_SYSTEM MATCHES "Windows") + +IF(CMAKE_SYSTEM MATCHES "HP-UX-*") + SET(CMAKE_THREAD_LIBS "-lcma") + SET(CMAKE_USE_PTHREADS 1) + SET(CMAKE_HP_PTHREADS 1) +ENDIF(CMAKE_SYSTEM MATCHES "HP-UX-*") + +IF(CMAKE_SYSTEM MATCHES "OSF1-V*") + SET(CMAKE_USE_PTHREADS 0) + SET(CMAKE_THREAD_LIBS ) +ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V*") + +IF(CMAKE_SYSTEM MATCHES "FreeBSD*") + SET(CMAKE_USE_PTHREADS 0) + SET(CMAKE_THREAD_LIBS ) +ENDIF(CMAKE_SYSTEM MATCHES "FreeBSD*") + +IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*") + SET(CMAKE_USE_PTHREADS 1) + SET(CMAKE_THREAD_LIBS ) + SET(CMAKE_USE_WIN32_THREADS 0) +ENDIF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*") +