Просмотр исходного кода

Check*: Add option to pass link directories into checks

Aliaksandr Averchanka 1 год назад
Родитель
Сommit
9e95bd49f2
41 измененных файлов с 454 добавлено и 25 удалено
  1. 5 0
      Help/module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
  2. 99 0
      Help/release/dev/macro-required-link-directories.rst
  3. 18 14
      Modules/CMakePushCheckState.cmake
  4. 2 0
      Modules/CheckCCompilerFlag.cmake
  5. 2 0
      Modules/CheckCSourceCompiles.cmake
  6. 2 0
      Modules/CheckCSourceRuns.cmake
  7. 2 0
      Modules/CheckCXXCompilerFlag.cmake
  8. 2 0
      Modules/CheckCXXSourceCompiles.cmake
  9. 2 0
      Modules/CheckCXXSourceRuns.cmake
  10. 2 0
      Modules/CheckCXXSymbolExists.cmake
  11. 2 0
      Modules/CheckCompilerFlag.cmake
  12. 2 0
      Modules/CheckFortranCompilerFlag.cmake
  13. 13 9
      Modules/CheckFortranFunctionExists.cmake
  14. 2 0
      Modules/CheckFortranSourceCompiles.cmake
  15. 2 0
      Modules/CheckFortranSourceRuns.cmake
  16. 10 0
      Modules/CheckFunctionExists.cmake
  17. 11 0
      Modules/CheckIncludeFile.cmake
  18. 11 0
      Modules/CheckIncludeFileCXX.cmake
  19. 11 0
      Modules/CheckIncludeFiles.cmake
  20. 10 1
      Modules/CheckLibraryExists.cmake
  21. 2 0
      Modules/CheckOBJCCompilerFlag.cmake
  22. 2 0
      Modules/CheckOBJCSourceCompiles.cmake
  23. 2 0
      Modules/CheckOBJCSourceRuns.cmake
  24. 2 0
      Modules/CheckOBJCXXCompilerFlag.cmake
  25. 2 0
      Modules/CheckOBJCXXSourceCompiles.cmake
  26. 2 0
      Modules/CheckOBJCXXSourceRuns.cmake
  27. 11 0
      Modules/CheckPrototypeDefinition.cmake
  28. 2 0
      Modules/CheckSourceCompiles.cmake
  29. 2 0
      Modules/CheckSourceRuns.cmake
  30. 2 0
      Modules/CheckStructHasMember.cmake
  31. 11 0
      Modules/CheckSymbolExists.cmake
  32. 11 0
      Modules/CheckTypeSize.cmake
  33. 10 0
      Modules/CheckVariableExists.cmake
  34. 9 0
      Modules/Internal/CheckSourceCompiles.cmake
  35. 8 0
      Modules/Internal/CheckSourceRuns.cmake
  36. 6 1
      Tests/CMakeTests/PushCheckStateTest.cmake.in
  37. 122 0
      Tests/RunCMake/CheckModules/CheckLinkDirectories.cmake
  38. 1 0
      Tests/RunCMake/CheckModules/CheckLinkDirectoriesTestLib.cmake
  39. 28 0
      Tests/RunCMake/CheckModules/RunCMakeTest.cmake
  40. 3 0
      Tests/RunCMake/CheckModules/TestLib/CMakeLists.txt
  41. 6 0
      Tests/RunCMake/CheckModules/TestLib/TestLib.c

+ 5 - 0
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).

+ 99 - 0
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.

+ 18 - 14
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
 be used to save, restore and reset (i.e., clear contents) the state of
 the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``,
 the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``,
 ``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``,
 ``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``,
+``CMAKE_REQUIRED_LINK_DIRECTORIES``,
 ``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the
 ``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the
 various Check-files coming with CMake, like e.g. ``check_function_exists()``
 various Check-files coming with CMake, like e.g. ``check_function_exists()``
 etc.
 etc.
@@ -45,6 +46,7 @@ macro(CMAKE_RESET_CHECK_STATE)
   set(CMAKE_REQUIRED_DEFINITIONS)
   set(CMAKE_REQUIRED_DEFINITIONS)
   set(CMAKE_REQUIRED_LINK_OPTIONS)
   set(CMAKE_REQUIRED_LINK_OPTIONS)
   set(CMAKE_REQUIRED_LIBRARIES)
   set(CMAKE_REQUIRED_LIBRARIES)
+  set(CMAKE_REQUIRED_LINK_DIRECTORIES)
   set(CMAKE_REQUIRED_FLAGS)
   set(CMAKE_REQUIRED_FLAGS)
   set(CMAKE_REQUIRED_QUIET)
   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")
   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")
   if (${ARGC} GREATER 0 AND "${ARGV0}" STREQUAL "RESET")
     cmake_reset_check_state()
     cmake_reset_check_state()
