| # http://www.w3.org/TR/xml/#syntax |
| defineReplace(xml_escape) { |
| 1 ~= s,&,&, |
| 1 ~= s,\',', |
| 1 ~= s,\",", |
| 1 ~= s,<,<, |
| 1 ~= s,>,>, |
| return($$1) |
| } |
| |
| 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) |
| else: \ |
| QMAKE_RESOURCES_IMMEDIATE_NR = 1 |
| |
| RESOURCES += $$immediate |
| for(resource, RESOURCES) { |
| # Regular case of user qrc file |
| contains(resource, ".*\\.qrc$"): \ |
| next() |
| |
| # Fallback for stand-alone files/directories |
| !defined($${resource}.files, var) { |
| !equals(resource, $$immediate) { |
| !exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \ |
| warning("Failure to find: $$resource") |
| $${immediate}.files += $$resource |
| OTHER_FILES *= $$resource |
| } |
| RESOURCES -= $$resource |
| next() |
| } |
| |
| 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/$$arch/qmake_$${resource}.qrc, $$OUT_PWD) |
| RESOURCES += $$resource_file |
| } |
| } |
| |
| isEmpty(BUILDS)|build_pass { |
| # Collection of files, generate qrc file |
| prefix = $$eval($${resource}.prefix) |
| isEmpty(prefix): \ |
| prefix = "/" |
| |
| resource_file_content = \ |
| "<!DOCTYPE RCC><RCC version=\"1.0\">" \ |
| "<qresource prefix=\"$$xml_escape($$prefix)\">" |
| |
| abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_) |
| |
| for(file, $${resource}.files) { |
| abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_) |
| files = $$files($$abs_path/*, true) |
| isEmpty(files): \ |
| files = $$abs_path |
| for (file, files) { |
| exists($$file/*): next() # exclude directories |
| alias = $$relative_path($$file, $$abs_base) |
| resource_file_content += \ |
| "<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>" |
| OTHER_FILES *= $$file |
| } |
| } |
| |
| resource_file_content += \ |
| "</qresource>" \ |
| "</RCC>" |
| |
| !write_file($$resource_file, resource_file_content): \ |
| error() |
| } |
| } |
| 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) |
| } |