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.prf | 35 +------------------------ mkspecs/features/resources_functions.prf | 45 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 34 deletions(-) (limited to 'mkspecs') diff --git a/mkspecs/features/resources.prf b/mkspecs/features/resources.prf index 6d9f27b86b..151051163d 100644 --- a/mkspecs/features/resources.prf +++ b/mkspecs/features/resources.prf @@ -1,6 +1,5 @@ qtPrepareTool(QMAKE_RCC, rcc, _DEP) -isEmpty(RCC_DIR):RCC_DIR = . isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc !contains(QMAKE_RESOURCE_FLAGS, -root):!isEmpty(QMAKE_RESOURCE_ROOT):QMAKE_RESOURCE_FLAGS += -root $$QMAKE_RESOURCE_ROOT @@ -8,39 +7,7 @@ isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc load(resources_functions) qtFlattenResources() - -!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() - } -} +qtEnsurePluginResourcesCpp() rcc.input = RESOURCES rcc.name = RCC ${QMAKE_FILE_IN} 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