From 706c48301d29124e2ec4cd554b0de86d3743d62d Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 27 Oct 2020 10:06:21 -0400 Subject: cmCustomCommandGenerator: Treat relative outputs w.r.t. build dir The `add_custom_command` and `add_custom_target` commands already do this for plain output and byproduct paths. Perform the same conversion for such paths discovered after generator expression evaluation too. --- Source/cmCustomCommandGenerator.cxx | 39 ++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx index e099630..cc0419d 100644 --- a/Source/cmCustomCommandGenerator.cxx +++ b/Source/cmCustomCommandGenerator.cxx @@ -24,25 +24,42 @@ #include "cmTransformDepfile.h" namespace { -std::vector EvaluatePaths(std::vector const& paths, - cmGeneratorExpression const& ge, - cmLocalGenerator* lg, - std::string const& config) +std::vector EvaluateDepends(std::vector const& paths, + cmGeneratorExpression const& ge, + cmLocalGenerator* lg, + std::string const& config) { - std::vector result; + std::vector depends; for (std::string const& p : paths) { std::unique_ptr cge = ge.Parse(p); std::string const& ep = cge->Evaluate(lg, config); - cm::append(result, cmExpandedList(ep)); + cm::append(depends, cmExpandedList(ep)); } - for (std::string& p : result) { + for (std::string& p : depends) { if (cmSystemTools::FileIsFullPath(p)) { p = cmSystemTools::CollapseFullPath(p); } else { cmSystemTools::ConvertToUnixSlashes(p); } } - return result; + return depends; +} + +std::vector EvaluateOutputs(std::vector const& paths, + cmGeneratorExpression const& ge, + cmLocalGenerator* lg, + std::string const& config) +{ + std::vector outputs; + for (std::string const& p : paths) { + std::unique_ptr cge = ge.Parse(p); + std::string const& ep = cge->Evaluate(lg, config); + cm::append(outputs, cmExpandedList(ep)); + } + for (std::string& p : outputs) { + p = cmSystemTools::CollapseFullPath(p, lg->GetCurrentBinaryDirectory()); + } + return outputs; } } @@ -124,10 +141,10 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc, this->CommandLines.push_back(std::move(argv)); } - this->Outputs = EvaluatePaths(cc.GetOutputs(), ge, this->LG, this->Config); + this->Outputs = EvaluateOutputs(cc.GetOutputs(), ge, this->LG, this->Config); this->Byproducts = - EvaluatePaths(cc.GetByproducts(), ge, this->LG, this->Config); - this->Depends = EvaluatePaths(cc.GetDepends(), ge, this->LG, this->Config); + EvaluateOutputs(cc.GetByproducts(), ge, this->LG, this->Config); + this->Depends = EvaluateDepends(cc.GetDepends(), ge, this->LG, this->Config); const std::string& workingdirectory = this->CC->GetWorkingDirectory(); if (!workingdirectory.empty()) { -- cgit v0.12