From 495db2cd2bb9130864f2dd1291788288765dfe7a Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 30 Jan 2020 13:59:27 +0100 Subject: Add function for initializing plugin resources for static builds Also move the setting of default RCC_DIR into qtFlattenResources as we need a valid RCC_DIR there. Fixes: QTBUG-81699 Fixes: QTBUG-81713 Change-Id: I7558d99f3aca75d2e9cad0ec89fbb0aa0758dcc7 Reviewed-by: Simon Hausmann --- mkspecs/features/resources_functions.prf | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'mkspecs/features/resources_functions.prf') diff --git a/mkspecs/features/resources_functions.prf b/mkspecs/features/resources_functions.prf index b7a15fd1d9..f0ca2ed793 100644 --- a/mkspecs/features/resources_functions.prf +++ b/mkspecs/features/resources_functions.prf @@ -9,6 +9,7 @@ defineReplace(xml_escape) { } defineTest(qtFlattenResources) { + isEmpty(RCC_DIR):RCC_DIR = . immediate = qmake_immediate$$QMAKE_RESOURCES_IMMEDIATE_NR defined(QMAKE_RESOURCES_IMMEDIATE_NR, var): \ QMAKE_RESOURCES_IMMEDIATE_NR = $$num_add($$QMAKE_RESOURCES_IMMEDIATE_NR, 1) @@ -72,9 +73,53 @@ defineTest(qtFlattenResources) { RESOURCES -= $$resource RESOURCES += $$resource_file } + export(RCC_DIR) export(QMAKE_RESOURCES_IMMEDIATE_NR) export(RESOURCES) export(OTHER_FILES) export($${immediate}.files) return(true) } + +defineTest(qtEnsurePluginResourcesCpp) { + contains(DEFINES, QT_PLUGIN_RESOURCE_INIT_FUNCTION=.*): \ + return(true) + + !isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static { + pluginBaseName = $$basename(TARGET) + pluginName = $$lower($$replace(pluginBaseName, [-], _)) + resource_init_function = $${pluginName}_plugin_resource_init + DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function" + RESOURCE_INIT_CPP = $$OUT_PWD/$${pluginName}_plugin_resources.cpp + + GENERATED_SOURCES += $$RESOURCE_INIT_CPP + QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP + + isEmpty(BUILDS)|build_pass { + RESOURCE_INIT_CONT = \ + "// This file is autogenerated by qmake. It contains a function that" \ + "// references all resources the plugin includes and the function is" \ + "// referenced by Qt_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \ + "// the statically linked plugin." \ + "$${LITERAL_HASH}include " \ + "void $${resource_init_function}() " \ + "{" \ + + for (resource, RESOURCES) { + resource_name = $$replace($$list($$basename(resource)),\.qrc$, ) + resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _) + RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);" + } + + RESOURCE_INIT_CONT += \ + "}" + + write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error() + } + + export(DEFINES) + export(GENERATED_SOURCES) + export(QMAKE_DISTCLEAN) + } + return(true) +} -- cgit v1.2.3 From 288d5d8a7144ab05885fc446e945f17e8d546820 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 14 Jan 2020 09:23:28 +0100 Subject: Android: Make sure that it can find qrc files created via the pro file Since Android will place the created qrc files in their own architecture then we need to make sure that we account for this when returning a list of all the resources. This is so that when other files are created that depend on this list, it is able to find them. Fixes: QTBUG-81477 Change-Id: I4a083c1c5c3e0aec35649cf7f5419cf3c6a75eae Reviewed-by: Joerg Bornemann --- mkspecs/features/resources_functions.prf | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'mkspecs/features/resources_functions.prf') diff --git a/mkspecs/features/resources_functions.prf b/mkspecs/features/resources_functions.prf index f0ca2ed793..fe2dc17d4d 100644 --- a/mkspecs/features/resources_functions.prf +++ b/mkspecs/features/resources_functions.prf @@ -34,7 +34,18 @@ defineTest(qtFlattenResources) { next() } - resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD) + RESOURCES -= $$resource + !android|isEmpty(BUILDS)|build_pass { + resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD) + RESOURCES += $$resource_file + } else { + # Android will need a resource file for each architecture make sure it is placed + # correctly for other functions that need the right paths for these files + for (arch, ANDROID_ABIS) { + resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD/$$arch) + RESOURCES += $$resource_file + } + } isEmpty(BUILDS)|build_pass { # Collection of files, generate qrc file @@ -69,9 +80,6 @@ defineTest(qtFlattenResources) { !write_file($$resource_file, resource_file_content): \ error() } - - RESOURCES -= $$resource - RESOURCES += $$resource_file } export(RCC_DIR) export(QMAKE_RESOURCES_IMMEDIATE_NR) -- cgit v1.2.3