Răsfoiți Sursa

Autogen: Add (CMAKE_)AUTOGEN_ORIGIN_DEPENDS support

This adds

- the variable ``CMAKE_AUTOGEN_ORIGIN_DEPENDS`` which initializes
- the target property ``AUTOGEN_ORIGIN_DEPENDS``

which controls whether or not the origin target dependencies
should be forwarded to the corresponding ``_autogen`` target.

The default value of ``CMAKE_AUTOGEN_ORIGIN_DEPENDS`` is ``ON``
which corresponds to the behavior that is in place since CMake 3.9.

Closes: #18493
Sebastian Holtermann 7 ani în urmă
părinte
comite
b5e895b5d4

+ 2 - 0
Modules/CMakeGenericSystem.cmake

@@ -23,6 +23,8 @@ set(CMAKE_DL_LIBS "dl")
 
 set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
 set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
+
+set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON)
 set(CMAKE_AUTOMOC_COMPILER_PREDEFINES ON)
 set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE")
 

+ 8 - 3
Source/cmQtAutoGenInitializer.cxx

@@ -322,6 +322,9 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
 
     // Autogen target: Compute user defined dependencies
     {
+      this->AutogenTarget.DependOrigin =
+        this->Target->GetPropertyAsBool("AUTOGEN_ORIGIN_DEPENDS");
+
       std::string const deps =
         this->Target->GetSafeProperty("AUTOGEN_TARGET_DEPENDS");
       if (!deps.empty()) {
@@ -904,7 +907,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
 
     // Add link library target dependencies to the autogen target
     // dependencies
-    {
+    if (this->AutogenTarget.DependOrigin) {
       // add_dependencies/addUtility do not support generator expressions.
       // We depend only on the libraries found in all configs therefore.
       std::map<cmGeneratorTarget const*, std::size_t> commonTargets;
@@ -941,8 +944,10 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
       new cmGeneratorTarget(autogenTarget, localGen));
 
     // Forward origin utilities to autogen target
-    for (BT<std::string> const& depName : this->Target->GetUtilities()) {
-      autogenTarget->AddUtility(depName.Value, makefile);
+    if (this->AutogenTarget.DependOrigin) {
+      for (BT<std::string> const& depName : this->Target->GetUtilities()) {
+        autogenTarget->AddUtility(depName.Value, makefile);
+      }
     }
     // Add additional autogen target dependencies to autogen target
     for (cmTarget* depTarget : this->AutogenTarget.DependTargets) {

+ 1 - 0
Source/cmQtAutoGenInitializer.h

@@ -107,6 +107,7 @@ private:
     std::string SettingsFile;
     std::map<std::string, std::string> ConfigSettingsFile;
     // Dependencies
+    bool DependOrigin = false;
     std::set<std::string> DependFiles;
     std::set<cmTarget*> DependTargets;
     // Sources to process

+ 1 - 0
Source/cmTarget.cxx

@@ -239,6 +239,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
     this->SetPropertyDefault("AUTOMOC", nullptr);
     this->SetPropertyDefault("AUTOUIC", nullptr);
     this->SetPropertyDefault("AUTORCC", nullptr);
+    this->SetPropertyDefault("AUTOGEN_ORIGIN_DEPENDS", nullptr);
     this->SetPropertyDefault("AUTOGEN_PARALLEL", nullptr);
     this->SetPropertyDefault("AUTOMOC_COMPILER_PREDEFINES", nullptr);
     this->SetPropertyDefault("AUTOMOC_DEPEND_FILTERS", nullptr);