summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_module_headers.prf
blob: 1ddc28bed08654f02261e3fc6d91c88d60acf28e (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
90
91
92
93
94
95
#
#  W A R N I N G
#  -------------
#
# This file is not part of the Qt API.  It exists purely as an
# implementation detail.  It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#

load(qt_build_paths)

!build_pass {
    qtPrepareTool(QMAKE_SYNCQT, syncqt)
    minimal_syncqt {
        QMAKE_SYNCQT += -minimal $$QMAKE_SYNCQT_OPTIONS
    } else {
        contains(QT_CONFIG, private_tests): \   # -developer-build
            QMAKE_SYNCQT += -check-includes
        QMAKE_SYNCQT += -module $$MODULE_INCNAME
    }
    QMAKE_SYNCQT += \
        -mkspecsdir $$[QT_HOST_DATA/get]/mkspecs \
        -outdir $$MODULE_BASE_OUTDIR $$MODULE_BASE_DIR
    !silent: message($$QMAKE_SYNCQT)
    system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}

minimal_syncqt: return()

#load up the headers info
include($$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME/headers.pri, "", true)

lctarget = $$lower($$MODULE_INCNAME)
uctarget = $$upper($$MODULE_INCNAME)

defineTest(shouldMasterInclude) {
    bn = $$basename(1)
    contains(bn, .*_.*):return(false)
    contains(bn, ^qconfig.*):return(false)
    lines = $$cat($$_PRO_FILE_PWD_/$$1, lines)
    contains(lines, $${LITERAL_HASH}pragma qt_no_master_include):return(false)
    return(true)
}

autogen_warning = \
    "/* This file was generated by qmake with the info from <root>/$$relative_path($$_PRO_FILE_, $$MODULE_BASE_DIR). */"

# Create module version header
MODULE_VERSION_HEADER = $$find(SYNCQT.HEADER_FILES, (^|/)$${lctarget}version\\.h$)
count(MODULE_VERSION_HEADER, 1) {
    MODULE_VERSION_HEADER = $$absolute_path($$MODULE_VERSION_HEADER, $$_PRO_FILE_PWD_)

    !build_pass {
        majorhexstr = $$format_number($$section(VERSION, ., 0, 0), width=2 zeropad obase=16)
        minorhexstr = $$format_number($$section(VERSION, ., 1, 1), width=2 zeropad obase=16)
        patchhexstr = $$format_number($$section(VERSION, ., 2, 2), width=2 zeropad obase=16)
        modulehexstring = 0x$${majorhexstr}$${minorhexstr}$${patchhexstr}
        MODULE_VERSION_HEADER_CONT = \
            $$autogen_warning \
            "$${LITERAL_HASH}ifndef QT_$${uctarget}_VERSION_H" \
            "$${LITERAL_HASH}define QT_$${uctarget}_VERSION_H" \
            "" \
            "$${LITERAL_HASH}define $${uctarget}_VERSION_STR \"$$VERSION\"" \
            "" \
            "$${LITERAL_HASH}define $${uctarget}_VERSION $$modulehexstring" \
            "" \
            "$${LITERAL_HASH}endif // QT_$${uctarget}_VERSION_H"
        write_file($$MODULE_VERSION_HEADER, MODULE_VERSION_HEADER_CONT)|error("Aborting.")
    }

    HEADERS += $$MODULE_VERSION_HEADER
}

# Create a module master header
MODULE_MASTER_HEADER = $$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME/$$MODULE_INCNAME
!build_pass {
    MODULE_MASTER_HEADER_CONT = \
        $$autogen_warning \
        "$${LITERAL_HASH}ifndef QT_$${ucmodule}_MODULE_H" \
        "$${LITERAL_HASH}define QT_$${ucmodule}_MODULE_H"
    for(dep, MODULE_DEPENDS) {
        depname = $$eval(QT.$${dep}.name)
        MODULE_MASTER_HEADER_CONT += "$${LITERAL_HASH}include <$$depname/$$depname>"
    }
    for(hdr, SYNCQT.HEADER_FILES): \
        shouldMasterInclude($$hdr): \
            MODULE_MASTER_HEADER_CONT += "$${LITERAL_HASH}include \"$$replace(hdr, .*/, )\""
    MODULE_MASTER_HEADER_CONT += "$${LITERAL_HASH}endif"
    write_file($$MODULE_MASTER_HEADER, MODULE_MASTER_HEADER_CONT)|error("Aborting.")
}
SYNCQT.HEADER_FILES += $$MODULE_MASTER_HEADER

CONFIG += qt_install_headers