@@ -77,13 +80,14 @@ macro(CMAKE_POP_CHECK_STATE)
 # don't pop more than we pushed
 # don't pop more than we pushed
   if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0")
   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")
     math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1")
   endif()
   endif()

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckCSourceRuns.cmake

@@ -38,6 +38,8 @@ subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 #]=======================================================================]
 #]=======================================================================]
 
 

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckCXXSourceRuns.cmake

@@ -38,6 +38,8 @@ subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckCXXSymbolExists.cmake

@@ -51,6 +51,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 For example:
 For example:

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 13 - 9
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 following variables may be set before calling this macro to modify
 the way the check is run:
 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)
 include_guard(GLOBAL)
@@ -58,6 +53,12 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
     else()
     else()
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
     endif()
     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
     set(__CheckFunction_testFortranCompilerSource
     "
     "
       program TESTFortran
       program TESTFortran
@@ -70,8 +71,11 @@ macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
       SOURCE_FROM_VAR testFortranCompiler.f __CheckFunction_testFortranCompilerSource
       SOURCE_FROM_VAR testFortranCompiler.f __CheckFunction_testFortranCompilerSource
       ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
       ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
+      CMAKE_FLAGS
+      "${_CFFE_LINK_DIRECTORIES}"
     )
     )
     unset(__CheckFunction_testFortranCompilerSource)
     unset(__CheckFunction_testFortranCompilerSource)
+    unset(_CFFE_LINK_DIRECTORIES)
     if(${VARIABLE})
     if(${VARIABLE})
       set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
       set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
       message(CHECK_PASS "found")
       message(CHECK_PASS "found")

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckFortranSourceRuns.cmake

@@ -51,6 +51,8 @@ subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 10 - 0
Modules/CheckFunctionExists.cmake

@@ -29,6 +29,8 @@ way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 .. note::
 .. note::
@@ -67,6 +69,12 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
     else()
     else()
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
       set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
     endif()
     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)
     if(CMAKE_REQUIRED_INCLUDES)
       set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES
       set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES
         "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
         "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
@@ -89,8 +97,10 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
       ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
       ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
       "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
       "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
+      "${_CFE_LINK_DIRECTORIES}"
       )
       )
     unset(_cfe_source)
     unset(_cfe_source)
+    unset(_CFE_LINK_DIRECTORIES)
 
 
     if(${VARIABLE})
     if(${VARIABLE})
       set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")
       set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")

+ 11 - 0
Modules/CheckIncludeFile.cmake

@@ -31,6 +31,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 See the :module:`CheckIncludeFiles` module to check for multiple headers
 See the :module:`CheckIncludeFiles` module to check for multiple headers
@@ -87,6 +89,13 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
       unset(_CIF_CMP0075)
       unset(_CIF_CMP0075)
     endif()
     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}
     try_compile(${VARIABLE}
       SOURCE_FROM_VAR CheckIncludeFile.c _CIF_SOURCE_CONTENT
       SOURCE_FROM_VAR CheckIncludeFile.c _CIF_SOURCE_CONTENT
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
@@ -95,9 +104,11 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
       CMAKE_FLAGS
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
       "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
+      "${_CIF_LINK_DIRECTORIES}"
       )
       )
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
     unset(_CIF_LINK_LIBRARIES)
+    unset(_CIF_LINK_DIRECTORIES)
 
 
     if(${ARGC} EQUAL 3)
     if(${ARGC} EQUAL 3)
       set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE})
       set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE})

+ 11 - 0
Modules/CheckIncludeFileCXX.cmake

@@ -31,6 +31,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
@@ -86,6 +88,13 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
       unset(_CIF_CMP0075)
       unset(_CIF_CMP0075)
     endif()
     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}
     try_compile(${VARIABLE}
       SOURCE_FROM_VAR CheckIncludeFile.cxx _CIF_SOURCE_CONTENT
       SOURCE_FROM_VAR CheckIncludeFile.cxx _CIF_SOURCE_CONTENT
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
@@ -94,9 +103,11 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
       CMAKE_FLAGS
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
       "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
       "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
+      "${_CIF_LINK_DIRECTORIES}"
       )
       )
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
     unset(_CIF_LINK_LIBRARIES)
+    unset(_CIF_LINK_DIRECTORIES)
 
 
     if(${ARGC} EQUAL 3)
     if(${ARGC} EQUAL 3)
       set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})
       set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})

