Merge topic 'encode-literal-inplace'

5c3f188bef GlobalNinjaGenerator: Add EncodeLiteralInplace which doesn't copy

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6904
This commit is contained in:
Brad King
2022-01-27 16:11:03 +00:00
committed by Kitware Robot
2 changed files with 11 additions and 6 deletions

View File

@@ -166,14 +166,18 @@ std::string cmGlobalNinjaGenerator::EncodeRuleName(std::string const& name)
std::string cmGlobalNinjaGenerator::EncodeLiteral(const std::string& lit)
{
std::string result = lit;
cmSystemTools::ReplaceString(result, "$", "$$");
cmSystemTools::ReplaceString(result, "\n", "$\n");
EncodeLiteralInplace(result);
return result;
}
void cmGlobalNinjaGenerator::EncodeLiteralInplace(std::string& lit)
{
cmSystemTools::ReplaceString(lit, "$", "$$");
cmSystemTools::ReplaceString(lit, "\n", "$\n");
if (this->IsMultiConfig()) {
cmSystemTools::ReplaceString(result,
cmStrCat('$', this->GetCMakeCFGIntDir()),
cmSystemTools::ReplaceString(lit, cmStrCat('$', this->GetCMakeCFGIntDir()),
this->GetCMakeCFGIntDir());
}
return result;
}
std::string cmGlobalNinjaGenerator::EncodePath(const std::string& path)
@@ -185,7 +189,7 @@ std::string cmGlobalNinjaGenerator::EncodePath(const std::string& path)
else
std::replace(result.begin(), result.end(), '/', '\\');
#endif
result = this->EncodeLiteral(result);
this->EncodeLiteralInplace(result);
cmSystemTools::ReplaceString(result, " ", "$ ");
cmSystemTools::ReplaceString(result, ":", "$:");
return result;

View File

@@ -78,6 +78,7 @@ public:
static std::string EncodeRuleName(std::string const& name);
std::string EncodeLiteral(const std::string& lit);
void EncodeLiteralInplace(std::string& lit);
std::string EncodePath(const std::string& path);
std::unique_ptr<cmLinkLineComputer> CreateLinkLineComputer(