Merge topic 'ccg-no-mutable'

52527468 cmCustomCommandGenerator: Avoid mutable state

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1145
This commit is contained in:
Brad King 2017-08-22 12:27:01 +00:00 committed by Kitware Robot
commit 8a0ed37f61
2 changed files with 17 additions and 21 deletions

View File

@ -24,7 +24,6 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc,
, OldStyle(cc.GetEscapeOldStyle())
, MakeVars(cc.GetEscapeAllowMakeVars())
, GE(new cmGeneratorExpression(cc.GetBacktrace()))
, DependsDone(false)
{
const cmCustomCommandLines& cmdlines = this->CC.GetCommandLines();
for (cmCustomCommandLines::const_iterator cmdline = cmdlines.begin();
@ -44,6 +43,22 @@ cmCustomCommandGenerator::cmCustomCommandGenerator(cmCustomCommand const& cc,
}
this->CommandLines.push_back(argv);
}
std::vector<std::string> depends = this->CC.GetDepends();
for (std::vector<std::string>::const_iterator i = depends.begin();
i != depends.end(); ++i) {
CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = this->GE->Parse(*i);
std::vector<std::string> result;
cmSystemTools::ExpandListArgument(cge->Evaluate(this->LG, this->Config),
result);
for (std::vector<std::string>::iterator it = result.begin();
it != result.end(); ++it) {
if (cmSystemTools::FileIsFullPath(it->c_str())) {
*it = cmSystemTools::CollapseFullPath(*it);
}
}
this->Depends.insert(this->Depends.end(), result.begin(), result.end());
}
}
cmCustomCommandGenerator::~cmCustomCommandGenerator()
@ -171,23 +186,5 @@ std::vector<std::string> const& cmCustomCommandGenerator::GetByproducts() const
std::vector<std::string> const& cmCustomCommandGenerator::GetDepends() const
{
if (!this->DependsDone) {
this->DependsDone = true;
std::vector<std::string> depends = this->CC.GetDepends();
for (std::vector<std::string>::const_iterator i = depends.begin();
i != depends.end(); ++i) {
CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = this->GE->Parse(*i);
std::vector<std::string> result;
cmSystemTools::ExpandListArgument(cge->Evaluate(this->LG, this->Config),
result);
for (std::vector<std::string>::iterator it = result.begin();
it != result.end(); ++it) {
if (cmSystemTools::FileIsFullPath(it->c_str())) {
*it = cmSystemTools::CollapseFullPath(*it);
}
}
this->Depends.insert(this->Depends.end(), result.begin(), result.end());
}
}
return this->Depends;
}

View File

@ -21,9 +21,8 @@ class cmCustomCommandGenerator
bool OldStyle;
bool MakeVars;
cmGeneratorExpression* GE;
mutable bool DependsDone;
mutable std::vector<std::string> Depends;
cmCustomCommandLines CommandLines;
std::vector<std::string> Depends;
const char* GetCrossCompilingEmulator(unsigned int c) const;
const char* GetArgv0Location(unsigned int c) const;