summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-10-16 14:35:29 (GMT)
committerBrad King <brad.king@kitware.com>2020-12-10 12:06:21 (GMT)
commitc887cefd9a12342a3ac8dc5c1dbb692b7e8d27af (patch)
treee2d65de9e53bfb2329d01d917041a4d9f97475f9
parent947ba01bf987bce09c2fdd5e2547f79af2c5844b (diff)
downloadCMake-c887cefd9a12342a3ac8dc5c1dbb692b7e8d27af.zip
CMake-c887cefd9a12342a3ac8dc5c1dbb692b7e8d27af.tar.gz
CMake-c887cefd9a12342a3ac8dc5c1dbb692b7e8d27af.tar.bz2
cmLocalGenerator: Simplify custom command output cmSourceFile creation
Move calls to `CreateGeneratedSource` over to `UpdateOutputToSourceMap`, which is called for all generated outputs and byproducts.
-rw-r--r--Source/cmLocalGenerator.cxx68
-rw-r--r--Source/cmLocalGenerator.h14
2 files changed, 39 insertions, 43 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 8a9cb04..a8c9b77 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -3832,19 +3832,9 @@ void CreateGeneratedSource(cmLocalGenerator& lg, const std::string& output,
}
}
-void CreateGeneratedSources(cmLocalGenerator& lg,
- const std::vector<std::string>& outputs,
- cmCommandOrigin origin,
- const cmListFileBacktrace& lfbt)
-{
- for (std::string const& o : outputs) {
- CreateGeneratedSource(lg, o, origin, lfbt);
- }
-}
-
cmSourceFile* AddCustomCommand(
cmLocalGenerator& lg, const cmListFileBacktrace& lfbt,
- const std::vector<std::string>& outputs,
+ cmCommandOrigin origin, const std::vector<std::string>& outputs,
const std::vector<std::string>& byproducts,
const std::vector<std::string>& depends, const std::string& main_dependency,
const cmImplicitDependsList& implicit_depends,
@@ -3924,9 +3914,10 @@ cmSourceFile* AddCustomCommand(
cc->SetJobPool(job_pool);
file->SetCustomCommand(std::move(cc));
- lg.AddSourceOutputs(file, outputs, cmLocalGenerator::OutputRole::Primary);
+ lg.AddSourceOutputs(file, outputs, cmLocalGenerator::OutputRole::Primary,
+ lfbt, origin);
lg.AddSourceOutputs(file, byproducts,
- cmLocalGenerator::OutputRole::Byproduct);
+ cmLocalGenerator::OutputRole::Byproduct, lfbt, origin);
}
return file;
}
@@ -3970,9 +3961,6 @@ void AddCustomCommandToTarget(cmLocalGenerator& lg,
const std::string& job_pool,
bool command_expand_lists, bool stdPipesUTF8)
{
- // Always create the byproduct sources and mark them generated.
- CreateGeneratedSources(lg, byproducts, origin, lfbt);
-
// Add the command to the appropriate build step for the target.
std::vector<std::string> no_output;
cmCustomCommand cc(no_output, byproducts, depends, commandLines, lfbt,
@@ -3995,7 +3983,7 @@ void AddCustomCommandToTarget(cmLocalGenerator& lg,
break;
}
- lg.AddTargetByproducts(target, byproducts);
+ lg.AddTargetByproducts(target, byproducts, lfbt, origin);
}
cmSourceFile* AddCustomCommandToOutput(
@@ -4009,14 +3997,11 @@ cmSourceFile* AddCustomCommandToOutput(
bool uses_terminal, bool command_expand_lists, const std::string& depfile,
const std::string& job_pool, bool stdPipesUTF8)
{
- // Always create the output sources and mark them generated.
- CreateGeneratedSources(lg, outputs, origin, lfbt);
- CreateGeneratedSources(lg, byproducts, origin, lfbt);
-
- return AddCustomCommand(
- lg, lfbt, outputs, byproducts, depends, main_dependency, implicit_depends,
- commandLines, comment, workingDir, replace, escapeOldStyle, uses_terminal,
- command_expand_lists, depfile, job_pool, stdPipesUTF8);
+ return AddCustomCommand(lg, lfbt, origin, outputs, byproducts, depends,
+ main_dependency, implicit_depends, commandLines,
+ comment, workingDir, replace, escapeOldStyle,
+ uses_terminal, command_expand_lists, depfile,
+ job_pool, stdPipesUTF8);
}
void AppendCustomCommandToOutput(cmLocalGenerator& lg,
@@ -4054,10 +4039,6 @@ void AddUtilityCommand(cmLocalGenerator& lg, const cmListFileBacktrace& lfbt,
bool uses_terminal, bool command_expand_lists,
const std::string& job_pool, bool stdPipesUTF8)
{
- // Always create the byproduct sources and mark them generated.
- CreateGeneratedSource(lg, force.Name, origin, lfbt);
- CreateGeneratedSources(lg, byproducts, origin, lfbt);
-
// Use an empty comment to avoid generation of default comment.
if (!comment) {
comment = "";
@@ -4066,12 +4047,12 @@ void AddUtilityCommand(cmLocalGenerator& lg, const cmListFileBacktrace& lfbt,
std::string no_main_dependency;
cmImplicitDependsList no_implicit_depends;
cmSourceFile* rule = AddCustomCommand(
- lg, lfbt, { force.Name }, byproducts, depends, no_main_dependency,
+ lg, lfbt, origin, { force.Name }, byproducts, depends, no_main_dependency,
no_implicit_depends, commandLines, comment, workingDir,
/*replace=*/false, escapeOldStyle, uses_terminal, command_expand_lists,
/*depfile=*/"", job_pool, stdPipesUTF8);
if (rule) {
- lg.AddTargetByproducts(target, byproducts);
+ lg.AddTargetByproducts(target, byproducts, lfbt, origin);
}
if (!force.NameCMP0049.empty()) {
@@ -4180,30 +4161,35 @@ std::vector<std::string> cmLocalGenerator::ExpandCustomCommandOutputPaths(
}
void cmLocalGenerator::AddTargetByproducts(
- cmTarget* target, const std::vector<std::string>& byproducts)
+ cmTarget* target, const std::vector<std::string>& byproducts,
+ cmListFileBacktrace const& bt, cmCommandOrigin origin)
{
for (std::string const& o : byproducts) {
- this->UpdateOutputToSourceMap(o, target);
+ this->UpdateOutputToSourceMap(o, target, bt, origin);
}
}
void cmLocalGenerator::AddSourceOutputs(
cmSourceFile* source, const std::vector<std::string>& outputs,
- OutputRole role)
+ OutputRole role, cmListFileBacktrace const& bt, cmCommandOrigin origin)
{
for (std::string const& o : outputs) {
- this->UpdateOutputToSourceMap(o, source, role);
+ this->UpdateOutputToSourceMap(o, source, role, bt, origin);
}
}
void cmLocalGenerator::UpdateOutputToSourceMap(std::string const& byproduct,
- cmTarget* target)
+ cmTarget* target,
+ cmListFileBacktrace const& bt,
+ cmCommandOrigin origin)
{
SourceEntry entry;
entry.Sources.Target = target;
auto pr = this->OutputToSource.emplace(byproduct, entry);
- if (!pr.second) {
+ if (pr.second) {
+ CreateGeneratedSource(*this, byproduct, origin, bt);
+ } else {
SourceEntry& current = pr.first->second;
// Has the target already been set?
if (!current.Sources.Target) {
@@ -4220,14 +4206,18 @@ void cmLocalGenerator::UpdateOutputToSourceMap(std::string const& byproduct,
void cmLocalGenerator::UpdateOutputToSourceMap(std::string const& output,
cmSourceFile* source,
- OutputRole role)
+ OutputRole role,
+ cmListFileBacktrace const& bt,
+ cmCommandOrigin origin)
{
SourceEntry entry;
entry.Sources.Source = source;
entry.Sources.SourceIsByproduct = role == OutputRole::Byproduct;
auto pr = this->OutputToSource.emplace(output, entry);
- if (!pr.second) {
+ if (pr.second) {
+ CreateGeneratedSource(*this, output, origin, bt);
+ } else {
SourceEntry& current = pr.first->second;
// Outputs take precedence over byproducts
if (!current.Sources.Source ||
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index c246e2e..79ffcfb 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -370,7 +370,9 @@ public:
* Add target byproducts.
*/
void AddTargetByproducts(cmTarget* target,
- const std::vector<std::string>& byproducts);
+ const std::vector<std::string>& byproducts,
+ cmListFileBacktrace const& bt,
+ cmCommandOrigin origin);
enum class OutputRole
{
@@ -383,7 +385,8 @@ public:
*/
void AddSourceOutputs(cmSourceFile* source,
std::vector<std::string> const& outputs,
- OutputRole role);
+ OutputRole role, cmListFileBacktrace const& bt,
+ cmCommandOrigin origin);
/**
* Return the target if the provided source name is a byproduct of a utility
@@ -617,9 +620,12 @@ private:
using OutputToSourceMap = std::unordered_map<std::string, SourceEntry>;
OutputToSourceMap OutputToSource;
- void UpdateOutputToSourceMap(std::string const& byproduct, cmTarget* target);
+ void UpdateOutputToSourceMap(std::string const& byproduct, cmTarget* target,
+ cmListFileBacktrace const& bt,
+ cmCommandOrigin origin);
void UpdateOutputToSourceMap(std::string const& output, cmSourceFile* source,
- OutputRole role);
+ OutputRole role, cmListFileBacktrace const& bt,
+ cmCommandOrigin origin);
void AddSharedFlags(std::string& flags, const std::string& lang,
bool shared);