+ 11 - 0
Modules/CheckIncludeFiles.cmake

@@ -37,6 +37,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
 See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
@@ -126,6 +128,13 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
       unset(_CIF_CMP0075)
       unset(_CIF_CMP0075)
     endif()
     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)
     if(NOT CMAKE_REQUIRED_QUIET)
       message(CHECK_START "Looking for ${_description}")
       message(CHECK_START "Looking for ${_description}")
     endif()
     endif()
@@ -137,9 +146,11 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
       CMAKE_FLAGS
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
       "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
       "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
+      "${_CIF_LINK_DIRECTORIES}"
       )
       )
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_OPTIONS)
     unset(_CIF_LINK_LIBRARIES)
     unset(_CIF_LINK_LIBRARIES)
+    unset(_CIF_LINK_DIRECTORIES)
     if(${VARIABLE})
     if(${VARIABLE})
       if(NOT CMAKE_REQUIRED_QUIET)
       if(NOT CMAKE_REQUIRED_QUIET)
         message(CHECK_PASS "found")
         message(CHECK_PASS "found")

+ 10 - 1
Modules/CheckLibraryExists.cmake

@@ -35,6 +35,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]
@@ -58,6 +60,12 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
       set(CHECK_LIBRARY_EXISTS_LIBRARIES
       set(CHECK_LIBRARY_EXISTS_LIBRARIES
         ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
         ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
     endif()
     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)
     if(CMAKE_C_COMPILER_LOADED)
       set(_cle_source CheckFunctionExists.c)
       set(_cle_source CheckFunctionExists.c)
@@ -74,9 +82,10 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
       LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
       LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
       CMAKE_FLAGS
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
-      -DLINK_DIRECTORIES:STRING=${LOCATION}
+      "${_CLE_LINK_DIRECTORIES}"
       )
       )
     unset(_cle_source)
     unset(_cle_source)
+    unset(_CLE_LINK_DIRECTORIES)
 
 
     if(${VARIABLE})
     if(${VARIABLE})
       if(NOT CMAKE_REQUIRED_QUIET)
       if(NOT CMAKE_REQUIRED_QUIET)

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckOBJCSourceRuns.cmake

@@ -40,6 +40,8 @@ can subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckOBJCXXSourceRuns.cmake

@@ -40,6 +40,8 @@ and can subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 11 - 0
Modules/CheckPrototypeDefinition.cmake

@@ -45,6 +45,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.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)
       set(CMAKE_SYMBOL_EXISTS_INCLUDES)
     endif()
     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})
     foreach(_FILE ${_HEADER})
       string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER
       string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER
         "#include <${_FILE}>\n")
         "#include <${_FILE}>\n")
@@ -102,7 +111,9 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB
       ${CHECK_PROTOTYPE_DEFINITION_LIBS}
       ${CHECK_PROTOTYPE_DEFINITION_LIBS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
       "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
       "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
+      "${_CPD_LINK_DIRECTORIES}"
       )
       )
+    unset(_CPD_LINK_DIRECTORIES)
 
 
     if (${_VARIABLE})
     if (${_VARIABLE})
       set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
       set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")

+ 2 - 0
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_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckSourceRuns.cmake

@@ -62,6 +62,8 @@ subsequently be run.
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 #]=======================================================================]
 #]=======================================================================]

+ 2 - 0
Modules/CheckStructHasMember.cmake

@@ -36,6 +36,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 
 

+ 11 - 0
Modules/CheckSymbolExists.cmake

@@ -41,6 +41,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 For example:
 For example:
@@ -121,6 +123,13 @@ macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE)
     else()
     else()
       set(CMAKE_SYMBOL_EXISTS_INCLUDES)
       set(CMAKE_SYMBOL_EXISTS_INCLUDES)
     endif()
     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})
     foreach(FILE ${FILES})
       string(APPEND _CSE_SOURCE
       string(APPEND _CSE_SOURCE
         "#include <${FILE}>\n")
         "#include <${FILE}>\n")
@@ -159,7 +168,9 @@ int main(int argc, char** argv)
       CMAKE_FLAGS
       CMAKE_FLAGS
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
       -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
       "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
       "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
+      "${_CSE_LINK_DIRECTORIES}"
       )
       )
+    unset(_CSE_LINK_DIRECTORIES)
     if(${VARIABLE})
     if(${VARIABLE})
       if(NOT CMAKE_REQUIRED_QUIET)
       if(NOT CMAKE_REQUIRED_QUIET)
         message(CHECK_PASS "found")
         message(CHECK_PASS "found")

