From c5ecb47c61709fec6a8cdf8af029d416b3ae57be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kai=20K=C3=B6hne?= Date: Tue, 9 Mar 2021 11:40:37 +0100 Subject: [PATCH] QmlDesigner: Retrieve rcc command centrally Change-Id: I6886a22b51a002b48c248b3f49adc622c58c7ad8 Reviewed-by: hjk Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/generateresource.cpp | 14 ++++++------- src/plugins/qtsupport/baseqtversion.cpp | 22 +++++++++++++++++++- src/plugins/qtsupport/baseqtversion.h | 1 + 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/generateresource.cpp b/src/plugins/qmldesigner/generateresource.cpp index cdb34f24d92..d9e3447c3f7 100644 --- a/src/plugins/qmldesigner/generateresource.cpp +++ b/src/plugins/qmldesigner/generateresource.cpp @@ -99,18 +99,18 @@ void GenerateResource::generateMenuEntry() return; temp.close(); - auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->hostBinPath(); - rccBinary = rccBinary.pathAppended(Utils::HostOsInfo::withExecutableSuffix("rcc")); + QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion( + currentProject->activeTarget()->kit()); + QString rccBinary = qtVersion->rccCommand(); QProcess rccProcess; - rccProcess.setProgram(rccBinary.toString()); rccProcess.setWorkingDirectory(projectPath); const QStringList arguments1 = {"--project", "--output", temp.fileName()}; const QStringList arguments2 = {"--binary", "--output", resourceFileName, temp.fileName()}; for (const auto &arguments : {arguments1, arguments2}) { - rccProcess.start(rccBinary.toString(), arguments); + rccProcess.start(rccBinary, arguments); if (!rccProcess.waitForStarted()) { Core::MessageManager::writeDisrupting( QCoreApplication::translate("QmlDesigner::GenerateResource", @@ -125,7 +125,7 @@ void GenerateResource::generateMenuEntry() Core::MessageManager::writeDisrupting( QCoreApplication::translate("QmlDesigner::GenerateResource", "A timeout occurred running \"%1\"") - .arg(rccBinary.toString() + arguments.join(" "))); + .arg(rccBinary + " " + arguments.join(" "))); return ; } @@ -138,14 +138,14 @@ void GenerateResource::generateMenuEntry() if (rccProcess.exitStatus() != QProcess::NormalExit) { Core::MessageManager::writeDisrupting( QCoreApplication::translate("QmlDesigner::GenerateResource", "\"%1\" crashed.") - .arg(rccBinary.toString() + arguments.join(" "))); + .arg(rccBinary + " " + arguments.join(" "))); return; } if (rccProcess.exitCode() != 0) { Core::MessageManager::writeDisrupting( QCoreApplication::translate("QmlDesigner::GenerateResource", "\"%1\" failed (exit code %2).") - .arg(rccBinary.toString() + " " + arguments.join(" ")) + .arg(rccBinary + " " + arguments.join(" ")) .arg(rccProcess.exitCode())); return; } diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index f090438edba..dd316d64312 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -171,7 +171,7 @@ private: mutable std::unique_ptr m_expander; }; -enum HostBinaries { Designer, Linguist, Uic, QScxmlc }; +enum HostBinaries { Designer, Linguist, Rcc, Uic, QScxmlc }; class BaseQtVersionPrivate { @@ -232,6 +232,7 @@ public: FilePath m_qmakeCommand; + QString m_rccCommand; QString m_uicCommand; QString m_designerCommand; QString m_linguistCommand; @@ -1021,6 +1022,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const case Linguist: baseDir = m_mkspecValues.value("QT.designer.bins"); break; + case Rcc: case Uic: case QScxmlc: baseDir = q->hostBinPath().toString(); @@ -1050,6 +1052,14 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const else possibleCommands << HostOsInfo::withExecutableSuffix("linguist"); break; + case Rcc: + if (HostOsInfo::isWindowsHost()) { + possibleCommands << "rcc.exe"; + } else { + const QString majorString = QString::number(q->qtVersion().majorVersion); + possibleCommands << ("rcc-qt" + majorString) << ("rcc" + majorString) << "rcc"; + } + break; case Uic: if (HostOsInfo::isWindowsHost()) { possibleCommands << "uic.exe"; @@ -1072,6 +1082,16 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const return QString(); } +QString BaseQtVersion::rccCommand() const +{ + if (!isValid()) + return QString(); + if (!d->m_rccCommand.isNull()) + return d->m_rccCommand; + d->m_rccCommand = d->findHostBinary(Rcc); + return d->m_rccCommand; +} + QString BaseQtVersion::uicCommand() const { if (!isValid()) diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 2305b9d9ab9..29cd2064942 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -131,6 +131,7 @@ public: bool isInSourceDirectory(const Utils::FilePath &filePath); bool isSubProject(const Utils::FilePath &filePath) const; + QString rccCommand() const; // used by UiCodeModelSupport QString uicCommand() const; QString designerCommand() const;