summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qml_plugin.prf
blob: 83af91106d3885f3b0af23925d12df118607a331 (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
load(qt_build_config)

TEMPLATE = lib
CONFIG += plugin

isEmpty(CXX_MODULE) {
    CXX_MODULE = $$TARGET
    TARGET = declarative_$${TARGET}
}
isEmpty(TARGETPATH): TARGETPATH = $$eval(QT.$${CXX_MODULE}.name)
DESTDIR = $$eval(QT.$${CXX_MODULE}.imports)/$$TARGETPATH

QMLDIRFILE = $$_PRO_FILE_PWD_/qmldir
fq_qml_files = $$QMLDIRFILE

QMLTYPEFILE = $$_PRO_FILE_PWD_/plugins.qmltypes
exists($$QMLTYPEFILE): fq_qml_files += $$QMLTYPEFILE

for(qmlf, QML_FILES): fq_qml_files += $$absolute_path($$qmlf, $$_PRO_FILE_PWD_)

# Only for Qt Creator's project view
OTHER_FILES += $$fq_qml_files

exists($$[QT_HOST_PREFIX]/.qmake.cache) {
    # These bizarre rules copy the files to the build directory

    qmlfiles2build.input = fq_qml_files
    qmlfiles2build.output = $$DESTDIR/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT}
    !contains(TEMPLATE, vc.*): qmlfiles2build.variable_out = PRE_TARGETDEPS
    qmlfiles2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
    qmlfiles2build.name = COPY ${QMAKE_FILE_IN}
    qmlfiles2build.CONFIG = no_link no_clean

    QMAKE_EXTRA_COMPILERS += qmlfiles2build
}

# Install rules

target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH

qmldir.files = $$fq_qml_files
qmldir.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH

INSTALLS += target qmldir

# Some final setup

TARGET = $$qtLibraryTarget($$TARGET)
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols

load(qt_targets)

# plugins.qmltypes is used by Qt Creator for syntax highlighting and the QML code model.  It needs
# to be regenerated whenever the QML elements exported by the plugin change.  This cannot be done
# automatically at compile time because qmlplugindump does not support some QML features and it may
# not be possible when cross-compiling.
#
# To regenerate run 'make qmltypes' which will update the plugins.qmltypes file in the source
# directory.  Then review and commit the changes made to plugins.qmltypes.
#
!cross_compile {
    isEmpty(IMPORT_VERSION): IMPORT_VERSION = $$eval(QT.$${CXX_MODULE}.MAJOR_VERSION).$$eval(QT.$${CXX_MODULE}.MINOR_VERSION)

    load(resolve_target)
    qtPrepareTool(QMLPLUGINDUMP, qmlplugindump)
    qmltypes.target = qmltypes
    qmltypes.commands = $$QMLPLUGINDUMP $$replace(TARGETPATH, /, .) $$IMPORT_VERSION $$QMAKE_RESOLVED_TARGET > $$QMLTYPEFILE
    qmltypes.depends = $$QMAKE_RESOLVED_TARGET
    QMAKE_EXTRA_TARGETS += qmltypes
}