diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2022-06-09 13:13:49 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2022-06-10 21:10:34 +0200 |
commit | 0c82f98ec5c0135f3789f0f9c5e30978698ddff9 (patch) | |
tree | 6ab1a80625c0523b462a07cb1e7914c336ca65e3 | |
parent | b3d0325a8dca56d3163451a417edfe6015a4ffe0 (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.cpp | 12 |
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); |