소스 검색

BUG: fix problem for non-C/CXX languages with Visual Studio, the
dependencies for the custom commands added for java were not handled
correctly. Needs more work.

Alex

Alexander Neundorf 18 년 전
부모
커밋
8245f437b6

+ 16 - 13
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

+ 0 - 2
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,

+ 3 - 1
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
    */

+ 6 - 3
Source/cmLocalVisualStudio6Generator.cxx

@@ -32,13 +32,16 @@ cmLocalVisualStudio6Generator::~cmLocalVisualStudio6Generator()
 {
 }
 
-
-void cmLocalVisualStudio6Generator::Generate()
-{ 
+void cmLocalVisualStudio6Generator::AddHelperCommands()
+{
   std::set<cmStdString> lang;
   lang.insert("C");
   lang.insert("CXX");
   this->CreateCustomTargetsAndCommands(lang);
+}
+
+void cmLocalVisualStudio6Generator::Generate()
+{
   this->OutputDSPFile();
 }
 

+ 3 - 1
Source/cmLocalVisualStudio6Generator.h

@@ -38,7 +38,9 @@ public:
   cmLocalVisualStudio6Generator();
 
   virtual ~cmLocalVisualStudio6Generator();
-  
+
+  virtual void AddHelperCommands();
+
   /**
    * Generate the makefile for this directory. 
    */

+ 5 - 2
Source/cmLocalVisualStudio7Generator.cxx

@@ -42,8 +42,7 @@ cmLocalVisualStudio7Generator::~cmLocalVisualStudio7Generator()
 {
 }
 
-
-void cmLocalVisualStudio7Generator::Generate()
+void cmLocalVisualStudio7Generator::AddHelperCommands()
 {
   std::set<cmStdString> lang;
   lang.insert("C");
@@ -53,6 +52,10 @@ void cmLocalVisualStudio7Generator::Generate()
   lang.insert("DEF");
   this->CreateCustomTargetsAndCommands(lang);
   this->FixGlobalTargets();
+}
+
+void cmLocalVisualStudio7Generator::Generate()
+{
   this->OutputVCProjFile();
 }
 

+ 3 - 1
Source/cmLocalVisualStudio7Generator.h

@@ -41,7 +41,9 @@ public:
   cmLocalVisualStudio7Generator();
 
   virtual ~cmLocalVisualStudio7Generator();
-  
+
+  virtual void AddHelperCommands();
+
   /**
    * Generate the makefile for this directory. 
    */