summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/resources.prf
blob: ca95768de87d9ffe3273b927b17825acfd20b4be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
!contains(QMAKE_RESOURCE_FLAGS, -name): QMAKE_RESOURCE_FLAGS += -name ${QMAKE_FILE_BASE}

# http://www.w3.org/TR/xml/#syntax
defineReplace(xml_escape) {
    1 ~= s,&,&,
    1 ~= s,\',',
    1 ~= s,\",",
    1 ~= s,<,&lt;,
    1 ~= s,>,&gt;,
    return($$1)
}

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 <QtCore/qglobal.h>" \
            "void $${resource_init_function}() " \
            "{" \

        for (resource, RESOURCES) {
            resource_name = $$section($$list($$basename(resource)), ., 0, 0)
            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()
    }
}

rcc.input = RESOURCES
rcc.name = RCC ${QMAKE_FILE_IN}
rcc.depend_command = $$QMAKE_RCC_DEP -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN}
rcc.CONFIG += add_inputs_as_makefile_deps dep_lines

!resources_big|ltcg|macx-xcode|wasm|contains(TEMPLATE, "vc.*") {

rcc.output = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
rcc.commands = $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
rcc.variable_out = SOURCES

} else {

isEmpty(RCC_CXX):RCC_CXX = $$QMAKE_CXX $(CXXFLAGS)
RCC_OUT_BASE = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE}
RCC_CPP = $$RCC_OUT_BASE$${first(QMAKE_EXT_CPP)}
RCC_TMP = $${RCC_OUT_BASE}.tmp$${first(QMAKE_EXT_OBJ)}
RCC_OBJ = $$RCC_OUT_BASE$${first(QMAKE_EXT_OBJ)}

msvc: RCC_CXX_O_FLAG = "-Fo"
else: RCC_CXX_O_FLAG = "-o "

rcc.output = $$RCC_OBJ
rcc.commands = \
    $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 1 -o $$RCC_CPP && \
    $$RCC_CXX -c $$RCC_CPP $$RCC_CXX_O_FLAG$$RCC_TMP && \
    $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 2 -temp $$RCC_TMP -o ${QMAKE_FILE_OUT}
rcc.clean += $$RCC_CPP $$RCC_TMP

}

rcc.depends += $$QMAKE_RCC_EXE
silent:rcc.commands = @echo rcc ${QMAKE_FILE_IN} && $$rcc.commands
else:rcc.commands ~= s/&&/$$escape_expand(\\n\\t)/g
QMAKE_EXTRA_COMPILERS += rcc