summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGlobalGenerator.cxx24
-rw-r--r--Source/cmGlobalGenerator.h6
-rw-r--r--Source/cmGlobalVisualStudio6Generator.cxx27
-rw-r--r--Source/cmGlobalVisualStudio6Generator.h2
-rw-r--r--Source/cmGlobalVisualStudio7Generator.cxx25
-rw-r--r--Source/cmGlobalVisualStudio7Generator.h2
6 files changed, 35 insertions, 51 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 753221d..396d76e 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/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]);
+ }
+ }
+
+}
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 89441dc..e1ebe20 100644
--- a/Source/cmGlobalGenerator.h
+++ b/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
diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx
index 8a017e1..aa17ed9 100644
--- a/Source/cmGlobalVisualStudio6Generator.cxx
+++ b/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
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index d1dec83..79b934a 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/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
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index e85a80c..7f240c9 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/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()
{
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index 0f9e814..4d81c5c 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/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