1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-17 07:11:52 +08:00

Autogen: Adaptive missing Qt warning

This makes the warning message for a missing Qt use
the requested Qt version in the message text.
This commit is contained in:
Sebastian Holtermann
2019-01-14 18:32:17 +01:00
parent f2f1661334
commit 5fe18eee13
4 changed files with 39 additions and 31 deletions

View File

@@ -85,8 +85,8 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
// We support Qt4, Qt5 and Qt6 // We support Qt4, Qt5 and Qt6
auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target); auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target);
bool const validQt = (qtVersion.Major == 4) || bool const validQt = (qtVersion.first.Major == 4) ||
(qtVersion.Major == 5) || (qtVersion.Major == 6); (qtVersion.first.Major == 5) || (qtVersion.first.Major == 6);
bool const mocAvailable = (validQt || !mocExec.empty()); bool const mocAvailable = (validQt || !mocExec.empty());
bool const uicAvailable = (validQt || !uicExec.empty()); bool const uicAvailable = (validQt || !uicExec.empty());
@@ -104,10 +104,16 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
msg += ". "; msg += ". ";
msg += cmQtAutoGen::Tools(mocDisabled, uicDisabled, rccDisabled); msg += cmQtAutoGen::Tools(mocDisabled, uicDisabled, rccDisabled);
msg += " disabled. Consider adding:\n"; msg += " disabled. Consider adding:\n";
if (uicDisabled) { {
msg += " find_package(Qt5 COMPONENTS Widgets)\n"; std::string version = (qtVersion.second == 0)
} else { ? std::string("<QTVERSION>")
msg += " find_package(Qt5 COMPONENTS Core)\n"; : std::to_string(qtVersion.second);
std::string comp = uicDisabled ? "Widgets" : "Core";
msg += " find_package(Qt";
msg += version;
msg += " COMPONENTS ";
msg += comp;
msg += ")\n";
} }
msg += "to your CMakeLists.txt file."; msg += "to your CMakeLists.txt file.";
target->Makefile->IssueMessage(cmake::AUTHOR_WARNING, msg); target->Makefile->IssueMessage(cmake::AUTHOR_WARNING, msg);
@@ -115,7 +121,7 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
if (mocIsValid || uicIsValid || rccIsValid) { if (mocIsValid || uicIsValid || rccIsValid) {
// Create autogen target initializer // Create autogen target initializer
Initializers_.emplace_back(cm::make_unique<cmQtAutoGenInitializer>( Initializers_.emplace_back(cm::make_unique<cmQtAutoGenInitializer>(
this, target, qtVersion, mocIsValid, uicIsValid, rccIsValid, this, target, qtVersion.first, mocIsValid, uicIsValid, rccIsValid,
globalAutoGenTarget, globalAutoRccTarget)); globalAutoGenTarget, globalAutoRccTarget));
} }
} }

View File

@@ -1409,32 +1409,31 @@ static std::vector<cmQtAutoGenInitializer::IntegerVersion> GetKnownQtVersions(
return result; return result;
} }
cmQtAutoGenInitializer::IntegerVersion cmQtAutoGenInitializer::GetQtVersion( std::pair<cmQtAutoGenInitializer::IntegerVersion, unsigned int>
cmGeneratorTarget const* target) cmQtAutoGenInitializer::GetQtVersion(cmGeneratorTarget const* target)
{ {
std::pair<IntegerVersion, unsigned int> res(
IntegerVersion(),
CharPtrToInt(target->GetLinkInterfaceDependentStringProperty(
"QT_MAJOR_VERSION", "")));
auto knownQtVersions = GetKnownQtVersions(target); auto knownQtVersions = GetKnownQtVersions(target);
if (knownQtVersions.empty()) { if (!knownQtVersions.empty()) {
return cmQtAutoGenInitializer::IntegerVersion(); // No Qt if (res.second == 0) {
} // No specific version was requested by the target:
// Use highest known Qt version.
// Pick a version from the known versions: res.first = knownQtVersions.at(0);
auto targetVersion = CharPtrToInt( } else {
target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", "")); // Pick a version from the known versions:
for (auto it : knownQtVersions) {
if (targetVersion == 0) { if (it.Major == res.second) {
// No specific version was requested by the target: res.first = it;
// Use highest known Qt version. break;
return knownQtVersions.at(0); }
} }
for (auto it : knownQtVersions) {
if (it.Major == targetVersion) {
return it;
} }
} }
return res;
// Requested version was not found
return cmQtAutoGenInitializer::IntegerVersion();
} }
std::pair<bool, std::string> GetQtExecutable( std::pair<bool, std::string> GetQtExecutable(

View File

@@ -11,6 +11,7 @@
#include <ostream> #include <ostream>
#include <set> #include <set>
#include <string> #include <string>
#include <utility>
#include <vector> #include <vector>
class cmGeneratorTarget; class cmGeneratorTarget;
@@ -76,7 +77,9 @@ public:
}; };
public: public:
static IntegerVersion GetQtVersion(cmGeneratorTarget const* target); /// @return The detected Qt version and the required Qt major version
static std::pair<IntegerVersion, unsigned int> GetQtVersion(
cmGeneratorTarget const* target);
cmQtAutoGenInitializer(cmQtAutoGenGlobalInitializer* globalInitializer, cmQtAutoGenInitializer(cmQtAutoGenGlobalInitializer* globalInitializer,
cmGeneratorTarget* target, cmGeneratorTarget* target,

View File

@@ -2,7 +2,7 @@
AUTOGEN: No valid Qt version found for target main. AUTOMOC, AUTOUIC and AUTOGEN: No valid Qt version found for target main. AUTOMOC, AUTOUIC and
AUTORCC disabled. Consider adding: AUTORCC disabled. Consider adding:
find_package\(Qt5 COMPONENTS Widgets\) find_package\(Qt<QTVERSION> COMPONENTS Widgets\)
to your CMakeLists.txt file. to your CMakeLists.txt file.
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.