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 <alexandru.croitor@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This commit is contained in:
Alexey Edelev 2022-10-04 17:12:39 +02:00
parent 062efb305e
commit 720d5cc1a4
3 changed files with 31 additions and 15 deletions

View File

@ -64,23 +64,30 @@ contains(TEMPLATE, ".*app"):!build_pass {
tool_extension = "" tool_extension = ""
contains(QMAKE_HOST.os, Windows): tool_extension = ".exe" 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})," FILE_CONTENT += " \"rcc-binary\": $$emitString($$[QT_HOST_LIBEXECS]/rcc$${tool_extension}),"
qml_import_paths = $$(QML2_IMPORT_PATH) contains(QT_MODULES, qml) {
qml_import_paths = $$split(qml_import_paths, $$DIRLIST_SEPARATOR) FILE_CONTENT += " \"qml-importscanner-binary\": $$emitString($$[QT_HOST_LIBEXECS]/qmlimportscanner$${tool_extension}),"
qml_import_paths += $$QML_IMPORT_PATH
!isEmpty(qml_import_paths) { qml_import_paths = $$(QML2_IMPORT_PATH)
FILE_CONTENT += " \"qml-import-paths\": $$emitString($$join(qml_import_paths, ","))," 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): \ !isEmpty(ANDROID_APPLICATION_ARGUMENTS): \
FILE_CONTENT += " \"android-application-arguments\": $$emitString($$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)," FILE_CONTENT += " \"stdcpp-path\": $$emitString($$ANDROID_STDCPP_PATH),"
!isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) { !isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) {
# Make sure that qmake generated qrc files are accounted for # Make sure that qmake generated qrc files are accounted for

View File

@ -257,6 +257,9 @@ function(qt6_android_generate_deployment_settings target)
if(COMMAND _qt_internal_generate_android_qml_deployment_settings) if(COMMAND _qt_internal_generate_android_qml_deployment_settings)
_qt_internal_generate_android_qml_deployment_settings(file_contents ${target}) _qt_internal_generate_android_qml_deployment_settings(file_contents ${target})
else()
string(APPEND file_contents
" \"qml-skip-import-scanning\": true,\n")
endif() endif()
# Override rcc binary path # Override rcc binary path

View File

@ -218,6 +218,7 @@ struct Options
// Override qml import scanner path // Override qml import scanner path
QString qmlImportScannerBinaryPath; QString qmlImportScannerBinaryPath;
bool qmlSkipImportScanning = false;
}; };
static const QHash<QByteArray, QByteArray> elfArchitectures = { static const QHash<QByteArray, QByteArray> elfArchitectures = {
@ -1035,6 +1036,12 @@ bool readInputFile(Options *options)
options->extraLibs = extraLibs.toString().split(u',', Qt::SkipEmptyParts); 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); const QJsonValue extraPlugins = jsonObject.value("android-extra-plugins"_L1);
if (!extraPlugins.isUndefined()) if (!extraPlugins.isUndefined())
@ -2302,11 +2309,10 @@ bool readDependencies(Options *options)
} }
} }
if ((!options->rootPaths.empty() || !options->qrcFiles.isEmpty()) && if (options->qmlSkipImportScanning
!scanImports(options, &usedDependencies)) || (options->rootPaths.empty() && options->qrcFiles.isEmpty()))
return false; return true;
return scanImports(options, &usedDependencies);
return true;
} }
bool containsApplicationBinary(Options *options) bool containsApplicationBinary(Options *options)