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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
|
# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
QT6_HAS_STATIC_LIBS=1
inherit flag-o-matic qt6-build toolchain-funcs
DESCRIPTION="Cross-platform application development framework"
if [[ ${QT6_BUILD_TYPE} == release ]]; then
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~x86"
fi
declare -A QT6_IUSE=(
[global]="+ssl +udev zstd"
[core]="icu journald syslog"
[modules]="+concurrent +dbus +gui +network +sql +xml"
[gui]="
+X accessibility eglfs evdev gles2-only +libinput
opengl renderdoc tslib vulkan wayland +widgets
"
[network]="brotli gssapi libproxy sctp"
[sql]="mysql oci8 odbc postgres +sqlite"
[widgets]="cups gtk"
[optfeature]="nls" #810802
)
IUSE="${QT6_IUSE[*]}"
REQUIRED_USE="
?? ( journald syslog )
$(
printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/}
printf '%s? ( network ) ' ${QT6_IUSE[network]//+/}
printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/}
printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/}
)
accessibility? ( dbus )
eglfs? ( opengl )
gles2-only? ( opengl )
gui? ( || ( X eglfs wayland ) )
libinput? ( udev )
sql? ( || ( ${QT6_IUSE[sql]//+/} ) )
test? ( icu sql? ( sqlite ) )
wayland? ( opengl )
"
# groups:
# - global (configure.cmake)
# - qtcore (src/corelib/configure.cmake)
# - qtgui (src/gui/configure.cmake)
# - qtnetwork (src/network/configure.cmake)
# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets]
# - qtsql (src/plugins/sqldrivers/configure.cmake)
# nolink: renderdoc, systemd
COMMON_DEPEND="
virtual/zlib:=
ssl? ( dev-libs/openssl:= )
udev? ( virtual/libudev:= )
zstd? ( app-arch/zstd:= )
app-crypt/libb2
dev-libs/double-conversion:=
dev-libs/glib:2
dev-libs/libpcre2:=[pcre16,unicode(+)]
icu? ( dev-libs/icu:= )
journald? ( sys-apps/systemd )
dbus? ( sys-apps/dbus )
gui? (
dev-libs/md4c
media-libs/fontconfig
>=media-libs/freetype-2.13.1:2
media-libs/harfbuzz:=
media-libs/libjpeg-turbo:=
media-libs/libpng:=
x11-libs/libdrm
x11-libs/libxkbcommon[X?]
X? (
x11-libs/libICE
x11-libs/libSM
x11-libs/libX11
x11-libs/libxcb:=
x11-libs/xcb-util-cursor
x11-libs/xcb-util-image
x11-libs/xcb-util-keysyms
x11-libs/xcb-util-renderutil
x11-libs/xcb-util-wm
)
accessibility? ( app-accessibility/at-spi2-core:2 )
eglfs? ( media-libs/mesa[gbm(+)] )
evdev? ( sys-libs/mtdev )
libinput? ( dev-libs/libinput:= )
opengl? (
gles2-only? ( media-libs/libglvnd )
!gles2-only? ( media-libs/libglvnd[X?] )
)
renderdoc? ( media-gfx/renderdoc )
tslib? ( x11-libs/tslib )
wayland? ( dev-libs/wayland )
widgets? (
cups? ( net-print/cups )
gtk? (
x11-libs/gdk-pixbuf:2
>=x11-libs/gtk+-3.24.41-r1:3[X?,wayland?]
x11-libs/pango
)
)
)
network? (
brotli? ( app-arch/brotli:= )
gssapi? ( virtual/krb5 )
libproxy? ( net-libs/libproxy )
)
sql? (
mysql? ( dev-db/mysql-connector-c:= )
oci8? ( dev-db/oracle-instantclient:=[sdk] )
odbc? ( dev-db/unixODBC )
postgres? ( dev-db/postgresql:* )
sqlite? ( dev-db/sqlite:3 )
)
"
# wrt blockers: users do not always depclean regularly and outdated
# dev-qt packages sometime cause runtime issues (update this when new
# Qt libraries/plugins are added, and keep old for 2y+ if removed)
RDEPEND="
${COMMON_DEPEND}
!<dev-qt/qt3d-${PV}:6
!<dev-qt/qt5compat-${PV}:6
!<dev-qt/qtcharts-${PV}:6
!<dev-qt/qtconnectivity-${PV}:6
!<dev-qt/qtdeclarative-${PV}:6
!<dev-qt/qtgraphs-${PV}:6
!<dev-qt/qthttpserver-${PV}:6
!<dev-qt/qtimageformats-${PV}:6
!<dev-qt/qtlanguageserver-${PV}:6
!<dev-qt/qtlocation-${PV}:6
!<dev-qt/qtmultimedia-${PV}:6
!<dev-qt/qtnetworkauth-${PV}:6
!<dev-qt/qtpositioning-${PV}:6
!<dev-qt/qtquick3d-${PV}:6
!<dev-qt/qtquicktimeline-${PV}:6
!<dev-qt/qtremoteobjects-${PV}:6
!<dev-qt/qtscxml-${PV}:6
!<dev-qt/qtsensors-${PV}:6
!<dev-qt/qtserialbus-${PV}:6
!<dev-qt/qtserialport-${PV}:6
!<dev-qt/qtshadertools-${PV}:6
!<dev-qt/qtspeech-${PV}:6
!<dev-qt/qtsvg-${PV}:6
!<dev-qt/qttools-${PV}:6
!<dev-qt/qtvirtualkeyboard-${PV}:6
!<dev-qt/qtwayland-${PV}:6
!<dev-qt/qtwebchannel-${PV}:6
!<dev-qt/qtwebengine-${PV}:6
!<dev-qt/qtwebsockets-${PV}:6
!<dev-qt/qtwebview-${PV}:6
syslog? ( virtual/logger )
"
DEPEND="
${COMMON_DEPEND}
X? ( x11-base/xorg-proto )
gui? (
vulkan? ( dev-util/vulkan-headers )
wayland? ( dev-util/wayland-scanner )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
# libarchive[zstd] is indirectly used by cmake (bug #910392)
BDEPEND="
zstd? ( app-arch/libarchive[zstd] )
"
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
"
PATCHES=(
"${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch
"${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch
"${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch
"${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch
"${FILESDIR}"/${PN}-6.8.2-cross.patch
"${FILESDIR}"/${PN}-6.9.0-no-direct-extern-access.patch
)
src_prepare() {
qt6-build_src_prepare
if use test; then
# test itself has -Werror=strict-aliasing issues, drop for simplicity
sed -e '/add_subdirectory(qsharedpointer)/d' \
-i tests/auto/corelib/tools/CMakeLists.txt || die
# workaround for __extendhfxf2 being used for tst_qfloat16.cpp
# which is unavailable with compiler-rt (assume used if clang)
if tc-is-clang; then
sed -e '/add_subdirectory(qfloat16)/d' \
-i tests/auto/corelib/global/CMakeLists.txt || die
fi
fi
}
src_configure() {
# temporary warning to spare surprised users for whom "it worked before",
# will drop this in Qt 6.11 (bug #966289)
if use custom-cflags && tc-cpp-is-true __RDRND__ ${CXXFLAGS}; then
ewarn "USE=custom-cflags is enabled, and there is a good chance that the build"
ewarn "will fail with current CXXFLAGS. Please disable it if have issues."
fi
if use gtk; then
# defang automagic dependencies (bug #624960)
use X || append-cxxflags -DGENTOO_GTK_HIDE_X11
use wayland || append-cxxflags -DGENTOO_GTK_HIDE_WAYLAND
fi
local mycmakeargs=(
-DBUILD_WITH_PCH=OFF
-DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}"
-DINSTALL_BINDIR="${QT6_BINDIR}"
-DINSTALL_DATADIR="${QT6_DATADIR}"
-DINSTALL_DOCDIR="${QT6_DOCDIR}"
-DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}"
-DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}"
-DINSTALL_LIBDIR="${QT6_LIBDIR}"
-DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}"
-DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}"
-DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}"
-DINSTALL_QMLDIR="${QT6_QMLDIR}"
-DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}"
-DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}"
-DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* too
-DQT_FEATURE_force_system_libs=ON
-DQT_FEATURE_relocatable=OFF #927691
$(qt_feature ssl openssl)
$(qt_feature ssl openssl_linked)
$(qt_feature udev libudev)
$(qt_feature zstd)
# qtcore
$(qt_feature icu)
$(qt_feature journald)
$(qt_feature syslog)
# currently jemalloc upstream is dead and tests fail with it
-DQT_FEATURE_jemalloc=OFF
# tools
-DQT_FEATURE_androiddeployqt=OFF
# modules
$(qt_feature concurrent)
$(qt_feature dbus)
$(qt_feature gui)
$(qt_feature network)
$(qt_feature sql)
# trivial, and is often needed (sometimes even when not building tests)
-DQT_FEATURE_testlib=ON
$(qt_feature xml)
# let gentoo's defaults and/or users control security *FLAGS
-DQT_FEATURE_glibc_fortify_source=OFF
-DQT_FEATURE_intelcet=OFF
-DQT_FEATURE_libcpp_hardening=OFF
-DQT_FEATURE_libstdcpp_assertions=OFF
-DQT_FEATURE_relro_now_linker=OFF
-DQT_FEATURE_stack_clash_protection=OFF
-DQT_FEATURE_stack_protector=OFF
-DQT_FEATURE_trivial_auto_var_init_pattern=OFF
-DQT_INTERNAL_AVOID_OVERRIDING_SYNCQT_CONFIG=ON # would force -O3
)
use gui && mycmakeargs+=(
$(qt_feature X xcb)
$(qt_feature X system_xcb_xinput)
$(qt_feature X xkbcommon_x11)
$(cmake_use_find_package X X11) # needed for truly no automagic
$(qt_feature accessibility accessibility_atspi_bridge)
$(qt_feature eglfs)
$(qt_feature evdev)
$(qt_feature evdev mtdev)
$(qt_feature libinput)
$(qt_feature renderdoc graphicsframecapture)
$(qt_feature tslib)
$(qt_feature vulkan)
$(qt_feature wayland)
$(qt_feature widgets)
-DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no)
) && use widgets && mycmakeargs+=(
# note: qtprintsupport is enabled w/ gui+widgets regardless of USE=cups
$(qt_feature cups)
$(qt_feature gtk gtk3)
)
use network && mycmakeargs+=(
$(qt_feature brotli)
$(qt_feature gssapi)
$(qt_feature libproxy)
$(qt_feature sctp)
$(usev test -DQT_SKIP_DOCKER_COMPOSE=ON)
)
use sql && mycmakeargs+=(
-DQT_FEATURE_sql_db2=OFF # unpackaged
-DQT_FEATURE_sql_ibase=OFF # unpackaged
-DQT_FEATURE_sql_mimer=OFF # unpackaged
$(qt_feature mysql sql_mysql)
$(qt_feature oci8 sql_oci)
$(usev oci8 -DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client)
$(qt_feature odbc sql_odbc)
$(qt_feature postgres sql_psql)
$(qt_feature sqlite sql_sqlite)
$(qt_feature sqlite system_sqlite)
)
tc-is-cross-compiler && mycmakeargs+=(
-DQT_HOST_PATH="${BROOT}"/usr
-DQT_FORCE_BUILD_TOOLS=ON
-DQT_NO_GENERATE_QMAKE_WRAPPER_FOR_TARGET=ON
)
qt6-build_src_configure
}
src_test() {
local -x TZ=UTC
local -x LC_TIME=C
# users' session setting may break tst_clientextension (bug #927030)
unset DESKTOP_SESSION XDG_CURRENT_DESKTOP
unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION
local CMAKE_SKIP_TESTS=(
# broken with out-of-source + if qtbase is not already installed
tst_moc
tst_qmake
# similarly broken when relocatable=OFF (bug #927691)
tst_qapplication
tst_qt_cmake_create
tst_uic
# needs x11/wayland/opengl rather than just Qt offscreen and would
# rather to keep this simple
tst_qgraphicsview
tst_qopengl{,config,widget,window}
tst_qx11info
tst_surface
tst_wl_reconnect
tst_xdgdecorationv1
# fails for unknown reasons, but seatv4 is not actually used nowadays
tst_seatv4
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# flaky tests, may be better with -j1 but not worth using over this
tst_qfiledialog{,2} #916181
tst_qprocess #936484
tst_qtimer
tst_wayland_cursor
# haystacksWithMoreThan4GiBWork can easily OOM (16GB ram not enough)
tst_qlatin1stringmatcher
# these can be flaky depending on the environment/toolchain
tst_qlogging # backtrace log test can easily vary
tst_q{,raw}font # affected by available fonts / settings (bug #914737)
tst_qprinter # checks system's printers (bug #916216)
tst_qhighdpi # may detect users' settings and fail (bug #935364)
tst_qstorageinfo # checks mounted filesystems
# flaky due to using different test framework and fails with USE=-gui
tst_selftests
# known failing when using clang+glibc+stdc++, needs looking into
tst_qthread
# partially failing on x86 chroots and seemingly(?) harmless (dev-qt
# revdeps tests pass), skip globally to avoid keywording flakiness
tst_json
tst_qcolorspace
tst_qdoublevalidator
tst_qglobal
tst_qglyphrun
tst_qvectornd
tst_rcc
# similarly, but on armv7 and potentially others (bug #914028)
tst_qlineedit
tst_qpainter
# likewise, known failing on BE arches (bug #914033,914371,918878)
tst_qimagereader
tst_qimagewriter
tst_qpluginloader
tst_quuid # >=6.6.2 had related fixes, needs retesting
# partially broken on llvm-musl, needs looking into but skip to have
# a baseline for regressions (rest of dev-qt still passes with musl)
$(usev elibc_musl '
tst_qicoimageformat
tst_qimagereader
tst_qimage
')
# fails due to hppa's NaN handling, needs looking into (bug #914371)
$(usev hppa '
tst_qcborvalue
tst_qnumeric
')
# note: for linux, upstream only really runs+maintains tests for amd64
# https://doc.qt.io/qt-6/supported-platforms.html
)
qt6-build_src_test
}
src_install() {
qt6-build_src_install
if use test; then
local delete_bins=( # need a better way to handle this
apphelper clientserver copier crashingServer desktopsettingsaware_helper
echo fileWriterProcess modal_helper nospace 'one space'
paster qcommandlineparser_test_helper qfileopeneventexternal
socketprocess syslocaleapp tst_qhashseed_helper 'two space s'
write-read-write
)
local delete=( # sigh
"${D}${QT6_BINDIR}"/test*
"${D}${QT6_LIBDIR}/objects-${CMAKE_BUILD_TYPE}"/*test*
"${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
)
# using -f given not tracking which tests may be skipped or not
rm -rf -- "${delete[@]}" || die
fi
}
|