aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmltyperegistrar/qmltypes.prf
blob: d8e826c67109b7c9d4a4063cee6855482f62d2bf (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
CONFIG += metatypes

qtPrepareTool(QML_TYPEREGISTRAR, qmltyperegistrar)

isEmpty(QML_IMPORT_VERSION): \
    QML_IMPORT_VERSION = $$IMPORT_VERSION

# from moc.prf
isEmpty(QML_IMPORT_MAJOR_VERSION):!isEmpty(QML_IMPORT_VERSION): \
    QML_IMPORT_MAJOR_VERSION = $$section(QML_IMPORT_VERSION, ., 0, 0)

isEmpty(QML_IMPORT_MINOR_VERSION):!isEmpty(QML_IMPORT_VERSION): \
    QML_IMPORT_MINOR_VERSION = $$section(QML_IMPORT_VERSION, ., 1, 1)

isEmpty(QML_IMPORT_NAME):!isEmpty(TARGETPATH) {
    QML_IMPORT_NAME = $$replace(TARGETPATH, "/", ".")
    QML_IMPORT_NAME = $$replace(QML_IMPORT_NAME, .$${QML_IMPORT_MAJOR_VERSION}$, '')
}

isEmpty(QML_IMPORT_NAME) {
    error("Need TARGET_PATH or QML_IMPORT_NAME in order to generate qml types.");
}

isEmpty(QML_IMPORT_MAJOR_VERSION) {
    error("Need IMPORT_VERSION, QML_IMPORT_VERSION, or QML_IMPORT_MAJOR_VERSION in order to generate qml types.");
}

isEmpty(QML_IMPORT_MINOR_VERSION) {
    QML_IMPORT_MINOR_VERSION = 0
}

isEmpty(QMLTYPES_FILENAME) {
    plugin: QMLTYPES_FILENAME = $$OUT_PWD/plugins.qmltypes
    else: QMLTYPES_FILENAME = $$OUT_PWD/$${TEMPLATE}.qmltypes
}

qt_module_deps = $$replace(QT, -private$, '')
qt_module_deps += $$replace(QT_PRIVATE, -private$, '')
qt_module_deps = $$replace(qt_module_deps, _private$, '')
all_qt_module_deps = $$resolve_depends(qt_module_deps, "QT.", ".depends" ".run_depends")
foreign_types =
for(dep, all_qt_module_deps): \
    foreign_types += $$[QT_INSTALL_LIBS]/metatypes/$$lower($$eval(QT.$${dep}.module))_metatypes.json

QML_TYPEREGISTRAR_FLAGS = \
    --generate-plugintypes=$$QMLTYPES_FILENAME \
    --import-name=$$QML_IMPORT_NAME \
    --major-version=$$QML_IMPORT_MAJOR_VERSION \
    --minor-version=$$QML_IMPORT_MINOR_VERSION \
    --foreign-types=$$join(foreign_types, ',')

DEPENDENCIESFILE = $$_PRO_FILE_PWD_/dependencies.json
exists($$DEPENDENCIESFILE): QML_TYPEREGISTRAR_FLAGS += --dependencies=$$DEPENDENCIESFILE

!isEmpty(MODULE_PRIVATE_INCLUDES): QML_TYPEREGISTRAR_FLAGS += --private-includes

METATYPES_JSON = $$lower($$basename(TARGET))_metatypes.json

TYPEREGISTRATIONS = $$lower($$basename(TARGET))_qmltyperegistrations$${first(QMAKE_EXT_CPP)}

qmltyperegistrar_compiler.CONFIG += combine
qmltyperegistrar_compiler.commands = \
    $$QML_TYPEREGISTRAR $$QML_TYPEREGISTRAR_FLAGS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
qmltyperegistrar_compiler.input = METATYPES_JSON
qmltyperegistrar_compiler.output = $$TYPEREGISTRATIONS
qmltyperegistrar_compiler.variable_out = SOURCES
qmltyperegistrar_compiler.name = Automatic QML type registration
qmltyperegistrar_compiler.dependency_type = TYPE_C

qmltyperegistrar_qmltypes.input = METATYPES_JSON
qmltyperegistrar_qmltypes.depends = $$TYPEREGISTRATIONS
qmltyperegistrar_qmltypes.output = $$QMLTYPES_FILENAME
qmltyperegistrar_qmltypes.CONFIG = no_link
qmltyperegistrar_qmltypes.commands = $$escape_expand(\\n)  # force creation of rule

install_qmltypes {
    isEmpty(QMLTYPES_INSTALL_DIR): \
        QMLTYPES_INSTALL_DIR = $$[QT_INSTALL_QML]/$$TARGETPATH
    do_install.files = $$QMLTYPES_FILENAME
    do_install.path = $$QMLTYPES_INSTALL_DIR
    do_install.CONFIG += no_link
    prefix_build: INSTALLS += do_install
    else: COPIES += do_install
}

QMAKE_EXTRA_COMPILERS += qmltyperegistrar_compiler qmltyperegistrar_qmltypes