summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_build_config.prf
blob: 1eab561ef7a0ecac2b6145d114bab6f998fc0a52 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#
#  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.
#

!contains(QMAKE_INTERNAL_INCLUDED_FILES, .*qmodule\\.pri) {
    QMAKE_QT_MODULE = $$[QT_HOST_DATA/get]/mkspecs/qmodule.pri
    !exists($$QMAKE_QT_MODULE)|!include($$QMAKE_QT_MODULE, "", true) {
        debug(1, "Cannot load qmodule.pri!")
    } else {
        debug(1, "Loaded qmodule.pri from ($$QMAKE_QT_MODULE)")
    }
} else {
    debug(1, "Not loading qmodule.pri twice")
}

PRECOMPILED_DIR = .pch
OBJECTS_DIR = .obj
MOC_DIR = .moc
RCC_DIR = .rcc
UI_DIR = .uic
TRACEGEN_DIR = .tracegen
QMLCACHE_DIR = .qmlcache
LRELEASE_DIR = .qm
intel_icl {
    # ICL 14.0 has a bug that makes it not find #includes in dirs starting with .
    MOC_DIR = tmp/moc
    RCC_DIR = tmp/rcc
    UI_DIR = tmp/uic
}

QMAKE_DIR_REPLACE_SANE = PRECOMPILED_DIR OBJECTS_DIR MOC_DIR RCC_DIR UI_DIR

load(qt_prefix_build_check)

# force_independent can be set externally. prefix_build not.
qtIsPrefixBuild($$[QT_HOST_DATA]): \
    CONFIG += prefix_build force_independent

!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):force_independent {
    # When doing a -prefix build of top-level qt5/qt.pro, we need to announce
    # this repo's output dir to the other repos.
    MODULE_BASE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
    !contains(QTREPOS, $$MODULE_BASE_OUTDIR): \
        cache(QTREPOS, add super, MODULE_BASE_OUTDIR)
    # This repo's module pris' location needs to be made known to qmake.
    isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
    modpath = $$MODULE_QMAKE_OUTDIR/mkspecs/modules
    !contains(QMAKEMODULES, $$modpath): \
        cache(QMAKEMODULES, add super, modpath)
    unset(modpath)
}

defineTest(qtSetQmlPath) {
    !qtConfig(static)|host_build|no_import_scan: \
        return()
    deps = $$replace(QT, -private$, _private)
    deps = $$resolve_depends(deps, "QT.")
    !contains(deps, qml): \
        return()

    isEmpty(QTREPOS): \
        QTREPOS = $$shadowed($$dirname(_QMAKE_CONF_))
    for (qrep, QTREPOS): \
        exists($$qrep/qml): \
            QMLPATHS += $$qrep/qml
    export(QMLPATHS)
}

# Apply extra compiler flags passed via configure last.
CONFIG = qt_build_extra $$CONFIG

# Don't actually try to install anything in non-prefix builds.
# This is much easier and safer than making every single INSTALLS
# assignment conditional.
!prefix_build: \
    CONFIG += qt_clear_installs

cross_compile: \
    CONFIG += force_bootstrap

android|uikit: \
    CONFIG += builtin_testdata

# Prevent warnings about object files without any symbols
macos: CONFIG += no_warn_empty_obj_files

# Make sure the doc features are loaded last since they depend on other
# features setting up things like includepaths to find everything.
CONFIG = prepare_docs qt_docs_targets $$CONFIG

CONFIG += \
    utf8_source \
    create_prl link_prl \
    no_private_qt_headers_warning QTDIR_build \
    qt_example_installs \
    # Qt modules get compiled without exceptions enabled by default.
    # However, testcases should be still built with exceptions.
    exceptions_off testcase_exceptions

# Under Windows, this is neither necessary (transitive deps are automatically
# resolved), nor functional (.res files end up in .prl files and break things).
unix: CONFIG += explicitlib

# By default we want tests on macOS to be built as standalone executables
macos: CONFIG += testcase_no_bundle

# Override MinGW's definition in _mingw.h
mingw: DEFINES += WINVER=0x0A00 _WIN32_WINNT=0x0A00

defineTest(qtBuildPart) {
    bp = $$eval($$upper($$section(_QMAKE_CONF_, /, -2, -2))_BUILD_PARTS)
    isEmpty(bp): bp = $$QT_BUILD_PARTS
    contains(bp, $$1): return(true)
    return(false)
}

defineTest(qtNomakeTools) {
    qtBuildPart(tools): return()
    for (d, 1) {
        $${d}.CONFIG += no_default_target no_default_install
        export($${d}.CONFIG)
    }
}

# This overloads the same function from qt_functions.prf.
# This is not in qt_module.prf, as that gets loaded too late.
defineTest(qtConfig) {
    modules = $$QT $$QT_PRIVATE $$QT_FOR_PRIVATE $$QT_FOR_CONFIG
    modules ~= s,-private$,_private,g
    modules = $$resolve_depends(modules, "QT.", ".depends")
    isEmpty(MODULE): \
        MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0)
    exists($$OUT_PWD/qt$${MODULE}-config.pri) {
        include($$OUT_PWD/qt$${MODULE}-config.pri)
        modules += $${MODULE} $${MODULE}_private
    }
    modules += global global_private
    modules = $$reverse(modules)
    for (module, modules) {
        contains(QT.$${module}.enabled_features, $$1): \
            return(true)
        contains(QT.$${module}.disabled_features, $$1): \
            return(false)
    }
    error("Could not find feature $${1}.")
}