Browse Source

Simplify cmVisualStudio10TargetGenerator using cmGeneratorTarget

Use CustomCommands and ModuleDefinitionFile computed in the latter
instead of recomputing them from the original target source files.
Brad King 13 years ago
parent
commit
62a841b80b

+ 10 - 27
Source/cmVisualStudio10TargetGenerator.cxx

@@ -11,6 +11,7 @@
 ============================================================================*/
 ============================================================================*/
 #include "cmVisualStudio10TargetGenerator.h"
 #include "cmVisualStudio10TargetGenerator.h"
 #include "cmGlobalVisualStudio10Generator.h"
 #include "cmGlobalVisualStudio10Generator.h"
+#include "cmGeneratorTarget.h"
 #include "cmTarget.h"
 #include "cmTarget.h"
 #include "cmComputeLinkInformation.h"
 #include "cmComputeLinkInformation.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
@@ -62,6 +63,7 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
 {
 {
   this->GlobalGenerator = gg;
   this->GlobalGenerator = gg;
   this->Target = target;
   this->Target = target;
+  this->GeneratorTarget = gg->GetGeneratorTarget(target);
   this->Makefile = target->GetMakefile();
   this->Makefile = target->GetMakefile();
   this->LocalGenerator =  
   this->LocalGenerator =  
     (cmLocalVisualStudio7Generator*)
     (cmLocalVisualStudio7Generator*)
@@ -70,7 +72,8 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
   this->GlobalGenerator->CreateGUID(this->Name.c_str());
   this->GlobalGenerator->CreateGUID(this->Name.c_str());
   this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
   this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
   this->Platform = gg->GetPlatformName();
   this->Platform = gg->GetPlatformName();
-  this->ComputeObjectNames();
+  this->LocalGenerator
+    ->ComputeObjectNameRequirements(target->GetSourceFiles());
   this->BuildFileStream = 0;
   this->BuildFileStream = 0;
 }
 }
 
 
@@ -421,12 +424,11 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
 void cmVisualStudio10TargetGenerator::WriteCustomCommands()
 void cmVisualStudio10TargetGenerator::WriteCustomCommands()
 {
 {
   this->SourcesVisited.clear();
   this->SourcesVisited.clear();
-  std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
-  for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
-      source != sources.end(); ++source)
+  for(std::vector<cmSourceFile*>::const_iterator
+        si = this->GeneratorTarget->CustomCommands.begin();
+      si != this->GeneratorTarget->CustomCommands.end(); ++si)
     {
     {
-    cmSourceFile* sf = *source;
-    this->WriteCustomCommand(sf);
+    this->WriteCustomCommand(*si);
     }
     }
 }
 }
 
 
@@ -875,25 +877,6 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
   this->WriteString("</ItemGroup>\n", 1);
   this->WriteString("</ItemGroup>\n", 1);
 }
 }
 
 
-void cmVisualStudio10TargetGenerator::ComputeObjectNames()
-{
-  // get the classes from the source lists then add them to the groups
-  std::vector<cmSourceFile*>const & classes = this->Target->GetSourceFiles();
-  for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
-      i != classes.end(); i++)
-    {
-    // Add the file to the list of sources.
-    std::string source = (*i)->GetFullPath();
-    if(cmSystemTools::UpperCase((*i)->GetExtension()) == "DEF")
-      {
-      this->ModuleDefinitionFile = (*i)->GetFullPath();
-      }
-    }
-
-  // Compute which sources need unique object computation.
-  this->LocalGenerator->ComputeObjectNameRequirements(classes);
-}
-
 bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
 bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
   cmSourceFile* source)
   cmSourceFile* source)
 { 
 { 
@@ -1513,10 +1496,10 @@ void cmVisualStudio10TargetGenerator::WriteLinkOptions(std::string const&
   linkOptions.AddFlag("ImportLibrary", imLib.c_str());
   linkOptions.AddFlag("ImportLibrary", imLib.c_str());
   linkOptions.AddFlag("ProgramDataBaseFile", pdb.c_str());
   linkOptions.AddFlag("ProgramDataBaseFile", pdb.c_str());
   linkOptions.Parse(flags.c_str());
   linkOptions.Parse(flags.c_str());
-  if(!this->ModuleDefinitionFile.empty())
+  if(!this->GeneratorTarget->ModuleDefinitionFile.empty())
     {
     {
     linkOptions.AddFlag("ModuleDefinitionFile",
     linkOptions.AddFlag("ModuleDefinitionFile",
-                        this->ModuleDefinitionFile.c_str());
+                        this->GeneratorTarget->ModuleDefinitionFile.c_str());
     }
     }
 
 
   linkOptions.RemoveFlag("GenerateManifest");
   linkOptions.RemoveFlag("GenerateManifest");

+ 2 - 2
Source/cmVisualStudio10TargetGenerator.h

@@ -15,6 +15,7 @@
 
 
 class cmTarget;
 class cmTarget;
 class cmMakefile;
 class cmMakefile;
+class cmGeneratorTarget;
 class cmGeneratedFileStream;
 class cmGeneratedFileStream;
 class cmGlobalVisualStudio10Generator;
 class cmGlobalVisualStudio10Generator;
 class cmSourceFile;
 class cmSourceFile;
@@ -75,7 +76,6 @@ private:
   void WriteEvents(std::string const& configName);
   void WriteEvents(std::string const& configName);
   void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
   void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
                   std::string const& configName);
                   std::string const& configName);
-  void ComputeObjectNames();
   void WriteGroupSources(const char* name,
   void WriteGroupSources(const char* name,
                          std::vector<cmSourceFile*> const& sources,
                          std::vector<cmSourceFile*> const& sources,
                          std::vector<cmSourceGroup>& );
                          std::vector<cmSourceGroup>& );
@@ -87,9 +87,9 @@ private:
   typedef cmVisualStudioGeneratorOptions Options;
   typedef cmVisualStudioGeneratorOptions Options;
   typedef std::map<cmStdString, Options*> OptionsMap;
   typedef std::map<cmStdString, Options*> OptionsMap;
   OptionsMap ClOptions;
   OptionsMap ClOptions;
-  std::string ModuleDefinitionFile;
   std::string PathToVcxproj;
   std::string PathToVcxproj;
   cmTarget* Target;
   cmTarget* Target;
+  cmGeneratorTarget* GeneratorTarget;
   cmMakefile* Makefile;
   cmMakefile* Makefile;
   std::string Platform;
   std::string Platform;
   std::string GUID;
   std::string GUID;