AUTOUIC: Fix merging of --blah options not being detected for Qt6

When merging a new set of uic options with a base set of options,
such as when a source file has a non-empty AUTOUIC_OPTIONS
property, the test for whether to support options starting with
two hyphens was only testing if the Qt major version was exactly
5 rather than at least 5. That had the effect of preventing such
options from being merged correctly when using Qt6, so new and
base options would both be present instead of the single merged
option from the source file properties. Update the version check
and rename function arguments to avoid misrepresenting what
they mean.

Note that uic accepts long option names with a single hyphen too.
See Qt docs for QCommandLineParser::ParseAsLongOptions
for confirmation.
This commit is contained in:
Craig Scott
2021-10-04 14:04:51 +11:00
parent a31447417f
commit 2a31167955
3 changed files with 10 additions and 9 deletions

View File

@@ -24,7 +24,8 @@
/// @arg valueOpts list of options that accept a value
void MergeOptions(std::vector<std::string>& baseOpts,
std::vector<std::string> const& newOpts,
std::initializer_list<cm::string_view> valueOpts, bool isQt5)
std::initializer_list<cm::string_view> valueOpts,
bool isQt5OrLater)
{
if (newOpts.empty()) {
return;
@@ -47,7 +48,7 @@ void MergeOptions(std::vector<std::string>& baseOpts,
auto oit = newOpt.begin();
if (*oit == '-') {
++oit;
if (isQt5 && (*oit == '-')) {
if (isQt5OrLater && (*oit == '-')) {
++oit;
}
optName.assign(oit, newOpt.end());
@@ -204,24 +205,24 @@ std::string cmQtAutoGen::AppendFilenameSuffix(cm::string_view filename,
void cmQtAutoGen::UicMergeOptions(std::vector<std::string>& baseOpts,
std::vector<std::string> const& newOpts,
bool isQt5)
bool isQt5OrLater)
{
static std::initializer_list<cm::string_view> const valueOpts = {
"tr", "translate", "postfix", "generator",
"include", // Since Qt 5.3
"g"
};
MergeOptions(baseOpts, newOpts, valueOpts, isQt5);
MergeOptions(baseOpts, newOpts, valueOpts, isQt5OrLater);
}
void cmQtAutoGen::RccMergeOptions(std::vector<std::string>& baseOpts,
std::vector<std::string> const& newOpts,
bool isQt5)
bool isQt5OrLater)
{
static std::initializer_list<cm::string_view> const valueOpts = {
"name", "root", "compress", "threshold"
};
MergeOptions(baseOpts, newOpts, valueOpts, isQt5);
MergeOptions(baseOpts, newOpts, valueOpts, isQt5OrLater);
}
static void RccListParseContent(std::string const& content,

View File

@@ -93,12 +93,12 @@ public:
/// @brief Merges newOpts into baseOpts
static void UicMergeOptions(std::vector<std::string>& baseOpts,
std::vector<std::string> const& newOpts,
bool isQt5);
bool isQt5OrLater);
/// @brief Merges newOpts into baseOpts
static void RccMergeOptions(std::vector<std::string>& baseOpts,
std::vector<std::string> const& newOpts,
bool isQt5);
bool isQt5OrLater);
/** @class RccLister
* @brief Lists files in qrc resource files

View File

@@ -2083,7 +2083,7 @@ void cmQtAutoMocUicT::JobCompileUicT::Process()
auto optionIt = this->UicConst().UiFiles.find(sourceFile);
if (optionIt != this->UicConst().UiFiles.end()) {
UicMergeOptions(allOpts, optionIt->second.Options,
(this->BaseConst().QtVersion.Major == 5));
(this->BaseConst().QtVersion.Major >= 5));
}
cm::append(cmd, allOpts);
}