Преглед изворни кода

cmMakefile: Refactor directories specified with the subdirs command.

Store the directories on the cmMakefile as explicitly not-configured-yet.
Stephen Kelly пре 10 година
родитељ
комит
69a038a9e9
3 измењених фајлова са 24 додато и 7 уклоњено
  1. 4 7
      Source/cmLocalGenerator.cxx
  2. 13 0
      Source/cmMakefile.cxx
  3. 7 0
      Source/cmMakefile.h

+ 4 - 7
Source/cmLocalGenerator.cxx

@@ -119,18 +119,15 @@ void cmLocalGenerator::Configure()
   assert(cmSystemTools::FileExists(currentStart.c_str(), true));
   this->Makefile->ProcessBuildsystemFile(currentStart.c_str());
 
-  // at the end of the ReadListFile handle any old style subdirs
-  // first get all the subdirectories
-  std::vector<cmLocalGenerator *> subdirs = this->GetChildren();
+   // at the end handle any old style subdirs
+  std::vector<cmLocalGenerator *> subdirs =
+      this->GetMakefile()->GetUnConfiguredDirectories();
 
   // for each subdir recurse
   std::vector<cmLocalGenerator *>::iterator sdi = subdirs.begin();
   for (; sdi != subdirs.end(); ++sdi)
     {
-    if (!(*sdi)->GetMakefile()->IsConfigured())
-      {
-      this->Makefile->ConfigureSubDirectory(*sdi);
-      }
+    this->Makefile->ConfigureSubDirectory(*sdi);
     }
 
   this->Makefile->AddCMakeDependFilesFromUser();

+ 13 - 0
Source/cmMakefile.cxx

@@ -1599,6 +1599,15 @@ void cmMakefile::ConfigureSubDirectory(cmLocalGenerator *lg2)
     }
   // finally configure the subdir
   lg2->Configure();
+
+  // at the end handle any old style subdirs
+  for (std::vector<cmLocalGenerator *>::iterator sdi =
+       this->UnConfiguredDirectories.begin();
+       sdi != this->UnConfiguredDirectories.end(); ++sdi)
+    {
+    this->ConfigureSubDirectory(*sdi);
+    }
+
   if (this->GetCMakeInstance()->GetDebugOutput())
     {
     std::string msg="   Returning to         ";
@@ -1638,6 +1647,10 @@ void cmMakefile::AddSubDirectory(const std::string& srcPath,
     {
     this->ConfigureSubDirectory(lg2);
     }
+  else
+    {
+    this->UnConfiguredDirectories.push_back(lg2);
+    }
 }
 
 void cmMakefile::SetCurrentSourceDirectory(const std::string& dir)

+ 7 - 0
Source/cmMakefile.h

@@ -262,6 +262,11 @@ public:
       this->LinkDirectories = vec;
     }
 
+  std::vector<cmLocalGenerator*> GetUnConfiguredDirectories() const
+  {
+    return this->UnConfiguredDirectories;
+  }
+
   /**
    * Add a subdirectory to the build.
    */
@@ -920,6 +925,8 @@ private:
   mutable cmsys::RegularExpression cmAtVarRegex;
   mutable cmsys::RegularExpression cmNamedCurly;
 
+  std::vector<cmLocalGenerator*> UnConfiguredDirectories;
+
   cmPropertyMap Properties;
 
   // Unused variable flags