Add dev-qt from an older version of the gentoo repo

Qt5 has been removed, we restore it since we still use it.
This commit is contained in:
2026-07-03 09:45:00 +02:00
parent 2247967dd3
commit d5c461ec31
587 changed files with 30457 additions and 0 deletions

3
dev-qt/qtbase/Manifest Normal file
View File

@ -0,0 +1,3 @@
DIST qtbase-everywhere-src-6.8.2.tar.xz 48264736 BLAKE2B 3c4a71a0c515d7433eda3a6155a0499ea43ce708fb25614843499bf8a7a71ef06ba93dad9e7dd04a28b86a88eea00151ad3500d06bd09b9b37a4e070774e2684 SHA512 4a074aca1c8bcca536fd428c969c0119f5131d0d52b67028edbb75a81dc6e0c15394f69e29cef513e6d8c6e93384cedc38dd03b0eed6ab1bbafbe2b5bbc85799
DIST qtbase-everywhere-src-6.8.3.tar.xz 48426536 BLAKE2B 3133a0e50c1f6d185e8b587934d04cc79dd06f7c86bc092e8b678690464878f14f346cb0f2f4d8b33a1a6c67cdda31bd33ccaa97d04dfdcb53f3c0c1649a3c2f SHA512 ef364f939f23b622f67d21833c2dbf1fb74531d9a1e25b6d2e94ea5d747a40f20c6c3a24abef1e9710287366b7cb54dd090350d315601317779235c20743cc81
DIST qtbase-everywhere-src-6.9.0.tar.xz 49658320 BLAKE2B 762d07c1c9e3e0ffeb58fadd9ddae03a3d097595c2a1279be697050a8532181a93f33de9edbb9cf9fba7483a97caba50cec9ff923ca1cdc2fc9c513650583cfc SHA512 f19a331725c8a1cddb52864fda6669a8aa4a394c3d30b4f7c763b398c9a4dd86a25e6d7bd9615081c61e05f5d98ed54c35c2c58d2813019f9609a4aa53b5924e

View File

@ -0,0 +1,20 @@
https://mail.kde.org/pipermail/distributions/2026-May/001681.html
https://qt-project.atlassian.net/browse/QTBUG-145310
https://codereview.qt-project.org/c/qt/qtbase/+/727830
--- a/src/gui/text/freetype/qfontengine_ft.cpp
+++ b/src/gui/text/freetype/qfontengine_ft.cpp
@@ -1956,9 +1956,11 @@
err = FT_Render_Glyph(slot, renderMode);
- if (err != FT_Err_Ok)
- qWarning("render glyph failed err=%x face=%p, glyph=%d", err, face, glyph);
-
FT_Library_SetLcdFilter(slot->library, FT_LCD_FILTER_NONE);
+ if (err != FT_Err_Ok) {
+ qWarning("render glyph failed err=%x face=%p, glyph=%d", err, face, glyph);
+ return nullptr;
+ }
+
info.height = slot->bitmap.rows;
info.width = slot->bitmap.width;

View File

@ -0,0 +1,14 @@
https://codereview.qt-project.org/c/qt/qtbase/+/735182
https://qt-project.atlassian.net/browse/QTBUG-146670
(seems to also affect ppc32)
--- a/src/corelib/kernel/qtestsupport_core.cpp
+++ b/src/corelib/kernel/qtestsupport_core.cpp
@@ -9,8 +9,4 @@
using namespace std::chrono_literals;
-// Assert that this instantiation of std::atomic is always lock-free so we
-// know that no code will execute on destruction.
-static_assert(std::atomic<std::chrono::milliseconds>::is_always_lock_free);
-
QT_BEGIN_NAMESPACE

View File

