From 24189b5f0935914a979b7e9d3786bec8f9f019bc Mon Sep 17 00:00:00 2001 From: Ilya Bizyaev Date: Sat, 6 Oct 2018 19:59:56 +0300 Subject: Add option to specify qmlimportscanner importPaths This patch adds a new option, -qmlimport, which enables macdeployqt to pass custom QML module import paths to qmlimportscanner. Fixes: QTBUG-70977 Change-Id: I39edfb88e48e05c42c6c4690efa3e728046baff3 Reviewed-by: Samuel Gaist --- src/macdeployqt/macdeployqt/main.cpp | 11 ++++++++++- src/macdeployqt/shared/shared.cpp | 7 +++++-- src/macdeployqt/shared/shared.h | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/macdeployqt/macdeployqt/main.cpp b/src/macdeployqt/macdeployqt/main.cpp index 14507a383..0599b739e 100644 --- a/src/macdeployqt/macdeployqt/main.cpp +++ b/src/macdeployqt/macdeployqt/main.cpp @@ -49,6 +49,7 @@ int main(int argc, char **argv) qDebug() << " -use-debug-libs : Deploy with debug versions of frameworks and plugins (implies -no-strip)"; qDebug() << " -executable= : Let the given executable use the deployed frameworks too"; qDebug() << " -qmldir= : Scan for QML imports in the given path"; + qDebug() << " -qmlimport= : Add the given path to the QML module search locations"; qDebug() << " -always-overwrite : Copy files even if the target file exists"; qDebug() << " -codesign= : Run codesign with the given identity on all executables"; qDebug() << " -appstore-compliant: Skip deployment of components that use private API"; @@ -92,6 +93,7 @@ int main(int argc, char **argv) QStringList additionalExecutables; bool qmldirArgumentUsed = false; QStringList qmlDirs; + QStringList qmlImportPaths; extern bool runCodesign; extern QString codesignIdentiy; extern bool appstoreCompliant; @@ -136,6 +138,13 @@ int main(int argc, char **argv) LogError() << "Missing qml directory path"; else qmlDirs << argument.mid(index+1); + } else if (argument.startsWith(QByteArray("-qmlimport"))) { + LogDebug() << "Argument found:" << argument; + int index = argument.indexOf('='); + if (index == -1) + LogError() << "Missing qml import path"; + else + qmlImportPaths << argument.mid(index+1); } else if (argument.startsWith(QByteArray("-libpath"))) { LogDebug() << "Argument found:" << argument; int index = argument.indexOf('='); @@ -194,7 +203,7 @@ int main(int argc, char **argv) } if (!qmlDirs.isEmpty()) { - bool ok = deployQmlImports(appBundlePath, deploymentInfo, qmlDirs); + bool ok = deployQmlImports(appBundlePath, deploymentInfo, qmlDirs, qmlImportPaths); if (!ok && qmldirArgumentUsed) return 1; // exit if the user explicitly asked for qml import deployment diff --git a/src/macdeployqt/shared/shared.cpp b/src/macdeployqt/shared/shared.cpp index 33d29ecc2..a6ff37ea0 100644 --- a/src/macdeployqt/shared/shared.cpp +++ b/src/macdeployqt/shared/shared.cpp @@ -1216,11 +1216,12 @@ static bool importLessThan(const QVariant &v1, const QVariant &v2) } // Scan qml files in qmldirs for import statements, deploy used imports from Qml2ImportsPath to Contents/Resources/qml. -bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs) +bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs, QStringList &qmlImportPaths) { LogNormal() << ""; LogNormal() << "Deploying QML imports "; - LogNormal() << "Application QML file search path(s) is" << qmlDirs; + LogNormal() << "Application QML file path(s) is" << qmlDirs; + LogNormal() << "QML module search path(s) is" << qmlImportPaths; // Use qmlimportscanner from QLibraryInfo::BinariesPath QString qmlImportScannerPath = QDir::cleanPath(QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmlimportscanner"); @@ -1243,6 +1244,8 @@ bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInf argumentList.append("-rootPath"); argumentList.append(qmlDir); } + for (const QString &importPath : qmlImportPaths) + argumentList << "-importPath" << importPath; QString qmlImportsPath = QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath); argumentList.append( "-importPath"); argumentList.append(qmlImportsPath); diff --git a/src/macdeployqt/shared/shared.h b/src/macdeployqt/shared/shared.h index 588b5dd62..ab28360d5 100644 --- a/src/macdeployqt/shared/shared.h +++ b/src/macdeployqt/shared/shared.h @@ -124,7 +124,7 @@ DeploymentInfo deployQtFrameworks(const QString &appBundlePath, const QStringLis DeploymentInfo deployQtFrameworks(QList frameworks,const QString &bundlePath, const QStringList &binaryPaths, bool useDebugLibs, bool useLoaderPath); void createQtConf(const QString &appBundlePath); void deployPlugins(const QString &appBundlePath, DeploymentInfo deploymentInfo, bool useDebugLibs); -bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs); +bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInfo, QStringList &qmlDirs, QStringList &qmlImportPaths); void changeIdentification(const QString &id, const QString &binaryPath); void changeInstallName(const QString &oldName, const QString &newName, const QString &binaryPath); void runStrip(const QString &binaryPath); -- cgit v1.2.3