mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
Modify some modules that ship with CMake to use the new SOURCES_FROM_* arguments to try_compile / try_run as added by commitscb14ae2b87(try_compile: Add SOURCE_FROM_{ARG,VAR}, 2022-09-21) and611d801790(try_compile: Add SOURCE_FROM_FILE, 2022-09-22). This covers users which previously either used an existing file (but sometimes needed to rename it), or which wrote out their source in entirety. It does NOT cover users that actually need configure_file functionality, as those will be more involved to update and will thus be tackled in part 2.
103 lines
3.5 KiB
CMake
103 lines
3.5 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
#[=======================================================================[.rst:
|
|
CheckLibraryExists
|
|
------------------
|
|
|
|
Check if the function exists.
|
|
|
|
.. command:: CHECK_LIBRARY_EXISTS
|
|
|
|
.. code-block:: cmake
|
|
|
|
CHECK_LIBRARY_EXISTS(LIBRARY FUNCTION LOCATION VARIABLE)
|
|
|
|
::
|
|
|
|
LIBRARY - the name of the library you are looking for
|
|
FUNCTION - the name of the function
|
|
LOCATION - location where the library should be found
|
|
VARIABLE - variable to store the result
|
|
Will be created as an internal cache variable.
|
|
|
|
|
|
|
|
The following variables may be set before calling this macro to modify
|
|
the way the check is run:
|
|
|
|
``CMAKE_REQUIRED_FLAGS``
|
|
string of compile command line flags.
|
|
``CMAKE_REQUIRED_DEFINITIONS``
|
|
list of macros to define (-DFOO=bar).
|
|
``CMAKE_REQUIRED_LINK_OPTIONS``
|
|
.. versionadded:: 3.14
|
|
list of options to pass to link command.
|
|
``CMAKE_REQUIRED_LIBRARIES``
|
|
list of libraries to link.
|
|
``CMAKE_REQUIRED_QUIET``
|
|
.. versionadded:: 3.1
|
|
execute quietly without messages.
|
|
#]=======================================================================]
|
|
|
|
include_guard(GLOBAL)
|
|
|
|
macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
|
|
if(NOT DEFINED "${VARIABLE}")
|
|
set(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION
|
|
"-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}")
|
|
if(NOT CMAKE_REQUIRED_QUIET)
|
|
message(CHECK_START "Looking for ${FUNCTION} in ${LIBRARY}")
|
|
endif()
|
|
set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS)
|
|
if(CMAKE_REQUIRED_LINK_OPTIONS)
|
|
set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS
|
|
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
|
|
endif()
|
|
set(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY})
|
|
if(CMAKE_REQUIRED_LIBRARIES)
|
|
set(CHECK_LIBRARY_EXISTS_LIBRARIES
|
|
${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
|
|
endif()
|
|
|
|
if(CMAKE_C_COMPILER_LOADED)
|
|
set(_cle_source CheckFunctionExists.c)
|
|
elseif(CMAKE_CXX_COMPILER_LOADED)
|
|
set(_cle_source CheckFunctionExists.cxx)
|
|
else()
|
|
message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled")
|
|
endif()
|
|
|
|
try_compile(${VARIABLE}
|
|
SOURCE_FROM_FILE "${_cle_source}" "${CMAKE_ROOT}/Modules/CheckFunctionExists.c"
|
|
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
|
${CHECK_LIBRARY_EXISTS_LINK_OPTIONS}
|
|
LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
|
|
CMAKE_FLAGS
|
|
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
|
|
-DLINK_DIRECTORIES:STRING=${LOCATION}
|
|
OUTPUT_VARIABLE OUTPUT)
|
|
unset(_cle_source)
|
|
|
|
if(${VARIABLE})
|
|
if(NOT CMAKE_REQUIRED_QUIET)
|
|
message(CHECK_PASS "found")
|
|
endif()
|
|
set(${VARIABLE} 1 CACHE INTERNAL "Have library ${LIBRARY}")
|
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
"Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
|
|
"passed with the following output:\n"
|
|
"${OUTPUT}\n\n")
|
|
else()
|
|
if(NOT CMAKE_REQUIRED_QUIET)
|
|
message(CHECK_FAIL "not found")
|
|
endif()
|
|
set(${VARIABLE} "" CACHE INTERNAL "Have library ${LIBRARY}")
|
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
"Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
|
|
"failed with the following output:\n"
|
|
"${OUTPUT}\n\n")
|
|
endif()
|
|
endif()
|
|
endmacro()
|