+ 11 - 0
Modules/CheckTypeSize.cmake

@@ -77,6 +77,8 @@ the way the check is run:
 
 
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 .. include:: /module/CMAKE_REQUIRED_LIBRARIES.txt
 
 
+.. include:: /module/CMAKE_REQUIRED_LINK_DIRECTORIES.txt
+
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 .. include:: /module/CMAKE_REQUIRED_QUIET.txt
 
 
 ``CMAKE_EXTRA_INCLUDE_FILES``
 ``CMAKE_EXTRA_INCLUDE_FILES``
@@ -140,6 +142,13 @@ function(__check_type_size_impl type var map builtin language)
     string(APPEND headers "#include \"${h}\"\n")
     string(APPEND headers "#include \"${h}\"\n")
   endforeach()
   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.
   # Perform the check.
   set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin)
   set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin)
   file(READ ${__check_type_size_dir}/CheckTypeSize.c.in src_content)
   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
     CMAKE_FLAGS
       "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
       "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
       "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}"
       "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}"
+      "${_CTS_LINK_DIRECTORIES}"
     COPY_FILE ${bin}
     COPY_FILE ${bin}
     )
     )
+  unset(_CTS_LINK_DIRECTORIES)
 
 
   if(HAVE_${var})
   if(HAVE_${var})
     # The check compiled.  Load information from the binary.
     # The check compiled.  Load information from the binary.

+ 10 - 0
Modules/CheckVariableExists.cmake

@@ -59,13 +59,23 @@ macro(CHECK_VARIABLE_EXISTS VAR VARIABLE)
     else()
     else()
       set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES)
       set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES)
     endif()
     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}
     try_compile(${VARIABLE}
       SOURCES ${CMAKE_ROOT}/Modules/CheckVariableExists.c
       SOURCES ${CMAKE_ROOT}/Modules/CheckVariableExists.c
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
       COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
       ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
       ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
       ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
+      "${_CVE_LINK_DIRECTORIES}"
       )
       )
+    unset(_CVE_LINK_DIRECTORIES)
     if(${VARIABLE})
     if(${VARIABLE})
       set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}")
       set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}")
       if(NOT CMAKE_REQUIRED_QUIET)
       if(NOT CMAKE_REQUIRED_QUIET)

+ 9 - 0
Modules/Internal/CheckSourceCompiles.cmake

@@ -87,6 +87,13 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
     else()
     else()
       set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
       set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
     endif()
     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)
     if(CMAKE_REQUIRED_INCLUDES)
       set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
       set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
         "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_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}
       ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
       "${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
       "${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
+      "${_CSC_LINK_DIRECTORIES}"
       OUTPUT_VARIABLE OUTPUT)
       OUTPUT_VARIABLE OUTPUT)
+    unset(_CSC_LINK_DIRECTORIES)
 
 
     foreach(_regex ${_FAIL_REGEX})
     foreach(_regex ${_FAIL_REGEX})
       if("${OUTPUT}" MATCHES "${_regex}")
       if("${OUTPUT}" MATCHES "${_regex}")

+ 8 - 0
Modules/Internal/CheckSourceRuns.cmake

@@ -79,6 +79,12 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
     else()
     else()
       set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
       set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
     endif()
     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)
     if(CMAKE_REQUIRED_INCLUDES)
       set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
       set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
         "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_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}
       CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
       -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
       -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
       "${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}"
       "${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 it did not compile make the return value fail code of 1
     if(NOT ${_var}_COMPILED)
     if(NOT ${_var}_COMPILED)
       set(${_var}_EXITCODE 1)
       set(${_var}_EXITCODE 1)

+ 6 - 1
Tests/CMakeTests/PushCheckStateTest.cmake.in

@@ -5,6 +5,7 @@ set(CMAKE_EXTRA_INCLUDE_FILES file1)
 set(CMAKE_REQUIRED_INCLUDES dir1)
 set(CMAKE_REQUIRED_INCLUDES dir1)
 set(CMAKE_REQUIRED_DEFINITIONS defs1 )
 set(CMAKE_REQUIRED_DEFINITIONS defs1 )
 set(CMAKE_REQUIRED_LIBRARIES lib1)
 set(CMAKE_REQUIRED_LIBRARIES lib1)
+set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir1)
 set(CMAKE_REQUIRED_FLAGS flag1)
 set(CMAKE_REQUIRED_FLAGS flag1)
 set(CMAKE_REQUIRED_QUIET 1)
 set(CMAKE_REQUIRED_QUIET 1)
 
 
