Autogen: Modernize cmQtAutoGen methods using cm::string_view
This commit is contained in:
parent
52a8fb2d53
commit
8586077baa
@ -12,6 +12,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <initializer_list>
|
||||
#include <sstream>
|
||||
#include <utility>
|
||||
|
||||
@ -21,7 +22,7 @@
|
||||
/// @arg valueOpts list of options that accept a value
|
||||
void MergeOptions(std::vector<std::string>& baseOpts,
|
||||
std::vector<std::string> const& newOpts,
|
||||
std::vector<std::string> const& valueOpts, bool isQt5)
|
||||
std::initializer_list<cm::string_view> valueOpts, bool isQt5)
|
||||
{
|
||||
typedef std::vector<std::string>::iterator Iter;
|
||||
typedef std::vector<std::string>::const_iterator CIter;
|
||||
@ -117,60 +118,42 @@ std::string const& cmQtAutoGen::GeneratorNameUpper(GenT genType)
|
||||
|
||||
std::string cmQtAutoGen::Tools(bool moc, bool uic, bool rcc)
|
||||
{
|
||||
std::string res;
|
||||
std::vector<std::string> lst;
|
||||
std::array<cm::string_view, 3> lst;
|
||||
decltype(lst)::size_type num = 0;
|
||||
if (moc) {
|
||||
lst.emplace_back("AUTOMOC");
|
||||
lst.at(num++) = "AUTOMOC";
|
||||
}
|
||||
if (uic) {
|
||||
lst.emplace_back("AUTOUIC");
|
||||
lst.at(num++) = "AUTOUIC";
|
||||
}
|
||||
if (rcc) {
|
||||
lst.emplace_back("AUTORCC");
|
||||
lst.at(num++) = "AUTORCC";
|
||||
}
|
||||
switch (lst.size()) {
|
||||
switch (num) {
|
||||
case 1:
|
||||
res += lst.at(0);
|
||||
break;
|
||||
return std::string(lst[0]);
|
||||
case 2:
|
||||
res += lst.at(0);
|
||||
res += " and ";
|
||||
res += lst.at(1);
|
||||
break;
|
||||
return cmStrCat(lst[0], " and ", lst[1]);
|
||||
case 3:
|
||||
res += lst.at(0);
|
||||
res += ", ";
|
||||
res += lst.at(1);
|
||||
res += " and ";
|
||||
res += lst.at(2);
|
||||
break;
|
||||
return cmStrCat(lst[0], ", ", lst[1], " and ", lst[2]);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
return std::string();
|
||||
}
|
||||
|
||||
std::string cmQtAutoGen::Quoted(std::string const& text)
|
||||
std::string cmQtAutoGen::Quoted(cm::string_view text)
|
||||
{
|
||||
const std::array<std::pair<const char*, const char*>, 9> replaces = {
|
||||
{ { "\\", "\\\\" },
|
||||
{ "\"", "\\\"" },
|
||||
{ "\a", "\\a" },
|
||||
{ "\b", "\\b" },
|
||||
{ "\f", "\\f" },
|
||||
{ "\n", "\\n" },
|
||||
{ "\r", "\\r" },
|
||||
{ "\t", "\\t" },
|
||||
{ "\v", "\\v" } }
|
||||
};
|
||||
static std::initializer_list<std::pair<const char*, const char*>> const
|
||||
replacements = { { "\\", "\\\\" }, { "\"", "\\\"" }, { "\a", "\\a" },
|
||||
{ "\b", "\\b" }, { "\f", "\\f" }, { "\n", "\\n" },
|
||||
{ "\r", "\\r" }, { "\t", "\\t" }, { "\v", "\\v" } };
|
||||
|
||||
std::string res = text;
|
||||
for (auto const& pair : replaces) {
|
||||
std::string res(text);
|
||||
for (auto const& pair : replacements) {
|
||||
cmSystemTools::ReplaceString(res, pair.first, pair.second);
|
||||
}
|
||||
res = '"' + res;
|
||||
res += '"';
|
||||
return res;
|
||||
return cmStrCat('"', res, '"');
|
||||
}
|
||||
|
||||
std::string cmQtAutoGen::QuotedCommand(std::vector<std::string> const& command)
|
||||
@ -191,37 +174,31 @@ std::string cmQtAutoGen::QuotedCommand(std::vector<std::string> const& command)
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string cmQtAutoGen::SubDirPrefix(std::string const& filename)
|
||||
std::string cmQtAutoGen::SubDirPrefix(cm::string_view filename)
|
||||
{
|
||||
std::string::size_type slash_pos = filename.rfind('/');
|
||||
if (slash_pos == std::string::npos) {
|
||||
auto slashPos = filename.rfind('/');
|
||||
if (slashPos == cm::string_view::npos) {
|
||||
return std::string();
|
||||
}
|
||||
return filename.substr(0, slash_pos + 1);
|
||||
return std::string(filename.substr(0, slashPos + 1));
|
||||
}
|
||||
|
||||
std::string cmQtAutoGen::AppendFilenameSuffix(std::string const& filename,
|
||||
std::string const& suffix)
|
||||
std::string cmQtAutoGen::AppendFilenameSuffix(cm::string_view filename,
|
||||
cm::string_view suffix)
|
||||
{
|
||||
std::string res;
|
||||
auto pos = filename.rfind('.');
|
||||
if (pos != std::string::npos) {
|
||||
const auto it_dot = filename.begin() + pos;
|
||||
res.assign(filename.begin(), it_dot);
|
||||
res.append(suffix);
|
||||
res.append(it_dot, filename.end());
|
||||
} else {
|
||||
res = filename;
|
||||
res.append(suffix);
|
||||
auto dotPos = filename.rfind('.');
|
||||
if (dotPos == cm::string_view::npos) {
|
||||
return cmStrCat(filename, suffix);
|
||||
}
|
||||
return res;
|
||||
return cmStrCat(filename.substr(0, dotPos), suffix,
|
||||
filename.substr(dotPos, filename.size() - dotPos));
|
||||
}
|
||||
|
||||
void cmQtAutoGen::UicMergeOptions(std::vector<std::string>& baseOpts,
|
||||
std::vector<std::string> const& newOpts,
|
||||
bool isQt5)
|
||||
{
|
||||
static std::vector<std::string> const valueOpts = {
|
||||
static std::initializer_list<cm::string_view> const valueOpts = {
|
||||
"tr", "translate", "postfix", "generator",
|
||||
"include", // Since Qt 5.3
|
||||
"g"
|
||||
@ -233,9 +210,9 @@ void cmQtAutoGen::RccMergeOptions(std::vector<std::string>& baseOpts,
|
||||
std::vector<std::string> const& newOpts,
|
||||
bool isQt5)
|
||||
{
|
||||
static std::vector<std::string> const valueOpts = { "name", "root",
|
||||
"compress",
|
||||
"threshold" };
|
||||
static std::initializer_list<cm::string_view> const valueOpts = {
|
||||
"name", "root", "compress", "threshold"
|
||||
};
|
||||
MergeOptions(baseOpts, newOpts, valueOpts, isQt5);
|
||||
}
|
||||
|
||||
@ -349,9 +326,8 @@ bool cmQtAutoGen::RccLister::list(std::string const& qrcFile,
|
||||
|
||||
// Log command
|
||||
if (verbose) {
|
||||
std::string msg =
|
||||
cmStrCat("Running command:\n", QuotedCommand(cmd), '\n');
|
||||
cmSystemTools::Stdout(msg);
|
||||
cmSystemTools::Stdout(
|
||||
cmStrCat("Running command:\n", QuotedCommand(cmd), '\n'));
|
||||
}
|
||||
|
||||
result = cmSystemTools::RunSingleCommand(
|
||||
@ -362,12 +338,10 @@ bool cmQtAutoGen::RccLister::list(std::string const& qrcFile,
|
||||
error =
|
||||
cmStrCat("The rcc list process failed for ", Quoted(qrcFile), '\n');
|
||||
if (!rccStdOut.empty()) {
|
||||
error += rccStdOut;
|
||||
error += "\n";
|
||||
error += cmStrCat(rccStdOut, '\n');
|
||||
}
|
||||
if (!rccStdErr.empty()) {
|
||||
error += rccStdErr;
|
||||
error += "\n";
|
||||
error += cmStrCat(rccStdErr, '\n');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
#include "cmConfigure.h" // IWYU pragma: keep
|
||||
|
||||
#include "cm_string_view.hxx"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -74,16 +76,16 @@ public:
|
||||
static std::string Tools(bool moc, bool uic, bool rcc);
|
||||
|
||||
/// @brief Returns the string escaped and enclosed in quotes
|
||||
static std::string Quoted(std::string const& text);
|
||||
static std::string Quoted(cm::string_view text);
|
||||
|
||||
static std::string QuotedCommand(std::vector<std::string> const& command);
|
||||
|
||||
/// @brief Returns the parent directory of the file with a "/" suffix
|
||||
static std::string SubDirPrefix(std::string const& filename);
|
||||
static std::string SubDirPrefix(cm::string_view filename);
|
||||
|
||||
/// @brief Appends the suffix to the filename before the last dot
|
||||
static std::string AppendFilenameSuffix(std::string const& filename,
|
||||
std::string const& suffix);
|
||||
static std::string AppendFilenameSuffix(cm::string_view filename,
|
||||
cm::string_view suffix);
|
||||
|
||||
/// @brief Merges newOpts into baseOpts
|
||||
static void UicMergeOptions(std::vector<std::string>& baseOpts,
|
||||
|
Loading…
Reference in New Issue
Block a user