Files
gentoo/dev-qt/qtbase/qtbase-6.9999.ebuild
Ionen Wolkens b561413e86 dev-qt/qtbase: skip tst_qnetworkreply_local in live
Formerly this test used /tmp which is not great but prevented socket
paths from being too long to work (a linux limitation).

Now it uses XDG_RUNTIME_DIR or fallbacks to TMPDIR (set to ${T}) if
unset, both of which are typically too long.

We could set XDG_RUNTIME_DIR to a mktemp directory in /tmp but that'd
require cleanup and we generally don't want to touch anything outside
our workdir either way. Another option would be to try to shorten
the name of the socket itself and runtime-portage/ to just run/ or so
but ultimately this may still easily fail on prefix and similar.
Feel not worth all this trouble, so let's just skip this.

Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
2026-09-12 06:15:02 -04:00

448 lines
13 KiB
Bash

# Copyright 2021-2026 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 -gA QT6_IUSE=(
[global]="+ssl +udev zstd"
[core]="icu io-uring 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:= )
io-uring? ( sys-libs/liburing:= )
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/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
cmake_comment_add_subdirectory -f tests/auto/corelib/tools qsharedpointer
# workaround for __extendhfxf2 being used for tst_qfloat16.cpp
# which is unavailable with compiler-rt (assume used if clang)
if tc-is-clang; then
cmake_comment_add_subdirectory -f tests/auto/corelib/global qfloat16
fi
fi
}
src_configure() {
use elibc_musl && #980330
append-ldflags $(test-flags-CCLD -Wl,-z,stack-size=0x100000)
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 io-uring liburing)
$(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_compile() {
# workaround missing qtest include race condition when building
# the new test from qtbase@b412e424b (needs more looking into)
cmake_build include/QtTest/QtTest
cmake_src_compile
}
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
# sockets fail when path is too long on linux, and this uses e.g.
# ${T}/runtime-portage/qt_networkreply_test_fullServerName12237.sock
tst_qnetworkreply_local
# 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
# this test has often caused trouble depending on arch, endianness,
# musl, and others with some image/pixel formats and similar and,
# while there is likely real bugs, it's above what I'm willing to
# handle for now
tst_qimage
# 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
')
# 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
}