64 lines
2.1 KiB
CMake
64 lines
2.1 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
|
||
|
-------------------------
|
||
|
|
||
|
.. command:: find_dependency
|
||
|
|
||
|
The ``find_dependency()`` macro wraps a :command:`find_package` call for
|
||
|
a package dependency::
|
||
|
|
||
|
find_dependency(<dep> [...])
|
||
|
|
||
|
It is designed to be used in a
|
||
|
:ref:`Package Configuration File <Config File Packages>`
|
||
|
(``<PackageName>Config.cmake``). ``find_dependency`` forwards the correct
|
||
|
parameters for ``QUIET`` and ``REQUIRED`` which were passed to
|
||
|
the original :command:`find_package` call. Any additional arguments
|
||
|
specified are forwarded to :command:`find_package`.
|
||
|
|
||
|
If the dependency could not be found it sets an informative diagnostic
|
||
|
message and calls :command:`return` to end processing of the calling
|
||
|
package configuration file and return to the :command:`find_package`
|
||
|
command that loaded it.
|
||
|
|
||
|
.. note::
|
||
|
|
||
|
The call to :command:`return` makes this macro unsuitable to call
|
||
|
from :ref:`Find Modules`.
|
||
|
#]=======================================================================]
|
||
|
|
||
|
macro(find_dependency dep)
|
||
|
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)
|
||
|
endmacro()
|