find_package: Forward component list for recursive calls in modules
Some find modules call find_package recursively to locate a package
configuration file for the package instead of searching for individual
pieces. Commit 79e9b755
(Help recursive find_package calls in modules,
2008-10-03) taught find_package to forward the version number and EXACT
arguments through the recursive call automatically. Do the same for the
component list.
This commit is contained in:
parent
c2f8a13715
commit
9fc7ea4c62
|
@ -101,9 +101,10 @@ void cmFindPackageCommand::GenerateDocumentation()
|
||||||
"The [version] argument requests a version with which the package found "
|
"The [version] argument requests a version with which the package found "
|
||||||
"should be compatible (format is major[.minor[.patch[.tweak]]]). "
|
"should be compatible (format is major[.minor[.patch[.tweak]]]). "
|
||||||
"The EXACT option requests that the version be matched exactly. "
|
"The EXACT option requests that the version be matched exactly. "
|
||||||
"If no [version] is given to a recursive invocation inside a "
|
"If no [version] and/or component list is given to a recursive "
|
||||||
"find-module, the [version] and EXACT arguments are forwarded "
|
"invocation inside a find-module, the corresponding arguments "
|
||||||
"automatically from the outer call. "
|
"are forwarded automatically from the outer call (including the "
|
||||||
|
"EXACT flag for [version]). "
|
||||||
"Version support is currently provided only on a package-by-package "
|
"Version support is currently provided only on a package-by-package "
|
||||||
"basis (details below).\n"
|
"basis (details below).\n"
|
||||||
"User code should generally look for packages using the above simple "
|
"User code should generally look for packages using the above simple "
|
||||||
|
@ -524,7 +525,7 @@ bool cmFindPackageCommand
|
||||||
cmake::AUTHOR_WARNING, "Ignoring EXACT since no version is requested.");
|
cmake::AUTHOR_WARNING, "Ignoring EXACT since no version is requested.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this->Version.empty())
|
if(this->Version.empty() || components.empty())
|
||||||
{
|
{
|
||||||
// Check whether we are recursing inside "Find<name>.cmake" within
|
// Check whether we are recursing inside "Find<name>.cmake" within
|
||||||
// another find_package(<name>) call.
|
// another find_package(<name>) call.
|
||||||
|
@ -532,16 +533,24 @@ bool cmFindPackageCommand
|
||||||
mod += "_FIND_MODULE";
|
mod += "_FIND_MODULE";
|
||||||
if(this->Makefile->IsOn(mod.c_str()))
|
if(this->Makefile->IsOn(mod.c_str()))
|
||||||
{
|
{
|
||||||
// Get version information from the outer call if necessary.
|
if(this->Version.empty())
|
||||||
// Requested version string.
|
{
|
||||||
std::string ver = this->Name;
|
// Get version information from the outer call if necessary.
|
||||||
ver += "_FIND_VERSION";
|
// Requested version string.
|
||||||
this->Version = this->Makefile->GetSafeDefinition(ver.c_str());
|
std::string ver = this->Name;
|
||||||
|
ver += "_FIND_VERSION";
|
||||||
|
this->Version = this->Makefile->GetSafeDefinition(ver.c_str());
|
||||||
|
|
||||||
// Whether an exact version is required.
|
// Whether an exact version is required.
|
||||||
std::string exact = this->Name;
|
std::string exact = this->Name;
|
||||||
exact += "_FIND_VERSION_EXACT";
|
exact += "_FIND_VERSION_EXACT";
|
||||||
this->VersionExact = this->Makefile->IsOn(exact.c_str());
|
this->VersionExact = this->Makefile->IsOn(exact.c_str());
|
||||||
|
}
|
||||||
|
if(components.empty())
|
||||||
|
{
|
||||||
|
std::string components_var = this->Name + "_FIND_COMPONENTS";
|
||||||
|
components = this->Makefile->GetSafeDefinition(components_var.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ FIND_PACKAGE(wibbleA NAMES wibble PATHS B)
|
||||||
FIND_PACKAGE(wibbleB NAMES wibble HINTS B)
|
FIND_PACKAGE(wibbleB NAMES wibble HINTS B)
|
||||||
|
|
||||||
# Look for package with recursive find-modules.
|
# Look for package with recursive find-modules.
|
||||||
FIND_PACKAGE(RecursiveA)
|
FIND_PACKAGE(RecursiveA COMPONENTS A)
|
||||||
FIND_PACKAGE(RecursiveB 2)
|
FIND_PACKAGE(RecursiveB 2)
|
||||||
FIND_PACKAGE(RecursiveC 3.1 EXACT)
|
FIND_PACKAGE(RecursiveC 3.1 EXACT)
|
||||||
|
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
# Test config file.
|
# Test config file.
|
||||||
|
if(NOT "${RecursiveA_FIND_COMPONENTS}" STREQUAL "A")
|
||||||
|
message(FATAL_ERROR "find_package(RecursiveA NO_MODULE) did not forward components")
|
||||||
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue