summaryrefslogtreecommitdiff
path: root/www-client
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-07-25 03:04:48 -0500
committerroot <root@alpha.trunkmasters.com>2026-07-25 03:04:48 -0500
commitf1b8e4e12c5e5f7dc09790bb9915ce4855b5d9ea (patch)
treea8f221e1b40a4169606eaa061aeec4488ee413a5 /www-client
parent76c83b2d707f66d67a31960e9cc086753d88cd0d (diff)
downloadbaldeagleos-repo-f1b8e4e12c5e5f7dc09790bb9915ce4855b5d9ea.tar.gz
baldeagleos-repo-f1b8e4e12c5e5f7dc09790bb9915ce4855b5d9ea.tar.xz
baldeagleos-repo-f1b8e4e12c5e5f7dc09790bb9915ce4855b5d9ea.zip
Adding metadata
Diffstat (limited to 'www-client')
-rw-r--r--www-client/chromium/chromium-150.0.7871.181.ebuild2
-rw-r--r--www-client/ungoogled-chromium-bin/Manifest2
-rw-r--r--www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.186.ebuild (renamed from www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.128.ebuild)0
-rw-r--r--www-client/ungoogled-chromium/Manifest2
-rw-r--r--www-client/ungoogled-chromium/ungoogled-chromium-150.0.7871.186_p1.ebuild2528
5 files changed, 2532 insertions, 2 deletions
diff --git a/www-client/chromium/chromium-150.0.7871.181.ebuild b/www-client/chromium/chromium-150.0.7871.181.ebuild
index 4f78f1ce10ca..77680e1f5403 100644
--- a/www-client/chromium/chromium-150.0.7871.181.ebuild
+++ b/www-client/chromium/chromium-150.0.7871.181.ebuild
@@ -86,7 +86,7 @@ SLOT="stable"
# Unstable in gentoo exists mostly to give devs some breathing room for beta/stable releases.
# It shouldn't be keyworded but adventurous users are encouraged to select it;
# there's official dev channel Google Chrome after all.
-KEYWORDS="~amd64 ~arm64"
+KEYWORDS="~amd64 arm64"
IUSE_SYSTEM_LIBS="+system-harfbuzz +system-icu +system-zstd"
IUSE="+X ${IUSE_SYSTEM_LIBS} bindist bundled-toolchain cups debug ffmpeg-chromium gtk4 +hangouts headless kerberos +official pax-kernel pgo"
diff --git a/www-client/ungoogled-chromium-bin/Manifest b/www-client/ungoogled-chromium-bin/Manifest
index 0c395aad0913..9c6e5e1a4550 100644
--- a/www-client/ungoogled-chromium-bin/Manifest
+++ b/www-client/ungoogled-chromium-bin/Manifest
@@ -1,3 +1,3 @@
DIST ungoogled-chromium-bin-149.0.7827.200-x86-64.tar.bz2 158509567 BLAKE2B 92f12b746586007d2608c159ef5194c6f1565185eb978b1b30fcf028e236ac835c1d1c2a4fcd8c290ee8070bd8e89b82c29193aca019a6adb2d226929857ed06 SHA512 6dcfacbcb2836878c216038eb09451f0a6ee39c10539973060bed29db8dd63947a10a3e01113b889d728a362495f94ecfa1ea9d4f4ac18a90d8d087a1c048cd5
-DIST ungoogled-chromium-bin-150.0.7871.128-x86-64.tar.bz2 161912071 BLAKE2B cef9e030a1b94aa392462c99a6ac5451ce3d026aa4ed6b7842267471d8f6a9b970bd95e3a1b30ef51a0d98363ee7a392e3cd6076db8228d3551a8d6fd7c3e90d SHA512 a2b3a1597a16c529fe3bf0fade939aaacdb20f6f3b5ee7cc93e58b87106fd9cc5e68484d36b6ddc0d83eff15ab47efad3e3ad5547c9bc66acdcbff5451f8952b
DIST ungoogled-chromium-bin-150.0.7871.181-x86-64.tar.bz2 162068613 BLAKE2B 080f7a447cdfa58e68f56ef72d6e4d954ebbc02bc705a757cc7e7c20bff1bfcbd0168b76269a48557d8d1cabd16eda951ca7cdd9826e1eab2f33faed88049a08 SHA512 c651e696795c5d62ad0f72319c0114f7a95a0f418cd2779a7b4afe76af0336a5a1482dda4bed3cd400b81488ed760defe927da17c7d768b09905a83c763bd5f3
+DIST ungoogled-chromium-bin-150.0.7871.186-x86-64.tar.bz2 161955683 BLAKE2B e6069bfeb13a6b8c8b6b68966f0e687684023dd2a4752f9566c3a929e718b221c741b49079a2e79fa364cb2101b454ad9629f88c0d3d4b5de166f2ba86352854 SHA512 bb0baa6c549163b84faaf5e6805f8340bc831c49bc52438a30313c763d48c824373a123f936affad32c6079b0acfb23a13fc74247ef9911d8478da68c71f4fd1
diff --git a/www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.128.ebuild b/www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.186.ebuild
index 463b7bd112cd..463b7bd112cd 100644
--- a/www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.128.ebuild
+++ b/www-client/ungoogled-chromium-bin/ungoogled-chromium-bin-150.0.7871.186.ebuild
diff --git a/www-client/ungoogled-chromium/Manifest b/www-client/ungoogled-chromium/Manifest
index a7e8424e80d6..1e37fcf895bd 100644
--- a/www-client/ungoogled-chromium/Manifest
+++ b/www-client/ungoogled-chromium/Manifest
@@ -10,6 +10,7 @@ DIST chromium-150.0.7871.114-linux.tar.xz 1670274328 BLAKE2B 7462e3f64b27ef26019
DIST chromium-150.0.7871.124-linux.tar.xz 1670364688 BLAKE2B 68a19fca963ca95e1bbea6afa28bde1de3ac84301e719cf0c6885dba82061688966940b91bf6b821c620e1e07540bea88cc4a677ca815c62b61b6220321fa575 SHA512 bd9ff49b3d48a7311878f358a3fb15e31e882b234f7ff36f9657c28a0e1d0f3e7bda7324452cb0aecc08d4ca2f34fc19700651813e309d92936f068cbe0de527
DIST chromium-150.0.7871.128-linux.tar.xz 1670297068 BLAKE2B c99df5e0961adddfcd754f1b80732beefce5d58c7e57accba0ae9d9e8216c641fad794c4d6c8fbe7d3c42430a4f8ae41a389d59f0f8eac9275bd329ba1b75577 SHA512 543f66d3164c27f138d44630fedf4e769bf9577282130ec1083430aa698c9967eb63be35d297100dd842acb6e3cf330bbe94d194ef02a8d932f0f2a78d83a9f9
DIST chromium-150.0.7871.181-linux.tar.xz 1668476496 BLAKE2B 9d6fb2cc9a12c935f16b1b7e28b0fa82cc8bc891deda1896c31d9b1a67a342d1cc16101ec750f663a06e4e1246d558d8ec01c1b7199d594971a3db938257455c SHA512 e45213d626456f72b2994e44a7026ebcc92262066c436f51c7922b9d161d1a4900ca042dfe2c617eba04c488e76de0728acad43bd542fdce68098144d25c7d30
+DIST chromium-150.0.7871.186-linux.tar.xz 1668494832 BLAKE2B 8edda676c99dab33bab5ffe6c87bcb5bc3066ee9f7bb36d1a0d0aa7b58e4009f35f4d7e4776a9d80722b54429931d6c1720c77284f2877cf925a6275d38b9dd2 SHA512 e1ee5851277c5a32d89a021b8f20736dfeab1bd046f6dbfa8d22137ff5366119cc845cdb8f87ce42a26d48703734984db4181dfa219dba093a52915f5be9976f
DIST chromium-cf94ed446320d35c8613ed9b3ffb6e6a61bfcb5f.patch 9972 BLAKE2B 72d3b755214a8cc0299129c645b938746a2e4dff31cc9aa154019ebaf5c29d5ce9a8378dbecbf0455f253c5e10b83dbfd03a10573d8fa93992f2d6ac965a2b1f SHA512 62ffd3162a0c1aa4be51d3ead238b3a84463f8c6d55b9aad5806bcb23dfb2b832ad6aec7f348690c4b3aaf430260352ca558e791ca611d5e791e6b3eadcffcf1
DIST chromium-clang-llvmorg-23-init-10931-g20b6ec66-11.tar.xz 69635068 BLAKE2B 5250889dac7ca048030266b9e5eb9b08a1288acb1023fff3513555ca361f787fdb273b04d5cb5cc9960d7d13e804604ca63e65b056d1873a8f5e1d56e8f59db8 SHA512 4a1f06bacfb5894e277f3957df3adcc937f262ec91927d6fd97a2e4b88b795e2559a8498be633d6b191dd4d52a5df52669f76c59c2939689f5f88fc7457cabae
DIST chromium-clang-llvmorg-23-init-10931-g20b6ec66-8.tar.xz 69605340 BLAKE2B 5ab6a03bfa76a8523d35c9f9541bc8aff2c33331208ffd2c729e6cd7e6d58e225d236ca8233893df57a52d4cefb0c62d79d61c8f902fbd909cdac8f148822fb8 SHA512 6e013faba35b624144535207c5c884d4675e4166f4eb212d2494c43dbb430b35030734d6f28fc087f5da79a8318531560529a0d0754a96d13e628eb5090de6b5
@@ -38,4 +39,5 @@ DIST ungoogled-chromium-150.0.7871.114-1.tar.gz 669709 BLAKE2B 1e79d1a073ffbb373
DIST ungoogled-chromium-150.0.7871.124-1.tar.gz 669575 BLAKE2B eeac190b02144ba88e18a3610de73387800d6d13927c519221538c4e13cfdb221de5fcd806bec5073c1386544a5f60324a77de1ef598926f2f880f3289e15921 SHA512 61e13d7b19791e58ed769d70e98bf454c83e48b8d408f8d2d060a3ca3a62dd059f21cb4e649235f1fcfd8665136bd98716591ea570f4980d5f2e953fe6883033
DIST ungoogled-chromium-150.0.7871.128-1.tar.gz 669587 BLAKE2B 6ccb3a8fd78691563f8e59dc97f66157830affa74a2c947e3620d6ce63a56ff2c7b2a52b76cd7169927f0cf92cef60503bf395e0be78a7df0669d98015f69c63 SHA512 e292c78c3f9a976df3d141e818783e843a2c66a78a88cc29cb9e17df461e4b0e9c1353c44cfa09ca1c442738ef468d28c3fad2aa70746a432444c4c5eac47ae6
DIST ungoogled-chromium-150.0.7871.181-1.tar.gz 669574 BLAKE2B df192323b07c68ee088e1f3bb9f5df7ea1fe9f3b98453bf05944a40b62e05ed771be30edcae15f301456cce5f69352b182c5b8f8c98c1865d505e4b22084fa0f SHA512 57717fc4488c36e4bbbc8cca6d5ee884d5fe854d9b61524ccf49a28c7eb61832e2040cb1a1780e98f45167517623a0181a8866494157282408a52e191fb1d8f7
+DIST ungoogled-chromium-150.0.7871.186-1.tar.gz 669698 BLAKE2B a02d1072f5e07f02bac3c1cd91a39852b4b3a5fec527ae9fdffd507bce6246ab9b5d6cdf428f5ba5a3cc2b0efb8d091cfd786cb8a067f0cc706b2def80997ecf SHA512 6a633fd54d17d6851823a22e88a9640ff957f2d2a8b103f0c6f9d0a33607a94aad42d8bcb54ae36cd3935acc292698e6111a471c1e773948b3f1f0e94788074d
DIST ungoogled-chromium-4d7bb965938b072e1dc7d9a5fa26121805f97fc8.tar.gz 665638 BLAKE2B 84d8ef00835f9d880007db9c125729209900d4df1087099af9fd9b66727fbb37b1520908d3bedcf3416302e45866a4f7278cc0589ef6de25a5e6142c123d08b9 SHA512 b6653986b3af157ad5749eabd185280ccd24cf5a551f2e639a6ac9b51aff2fa4f5aa7c0b3cd881162b0da2f44e022755013d1f747e1268378a18fcb9cdfde015
diff --git a/www-client/ungoogled-chromium/ungoogled-chromium-150.0.7871.186_p1.ebuild b/www-client/ungoogled-chromium/ungoogled-chromium-150.0.7871.186_p1.ebuild
new file mode 100644
index 000000000000..541dfd3abb06
--- /dev/null
+++ b/www-client/ungoogled-chromium/ungoogled-chromium-150.0.7871.186_p1.ebuild
@@ -0,0 +1,2528 @@
+# Copyright 2009-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Use following environment variables to customise the build
+# EXTRA_GN — pass extra options to gn
+# NINJAOPTS="-k0 -j8" useful to populate ccache even if ebuild is still failing
+# UGC_SKIP_PATCHES — space-separated list of patches to skip
+# UGC_KEEP_BINARIES — space-separated list of binaries to keep
+# UGC_SKIP_SUBSTITUTION — space-separated list of files to skip domain substitution
+
+# USE=bundled-toolchain is intended for users who want to use the same toolchain
+# as the upstream releases. It's also a good fallback in case we fall behind
+# and need to get a release out quickly (less likely with `dev` in-tree).
+# We can't rely on it as a default since the toolchain is only shipped for x86-64;
+# other architectures will need to use system toolchain.
+
+# Since m133 we are using CI-generated tarballs from
+# https://github.com/chromium-linux-tarballs/chromium-tarballs/
+
+# These are bit-for-bit identical to the official releases, but are built
+# using an external CI system that we have some control over, in case
+# issues pop up again with official tarball generation.
+
+GN_MIN_VER=0.2374
+# chromium-tools/get-chromium-toolchain-strings.py (or just use Chromicler)
+# Node for M145+ should be 24.12.0 but that's not packaged in Gentoo yet. See #969145
+TEST_FONT="9c07d19d9c5ee1ff94f717e6fb17e0c8c354e6f9"
+BUNDLED_CLANG_VER="llvmorg-23-init-10931-g20b6ec66-11"
+BUNDLED_RUST_VER="4c4205163abcbd089150.0.7871.18148b3efab796c543ba1ea687-5"
+RUST_SHORT_HASH=${BUNDLED_RUST_VER:0:10}-${BUNDLED_RUST_VER##*-}
+NODE_VER="24.16.0-r1"
+ESBUILD_VER="0.25.1"
+ROLLUP_VER="4.57.1" # currently manual.
+
+CHROMIUM_LANGS="af am ar as az be bg bn bs ca cs cy da de el en-GB es es-419 et eu fa fi fil
+ fr fr-CA gl gu he hi hr hu hy id is it ja ka kk km kn ko ky lo lt lv mk ml mn mr ms my
+ nb ne nl or pa pl pt-BR pt-PT ro ru si sk sl sq sr sr-Latn sv sw ta te th tr uk ur uz
+ vi zh-CN zh-HK zh-TW zu"
+
+#UGC_COMMIT_ID="fd0378e4f20fa09e21b09beca71573d435d787cf"
+# UGC_PR_COMMITS=(
+# c917e096342e5b90eeea91ab1f8516447c8756cf
+# 5794e9d12bf82620d5f24505798fecb45ca5a22d
+# )
+
+CROMITE_COMMIT_ID="cb3baf14f52eb4365d017f640f85310735c19b79"
+
+declare -A CHROMIUM_COMMITS=(
+# ["fcfb1a42813f1e9d8babedc7bb2e0f06101a3151"]="." #148+
+ ["-cf94ed446320d35c8613ed9b3ffb6e6a61bfcb5f"]="."
+# # ["-37c28a19804e47a68eabf3cf882a310689fc325b"]="." #disable style check for cromite
+# # ["cd5a0df905a28faa89ff2a4ab44f893f84dc4487"]="net/third_party/quiche/src"
+)
+
+LLVM_COMPAT=( 21 22 23 )
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="xml(+)"
+RUST_MIN_VER=1.91.0
+RUST_NEEDS_LLVM="yes please"
+RUST_OPTIONAL="yes" # Not actually optional, but we don't need system Rust (or LLVM) with USE=bundled-toolchain
+RUST_REQ_USE="rustfmt" # Upstream run rustfmt on bindgen output, so we need it to be available.
+
+inherit check-reqs chromium-2 desktop flag-o-matic llvm-r1 multiprocessing ninja-utils pax-utils
+inherit python-any-r1 readme.gentoo-r1 rust systemd toolchain-funcs xdg-utils
+
+DESCRIPTION="Modifications to Chromium for removing Google integration and enhancing privacy"
+HOMEPAGE="https://github.com/ungoogled-software/ungoogled-chromium"
+PPC64_HASH="a85b64f07b489b8c6fdb13ecf79c16c56c560fc6"
+PATCH_V="${PV%%\.*}-1"
+COPIUM_COMMIT="b00f26bb5e0781020da5f830981472a142c6baf1"
+SRC_URI="https://github.com/chromium-linux-tarballs/chromium-tarballs/releases/download/${PV/_*}/chromium-${PV/_*}-linux.tar.xz
+ https://deps.gentoo.zip/www-client/chromium/rollup-wasm-node-${ROLLUP_VER}.tgz
+ https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${PATCH_V}/chromium-patches-${PATCH_V}.tar.bz2
+ !bundled-toolchain? (
+ https://codeberg.org/selfisekai/copium/archive/${COPIUM_COMMIT}.tar.gz
+ -> chromium-patches-copium-${COPIUM_COMMIT:0:10}.tar.gz
+ )
+ bundled-toolchain? (
+ https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-${BUNDLED_CLANG_VER}.tar.xz
+ -> chromium-clang-${BUNDLED_CLANG_VER}.tar.xz
+ https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/rust-toolchain-${BUNDLED_RUST_VER}-${BUNDLED_CLANG_VER%-*}.tar.xz
+ -> chromium-rust-toolchain-${RUST_SHORT_HASH}-${BUNDLED_CLANG_VER%-*}.tar.xz
+ )
+ test? (
+ https://chromium-fonts.storage.googleapis.com/${TEST_FONT} -> chromium-testfonts-${TEST_FONT:0:10}.tar.gz
+ )
+ ppc64? (
+ https://gitlab.raptorengineering.com/raptor-engineering-public/chromium/openpower-patches/-/archive/${PPC64_HASH}/openpower-patches-${PPC64_HASH}.tar.bz2 -> chromium-openpower-${PPC64_HASH:0:10}.tar.bz2
+ )
+"
+
+# Gentoo tarball:
+# https://chromium-tarballs.distfiles.gentoo.org/chromium-${PV/_*}.tar.xz -> chromium-${PV/_*}-gentoo.tar.xz
+
+# chromium-linux-tarballs
+# https://github.com/chromium-linux-tarballs/chromium-tarballs/releases/download/${PV/_*}/chromium-${PV/_*}-linux.tar.xz
+
+# Official tarball:
+# https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${PV/_*}${LITE_TARBALL:+-lite}.tar.xz
+
+# https://gitweb.gentoo.org/proj/chromium-tools.git/tree/get-chromium-licences.py @ 145.0.7632.76
+LICENSE="Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD BSD-2 Base64 Boost-1.0 CC-BY-3.0 CC-BY-4.0 Clear-BSD FFT2D FTL"
+LICENSE+=" IJG ISC LGPL-2 LGPL-2.1 MIT MPL-1.1 MPL-2.0 Ms-PL PSF-2 SGI-B-2.0 SSLeay SunSoft Unicode-3.0"
+LICENSE+=" Unicode-DFS-2015 Unlicense UoI-NCSA ZLIB libtiff openssl"
+LICENSE+=" cromite? ( GPL-3 )"
+
+SLOT="stable"
+KEYWORDS="amd64 ~arm64 ~ppc64 ~x86"
+
+IUSE_SYSTEM_LIBS="abseil-cpp av1 brotli crc32c double-conversion ffmpeg +harfbuzz icu jsoncpp +libusb libvpx +openh264 openjpeg re2 snappy woff2 +zstd"
+IUSE="+X bindist bluetooth bundled-toolchain cfi convert-dict cups custom-cflags debug ffmpeg-chromium enable-driver gtk4 hangouts headless kerberos +libcxx nvidia +official optimize-thinlto optimize-webui override-data-dir pax-kernel pgo"
+IUSE+=" +proprietary-codecs pulseaudio qt6 screencast selinux test thinlto cromite vaapi wayland widevine cpu_flags_ppc_vsx3"
+RESTRICT="
+ !bindist? ( bindist )
+ !test? ( test )
+ arm64? ( test )
+ !system-ffmpeg? ( proprietary-codecs? ( bindist ) )
+ !system-openh264? ( bindist )
+ cromite? ( bindist )"
+
+REQUIRED_USE="
+ !headless? ( || ( X wayland ) )
+ screencast? ( wayland )
+ ffmpeg-chromium? ( bindist proprietary-codecs )
+ optimize-thinlto? ( thinlto )
+ cfi? ( thinlto )
+ x86? ( !thinlto !widevine )
+ debug? ( !official )
+ vaapi? ( !system-av1 !system-libvpx )
+"
+
+UGC_PV="${PV/_p/-}"
+UGC_PF="${PN}-${UGC_PV}"
+UGC_URL="https://github.com/ungoogled-software/${PN}/archive/"
+
+if [ -z "$UGC_COMMIT_ID" ]; then
+ UGC_URL="${UGC_URL}${UGC_PV}.tar.gz -> ${UGC_PF}.tar.gz"
+ UGC_WD="${WORKDIR}/${UGC_PF}"
+else
+ UGC_URL="${UGC_URL}${UGC_COMMIT_ID}.tar.gz -> ${PN}-${UGC_COMMIT_ID}.tar.gz"
+ UGC_WD="${WORKDIR}/ungoogled-chromium-${UGC_COMMIT_ID}"
+fi
+
+SRC_URI+="${UGC_URL}
+"
+
+if [ ! -z "${UGC_PR_COMMITS[*]}" ]; then
+ for i in "${UGC_PR_COMMITS[@]}"; do
+ SRC_URI+="https://github.com/ungoogled-software/${PN}/commit/$i.patch?full_index=true -> ${PN}-$i.patch
+ "
+ done
+fi
+
+if [ ! -z "${CHROMIUM_COMMITS[*]}" ]; then
+ # for i in "${CHROMIUM_COMMITS[@]}"; do
+ for i in "${!CHROMIUM_COMMITS[@]}"; do
+ if [[ ${CHROMIUM_COMMITS[$i]} =~ webrtc ]]; then
+ #TODO: is it safe to use this mirror?
+ SRC_URI+="https://github.com/webrtc-mirror/webrtc/commit/${i/-}.patch?full_index=true -> webrtc-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ angle ]]; then
+ SRC_URI+="https://github.com/google/angle/commit/${i/-}.patch?full_index=true -> angle-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ quiche ]]; then
+ SRC_URI+="https://github.com/google/quiche/commit/${i/-}.patch?full_index=true -> quiche-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ dawn ]]; then
+ SRC_URI+="https://github.com/google/dawn/commit/${i/-}.patch?full_index=true -> dawn-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ perfetto ]]; then
+ SRC_URI+="https://github.com/google/perfetto/commit/${i/-}.patch?full_index=true -> perfetto-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ink ]]; then
+ SRC_URI+="https://github.com/google/ink/commit/${i/-}.patch?full_index=true -> ink-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ vulkan-utility-libraries ]]; then
+ SRC_URI+="https://github.com/KhronosGroup/Vulkan-Utility-Libraries/commit/${i/-}.patch?full_index=true -> vulkan-utility-libraries-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ruy ]]; then
+ SRC_URI+="https://github.com/google/ruy/commit/${i/-}.patch?full_index=true -> ruy-${i/-}.patch
+ "
+ else
+ SRC_URI+="https://github.com/chromium/chromium/commit/${i/-}.patch?full_index=true -> chromium-${i/-}.patch
+ "
+ fi
+ done
+fi
+
+SRC_URI+="cromite? ( https://github.com/uazo/cromite/archive/${CROMITE_COMMIT_ID}.tar.gz -> cromite-${CROMITE_COMMIT_ID}.tar.gz )
+"
+
+for i in ${IUSE_SYSTEM_LIBS}; do
+ [[ $i =~ ^(\+)?(.*)$ ]]
+ IUSE+=" ${BASH_REMATCH[1]}system-${BASH_REMATCH[2]}"
+done
+
+COMMON_X_DEPEND="
+ x11-libs/libXcomposite:=
+ x11-libs/libXcursor:=
+ x11-libs/libXdamage:=
+ x11-libs/libXfixes:=
+ >=x11-libs/libXi-1.6.0:=
+ x11-libs/libXrandr:=
+ x11-libs/libXrender:=
+ x11-libs/libXtst:=
+ x11-libs/libxshmfence:=
+"
+
+# sys-libs/zlib: https://bugs.gentoo.org/930365; -ng is not compatible.
+# We _could_ use the bundled minizip, but that's against policy.
+COMMON_SNAPSHOT_DEPEND="
+ system-icu? ( >=dev-libs/icu-78:= )
+ system-abseil-cpp? ( >=dev-cpp/abseil-cpp-20260107.0 )
+ system-brotli? ( >=app-arch/brotli-9999 )
+ system-crc32c? ( dev-libs/crc32c )
+ system-double-conversion? ( dev-libs/double-conversion )
+ system-woff2? ( media-libs/woff2 )
+ system-snappy? ( app-arch/snappy )
+ system-jsoncpp? ( dev-libs/jsoncpp )
+ system-openjpeg? ( media-libs/openjpeg:2= )
+ system-re2? ( >=dev-libs/re2-0.2019.08.01:= )
+ system-libvpx? ( >=media-libs/libvpx-1.13.0:=[postproc] )
+ system-libusb? ( virtual/libusb:1 )
+ cromite? ( dev-util/patchutils )
+ >=dev-libs/libxml2-2.12.4:=[icu]
+ dev-libs/nspr:=
+ >=dev-libs/nss-3.26:=
+ dev-libs/libxslt:=
+ media-libs/fontconfig:=
+ >=media-libs/freetype-2.11.0-r1:=
+ system-harfbuzz? ( >=media-libs/harfbuzz-3:0=[icu(-)] )
+ media-libs/libjpeg-turbo:=
+ media-libs/libpng:=
+ system-zstd? ( >=app-arch/zstd-1.5.5:= )
+ >=media-libs/libwebp-0.4.0:=
+ media-libs/mesa:=[gbm(+)]
+ >=media-libs/openh264-2.6.0:=
+ system-av1? (
+ >=media-libs/dav1d-1.0.0:=
+ >=media-libs/libaom-3.7.0:=
+ )
+ sys-libs/zlib:=
+ !headless? (
+ dev-libs/glib:2
+ >=media-libs/alsa-lib-1.0.19:=
+ media-video/pipewire:=
+ pulseaudio? (
+ || (
+ media-libs/libpulse
+ >=media-sound/apulse-0.1.9
+ )
+ )
+ sys-apps/pciutils:=
+ kerberos? ( virtual/krb5 )
+ vaapi? ( >=media-libs/libva-2.7:=[X?,wayland?] )
+ X? (
+ x11-base/xorg-proto:=
+ x11-libs/libX11:=
+ x11-libs/libxcb:=
+ x11-libs/libXext:=
+ )
+ x11-libs/libxkbcommon:=
+ wayland? (
+ screencast? ( media-video/pipewire:= )
+ dev-libs/libffi:=
+ dev-libs/wayland:=
+ screencast? (
+ media-video/pipewire:=
+ || (
+ sys-apps/xdg-desktop-portal-gnome
+ sys-apps/xdg-desktop-portal-gtk
+ kde-plasma/xdg-desktop-portal-kde
+ gui-libs/xdg-desktop-portal-lxqt
+ gui-libs/xdg-desktop-portal-wlr
+ )
+ )
+ )
+ )
+"
+
+COMMON_DEPEND="
+ ${COMMON_SNAPSHOT_DEPEND}
+ app-arch/bzip2:=
+ dev-libs/expat:=
+ system-ffmpeg? (
+ >=media-video/ffmpeg-6.1:=
+ >=media-libs/opus-1.3.1:=
+ )
+ net-misc/curl[ssl]
+ sys-apps/dbus:=
+ media-libs/flac:=
+ sys-libs/zlib:=[minizip]
+ !headless? (
+ >=app-accessibility/at-spi2-core-2.46.0:2
+ media-libs/mesa:=[X?,wayland?]
+ virtual/udev
+ x11-libs/cairo:=
+ x11-libs/gdk-pixbuf:2
+ x11-libs/pango:=
+ cups? ( >=net-print/cups-1.3.11:= )
+ qt6? ( dev-qt/qtbase:6[gui,widgets] )
+ X? ( ${COMMON_X_DEPEND} )
+ )
+"
+RDEPEND="${COMMON_DEPEND}
+ !www-client/ungoogled-chromium:0
+ >=www-client/chromium-common-2
+ !headless? (
+ || (
+ x11-libs/gtk+:3[X?,wayland?]
+ gui-libs/gtk:4[X?,wayland?]
+ )
+ qt6? ( dev-qt/qtbase:6[X?,wayland?] )
+ )
+ virtual/ttf-fonts
+ selinux? ( sec-policy/selinux-chromium )
+ bindist? (
+ ffmpeg-chromium? ( media-video/ffmpeg-chromium:${PV%%\.*} )
+ )
+ !override-data-dir? (
+ !www-client/chromium:${SLOT}
+ !www-client/cromite:${SLOT}[-override-data-dir]
+ )
+"
+# For M149+ pipewire is a mandatory build-time dependency, but it's optional at runtime for most configurations.
+DEPEND="${COMMON_DEPEND}
+ !headless? (
+ media-video/pipewire
+ gtk4? ( gui-libs/gtk:4[X?,wayland?] )
+ !gtk4? ( x11-libs/gtk+:3[X?,wayland?] )
+ )
+"
+
+ # pgo? ( >=llvm-core/clang-22.0.0_pre20260106 >=llvm-core/lld-22.0.0_pre20260106 )
+BDEPEND="
+ ${COMMON_SNAPSHOT_DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ >=app-arch/gzip-1.7
+ !headless? (
+ qt6? ( dev-qt/qtbase:6 )
+ )
+ !bundled-toolchain? ( $(llvm_gen_dep '
+ llvm-core/clang:${LLVM_SLOT}
+ llvm-core/llvm:${LLVM_SLOT}
+ cfi? ( llvm-runtimes/clang-runtime:${LLVM_SLOT}[sanitize] )
+ official? (
+ !ppc64? ( llvm-runtimes/compiler-rt-sanitizers:${LLVM_SLOT}[cfi] )
+ ) ')
+ || (
+ $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}')
+ >=sys-devel/mold-2.41.0
+ )
+ ${RUST_DEPEND}
+ )
+ >=dev-util/bindgen-0.72.1
+ >=dev-build/gn-${GN_MIN_VER}
+ app-alternatives/ninja
+ dev-lang/perl
+ >=dev-util/gperf-3.2
+ dev-util/esbuild:${ESBUILD_VER}
+ dev-vcs/git
+ >=net-libs/nodejs-${NODE_VER}[inspector]
+ sys-apps/hwdata
+ >=sys-devel/bison-2.4.3
+ sys-devel/flex
+ virtual/pkgconfig
+ x11-misc/xdg-utils
+"
+
+if ! has chromium_pkg_die ${EBUILD_DEATH_HOOKS}; then
+ EBUILD_DEATH_HOOKS+=" chromium_pkg_die";
+fi
+
+DISABLE_AUTOFORMATTING="yes"
+DOC_CONTENTS="
+Some web pages may require additional fonts to display properly.
+Try installing some of the following packages if some characters
+are not displayed properly:
+- media-fonts/arphicfonts
+- media-fonts/droid
+- media-fonts/ipamonafont
+- media-fonts/noto
+- media-fonts/ja-ipafonts
+- media-fonts/takao-fonts
+- media-fonts/wqy-microhei
+- media-fonts/wqy-zenhei
+
+To fix broken icons on the Downloads page, you should install an icon
+theme that covers the appropriate MIME types, and configure this as your
+GTK+ icon theme.
+
+For native file dialogs in KDE, install kde-apps/kdialog.
+
+To make password storage work with your desktop environment you may
+have install one of the supported credentials management applications:
+- app-crypt/libsecret (GNOME)
+- kde-frameworks/kwallet (KDE)
+If you have one of above packages installed, but don't want to use
+them in Chromium, then add --password-store=basic to CHROMIUM_FLAGS
+in /etc/chromium/default.
+"
+
+S="${WORKDIR}/chromium-${PV/_*}"
+
+python_check_deps() {
+ python_has_version "dev-python/setuptools[${PYTHON_USEDEP}]"
+}
+
+pre_build_checks() {
+ # Check build requirements: bugs #471810, #541816, #914220
+ # We're going to start doing maths here on the size of an unpacked source tarball,
+ # this should make updates easier as chromium continues to balloon in size.
+ # xz -l /var/cache/distfiles/chromium-${PV}*.tar.xz
+ local base_disk=9 # Round up
+ use test && base_disk=$((base_disk + 5))
+ local extra_disk=1 # Always include a little extra space
+ local memory=4
+ tc-is-cross-compiler && extra_disk=$((extra_disk * 2))
+ if tc-is-lto || use pgo; then
+ memory=$((memory * 2 + 1))
+ tc-is-cross-compiler && extra_disk=$((extra_disk * 2)) # Double the requirements
+ use pgo && extra_disk=$((extra_disk + 4))
+ fi
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ if use custom-cflags; then
+ extra_disk=$((extra_disk + 5))
+ fi
+ memory=$((memory * 2))
+ fi
+ local CHECKREQS_MEMORY="${memory}G"
+ local CHECKREQS_DISK_BUILD="$((base_disk + extra_disk))G"
+ check-reqs_${EBUILD_PHASE_FUNC}
+}
+
+pkg_pretend() {
+ if [[ ${MERGE_TYPE} != binary ]]; then
+ # The pre_build_checks are all about compilation resources, no need to run it for a binpkg
+ pre_build_checks
+ fi
+
+ if use headless; then
+ local headless_unused_flags=("cups" "kerberos" "pulseaudio" "qt6" "vaapi" "wayland")
+ for myiuse in ${headless_unused_flags[@]}; do
+ use ${myiuse} && ewarn "Ignoring USE=${myiuse}, USE=headless is set."
+ done
+ fi
+
+ if ! use bindist && use ffmpeg-chromium; then
+ ewarn "Ignoring USE=ffmpeg-chromium, USE=bindist is not set."
+ fi
+ if use libcxx; then
+ ewarn
+ ewarn "Building with libcxx, please be aware that system-*"
+ ewarn "and some other c++ dependencies need to be compiled"
+ ewarn "with the same c++ library as ungoogled-chromium itself"
+ ewarn "dev-libs/jsoncpp is most problematic, see #58 #49 #119 for details"
+ ewarn "Simplest solution would be to disable corresponding system-* flags"
+ ewarn
+ fi
+ if use cfi; then
+ ewarn
+ ewarn "Building with cfi is only possible if building with -stdlib=libc++"
+ ewarn "Make sure all dependencies are also built this way, see #40"
+ ewarn
+ fi
+ if use cromite; then
+ ewarn
+ ewarn "Cromite patches are very experimental and unstable"
+ ewarn "Please consider testing them and giving feedback upstream:"
+ ewarn "https://github.com/uazo/cromite/issues"
+ ewarn "Not all patches are applied, let me know if others should be considered too"
+ ewarn
+ fi
+}
+
+pkg_setup() {
+ if [[ ${MERGE_TYPE} != binary ]]; then
+ # The pre_build_checks are all about compilation resources, no need to run it for a binpkg
+ pre_build_checks
+
+ # We haven't massaged any CFLAGS yet, so we want to do this before we force CC/CXX to prevent warnings.
+ local want_lto="false"
+ tc-is-lto && want_lto="true"
+
+ # The linux:unbundle toolchain in GN grabs CC, CXX, CPP (etc) from the environment
+ # We'll set these to clang here then use llvm-utils functions to very explicitly set these
+ # to a sane value.
+ # This is effectively the 'force-clang' path if GCC support is re-added.
+ if use !bundled-toolchain; then
+ llvm-r1_pkg_setup
+ rust_pkg_setup
+
+ # Forcing clang; respect llvm_slot_x to enable selection of impl via LLVM_COMPAT
+ AR=llvm-ar
+ CPP="${CHOST}-clang++-${LLVM_SLOT} -E"
+ NM=llvm-nm
+ CC="${CHOST}-clang-${LLVM_SLOT}"
+ CXX="${CHOST}-clang++-${LLVM_SLOT}"
+ fi
+
+ # LTO in Chromium means LLVM ThinLTO, if GCC support is re-added
+ # We'll need to handle that here too.
+ use_lto="false"
+ local lto_usable="true"
+ if [[ "$want_lto" == "true" ]]; then
+ if use arm64 && [[ "${LLVM_SLOT}" -lt 22 ]]; then
+ einfo "LTO is broken with LLVM 21 on arm64, ignoring CFLAGS."
+ lto_usable="false"
+ else
+ use_lto="true"
+ fi
+ # We can rely on GN to do this for us; without this builds
+ # take significantly longer with LTO enabled.
+ filter-lto
+ fi
+
+ if [[ "$use_lto" == "false" ]] && use official && [[ "$lto_usable" == "true" ]]; then
+ einfo "USE=official selected and LTO not detected."
+ einfo "It is _highly_ recommended that LTO be enabled for performance reasons"
+ einfo "and to be consistent with the upstream \"official\" build optimisations."
+ fi
+
+ if [[ "$use_lto" == "false" ]] && use test; then
+ die "Tests require CFI which requires LTO"
+ fi
+
+ export use_lto
+
+ if tc-is-cross-compiler; then
+ use pgo && die "The pgo USE flag cannot be used when cross-compiling"
+ CPP="${CBUILD}-clang++-${LLVM_SLOT} -E"
+ fi
+
+ # Sanity checks for development convenience
+ if ver_test $(gn --version || die) -lt ${GN_MIN_VER}; then
+ die "dev-build/gn >= ${GN_MIN_VER} is required to build this Chromium"
+ fi
+
+ # Sometimes, when adding a new LLVM slot, devs (me) forget to install an appropriate lld.
+ if tc-ld-is-lld; then
+ local lld_ver=$(ld.lld --version | awk '{split($2,a,"."); print a[1]}' || die "Failed to check lld version")
+ if [[ ${lld_ver} -lt ${LLVM_SLOT} ]]; then
+ die "Your lld version (${lld_ver}) is too old for the selected LLVM slot (${LLVM_SLOT}). Please install a newer lld or select an older LLVM slot."
+ fi
+ fi
+ fi
+
+ chromium_suid_sandbox_check_kernel_config
+}
+
+src_unpack() {
+ # # Here be dragons!
+ # local XCLD="--exclude=chromium-${PV/_*}/third_party/instrumented_libs \
+ # --exclude=chromium-${PV/_*}/third_party/llvm \
+ # --exclude=chromium-${PV/_*}/third_party/llvm-build \
+ # --exclude=chromium-${PV/_*}/third_party/node/linux \
+ # --exclude=chromium-${PV/_*}/third_party/rust-src \
+ # --exclude=chromium-${PV/_*}/third_party/rust-toolchain \
+ # --exclude=chromium-${PV/_*}/build/linux/debian_bullseye_i386-sysroot \
+ # --exclude=chromium-${PV/_*}/build/linux/debian_bullseye_amd64-sysroot \
+ # --exclude=chromium-${PV/_*}/third_party/angle/third_party/VK-GL-CTS \
+ # "
+
+ # if ! use libcxx ; then
+ # XCLD+=" --exclude=chromium-${PV/_*}/third_party/libc++"
+ # fi
+
+ # if ! use pgo ; then
+ # XCLD+=" --exclude=chromium-${PV/_*}/chrome/build/pgo_profiles"
+ # fi
+
+ # einfo "Unpacking chromium-${PV/_*}.tar.xz to ${WORKDIR}"
+ # # Gentoo tarball:
+ # # tar ${XCLD} -xf "${DISTDIR}/chromium-${PV/_*}-gentoo.tar.xz" -C "${WORKDIR}" || die
+ # tar ${XCLD} -xf "${DISTDIR}/chromium-${PV/_*}${LITE_TARBALL:+-lite}.tar.xz" -C "${WORKDIR}" || die
+
+ # unpack ${UGC_URL#*->}
+ # # unpack chromium-patches-${PATCH_V}.tar.bz2
+ # # Warned you!
+
+ unpack chromium-${PV/_*}-linux.tar.xz
+ unpack chromium-patches-${PATCH_V}.tar.bz2
+ # These should only be required when we're not using the official toolchain
+ if use !bundled-toolchain; then
+ unpack chromium-patches-copium-${COPIUM_COMMIT:0:10}.tar.gz
+ fi
+
+ if use test; then
+ # This just contains a bunch of font files that need to be unpacked (or moved) to the correct location.
+ local testfonts_dir="${WORKDIR}/chromium-${PV/_*}/third_party/test_fonts/test_fonts"
+ local testfonts_tar="${DISTDIR}/chromium-testfonts-${TEST_FONT:0:10}.tar.gz"
+ einfo "Unpacking test fonts ..."
+ tar xf "${testfonts_tar}" -C "${testfonts_dir}" || die "Failed to unpack testfonts"
+ fi
+
+ # We need to manually unpack this since M126 else we'd unpack one toolchain over the other.
+ # Since we're doing that anyway let's unpack to sensible locations to make symlink creation easier.
+ if use bundled-toolchain; then
+ einfo "Unpacking bundled Clang ..."
+ mkdir -p "${WORKDIR}"/clang || die "Failed to create clang directory"
+ tar xf "${DISTDIR}/chromium-clang-${BUNDLED_CLANG_VER}.tar.xz" -C "${WORKDIR}/clang" || die "Failed to unpack Clang"
+ einfo "Unpacking bundled Rust ..."
+ local rust_dir="${WORKDIR}/rust-toolchain"
+ mkdir -p "${rust_dir}" || die "Failed to create rust toolchain directory"
+ tar xf "${DISTDIR}/chromium-rust-toolchain-${RUST_SHORT_HASH}-${BUNDLED_CLANG_VER%-*}.tar.xz" -C "${rust_dir}" ||
+ die "Failed to unpack Rust"
+ fi
+
+ if use ppc64; then
+ unpack chromium-openpower-${PPC64_HASH:0:10}.tar.bz2
+ fi
+
+ # This is a dirty hack, but we need rollup to build successfully and it's proving to be challenging
+ # to build locally due to deps
+ unpack rollup-wasm-node-${ROLLUP_VER}.tgz
+
+ if use cromite; then
+ unpack cromite-${CROMITE_COMMIT_ID}.tar.gz
+ fi
+
+ unpack ${UGC_URL#*->}
+}
+
+remove_compiler_builtins() {
+ # We can't use the bundled compiler builtins with the system toolchain
+ # We used to `grep` then `sed`, but it was indirect. Combining the two into a single
+ # `awk` command is more efficient and lets us document the logic more clearly.
+
+ local pattern=' configs += [ "//build/config/clang:compiler_builtins" ]'
+ local target='build/config/compiler/BUILD.gn'
+
+ local tmpfile
+ tmpfile=$(mktemp) || die "Failed to create temporary file."
+
+ if awk -v pat="${pattern}" '
+ BEGIN {
+ match_found = 0
+ }
+
+ # If the delete countdown is active, decrement it and skip to the next line.
+ d > 0 { d--; next }
+
+ # If the current line matches the pattern...
+ $0 == pat {
+ match_found = 1 # ...set our flag to true.
+ d = 2 # Set delete counter for this line and the next two.
+ prev = "" # Clear the buffered previous line so it is not printed.
+ next
+ }
+
+ # For any other line, print the buffered previous line.
+ NR > 1 { print prev }
+
+ # Buffer the current line to be printed on the next cycle.
+ { prev = $0 }
+
+ END {
+ # Print the last line if it was not part of a deleted block.
+ if (d == 0) { print prev }
+
+ # If the pattern was never found, exit with a failure code.
+ if (match_found == 0) {
+ exit 1
+ }
+ }
+ ' "${target}" > "${tmpfile}"; then
+ # AWK SUCCEEDED (exit code 0): The pattern was found and edited.
+ # This is to avoid gawk's `-i inplace` option which users complain about.
+ mv "${tmpfile}" "${target}"
+ else
+ # AWK FAILED (exit code 1): The pattern was not found.
+ rm -f "${tmpfile}"
+ die "Awk patch failed: Pattern not found in ${target}."
+ fi
+}
+
+src_prepare() {
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ # We'll fill this in as we go. Patches go in chromium-patches.
+ local PATCHES=()
+
+ rm "${WORKDIR}/chromium-patches-${PATCH_V}/common/cr131-unbundle-icu-target.patch"
+ if ver_test "${RUST_SLOT}" -ge "1.95.0"; then
+ rm "${WORKDIR}/chromium-patches-${PATCH_V}/rust/cr146-fix-botched-bytemuck-roll.patch"
+ sed -i '/SupportedLaneCount/d' third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/zeroable.rs || die
+ sed -i '/SupportedLaneCount/d' third_party/rust/chromium_crates_io/vendor/bytemuck-v1/src/pod.rs || die
+ fi
+
+ #cp -f ${WORKDIR}/chromium-patches-${PATCH_V}/*-compiler.patch "${T}/compiler.patch"
+ ##cp -f ${FILESDIR}/chromium-147-compiler.patch "${T}/compiler.patch"
+ #if ! use custom-cflags; then #See #25 #92
+ # sed -i '/default_stack_frames/Q' "${T}/compiler.patch" || die
+ #fi
+
+ PATCHES+=( "${WORKDIR}/chromium-patches-${PATCH_V}/common/" )
+ PATCHES+=( "${FILESDIR}/restore-x86-r4.patch" )
+
+ # https://issues.chromium.org/issues/442698344
+ # Unreleased fontconfig changed magic numbers and google have rolled to this version
+ if has_version "<=media-libs/fontconfig-2.17.1"; then
+ PATCHES+=( "${FILESDIR}/chromium-142-work-with-old-fontconfig.patch" )
+ fi
+
+ if use bundled-toolchain; then
+ # We need to symlink the toolchain into the expected location
+ einfo "Symlinking Clang toolchain to expected location ..."
+ mkdir -p third_party/llvm-build/ || die "Failed to create llvm-build directory"
+ # the 'Chromium Linux Tarballs' seem to already have 'Release+Asserts/{lib,bin}'; not sure if this is an
+ # upstream change - we're using the same scripts to build, theoretically. We'll still attempt to create
+ # llvm-build, but we'll rm Release+Asserts and symlink directly.
+ if [[ -d third_party/llvm-build/Release+Asserts ]]; then
+ rm -r third_party/llvm-build/Release+Asserts || die "Failed to remove third_party/llvm-build/Release+Asserts"
+ fi
+ ln -s "${WORKDIR}"/clang third_party/llvm-build/Release+Asserts || die "Failed to bundle Clang"
+ einfo "Symlinking Rust toolchain to expected location ..."
+ # As above, so below
+ if [[ -d third_party/rust-toolchain ]]; then
+ rm -r third_party/rust-toolchain || die "Failed to remove third_party/rust-toolchain"
+ fi
+ ln -s "${WORKDIR}"/rust-toolchain third_party/rust-toolchain || die "Failed to bundle rust"
+ cp "${WORKDIR}"/rust-toolchain/VERSION \
+ "${WORKDIR}"/rust-toolchain/INSTALLED_VERSION || die "Failed to set rust version"
+ else
+ # We don't need our toolchain patches if we're using the official toolchain
+
+ # Copium patches go here.
+ PATCHES+=(
+ "${WORKDIR}/copium/cr143-libsync-__BEGIN_DECLS.patch"
+ "${WORKDIR}/copium/cr149-unbundle-minizip-undo-unicode.patch"
+ )
+
+ # Automate conditional application of chromium-patches
+ # The directory structure is expected to be something like:
+ # chromium-patches-145/
+ # ├── toolchain/
+ # │ ├── cr123-foo.patch
+ # │ └── cr135-bar.patch
+ # ├── llvm/
+ # │ ├── cr144-baz.patch
+ # │ └── lt-23/
+ # │ └── cr145-bleeding-edge-llvm-feature.patch
+ # Where `lt-23` means "apply this patch if the LLVM version is less than 23".
+ # Only categories in `slot_map` will be checked for version constraints.
+ shopt -s nullglob
+ local -A slot_map=( [llvm]="${LLVM_SLOT}" [rust]="${RUST_SLOT}" )
+
+ for category in "${WORKDIR}/chromium-patches-${PATCH_V}"/*/; do
+ local category_name="${category%/}"
+ category_name="${category_name##*/}"
+
+ # Skip arch-specific categories
+ if [[ "${category_name}" == "ppc64le" ]]; then
+ use ppc64 || continue
+ fi
+
+ # We applied common patches above, no need to apply them again here
+ [[ "${category_name}" == "common" ]] && continue
+
+ # Unconditional patches for this category
+ local category_patches=( "${category}"*.patch )
+ [[ ${#category_patches[@]} -gt 0 ]] && PATCHES+=( "${category}" )
+
+ # Version-constrained subdirectories (e.g., llvm/lt-23/)
+ for constraint_dir in "${category}"*/; do
+ local dir_name="${constraint_dir%/}"
+ dir_name="${dir_name##*/}"
+ if [[ "${dir_name}" =~ ^lt-(.*)$ && -v slot_map[${category_name}] ]]; then
+ ver_test "${slot_map[${category_name}]}" -lt "${BASH_REMATCH[1]}" &&
+ PATCHES+=( "${constraint_dir}" )
+ fi
+ done
+ done
+
+ shopt -u nullglob
+
+ # Strictly speaking this doesn't need to be gated (no bundled toolchain for ppc64); it keeps the logic together
+ if use ppc64; then
+ local patchset_dir="${WORKDIR}/openpower-patches-${PPC64_HASH}/patches"
+ # patch causes build errors on 4K page systems (https://bugs.gentoo.org/show_bug.cgi?id=940304)
+ local page_size_patch="ppc64le/third_party/use-sysconf-page-size-on-ppc64.patch"
+ local isa_3_patch="ppc64le/core/baseline-isa-3-0.patch"
+ # Apply the OpenPOWER patches (check for page size and isa 3.0)
+ openpower_patches=( $(grep -E "^ppc64le|^upstream" "${patchset_dir}/series" | grep -v "${page_size_patch}" |
+ grep -v "${isa_3_patch}" || die) )
+ for patch in "${openpower_patches[@]}"; do
+ PATCHES+=( "${patchset_dir}/${patch}" )
+ done
+ if [[ $(getconf PAGESIZE) == 65536 ]]; then
+ PATCHES+=( "${patchset_dir}/${page_size_patch}" )
+ fi
+ # We use vsx3 as a proxy for 'want isa3.0' (POWER9)
+ if use cpu_flags_ppc_vsx3 ; then
+ PATCHES+=( "${patchset_dir}/${isa_3_patch}" )
+ fi
+ fi
+
+ remove_compiler_builtins
+
+ # We can't rely on the eselect'd Rust to actually include rustfmt, so we'll point to the selected slot specifically.
+ local suffix=""
+ if [[ "${RUST_TYPE}" == "binary" ]]; then
+ suffix="-bin-${RUST_SLOT}"
+ else
+ suffix="-${RUST_SLOT}"
+ fi
+ sed -i "s|/bin/rustfmt|/bin/rustfmt${suffix}|g" build/rust/rust_bindgen_generator.gni ||
+ die "Failed to update rustfmt path"
+
+ fi
+
+ # Do this before we apply patches since (e.g.) ppc64 needs to patch rollup and it's easier in ${S}
+ einfo "Moving rollup wasm-node package into place ..."
+ mkdir -p third_party/devtools-frontend/src/node_modules/@rollup/wasm-node ||
+ die "Failed to create node_modules/@rollup/wasm-node"
+ mv "${WORKDIR}"/package/* third_party/devtools-frontend/src/node_modules/@rollup/wasm-node ||
+ die "Failed to move rollup package"
+
+ if [ ! -z "${CHROMIUM_COMMITS[*]}" ]; then
+ # for i in "${CHROMIUM_COMMITS[@]}"; do
+ for i in "${!CHROMIUM_COMMITS[@]}"; do
+ if [[ ${CHROMIUM_COMMITS[$i]} =~ webrtc ]]; then
+ patch_prefix="webrtc"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ angle ]]; then
+ patch_prefix="angle"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ quiche ]]; then
+ patch_prefix="quiche"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ dawn ]]; then
+ patch_prefix="dawn"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ perfetto ]]; then
+ patch_prefix="perfetto"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ink ]]; then
+ patch_prefix="ink"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ vulkan-utility-libraries ]]; then
+ patch_prefix="vulkan-utility-libraries"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ruy ]]; then
+ patch_prefix="ruy"
+ else
+ patch_prefix="chromium"
+ fi
+ pushd "${CHROMIUM_COMMITS[$i]}" > /dev/null || die
+ if [[ $i = -* ]]; then
+ einfo "Reverting ${patch_prefix}-${i/-}.patch"
+ git_wrapper apply -R --exclude="*unittest.cc" --exclude="DEPS" \
+ -p1 < "${DISTDIR}/${patch_prefix}-${i/-}.patch"
+ else
+ einfo "Applying ${patch_prefix}-${i/-}.patch"
+ git_wrapper apply --exclude="*unittest.cc" --exclude="DEPS" \
+ -p1 < "${DISTDIR}/${patch_prefix}-${i/-}.patch"
+ fi
+ popd > /dev/null || die
+ done
+ fi
+
+ if ! use bluetooth ; then
+ PATCHES+=(
+ "${FILESDIR}/disable-bluez-r7.patch"
+ )
+ fi
+
+ if use convert-dict ; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-ucf-dict-utility-r3.patch"
+ )
+ fi
+
+ if ! use libcxx ; then
+ PATCHES+=(
+ "${FILESDIR}/fix-wayland-oncecallback-copy.patch"
+ )
+ fi
+
+ if use system-ffmpeg; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-141-opus-mp3.patch"
+ "${FILESDIR}/chromium-135-hevc.patch"
+ )
+ sed -i "\!AVFMT_FLAG_NOH264PARSE!d" media/filters/ffmpeg_glue.cc || die
+ ewarn "You need to expose \"av_stream_get_first_dts\" in ffmpeg via user patch"
+ fi
+
+ if use system-av1; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-av1.patch"
+ )
+ fi
+
+ if use system-libvpx; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-libvpx.patch"
+ )
+ fi
+
+ if use system-openjpeg ; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-openjpeg-r4.patch"
+ )
+ fi
+
+ # if use x86 ; then
+ # #* Fixes a segfault in transport_security_state_generator
+ # PATCHES+=(
+ # "${FILESDIR}/fix-segfault-x86.patch"
+ # )
+ # fi
+
+ # Testing all patches when NODIE is defined
+ if [ ! -z "${NODIE}" ]; then
+ for i in "${PATCHES[@]}"; do
+ eapply_wrapper "$i"
+ done
+ nonfatal eapply_user
+ else
+ default
+ fi
+
+ if use cromite ; then
+ BR_PA_PATH="${WORKDIR}/cromite-${CROMITE_COMMIT_ID}/build/patches"
+
+ sed -i '/b\/components\/components_strings\.grd/,+10d' "${BR_PA_PATH}/Add-cromite-flags-support.patch" || die
+ sed -i '/b\/chrome\/android\/java\/res\/xml\/privacy_preferences\.xml/,+13d' "${BR_PA_PATH}/Add-cromite-flags-support.patch" || die
+ sed -i '/b\/android_webview\/support_library\/java\/src\/org\/chromium\/support_lib_glue/,+11d' "${BR_PA_PATH}/Client-hints-overrides.patch" || die
+ sed -i '/webapps_strings.grdp" \/>/{s++webapps_strings.grdp" /><part file="cromite_components_strings_grd/placeholder.txt"/>+;h};${x;/./{x;q0};x;q1}' \
+ components/components_strings.grd || die
+
+ sed -i 's/absl::/std::/' "${BR_PA_PATH}/Add-a-proxy-configuration-page.patch" || die
+
+ filterdiff -p1 "${BR_PA_PATH}/JIT-site-settings.patch" --exclude="content/browser/renderer_host/render_process_host_impl.cc" \
+ > "${BR_PA_PATH}/JIT-site-settings.patch1"
+ mv -f "${BR_PA_PATH}/JIT-site-settings.patch1" "${BR_PA_PATH}/JIT-site-settings.patch"
+
+ BROMITE_PATCHES=(
+ "${BR_PA_PATH}/bromite-build-utils.patch"
+ "${BR_PA_PATH}/Battery-API-return-nothing.patch"
+ "${BR_PA_PATH}/Multiple-fingerprinting-mitigations.patch"
+ "${BR_PA_PATH}/Add-flag-to-configure-maximum-connections-per-host.patch"
+ "${BR_PA_PATH}/Add-a-proxy-configuration-page.patch"
+ "${BR_PA_PATH}/Enable-StrictOriginIsolation-and-SitePerProcess.patch"
+ "${BR_PA_PATH}/Disable-requests-for-single-word-Omnibar-searches.patch"
+ "${BR_PA_PATH}/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch"
+ "${BR_PA_PATH}/Client-hints-overrides.patch"
+ "${BR_PA_PATH}/Disable-idle-detection.patch"
+ "${BR_PA_PATH}/Disable-TLS-resumption.patch"
+ "${BR_PA_PATH}/Remove-navigator.connection-info.patch"
+
+ "${BR_PA_PATH}/AudioBuffer-AnalyserNode-fp-mitigations.patch"
+ "${BR_PA_PATH}/Fonts-fingerprinting-mitigation.patch"
+ "${BR_PA_PATH}/Content-settings-infrastructure.patch"
+ "${BR_PA_PATH}/Add-autoplay-site-setting.patch"
+ "${BR_PA_PATH}/Site-setting-for-images.patch"
+ "${BR_PA_PATH}/JIT-site-settings.patch"
+ "${BR_PA_PATH}/Add-webGL-site-setting.patch"
+ "${BR_PA_PATH}/Add-webRTC-site-settings.patch"
+ "${BR_PA_PATH}/Show-site-settings-for-cookies-javascript-and-ads.patch"
+ "${BR_PA_PATH}/Viewport-Protection-flag.patch"
+ "${BR_PA_PATH}/Revert-remove-allowscript-content-setting-secondary-url.patch"
+ "${BR_PA_PATH}/Timezone-customization.patch"
+ "${BR_PA_PATH}/Disable-speechSynthesis-getVoices-API.patch"
+ "${BR_PA_PATH}/Remove-support-for-device-memory-and-cpu-recovery.patch"
+ "${BR_PA_PATH}/Disable-Feeback-Collector.patch"
+ "${BR_PA_PATH}/Disable-remote-altsvc-for-h3-connections.patch"
+ "${BR_PA_PATH}/Add-cromite-flags-support.patch"
+ "${BR_PA_PATH}/Enables-deactivation-of-the-js-debugger-statement.patch"
+ )
+ for i in "${BROMITE_PATCHES[@]}"; do
+ if [[ "$i" =~ "Add-autoplay-site-setting.patch" ]] ||
+ [[ "$i" =~ "JIT-site-settings.patch" ]] ||
+ [[ "$i" =~ "Site-setting-for-images.patch" ]]; then
+ einfo "Git binary patch: ${i##*/}"
+ git_wrapper apply -p1 < "$i"
+ else
+ filter_wrapper "$i" --exclude="chrome/android/*"
+ fi
+ done
+
+ #! conflicting patches
+ sed -i '/browser_features.cc/,+17d' \
+ "${UGC_WD}/patches/extra/ungoogled-chromium/add-flag-to-clear-data-on-exit.patch" || die
+ sed -i 's$} // namespace features$BASE_FEATURE(kClearDataOnExit, "ClearDataOnExit", base::FEATURE_DISABLED_BY_DEFAULT);}$' \
+ chrome/browser/browser_features.cc || die
+ sed -i 's$} // namespace features$BASE_DECLARE_FEATURE(kClearDataOnExit);}$' \
+ chrome/browser/browser_features.h || die
+ sed -i 's$kChromeUIAboutHost,$kChromeUIAboutHost,"ungoogled-first-run",$' \
+ chrome/common/webui_url_constants.cc || die
+ sed -i '/chrome\/common\/webui_url_constants.cc/Q' \
+ "${UGC_WD}/patches/extra/ungoogled-chromium/first-run-page.patch" || die
+
+ #! normalise paths in py
+ sed -i 's$os.path.dirname(include_file)$os.path.abspath(os.path.dirname(include_file))$' \
+ build/bromite/gyp/cpp_bromite_include.py || die
+ fi
+
+ # if [[ ${LLVM_SLOT} == "19" ]]; then
+ # # Upstream now hard depend on a feature that was added in LLVM 20.1, but we don't want to stabilise that yet.
+ # # Do the temp file shuffle in case someone is using something other than `gawk`
+ # {
+ # awk '/config\("clang_warning_suppression"\) \{/ { print $0 " }"; sub(/clang/, "xclang"); print; next }
+ # { print }' build/config/compiler/BUILD.gn > "${T}/build.gn" && \
+ # mv "${T}/build.gn" build/config/compiler/BUILD.gn
+ # } || die "Unable to disable warning suppression"
+ # fi
+
+ ## Not included in -lite tarballs, but we should check for it anyway.
+ #if [[ -f third_party/node/linux/node-linux-x64/bin/node ]]; then
+ # rm third_party/node/linux/node-linux-x64/bin/node || die
+ #else
+ # mkdir -p third_party/node/linux/node-linux-x64/bin || die
+ #fi
+ #ln -s "${EPREFIX}"/usr/bin/node third_party/node/linux/node-linux-x64/bin/node || die
+
+ cp "${FILESDIR}/libusb.gn" build/linux/unbundle || die
+ sed -i '/^REPLACEMENTS.*$/{s++REPLACEMENTS = {"libusb":"third_party/libusb/BUILD.gn",+;h};${x;/./{x;q0};x;q1}' \
+ build/linux/unbundle/replace_gn_files.py || die
+ sed -i '/^.*deps.*third_party\/jsoncpp.*$/{s++public_deps \+= [ "//third_party/jsoncpp" ]+;h};${x;/./{x;q0};x;q1}' \
+ third_party/webrtc/rtc_base/BUILD.gn || die
+
+ if use override-data-dir; then
+ sed -i '/"chromium";/{s++"ungoogled-chromium";+;h};${x;/./{x;q0};x;q1}' \
+ chrome/common/chrome_paths_linux.cc || die
+ fi
+
+ if use system-abseil-cpp; then
+ eapply_wrapper "${FILESDIR}/chromium-147-system-abseil.patch"
+
+ #! SFINAE mangling incompatibility between clang and gcc:
+ #! https://github.com/llvm/llvm-project/issues/85656
+ #! gcc: _ZN4absl12lts_202601074CordC1INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEEOT_
+ #! clang: _ZN4absl12lts_202601074CordC1INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEETnNSt9enable_ifIXsr3std7is_sameIT_S8_EE5valueEiE4typeELi0EEEOSA_
+ #! So, either this:
+ eapply_wrapper "${FILESDIR}/chromium-141-system-abseil-cord.patch"
+ #! or build with -fclang-abi-compat=17
+
+ # cp -f /usr/include/absl/base/options.h third_party/abseil-cpp/absl/base/options.h
+ # sed -i '/^#define ABSL_OPTION_USE_STD_ORDERING.*$/{s++#define ABSL_OPTION_USE_STD_ORDERING 1+;h};${x;/./{x;q0};x;q1}' \
+ # third_party/abseil-cpp/absl/base/options.h || die
+ fi
+
+ #* Applying UGC PRs here
+ if [ ! -z "${UGC_PR_COMMITS[*]}" ]; then
+ pushd "${UGC_WD}" >/dev/null
+ for i in "${UGC_PR_COMMITS[@]}"; do
+ eapply_wrapper "${DISTDIR}/${PN}-$i.patch"
+ done
+ popd >/dev/null
+ fi
+
+ # From here we adapt ungoogled-chromium's patches to our needs
+ local ugc_pruning_list="${UGC_WD}/pruning.list"
+ local ugc_patch_series="${UGC_WD}/patches/series"
+ local ugc_substitution_list="${UGC_WD}/domain_substitution.list"
+
+ local ugc_unneeded=(
+ # GN bootstrap
+ extra/debian/gn/parallel
+ # following Gentoo's Chromium
+ core/ungoogled-chromium/build-with-wasm-rollup
+ )
+
+ if use cromite ; then
+ einfo "Using fingerprinting patches from Cromite instead"
+ ugc_unneeded+=(
+ extra/bromite/fingerprinting-flags-client-rects-and-measuretext
+ extra/bromite/flag-max-connections-per-host
+ extra/bromite/flag-fingerprinting-canvas-image-data-noise
+ extra/ungoogled-chromium/add-components-ungoogled
+ extra/ungoogled-chromium/remove-pac-size-limit
+ )
+ fi
+
+ # #* Temporary fix
+ # sed -i "\!ios/!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/icu/!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/libjpeg_turbo/!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/snappy/!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/closure_compiler/!d" "${ugc_pruning_list}" || die
+
+ # #* Didn't unpack them at the first place
+ # sed -i "\!build/linux/debian_bullseye_i386-sysroot!d" "${ugc_pruning_list}" || die
+ # sed -i "\!build/linux/debian_bullseye_amd64-sysroot!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/llvm-build!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/node/linux!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/rust-src!d" "${ugc_pruning_list}" || die
+ # sed -i "\!third_party/rust-toolchain!d" "${ugc_pruning_list}" || die
+ # if ! use libcxx ; then
+ # sed -i "\!third_party/libc!d" "${ugc_pruning_list}" || die
+ # fi
+ sed -i "s|debug('files|error('files|" \
+ "${UGC_WD}/utils/prune_binaries.py" || die
+ sed -i "\!third_party/node/linux!d" \
+ "${UGC_WD}/utils/prune_binaries.py" || die
+
+ local ugc_p ugc_dir
+ for p in "${ugc_unneeded[@]}"; do
+ einfo "Removing ${p}.patch"
+ sed -i "\!${p}.patch!d" "${ugc_patch_series}" || die
+ done
+
+ if [ ! -z "${UGC_SKIP_PATCHES}" ]; then
+ for p in ${UGC_SKIP_PATCHES}; do
+ ewarn "Removing ${p}"
+ sed -i "\!${p}!d" "${ugc_patch_series}" || die
+ done
+ fi
+
+ if [ ! -z "${UGC_KEEP_BINARIES}" ]; then
+ for p in ${UGC_KEEP_BINARIES}; do
+ ewarn "Keeping binary ${p}"
+ sed -i "\!${p}!d" "${ugc_pruning_list}" || die
+ done
+ fi
+
+ if [ ! -z "${UGC_SKIP_SUBSTITUTION}" ]; then
+ for p in ${UGC_SKIP_SUBSTITUTION}; do
+ ewarn "No substitutions in ${p}"
+ sed -i "\!${p}!d" "${ugc_substitution_list}" || die
+ done
+ fi
+
+ ebegin "Pruning binaries"
+ "${UGC_WD}/utils/prune_binaries.py" -q . "${UGC_WD}/pruning.list"
+ eend $? || die
+
+ ebegin "Applying ungoogled-chromium patches"
+ "${UGC_WD}/utils/patches.py" -q apply . "${UGC_WD}/patches"
+ eend $? || die
+
+ ebegin "Applying domain substitution"
+ "${UGC_WD}/utils/domain_substitution.py" -q apply -r "${UGC_WD}/domain_regex.list" -f "${UGC_WD}/domain_substitution.list" .
+ eend $? || die
+
+ # Sanity check esbuild version before we start removing files.
+ # We _could_ patch the version check out - in theory esbuild upstream are being super conservative after
+ # arch(AUR) packaged an `esbuild` binary and set ESBUILD_BINARY_PATH=/usr/bin/esbuild, causing much breakage,
+ # but this is fine too and exactly matches what upstream are expecting.
+ # https://github.com/evanw/esbuild/issues/2894
+ local esbuild_js="${S}/third_party/devtools-frontend/src/node_modules/esbuild/lib/main.js"
+ local found
+ found=$(awk -F'"' '/if \(binaryVersion !==/ {print $2}' "${esbuild_js}")
+ if [[ "${found}" != "${ESBUILD_VER}" ]]; then
+ die "esbuild version mismatch: expected ${ESBUILD_VER}, found ${found}"
+ fi
+
+ elog "Removing bundled binaries from source tree ..."
+ # Purge bundled ELF files: These are non-portable and will cause issues if used instead of system versions.
+ # Use `--wasm` to also remove WebAssembly binaries, if desired - they're portable so shouldn't break builds.
+ ${EPYTHON} "${FILESDIR}/bin-finder.py" --elf "${S}" | awk '{print $1}' | xargs rm -f ||
+ die "Failed to remove bundled binaries"
+
+ # And now we restore any that we actually need, from the host system
+ local esbuild_path="${S}/third_party/devtools-frontend/src/third_party/esbuild"
+ local -A restore_list=(
+ ["/usr/bin/esbuild-${ESBUILD_VER}"]="${esbuild_path}/esbuild"
+ ["/usr/bin/gperf"]="${S}/third_party/gperf/cipd/bin/gperf"
+ ["/usr/bin/node"]="${S}/third_party/node/linux/node-linux-x64/bin/node"
+ )
+
+ for src in "${!restore_list[@]}"; do
+ dst="${restore_list[${src}]}"
+ if [[ -f "${src}" ]]; then
+ einfo "Symlinking ${src} ..."
+ # Make sure the parent dir exists; some tarballs don't include (e.g.) node's bindir
+ mkdir -p "$(dirname "${dst}")" || die "Failed to create directory for ${dst}"
+ ln -s "${src}" "${dst}" || die "Failed to symlink ${dst} from ${src}"
+ if [[ ! -L "${dst}" || "$(readlink -f "${dst}")" != "${src}" ]]; then
+ die "Symlink verification failed for ${dst} -> ${src}"
+ fi
+ else
+ die "Expected to find ${src} to restore ${dst}, but it does not exist."
+ fi
+ done
+
+ # adjust python interpreter version
+ sed -i -e "s|\(^script_executable = \).*|\1\"${EPYTHON}\"|g" .gn || die
+
+ # Use the system copy of hwdata's usb.ids; upstream is woefully out of date (2015!)
+ sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \
+ -i services/device/public/cpp/usb/BUILD.gn || die "Failed to set system usb.ids path"
+
+ # remove_bundled_libraries.py walks the source tree and looks for paths containing the substring 'third_party'
+ # whitelist matches use the right-most matching path component, so we need to whitelist from that point down.
+ local keeplibs=(
+ base/third_party/cityhash
+ )
+ use system-double-conversion || keeplibs+=(
+ base/third_party/double_conversion
+ )
+ keeplibs+=(
+ base/third_party/icu
+ base/third_party/nspr
+ base/third_party/superfasthash
+ base/third_party/symbolize
+ base/third_party/xdg_user_dirs
+ buildtools/third_party/libc++
+ buildtools/third_party/libc++abi
+ )
+ use cromite && keeplibs+=(
+ cromite_flags/third_party
+ )
+ keeplibs+=(
+ net/third_party/mozilla_security_manager
+ net/third_party/quic
+ net/third_party/uri_template
+ )
+ use system-abseil-cpp || keeplibs+=(
+ third_party/abseil-cpp
+ )
+ keeplibs+=(
+ third_party/angle
+ third_party/angle/src/common/third_party/xxhash
+ third_party/angle/src/third_party/ceval
+ )
+ use nvidia || keeplibs+=(
+ third_party/angle/src/third_party/libXNVCtrl
+ )
+ keeplibs+=(
+ third_party/angle/src/third_party/volk
+ third_party/anonymous_tokens
+ third_party/apple_apsl
+ third_party/axe-core
+ third_party/bidimapper
+ third_party/blink
+ third_party/boringssl
+ third_party/boringssl/src/third_party/fiat
+ third_party/breakpad
+ third_party/breakpad/breakpad/src/third_party/curl
+ )
+ use system-brotli || keeplibs+=(
+ third_party/brotli
+ )
+ keeplibs+=(
+ third_party/catapult
+ third_party/catapult/common/py_vulcanize/third_party/rcssmin
+ third_party/catapult/common/py_vulcanize/third_party/rjsmin
+ third_party/catapult/third_party/beautifulsoup4-4.9.3
+ third_party/catapult/third_party/html5lib-1.1
+ third_party/catapult/third_party/polymer
+ third_party/catapult/third_party/six
+ third_party/catapult/third_party/typ
+ third_party/catapult/tracing/third_party/d3
+ third_party/catapult/tracing/third_party/gl-matrix
+ third_party/catapult/tracing/third_party/jpeg-js
+ third_party/catapult/tracing/third_party/jszip
+ third_party/catapult/tracing/third_party/mannwhitneyu
+ third_party/catapult/tracing/third_party/oboe
+ third_party/catapult/tracing/third_party/pako
+ third_party/ced
+ third_party/cld_3
+ third_party/closure_compiler
+ )
+ use libcxx && keeplibs+=(
+ third_party/compiler-rt
+ )
+ keeplibs+=(
+ third_party/content_analysis_sdk
+ third_party/cpuinfo
+ third_party/crabbyavif
+ third_party/crashpad
+ third_party/crashpad/crashpad/third_party/lss
+ third_party/crashpad/crashpad/third_party/zlib
+ )
+ use system-crc32c || keeplibs+=(
+ third_party/crc32c
+ )
+ keeplibs+=(
+ third_party/cros_system_api
+ third_party/d3
+ third_party/dawn
+ third_party/dawn/third_party/gn/webgpu-cts
+ third_party/dawn/third_party/OpenGL-Registry
+ third_party/dawn/third_party/renderdoc
+ third_party/dawn/third_party/webgpu-headers
+ third_party/depot_tools
+ third_party/devscripts
+ third_party/devtools-frontend
+ third_party/devtools-frontend/src/front_end/third_party/acorn
+ third_party/devtools-frontend/src/front_end/third_party/additional_readme_paths.json
+ third_party/devtools-frontend/src/front_end/third_party/axe-core
+ third_party/devtools-frontend/src/front_end/third_party/chromium
+ third_party/devtools-frontend/src/front_end/third_party/codemirror
+ third_party/devtools-frontend/src/front_end/third_party/csp_evaluator
+ third_party/devtools-frontend/src/front_end/third_party/diff
+ third_party/devtools-frontend/src/front_end/third_party/i18n
+ third_party/devtools-frontend/src/front_end/third_party/intl-messageformat
+ third_party/devtools-frontend/src/front_end/third_party/json5
+ third_party/devtools-frontend/src/front_end/third_party/legacy-javascript
+ third_party/devtools-frontend/src/front_end/third_party/lighthouse
+ third_party/devtools-frontend/src/front_end/third_party/lit
+ third_party/devtools-frontend/src/front_end/third_party/marked
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/third_party/mitt
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/third_party/parsel-js
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/third_party/rxjs
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/third_party/urlpattern-polyfill
+ third_party/devtools-frontend/src/front_end/third_party/source-map-scopes-codec
+ third_party/devtools-frontend/src/front_end/third_party/third-party-web
+ third_party/devtools-frontend/src/front_end/third_party/vscode.web-custom-data
+ third_party/devtools-frontend/src/front_end/third_party/wasmparser
+ third_party/devtools-frontend/src/front_end/third_party/web-vitals
+ third_party/devtools-frontend/src/third_party
+ third_party/dom_distiller_js
+ third_party/dragonbox
+ third_party/eigen3
+ third_party/emoji-segmenter
+ third_party/farmhash
+ third_party/fast_float
+ third_party/fdlibm
+ third_party/federated_compute/chromium/fcp/confidentialcompute
+ third_party/federated_compute/src/fcp/base
+ third_party/federated_compute/src/fcp/confidentialcompute
+ third_party/federated_compute/src/fcp/protos/confidentialcompute
+ third_party/federated_compute/src/fcp/protos/federatedcompute
+ third_party/fft2d
+ third_party/flatbuffers
+ third_party/fp16
+ third_party/freetype
+ third_party/fusejs
+ third_party/fxdiv
+ third_party/gemmlowp
+ third_party/google_input_tools
+ third_party/google_input_tools/third_party/closure_library
+ third_party/google_input_tools/third_party/closure_library/third_party/closure
+ third_party/googletest
+ third_party/gperf # We symlink system gperf, but this will purge the symlink since we tidy up afterwards.
+ third_party/highway
+ third_party/hunspell
+ third_party/hyphenation-patterns
+ third_party/ink/src/ink/brush
+ third_party/ink/src/ink/color
+ third_party/ink/src/ink/geometry
+ third_party/ink/src/ink/rendering
+ third_party/ink/src/ink/rendering/skia/common_internal
+ third_party/ink/src/ink/rendering/skia/native
+ third_party/ink/src/ink/rendering/skia/native/internal
+ third_party/ink/src/ink/strokes
+ third_party/ink/src/ink/types
+ third_party/inspector_protocol
+ third_party/ipcz
+ third_party/jinja2
+ )
+ use system-jsoncpp || keeplibs+=(
+ third_party/jsoncpp
+ )
+ keeplibs+=(
+ third_party/khronos
+ third_party/lens_server_proto
+ third_party/leveldatabase
+ third_party/libaddressinput
+ )
+ use libcxx && keeplibs+=(
+ third_party/libc++
+ )
+ keeplibs+=(
+ third_party/libdrm
+ third_party/libgav1
+ third_party/libjingle
+ third_party/libpfm4
+ third_party/libphonenumber
+ third_party/libpng
+ third_party/libsecret
+ third_party/libsrtp
+ third_party/libsync
+ third_party/libtess2/libtess2
+ third_party/libtess2/src/Include
+ third_party/libtess2/src/Source
+ third_party/liburlpattern
+ )
+ use system-libusb || keeplibs+=(
+ third_party/libusb
+ )
+ keeplibs+=(
+ third_party/libva_protected_content
+ )
+ use system-libvpx || keeplibs+=(
+ third_party/libvpx
+ third_party/libvpx/source/libvpx/third_party/x86inc
+ )
+ keeplibs+=(
+ third_party/libwebm
+ third_party/libx11
+ third_party/libxcb-keysyms
+ third_party/libxml/chromium
+ third_party/libyuv
+ third_party/libzip
+ third_party/lit
+ )
+ use libcxx && keeplibs+=(
+ third_party/llvm-libc
+ third_party/llvm-libc/src/shared/
+ )
+ keeplibs+=(
+ third_party/lottie
+ third_party/lss
+ third_party/lzma_sdk
+ third_party/mako
+ third_party/markupsafe
+ third_party/material_color_utilities
+ third_party/metrics_proto
+ third_party/minigbm
+ third_party/ml_dtypes
+ third_party/modp_b64
+ third_party/nasm
+ third_party/nearby
+ third_party/neon_2_sse
+ third_party/node
+ third_party/oak/chromium/proto
+ third_party/oak/chromium/proto/attestation
+ third_party/omnibox_proto
+ third_party/one_euro_filter
+ third_party/openscreen
+ third_party/openscreen/src/third_party/
+ third_party/openscreen/src/third_party/tinycbor/src/src
+ third_party/ots
+ third_party/pdfium
+ third_party/pdfium/third_party/agg23
+ third_party/pdfium/third_party/bigint
+ third_party/pdfium/third_party/freetype
+ third_party/pdfium/third_party/lcms
+ )
+ use system-openjpeg || keeplibs+=(
+ third_party/pdfium/third_party/libopenjpeg
+ )
+ keeplibs+=(
+ third_party/pdfium/third_party/libtiff
+ third_party/perfetto
+ third_party/perfetto/protos/third_party/android
+ third_party/perfetto/protos/third_party/chromium
+ third_party/perfetto/protos/third_party/pprof
+ third_party/perfetto/protos/third_party/primes
+ third_party/perfetto/protos/third_party/simpleperf
+ third_party/pffft
+ third_party/ply
+ third_party/polymer
+ third_party/private_membership
+ third_party/private-join-and-compute
+ third_party/protobuf
+ third_party/protobuf/third_party/utf8_range
+ third_party/pthreadpool
+ third_party/puffin
+ third_party/pyjson5
+ third_party/pyyaml
+ third_party/rapidhash
+ third_party/readability
+ third_party/rnnoise
+ third_party/rust
+ third_party/ruy
+ third_party/s2cellid
+ third_party/search_engines_data
+ third_party/securemessage
+ third_party/selenium-atoms
+ third_party/sentencepiece
+ third_party/sentencepiece/src/third_party/darts_clone
+ third_party/shell-encryption
+ third_party/simdutf
+ third_party/simplejson
+ third_party/six
+ third_party/skia
+ third_party/skia/include/third_party/vulkan
+ third_party/smhasher
+ )
+ use system-snappy || keeplibs+=(
+ third_party/snappy
+ )
+ keeplibs+=(
+ third_party/spirv-headers
+ third_party/spirv-tools
+ third_party/sqlite
+ third_party/swiftshader
+ third_party/swiftshader/third_party/astc-encoder
+ third_party/swiftshader/third_party/llvm-subzero
+ third_party/swiftshader/third_party/marl
+ third_party/swiftshader/third_party/SPIRV-Headers/include/spirv
+ third_party/swiftshader/third_party/SPIRV-Tools
+ third_party/swiftshader/third_party/subzero
+ third_party/tensorflow_models
+ third_party/tensorflow-text
+ third_party/tflite
+ third_party/tflite/src/third_party/fft2d
+ third_party/tflite/src/third_party/xla/third_party/tsl
+ third_party/tflite/src/third_party/xla/xla/tsl/framework
+ third_party/tflite/src/third_party/xla/xla/tsl/lib/random
+ third_party/tflite/src/third_party/xla/xla/tsl/platform
+ third_party/tflite/src/third_party/xla/xla/tsl/protobuf
+ third_party/tflite/src/third_party/xla/xla/tsl/util
+ third_party/ukey2
+ third_party/utf
+ third_party/vulkan
+ third_party/wayland
+ third_party/webdriver
+ third_party/webgpu-cts
+ third_party/webrtc
+ third_party/webrtc/common_audio/third_party/ooura
+ third_party/webrtc/common_audio/third_party/spl_sqrt_floor
+ third_party/webrtc/modules/third_party/fft
+ third_party/webrtc/modules/third_party/g711
+ third_party/webrtc/modules/third_party/g722
+ third_party/widevine
+ )
+ use system-woff2 || keeplibs+=(
+ third_party/woff2
+ )
+ keeplibs+=(
+ third_party/wuffs
+ third_party/x11proto
+ third_party/xcbproto
+ third_party/xnnpack
+ third_party/zlib/google
+ third_party/zxcvbn-cpp
+ url/third_party/mozilla
+ v8/third_party/glibc
+ v8/third_party/inspector_protocol
+ v8/third_party/rapidhash-v8
+ v8/third_party/siphash
+ v8/third_party/utf8-decoder
+ v8/third_party/v8
+ v8/third_party/valgrind
+
+ # gyp -> gn leftovers
+ third_party/speech-dispatcher
+ third_party/usb_ids
+ )
+
+ if use test; then
+ keeplibs+=(
+ third_party/breakpad/breakpad/src/processor
+ third_party/fuzztest
+ third_party/google_benchmark/src/include/benchmark
+ third_party/google_benchmark/src/src
+ third_party/test_fonts
+ third_party/test_fonts/fontconfig
+ third_party/test_fonts/test_fonts
+ )
+ fi
+
+ # USE=system-*
+ if ! use system-harfbuzz; then
+ keeplibs+=( third_party/harfbuzz )
+ fi
+
+ if ! use system-ffmpeg; then
+ keeplibs+=( third_party/ffmpeg third_party/opus )
+ fi
+
+ if ! use system-icu; then
+ keeplibs+=( third_party/icu )
+ fi
+
+ if ! use system-zstd; then
+ keeplibs+=( third_party/zstd )
+ fi
+
+ if ! use system-av1; then
+ keeplibs+=(
+ third_party/dav1d
+ third_party/libaom
+ third_party/libaom/source/libaom/third_party/fastfeat
+ third_party/libaom/source/libaom/third_party/vector
+ third_party/libaom/source/libaom/third_party/x86inc
+ )
+ fi
+
+ if use libcxx; then
+ keeplibs+=(
+ third_party/libc++
+ third_party/llvm-libc
+ )
+ fi
+
+ if ! use system-openh264; then
+ keeplibs+=( third_party/openh264 )
+ fi
+
+ if ! use system-re2; then
+ keeplibs+=( third_party/re2 )
+ fi
+
+ # Arch-specific
+ if use arm64 || use ppc64 ; then
+ keeplibs+=( third_party/swiftshader/third_party/llvm-10.0 )
+ fi
+ # we need to generate ppc64 stuff because upstream does not ship it yet
+ # it has to be done before unbundling.
+ if use ppc64; then
+ pushd third_party/libvpx >/dev/null || die
+ mkdir -p source/config/linux/ppc64 || die
+ # requires git and clang, bug #832803
+ # Revert https://chromium.googlesource.com/chromium/src/+/b463d0f40b08b4e896e7f458d89ae58ce2a27165%5E%21/third_party/libvpx/generate_gni.sh
+ # and https://chromium.googlesource.com/chromium/src/+/71ebcbce867dd31da5f8b405a28fcb0de0657d91%5E%21/third_party/libvpx/generate_gni.sh
+ # since we're not in a git repo
+ sed -i -e "s|^update_readme||g; s|clang-format|${EPREFIX}/bin/true|g; /^git -C/d; /git cl/d; /cd \$BASE_DIR\/\$LIBVPX_SRC_DIR/ign format --in-place \$BASE_DIR\/BUILD.gn\ngn format --in-place \$BASE_DIR\/libvpx_srcs.gni" \
+ generate_gni.sh || die
+ ./generate_gni.sh || die
+ popd >/dev/null || die
+
+ pushd third_party/ffmpeg >/dev/null || die
+ cp libavcodec/ppc/h264dsp.c libavcodec/ppc/h264dsp_ppc.c || die
+ cp libavcodec/ppc/h264qpel.c libavcodec/ppc/h264qpel_ppc.c || die
+ popd >/dev/null || die
+ fi
+
+ # Sanity check keeplibs, on major version bumps it is often necessary to update this list
+ # and this enables us to hit them all at once.
+ # There are some entries that need to be whitelisted (TODO: Why? The file is understandable, the rest seem odd)
+ whitelist_libs=(
+ net/third_party/quic
+ third_party/devtools-frontend/src/front_end/third_party/additional_readme_paths.json
+ third_party/libjingle
+ third_party/mesa
+ third_party/skia/third_party/vulkan
+ third_party/vulkan
+ )
+ local not_found_libs=()
+ for lib in "${keeplibs[@]}"; do
+ if [[ ! -d "${lib}" ]] && ! has "${lib}" "${whitelist_libs[@]}"; then
+ not_found_libs+=( "${lib}" )
+ fi
+ done
+
+ if [[ ${#not_found_libs[@]} -gt 0 ]]; then
+ ewarn "The following \`keeplibs\` directories were not found in the source tree:"
+ for lib in "${not_found_libs[@]}"; do
+ ewarn " ${lib}"
+ done
+ fi
+
+ keeplibs+=( third_party/ungoogled )
+
+ # Remove most bundled libraries. Some are still needed.
+ einfo "Unbundling third-party libraries ..."
+ build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove || die
+
+ # Interferes with our bundled clang path; we don't want stripped binaries anyway.
+ sed -i -e 's|${clang_base_path}/bin/llvm-strip|/bin/true|g' \
+ -e 's|${clang_base_path}/bin/llvm-objcopy|/bin/true|g' \
+ build/linux/strip_binary.gni || die
+}
+
+src_configure() {
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ # Bug 491582.
+ export TMPDIR="${WORKDIR}/temp"
+ mkdir -p -m 755 "${TMPDIR}" || die
+
+ # https://bugs.gentoo.org/654216
+ addpredict /dev/dri/ #nowarn
+
+ # Use system-provided libraries.
+ # TODO: freetype -- remove sources (https://bugs.chromium.org/p/pdfium/issues/detail?id=733).
+ # TODO: use_system_hunspell (upstream changes needed).
+ # TODO: use_system_protobuf (bug #525560).
+ # TODO: use_system_sqlite (http://crbug.com/22208).
+
+ # libevent: https://bugs.gentoo.org/593458
+ local gn_system_libraries=(
+ flac
+ fontconfig
+ freetype
+ libjpeg
+ libwebp
+ libxml
+ libxslt
+ zlib
+ )
+ if use system-abseil-cpp; then
+ gn_system_libraries+=(
+ absl_algorithm
+ absl_base
+ absl_cleanup
+ absl_container
+ absl_crc
+ absl_debugging
+ absl_flags
+ absl_functional
+ absl_hash
+ absl_log
+ absl_log_internal
+ absl_memory
+ absl_meta
+ absl_numeric
+ absl_random
+ absl_status
+ absl_strings
+ absl_synchronization
+ absl_time
+ absl_types
+ absl_utility
+ )
+ fi
+ if use system-brotli; then
+ gn_system_libraries+=( brotli )
+ fi
+ if use system-crc32c; then
+ gn_system_libraries+=( crc32c )
+ fi
+ if use system-double-conversion; then
+ gn_system_libraries+=( double-conversion )
+ fi
+ if use system-woff2; then
+ gn_system_libraries+=( woff2 )
+ fi
+ if use nvidia; then
+ gn_system_libraries+=( libXNVCtrl )
+ fi
+ if use system-ffmpeg; then
+ gn_system_libraries+=( ffmpeg opus )
+ fi
+ if use system-jsoncpp; then
+ gn_system_libraries+=( jsoncpp )
+ fi
+ if use system-icu; then
+ gn_system_libraries+=( icu )
+ fi
+ if use system-zstd; then
+ gn_system_libraries+=( zstd )
+ fi
+ if use system-av1; then
+ gn_system_libraries+=( dav1d libaom )
+ fi
+ if use system-libusb; then
+ gn_system_libraries+=( libusb )
+ fi
+ if use system-libvpx; then
+ gn_system_libraries+=( libvpx )
+ fi
+ use system-openh264 && gn_system_libraries+=(
+ openh264
+ )
+ use system-re2 && gn_system_libraries+=(
+ re2
+ )
+ use system-snappy && gn_system_libraries+=(
+ snappy
+ )
+
+ build/linux/unbundle/replace_gn_files.py --system-libraries "${gn_system_libraries[@]}" ||
+ die "Failed to replace GN files for system libraries"
+
+ # TODO 131: The above call clobbers `enable_freetype = true` in the freetype gni file
+ # drop the last line, then append the freetype line and a new curly brace to end the block
+ local freetype_gni="build/config/freetype/freetype.gni"
+ sed -i -e '$d' ${freetype_gni} || die
+ echo " enable_freetype = true" >> ${freetype_gni} || die
+ echo "}" >> ${freetype_gni} || die
+
+ if use !custom-cflags; then
+ replace-flags "-Os" "-O2"
+ strip-flags
+ # Debug info section overflows without component build
+ # Prevent linker from running out of address space, bug #471810 .
+ filter-flags "-g*"
+ # 949123: Several multimedia components explicitly build with specific CFLAGS and
+ # use runtime detection to enable optimisations; unfortunately any of our CFLAGS are suffixed
+ # to the end of the command line, which causes build failures.
+ fi
+ # Since M150 `skia` will begin breaking for x86_64 due to compilation of `avx512` code paths;
+ # we need to filter these for all arches.
+ filter-flags "-march*" "-mtune*" "-mcpu*"
+
+ # We don't use the same clang version as upstream, and with -Werror
+ # we need to make sure that we don't get superfluous warnings.
+ append-flags -Wno-unknown-warning-option
+ if tc-is-cross-compiler; then # can you cross-compile with the bundled toolchain?
+ export BUILD_CXXFLAGS+=" -Wno-unknown-warning-option"
+ export BUILD_CFLAGS+=" -Wno-unknown-warning-option"
+ fi
+
+ # Start building our GN options
+ local myconf_gn=() # Tip: strings must be quoted, bools or numbers are fine
+
+ if use !bundled-toolchain; then
+ # We already forced the "correct" clang via pkg_setup
+
+ if tc-is-cross-compiler; then
+ CC="${CC} -target ${CHOST} --sysroot ${ESYSROOT}"
+ CXX="${CXX} -target ${CHOST} --sysroot ${ESYSROOT}"
+ BUILD_AR=${AR}
+ BUILD_CC=${CC}
+ BUILD_CXX=${CXX}
+ BUILD_NM=${NM}
+ fi
+
+ # Make sure the build system will use the right tools, bug #340795.
+ tc-export AR CC CXX NM
+
+ strip-unsupported-flags
+ append-ldflags -Wl,--undefined-version # https://bugs.gentoo.org/918897#c32
+
+ myconf_gn+=(
+ "is_clang=true"
+ "clang_use_chrome_plugins=false"
+ "use_clang_modules=false" # M141 enables this for the linux platform by default.
+ 'custom_toolchain="//build/toolchain/linux/unbundle:default"'
+ # From M127 we need to provide a location for libclang and the clang resource dir so that bindgen can find them
+ "bindgen_libclang_path=\"$(get_llvm_prefix)/$(get_libdir)\""
+ "bindgen_clang_resource_dir=\"${EPREFIX}/usr/lib/clang/${LLVM_SLOT}/include\""
+ "bindgen_extra_clang_args=[\"-I${EPREFIX}/usr/lib/clang/${LLVM_SLOT}/include\"]"
+ "clang_base_path=\"${EPREFIX}/usr/lib/clang/${LLVM_SLOT}/\""
+ "rust_bindgen_root=\"${EPREFIX}/usr/\""
+ "rust_sysroot_absolute=\"$(get_rust_prefix)\""
+ "rustc_version=\"${RUST_SLOT}\""
+ )
+
+ if tc-ld-is-mold; then
+ myconf_gn+=(
+ "use_mold=true"
+ "use_lld=false"
+ "linker_path=\"${EPREFIX}/usr/bin/mold\""
+ )
+ else
+ myconf_gn+=( "use_lld=true" )
+ fi
+
+ if [[ ${LLVM_SLOT} -lt 23 ]]; then
+ # Workaround for -fsanitize-ignore-for-ubsan-feature (added in LLVM 23)
+ myconf_gn+=( 'clang_has_ubsan_feature_ignore=false' )
+ fi
+
+ if ! tc-is-cross-compiler; then
+ myconf_gn+=( 'host_toolchain="//build/toolchain/linux/unbundle:default"' )
+ else
+ tc-export BUILD_{AR,CC,CXX,NM}
+ myconf_gn+=(
+ 'host_toolchain="//build/toolchain/linux/unbundle:host"'
+ 'v8_snapshot_toolchain="//build/toolchain/linux/unbundle:host"'
+ "host_pkg_config=\"$(tc-getBUILD_PKG_CONFIG)\""
+ "pkg_config=\"$(tc-getPKG_CONFIG)\""
+ )
+
+ # setup cups-config, build system only uses --libs option
+ if use cups; then
+ mkdir "${T}/cups-config" || die
+ cp "${ESYSROOT}/usr/bin/${CHOST}-cups-config" "${T}/cups-config/cups-config" || die
+ export PATH="${PATH}:${T}/cups-config"
+ fi
+
+ # Don't inherit PKG_CONFIG_PATH from environment
+ local -x PKG_CONFIG_PATH=
+ fi
+
+ fi # !bundled-toolchain
+
+ local myarch
+ myarch="$(tc-arch)"
+ case ${myarch} in
+ amd64)
+ # Bug 530248, 544702, 546984, 853646.
+ use !custom-cflags && filter-flags -mno-mmx -mno-sse2 -mno-ssse3 -mno-sse4.1 \
+ -mno-avx -mno-avx2 -mno-fma -mno-fma4 -mno-xop -mno-sse4a
+ myconf_gn+=( 'target_cpu="x64"' )
+ ;;
+ x86)
+ # Bug 530248, 544702, 546984, 853646.
+ use !custom-cflags && filter-flags -mno-mmx -mno-sse2 -mno-ssse3 -mno-sse4.1 \
+ -mno-avx -mno-avx2 -mno-fma -mno-fma4 -mno-xop -mno-sse4a
+ myconf_gn+=( 'target_cpu="x86"' )
+ ;;
+ arm64)
+ myconf_gn+=( 'target_cpu="arm64"' )
+ ;;
+ ppc64)
+ myconf_gn+=( 'target_cpu="ppc64"' )
+ ;;
+ *)
+ die "Failed to determine target arch, got '${myarch}'."
+ ;;
+ esac
+
+ # Common options
+
+ myconf_gn+=(
+ # Disable code formating of generated files
+ "blink_enable_generated_code_formatting=false"
+ # enable DCHECK with USE=debug only, increases chrome binary size by 30%, bug #811138.
+ # DCHECK is fatal by default, make it configurable at runtime, #bug 807881.
+ "dcheck_always_on=$(usex debug true false)"
+ "dcheck_is_configurable=$(usex debug true false)"
+ # Chromium builds provided by Linux distros should disable the testing config
+ "disable_fieldtrial_testing_config=true"
+ # Custom patch: Enable building Chromium as individual channels (e.g. stable, beta, dev) that
+ # use different profile directories, desktop entries, etc. This enables slotting the ebuild.
+ "enable_channel_branding=true"
+ # 131 began laying the groundwork for replacing freetype with
+ # "Rust-based Fontations set of libraries plus Skia path rendering"
+ # We now need to opt-in
+ "enable_freetype=true"
+ "enable_hangout_services_extension=$(usex hangouts true false)"
+ # Don't need nocompile checks and GN crashes with our config (verify with modern GN)
+ "enable_nocompile_tests=false"
+ # pseudolocales are only used for testing
+ "enable_pseudolocales=false"
+ "enable_widevine=$(usex widevine true false)"
+ # Disable fatal linker warnings, bug 506268.
+ "fatal_linker_warnings=false"
+ # Component build isn't generally intended for use by end users. It's mostly useful
+ # for development and debugging.
+ "is_component_build=false"
+ # GN needs explicit config for Debug/Release as opposed to inferring it from build directory.
+ "is_debug=false"
+ "is_official_build=$(usex official true false)"
+ # Enable ozone wayland and/or headless support
+ "ozone_auto_platforms=false"
+ "ozone_platform_headless=true"
+ # Enables building without non-free unRAR licence
+ "safe_browsing_use_unrar=false"
+ # "thin_lto_enable_optimizations=${use_lto}"
+ "treat_warnings_as_errors=false"
+ # Use in-tree libc++ (buildtools/third_party/libc++ and buildtools/third_party/libc++abi)
+ # instead of the system C++ library for C++ standard library support.
+ # default: true, but let's be explicit (forced since 120 ; USE removed 127).
+ "use_custom_libcxx=true"
+ # Enable ozone wayland and/or headless support
+ "use_ozone=true"
+ # The sysroot is the oldest debian image that chromium supports, we don't need it
+ "use_sysroot=false"
+ # See dependency logic in third_party/BUILD.gn
+ "use_system_harfbuzz=$(usex system-harfbuzz true false)"
+ # "use_thin_lto=${use_lto}"
+ # Only enabled for clang, but gcc has endian macros too
+ "v8_use_libm_trig_functions=true"
+ )
+
+ myconf_gn+=( "enable_iterator_debugging=$(usex debug true false)" )
+
+ if use debug; then
+ myconf_gn+=(
+ "symbol_level=2"
+ "blink_symbol_level=2"
+ "v8_symbol_level=2"
+ )
+ else
+ myconf_gn+=(
+ "symbol_level=0"
+ "blink_symbol_level=0"
+ "v8_symbol_level=0"
+ )
+ fi
+
+ if use bindist ; then
+ myconf_gn+=(
+ # If this is set to false Chromium won't be able to load any proprietary codecs
+ # even if provided with an ffmpeg capable of h264/aac decoding
+ "proprietary_codecs=true"
+ 'ffmpeg_branding="Chrome"'
+ # build ffmpeg as an external component (libffmpeg.so) that we can remove / substitute
+ "is_component_ffmpeg=true"
+ )
+ else
+ myconf_gn+=(
+ "proprietary_codecs=$(usex proprietary-codecs true false)"
+ "ffmpeg_branding=\"$(usex proprietary-codecs Chrome Chromium)\""
+ )
+ fi
+
+ if use headless; then
+ myconf_gn+=(
+ "enable_print_preview=false"
+ "enable_remoting=false"
+ 'ozone_platform="headless"'
+ "rtc_use_pipewire=false"
+ "use_alsa=false"
+ "use_cups=false"
+ "use_gio=false"
+ "use_glib=false"
+ "use_gtk=false"
+ "use_kerberos=false"
+ "use_libpci=false"
+ "use_pangocairo=false"
+ "use_pulseaudio=false"
+ "use_qt5=false"
+ "use_qt6=false"
+ "use_udev=false"
+ "use_vaapi=false"
+ "use_xkbcommon=false"
+ )
+ else
+ myconf_gn+=(
+ "gtk_version=$(usex gtk4 4 3)"
+ # link pulseaudio directly (DT_NEEDED) instead of using dlopen.
+ # helps with automated detection of ABI mismatches and prevents silent errors.
+ "link_pulseaudio=$(usex pulseaudio true false)"
+ "ozone_platform_wayland=$(usex wayland true false)"
+ "ozone_platform_x11=$(usex X true false)"
+ "ozone_platform=\"$(usex wayland wayland x11)\""
+ "rtc_use_pipewire=$(usex screencast true false)"
+ "use_cups=$(usex cups true false)"
+ "use_kerberos=$(usex kerberos true false)"
+ "use_pulseaudio=$(usex pulseaudio true false)"
+ "use_qt5=false"
+ "use_system_libffi=$(usex wayland true false)"
+ "use_system_minigbm=true"
+ "use_vaapi=$(usex vaapi true false)"
+ "use_xkbcommon=true"
+ )
+ if use qt6; then
+ local cbuild_libdir
+ cbuild_libdir="$(get_libdir)"
+ if tc-is-cross-compiler; then
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ cbuild_libdir="$($(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libxslt)"
+ cbuild_libdir="${cbuild_libdir:2}"
+ cbuild_libdir="${cbuild_libdir/% }"
+ fi
+ myconf_gn+=(
+ "use_qt6=true"
+ "moc_qt6_path=\"${EPREFIX}/usr/${cbuild_libdir}/qt6/libexec\""
+ )
+ else
+ myconf_gn+=( "use_qt6=false" )
+ fi
+ fi
+
+ # Explicitly disable ICU data file support for system-icu/headless builds.
+ if use system-icu || use headless; then
+ myconf_gn+=( "icu_use_data_file=false" )
+ fi
+
+ if use official; then
+ # Allow building against system libraries in official builds
+ sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
+ tools/generate_shim_headers/generate_shim_headers.py || die
+ # Don't add symbols to build
+ myconf_gn+=( "symbol_level=0" )
+ fi
+
+ if use pgo; then
+ myconf_gn+=(
+ "chrome_pgo_phase=2"
+ "v8_enable_builtins_optimization=true"
+ )
+ else
+ myconf_gn+=( "chrome_pgo_phase=0" )
+ fi
+
+ # Odds and ends
+
+ # skipping typecheck is only supported on amd64, bug #876157
+ if ! use amd64; then
+ myconf_gn+=( "devtools_skip_typecheck=false" )
+ fi
+
+ # Disable external code space for V8 for ppc64. It is disabled for ppc64
+ # by default, but cross-compiling on amd64 enables it again.
+ if tc-is-cross-compiler && use ppc64; then
+ myconf_gn+=( "v8_enable_external_code_space=false" )
+ fi
+
+ # This determines whether or not GN uses the bundled libcxx
+ if use libcxx; then
+ myconf_gn+=( "use_custom_libcxx=true" )
+ else
+ myconf_gn+=(
+ "use_custom_libcxx=false"
+ "use_llvm_libatomic=false"
+ )
+ append-cppflags -U_GLIBCXX_ASSERTIONS #See #318
+ fi
+
+ myconf_gn+=( "use_bluez=$(usex bluetooth true false)" )
+
+ myconf_gn+=( "is_cfi=$(usex cfi true false)" )
+
+ if use cfi; then
+ myconf_gn+=(
+ "use_cfi_icall=true"
+ "use_cfi_cast=true"
+ )
+ fi
+
+ myconf_gn+=(
+ "optimize_webui=$(usex optimize-webui true false)"
+ "use_system_freetype=$(usex system-harfbuzz true false)"
+ "use_system_libopenjpeg2=$(usex system-openjpeg true false)"
+ "enable_pdf=true"
+ "use_system_lcms2=true"
+ "enable_print_preview=true"
+ "use_thin_lto=$(usex thinlto true false)"
+ "thin_lto_enable_optimizations=$(usex optimize-thinlto true false)"
+
+ # Ungoogled flags
+ "build_with_tflite_lib=false"
+ "enable_mdns=false"
+ "enable_mse_mpeg2ts_stream_parser=$(usex proprietary-codecs true false)"
+ "enable_remoting=false"
+ "enable_reporting=false"
+ "enable_service_discovery=false"
+ "exclude_unwind_tables=true"
+ "google_api_key=\"\""
+ "google_default_client_id=\"\""
+ "google_default_client_secret=\"\""
+ "safe_browsing_mode=0"
+ "use_official_google_api_keys=false"
+ "use_unofficial_version_number=false"
+
+ # "enable_swiftshader=false"
+
+ # Additional flags
+ # "perfetto_use_system_zlib=true"
+ # "use_system_zlib=true"
+ # "use_system_libjpeg=true"
+ # "rtc_build_examples=false"
+ # "enable_chromium_prelude=false"
+ # "enable_updater=false"
+ # "enable_update_notifications=false"
+ # "enable_constraints=false"
+ # "rtc_rusty_base64=false"
+ # "v8_enable_temporal_support=false"
+ # "media_use_symphonia=false"
+ # "pdf_enable_rust_png=false"
+ # "skia_use_libpng_encode=true"
+ # "skia_use_libpng_decode=true"
+ # "skia_use_rust_png_decode=false"
+ # "skia_use_rust_png_encode=false"
+ # "enable_jxl_decoder=false"
+ )
+
+ if use amd64 || use arm64; then
+ myconf_gn+=(
+ "v8_drumbrake_bounds_checks=true"
+ # "v8_enable_drumbrake=true"
+ )
+ fi
+
+ if use thinlto; then
+ # We need to change the default value of import-instr-limit in
+ # LLVM to limit the text size increase. The default value is
+ # 100, and we change it to 30 to reduce the text size increase
+ # from 25% to 10%. The performance number of page_cycler is the
+ # same on two of the thinLTO configurations, we got 1% slowdown
+ # on speedometer when changing import-instr-limit from 100 to 30.
+ # append-ldflags "-Wl,-plugin-opt,-import-instr-limit=30"
+ sed -i '/import_instr_limit = 5/{s++import_instr_limit = 30+;h};${x;/./{x;q0};x;q1}' \
+ build/config/compiler/BUILD.gn || die
+
+ append-ldflags "-Wl,--thinlto-jobs=$(makeopts_jobs)"
+ fi
+
+ # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn)
+ append-cflags -Wno-builtin-macro-redefined
+ append-cxxflags -Wno-builtin-macro-redefined
+ append-cppflags "-D__DATE__= -D__TIME__= -D__TIMESTAMP__="
+
+ local flags
+ einfo "Building with the following compiler settings:"
+ for flags in C{C,XX} AR NM RANLIB {C,CXX,CPP,LD}FLAGS \
+ EXTRA_GN UGC_{SKIP_{PATCHES,SUBSTITUTION},KEEP_BINARIES} ; do
+ einfo " ${flags} = \"${!flags}\""
+ done
+
+ # Since we build from tarballs, we need to set the channel here so that it can be used in the build.
+ export CHROME_VERSION_EXTRA="${SLOT}"
+
+ einfo "Configuring Chromium ..."
+ set -- gn gen --args="${myconf_gn[*]}${EXTRA_GN:+ ${EXTRA_GN}}" out/Release
+ echo "$@"
+ "$@" || die "Failed to configure Chromium"
+
+ # The "if" below should not be executed unless testing
+ if [ ! -z "${NODIE}" ]; then
+ # List all args
+ # gn args --list out/Release
+
+ # Quick compiler check
+ eninja -C out/Release protoc torque
+ fi
+}
+
+src_compile() {
+ # Final link uses lots of file descriptors.
+ ulimit -n 2048
+
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ # I hate doing this but upstream Rust have yet to come up with a better solution for
+ # us poor packagers. Required for Split LTO units, which are required for CFI.
+ export RUSTC_BOOTSTRAP=1
+
+ # Don't inherit PYTHONPATH from environment, bug #789021, #812689
+ local -x PYTHONPATH=
+
+ # Build mksnapshot and pax-mark it.
+ if use pax-kernel; then
+ local x
+ for x in mksnapshot v8_context_snapshot_generator code_cache_generator; do
+ if tc-is-cross-compiler; then
+ eninja -C out/Release "host/${x}"
+ pax-mark m "out/Release/host/${x}"
+ else
+ eninja -C out/Release "${x}"
+ pax-mark m "out/Release/${x}"
+ fi
+ done
+ fi
+
+ # Even though ninja autodetects number of CPUs, we respect
+ # user's options, for debugging with -j 1 or any other reason.
+ eninja -C out/Release chrome chrome_sandbox $(use test && echo "base_unittests")
+
+ pax-mark m out/Release/chrome
+
+ # This codepath does minimal patching, so we're at the mercy of upstream
+ # CFLAGS. This is fine - we're not intending to force this on users
+ # and we do a lot of flag 'management' anyway.
+ if use bundled-toolchain; then
+ QA_FLAGS_IGNORED="
+ usr/lib64/chromium-browser/chrome
+ usr/lib64/chromium-browser/chrome-sandbox
+ usr/lib64/chromium-browser/chromedriver
+ usr/lib64/chromium-browser/chrome_crashpad_handler
+ usr/lib64/chromium-browser/libEGL.so
+ usr/lib64/chromium-browser/libGLESv2.so
+ usr/lib64/chromium-browser/libVkICD_mock_icd.so
+ usr/lib64/chromium-browser/libVkLayer_khronos_validation.so
+ usr/lib64/chromium-browser/libqt6_shim.so
+ usr/lib64/chromium-browser/libvk_swiftshader.so
+ usr/lib64/chromium-browser/libvulkan.so.1
+ "
+ fi
+
+ use convert-dict && eninja -C out/Release convert_dict
+
+ use enable-driver && eninja -C out/Release chromedriver
+ #use suid && eninja -C out/Release chrome_sandbox
+
+ use enable-driver && mv out/Release/chromedriver{.unstripped,}
+
+ rm -f out/Release/locales/*.pak.info || die
+
+ # Generate support files (desktop file, manpage, etc.) See: #684550 #706786 #968958
+ ${EPYTHON} "${FILESDIR}/generate-support-files.py" \
+ --installdir "/usr/$(get_libdir)/ungoogled-chromium-browser" \
+ --channel "${SLOT}" ||
+ die "Failed to generate support files"
+}
+
+src_test() {
+ # Tests may be flaky with usersandbox, and the test runner executes significantly faster without.
+ # If you seem to be excluding too many tests for a particular milestone: comment them out, reboot, and
+ # run the tests again. If that doesn't help, try FEATURES="-usersandbox" and send it because obviously the
+ # chromium gods are not smiling upon you today. Do some runtime testing, obvs.
+ local skip_tests=(
+ # Wildcard exclusions (if all tests in a test suite are broken)
+ 'AlternateTestParams/PartitionAllocDeathTest.RepeatedAllocReturnNullDirect/*'
+ 'AlternateTestParams/PartitionAllocDeathTest.RepeatedReallocReturnNullDirect/*'
+ 'AlternateTestParams/PartitionAllocTest.*' # 200+ tests, >= 1 crashes entire test runner with usersandbox.
+ 'CheckExitCodeAfterSignalHandlerDeathTest.*'
+ 'CriticalProcessAndThreadSpotChecks/HangWatcherAnyCriticalThreadTests.*'
+ 'LazyThreadPoolTaskRunnerEnvironmentTest.*' # M142
+ 'ToolsSanityTest.BadVirtualCall*'
+ # requires en-us locale
+ SysStrings.SysNativeMBAndWide
+ SysStrings.SysNativeMBToWide
+ SysStrings.SysWideToNativeMB
+ # Specific test cases
+ CancelableEventTest.BothCancelFailureAndSucceedOccurUnderContention
+ FilePathTest.FromUTF8Unsafe_And_AsUTF8Unsafe
+ HistogramTesterTest.PumaTestUniqueSample
+ ImmediateCrashTest.ExpectedOpcodeSequence # M150
+ PathServiceTest.CheckedGetFailure
+ PlatformThreadTest.CanChangeThreadType
+ RawPtrTest.SetLookupUsesGetForComparison # M146 ; also broken for alpine in M144.
+ RustLogIntegrationTest.CheckAllSeverity
+ StackCanary.ChangingStackCanaryCrashesOnReturn
+ StackTraceDeathTest.StackDumpSignalHandlerIsMallocFree
+ TestLauncherTools.TruncateSnippetFocusedMatchesFatalMessagesTest
+ ThreadPoolEnvironmentConfig.CanUseBackgroundPriorityForWorker
+ )
+ local test_filter="-$(IFS=:; printf '%s' "${skip_tests[*]}")"
+ # test-launcher-bot-mode enables parallelism and plain output
+ # Check individual tests with --gtest_filter=<test you want> --single-process-tests
+ ./out/Release/base_unittests --test-launcher-bot-mode \
+ --test-launcher-jobs="$(get_makeopts_jobs)" \
+ --gtest_filter="${test_filter}" || die "Tests failed!"
+}
+
+src_install() {
+ local browser_suffix
+ if [[ "${SLOT}" != "stable" ]]; then
+ browser_suffix="-${SLOT}"
+ else
+ browser_suffix=""
+ fi
+ local CHROMIUM_HOME="/usr/$(get_libdir)/ungoogled-chromium-browser${browser_suffix}"
+ exeinto "${CHROMIUM_HOME}"
+ doexe out/Release/chrome
+
+ #newexe out/Release/chrome_sandbox chrome-sandbox
+ #fperms 4755 "${CHROMIUM_HOME}/chrome-sandbox"
+
+ use enable-driver && doexe out/Release/chromedriver
+
+ #* https://github.com/ungoogled-software/ungoogled-chromium/pull/3563
+ doexe out/Release/chrome_crashpad_handler
+
+ if use convert-dict; then
+ newexe "${FILESDIR}/update-dicts.sh" update-dicts.sh
+ doexe out/Release/convert_dict
+ fi
+
+ ozone_auto_session () {
+ use X && use wayland && ! use headless && echo true || echo false
+ }
+
+ cat <<- EOF > "${D}${CHROMIUM_HOME}/chromium-launcher.sh" || die
+ #!/bin/bash
+ # Wrapper to launch slotted Chromium via the chromium-common launcher script.
+ export CHROME_DESKTOP="ungoogled-chromium-browser${browser_suffix}.desktop"
+ export CHROME_EXEC_NAME="ungoogled-chromium-browser${browser_suffix}"
+ export CHROME_VERSION_EXTRA="${SLOT}"
+ export CHROME_WRAPPER="\$(readlink -f "\$0")"
+ export OZONE_AUTO_SESSION=$(ozone_auto_session)
+
+ exec /usr/libexec/chromium/chromium-launcher.sh "\$@"
+ EOF
+
+ chmod 755 "${D}${CHROMIUM_HOME}/chromium-launcher.sh" || die
+
+ # It is important that we name the target "chromium-browser",
+ # xdg-utils expect it; bug #355517.
+ dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/ungoogled-chromium-browser${browser_suffix}
+ # keep the old symlink around for consistency
+ dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/ungoogled-chromium${browser_suffix}
+
+ use enable-driver && dosym "${CHROMIUM_HOME}/chromedriver" /usr/bin/ungoogled-chromedriver${browser_suffix}
+
+ pushd out/Release/locales > /dev/null || die
+ chromium_remove_language_paks
+ popd > /dev/null || die
+
+ insinto "${CHROMIUM_HOME}"
+ doins out/Release/*.bin
+ doins out/Release/*.pak
+ doins -r out/Release/hyphen-data
+
+ if use bindist; then
+ # We built libffmpeg as a component library, but we can't distribute it
+ # with proprietary codec support. Remove it and make a symlink to the requested
+ # system library.
+ rm -f out/Release/libffmpeg.so \
+ || die "Failed to remove bundled libffmpeg.so (with proprietary codecs)"
+ # symlink the libffmpeg.so from either ffmpeg-chromium or ffmpeg[chromium].
+ einfo "Creating symlink to libffmpeg.so from $(usex ffmpeg-chromium ffmpeg-chromium ffmpeg[chromium])..."
+ dosym ../chromium/libffmpeg.so$(usex ffmpeg-chromium .${PV%%\.*} "") \
+ /usr/$(get_libdir)/ungoogled-chromium-browser/libffmpeg.so
+ fi
+
+ (
+ shopt -s nullglob
+ local files=(out/Release/*.so out/Release/*.so.[0-9])
+ [[ ${#files[@]} -gt 0 ]] && doins "${files[@]}"
+ )
+
+ if ! use system-icu && ! use headless; then
+ doins out/Release/icudtl.dat
+ fi
+
+ doins -r out/Release/locales
+ #doins -r out/Release/MEIPreload
+
+ # Install vk_swiftshader_icd.json; bug #827861
+ doins out/Release/vk_swiftshader_icd.json
+
+ if [[ -d out/Release/swiftshader ]]; then
+ insinto "${CHROMIUM_HOME}/swiftshader"
+ doins out/Release/swiftshader/*.so
+ fi
+
+ use widevine && dosym WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so "${CHROMIUM_HOME}/libwidevinecdm.so"
+
+ # Install icons
+ local branding size
+ for size in 16 24 32 48 64 128 256 ; do
+ case ${size} in
+ 16|32) branding="chrome/app/theme/default_100_percent/chromium" ;;
+ *) branding="chrome/app/theme/chromium" ;;
+ esac
+ newicon -s ${size} "${branding}/product_logo_${size}.png" \
+ ungoogled-chromium-browser${browser_suffix}.png
+ done
+
+ # Install desktop entry
+ domenu out/Release/ungoogled-chromium-browser${browser_suffix}.desktop
+
+ # Install GNOME default application entry (bug #303100).
+ insinto /usr/share/gnome-control-center/default-apps
+ doins out/Release/ungoogled-chromium-browser${browser_suffix}.xml
+
+ # Install AppStream metadata
+ insinto /usr/share/appdata
+ doins out/Release/ungoogled-chromium-browser${browser_suffix}.appdata.xml
+
+ # Install manpage; bug #684550
+ doman out/Release/ungoogled-chromium-browser${browser_suffix}.1
+ dosym ungoogled-chromium-browser${browser_suffix}.1 /usr/share/man/man1/ungoogled-chromium${browser_suffix}.1
+
+ readme.gentoo_create_doc
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+ readme.gentoo_print_elog
+
+ if use !headless && [[ -z "${REPLACING_VERSIONS}" ]]; then
+ if use vaapi; then
+ elog "Hardware-accelerated video decoding configuration:"
+ elog
+ elog "Chromium supports multiple backends for hardware acceleration. To enable one,"
+ elog " Add to CHROMIUM_FLAGS in /etc/chromium/default:"
+ elog
+ elog "1. VA-API with OpenGL (recommended for most users):"
+ elog " --enable-features=AcceleratedVideoDecodeLinuxGL"
+ elog " VaapiVideoDecoder may need to be added as well, but try without first."
+ elog
+ if use wayland; then
+ elog "2. Enhanced Wayland/EGL performance:"
+ elog " --enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL"
+ elog
+ fi
+ if use X; then
+ elog "$(usex wayland "3" "2"). VA-API with Vulkan:"
+ elog " --enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE"
+ elog
+ if use wayland; then
+ elog " NOTE: Vulkan acceleration requires X11 and will not work under Wayland sessions."
+ elog " Use OpenGL-based acceleration instead when running under Wayland."
+ elog
+ fi
+ fi
+ elog "Additional options:"
+ elog " To enable hardware-accelerated encoding (if supported)"
+ elog " add 'AcceleratedVideoEncoder' to your feature list"
+ elog " VaapiIgnoreDriverChecks bypasses driver compatibility checks"
+ elog " (may be needed for newer/unsupported hardware)"
+ elog
+ else
+ elog "This Chromium build was compiled without VA-API support, which provides"
+ elog "hardware-accelerated video decoding."
+ fi
+ if use screencast; then
+ elog "Screencast is disabled by default at runtime. Either enable it"
+ elog "by navigating to chrome://flags/#enable-webrtc-pipewire-capturer"
+ elog "inside Chromium or add --enable-features=WebRTCPipeWireCapturer"
+ elog "to CHROMIUM_FLAGS in /etc/chromium/default."
+ elog
+ elog "Additional setup may be required for screencasting to work."
+ elog "See issue: https://github.com/PF4Public/gentoo-overlay/issues/314"
+ fi
+ if use gtk4; then
+ elog "Chromium prefers GTK3 over GTK4 at runtime. To override this"
+ elog "behaviour you need to pass --gtk-version=4, e.g. by adding it"
+ elog "to CHROMIUM_FLAGS in /etc/chromium/default."
+ fi
+ if use widevine; then
+ elog "widevine requires binary plugins, which are distributed separately"
+ elog "Make sure you have www-plugins/chrome-binary-plugins installed"
+ fi
+ fi
+
+ if systemd_is_booted && ! [[ -f "/etc/machine-id" ]]; then
+ ewarn "The lack of an '/etc/machine-id' file on this system booted with systemd"
+ ewarn "indicates that the Gentoo handbook was not followed to completion."
+ ewarn ""
+ ewarn "Chromium is known to behave unpredictably with this system configuration;"
+ ewarn "please complete the configuration of this system before logging any bugs."
+ fi
+
+ # Stable slot doesn't change profile directory, and it's vanishingly unlikely that users will downgrade from dev.
+ if [[ -n "${REPLACING_VERSIONS}" ]]; then
+ local replacing_non_slotted=false
+ # there could be more than one PVR
+ for version in ${REPLACING_VERSIONS}; do
+ if ver_test "${version}" -le "145.0.7632.116"; then
+ replacing_non_slotted=true
+ break
+ fi
+ done
+ if ${replacing_non_slotted}; then
+ ewarn "This version of Chromium has replaced a non-slotted ebuild."
+ if [[ ${SLOT} != "stable" ]]; then
+ ewarn "This channel has its own profile directory, so your existing profile will not be used."
+ ewarn "To use your existing profile, either copy or move it to the new location."
+ ewarn "See https://wiki.gentoo.org/wiki/Chromium#Profile_Directories for more information."
+ ewarn ""
+ fi
+ ewarn "Any existing Progressive Web Apps (PWAs) will need to be reinstalled,"
+ ewarn "or have the path in the desktop files updated to point to the new wrapper script."
+ fi
+ fi
+}
+
+eapply_wrapper () {
+ if [ ! -z "${NODIE}" ]; then
+ nonfatal eapply "$@"
+ else
+ eapply "$@"
+ fi
+}
+
+git_wrapper () {
+ if [ ! -z "${NODIE}" ]; then
+ git "$@"
+ else
+ git "$@" || die
+ fi
+}
+
+filter_wrapper () {
+ einfo "Applying ${i##*/}"
+ #? fuzz factor of 3 is OK?
+ if [ ! -z "${NODIE}" ]; then
+ filterdiff -p1 "${@:2}" < "$1" | patch -F 3 -p1
+ else
+ filterdiff -p1 "${@:2}" < "$1" | patch -F 3 -p1 || die
+ fi
+}