FindThreads: move checking of the -pthread compiler flag into a macro
This allows a following commit to introduce a switch to prefer that check over searching for the explicit library names without breaking backward compatibility.
This commit is contained in:
parent
3f91919322
commit
46368eddfd
|
@ -22,6 +22,7 @@
|
|||
|
||||
#=============================================================================
|
||||
# Copyright 2002-2009 Kitware, Inc.
|
||||
# Copyright 2011-2014 Rolf Eike Beer <eike@sf-mail.de>
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
|
@ -48,7 +49,7 @@ endif()
|
|||
# Internal helper macro.
|
||||
# Do NOT even think about using it outside of this file!
|
||||
macro(_check_threads_lib LIBNAME FUNCNAME VARNAME)
|
||||
if(NOT CMAKE_HAVE_THREADS_LIBRARY)
|
||||
if(NOT Threads_FOUND)
|
||||
CHECK_LIBRARY_EXISTS(${LIBNAME} ${FUNCNAME} "" ${VARNAME})
|
||||
if(${VARNAME})
|
||||
set(CMAKE_THREAD_LIBS_INIT "-l${LIBNAME}")
|
||||
|
@ -58,6 +59,45 @@ macro(_check_threads_lib LIBNAME FUNCNAME VARNAME)
|
|||
endif ()
|
||||
endmacro()
|
||||
|
||||
# Internal helper macro.
|
||||
# Do NOT even think about using it outside of this file!
|
||||
macro(_check_pthreads_flag)
|
||||
if(NOT Threads_FOUND)
|
||||
# If we did not found -lpthread, -lpthread, or -lthread, look for -pthread
|
||||
if(NOT DEFINED THREADS_HAVE_PTHREAD_ARG)
|
||||
message(STATUS "Check if compiler accepts -pthread")
|
||||
try_run(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c
|
||||
CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
|
||||
COMPILE_OUTPUT_VARIABLE OUTPUT)
|
||||
|
||||
if(THREADS_HAVE_PTHREAD_ARG)
|
||||
if(THREADS_PTHREAD_ARG STREQUAL "2")
|
||||
set(Threads_FOUND TRUE)
|
||||
message(STATUS "Check if compiler accepts -pthread - yes")
|
||||
else()
|
||||
message(STATUS "Check if compiler accepts -pthread - no")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Check if compiler accepts -pthread - no")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
if(THREADS_HAVE_PTHREAD_ARG)
|
||||
set(Threads_FOUND TRUE)
|
||||
set(CMAKE_THREAD_LIBS_INIT "-pthread")
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
if(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD)
|
||||
# We have sproc
|
||||
set(CMAKE_USE_SPROC_INIT 1)
|
||||
|
@ -89,41 +129,7 @@ else()
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_HAVE_THREADS_LIBRARY)
|
||||
# If we did not found -lpthread, -lpthread, or -lthread, look for -pthread
|
||||
if("x${THREADS_HAVE_PTHREAD_ARG}" STREQUAL "x")
|
||||
message(STATUS "Check if compiler accepts -pthread")
|
||||
try_run(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c
|
||||
CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
|
||||
COMPILE_OUTPUT_VARIABLE OUTPUT)
|
||||
|
||||
if(THREADS_HAVE_PTHREAD_ARG)
|
||||
if(THREADS_PTHREAD_ARG STREQUAL "2")
|
||||
set(Threads_FOUND TRUE)
|
||||
message(STATUS "Check if compiler accepts -pthread - yes")
|
||||
else()
|
||||
message(STATUS "Check if compiler accepts -pthread - no")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Check if compiler accepts -pthread - no")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
if(THREADS_HAVE_PTHREAD_ARG)
|
||||
set(Threads_FOUND TRUE)
|
||||
set(CMAKE_THREAD_LIBS_INIT "-pthread")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
_check_pthreads_flag()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
Loading…
Reference in New Issue