ソースを参照

ENH: move project map to global generator base

Bill Hoffman 21 年 前
コミット
13865fc4fa

+ 24 - 0
Source/cmGlobalGenerator.cxx

@@ -554,6 +554,9 @@ void cmGlobalGenerator::Configure()
                          "Please set the following variables:\n",
                          notFoundVars.c_str());
     }
+  // at this point m_LocalGenerators has been filled,
+  // so create the map from project name to vector of local generators
+  this->FillProjectMap();
   if ( !m_CMakeInstance->GetScriptMode() )
     {
     m_CMakeInstance->UpdateProgress("Configuring done", -1);
@@ -774,3 +777,24 @@ const char* cmGlobalGenerator::GetLinkerPreference(const char* lang)
     }
   return "None";
 }
+
+
+void cmGlobalGenerator::FillProjectMap()
+{  
+  unsigned int i;
+  for(i = 0; i < m_LocalGenerators.size(); ++i)
+    {
+    std::string name = m_LocalGenerators[i]->GetMakefile()->GetProjectName();
+    // for each local generator add the local generator to the project that
+    // it is in
+    m_ProjectMap[name].push_back(m_LocalGenerators[i]);
+    // now add the local generator to any parent project it is part of
+    std::vector<std::string> const& pprojects 
+      = m_LocalGenerators[i]->GetMakefile()->GetParentProjects();
+    for(unsigned int k =0; k < pprojects.size(); ++k)
+      {
+      m_ProjectMap[pprojects[k]].push_back(m_LocalGenerators[i]);
+      }
+    }
+  
+}

+ 5 - 1
Source/cmGlobalGenerator.h

@@ -116,6 +116,8 @@ public:
   ///! What is the output extension for a given source file extension.
   const char* GetLanguageOutputExtensionFromExtension(const char* lang);
 protected:
+  // Fill the m_ProjectMap, this must be called after m_LocalGenerators has been populated.
+  void FillProjectMap();
   bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen);
   void FindMakeProgram(cmMakefile*);
   
@@ -124,6 +126,8 @@ protected:
   cmStdString m_ConfiguredFilesPath;
   cmake *m_CMakeInstance;
   std::vector<cmLocalGenerator *> m_LocalGenerators;
+  // map from project name to vector of local generators in that project
+  std::map<cmStdString, std::vector<cmLocalGenerator*> > m_ProjectMap;
 
   ///! used by Configure()
   void RecursiveConfigure(cmLocalGenerator *lg, float start, float end);
@@ -136,7 +140,7 @@ private:
   std::map<cmStdString, cmStdString> m_OutputExtensions;
   std::map<cmStdString, cmStdString> m_LanguageToOutputExtension;
   std::map<cmStdString, cmStdString> m_ExtensionToLanguage;
-  std::map<cmStdString, cmStdString> m_LanguageToLinkerPreference;
+  std::map<cmStdString, cmStdString> m_LanguageToLinkerPreference; 
 };
 
 #endif

+ 3 - 24
Source/cmGlobalVisualStudio6Generator.cxx

