Ver Fonte

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
Stephen Kelly há 11 anos atrás
pai
commit
a6971f6510

+ 9 - 0
Modules/CMakeFindDependencyMacro.cmake

@@ -45,7 +45,16 @@ macro(find_dependency dep)
       set(required_arg REQUIRED)
     endif()
 
+    get_property(alreadyTransitive GLOBAL PROPERTY
+      _CMAKE_${dep}_TRANSITIVE_DEPENDENCY
+    )
+
     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)
       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)

+ 6 - 0
Modules/FeatureSummary.cmake

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

+ 6 - 0
Source/cmFindPackageCommand.cxx

@@ -1043,6 +1043,12 @@ void cmFindPackageCommand::AppendToFoundProperty(bool found)
 //----------------------------------------------------------------------------
 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;
   found += "_FOUND";
   std::string upperFound = cmSystemTools::UpperCase(found);