diff options
author | Brad King <brad.king@kitware.com> | 2020-10-27 14:06:21 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-12-10 12:06:20 (GMT) |
commit | 706c48301d29124e2ec4cd554b0de86d3743d62d (patch) | |
tree | aa5c8447059acd9f799f0117b40d23c06ecb7bed | |
parent | 5d23c5446e1a4645f00230f9d4beeb2429a39f31 (diff) | |
download | CMake-706c48301d29124e2ec4cd554b0de86d3743d62d.zip CMake-706c48301d29124e2ec4cd554b0de86d3743d62d.tar.gz CMake-706c48301d29124e2ec4cd554b0de86d3743d62d.tar.bz2 |
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.
-rw-r--r-- | Source/cmCustomCommandGenerator.cxx | 39 |
1 files 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<std::string> EvaluatePaths(std::vector<std::string> const& paths, - cmGeneratorExpression const& ge, - cmLocalGenerator* lg, - std::string const& config) +std::vector<std::string> EvaluateDepends(std::vector<std::string> const& paths, + cmGeneratorExpression const& ge, + cmLocalGenerator* lg, + std::string const& config) { - std::vector<std::string> result; + std::vector<std::string> depends; for (std::string const& p : paths) { std::unique_ptr<cmCompiledGeneratorExpression> 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<std::string> EvaluateOutputs(std::vector<std::string> const& paths, + cmGeneratorExpression const& ge, + cmLocalGenerator* lg, + std::string const& config) +{ + std::vector<std::string> outputs; + for (std::string const& p : paths) { + std::unique_ptr<cmCompiledGeneratorExpression> 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()) { |