summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_module.prf
blob: 53a5499545c0472c3fd08fdc069eccc8f0498e61 (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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#
#  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.
#

!no_qt_module_warning:!contains(QMAKE_INTERNAL_INCLUDED_FILES, .*qmodule\\.pri) {
    QMAKE_ACTUAL_PRO_FILE = $$basename(_PRO_FILE_)
    isEmpty(QMAKE_ACTUAL_PRO_FILE): QMAKE_ACTUAL_PRO_FILE=.pro
    warning("You should probably load(qt_build_config) first in $$QMAKE_ACTUAL_PRO_FILE for $$TARGET, as the latter also load()s qt_module.")
    message("Not doing so may lead to qt_module.prf overriding compiler/linker options in your .pro file.")
    message("Ignore this warning with CONFIG+=no_qt_module_warning if you know what you are doing.")
    unset(QMAKE_ACTUAL_PRO_FILE)
}
load(qt_build_config) # loads qmodule.pri if hasn't been loaded already

isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0)
isEmpty(VERSION): VERSION = $$MODULE_VERSION
isEmpty(VERSION): error("Module does not define version.")

# Compile as shared/DLL or static according to the option given to configure
# unless overridden. Host builds are always static
host_build|staticlib: CONFIG += static

host_build {
    QT -= gui   # no host module will ever use gui
    force_bootstrap {
        !build_pass: CONFIG += release
        contains(QT, core(-private)?|xml) {
            QT -= core core-private xml
            QT += bootstrap-private
        }
    } else {
        !build_pass:contains(QT_CONFIG, build_all): CONFIG += release
    }
}

ucmodule = $$upper($$MODULE)

isEmpty(MODULE_INCNAME): MODULE_INCNAME = $$TARGET

MODULE_DEPENDS = $$replace(QT, -private$, )
MODULE_DEPENDS = $$unique(MODULE_DEPENDS)

contains(TARGET, QtAddOn.*): \
    MODULE_DEFINE = QT_ADDON_$${ucmodule}_LIB
else: \
    MODULE_DEFINE = QT_$${ucmodule}_LIB
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES

load(qt_module_pris)

INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)

!no_module_headers: load(qt_module_headers)

#other
TEMPLATE         = lib
DESTDIR          = $$eval(QT.$${MODULE}.libs)
win32:!wince*:!prefix_build: DLLDESTDIR = $$eval(QT.$${MODULE}.bins)

CONFIG          += qmake_cache target_qt

QMAKE_DOCS_TARGETDIR = qt$${MODULE}

# If Qt was configured with -debug-and-release then build the module the same way
# - unless this is a host library
!host_build:if(win32|mac):!macx-xcode {
    contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
    contains(QT_CONFIG, build_all):CONFIG += build_all
}

linux*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF

QT += $$QT_FOR_PRIVATE
unset(QT_FOR_PRIVATE)

!internal_module:CONFIG += create_cmake

contains(TARGET, QtAddOn.*): \
    DEFINES += QT_BUILD_ADDON_$${ucmodule}_LIB
else: \
    DEFINES += QT_BUILD_$${ucmodule}_LIB

#mac frameworks
mac:CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) {
   #QMAKE_FRAMEWORK_VERSION = 4.0
   CONFIG += lib_bundle qt_framework
   !debug_and_release|if(build_all:CONFIG(release, debug|release)) {
        FRAMEWORK_HEADERS.version = Versions
        FRAMEWORK_HEADERS.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
        FRAMEWORK_HEADERS.path = Headers
        FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES
        FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private
        FRAMEWORK_QPA_HEADERS.files = $$SYNCQT.QPA_HEADER_FILES
        FRAMEWORK_QPA_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/qpa
        QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS FRAMEWORK_PRIVATE_HEADERS FRAMEWORK_QPA_HEADERS
   }
}

mac {
   CONFIG += explicitlib
   macx-g++ {
       QMAKE_CFLAGS += -fconstant-cfstrings
       QMAKE_CXXFLAGS += -fconstant-cfstrings
   }
}

DEFINES += QT_BUILDING_QT
win32 {
    INCLUDEPATH += tmp
    CONFIG += skip_target_version_ext
}

aix-g++* {
     QMAKE_CFLAGS   += -mminimal-toc
     QMAKE_CXXFLAGS += -mminimal-toc
}

android: CONFIG += qt_android_deps

#install directives
load(qt_installs)

unix|win32-g++* {
   CONFIG += create_pc
   host_build: \
       QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS]
   else: \
       QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
   QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
   QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
   QMAKE_PKGCONFIG_DESTDIR = pkgconfig
   !isEmpty(_QMAKE_SUPER_CACHE_): \
      rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
   else: \
      rplbase = $$MODULE_BASE_OUTDIR
   include_replace.match = $$rplbase/include
   include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
   lib_replace.match = $$rplbase/lib
   lib_replace.replace = $$QMAKE_PKGCONFIG_LIBDIR
   QMAKE_PKGCONFIG_INSTALL_REPLACE += include_replace lib_replace
   QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
}

unix {
   CONFIG += create_libtool explicitlib
   QMAKE_LIBTOOL_LIBDIR = $$QMAKE_PKGCONFIG_LIBDIR
   QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
}

unix|win32-g++* {
    QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, "Qt$$section(VERSION, ., 0, 0) ")
    QMAKE_PKGCONFIG_FILE = $$replace(TARGET, ^Qt, Qt$$section(VERSION, ., 0, 0))
    for(i, MODULE_DEPENDS): \
        QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION))
    isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
        QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
}

contains(QT_PRODUCT, OpenSource.*):DEFINES *= QT_OPENSOURCE
DEFINES *= QT_NO_CAST_TO_ASCII QT_ASCII_CAST_WARNINGS
DEFINES *= QT_MOC_COMPAT #we don't need warnings from calling moc code in our generated code
DEFINES *= QT_USE_QSTRINGBUILDER
DEFINES *= QT_DEPRECATED_WARNINGS

win32 {
    # On Windows, due to the way DLLs work, we need to export all functions,
    # including the inlines
    DEFINES *= QT_DISABLE_DEPRECATED_BEFORE=0x040800
} else {
    # On other platforms, Qt's own compilation goes needs to compile the Qt 5.0 API
    DEFINES *= QT_DISABLE_DEPRECATED_BEFORE=0x050000
}

TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end

load(qt_targets)
load(qt_common)

win32:DEFINES+=_USE_MATH_DEFINES