# Copyright 1999-2025 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() { # LET JUST BUILD WITH OLD GCC export CC="gcc-13" export CXX="g++-13" # 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 # 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 ' "$file"; then sed -i '1i #include ' "$file" || die fi done < <(find src/3rdparty/chromium/third_party/perfetto -name "*.h" -o -name "*.cc") # Patch WebRTC task_queue_base.h for GCC 13+ if ! grep -q '#include ' "src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h"; then sed -i '1i #include ' "src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h" || die 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 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}" 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-ffmpeg # bug 831487 $(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 }