summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-04-07 20:17:44 (GMT)
committerBrad King <brad.king@kitware.com>2017-04-11 17:36:31 (GMT)
commita77158b25f95c065af73a1578db88e537ef72c72 (patch)
tree7cd1bb60f2fe1732a295bdb49a3441540454241d /Source
parentf4af14add40d851f7c8ef92aad2d549dcbbacf1f (diff)
downloadCMake-a77158b25f95c065af73a1578db88e537ef72c72.zip
CMake-a77158b25f95c065af73a1578db88e537ef72c72.tar.gz
CMake-a77158b25f95c065af73a1578db88e537ef72c72.tar.bz2
VS: Refactor loop over classified sources
Loop over all sources at once instead of looking up and looping over each kind of source separately.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx163
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h2
2 files changed, 80 insertions, 85 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 419989a..406980b 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1727,15 +1727,6 @@ void cmVisualStudio10TargetGenerator::WriteSource(std::string const& tool,
this->Tools[tool].push_back(toolSource);
}
-void cmVisualStudio10TargetGenerator::WriteSources(
- std::string const& tool, std::vector<cmSourceFile const*> const& sources)
-{
- for (std::vector<cmSourceFile const*>::const_iterator si = sources.begin();
- si != sources.end(); ++si) {
- this->WriteSource(tool, *si);
- }
-}
-
void cmVisualStudio10TargetGenerator::WriteAllSources()
{
if (this->GeneratorTarget->GetType() > cmStateEnums::UTILITY) {
@@ -1743,90 +1734,96 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
}
this->WriteString("<ItemGroup>\n", 1);
- std::vector<cmSourceFile const*> headerSources;
- this->GeneratorTarget->GetHeaderSources(headerSources, "");
- for (std::vector<cmSourceFile const*>::const_iterator si =
- headerSources.begin();
- si != headerSources.end(); ++si) {
- this->WriteHeaderSource(*si);
- }
- std::vector<cmSourceFile const*> idlSources;
- this->GeneratorTarget->GetIDLSources(idlSources, "");
- this->WriteSources("Midl", idlSources);
+ cmGeneratorTarget::KindedSources const& sources =
+ this->GeneratorTarget->GetKindedSources("");
- std::vector<cmSourceFile const*> objectSources;
- this->GeneratorTarget->GetObjectSources(objectSources, "");
- for (std::vector<cmSourceFile const*>::const_iterator si =
- objectSources.begin();
- si != objectSources.end(); ++si) {
- const std::string& lang = (*si)->GetLanguage();
+ for (std::vector<cmGeneratorTarget::SourceAndKind>::const_iterator si =
+ sources.Sources.begin();
+ si != sources.Sources.end(); ++si) {
std::string tool;
- if (lang == "C" || lang == "CXX") {
- tool = "ClCompile";
- } else if (lang == "ASM_MASM" && this->GlobalGenerator->IsMasmEnabled()) {
- tool = "MASM";
- } else if (lang == "ASM_NASM" && this->GlobalGenerator->IsNasmEnabled()) {
- tool = "NASM";
- } else if (lang == "RC") {
- tool = "ResourceCompile";
- } else if (lang == "CSharp") {
- tool = "Compile";
- } else if (lang == "CUDA" && this->GlobalGenerator->IsCudaEnabled()) {
- tool = "CudaCompile";
+ switch (si->Kind) {
+ case cmGeneratorTarget::SourceKindAppManifest:
+ tool = "AppxManifest";
+ break;
+ case cmGeneratorTarget::SourceKindCertificate:
+ tool = "None";
+ break;
+ case cmGeneratorTarget::SourceKindCustomCommand:
+ // Handled elsewhere.
+ break;
+ case cmGeneratorTarget::SourceKindExternalObject:
+ tool = "Object";
+ if (this->LocalGenerator->GetVersion() <
+ cmGlobalVisualStudioGenerator::VS11) {
+ // For VS == 10 we cannot use LinkObjects to avoid linking custom
+ // command outputs. If an object file is generated in this target,
+ // then vs10 will use it in the build, and we have to list it as
+ // None instead of Object.
+ std::vector<cmSourceFile*> const* d =
+ this->GeneratorTarget->GetSourceDepends(si->Source);
+ if (d && !d->empty()) {
+ tool = "None";
+ }
+ }
+ break;
+ case cmGeneratorTarget::SourceKindExtra:
+ this->WriteExtraSource(si->Source);
+ break;
+ case cmGeneratorTarget::SourceKindHeader:
+ this->WriteHeaderSource(si->Source);
+ break;
+ case cmGeneratorTarget::SourceKindIDL:
+ tool = "Midl";
+ break;
+ case cmGeneratorTarget::SourceKindManifest:
+ // Handled elsewhere.
+ break;
+ case cmGeneratorTarget::SourceKindModuleDefinition:
+ tool = "None";
+ break;
+ case cmGeneratorTarget::SourceKindObjectSource: {
+ const std::string& lang = si->Source->GetLanguage();
+ if (lang == "C" || lang == "CXX") {
+ tool = "ClCompile";
+ } else if (lang == "ASM_MASM" &&
+ this->GlobalGenerator->IsMasmEnabled()) {
+ tool = "MASM";
+ } else if (lang == "ASM_NASM" &&
+ this->GlobalGenerator->IsNasmEnabled()) {
+ tool = "NASM";
+ } else if (lang == "RC") {
+ tool = "ResourceCompile";
+ } else if (lang == "CSharp") {
+ tool = "Compile";
+ } else if (lang == "CUDA" && this->GlobalGenerator->IsCudaEnabled()) {
+ tool = "CudaCompile";
+ } else {
+ tool = "None";
+ }
+ } break;
+ case cmGeneratorTarget::SourceKindResx:
+ // Handled elsewhere.
+ break;
+ case cmGeneratorTarget::SourceKindXaml:
+ // Handled elsewhere.
+ break;
}
if (!tool.empty()) {
- this->WriteSource(tool, *si, " ");
- if (this->OutputSourceSpecificFlags(*si)) {
- this->WriteString("</", 2);
- (*this->BuildFileStream) << tool << ">\n";
+ if (si->Kind == cmGeneratorTarget::SourceKindObjectSource) {
+ this->WriteSource(tool, si->Source, " ");
+ if (this->OutputSourceSpecificFlags(si->Source)) {
+ this->WriteString("</", 2);
+ (*this->BuildFileStream) << tool << ">\n";
+ } else {
+ (*this->BuildFileStream) << " />\n";
+ }
} else {
- (*this->BuildFileStream) << " />\n";
+ this->WriteSource(tool, si->Source);
}
- } else {
- this->WriteSource("None", *si);
- }
- }
-
- std::vector<cmSourceFile const*> manifestSources;
- this->GeneratorTarget->GetAppManifest(manifestSources, "");
- this->WriteSources("AppxManifest", manifestSources);
-
- std::vector<cmSourceFile const*> certificateSources;
- this->GeneratorTarget->GetCertificates(certificateSources, "");
- this->WriteSources("None", certificateSources);
-
- std::vector<cmSourceFile const*> externalObjects;
- this->GeneratorTarget->GetExternalObjects(externalObjects, "");
- if (this->LocalGenerator->GetVersion() >
- cmGlobalVisualStudioGenerator::VS10) {
- // For VS >= 11 we use LinkObjects to avoid linking custom command
- // outputs. Use Object for all external objects, generated or not.
- this->WriteSources("Object", externalObjects);
- } else {
- // If an object file is generated in this target, then vs10 will use
- // it in the build, and we have to list it as None instead of Object.
- for (std::vector<cmSourceFile const*>::const_iterator si =
- externalObjects.begin();
- si != externalObjects.end(); ++si) {
- std::vector<cmSourceFile*> const* d =
- this->GeneratorTarget->GetSourceDepends(*si);
- this->WriteSource((d && !d->empty()) ? "None" : "Object", *si);
}
}
- std::vector<cmSourceFile const*> extraSources;
- this->GeneratorTarget->GetExtraSources(extraSources, "");
- for (std::vector<cmSourceFile const*>::const_iterator si =
- extraSources.begin();
- si != extraSources.end(); ++si) {
- this->WriteExtraSource(*si);
- }
-
- std::vector<cmSourceFile const*> defSources;
- this->GeneratorTarget->GetModuleDefinitionSources(defSources, "");
- this->WriteSources("None", defSources);
-
if (this->IsMissingFiles) {
this->WriteMissingFiles();
}
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 52d5550..b85f0f2 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -62,8 +62,6 @@ private:
void WriteNsightTegraConfigurationValues(std::string const& config);
void WriteSource(std::string const& tool, cmSourceFile const* sf,
const char* end = 0);
- void WriteSources(std::string const& tool,
- std::vector<cmSourceFile const*> const&);
void WriteAllSources();
void WriteDotNetReferences();
void WriteDotNetReference(std::string const& ref, std::string const& hint);