@ -0,0 +1,28 @@
Patch taken from Debian[1], largely broken on HPPA without and several
tests give segmentation faults[2].
Needs upstreaming if someone familiar with HPPA wants to give this
attention. Note forkfd is essentially maintained in qtbase's repo[3]
rather than truly third party.
[1] https://bugs.debian.org/1042018
[2] https://bugs.gentoo.org/914371
[3] https://code.qt.io/cgit/qt/qtbase.git/tree/src/3rdparty/forkfd
Description: Change how stack grows on HPPA.
On HPPA stack grows upwards. This patch introduces this change for
this 3rd party code.
Author: John David Anglin <dave.anglin@bell.net>
--- a/src/3rdparty/forkfd/forkfd_linux.c
+++ b/src/3rdparty/forkfd/forkfd_linux.c
@@ -170,5 +170,10 @@
*system = 1;
+#if defined(__hppa__)
+ /* Stack grows up */
+ pid = clone(childFn, childStack, cloneflags, token, &pidfd, NULL, NULL);
+#else
pid = clone(childFn, childStack + sizeof(childStack), cloneflags, token, &pidfd, NULL, NULL);
+#endif
if (pid < 0)
return pid;

View File

@ -0,0 +1,5 @@
https://bugs.gentoo.org/914195
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65 +64,0 @@
-qt_internal_check_if_path_has_symlinks("${CMAKE_BINARY_DIR}")

View File

