diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-01-30 13:59:27 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-01-30 16:59:31 +0100 |
commit | 495db2cd2bb9130864f2dd1291788288765dfe7a (patch) | |
tree | 5220f88d0632a074cc09b00a85069a3fcf33fcdf /mkspecs/features/resources_functions.prf | |
parent | caef33ae2df64eb397eadfc4ce4735545ff93ea5 (diff) |
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 <simon.hausmann@qt.io>
Diffstat (limited to 'mkspecs/features/resources_functions.prf')
-rw-r--r-- | mkspecs/features/resources_functions.prf | 45 |
1 files changed, 45 insertions, 0 deletions
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 <QtCore/qglobal.h>" \ + "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) +} |