From 20cafa2e1faff577143eb56d14e5c3998cb7d6a9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 27 Nov 2013 13:43:52 +0100 Subject: Split the find_dependency macro into a separate file. This allows Config file authors to use it without having to use CONFIGURE_PACKAGE_CONFIG_FILE. --- Help/manual/cmake-modules.7.rst | 1 + Help/module/CMakeFindDependencyMacro.rst | 1 + Modules/CMakeFindDependencyMacro.cmake | 58 ++++++++++++++++++++++++++++++++ Modules/CMakePackageConfigHelpers.cmake | 35 +++---------------- 4 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 Help/module/CMakeFindDependencyMacro.rst create mode 100644 Modules/CMakeFindDependencyMacro.cmake diff --git a/Help/manual/cmake-modules.7.rst b/Help/manual/cmake-modules.7.rst index f148a51..3f819d6 100644 --- a/Help/manual/cmake-modules.7.rst +++ b/Help/manual/cmake-modules.7.rst @@ -39,6 +39,7 @@ All Modules /module/CMakeDependentOption /module/CMakeDetermineVSServicePack /module/CMakeExpandImportedTargets + /module/CMakeFindDependencyMacro /module/CMakeFindFrameworks /module/CMakeFindPackageMode /module/CMakeForceCompiler diff --git a/Help/module/CMakeFindDependencyMacro.rst b/Help/module/CMakeFindDependencyMacro.rst new file mode 100644 index 0000000..5b5b550 --- /dev/null +++ b/Help/module/CMakeFindDependencyMacro.rst @@ -0,0 +1 @@ +.. cmake-module:: ../../Modules/CMakeFindDependencyMacro.cmake diff --git a/Modules/CMakeFindDependencyMacro.cmake b/Modules/CMakeFindDependencyMacro.cmake new file mode 100644 index 0000000..596c6fc --- /dev/null +++ b/Modules/CMakeFindDependencyMacro.cmake @@ -0,0 +1,58 @@ +#.rst: +# CMakeFindDependencyMacro +# ------------------------- +# +# :: +# +# find_dependency( []) +# +# +# ``find_dependency()`` wraps a :command:`find_package` call for a package +# dependency. It is designed to be used in a Config.cmake file, and it +# forwards the correct parameters for EXACT, 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. +# + +#============================================================================= +# Copyright 2013 Stephen Kelly +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +macro(find_dependency dep) + if (NOT ${dep}_FOUND) + if (${ARGV1}) + set(version ${ARGV1}) + endif() + set(exact_arg) + if(${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION_EXACT) + set(exact_arg EXACT) + endif() + set(quiet_arg) + if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) + set(quiet_arg QUIET) + endif() + set(required_arg) + if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED) + set(required_arg REQUIRED) + endif() + + find_package(${dep} ${version} ${exact_arg} ${quiet_arg} ${required_arg}) + 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(required_arg) + set(quiet_arg) + set(exact_arg) + endif() +endmacro() diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake index 855af9c..2c1c613 100644 --- a/Modules/CMakePackageConfigHelpers.cmake +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -196,11 +196,13 @@ include(CMakeParseArguments) include(WriteBasicConfigVersionFile) +include(CMakeFindDependencyMacro) macro(WRITE_BASIC_PACKAGE_VERSION_FILE) write_basic_config_version_file(${ARGN}) endmacro() +set(cfpch_dir ${CMAKE_CURRENT_LIST_DIR}) function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile) set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO NO_FIND_DEPENDENCY_MACRO) @@ -290,37 +292,8 @@ endmacro() endif() if(NOT CCF_NO_FIND_DEPENDENCY_MACRO) - set(PACKAGE_INIT "${PACKAGE_INIT} -macro(find_dependency dep) - if (NOT \${dep}_FOUND) - if (\${ARGV1}) - set(version \${ARGV1}) - endif() - set(exact_arg) - if(\${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION_EXACT) - set(exact_arg EXACT) - endif() - set(quiet_arg) - if(\${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) - set(quiet_arg QUIET) - endif() - set(required_arg) - if(\${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED) - set(required_arg REQUIRED) - endif() - - find_package(\${dep} \${version} \${exact_arg} \${quiet_arg} \${required_arg}) - 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(required_arg) - set(quiet_arg) - set(exact_arg) - endif() -endmacro() -") + file(READ "${cfpch_dir}/CMakeFindDependencyMacro.cmake" find_dependency_macro) + set(PACKAGE_INIT "${PACKAGE_INIT} ${find_dependency_macro}") endif() set(PACKAGE_INIT "${PACKAGE_INIT} -- cgit v0.12