@@ -159,14 +159,11 @@ cmLocalGenerator *cmGlobalVisualStudio6Generator::CreateLocalGenerator()
 
 void cmGlobalVisualStudio6Generator::Generate()
 {
-  // collect sub-projects
-  this->CollectSubprojects();
-  
   // add a special target that depends on ALL projects for easy build
   // of one configuration only.  
   std::vector<std::string> srcs;
   std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-  for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+  for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
     {
     std::vector<cmLocalGenerator*>& gen = it->second;
     // add the ALL_BUILD to the first local generator of each project
@@ -192,24 +189,6 @@ void cmGlobalVisualStudio6Generator::Generate()
   this->OutputDSWFile();
 }
 
-// populate the m_SubProjectMap 
-void cmGlobalVisualStudio6Generator::CollectSubprojects()
-{
-  unsigned int i;
-  for(i = 0; i < m_LocalGenerators.size(); ++i)
-    {
-    std::string name = m_LocalGenerators[i]->GetMakefile()->GetProjectName();
-    m_SubProjectMap[name].push_back(m_LocalGenerators[i]);
-    std::vector<std::string> const& pprojects 
-      = m_LocalGenerators[i]->GetMakefile()->GetParentProjects();
-    for(unsigned int k =0; k < pprojects.size(); ++k)
-      {
-      m_SubProjectMap[pprojects[k]].push_back(m_LocalGenerators[i]);
-      }
-    }
-}
-
-
 // Write a DSW file to the stream
 void cmGlobalVisualStudio6Generator::WriteDSWFile(std::ostream& fout,
                                                   cmLocalGenerator* root,
@@ -373,7 +352,7 @@ void cmGlobalVisualStudio6Generator::OutputDSWFile(cmLocalGenerator* root,
 void cmGlobalVisualStudio6Generator::OutputDSWFile()
 { 
   std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-  for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+  for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
     {
     this->OutputDSWFile(it->second[0], it->second);
     }
@@ -431,7 +410,7 @@ void cmGlobalVisualStudio6Generator::SetupTests()
       {
       std::vector<std::string> srcs;
       std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-      for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+      for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
         {
         std::vector<cmLocalGenerator*>& gen = it->second;
         // add the ALL_BUILD to the first local generator of each project

+ 0 - 2
Source/cmGlobalVisualStudio6Generator.h

@@ -73,7 +73,6 @@ public:
                             cmLocalGenerator* root,
                             std::vector<cmLocalGenerator*>& generators);
 private:
-  void CollectSubprojects();
   void GenerateConfigurations(cmMakefile* mf);
   void SetupTests();
   void WriteDSWFile(std::ostream& fout);
@@ -85,7 +84,6 @@ private:
                             const char* name, const char* path,
                             const std::vector<std::string>& dependencies);
   void WriteDSWFooter(std::ostream& fout);
-  std::map<cmStdString, std::vector<cmLocalGenerator*> > m_SubProjectMap;
 };
 
 #endif

+ 3 - 22
Source/cmGlobalVisualStudio7Generator.cxx

@@ -162,7 +162,7 @@ void cmGlobalVisualStudio7Generator::SetupTests()
       {
       std::vector<std::string> srcs;
       std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-      for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+      for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
         {
         std::vector<cmLocalGenerator*>& gen = it->second;
         // add the ALL_BUILD to the first local generator of each project
@@ -246,13 +246,11 @@ void cmGlobalVisualStudio7Generator::GenerateConfigurations(cmMakefile* mf)
 
 void cmGlobalVisualStudio7Generator::Generate()
 {
-  // collect sub-projects
-  this->CollectSubprojects();
   // add a special target that depends on ALL projects for easy build
   // of Debug only
   std::vector<std::string> srcs;
   std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-  for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+  for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
     {
     std::vector<cmLocalGenerator*>& gen = it->second;
     // add the ALL_BUILD to the first local generator of each project
@@ -302,7 +300,7 @@ void cmGlobalVisualStudio7Generator::OutputSLNFile(cmLocalGenerator* root,
 void cmGlobalVisualStudio7Generator::OutputSLNFile()
 { 
   std::map<cmStdString, std::vector<cmLocalGenerator*> >::iterator it;
-  for(it = m_SubProjectMap.begin(); it!= m_SubProjectMap.end(); ++it)
+  for(it = m_ProjectMap.begin(); it!= m_ProjectMap.end(); ++it)
     {
     this->OutputSLNFile(it->second[0], it->second);
     }
@@ -724,23 +722,6 @@ void cmGlobalVisualStudio7Generator::GetDocumentation(cmDocumentationEntry& entr
   entry.full = "";
 }
 
-// populate the m_SubProjectMap 
-void cmGlobalVisualStudio7Generator::CollectSubprojects()
-{
-  unsigned int i;
-  for(i = 0; i < m_LocalGenerators.size(); ++i)
-    {
-    std::string name = m_LocalGenerators[i]->GetMakefile()->GetProjectName();
-    m_SubProjectMap[name].push_back(m_LocalGenerators[i]);
-    std::vector<std::string> const& pprojects 
-      = m_LocalGenerators[i]->GetMakefile()->GetParentProjects();
-    for(unsigned int k =0; k < pprojects.size(); ++k)
-      {
-      m_SubProjectMap[pprojects[k]].push_back(m_LocalGenerators[i]);
-      }
-    }
-}
-
 // make sure "special" targets have GUID's
 void cmGlobalVisualStudio7Generator::Configure()
 {

+ 0 - 2
Source/cmGlobalVisualStudio7Generator.h

@@ -88,7 +88,6 @@ public:
   virtual void Configure();
 protected:
   std::string GetGUID(const char* name); 
-  void CollectSubprojects();
   virtual void OutputSLNFile(cmLocalGenerator* root, 
                              std::vector<cmLocalGenerator*>& generators);
   virtual void WriteSLNFile(std::ostream& fout, cmLocalGenerator* root,
@@ -112,7 +111,6 @@ protected:
 
   std::vector<std::string> m_Configurations;
   std::map<cmStdString, cmStdString> m_GUIDMap;
-  std::map<cmStdString, std::vector<cmLocalGenerator*> > m_SubProjectMap;
 };
 
 #endif