From 69a038a9e90a8839b69f4cb8826688be611e8b0d Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 30 May 2015 19:39:08 +0200 Subject: [PATCH] cmMakefile: Refactor directories specified with the subdirs command. Store the directories on the cmMakefile as explicitly not-configured-yet. --- Source/cmLocalGenerator.cxx | 11 ++++------- Source/cmMakefile.cxx | 13 +++++++++++++ Source/cmMakefile.h | 7 +++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 8931e6f46..58366d1a9 100644 --- a/Source/cmLocalGenerator.cxx +++ b/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 subdirs = this->GetChildren(); + // at the end handle any old style subdirs + std::vector subdirs = + this->GetMakefile()->GetUnConfiguredDirectories(); // for each subdir recurse std::vector::iterator sdi = subdirs.begin(); for (; sdi != subdirs.end(); ++sdi) { - if (!(*sdi)->GetMakefile()->IsConfigured()) - { - this->Makefile->ConfigureSubDirectory(*sdi); - } + this->Makefile->ConfigureSubDirectory(*sdi); } this->Makefile->AddCMakeDependFilesFromUser(); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index d537f34b6..ffc6bf975 100644 --- a/Source/cmMakefile.cxx +++ b/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::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) diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index a45d8374c..509f5c8ae 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -262,6 +262,11 @@ public: this->LinkDirectories = vec; } + std::vector 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 UnConfiguredDirectories; + cmPropertyMap Properties; // Unused variable flags