From 720d5cc1a47ad0702d51548009bdcf229368d6fc Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Tue, 4 Oct 2022 17:12:39 +0200 Subject: [PATCH] Add flag that skips Qml import scanning to android deployment settings If Qml module is not found it doesn't make sense to run any functionality that is related to Qml inside androiddeployqt. Add the deployment setting option that indicates this explicitly and set it to true when Qml module is not found by CMake or by qmake. Task-number: QTBUG-106939 Pick-to: 6.4 6.2 Change-Id: I1e6cffbdd230007feffe7448617097c10238a6c9 Reviewed-by: Alexandru Croitor Reviewed-by: Assam Boudjelthia --- .../android/android_deployment_settings.prf | 27 ++++++++++++------- src/corelib/Qt6AndroidMacros.cmake | 3 +++ src/tools/androiddeployqt/main.cpp | 16 +++++++---- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/mkspecs/features/android/android_deployment_settings.prf b/mkspecs/features/android/android_deployment_settings.prf index 1819a1f52c3..d56d79960c5 100644 --- a/mkspecs/features/android/android_deployment_settings.prf +++ b/mkspecs/features/android/android_deployment_settings.prf @@ -64,23 +64,30 @@ contains(TEMPLATE, ".*app"):!build_pass { tool_extension = "" contains(QMAKE_HOST.os, Windows): tool_extension = ".exe" - FILE_CONTENT += " \"qml-importscanner-binary\": $$emitString($$[QT_HOST_LIBEXECS]/qmlimportscanner$${tool_extension})," FILE_CONTENT += " \"rcc-binary\": $$emitString($$[QT_HOST_LIBEXECS]/rcc$${tool_extension})," - qml_import_paths = $$(QML2_IMPORT_PATH) - qml_import_paths = $$split(qml_import_paths, $$DIRLIST_SEPARATOR) - qml_import_paths += $$QML_IMPORT_PATH - !isEmpty(qml_import_paths) { - FILE_CONTENT += " \"qml-import-paths\": $$emitString($$join(qml_import_paths, ","))," + contains(QT_MODULES, qml) { + FILE_CONTENT += " \"qml-importscanner-binary\": $$emitString($$[QT_HOST_LIBEXECS]/qmlimportscanner$${tool_extension})," + + qml_import_paths = $$(QML2_IMPORT_PATH) + qml_import_paths = $$split(qml_import_paths, $$DIRLIST_SEPARATOR) + qml_import_paths += $$QML_IMPORT_PATH + !isEmpty(qml_import_paths) { + FILE_CONTENT += " \"qml-import-paths\": $$emitString($$join(qml_import_paths, ","))," + } + unset(qml_import_paths) + + + isEmpty(QML_ROOT_PATH): \ + QML_ROOT_PATH = $$_PRO_FILE_PWD_ + FILE_CONTENT += " \"qml-root-path\": $$emitString($$QML_ROOT_PATH)," + } else { + FILE_CONTENT += " \"qml-skip-import-scanning\": true," } - unset(qml_import_paths) !isEmpty(ANDROID_APPLICATION_ARGUMENTS): \ FILE_CONTENT += " \"android-application-arguments\": $$emitString($$ANDROID_APPLICATION_ARGUMENTS)," - isEmpty(QML_ROOT_PATH): \ - QML_ROOT_PATH = $$_PRO_FILE_PWD_ - FILE_CONTENT += " \"qml-root-path\": $$emitString($$QML_ROOT_PATH)," FILE_CONTENT += " \"stdcpp-path\": $$emitString($$ANDROID_STDCPP_PATH)," !isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) { # Make sure that qmake generated qrc files are accounted for diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index dd5c3c9a2e9..46463c8f4f9 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -257,6 +257,9 @@ function(qt6_android_generate_deployment_settings target) if(COMMAND _qt_internal_generate_android_qml_deployment_settings) _qt_internal_generate_android_qml_deployment_settings(file_contents ${target}) + else() + string(APPEND file_contents + " \"qml-skip-import-scanning\": true,\n") endif() # Override rcc binary path diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp index fa8f7018b25..20b5c4dd376 100644 --- a/src/tools/androiddeployqt/main.cpp +++ b/src/tools/androiddeployqt/main.cpp @@ -218,6 +218,7 @@ struct Options // Override qml import scanner path QString qmlImportScannerBinaryPath; + bool qmlSkipImportScanning = false; }; static const QHash elfArchitectures = { @@ -1035,6 +1036,12 @@ bool readInputFile(Options *options) options->extraLibs = extraLibs.toString().split(u',', Qt::SkipEmptyParts); } + { + const QJsonValue qmlSkipImportScanning = jsonObject.value("qml-skip-import-scanning"_L1); + if (!qmlSkipImportScanning.isUndefined()) + options->qmlSkipImportScanning = qmlSkipImportScanning.toBool(); + } + { const QJsonValue extraPlugins = jsonObject.value("android-extra-plugins"_L1); if (!extraPlugins.isUndefined()) @@ -2302,11 +2309,10 @@ bool readDependencies(Options *options) } } - if ((!options->rootPaths.empty() || !options->qrcFiles.isEmpty()) && - !scanImports(options, &usedDependencies)) - return false; - - return true; + if (options->qmlSkipImportScanning + || (options->rootPaths.empty() && options->qrcFiles.isEmpty())) + return true; + return scanImports(options, &usedDependencies); } bool containsApplicationBinary(Options *options)