QmlDesigner: Retrieve rcc command centrally

Change-Id: I6886a22b51a002b48c248b3f49adc622c58c7ad8
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Kai Köhne
2021-03-09 11:40:37 +01:00
committed by Kai Koehne
parent 3ad3f3ec16
commit c5ecb47c61
3 changed files with 29 additions and 8 deletions

View File

@@ -99,18 +99,18 @@ void GenerateResource::generateMenuEntry()
return; return;
temp.close(); temp.close();
auto rccBinary = QtSupport::QtKitAspect::qtVersion(currentProject->activeTarget()->kit())->hostBinPath(); QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(
rccBinary = rccBinary.pathAppended(Utils::HostOsInfo::withExecutableSuffix("rcc")); currentProject->activeTarget()->kit());
QString rccBinary = qtVersion->rccCommand();
QProcess rccProcess; QProcess rccProcess;
rccProcess.setProgram(rccBinary.toString());
rccProcess.setWorkingDirectory(projectPath); rccProcess.setWorkingDirectory(projectPath);
const QStringList arguments1 = {"--project", "--output", temp.fileName()}; const QStringList arguments1 = {"--project", "--output", temp.fileName()};
const QStringList arguments2 = {"--binary", "--output", resourceFileName, temp.fileName()}; const QStringList arguments2 = {"--binary", "--output", resourceFileName, temp.fileName()};
for (const auto &arguments : {arguments1, arguments2}) { for (const auto &arguments : {arguments1, arguments2}) {
rccProcess.start(rccBinary.toString(), arguments); rccProcess.start(rccBinary, arguments);
if (!rccProcess.waitForStarted()) { if (!rccProcess.waitForStarted()) {
Core::MessageManager::writeDisrupting( Core::MessageManager::writeDisrupting(
QCoreApplication::translate("QmlDesigner::GenerateResource", QCoreApplication::translate("QmlDesigner::GenerateResource",
@@ -125,7 +125,7 @@ void GenerateResource::generateMenuEntry()
Core::MessageManager::writeDisrupting( Core::MessageManager::writeDisrupting(
QCoreApplication::translate("QmlDesigner::GenerateResource", QCoreApplication::translate("QmlDesigner::GenerateResource",
"A timeout occurred running \"%1\"") "A timeout occurred running \"%1\"")
.arg(rccBinary.toString() + arguments.join(" "))); .arg(rccBinary + " " + arguments.join(" ")));
return ; return ;
} }
@@ -138,14 +138,14 @@ void GenerateResource::generateMenuEntry()
if (rccProcess.exitStatus() != QProcess::NormalExit) { if (rccProcess.exitStatus() != QProcess::NormalExit) {
Core::MessageManager::writeDisrupting( Core::MessageManager::writeDisrupting(
QCoreApplication::translate("QmlDesigner::GenerateResource", "\"%1\" crashed.") QCoreApplication::translate("QmlDesigner::GenerateResource", "\"%1\" crashed.")
.arg(rccBinary.toString() + arguments.join(" "))); .arg(rccBinary + " " + arguments.join(" ")));
return; return;
} }
if (rccProcess.exitCode() != 0) { if (rccProcess.exitCode() != 0) {
Core::MessageManager::writeDisrupting( Core::MessageManager::writeDisrupting(
QCoreApplication::translate("QmlDesigner::GenerateResource", QCoreApplication::translate("QmlDesigner::GenerateResource",
"\"%1\" failed (exit code %2).") "\"%1\" failed (exit code %2).")
.arg(rccBinary.toString() + " " + arguments.join(" ")) .arg(rccBinary + " " + arguments.join(" "))
.arg(rccProcess.exitCode())); .arg(rccProcess.exitCode()));
return; return;
} }

View File

@@ -171,7 +171,7 @@ private:
mutable std::unique_ptr<MacroExpander> m_expander; mutable std::unique_ptr<MacroExpander> m_expander;
}; };
enum HostBinaries { Designer, Linguist, Uic, QScxmlc }; enum HostBinaries { Designer, Linguist, Rcc, Uic, QScxmlc };
class BaseQtVersionPrivate class BaseQtVersionPrivate
{ {
@@ -232,6 +232,7 @@ public:
FilePath m_qmakeCommand; FilePath m_qmakeCommand;
QString m_rccCommand;
QString m_uicCommand; QString m_uicCommand;
QString m_designerCommand; QString m_designerCommand;
QString m_linguistCommand; QString m_linguistCommand;
@@ -1021,6 +1022,7 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const
case Linguist: case Linguist:
baseDir = m_mkspecValues.value("QT.designer.bins"); baseDir = m_mkspecValues.value("QT.designer.bins");
break; break;
case Rcc:
case Uic: case Uic:
case QScxmlc: case QScxmlc:
baseDir = q->hostBinPath().toString(); baseDir = q->hostBinPath().toString();
@@ -1050,6 +1052,14 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const
else else
possibleCommands << HostOsInfo::withExecutableSuffix("linguist"); possibleCommands << HostOsInfo::withExecutableSuffix("linguist");
break; 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: case Uic:
if (HostOsInfo::isWindowsHost()) { if (HostOsInfo::isWindowsHost()) {
possibleCommands << "uic.exe"; possibleCommands << "uic.exe";
@@ -1072,6 +1082,16 @@ QString BaseQtVersionPrivate::findHostBinary(HostBinaries binary) const
return QString(); 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 QString BaseQtVersion::uicCommand() const
{ {
if (!isValid()) if (!isValid())

View File

@@ -131,6 +131,7 @@ public:
bool isInSourceDirectory(const Utils::FilePath &filePath); bool isInSourceDirectory(const Utils::FilePath &filePath);
bool isSubProject(const Utils::FilePath &filePath) const; bool isSubProject(const Utils::FilePath &filePath) const;
QString rccCommand() const;
// used by UiCodeModelSupport // used by UiCodeModelSupport
QString uicCommand() const; QString uicCommand() const;
QString designerCommand() const; QString designerCommand() const;