Simplify cmVisualStudio10TargetGenerator using cmGeneratorTarget

Use CustomCommands and ModuleDefinitionFile computed in the latter
instead of recomputing them from the original target source files.
This commit is contained in:
Brad King 2012-03-07 11:56:21 -05:00
parent 45c2f93240
commit 62a841b80b
2 changed files with 12 additions and 29 deletions

View File

@ -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
for(std::vector<cmSourceFile*>::const_iterator source = sources.begin(); si = this->GeneratorTarget->CustomCommands.begin();
source != sources.end(); ++source) si != this->GeneratorTarget->CustomCommands.end(); ++si)
{ {
cmSourceFile* sf = *source; this->WriteCustomCommand(*si);
this->WriteCustomCommand(sf);
} }
} }
@ -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");

View File

@ -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;