Pārlūkot izejas kodu

cmCustomCommandGenerator: Avoid mutable state

Expand generator expressions of DEPENDS in the constructor instead
of on-demand.
Brad King 8 gadi atpakaļ
vecāks
revīzija
52527468dc
2 mainītis faili ar 17 papildinājumiem un 21 dzēšanām
  1. 16 19
      Source/cmCustomCommandGenerator.cxx
  2. 1 2
      Source/cmCustomCommandGenerator.h

+ 16 - 19
Source/cmCustomCommandGenerator.cxx

@@ -24,7 +24,6 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc,
   , OldStyle(cc.GetEscapeOldStyle())
   , MakeVars(cc.GetEscapeAllowMakeVars())
   , GE(new cmGeneratorExpression(cc.GetBacktrace()))
-  , DependsDone(false)
 {
   const cmCustomCommandLines& cmdlines = this->CC.GetCommandLines();
   for (cmCustomCommandLines::const_iterator cmdline = cmdlines.begin();
@@ -44,6 +43,22 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc,
     }
     this->CommandLines.push_back(argv);
   }
+
+  std::vector<std::string> depends = this->CC.GetDepends();
+  for (std::vector<std::string>::const_iterator i = depends.begin();
+       i != depends.end(); ++i) {
+    CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = this->GE->Parse(*i);
+    std::vector<std::string> result;
+    cmSystemTools::ExpandListArgument(cge->Evaluate(this->LG, this->Config),
+                                      result);
+    for (std::vector<std::string>::iterator it = result.begin();
+         it != result.end(); ++it) {
+      if (cmSystemTools::FileIsFullPath(it->c_str())) {
+        *it = cmSystemTools::CollapseFullPath(*it);
+      }
+    }
+    this->Depends.insert(this->Depends.end(), result.begin(), result.end());
+  }
 }
 
 cmCustomCommandGenerator::~cmCustomCommandGenerator()
@@ -171,23 +186,5 @@ std::vector<std::string> const& cmCustomCommandGenerator::GetByproducts() const
 
 std::vector<std::string> const& cmCustomCommandGenerator::GetDepends() const
 {
-  if (!this->DependsDone) {
-    this->DependsDone = true;
-    std::vector<std::string> depends = this->CC.GetDepends();
-    for (std::vector<std::string>::const_iterator i = depends.begin();
-         i != depends.end(); ++i) {
-      CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = this->GE->Parse(*i);
-      std::vector<std::string> result;
-      cmSystemTools::ExpandListArgument(cge->Evaluate(this->LG, this->Config),
-                                        result);
-      for (std::vector<std::string>::iterator it = result.begin();
-           it != result.end(); ++it) {
-        if (cmSystemTools::FileIsFullPath(it->c_str())) {
-          *it = cmSystemTools::CollapseFullPath(*it);
-        }
-      }
-      this->Depends.insert(this->Depends.end(), result.begin(), result.end());
-    }
-  }
   return this->Depends;
 }

+ 1 - 2
Source/cmCustomCommandGenerator.h

@@ -21,9 +21,8 @@ class cmCustomCommandGenerator
   bool OldStyle;
   bool MakeVars;
   cmGeneratorExpression* GE;
-  mutable bool DependsDone;
-  mutable std::vector<std::string> Depends;
   cmCustomCommandLines CommandLines;
+  std::vector<std::string> Depends;
 
   const char* GetCrossCompilingEmulator(unsigned int c) const;
   const char* GetArgv0Location(unsigned int c) const;