diff options
41 files changed, 454 insertions, 25 deletions
diff --git a/Help/module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt b/Help/module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt new file mode 100644 index 0000000..35f433b --- /dev/null +++ b/Help/module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt @@ -0,0 +1,5 @@ + ``CMAKE_REQUIRED_LINK_DIRECTORIES`` + .. versionadded:: 3.31 + + A :ref:`;-list <CMake Language Lists>` of libraries search paths to pass to + the linker (see :command:`try_compile` for further details). diff --git a/Help/release/dev/macro-required-link-directories.rst b/Help/release/dev/macro-required-link-directories.rst new file mode 100644 index 0000000..1e4adc7 --- /dev/null +++ b/Help/release/dev/macro-required-link-directories.rst @@ -0,0 +1,99 @@ +macro-required-link-directories +------------------------------- + +* The :module:`CMakePushCheckState` module ``cmake_push_check_state``, + ``cmake_pop_check_state`` and ``cmake_reset_check_state`` macros + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCCompilerFlag` module ``check_c_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCSourceCompiles` module ``check_c_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCSourceRuns` module ``check_c_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCXXCompilerFlag` module ``check_cxx_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCXXSourceCompiles` module ``check_cxx_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCXXSourceRuns` module ``check_cxx_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCXXSymbolExists` module ``check_cxx_symbol_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckCompilerFlag` module ``check_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckFortranCompilerFlag` module ``check_fortran_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckFortranFunctionExists` module ``check_fortran_function_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckFortranSourceCompiles` module ``check_fortran_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckFortranSourceRuns` module ``check_fortran_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckFunctionExists` module ``check_function_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckIncludeFile` module ``check_include_file`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckIncludeFiles` module ``check_include_files`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckLibraryExists` module ``check_library_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCSourceCompiles` module ``check_objc_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCSourceRuns` module ``check_objc_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCXXCompilerFlag` module ``check_objcxx_compiler_flag`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCXXSourceCompiles` module ``check_objcxx_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckOBJCXXSourceRuns` module ``check_objcxx_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckPrototypeDefinition` module ``check_prototype_definition`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckSourceCompiles` module ``check_source_compiles`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckSourceRuns` module ``check_source_runs`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckStructHasMember` module ``check_struct_has_member`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckSymbolExists` module ``check_symbol_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckTypeSize` module ``check_type_size`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + +* The :module:`CheckVariableExists` module ``check_variable_exists`` macro + learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. diff --git a/Modules/CMakePushCheckState.cmake b/Modules/CMakePushCheckState.cmake index 3e519ee..50bd90b 100644 --- a/Modules/CMakePushCheckState.cmake +++ b/Modules/CMakePushCheckState.cmake @@ -12,6 +12,7 @@ This module defines three macros: ``CMAKE_PUSH_CHECK_STATE()`` be used to save, restore and reset (i.e., clear contents) the state of the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``, ``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``, +``CMAKE_REQUIRED_LINK_DIRECTORIES``, ``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the various Check-files coming with CMake, like e.g. ``check_function_exists()`` etc. @@ -45,6 +46,7 @@ macro(CMAKE_RESET_CHECK_STATE) set(CMAKE_REQUIRED_DEFINITIONS) set(CMAKE_REQUIRED_LINK_OPTIONS) set(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_REQUIRED_LINK_DIRECTORIES) set(CMAKE_REQUIRED_FLAGS) set(CMAKE_REQUIRED_QUIET) @@ -58,13 +60,14 @@ macro(CMAKE_PUSH_CHECK_STATE) math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1") - set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES}) - set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) - set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) - set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_OPTIONS}) - set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) - set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS}) - set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_QUIET}) + set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES}) + set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) + set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) + set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_OPTIONS}) + set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) + set(_CMAKE_REQUIRED_LINK_DIRECTORIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_DIRECTORIES}) + set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS}) + set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_QUIET}) if (${ARGC} GREATER 0 AND "${ARGV0}" STREQUAL "RESET") cmake_reset_check_state() @@ -77,13 +80,14 @@ macro(CMAKE_POP_CHECK_STATE) # don't pop more than we pushed if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0") - set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_LINK_OPTIONS ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - set(CMAKE_REQUIRED_QUIET ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_LINK_OPTIONS ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_LINK_DIRECTORIES ${_CMAKE_REQUIRED_LINK_DIRECTORIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + set(CMAKE_REQUIRED_QUIET ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1") endif() diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake index 0a658c4..7e58012 100644 --- a/Modules/CheckCCompilerFlag.cmake +++ b/Modules/CheckCCompilerFlag.cmake @@ -43,6 +43,8 @@ in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake index 801cf17..74c54fa 100644 --- a/Modules/CheckCSourceCompiles.cmake +++ b/Modules/CheckCSourceCompiles.cmake @@ -45,6 +45,8 @@ Check once if C source code can be built. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCSourceRuns.cmake b/Modules/CheckCSourceRuns.cmake index 7a34ece..4559215 100644 --- a/Modules/CheckCSourceRuns.cmake +++ b/Modules/CheckCSourceRuns.cmake @@ -38,6 +38,8 @@ subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake index 1465b9f..ec719e1 100644 --- a/Modules/CheckCXXCompilerFlag.cmake +++ b/Modules/CheckCXXCompilerFlag.cmake @@ -43,6 +43,8 @@ in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake index c9616d8..90c3e6a 100644 --- a/Modules/CheckCXXSourceCompiles.cmake +++ b/Modules/CheckCXXSourceCompiles.cmake @@ -45,6 +45,8 @@ Check once if C++ source code can be built. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCXXSourceRuns.cmake b/Modules/CheckCXXSourceRuns.cmake index 0f14a3a..f0a5ffc 100644 --- a/Modules/CheckCXXSourceRuns.cmake +++ b/Modules/CheckCXXSourceRuns.cmake @@ -38,6 +38,8 @@ subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckCXXSymbolExists.cmake b/Modules/CheckCXXSymbolExists.cmake index d807c17..bcd514f 100644 --- a/Modules/CheckCXXSymbolExists.cmake +++ b/Modules/CheckCXXSymbolExists.cmake @@ -51,6 +51,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt For example: diff --git a/Modules/CheckCompilerFlag.cmake b/Modules/CheckCompilerFlag.cmake index 6252767..d505142 100644 --- a/Modules/CheckCompilerFlag.cmake +++ b/Modules/CheckCompilerFlag.cmake @@ -43,6 +43,8 @@ in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckFortranCompilerFlag.cmake b/Modules/CheckFortranCompilerFlag.cmake index 7ab1247..eee7deb 100644 --- a/Modules/CheckFortranCompilerFlag.cmake +++ b/Modules/CheckFortranCompilerFlag.cmake @@ -45,6 +45,8 @@ flags in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckFortranFunctionExists.cmake b/Modules/CheckFortranFunctionExists.cmake index 4e5a246..6583c9a 100644 --- a/Modules/CheckFortranFunctionExists.cmake +++ b/Modules/CheckFortranFunctionExists.cmake @@ -29,16 +29,11 @@ Check if a Fortran function exists. The following variables may be set before calling this macro to modify the way the check is run: -``CMAKE_REQUIRED_LINK_OPTIONS`` - .. versionadded:: 3.14 - A :ref:`;-list <CMake Language Lists>` of options to add to the link - command (see :command:`try_compile` for further details). +.. include:: /module/CMAKE_REQUIRED_LINK_OPTIONS.txt -``CMAKE_REQUIRED_LIBRARIES`` - A :ref:`;-list <CMake Language Lists>` of libraries to add to the link - command. These can be the name of system libraries or they can be - :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for - further details). +.. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt + +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt #]=======================================================================] include_guard(GLOBAL) @@ -58,6 +53,12 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE) else() set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CFFE_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CFFE_LINK_DIRECTORIES) + endif() set(__CheckFunction_testFortranCompilerSource " program TESTFortran @@ -70,8 +71,11 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE) SOURCE_FROM_VAR testFortranCompiler.f __CheckFunction_testFortranCompilerSource ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS} ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES} + CMAKE_FLAGS + "${_CFFE_LINK_DIRECTORIES}" ) unset(__CheckFunction_testFortranCompilerSource) + unset(_CFFE_LINK_DIRECTORIES) if(${VARIABLE}) set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}") message(CHECK_PASS "found") diff --git a/Modules/CheckFortranSourceCompiles.cmake b/Modules/CheckFortranSourceCompiles.cmake index e9545ab..68e289c 100644 --- a/Modules/CheckFortranSourceCompiles.cmake +++ b/Modules/CheckFortranSourceCompiles.cmake @@ -53,6 +53,8 @@ Check once if Fortran source code can be built. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckFortranSourceRuns.cmake b/Modules/CheckFortranSourceRuns.cmake index 97d750a..808baf6 100644 --- a/Modules/CheckFortranSourceRuns.cmake +++ b/Modules/CheckFortranSourceRuns.cmake @@ -51,6 +51,8 @@ subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckFunctionExists.cmake b/Modules/CheckFunctionExists.cmake index 76fa76a..7111509 100644 --- a/Modules/CheckFunctionExists.cmake +++ b/Modules/CheckFunctionExists.cmake @@ -29,6 +29,8 @@ way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt .. note:: @@ -67,6 +69,12 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) else() set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CFE_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CFE_LINK_DIRECTORIES) + endif() if(CMAKE_REQUIRED_INCLUDES) set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") @@ -89,8 +97,10 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES} CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}" + "${_CFE_LINK_DIRECTORIES}" ) unset(_cfe_source) + unset(_CFE_LINK_DIRECTORIES) if(${VARIABLE}) set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}") diff --git a/Modules/CheckIncludeFile.cmake b/Modules/CheckIncludeFile.cmake index 1d8c9f7..d16c9f8 100644 --- a/Modules/CheckIncludeFile.cmake +++ b/Modules/CheckIncludeFile.cmake @@ -31,6 +31,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt See the :module:`CheckIncludeFiles` module to check for multiple headers @@ -87,6 +89,13 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CIF_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CIF_LINK_DIRECTORIES) + endif() + try_compile(${VARIABLE} SOURCE_FROM_VAR CheckIncludeFile.c _CIF_SOURCE_CONTENT COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} @@ -95,9 +104,11 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE) CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}" + "${_CIF_LINK_DIRECTORIES}" ) unset(_CIF_LINK_OPTIONS) unset(_CIF_LINK_LIBRARIES) + unset(_CIF_LINK_DIRECTORIES) if(${ARGC} EQUAL 3) set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE}) diff --git a/Modules/CheckIncludeFileCXX.cmake b/Modules/CheckIncludeFileCXX.cmake index 53d9a45..f4ac0cf 100644 --- a/Modules/CheckIncludeFileCXX.cmake +++ b/Modules/CheckIncludeFileCXX.cmake @@ -31,6 +31,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles` @@ -86,6 +88,13 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CIF_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CIF_LINK_DIRECTORIES) + endif() + try_compile(${VARIABLE} SOURCE_FROM_VAR CheckIncludeFile.cxx _CIF_SOURCE_CONTENT COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} @@ -94,9 +103,11 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}" + "${_CIF_LINK_DIRECTORIES}" ) unset(_CIF_LINK_OPTIONS) unset(_CIF_LINK_LIBRARIES) + unset(_CIF_LINK_DIRECTORIES) if(${ARGC} EQUAL 3) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE}) diff --git a/Modules/CheckIncludeFiles.cmake b/Modules/CheckIncludeFiles.cmake index 071df0c..3327222 100644 --- a/Modules/CheckIncludeFiles.cmake +++ b/Modules/CheckIncludeFiles.cmake @@ -37,6 +37,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX` @@ -126,6 +128,13 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CIF_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CIF_LINK_DIRECTORIES) + endif() + if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_START "Looking for ${_description}") endif() @@ -137,9 +146,11 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS} "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}" + "${_CIF_LINK_DIRECTORIES}" ) unset(_CIF_LINK_OPTIONS) unset(_CIF_LINK_LIBRARIES) + unset(_CIF_LINK_DIRECTORIES) if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_PASS "found") diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake index d48d7ec..58be342 100644 --- a/Modules/CheckLibraryExists.cmake +++ b/Modules/CheckLibraryExists.cmake @@ -35,6 +35,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] @@ -58,6 +60,12 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) set(CHECK_LIBRARY_EXISTS_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES}) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CLE_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${LOCATION};${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CLE_LINK_DIRECTORIES "-DLINK_DIRECTORIES:STRING=${LOCATION}") + endif() if(CMAKE_C_COMPILER_LOADED) set(_cle_source CheckFunctionExists.c) @@ -74,9 +82,10 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES} CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION} - -DLINK_DIRECTORIES:STRING=${LOCATION} + "${_CLE_LINK_DIRECTORIES}" ) unset(_cle_source) + unset(_CLE_LINK_DIRECTORIES) if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) diff --git a/Modules/CheckOBJCCompilerFlag.cmake b/Modules/CheckOBJCCompilerFlag.cmake index 102b137..183c7ec 100644 --- a/Modules/CheckOBJCCompilerFlag.cmake +++ b/Modules/CheckOBJCCompilerFlag.cmake @@ -45,6 +45,8 @@ flags in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckOBJCSourceCompiles.cmake b/Modules/CheckOBJCSourceCompiles.cmake index 1158b91..11d8ea9 100644 --- a/Modules/CheckOBJCSourceCompiles.cmake +++ b/Modules/CheckOBJCSourceCompiles.cmake @@ -47,6 +47,8 @@ Check once if Objective-C source can be built. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckOBJCSourceRuns.cmake b/Modules/CheckOBJCSourceRuns.cmake index 6b8160d..0611d67 100644 --- a/Modules/CheckOBJCSourceRuns.cmake +++ b/Modules/CheckOBJCSourceRuns.cmake @@ -40,6 +40,8 @@ can subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckOBJCXXCompilerFlag.cmake b/Modules/CheckOBJCXXCompilerFlag.cmake index 21daa5c..e185a31 100644 --- a/Modules/CheckOBJCXXCompilerFlag.cmake +++ b/Modules/CheckOBJCXXCompilerFlag.cmake @@ -45,6 +45,8 @@ flags in these variables can case a false negative result. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckOBJCXXSourceCompiles.cmake b/Modules/CheckOBJCXXSourceCompiles.cmake index af3ffde..35024d7 100644 --- a/Modules/CheckOBJCXXSourceCompiles.cmake +++ b/Modules/CheckOBJCXXSourceCompiles.cmake @@ -47,6 +47,8 @@ Check once if Objective-C++ source can be built. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckOBJCXXSourceRuns.cmake b/Modules/CheckOBJCXXSourceRuns.cmake index f867ac3..1192ff3 100644 --- a/Modules/CheckOBJCXXSourceRuns.cmake +++ b/Modules/CheckOBJCXXSourceRuns.cmake @@ -40,6 +40,8 @@ and can subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckPrototypeDefinition.cmake b/Modules/CheckPrototypeDefinition.cmake index c1a7a1c..e2bba1e 100644 --- a/Modules/CheckPrototypeDefinition.cmake +++ b/Modules/CheckPrototypeDefinition.cmake @@ -45,6 +45,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] @@ -83,6 +85,13 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB set(CMAKE_SYMBOL_EXISTS_INCLUDES) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CPD_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CPD_LINK_DIRECTORIES) + endif() + foreach(_FILE ${_HEADER}) string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER "#include <${_FILE}>\n") @@ -102,7 +111,9 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB ${CHECK_PROTOTYPE_DEFINITION_LIBS} CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS} "${CMAKE_SYMBOL_EXISTS_INCLUDES}" + "${_CPD_LINK_DIRECTORIES}" ) + unset(_CPD_LINK_DIRECTORIES) if (${_VARIABLE}) set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") diff --git a/Modules/CheckSourceCompiles.cmake b/Modules/CheckSourceCompiles.cmake index b79726a..2ce6e85 100644 --- a/Modules/CheckSourceCompiles.cmake +++ b/Modules/CheckSourceCompiles.cmake @@ -76,6 +76,8 @@ Check once if source code can be built for a given language. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckSourceRuns.cmake b/Modules/CheckSourceRuns.cmake index 84684b6..a0ddfee 100644 --- a/Modules/CheckSourceRuns.cmake +++ b/Modules/CheckSourceRuns.cmake @@ -62,6 +62,8 @@ subsequently be run. .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt #]=======================================================================] diff --git a/Modules/CheckStructHasMember.cmake b/Modules/CheckStructHasMember.cmake index 959f8e5..a088202 100644 --- a/Modules/CheckStructHasMember.cmake +++ b/Modules/CheckStructHasMember.cmake @@ -36,6 +36,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake index 621df75..a4950df 100644 --- a/Modules/CheckSymbolExists.cmake +++ b/Modules/CheckSymbolExists.cmake @@ -41,6 +41,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt For example: @@ -121,6 +123,13 @@ macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE) else() set(CMAKE_SYMBOL_EXISTS_INCLUDES) endif() + + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CSE_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CSE_LINK_DIRECTORIES) + endif() foreach(FILE ${FILES}) string(APPEND _CSE_SOURCE "#include <${FILE}>\n") @@ -159,7 +168,9 @@ int main(int argc, char** argv) CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS} "${CMAKE_SYMBOL_EXISTS_INCLUDES}" + "${_CSE_LINK_DIRECTORIES}" ) + unset(_CSE_LINK_DIRECTORIES) if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_PASS "found") diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake index 849d691..ee54d92 100644 --- a/Modules/CheckTypeSize.cmake +++ b/Modules/CheckTypeSize.cmake @@ -77,6 +77,8 @@ the way the check is run: .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt +.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt + .. include:: /module/CMAKE_REQUIRED_QUIET.txt ``CMAKE_EXTRA_INCLUDE_FILES`` @@ -140,6 +142,13 @@ function(__check_type_size_impl type var map builtin language) string(APPEND headers "#include \"${h}\"\n") endforeach() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CTS_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CTS_LINK_DIRECTORIES) + endif() + # Perform the check. set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin) file(READ ${__check_type_size_dir}/CheckTypeSize.c.in src_content) @@ -151,8 +160,10 @@ function(__check_type_size_impl type var map builtin language) CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}" "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}" + "${_CTS_LINK_DIRECTORIES}" COPY_FILE ${bin} ) + unset(_CTS_LINK_DIRECTORIES) if(HAVE_${var}) # The check compiled. Load information from the binary. diff --git a/Modules/CheckVariableExists.cmake b/Modules/CheckVariableExists.cmake index 9e5d710..37bef1b 100644 --- a/Modules/CheckVariableExists.cmake +++ b/Modules/CheckVariableExists.cmake @@ -59,13 +59,23 @@ macro(CHECK_VARIABLE_EXISTS VAR VARIABLE) else() set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES) endif() + + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CVE_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CVE_LINK_DIRECTORIES) + endif() + try_compile(${VARIABLE} SOURCES ${CMAKE_ROOT}/Modules/CheckVariableExists.c COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS} ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES} CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS} + "${_CVE_LINK_DIRECTORIES}" ) + unset(_CVE_LINK_DIRECTORIES) if(${VARIABLE}) set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}") if(NOT CMAKE_REQUIRED_QUIET) diff --git a/Modules/Internal/CheckSourceCompiles.cmake b/Modules/Internal/CheckSourceCompiles.cmake index 14a9a61..1eadc80 100644 --- a/Modules/Internal/CheckSourceCompiles.cmake +++ b/Modules/Internal/CheckSourceCompiles.cmake @@ -87,6 +87,13 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var) else() set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CSC_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CSC_LINK_DIRECTORIES) + endif() + if(CMAKE_REQUIRED_INCLUDES) set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") @@ -105,7 +112,9 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var) ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES} CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} "${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}" + "${_CSC_LINK_DIRECTORIES}" OUTPUT_VARIABLE OUTPUT) + unset(_CSC_LINK_DIRECTORIES) foreach(_regex ${_FAIL_REGEX}) if("${OUTPUT}" MATCHES "${_regex}") diff --git a/Modules/Internal/CheckSourceRuns.cmake b/Modules/Internal/CheckSourceRuns.cmake index c01081e..761598f 100644 --- a/Modules/Internal/CheckSourceRuns.cmake +++ b/Modules/Internal/CheckSourceRuns.cmake @@ -79,6 +79,12 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var) else() set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES) endif() + if(CMAKE_REQUIRED_LINK_DIRECTORIES) + set(_CSR_LINK_DIRECTORIES + "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") + else() + set(_CSR_LINK_DIRECTORIES) + endif() if(CMAKE_REQUIRED_INCLUDES) set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") @@ -98,7 +104,9 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var) CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH} "${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}" + "${_CSR_LINK_DIRECTORIES}" ) + unset(_CSR_LINK_DIRECTORIES) # if it did not compile make the return value fail code of 1 if(NOT ${_var}_COMPILED) set(${_var}_EXITCODE 1) diff --git a/Tests/CMakeTests/PushCheckStateTest.cmake.in b/Tests/CMakeTests/PushCheckStateTest.cmake.in index cbd879d..5b50cc5 100644 --- a/Tests/CMakeTests/PushCheckStateTest.cmake.in +++ b/Tests/CMakeTests/PushCheckStateTest.cmake.in @@ -5,6 +5,7 @@ set(CMAKE_EXTRA_INCLUDE_FILES file1) set(CMAKE_REQUIRED_INCLUDES dir1) set(CMAKE_REQUIRED_DEFINITIONS defs1 ) set(CMAKE_REQUIRED_LIBRARIES lib1) +set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir1) set(CMAKE_REQUIRED_FLAGS flag1) set(CMAKE_REQUIRED_QUIET 1) @@ -14,16 +15,17 @@ set(CMAKE_EXTRA_INCLUDE_FILES file2) set(CMAKE_REQUIRED_INCLUDES dir2) set(CMAKE_REQUIRED_DEFINITIONS defs2) set(CMAKE_REQUIRED_LIBRARIES lib2) +set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir2) set(CMAKE_REQUIRED_FLAGS flag2) set(CMAKE_REQUIRED_QUIET 2) cmake_push_check_state() set(CMAKE_EXTRA_INCLUDE_FILES file3) -set(CMAKE_REQUIRED_DEFINITIONS defs3) set(CMAKE_REQUIRED_INCLUDES dir3) set(CMAKE_REQUIRED_DEFINITIONS defs3) set(CMAKE_REQUIRED_LIBRARIES lib3) +set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir3) set(CMAKE_REQUIRED_FLAGS flag3) set(CMAKE_REQUIRED_QUIET 3) @@ -34,6 +36,7 @@ foreach(pair IN ITEMS REQUIRED_INCLUDES| REQUIRED_DEFINITIONS| REQUIRED_LIBRARIES| + REQUIRED_LINK_DIRECTORIES| REQUIRED_FLAGS| REQUIRED_QUIET| ) @@ -55,6 +58,7 @@ foreach(pair IN ITEMS REQUIRED_INCLUDES|dir2 REQUIRED_DEFINITIONS|defs2 REQUIRED_LIBRARIES|lib2 + REQUIRED_LINK_DIRECTORIES|linkdir2 REQUIRED_FLAGS|flag2 REQUIRED_QUIET|2 ) @@ -74,6 +78,7 @@ foreach(pair IN ITEMS REQUIRED_INCLUDES|dir1 REQUIRED_DEFINITIONS|defs1 REQUIRED_LIBRARIES|lib1 + REQUIRED_LINK_DIRECTORIES|linkdir1 REQUIRED_FLAGS|flag1 REQUIRED_QUIET|1 ) diff --git a/Tests/RunCMake/CheckModules/CheckLinkDirectories.cmake b/Tests/RunCMake/CheckModules/CheckLinkDirectories.cmake new file mode 100644 index 0000000..1bfb353 --- /dev/null +++ b/Tests/RunCMake/CheckModules/CheckLinkDirectories.cmake @@ -0,0 +1,122 @@ +cmake_policy(SET CMP0075 NEW) + +enable_language(C) +enable_language(CXX) + +function(test_check_result isSucceed functionName) + if(isSucceed AND NOT IS_NEED_SUCCESS) + message(SEND_ERROR "${functionName}: check succeeded instead of failure") + elseif((NOT isSucceed) AND IS_NEED_SUCCESS) + message(SEND_ERROR "${functionName}: check failed instead of success") + endif() +endfunction() + +# Common variables +set(validCSourceCode "int main() {return 0;}") + +### +# Checking checkers +### + +# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()` +# include(CheckCCompilerFlag) + +# Also checks common internal function `CMAKE_CHECK_SOURCE_COMPILES()` +include(CheckCSourceCompiles) +check_c_source_compiles("${validCSourceCode}" CHECK_C_SOURCE_COMPILES_SUCCEED) +test_check_result("${CHECK_C_SOURCE_COMPILES_SUCCEED}" check_c_source_compiles) + +# Also checks common internal function `CMAKE_CHECK_SOURCE_RUNS()` +include(CheckCSourceRuns) +check_c_source_runs("${validCSourceCode}" CHECK_C_SOURCE_RUNS_SUCCEED) +test_check_result("${CHECK_C_SOURCE_RUNS_SUCCEED}" check_c_source_runs) + +# Shares code with similar C checkers +# include(CheckCXXCompilerFlag) +# include(CheckCXXSourceCompiles) +# include(CheckCXXSourceRuns) +# include(CheckCXXSymbolExists) + +# Shares code with similar C checkers +# include(CheckCompilerFlag) +# include(CheckSourceCompiles) +# include(CheckSourceRuns) + +# Shares code with similar C checkers +# include(CheckFortranCompilerFlag) +# include(CheckFortranFunctionExists) # No way to test it +# include(CheckFortranSourceCompiles) +# include(CheckFortranSourceRuns) + +include(CheckFunctionExists) +check_function_exists (memcpy CHECK_FUNCTION_EXISTS_SUCCEED) +test_check_result("${CHECK_FUNCTION_EXISTS_SUCCEED}" check_function_exists) + +include(CheckIncludeFile) +check_include_file("stddef.h" CHECK_INCLUDE_FILE_SUCCEED) +test_check_result("${CHECK_INCLUDE_FILE_SUCCEED}" check_include_file) + +include(CheckIncludeFileCXX) +check_include_file_cxx("stddef.h" CHECK_INCLUDE_FILE_CXX_SUCCEED) +test_check_result("${CHECK_INCLUDE_FILE_CXX_SUCCEED}" check_include_file_cxx) + +include(CheckIncludeFiles) +check_include_files("stddef.h;stdlib.h" CHECK_INCLUDE_FILES_SUCCEED) +test_check_result("${CHECK_INCLUDE_FILES_SUCCEED}" check_include_files) + +include(CheckLibraryExists) +block(PROPAGATE HAVE_LIBM) + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_REQUIRED_LINK_DIRECTORIES) + check_library_exists(m ceil "" HAVE_LIBM) +endblock() + +if(HAVE_LIBM) + check_library_exists(m ceil "" CHECK_LIBRARY_EXISTS_SUCCEED) + test_check_result("${CHECK_LIBRARY_EXISTS_SUCCEED}" check_library_exists) +endif() + +# Shares code with similar C checkers +# include(CheckOBJCCompilerFlag) +# include(CheckOBJCSourceCompiles) +# include(CheckOBJCSourceRuns) + +# Shares code with similar C checkers +# include(CheckOBJCXXCompilerFlag) +# include(CheckOBJCXXSourceCompiles) +# include(CheckOBJCXXSourceRuns) + +include(CheckPrototypeDefinition) +block(PROPAGATE CHECK_PROTOTYPE_DEFINITION_WORKS) + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_REQUIRED_LINK_DIRECTORIES) + check_prototype_definition(memmove + "void *memmove(void *dest, const void *src, size_t n)" + "NULL" + "string.h" + CHECK_PROTOTYPE_DEFINITION_SUCCEED) +endblock() + +if (CHECK_PROTOTYPE_DEFINITION_WORKS) + check_prototype_definition(memmove + "void *memmove(void *dest, const void *src, size_t n)" + "NULL" + "string.h" + CHECK_PROTOTYPE_DEFINITION_SUCCEED) + test_check_result("${CHECK_PROTOTYPE_DEFINITION_SUCCEED}" check_prototype_definition) +endif() + +# It uses common internal function `CMAKE_CHECK_SOURCE_COMPILES()` +# include(CheckStructHasMember) + +include(CheckSymbolExists) +check_symbol_exists(errno "errno.h" CHECK_SYMBOL_EXISTS_SUCCEED) +test_check_result("${CHECK_SYMBOL_EXISTS_SUCCEED}" check_symbol_exists) + +include(CheckTypeSize) +check_type_size(int SIZEOF_INT) +test_check_result("${HAVE_SIZEOF_INT}" check_type_size) + +include(CheckVariableExists) +check_variable_exists(myTestVar CHECK_VARIABLE_EXISTS_SUCCEED) +test_check_result("${CHECK_VARIABLE_EXISTS_SUCCEED}" check_variable_exists) diff --git a/Tests/RunCMake/CheckModules/CheckLinkDirectoriesTestLib.cmake b/Tests/RunCMake/CheckModules/CheckLinkDirectoriesTestLib.cmake new file mode 100644 index 0000000..aa8a6c3 --- /dev/null +++ b/Tests/RunCMake/CheckModules/CheckLinkDirectoriesTestLib.cmake @@ -0,0 +1 @@ +add_subdirectory(TestLib) diff --git a/Tests/RunCMake/CheckModules/RunCMakeTest.cmake b/Tests/RunCMake/CheckModules/RunCMakeTest.cmake index 8a046e1..762204e 100644 --- a/Tests/RunCMake/CheckModules/RunCMakeTest.cmake +++ b/Tests/RunCMake/CheckModules/RunCMakeTest.cmake @@ -22,3 +22,31 @@ run_cmake(CheckIncludeFilesOkNoC) run_cmake(CheckIncludeFilesMissingLanguage) run_cmake(CheckIncludeFilesUnknownArgument) run_cmake(CheckIncludeFilesUnknownLanguage) + +block() + # Set common variables + set(libDir ${RunCMake_BINARY_DIR}/CheckLinkDirectoriesTestLib-build/TestLib/lib) + set(libName mySharedLibrary) + + # Build common part + run_cmake(CheckLinkDirectoriesTestLib) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_OUTPUT_MERGE 1) + run_cmake_command(CheckLinkDirectoriesTestLib ${CMAKE_COMMAND} --build .) + + # Run tests cleanly + unset(RunCMake_TEST_NO_CLEAN) + unset(RunCMake_TEST_OUTPUT_MERGE) + + set(RunCMake_TEST_VARIANT_DESCRIPTION "WithDirectories") + run_cmake_with_options("CheckLinkDirectories" + "-DCMAKE_REQUIRED_LIBRARIES=${libName}" + "-DCMAKE_REQUIRED_LINK_DIRECTORIES=${libDir}" + "-DIS_NEED_SUCCESS:BOOL=ON" + ) + set(RunCMake_TEST_VARIANT_DESCRIPTION "WithoutDirectories") + run_cmake_with_options("CheckLinkDirectories" + "-DCMAKE_REQUIRED_LIBRARIES=${libName}" + "-DIS_NEED_SUCCESS:BOOL=OFF" + ) +endblock() diff --git a/Tests/RunCMake/CheckModules/TestLib/CMakeLists.txt b/Tests/RunCMake/CheckModules/TestLib/CMakeLists.txt new file mode 100644 index 0000000..e8c4fed --- /dev/null +++ b/Tests/RunCMake/CheckModules/TestLib/CMakeLists.txt @@ -0,0 +1,3 @@ +project(TestLib C) +add_library(mySharedLibrary TestLib.c) +set_target_properties(mySharedLibrary PROPERTIES ARCHIVE_OUTPUT_DIRECTORY $<1:lib>) diff --git a/Tests/RunCMake/CheckModules/TestLib/TestLib.c b/Tests/RunCMake/CheckModules/TestLib/TestLib.c new file mode 100644 index 0000000..b4bc30d --- /dev/null +++ b/Tests/RunCMake/CheckModules/TestLib/TestLib.c @@ -0,0 +1,6 @@ +int myTestVar = 42; + +int TestSymbol(void) +{ + return 0; +} |