summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-01-18 01:10:02 +0000
committerSam James <sam@gentoo.org>2023-01-18 21:48:58 +0000
commit92c1834342000220f71cf7e9b9ad0ed111d9e084 (patch)
tree50247a6b7d22c9439044dd2771c441c618009bb7 /dev-qt/qtcore
parentapp-office/planner: add 0.14.91 (diff)
downloadgentoo-92c1834342000220f71cf7e9b9ad0ed111d9e084.tar.gz
gentoo-92c1834342000220f71cf7e9b9ad0ed111d9e084.tar.bz2
gentoo-92c1834342000220f71cf7e9b9ad0ed111d9e084.zip
dev-qt/qtcore: pass -fno-stack-clash-protection with Clang
With Clang, -fstack-clash-protection seems to lead to qtcore being miscompiled and e.g. kde-frameworks/syntax-highlighting failing to compile. It's hard to justify spending that much time investigating this for Qt 5 given it's likely it doesn't occur with Qt 6 (significant changes all over the place) and its build system is far more amenable to building with various sanitisers. Given this only happens with Clang, we can likely chalk this up to a Clang bug, but Qt is huge, and I don't have the time to try minimise this - help welcome if someone fancies it! This has probably been latent for quite a long time, but got exposed by sys-devel/clang-runtime recently starting to pass -fstack-clash-protection by default to match GCC's behaviour in Gentoo in the new upcoming (WIP) 23.0 profiles. Thanks in particular to Jonas Rakebrandt <xarblu@protonmail.com> for putting the work in to find the trigger. Bug: https://bugs.gentoo.org/865339 KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=462084 KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=464140 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-qt/qtcore')
-rw-r--r--dev-qt/qtcore/qtcore-5.15.8-r2.ebuild125
1 files changed, 125 insertions, 0 deletions
diff --git a/dev-qt/qtcore/qtcore-5.15.8-r2.ebuild b/dev-qt/qtcore/qtcore-5.15.8-r2.ebuild
new file mode 100644
index 000000000000..5817a2b70616
--- /dev/null
+++ b/dev-qt/qtcore/qtcore-5.15.8-r2.ebuild
@@ -0,0 +1,125 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} != *9999* ]]; then
+ QT5_KDEPATCHSET_REV=3
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+QT5_MODULE="qtbase"
+inherit linux-info flag-o-matic toolchain-funcs qt5-build
+
+DESCRIPTION="Cross-platform application development framework"
+SLOT=5/${QT5_PV}
+
+IUSE="icu old-kernel systemd"
+
+DEPEND="
+ dev-libs/double-conversion:=
+ dev-libs/glib:2
+ dev-libs/libpcre2[pcre16,unicode]
+ sys-libs/zlib:=
+ icu? ( dev-libs/icu:= )
+ !icu? ( virtual/libiconv )
+ systemd? ( sys-apps/systemd:= )
+"
+RDEPEND="${DEPEND}"
+
+QT5_TARGET_SUBDIRS=(
+ src/tools/bootstrap
+ src/tools/moc
+ src/tools/rcc
+ src/corelib
+ src/tools/qlalr
+ doc
+)
+
+QT5_GENTOO_PRIVATE_CONFIG=(
+ !:network
+ !:sql
+ !:testlib
+ !:xml
+)
+
+PATCHES=( "${FILESDIR}/${P}-fix-crash-w-debug.patch" ) # bug 889160, pending upstream
+
+pkg_pretend() {
+ use kernel_linux || return
+ get_running_version
+ if kernel_is -lt 4 11 && ! use old-kernel; then
+ ewarn "The running kernel is older than 4.11. USE=old-kernel is needed for"
+ ewarn "dev-qt/qtcore to function on this kernel properly. Bugs #669994, #672856"
+ fi
+}
+
+src_prepare() {
+ # don't add -O3 to CXXFLAGS, bug 549140
+ sed -i -e '/CONFIG\s*+=/s/optimize_full//' src/corelib/corelib.pro || die
+
+ # fix missing qt_version_tag symbol w/ LTO, bug 674382
+ sed -i -e 's/^gcc:ltcg/gcc/' src/corelib/global/global.pri || die
+
+ # Broken with FORTIFY_SOURCE=3
+ # Our toolchain sets F_S=2 by default w/ >= -O2, so we need
+ # to unset F_S first, then explicitly set 2, to negate any default
+ # and anything set by the user if they're choosing 3 (or if they've
+ # modified GCC to set 3).
+ #
+ # Refs:
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105078
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105709
+ # https://bugreports.qt.io/browse/QTBUG-103782
+ # bug #847145
+ if is-flagq '-O[23]' || is-flagq '-Ofast' ; then
+ # We can't unconditionally do this b/c we fortify needs
+ # some level of optimisation.
+ filter-flags -D_FORTIFY_SOURCE=3
+ # (Qt doesn't seem to respect CPPFLAGS?)
+ append-flags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
+ fi
+
+ # Leads to miscompiled qtcore, bug #865339
+ tc-is-clang && append-flags -fno-stack-clash-protection
+
+ qt5-build_src_prepare
+
+ # workaround for 0148-Annotate-QMutex-...patch adding a header
+ perl bin/syncqt.pl -version ${PV} || die
+}
+
+src_configure() {
+ local myconf=(
+ $(qt_use icu)
+ $(qt_use !icu iconv)
+ $(qt_use systemd journald)
+ )
+ use old-kernel && myconf+=(
+ -no-feature-renameat2 # needs Linux 3.16, bug 669994
+ -no-feature-getentropy # needs Linux 3.17, bug 669994
+ -no-feature-statx # needs Linux 4.11, bug 672856
+ )
+ qt5-build_src_configure
+}
+
+src_install() {
+ qt5-build_src_install
+ qt5_symlink_binary_to_path qmake 5
+
+ local flags=(
+ DBUS FREETYPE IMAGEFORMAT_JPEG IMAGEFORMAT_PNG
+ OPENGL OPENSSL SSL WIDGETS
+ )
+
+ for flag in ${flags[@]}; do
+ cat >> "${D}"/${QT5_HEADERDIR}/QtCore/qconfig.h <<- _EOF_ || die
+
+ #if defined(QT_NO_${flag}) && defined(QT_${flag})
+ # undef QT_NO_${flag}
+ #elif !defined(QT_NO_${flag}) && !defined(QT_${flag})
+ # define QT_NO_${flag}
+ #endif
+ _EOF_
+ done
+}