diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 16913086b..6273f15b3 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -717,14 +717,12 @@ void cmGlobalGenerator::Configure() } // at this point this->LocalGenerators has been filled, // so create the map from project name to vector of local generators - this->FillProjectMap(); + this->FillProjectMap(); // now create project to target map // This will make sure that targets have all the // targets they depend on as part of the build. - this->FillProjectToTargetMap(); - // now trace all dependencies - this->TraceDependencies(); - + this->FillProjectToTargetMap(); + if ( !this->CMakeInstance->GetScriptMode() ) { this->CMakeInstance->UpdateProgress("Configuring done", -1); @@ -735,6 +733,19 @@ void cmGlobalGenerator::Generate() { // For each existing cmLocalGenerator unsigned int i; + + // Add generator specific helper commands + for (i = 0; i < this->LocalGenerators.size(); ++i) + { + this->LocalGenerators[i]->AddHelperCommands(); + } + + // Trace the dependencies, after that no custom commands should be added + // because their dependencies might not be handled correctly + for (i = 0; i < this->LocalGenerators.size(); ++i) + { + this->LocalGenerators[i]->TraceDependencies(); + } // Consolidate global targets cmTargets globalTargets; @@ -1043,14 +1054,6 @@ const char* cmGlobalGenerator::GetLinkerPreference(const char* lang) return "None"; } -void cmGlobalGenerator::TraceDependencies() -{ - for (unsigned int i = 0; i < this->LocalGenerators.size(); ++i) - { - this->LocalGenerators[i]->TraceDependencies(); - } -} - void cmGlobalGenerator::FillProjectMap() { this->ProjectMap.clear(); // make sure we start with a clean map diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 0c0cd20f6..65fe7159e 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -202,8 +202,6 @@ protected: void FillProjectMap(); bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen); void FillProjectToTargetMap(); - // Calls TraceVSDependencies() on all targets - void TraceDependencies(); void CreateDefaultGlobalTargets(cmTargets* targets); cmTarget CreateGlobalTarget(const char* name, const char* message, const cmCustomCommandLines* commandLines, diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index a9f56822c..58a5a1156 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -54,7 +54,9 @@ public: * Calls TraceVSDependencies() on all targets of this generator. */ virtual void TraceDependencies(); - + + virtual void AddHelperCommands() {} + /** * Perform any final calculations prior to generation */ diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index b3ae6e219..071835a38 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -32,13 +32,16 @@ cmLocalVisualStudio6Generator::~cmLocalVisualStudio6Generator() { } - -void cmLocalVisualStudio6Generator::Generate() -{ +void cmLocalVisualStudio6Generator::AddHelperCommands() +{ std::set lang; lang.insert("C"); lang.insert("CXX"); this->CreateCustomTargetsAndCommands(lang); +} + +void cmLocalVisualStudio6Generator::Generate() +{ this->OutputDSPFile(); } diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h index 7ac84a43e..c371f20cb 100644 --- a/Source/cmLocalVisualStudio6Generator.h +++ b/Source/cmLocalVisualStudio6Generator.h @@ -38,7 +38,9 @@ public: cmLocalVisualStudio6Generator(); virtual ~cmLocalVisualStudio6Generator(); - + + virtual void AddHelperCommands(); + /** * Generate the makefile for this directory. */ diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 2019b8e73..53d24a9ab 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -42,8 +42,7 @@ cmLocalVisualStudio7Generator::~cmLocalVisualStudio7Generator() { } - -void cmLocalVisualStudio7Generator::Generate() +void cmLocalVisualStudio7Generator::AddHelperCommands() { std::set lang; lang.insert("C"); @@ -53,6 +52,10 @@ void cmLocalVisualStudio7Generator::Generate() lang.insert("DEF"); this->CreateCustomTargetsAndCommands(lang); this->FixGlobalTargets(); +} + +void cmLocalVisualStudio7Generator::Generate() +{ this->OutputVCProjFile(); } diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index 1863ff9c3..e5b9d5ecc 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -41,7 +41,9 @@ public: cmLocalVisualStudio7Generator(); virtual ~cmLocalVisualStudio7Generator(); - + + virtual void AddHelperCommands(); + /** * Generate the makefile for this directory. */