Allow the qmake executable to be passed on CLI
This change adds a new command line option `qmake` to the tool which allows the user to specify the qmake executable to be used. By default, if that option is omitted, the behavior is unchanged (i.e. the tool first searches for the `qmake` executable and - if this is not successful - then for either `qmake-qt5` or `qmake-qt4`. If the new option is used, no search takes place and instead the executable provided is used as-is. This implements a part of the functionality as discussed in issue #94.
This commit is contained in:
+30
-26
@@ -99,20 +99,20 @@ inline QDebug operator<<(QDebug debug, const AppDirInfo &info)
|
||||
// on architecture. See "vDSO names" in the notes section of vdso(7)
|
||||
// for more information.
|
||||
static bool lddOutputContainsLinuxVDSO(const QString &lddOutput) {
|
||||
// aarch64, arm, mips, x86_64, x86/x32
|
||||
if (lddOutput.contains(QStringLiteral("linux-vdso.so.1"))) {
|
||||
return true;
|
||||
// ppc32, s390
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-vdso32.so.1"))) {
|
||||
return true;
|
||||
// ppc64, s390x
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-vdso64.so.1"))) {
|
||||
return true;
|
||||
// ia64, sh, i386
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-gate.so.1"))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
// aarch64, arm, mips, x86_64, x86/x32
|
||||
if (lddOutput.contains(QStringLiteral("linux-vdso.so.1"))) {
|
||||
return true;
|
||||
// ppc32, s390
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-vdso32.so.1"))) {
|
||||
return true;
|
||||
// ppc64, s390x
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-vdso64.so.1"))) {
|
||||
return true;
|
||||
// ia64, sh, i386
|
||||
} else if (lddOutput.contains(QStringLiteral("linux-gate.so.1"))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool copyFilePrintStatus(const QString &from, const QString &to)
|
||||
@@ -879,7 +879,7 @@ static QString captureOutput(const QString &command)
|
||||
return process.readAllStandardOutput();
|
||||
}
|
||||
|
||||
DeploymentInfo deployQtLibraries(const QString &appDirPath, const QStringList &additionalExecutables)
|
||||
DeploymentInfo deployQtLibraries(const QString &appDirPath, const QStringList &additionalExecutables, const QString& qmake)
|
||||
{
|
||||
AppDirInfo applicationBundle;
|
||||
|
||||
@@ -906,15 +906,19 @@ DeploymentInfo deployQtLibraries(const QString &appDirPath, const QStringList &a
|
||||
// Determine the location of the Qt to be bundled
|
||||
LogDebug() << "Using qmake to determine the location of the Qt to be bundled";
|
||||
|
||||
QString qmakePath = "";
|
||||
// Use the qmake executable passed in by the user:
|
||||
QString qmakePath = qmake;
|
||||
|
||||
// The upstream name of the binary is "qmake", for Qt 4 and Qt 5
|
||||
qmakePath = QStandardPaths::findExecutable("qmake");
|
||||
// If we did not get a qmake, first try to find "qmake", which is the
|
||||
// upstream name of the binary in both Qt4 and Qt5:
|
||||
if (qmakePath.isEmpty()) {
|
||||
qmakePath = QStandardPaths::findExecutable("qmake");
|
||||
}
|
||||
|
||||
// But openSUSE has qmake for Qt 4 and qmake-qt5 for Qt 5
|
||||
// Qt 4 on Fedora comes with suffix -qt4
|
||||
// http://www.geopsy.org/wiki/index.php/Installing_Qt_binary_packages
|
||||
if(qmakePath == ""){
|
||||
if(qmakePath.isEmpty()){
|
||||
if(qtDetected == 5){
|
||||
qmakePath = QStandardPaths::findExecutable("qmake-qt5");
|
||||
}
|
||||
@@ -1016,7 +1020,7 @@ void deployPlugins(const AppDirInfo &appDirInfo, const QString &pluginSourcePath
|
||||
}
|
||||
} else {
|
||||
pluginList.append(QStringLiteral("imageformats/") + plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1026,8 +1030,8 @@ void deployPlugins(const AppDirInfo &appDirInfo, const QString &pluginSourcePath
|
||||
foreach (const QString &plugin, xcbglintegrationPlugins) {
|
||||
pluginList.append(QStringLiteral("xcbglintegrations/") + plugin);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Also deploy plugins/iconengines/libqsvgicon.so whenever libQt5Svg.so.* is about to be deployed,
|
||||
// https://github.com/probonopd/linuxdeployqt/issues/36
|
||||
if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Svg")) {
|
||||
@@ -1069,7 +1073,7 @@ void deployPlugins(const AppDirInfo &appDirInfo, const QString &pluginSourcePath
|
||||
|
||||
QString sourcePath;
|
||||
QString destinationPath;
|
||||
|
||||
|
||||
// Qt WebEngine if libQt5WebEngineCore is in use
|
||||
// https://doc-snapshots.qt.io/qt5-5.7/qtwebengine-deploying.html
|
||||
// TODO: Rather than hardcode the source paths, somehow get them dynamically
|
||||
@@ -1124,7 +1128,7 @@ void deployPlugins(const AppDirInfo &appDirInfo, const QString &pluginSourcePath
|
||||
destinationPath = QDir::cleanPath(dstTranslations + "/qtwebengine_locales");
|
||||
recursiveCopy(sourcePath, destinationPath);
|
||||
}
|
||||
|
||||
|
||||
LogNormal() << "pluginList after having detected hopefully all required plugins:" << pluginList;
|
||||
|
||||
foreach (const QString &plugin, pluginList) {
|
||||
@@ -1143,7 +1147,7 @@ void deployPlugins(const AppDirInfo &appDirInfo, const QString &pluginSourcePath
|
||||
QString relativePath = dir.relativeFilePath(appDirInfo.path + "/" + libraries[0].libraryDestinationDirectory);
|
||||
relativePath.remove(0, 3); // remove initial '../'
|
||||
changeIdentification("$ORIGIN/" + relativePath, QFileInfo(destinationPath).canonicalFilePath());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1224,7 +1228,7 @@ bool deployQmlImports(const QString &appDirPath, DeploymentInfo deploymentInfo,
|
||||
argumentList.append(qtToBeBundledInfo.value("QT_INSTALL_QML"));
|
||||
|
||||
LogDebug() << "qmlImportsPath (QT_INSTALL_QML):" << qtToBeBundledInfo.value("QT_INSTALL_QML");
|
||||
|
||||
|
||||
// run qmlimportscanner
|
||||
QProcess qmlImportScanner;
|
||||
LogDebug() << qmlImportScannerPath << argumentList;
|
||||
|
||||
+3
-1
@@ -112,7 +112,9 @@ QString findAppBinary(const QString &appDirPath);
|
||||
QList<LibraryInfo> getQtLibraries(const QString &path, const QString &appDirPath, const QSet<QString> &rpaths);
|
||||
QList<LibraryInfo> getQtLibraries(const QStringList &lddLines, const QString &appDirPath, const QSet<QString> &rpaths);
|
||||
QString copyLibrary(const LibraryInfo &library, const QString path);
|
||||
DeploymentInfo deployQtLibraries(const QString &appDirPath, const QStringList &additionalExecutables);
|
||||
DeploymentInfo deployQtLibraries(const QString &appDirPath,
|
||||
const QStringList &additionalExecutables,
|
||||
const QString &qmake);
|
||||
DeploymentInfo deployQtLibraries(QList<LibraryInfo> libraries,const QString &bundlePath, const QStringList &binaryPaths, bool useLoaderPath);
|
||||
void deployPlugins(const QString &appDirPath, DeploymentInfo deploymentInfo);
|
||||
bool deployQmlImports(const QString &appDirPath, DeploymentInfo deploymentInfo, QStringList &qmlDirs);
|
||||
|
||||
Reference in New Issue
Block a user