FeatureSummary: Don't list transitive package dependencies

Set a global property in the find_package implementation.  Track and
reset that property in the find_dependency macro.  Read the property
in FeatureSummary when determining whether to print output.

This means that packages which are found only as dependencies are not
listed by FeatureSummary, but if a project uses find_package elsewhere
directly, then it will be listed by FeatureSummary.

Suggested-by: Alex Merry

 http://thread.gmane.org/gmane.comp.kde.devel.frameworks/10640
This commit is contained in:
Stephen Kelly 2014-02-03 20:18:37 +01:00
parent cd711ed052
commit a6971f6510
3 changed files with 21 additions and 0 deletions

View File

@ -45,7 +45,16 @@ macro(find_dependency dep)
set(required_arg REQUIRED) set(required_arg REQUIRED)
endif() endif()
get_property(alreadyTransitive GLOBAL PROPERTY
_CMAKE_${dep}_TRANSITIVE_DEPENDENCY
)
find_package(${dep} ${version} ${exact_arg} ${quiet_arg} ${required_arg}) find_package(${dep} ${version} ${exact_arg} ${quiet_arg} ${required_arg})
if(NOT DEFINED alreadyTransitive OR alreadyTransitive)
set_property(GLOBAL PROPERTY _CMAKE_${dep}_TRANSITIVE_DEPENDENCY TRUE)
endif()
if (NOT ${dep}_FOUND) 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}_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) set(${CMAKE_FIND_PACKAGE_NAME}_FOUND False)

View File

@ -376,6 +376,12 @@ function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
set(includeThisOne FALSE) set(includeThisOne FALSE)
endif() endif()
endif() endif()
get_property(_isTransitiveDepend
GLOBAL PROPERTY _CMAKE_${_currentFeature}_TRANSITIVE_DEPENDENCY
)
if(_isTransitiveDepend)
set(includeThisOne FALSE)
endif()
if(includeThisOne) if(includeThisOne)

View File

@ -1043,6 +1043,12 @@ void cmFindPackageCommand::AppendToFoundProperty(bool found)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmFindPackageCommand::AppendSuccessInformation() void cmFindPackageCommand::AppendSuccessInformation()
{ {
{
std::string transitivePropName = "_CMAKE_";
transitivePropName += this->Name + "_TRANSITIVE_DEPENDENCY";
this->Makefile->GetCMakeInstance()
->SetProperty(transitivePropName.c_str(), "False");
}
std::string found = this->Name; std::string found = this->Name;
found += "_FOUND"; found += "_FOUND";
std::string upperFound = cmSystemTools::UpperCase(found); std::string upperFound = cmSystemTools::UpperCase(found);