@ -0,0 +1,27 @@
Avoid crash that happens for some users in qsb, qmake, and
potentially other Qt tools when ran under sandbox leading
to build failures for qtdeclarative and other packages.
Former fix involved replacing 4096 by SIGSTKSZ but
bug #918664 shown that this may be insufficient so this
tries 32k instead.
Update: after https://bugs.gentoo.org/923013 and a fixed
sandbox been stabilized for some time, it should in theory
be possible to drop this
https://bugs.gentoo.org/908809
https://bugs.gentoo.org/908816
https://bugs.gentoo.org/913493
https://bugs.gentoo.org/915695
https://bugs.gentoo.org/918664
https://codereview.qt-project.org/c/qt/qtbase/+/513140
--- a/src/3rdparty/forkfd/forkfd_linux.c
+++ b/src/3rdparty/forkfd/forkfd_linux.c
@@ -158,5 +158,5 @@
int system_vforkfd(int flags, pid_t *ppid, int (*childFn)(void *), void *token, int *system)
{
- __attribute__((aligned(64))) char childStack[SIGSTKSZ];
+ __attribute__((aligned(64))) char childStack[32768];
pid_t pid;
int pidfd;

View File

@ -0,0 +1,15 @@
Simply disable the broken path rather than worry about it for now.
Likely an easy fix but would rather this be handled upstream and
reported by someone that is affected and can test.
https://bugs.gentoo.org/926287
--- a/src/gui/painting/qrgbafloat.h
+++ b/src/gui/painting/qrgbafloat.h
@@ -20,5 +20,5 @@
public:
using Type = F;
-#if defined(__AVX512FP16__) && QFLOAT16_IS_NATIVE
+#if 0
// AVX512FP16 has multiplication instructions
using FastType = F;

View File

@ -0,0 +1,14 @@
https://bugs.gentoo.org/938475
https://codereview.qt-project.org/c/qt/qtbase/+/585668
From: Sam James <sam@gentoo.org>
Date: Sun, 25 Aug 2024 17:34:22 +0100
Subject: [PATCH] QContiguousCache: fix include for qMin
Include `<QtCore/qminmax.h>` for `qMin`. This came up downstream
in Gentoo at https://bugs.gentoo.org/938475.
--- a/src/corelib/tools/qcontiguouscache.h
+++ b/src/corelib/tools/qcontiguouscache.h
@@ -10,2 +10,3 @@
#include <QtCore/qtcoreexports.h>
+#include <QtCore/qminmax.h>
#include <QtCore/qttypetraits.h>

View File

@ -0,0 +1,58 @@
Combined backport of [1][2][3] from upcoming Qt 6.8.3 for [4][5][6].
[1] https://github.com/qt/qtbase/commit/12d4bf1ab52748cb84894f50d437064b439e0b7d
[2] https://github.com/qt/qtbase/commit/2ef615228bba9a8eb282437bfb7472f925610e89
[3] https://github.com/qt/qtbase/commit/a43c7e58046604796aa69974ea1c5d3e2648c755
[4] https://bugreports.qt.io/browse/QTBUG-133206
[5] https://bugreports.qt.io/browse/QTBUG-133500
[6] https://bugs.kde.org/show_bug.cgi?id=499537
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -7,4 +7,5 @@
#include "qfile.h"
#if QT_CONFIG(settings)
+#include "qresource.h"
#include "qsettings.h"
#endif
@@ -104,5 +105,5 @@
QString qtconfig = QStringLiteral(":/qt/etc/qt.conf");
- if (QFile::exists(qtconfig))
+ if (QResource(qtconfig, QLocale::c()).isValid())
return std::make_unique<QSettings>(qtconfig, QSettings::IniFormat);
#ifdef Q_OS_DARWIN
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -1113,8 +1113,11 @@
QLocale::QLocale()
- : d(*defaultLocalePrivate)
+ : d(c_private())
{
- // Make sure system data is up to date:
- systemData();
+ if (!defaultLocalePrivate.isDestroyed()) {
+ // Make sure system data is up to date:
+ systemData();
+ d = *defaultLocalePrivate;
+ }
}
--- a/src/corelib/text/qlocale_unix.cpp
+++ b/src/corelib/text/qlocale_unix.cpp
@@ -128,4 +128,6 @@
{
QSystemLocaleData *d = qSystemLocaleData();
+ if (!d)
+ return QVariant();
if (type == LocaleChanged) {
--- a/src/corelib/text/qlocale_win.cpp
+++ b/src/corelib/text/qlocale_win.cpp
@@ -829,4 +829,6 @@
{
QSystemLocalePrivate *d = systemLocalePrivate();
+ if (!d)
+ return QVariant();
switch(type) {
case DecimalPoint:

View File

@ -0,0 +1,12 @@
https://bugs.gentoo.org/949629
https://bugreports.qt.io/browse/QTBUG-133808
https://codereview.qt-project.org/c/qt/qtbase/+/624870
--- a/src/corelib/global/qcompare_impl.h
+++ b/src/corelib/global/qcompare_impl.h
@@ -13,4 +13,6 @@
#include <QtCore/qcompilerdetection.h>
+#include <type_traits>
+
QT_BEGIN_NAMESPACE

View File

@ -0,0 +1,36 @@
When cross-compiling, CMake needs to find the build host's Qt6CoreTools. It
therefore prepends QT_HOST_PATH, which is /usr, to CMAKE_FIND_ROOT_PATH. The
problem is that CMAKE_FIND_ROOT_PATH is only a hint, not a definitive
location. Just below, CMake's find_package is usually told to look in
/usr/${CHOST}/usr/lib/cmake and /usr/lib/cmake when cross-compiling. Since
both of these are under /usr, it chooses the former instead of the latter.
It then ends up trying to execute non-native Qt binaries.
We can avoid this problem by setting CMAKE_FIND_ROOT_PATH to a more precise
location. All the Qt6 modules are installed under /usr/lib/cmake, represented
by the __qt_find_package_host_qt_path variable, so we can point it there.
find_package has two modes, module mode and config mode. No mode is
explicitly chosen in this case, so it tries both. In module mode, it would
use a module called FindQt6*.cmake, but no such module exists. It is
therefore safe to assume config mode, which involves the files under
/usr/lib/cmake.
See the isSameDirectoryOrSubDirectory() call in CMake's
cmFindCommon::RerootPaths() function for exactly where this goes wrong.
Chewi
https://bugs.gentoo.org/950314
--- a/cmake/QtConfig.cmake.in
+++ b/cmake/QtConfig.cmake.in
@@ -131,7 +131,7 @@
set(__qt_backup_cmake_find_root_path "${CMAKE_FIND_ROOT_PATH}")
list(PREPEND CMAKE_PREFIX_PATH "${__qt_find_package_host_qt_path}"
${_qt_additional_host_packages_prefix_paths})
- list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_HOST_PATH}"
+ list(PREPEND CMAKE_FIND_ROOT_PATH "${__qt_find_package_host_qt_path}"
${_qt_additional_host_packages_root_paths})
endif()

View File

@ -0,0 +1,163 @@
https://www.qt.io/blog/security-advisory-qtextmarkdownimporter-hbo
https://codereview.qt-project.org/c/qt/qtbase/+/635699
--- a/src/gui/text/qtextmarkdownimporter.cpp
+++ b/src/gui/text/qtextmarkdownimporter.cpp
@@ -28,5 +28,6 @@
static const QChar qtmi_Space = u' ';
-static constexpr auto markerString() noexcept { return "---"_L1; }
+static constexpr auto lfMarkerString() noexcept { return "---\n"_L1; }
+static constexpr auto crlfMarkerString() noexcept { return "---r\n"_L1; }
// TODO maybe eliminate the margins after all views recognize BlockQuoteLevel, CSS can format it, etc.
@@ -120,4 +121,45 @@
}
+/*! \internal
+ Split any Front Matter from the Markdown document \a md.
+ Returns a pair of QStringViews: if \a md begins with qualifying Front Matter
+ (according to the specification at https://jekyllrb.com/docs/front-matter/ ),
+ put it into the \c frontMatter view, omitting both markers; and put the remaining
+ Markdown into \c rest. If no Front Matter is found, return all of \a md in \c rest.
+*/
+static auto splitFrontMatter(QStringView md)
+{
+ struct R {
+ QStringView frontMatter, rest;
+ explicit operator bool() const noexcept { return !frontMatter.isEmpty(); }
+ };
+
+ const auto NotFound = R{{}, md};
+
+ /* Front Matter must start with '---\n' or '---\r\n' on the very first line,
+ and Front Matter must end with another such line.
+ If that is not the case, we return NotFound: then the whole document is
+ to be passed on to the Markdown parser, in which '---\n' is interpreted
+ as a "thematic break" (like <hr/> in HTML). */
+ QLatin1StringView marker;
+ if (md.startsWith(lfMarkerString()))
+ marker = lfMarkerString();
+ else if (md.startsWith(crlfMarkerString()))
+ marker = crlfMarkerString();
+ else
+ return NotFound;
+
+ const auto frontMatterStart = marker.size();
+ const auto endMarkerPos = md.indexOf(marker, frontMatterStart);
+
+ if (endMarkerPos < 0 || md[endMarkerPos - 1] != QChar::LineFeed)
+ return NotFound;
+
+ Q_ASSERT(frontMatterStart < md.size());
+ Q_ASSERT(endMarkerPos < md.size());
+ const auto frontMatter = md.sliced(frontMatterStart, endMarkerPos - frontMatterStart);
+ return R{frontMatter, md.sliced(endMarkerPos + marker.size())};
+}
+
void QTextMarkdownImporter::import(const QString &markdown)
{
@@ -144,19 +186,12 @@
QStringView md = markdown;
- if (m_features.testFlag(QTextMarkdownImporter::FeatureFrontMatter) && md.startsWith(markerString())) {
- qsizetype endMarkerPos = md.indexOf(markerString(), markerString().size() + 1);
- if (endMarkerPos > 4) {
- qsizetype firstLinePos = 4; // first line of yaml
- while (md.at(firstLinePos) == '\n'_L1 || md.at(firstLinePos) == '\r'_L1)
- ++firstLinePos;
- auto frontMatter = md.sliced(firstLinePos, endMarkerPos - firstLinePos);
- firstLinePos = endMarkerPos + 4; // first line of markdown after yaml
- while (md.size() > firstLinePos && (md.at(firstLinePos) == '\n'_L1 || md.at(firstLinePos) == '\r'_L1))
- ++firstLinePos;
- md = md.sliced(firstLinePos);
- doc->setMetaInformation(QTextDocument::FrontMatter, frontMatter.toString());
- qCDebug(lcMD) << "extracted FrontMatter: size" << frontMatter.size();
+ if (m_features.testFlag(QTextMarkdownImporter::FeatureFrontMatter)) {
+ if (const auto split = splitFrontMatter(md)) {
+ doc->setMetaInformation(QTextDocument::FrontMatter, split.frontMatter.toString());
+ qCDebug(lcMD) << "extracted FrontMatter: size" << split.frontMatter.size();
+ md = split.rest;
}
}
+
const auto mdUtf8 = md.toUtf8();
m_cursor.beginEditBlock();
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed1.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed1.md
@@ -0,0 +1,3 @@
+---
+name: "Pluto"---
+Pluto may not be a planet. And this document does not contain Front Matter.
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed2.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed2.md
@@ -0,0 +1,5 @@
+---
+name: "Sloppy"
+---
+This document has trailing whitespace after its second Front Matter marker.
+Therefore the marker does not qualify, and the document does not have Front Matter.
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed3.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/front-marker-malformed3.md
@@ -0,0 +1,4 @@
+---
+name: "Aborted YAML"
+description: "The ending marker does not end with a newline, so it's invalid."
+---
\ No newline at end of file
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/oss-fuzz-42533775.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/oss-fuzz-42533775.md
@@ -0,0 +1 @@
+--- ---
\ No newline at end of file
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/yaml-crlf.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/yaml-crlf.md
@@ -0,0 +1,10 @@
+---
+name: "Venus"
+discoverer: "Galileo Galilei"
+title: "A description of the planet Venus"
+keywords:
+ - planets
+ - solar system
+ - astronomy
+---
+*Venus* is the second planet from the Sun, orbiting it every 224.7 Earth days.
--- a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp
+++ b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp
@@ -549,4 +549,5 @@
QTest::newRow("fuzz20450") << "attempted to insert into a list that no longer exists";
QTest::newRow("fuzz20580") << "";
+ QTest::newRow("oss-fuzz-42533775") << ""; // caused a heap-buffer-overflow
}
@@ -645,8 +646,13 @@
{
QTest::addColumn<QString>("inputFile");
+ QTest::addColumn<int>("expectedFrontMatterSize");
QTest::addColumn<int>("expectedBlockCount");
- QTest::newRow("yaml + markdown") << QFINDTESTDATA("data/yaml.md") << 1;
- QTest::newRow("yaml only") << QFINDTESTDATA("data/yaml-only.md") << 0;
+ QTest::newRow("yaml + markdown") << QFINDTESTDATA("data/yaml.md") << 140 << 1;
+ QTest::newRow("yaml + markdown with CRLFs") << QFINDTESTDATA("data/yaml-crlf.md") << 140 << 1;
+ QTest::newRow("yaml only") << QFINDTESTDATA("data/yaml-only.md") << 59 << 0;
+ QTest::newRow("malformed 1") << QFINDTESTDATA("data/front-marker-malformed1.md") << 0 << 1;
+ QTest::newRow("malformed 2") << QFINDTESTDATA("data/front-marker-malformed2.md") << 0 << 2;
+ QTest::newRow("malformed 3") << QFINDTESTDATA("data/front-marker-malformed3.md") << 0 << 1;
}
@@ -654,4 +660,5 @@
{
QFETCH(QString, inputFile);
+ QFETCH(int, expectedFrontMatterSize);
QFETCH(int, expectedBlockCount);
@@ -673,5 +680,7 @@
}
QCOMPARE(blockCount, expectedBlockCount); // yaml is not part of the markdown text
- QCOMPARE(doc.metaInformation(QTextDocument::FrontMatter), yaml); // without fences
+ if (expectedFrontMatterSize)
+ QCOMPARE(doc.metaInformation(QTextDocument::FrontMatter), yaml); // without fences
+ QCOMPARE(doc.metaInformation(QTextDocument::FrontMatter).size(), expectedFrontMatterSize);
}

View File

@ -0,0 +1,9 @@
Re-allow auto-detect rather than do =ON to ensure the toolchain supports it.
https://bugs.gentoo.org/754021
https://github.com/qt/qtbase/commit/48675dfa3 (revert of)
--- a/configure.cmake
+++ b/configure.cmake
@@ -784,3 +784,2 @@
CONDITION NOT WIN32 AND TEST_no_direct_extern_access
- AUTODETECT OFF
)

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>qt@gentoo.org</email>
<name>Gentoo Qt Project</name>
</maintainer>
<use>
<flag name="X">Build the XCB platform plugin and enable X11 integration</flag>
<flag name="concurrent">Build Qt6Concurrent module</flag>
<flag name="dbus">Build Qt6DBus module</flag>
<flag name="eglfs">Build the EGL Full Screen/Single Surface platform plugin</flag>
<flag name="evdev">Enable support for input devices via evdev</flag>
<flag name="gssapi">Enable support for GSSAPI (<pkg>virtual/krb5</pkg>)</flag>
<flag name="gtk">Build the GTK platform theme plugin</flag>
<flag name="gui">Build Qt6Gui module</flag>
<flag name="journald">Log messages using <pkg>sys-apps/systemd</pkg>'s journald rather than output to stderr (override with the QT_FORCE_STDERR_LOGGING=1 env var)</flag>
<flag name="libinput">Enable support for input devices via <pkg>dev-libs/libinput</pkg></flag>
<flag name="libproxy">Use <pkg>net-libs/libproxy</pkg> for automatic HTTP/SOCKS proxy configuration</flag>
<flag name="network">Build Qt6Network module</flag>
<flag name="renderdoc">Enable support for capturing graphic's API calls using <pkg>media-gfx/renderdoc</pkg></flag>
<flag name="sql">Build Qt6Sql module</flag>
<flag name="syslog">Log messages using syslog rather than output to stderr (override with the QT_FORCE_STDERR_LOGGING=1 env var)</flag>
<flag name="tslib">Enable support for touchscreen devices via <pkg>x11-libs/tslib</pkg></flag>
<flag name="widgets">Build Qt6Widgets module</flag>
</use>
<upstream>
<bugs-to>https://bugreports.qt.io/</bugs-to>
<doc>https://doc.qt.io/</doc>
<remote-id type="github">qt/qtbase</remote-id>
</upstream>
<slots>
<subslots>
Must only be used by packages that are known to use private parts of the Qt API.
</subslots>
</slots>
</pkgmetadata>

View File

@ -0,0 +1,446 @@
# 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 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
"${FILESDIR}"/${PN}-6.10.3-QTBUG-145310.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_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
# 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
}

View File

@ -0,0 +1,443 @@
# 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/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
"${FILESDIR}"/${PN}-6.11.1-QTBUG-146670.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() {
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
# 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
}

View File

@ -0,0 +1,442 @@
# 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/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
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() {
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
# 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
}

View File

@ -0,0 +1,442 @@
# 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/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
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() {
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
# 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
}

View File

@ -0,0 +1,382 @@
# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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 ) )
"
# 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="
sys-libs/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? (
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 )
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 )
)
"
RDEPEND="
${COMMON_DEPEND}
syslog? ( virtual/logger )
"
DEPEND="
${COMMON_DEPEND}
X? ( x11-base/xorg-proto )
gui? (
vulkan? ( dev-util/vulkan-headers )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
wayland? ( ~dev-qt/qtwayland-${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.0-qcontiguouscache.patch
"${FILESDIR}"/${PN}-6.8.2-cross.patch
"${FILESDIR}"/${P}-QTBUG-133500.patch
"${FILESDIR}"/${P}-QTBUG-133808.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() {
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_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)
# 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)
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
) && 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
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/opengl, we *could* run these but tend to be flaky
# when opengl rendering is involved (even if software-only)
tst_qopengl{,config,widget,window}
tst_qgraphicsview
tst_qx11info
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# randomly fails without -j1, and not worth it over this (bug #916181)
tst_qfiledialog{,2}
# may randomly hang+timeout, perhaps related to -j as well
tst_qprocess #936484
tst_qtimer
# 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
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
}

View File

@ -0,0 +1,381 @@
# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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 ) )
"
# 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="
sys-libs/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? (
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 )
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 )
)
"
RDEPEND="
${COMMON_DEPEND}
syslog? ( virtual/logger )
"
DEPEND="
${COMMON_DEPEND}
X? ( x11-base/xorg-proto )
gui? (
vulkan? ( dev-util/vulkan-headers )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
wayland? ( ~dev-qt/qtwayland-${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.0-qcontiguouscache.patch
"${FILESDIR}"/${PN}-6.8.2-cross.patch
"${FILESDIR}"/${PN}-6.8.3-CVE-2025-3512.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() {
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_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)
# 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)
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
) && 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
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/opengl, we *could* run these but tend to be flaky
# when opengl rendering is involved (even if software-only)
tst_qopengl{,config,widget,window}
tst_qgraphicsview
tst_qx11info
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# randomly fails without -j1, and not worth it over this (bug #916181)
tst_qfiledialog{,2}
# may randomly hang+timeout, perhaps related to -j as well
tst_qprocess #936484
tst_qtimer
# 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
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
}

View File

@ -0,0 +1,381 @@
# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
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 ) )
"
# 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="
sys-libs/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? (
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 )
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 )
)
"
RDEPEND="
${COMMON_DEPEND}
syslog? ( virtual/logger )
"
DEPEND="
${COMMON_DEPEND}
X? ( x11-base/xorg-proto )
gui? (
vulkan? ( dev-util/vulkan-headers )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
wayland? ( ~dev-qt/qtwayland-${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() {
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)
# 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)
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
) && 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
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/opengl, we *could* run these but tend to be flaky
# when opengl rendering is involved (even if software-only)
tst_qopengl{,config,widget,window}
tst_qgraphicsview
tst_qx11info
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# randomly fails without -j1, and not worth it over this (bug #916181)
tst_qfiledialog{,2}
# may randomly hang+timeout, perhaps related to -j as well
tst_qprocess #936484
tst_qtimer
# 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
}

View File

@ -0,0 +1,414 @@
# 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 ) )
"
# 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="
sys-libs/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? (
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 )
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/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 )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
wayland? ( ~dev-qt/qtwayland-${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() {
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)
# 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)
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
) && 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
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/opengl, we *could* run these but tend to be flaky
# when opengl rendering is involved (even if software-only)
tst_qopengl{,config,widget,window}
tst_qgraphicsview
tst_qx11info
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# randomly fails without -j1, and not worth it over this (bug #916181)
tst_qfiledialog{,2}
# may randomly hang+timeout, perhaps related to -j as well
tst_qprocess #936484
tst_qtimer
# 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
}

View File

@ -0,0 +1,414 @@
# 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 ) )
"
# 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="
sys-libs/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? (
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 )
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/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 )
)
network? (
sctp? ( net-misc/lksctp-tools )
)
test? (
elibc_musl? ( sys-libs/timezone-data )
)
"
BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
PDEPEND="
nls? ( ~dev-qt/qttranslations-${PV}:6 )
wayland? ( ~dev-qt/qtwayland-${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() {
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)
# 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)
-DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
) && 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
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/opengl, we *could* run these but tend to be flaky
# when opengl rendering is involved (even if software-only)
tst_qopengl{,config,widget,window}
tst_qgraphicsview
tst_qx11info
# fails with network sandbox
tst_qdnslookup
# fails with sandbox
tst_qsharedmemory
# typical to lack SCTP support on non-generic kernels
tst_qsctpsocket
# randomly fails without -j1, and not worth it over this (bug #916181)
tst_qfiledialog{,2}
# may randomly hang+timeout, perhaps related to -j as well
tst_qprocess #936484
tst_qtimer
# 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
}