summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-09-09 15:25:21 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-09-09 15:28:20 (GMT)
commit51fc3ac972589e76b412f8a6c885af65ab857567 (patch)
tree6b4be790ef4e30817bf2a6bdfcf71daee675548c /Source
parent7a73164b4a42b91424efa1343428dd8857e57f71 (diff)
parent066f4d0f0a324f0db810cde38904996bb16592cb (diff)
downloadCMake-51fc3ac972589e76b412f8a6c885af65ab857567.zip
CMake-51fc3ac972589e76b412f8a6c885af65ab857567.tar.gz
CMake-51fc3ac972589e76b412f8a6c885af65ab857567.tar.bz2
Merge topic 'vs9-custom-command-dedup'
066f4d0f0a VS: Avoid unnecessary duplication of custom commands across targets in VS 9 8bb5c96bf8 cmLocalVisualStudio7Generator: Adopt SourcesVisited lookup table Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5206
Diffstat (limited to 'Source')
-rw-r--r--Source/cmLocalVisualStudio10Generator.cxx7
-rw-r--r--Source/cmLocalVisualStudio10Generator.h9
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx16
-rw-r--r--Source/cmLocalVisualStudio7Generator.h9
4 files changed, 24 insertions, 17 deletions
diff --git a/Source/cmLocalVisualStudio10Generator.cxx b/Source/cmLocalVisualStudio10Generator.cxx
index 98e9db9..3ed49a0 100644
--- a/Source/cmLocalVisualStudio10Generator.cxx
+++ b/Source/cmLocalVisualStudio10Generator.cxx
@@ -68,13 +68,6 @@ cmLocalVisualStudio10Generator::~cmLocalVisualStudio10Generator()
void cmLocalVisualStudio10Generator::GenerateTarget(cmGeneratorTarget* target)
{
- auto& targetVisited = this->GetSourcesVisited(target);
- auto& deps = this->GlobalGenerator->GetTargetDirectDepends(target);
- for (auto& d : deps) {
- // Take the union of visited source files of custom commands
- auto depVisited = this->GetSourcesVisited(d);
- targetVisited.insert(depVisited.begin(), depVisited.end());
- }
if (static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
->TargetIsFortranOnly(target)) {
this->cmLocalVisualStudio7Generator::GenerateTarget(target);
diff --git a/Source/cmLocalVisualStudio10Generator.h b/Source/cmLocalVisualStudio10Generator.h
index 631132e..45ee082 100644
--- a/Source/cmLocalVisualStudio10Generator.h
+++ b/Source/cmLocalVisualStudio10Generator.h
@@ -28,19 +28,10 @@ public:
void ReadAndStoreExternalGUID(const std::string& name,
const char* path) override;
- std::set<cmSourceFile const*>& GetSourcesVisited(
- cmGeneratorTarget const* target)
- {
- return SourcesVisited[target];
- };
-
protected:
const char* ReportErrorLabel() const override;
bool CustomCommandUseLocal() const override { return true; }
private:
void GenerateTarget(cmGeneratorTarget* target) override;
-
- std::map<cmGeneratorTarget const*, std::set<cmSourceFile const*>>
- SourcesVisited;
};
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 1ebd5da..7795654 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -86,6 +86,15 @@ void cmLocalVisualStudio7Generator::Generate()
if (!gt->IsInBuildSystem() || gt->GetProperty("EXTERNAL_MSPROJECT")) {
continue;
}
+
+ auto& gtVisited = this->GetSourcesVisited(gt);
+ auto& deps = this->GlobalGenerator->GetTargetDirectDepends(gt);
+ for (auto& d : deps) {
+ // Take the union of visited source files of custom commands
+ auto depVisited = this->GetSourcesVisited(d);
+ gtVisited.insert(depVisited.begin(), depVisited.end());
+ }
+
this->GenerateTarget(gt);
}
@@ -1615,6 +1624,8 @@ bool cmLocalVisualStudio7Generator::WriteGroup(
this->WriteVCProjBeginGroup(fout, name.c_str(), "");
}
+ auto& sourcesVisited = this->GetSourcesVisited(target);
+
// Loop through each source in the source group.
for (const cmSourceFile* sf : sourceFiles) {
std::string source = sf->GetFullPath();
@@ -1638,7 +1649,10 @@ bool cmLocalVisualStudio7Generator::WriteGroup(
// build it, then it will.
fout << "\t\t\t\tRelativePath=\"" << d << "\">\n";
if (cmCustomCommand const* command = sf->GetCustomCommand()) {
- this->WriteCustomRule(fout, configs, source.c_str(), *command, fcinfo);
+ if (sourcesVisited.insert(sf).second) {
+ this->WriteCustomRule(fout, configs, source.c_str(), *command,
+ fcinfo);
+ }
} else if (!fcinfo.FileConfigMap.empty()) {
const char* aCompilerTool = "VCCLCompilerTool";
std::string ppLang = "CXX";
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 9ccd1a1..6e06c09 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -83,6 +83,12 @@ public:
virtual void ReadAndStoreExternalGUID(const std::string& name,
const char* path);
+ std::set<cmSourceFile const*>& GetSourcesVisited(
+ cmGeneratorTarget const* target)
+ {
+ return this->SourcesVisited[target];
+ };
+
protected:
virtual void GenerateTarget(cmGeneratorTarget* target);
@@ -148,4 +154,7 @@ private:
bool FortranProject;
bool WindowsCEProject;
std::unique_ptr<cmLocalVisualStudio7GeneratorInternals> Internal;
+
+ std::map<cmGeneratorTarget const*, std::set<cmSourceFile const*>>
+ SourcesVisited;
};