| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 5.15.18-r666 | 8 | ~amd64 ~arm64 |
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{12..14} )
PYTHON_REQ_USE="xml(+)"
inherit check-reqs estack flag-o-matic git-r3 multiprocessing python-any-r1 qt5-build toolchain-funcs
DESCRIPTION="Library for rendering dynamic web content in Qt5 C++ and QML applications"
HOMEPAGE="https://www.qt.io/"
KEYWORDS="~amd64 ~arm64"
EGIT_REPO_URI="https://github.com/qt/qtwebengine.git"
EGIT_BRANCH="5.15.18-lts-lgpl"
EGIT_COMMIT="v${PV}-lts-lgpl"
EGIT_SUBMODULES=( '*' )
S="${WORKDIR}/${P}"
QT5_BUILD_DIR="${S}_build"
IUSE="alsa bindist designer geolocation +jumbo-build kerberos pulseaudio screencast +system-icu widgets"
REQUIRED_USE="designer? ( widgets )"
RDEPEND="
app-arch/snappy:=
dev-libs/glib:2
dev-libs/nspr
dev-libs/nss
dev-libs/expat
dev-libs/libevent:=
dev-libs/libxml2[icu]
dev-libs/libxslt
=dev-qt/qtcore-${QT5_PV}*
=dev-qt/qtdeclarative-${QT5_PV}*
=dev-qt/qtgui-${QT5_PV}*
=dev-qt/qtnetwork-${QT5_PV}*
=dev-qt/qtprintsupport-${QT5_PV}*
=dev-qt/qtwebchannel-${QT5_PV}*[qml]
media-libs/fontconfig
media-libs/freetype
media-libs/harfbuzz:=
media-libs/lcms:2
media-libs/libjpeg-turbo:=
media-libs/libpng:0=
>=media-libs/libvpx-1.5:=[svc(+)]
media-libs/libwebp:=
media-libs/opus
sys-apps/dbus
sys-apps/pciutils
sys-libs/zlib[minizip]
virtual/libudev
x11-libs/libdrm
x11-libs/libX11
x11-libs/libXcomposite
x11-libs/libXcursor
x11-libs/libXdamage
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXi
x11-libs/libxkbfile
x11-libs/libXrandr
x11-libs/libXrender
x11-libs/libXScrnSaver
x11-libs/libXtst
alsa? ( media-libs/alsa-lib )
designer? ( =dev-qt/designer-${QT5_PV}* )
geolocation? ( =dev-qt/qtpositioning-${QT5_PV}* )
kerberos? ( virtual/krb5 )
pulseaudio? ( media-libs/libpulse )
screencast? ( media-video/pipewire:= )
system-icu? ( >=dev-libs/icu-69.1:= )
widgets? (
=dev-qt/qtdeclarative-${QT5_PV}*[widgets]
=dev-qt/qtwidgets-${QT5_PV}*
)
"
DEPEND="${RDEPEND}
media-libs/libglvnd
"
BDEPEND="${PYTHON_DEPS}
app-alternatives/ninja
$(python_gen_any_dep 'dev-python/html5lib[${PYTHON_USEDEP}]')
dev-util/gperf
dev-util/re2c
net-libs/nodejs[ssl]
sys-devel/bison
sys-devel/flex
"
python_check_deps() {
python_has_version "dev-python/html5lib[${PYTHON_USEDEP}]"
}
qtwebengine_check-reqs() {
# bug #307861
eshopts_push -s extglob
if is-flagq '-g?(gdb)?([1-9])'; then
ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
ewarn "You may experience really long compilation times and/or increased memory usage."
ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug."
fi
eshopts_pop
[[ ${MERGE_TYPE} == binary ]] && return
# (check-reqs added for bug #570534)
#
# Estimate the amount of RAM required
# Multiplier is *10 because Bash doesn't do floating point maths.
# Let's crudely assume ~2GB per compiler job for GCC.
local multiplier=20
# And call it ~1.5GB for Clang.
if tc-is-clang ; then
multiplier=15
fi
local CHECKREQS_DISK_BUILD="7G"
local CHECKREQS_DISK_USR="150M"
if ! has "distcc" ${FEATURES} ; then
# bug #830661
# Not super realistic to come up with good estimates for distcc right now
local CHECKREQS_MEMORY=$(($(makeopts_jobs)*multiplier/10))G
fi
check-reqs_${EBUILD_PHASE_FUNC}
}
pkg_pretend() {
qtwebengine_check-reqs
}
pkg_setup() {
qtwebengine_check-reqs
python-any-r1_pkg_setup
# Ensure the build uses our selected Python version
export PYTHON="${PYTHON}"
einfo "Using Python: ${PYTHON}"
}
src_unpack() {
git-r3_src_unpack
}
src_prepare() {
# taken from Arch: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=qt5-webengine&id=227bf62b16db6df9456d086f7cc07dd9d922a1e0
# patch -p1 -d src/3rdparty -i "${FILESDIR}"/qt5-webengine-ffmpeg5.patch # Fix build with ffmpeg 5
patch -p1 -d src/3rdparty -i "${FILESDIR}"/qt5-webengine-pipewire-0.3.patch # Port to pipewire 0.3
patch -p2 -d src/3rdparty/chromium -i "${FILESDIR}"/qt5-webengine-icu-75.patch # Fix build with ICU 75
patch -p2 -d src/3rdparty/chromium -i "${FILESDIR}"/qt5-webengine-ninja-1.12.patch # Fix build with ninja 1.12
patch -p1 -d src/3rdparty/chromium -i "${FILESDIR}"/python3.12-imp.patch || die # Fix build with python 3.12 - patch from Debian
patch -p1 -d src/3rdparty/chromium -i "${FILESDIR}"/python3.12-six.patch || die # Fix build with python 3.12 - patch from Debian
# Fix build with ffmpeg 7 - Chromium patches
# patch -p1 -d src/3rdparty/chromium -i "${FILESDIR}"/qt5-webengine-ffmpeg7.patch || die
# Fix build with python 3.13
sed -e '/import pipes/d' -i src/3rdparty/chromium/build/android/gyp/util/build_utils.py
# Fix missing cstdint include for GCC 13+ in headers
local file
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/perfetto -name "*.h" -o -name "*.cc")
# Fix missing stdint.h include in WebRTC for GCC 13+
# Use stdint.h instead of cstdint for C/C++ compatibility
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t' "$file" && \
! grep -q '#include <stdint.h>\|#include <cstdint>' "$file"; then
sed -i '1i #include <stdint.h>' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/webrtc -type f \( -name "*.h" -o -name "*.cc" -o -name "*.c" \))
# Additional fix for specific WebRTC API headers that need cstdint
while IFS= read -r file; do
if grep -q 'int64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/webrtc/api -type f \( -name "*.h" -o -name "*.hh" \) | grep -E '(network_state_predictor|goog_cc|transport)')
# Fix missing cstdint include in net/tools/huffman_trie for GCC 13+
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/net/tools/huffman_trie -name "*.h" -o -name "*.cc")
# Fix missing cstdint includes in GPU headers
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t\|int64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/gpu -type f \( -name "*.h" -o -name "*.hh" \))
# Fix missing cstdint include in woff2 for GCC 13+
while IFS= read -r file; do
if grep -q 'int8_t\|int16_t\|int32_t\|int64_t\|uint8_t\|uint16_t\|uint32_t\|uint64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/woff2 -name "*.h" -o -name "*.cc")
# 1. C++ code: inject <cstdint> into C++ headers (*.h, *.hh) that use uintXX_t but lack the include
# Exclude known C-only subtrees to avoid contamination
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t\|int8_t\|int16_t\|int32_t\|int64_t' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <cstdint>' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/pdfium -type f \( -name "*.h" -o -name "*.hh" \) \
-not -path "*/third_party/libopenjpeg20/*" \
-not -path "*/third_party/libjpeg/*" \
-not -path "*/third_party/zlib/*")
# 2. C code (e.g., libopenjpeg20): inject <stdint.h> instead, and NEVER <cstdint>
while IFS= read -r file; do
if grep -q 'uint8_t\|uint16_t\|uint32_t\|uint64_t\|int8_t\|int16_t\|int32_t\|int64_t' "$file" && \
! grep -q '#include <stdint.h>' "$file" && \
! grep -q '#include <cstdint>' "$file"; then
sed -i '1i #include <stdint.h>' "$file" || die
elif grep -q '#include <cstdint>' "$file"; then
# Replace misplaced <cstdint> with <stdint.h> in C headers
sed -i 's|#include <cstdint>|#include <stdint.h>|' "$file" || die
fi
done < <(find src/3rdparty/chromium/third_party/pdfium/third_party/libopenjpeg20 -type f \( -name "*.h" -o -name "*.c" \))
# Fix string16 linking issues with GCC 13+
sed -i '1i #include <string>' src/3rdparty/chromium/base/strings/string16.h
sed -i '1i #include <string>' src/3rdparty/chromium/base/strings/string16_internals.h
# Also ensure proper includes in the clipboard file that's causing the error
if [[ -f src/core/clipboard_qt.cpp ]]; then
sed -i '1i #include <string>' src/core/clipboard_qt.cpp
fi
# We need to make sure this integrates well into Qt 5.15.3 installation.
# Otherwise revdeps fail w/o heavy changes. This is the simplest way to do it.
# See also: https://www.qt.io/blog/building-qt-webengine-against-other-qt-versions
sed -E "/^MODULE_VERSION/s/5\.15\.[0-9]+/${QT5_PV}/" -i .qmake.conf || die
# QTBUG-88657 - jumbo-build could still make trouble
if ! use jumbo-build; then
sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' \
src/buildtools/config/common.pri || die
fi
# bug 620444 - ensure local headers are used
find "${S}" -type f -name "*.pr[fio]" | \
xargs sed -i -e 's|INCLUDEPATH += |&$${QTWEBENGINE_ROOT}_build/include $${QTWEBENGINE_ROOT}/include |' || die
# Fix SYS_SECCOMP macro vs glibc enum collision (glibc >= 2.37).
# linux_seccomp.h is always included before signal.h completes (via trap_registry.h).
# Solution: prepend #include <signal.h> to linux_seccomp.h so it is fully parsed
# before SYS_SECCOMP is defined, then guard the define against redefinition.
local seccomp_h="src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h"
sed -i '1s|^|#include <signal.h>\n|' "${seccomp_h}" || die
# Now replace the bare #define SYS_SECCOMP with a guarded version
sed -i 's|^#define SYS_SECCOMP|#undef SYS_SECCOMP\n#define SYS_SECCOMP|' "${seccomp_h}" || die
if use system-icu; then
if has_version ">=dev-libs/icu-75.1"; then
eapply "${FILESDIR}/${PN}-5.15.14_p20240510-icu-75.patch" # too invasive to apply unconditionally
fi
# Sanity check to ensure that bundled copy of ICU is not used.
# Whole src/3rdparty/chromium/third_party/icu directory cannot be deleted because
# src/3rdparty/chromium/third_party/icu/BUILD.gn is used by build system.
# If usage of headers of bundled copy of ICU occurs, then lists of shim headers in
# shim_headers("icui18n_shim") and shim_headers("icuuc_shim") in
# src/3rdparty/chromium/third_party/icu/BUILD.gn should be updated.
local file
while read file; do
echo "#error This file should not be used!" > "${file}" || die
done < <(find src/3rdparty/chromium/third_party/icu -type f "(" -name "*.c" -o -name "*.cpp" -o -name "*.h" ")" 2>/dev/null)
fi
# src/3rdparty/gn fails with libc++ due to passing of `-static-libstdc++`
if tc-is-clang ; then
if has_version 'llvm-core/clang[default-libcxx(-)]' || has_version 'llvm-core/clang-common[default-libcxx(-)]' ; then
eapply "${FILESDIR}/${PN}-5.15.2_p20210521-clang-libc++.patch"
fi
fi
qt_use_disable_config alsa webengine-alsa src/buildtools/config/linux.pri
qt_use_disable_config pulseaudio webengine-pulseaudio src/buildtools/config/linux.pri
qt_use_disable_mod designer webenginewidgets src/plugins/plugins.pro
qt_use_disable_mod widgets widgets src/src.pro
qt5-build_src_prepare
}
src_configure() {
export NINJA_PATH=/usr/bin/ninja
export NINJAFLAGS="${NINJAFLAGS:--j$(makeopts_jobs "${MAKEOPTS}" 999) -l$(makeopts_loadavg "${MAKEOPTS}" 0) -v}"
append-cxxflags -D_GLIBCXX_USE_CXX11_ABI=1
# -qt-ffmpeg # bug 831487
local myqmakeargs=(
--
-no-build-qtpdf
-printing-and-pdf
--webengine-python-version=python3
-system-opus
-system-webp
$(qt_use alsa)
$(qt_use !bindist proprietary-codecs)
$(qt_use geolocation webengine-geolocation)
$(qt_use kerberos webengine-kerberos)
$(qt_use pulseaudio)
$(usex screencast -webengine-webrtc-pipewire '')
$(qt_use system-icu webengine-icu)
)
qt5-build_src_configure
}
src_install() {
qt5-build_src_install
# bug 601472
if [[ ! -f ${D}${QT5_LIBDIR}/libQt5WebEngine.so ]]; then
die "${CATEGORY}/${PF} failed to build anything. Please report to https://bugs.gentoo.org/"
fi
}
app-arch/snappy:=
dev-libs/glib:2
dev-libs/nspr
dev-libs/nss
dev-libs/expat
dev-libs/libevent:=
dev-libs/libxml2[icu]
dev-libs/libxslt
=dev-qt/qtcore-${QT5_PV}*
=dev-qt/qtdeclarative-${QT5_PV}*
=dev-qt/qtgui-${QT5_PV}*
=dev-qt/qtnetwork-${QT5_PV}*
=dev-qt/qtprintsupport-${QT5_PV}*
=dev-qt/qtwebchannel-${QT5_PV}*[qml]
media-libs/fontconfig
media-libs/freetype
media-libs/harfbuzz:=
media-libs/lcms:2
media-libs/libjpeg-turbo:=
media-libs/libpng:0=
>=media-libs/libvpx-1.5:=[svc(+)]
media-libs/libwebp:=
media-libs/opus
sys-apps/dbus
sys-apps/pciutils
sys-libs/zlib[minizip]
virtual/libudev
x11-libs/libdrm
x11-libs/libX11
x11-libs/libXcomposite
x11-libs/libXcursor
x11-libs/libXdamage
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXi
x11-libs/libxkbfile
x11-libs/libXrandr
x11-libs/libXrender
x11-libs/libXScrnSaver
x11-libs/libXtst
alsa? ( media-libs/alsa-lib )
designer? ( =dev-qt/designer-${QT5_PV}* )
geolocation? ( =dev-qt/qtpositioning-${QT5_PV}* )
kerberos? ( virtual/krb5 )
pulseaudio? ( media-libs/libpulse )
screencast? ( media-video/pipewire:= )
system-icu? ( >=dev-libs/icu-69.1:= )
widgets? (
=dev-qt/qtdeclarative-${QT5_PV}*[widgets]
=dev-qt/qtwidgets-${QT5_PV}*
)
media-libs/libglvnd
app-arch/snappy:=
dev-libs/glib:2
dev-libs/nspr
dev-libs/nss
dev-libs/expat
dev-libs/libevent:=
dev-libs/libxml2[icu]
dev-libs/libxslt
=dev-qt/qtcore-${QT5_PV}*
=dev-qt/qtdeclarative-${QT5_PV}*
=dev-qt/qtgui-${QT5_PV}*
=dev-qt/qtnetwork-${QT5_PV}*
=dev-qt/qtprintsupport-${QT5_PV}*
=dev-qt/qtwebchannel-${QT5_PV}*[qml]
media-libs/fontconfig
media-libs/freetype
media-libs/harfbuzz:=
media-libs/lcms:2
media-libs/libjpeg-turbo:=
media-libs/libpng:0=
>=media-libs/libvpx-1.5:=[svc(+)]
media-libs/libwebp:=
media-libs/opus
sys-apps/dbus
sys-apps/pciutils
sys-libs/zlib[minizip]
virtual/libudev
x11-libs/libdrm
x11-libs/libX11
x11-libs/libXcomposite
x11-libs/libXcursor
x11-libs/libXdamage
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXi
x11-libs/libxkbfile
x11-libs/libXrandr
x11-libs/libXrender
x11-libs/libXScrnSaver
x11-libs/libXtst
alsa? ( media-libs/alsa-lib )
designer? ( =dev-qt/designer-${QT5_PV}* )
geolocation? ( =dev-qt/qtpositioning-${QT5_PV}* )
kerberos? ( virtual/krb5 )
pulseaudio? ( media-libs/libpulse )
screencast? ( media-video/pipewire:= )
system-icu? ( >=dev-libs/icu-69.1:= )
widgets? (
=dev-qt/qtdeclarative-${QT5_PV}*[widgets]
=dev-qt/qtwidgets-${QT5_PV}*
)
${PYTHON_DEPS}
app-alternatives/ninja
$(python_gen_any_dep 'dev-python/html5lib[${PYTHON_USEDEP}]')
dev-util/gperf
dev-util/re2c
net-libs/nodejs[ssl]
sys-devel/bison
sys-devel/flex