mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 22:58:41 +00:00
ab358d6a85
Remove highly specialized and totally positional argument handling in find_dependency macro, and instead just pass arguments through to find_package. This gives users access to the full suite of arguments that find_package knows, and is backward compatible with the old arguments. Also, rewrite the unit tests for this, since the old tests are exclusively focused on testing the old argument handling and are no longer applicable, and add some success tests (the old tests did not even set up the CMake state in a way that CMake had any hope of ever finding the test package).
56 lines
1.7 KiB
CMake
56 lines
1.7 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
#.rst:
|
|
# CMakeFindDependencyMacro
|
|
# -------------------------
|
|
#
|
|
# ::
|
|
#
|
|
# find_dependency(<dep> [...])
|
|
#
|
|
#
|
|
# ``find_dependency()`` wraps a :command:`find_package` call for a package
|
|
# dependency. It is designed to be used in a <package>Config.cmake file, and it
|
|
# forwards the correct parameters for QUIET and REQUIRED which were passed to
|
|
# the original :command:`find_package` call. It also sets an informative
|
|
# diagnostic message if the dependency could not be found.
|
|
#
|
|
# Any additional arguments specified are forwarded to :command:`find_package`.
|
|
#
|
|
|
|
macro(find_dependency dep)
|
|
if (NOT ${dep}_FOUND)
|
|
set(cmake_fd_quiet_arg)
|
|
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
|
|
set(cmake_fd_quiet_arg QUIET)
|
|
endif()
|
|
set(cmake_fd_required_arg)
|
|
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED)
|
|
set(cmake_fd_required_arg REQUIRED)
|
|
endif()
|
|
|
|
get_property(cmake_fd_alreadyTransitive GLOBAL PROPERTY
|
|
_CMAKE_${dep}_TRANSITIVE_DEPENDENCY
|
|
)
|
|
|
|
find_package(${dep} ${ARGN}
|
|
${cmake_fd_quiet_arg}
|
|
${cmake_fd_required_arg}
|
|
)
|
|
|
|
if(NOT DEFINED cmake_fd_alreadyTransitive OR cmake_fd_alreadyTransitive)
|
|
set_property(GLOBAL PROPERTY _CMAKE_${dep}_TRANSITIVE_DEPENDENCY TRUE)
|
|
endif()
|
|
|
|
if (NOT ${dep}_FOUND)
|
|
set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "${CMAKE_FIND_PACKAGE_NAME} could not be found because dependency ${dep} could not be found.")
|
|
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND False)
|
|
return()
|
|
endif()
|
|
set(cmake_fd_required_arg)
|
|
set(cmake_fd_quiet_arg)
|
|
set(cmake_fd_exact_arg)
|
|
endif()
|
|
endmacro()
|