summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2022-06-09 13:13:49 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2022-06-10 21:10:34 +0200
commit0c82f98ec5c0135f3789f0f9c5e30978698ddff9 (patch)
tree6ab1a80625c0523b462a07cb1e7914c336ca65e3
parentb3d0325a8dca56d3163451a417edfe6015a4ffe0 (diff)
androiddeployqt: Only pass qt_install_dir/qml directory if it exists
In Conan's case, the qtbase installed package directory lacks a qml directory. We pass that as a valid qml import path via CMake -> deployment json file -> androiddeployqt -> qmlimportscanner which causes the qmlimportscanner to fail with qmlimportscanner: No such file or directory: "~/package/some_sha_1/qml" Invalid json output from qmlimportscanner. which in turn fails the androiddeploqt build step. Make sure to only pass qtbase_install_dir/qml if it actually exists. Amends 4ef3da04c3390f02bcb0507128372e6a299dc8fd Amends c08b9a49ba70b1cbb0704668dd3f2c487d7f585e Pick-to: 6.2 6.3 6.4 Fixes: QTBUG-104056 Task-number: QTBUG-88519 Task-number: QTBUG-89588 Change-Id: I4310eb4e265ae8d3e3f09e1e1dbed79210e23de6 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/tools/androiddeployqt/main.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index dbb4bbd24e..14a9154069 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -1946,12 +1946,22 @@ bool scanImports(Options *options, QSet<QString> *usedDependencies)
}
QStringList importPaths;
- importPaths += shellQuote(options->qtInstallDirectory + "/qml"_L1);
+ // In Conan's case, qtInstallDirectory will point only to qtbase installed files, which
+ // lacks a qml directory. We don't want to pass it as an import path if it doesn't exist
+ // because it will cause qmlimportscanner to fail.
+ // This also covers the case when only qtbase is installed in a regular Qt build.
+ const QString mainImportPath = options->qtInstallDirectory + "/qml"_L1;
+ if (QDir().exists(mainImportPath))
+ importPaths += shellQuote(mainImportPath);
+
+ // These are usually provided by CMake in the deployment json file from paths specified
+ // in CMAKE_FIND_ROOT_PATH. They might not have qml modules.
for (const QString &prefix : options->extraPrefixDirs)
if (QDir().exists(prefix + "/qml"_L1))
importPaths += shellQuote(prefix + "/qml"_L1);
+ // These are provided by both CMake and qmake.
for (const QString &qmlImportPath : qAsConst(options->qmlImportPaths)) {
if (QDir().exists(qmlImportPath)) {
importPaths += shellQuote(qmlImportPath);