diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx index 59707092ce..e099630f51 100644 --- a/Source/cmCustomCommandGenerator.cxx +++ b/Source/cmCustomCommandGenerator.cxx @@ -24,22 +24,25 @@ #include "cmTransformDepfile.h" namespace { -void AppendPaths(const std::vector& inputs, - cmGeneratorExpression const& ge, cmLocalGenerator* lg, - std::string const& config, std::vector& output) +std::vector EvaluatePaths(std::vector const& paths, + cmGeneratorExpression const& ge, + cmLocalGenerator* lg, + std::string const& config) { - for (std::string const& in : inputs) { - std::unique_ptr cge = ge.Parse(in); - std::vector result = - cmExpandedList(cge->Evaluate(lg, config)); - for (std::string& it : result) { - cmSystemTools::ConvertToUnixSlashes(it); - if (cmSystemTools::FileIsFullPath(it)) { - it = cmSystemTools::CollapseFullPath(it); - } - } - cm::append(output, result); + std::vector result; + 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)); } + for (std::string& p : result) { + if (cmSystemTools::FileIsFullPath(p)) { + p = cmSystemTools::CollapseFullPath(p); + } else { + cmSystemTools::ConvertToUnixSlashes(p); + } + } + return result; } } @@ -121,10 +124,10 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc, this->CommandLines.push_back(std::move(argv)); } - AppendPaths(cc.GetOutputs(), ge, this->LG, this->Config, this->Outputs); - AppendPaths(cc.GetByproducts(), ge, this->LG, this->Config, - this->Byproducts); - AppendPaths(cc.GetDepends(), ge, this->LG, this->Config, this->Depends); + this->Outputs = EvaluatePaths(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); const std::string& workingdirectory = this->CC->GetWorkingDirectory(); if (!workingdirectory.empty()) {