@@ -14,16 +15,17 @@ set(CMAKE_EXTRA_INCLUDE_FILES file2)
 set(CMAKE_REQUIRED_INCLUDES dir2)
 set(CMAKE_REQUIRED_INCLUDES dir2)
 set(CMAKE_REQUIRED_DEFINITIONS defs2)
 set(CMAKE_REQUIRED_DEFINITIONS defs2)
 set(CMAKE_REQUIRED_LIBRARIES lib2)
 set(CMAKE_REQUIRED_LIBRARIES lib2)
+set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir2)
 set(CMAKE_REQUIRED_FLAGS flag2)
 set(CMAKE_REQUIRED_FLAGS flag2)
 set(CMAKE_REQUIRED_QUIET 2)
 set(CMAKE_REQUIRED_QUIET 2)
 
 
 cmake_push_check_state()
 cmake_push_check_state()
 
 
 set(CMAKE_EXTRA_INCLUDE_FILES file3)
 set(CMAKE_EXTRA_INCLUDE_FILES file3)
-set(CMAKE_REQUIRED_DEFINITIONS defs3)
 set(CMAKE_REQUIRED_INCLUDES dir3)
 set(CMAKE_REQUIRED_INCLUDES dir3)
 set(CMAKE_REQUIRED_DEFINITIONS defs3)
 set(CMAKE_REQUIRED_DEFINITIONS defs3)
 set(CMAKE_REQUIRED_LIBRARIES lib3)
 set(CMAKE_REQUIRED_LIBRARIES lib3)
+set(CMAKE_REQUIRED_LINK_DIRECTORIES linkdir3)
 set(CMAKE_REQUIRED_FLAGS flag3)
 set(CMAKE_REQUIRED_FLAGS flag3)
 set(CMAKE_REQUIRED_QUIET 3)
 set(CMAKE_REQUIRED_QUIET 3)
 
 
@@ -34,6 +36,7 @@ foreach(pair IN ITEMS
   REQUIRED_INCLUDES|
   REQUIRED_INCLUDES|
   REQUIRED_DEFINITIONS|
   REQUIRED_DEFINITIONS|
   REQUIRED_LIBRARIES|
   REQUIRED_LIBRARIES|
+  REQUIRED_LINK_DIRECTORIES|
   REQUIRED_FLAGS|
   REQUIRED_FLAGS|
   REQUIRED_QUIET|
   REQUIRED_QUIET|
   )
   )
@@ -55,6 +58,7 @@ foreach(pair IN ITEMS
   REQUIRED_INCLUDES|dir2
   REQUIRED_INCLUDES|dir2
   REQUIRED_DEFINITIONS|defs2
   REQUIRED_DEFINITIONS|defs2
   REQUIRED_LIBRARIES|lib2
   REQUIRED_LIBRARIES|lib2
+  REQUIRED_LINK_DIRECTORIES|linkdir2
   REQUIRED_FLAGS|flag2
   REQUIRED_FLAGS|flag2
   REQUIRED_QUIET|2
   REQUIRED_QUIET|2
   )
   )
@@ -74,6 +78,7 @@ foreach(pair IN ITEMS
   REQUIRED_INCLUDES|dir1
   REQUIRED_INCLUDES|dir1
   REQUIRED_DEFINITIONS|defs1
   REQUIRED_DEFINITIONS|defs1
   REQUIRED_LIBRARIES|lib1
   REQUIRED_LIBRARIES|lib1
+  REQUIRED_LINK_DIRECTORIES|linkdir1
   REQUIRED_FLAGS|flag1
   REQUIRED_FLAGS|flag1
   REQUIRED_QUIET|1
   REQUIRED_QUIET|1
   )
   )

+ 122 - 0
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)

+ 1 - 0
Tests/RunCMake/CheckModules/CheckLinkDirectoriesTestLib.cmake

@@ -0,0 +1 @@
+add_subdirectory(TestLib)

+ 28 - 0
Tests/RunCMake/CheckModules/RunCMakeTest.cmake

@@ -22,3 +22,31 @@ run_cmake(CheckIncludeFilesOkNoC)
 run_cmake(CheckIncludeFilesMissingLanguage)
 run_cmake(CheckIncludeFilesMissingLanguage)
 run_cmake(CheckIncludeFilesUnknownArgument)
 run_cmake(CheckIncludeFilesUnknownArgument)
 run_cmake(CheckIncludeFilesUnknownLanguage)
 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()

+ 3 - 0
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>)

+ 6 - 0
Tests/RunCMake/CheckModules/TestLib/TestLib.c

@@ -0,0 +1,6 @@
+int myTestVar = 42;
+
+int TestSymbol(void)
+{
+  return 0;
+}