diff options
Diffstat (limited to 'www-client/chromium')
| -rw-r--r-- | www-client/chromium/Manifest | 1 | ||||
| -rw-r--r-- | www-client/chromium/chromium-143.0.7499.109.ebuild | 1687 |
2 files changed, 1688 insertions, 0 deletions
diff --git a/www-client/chromium/Manifest b/www-client/chromium/Manifest index 5fe67a64b227..10201a31d91d 100644 --- a/www-client/chromium/Manifest +++ b/www-client/chromium/Manifest @@ -8,6 +8,7 @@ DIST chromium-142.0.7444.162-linux-testdata.tar.xz 860048080 BLAKE2B 466a8e120e3 DIST chromium-142.0.7444.162-linux.tar.xz 1707095596 BLAKE2B eb92f809340a997d7cd9ffcb5d329225659e2c0cf6a5d019e667bbecb92090d04ade25b40018a1e293ec1b47083d97d5e41665e45fd12ea8753052b1c3a9199a SHA512 783860211afba502637299c6f5d8ec026f21e4c648472aff920d952423e8e5c053f569d6468d4283a26d027dd6e33266195d520f22f69d5e9e7750d8a4fb9127 DIST chromium-142.0.7444.175-linux-testdata.tar.xz 860086472 BLAKE2B fe93d1ae9e0df485e79c875a7494e54c10ab8729c1b143ec6d9b0264509d76be1ce967e608e1b0da6fa1f539728a596275bfb42c1da744cab49f683473db5f89 SHA512 3ebe04fd2531f36a76d739d65b1edd2cafa0a624aacdcdc9a0aaaaef1e7b448c1a94ca9a75c86cd70852968c2a4e5c3a9985a8051c7c24ec84f984f3c3b3f702 DIST chromium-142.0.7444.175-linux.tar.xz 1707133760 BLAKE2B 2cd34cb833056eded5b11e604823ad6dbfc317f025b6087e7b146deabea7db4e77adac8284bd7e5acfc93fc3c8356482658f2e35922a79df52a91ad302a83c50 SHA512 c01157d7e0f5b7d6cbc3933d42adca488474414d5d893092e1a108255958aae356e8f997ab5f76b670b3d20044943c3323869741900f6b4e36d30d494f57dfd8 +DIST chromium-143.0.7499.109-linux.tar.xz 1140751164 BLAKE2B 2d92edef264b5d3145e952e6f8b2a986c8adb6ef47c2a0ddf6c5acb6cdd0d47144123a8e15944c4a22fb42177f9e6c7e84ea3ab6f6bb17dc464ff9c3e9c2c851 SHA512 9d9a24f9e424b8121c73edc8c5ad685447ccfc67d29878cc3b248eed86273702a0f26eb91ed501d492f165de1319bfdaed7a4071f2a9e7cfd7551f845b066f65 DIST chromium-143.0.7499.17-linux-testdata.tar.xz 931619076 BLAKE2B 8d286dcf1a98ab884eb847d2b3e2b3c047d3b9f366bc9eb1e109771e24970e31a8be6f4ea77c2850b36b686ef82164e3b4bca4eaf2cb717a1f704f61c91509cd SHA512 5af1e8a5ef773abc1a3c8099e0cbab8b0f60f11048f5d758c00d783662eb282adcead14c0506da62e7f7cf41dbb90f77524986aeda54a2b916fe8ca13c4e2657 DIST chromium-143.0.7499.17-linux.tar.xz 1772840848 BLAKE2B 43f28355969b2e749607fa693648926cd5619a3020dcd0fe601f2049716c5906fe583c8e54aab388e320248782a69e9eac4ba6359846549cbce4288bb96b9bc4 SHA512 b113f57b1ed154e1ab9c69ce1493906101538f6eefa841a766ae4017c8765692d125e9a8a5b383cd09e4e23d896a084dd28b981f1322c934a8109342d48ac827 DIST chromium-143.0.7499.4-linux-testdata.tar.xz 931754044 BLAKE2B 4e56713481a41e9a57899a2ca64ee7abe06734ceb42a82992d0a576b4810929efb4970ab3082b4850e1adb121c9390eb303acb573aefeae57a7d45c9608dc98c SHA512 211c9d22323b1e392fef16d6d7c9bd207b9dd8e9db2dda1a8e5d32c5f0da73e34b255f82611af9489d4eb54d91360a49d46d4fdcdb3c9aa7c2aaaff067c90998 diff --git a/www-client/chromium/chromium-143.0.7499.109.ebuild b/www-client/chromium/chromium-143.0.7499.109.ebuild new file mode 100644 index 000000000000..335294ade43a --- /dev/null +++ b/www-client/chromium/chromium-143.0.7499.109.ebuild @@ -0,0 +1,1687 @@ +# Copyright 2009-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +# PACKAGING NOTES + +# Upstream roll their bundled Clang every two weeks, and the bundled Rust +# is rolled regularly and depends on that. While we do our best to build +# with system Clang, we may eventually hit the point where we need to use +# the bundled Clang due to the use of prerelease features. + +# 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.2235 +# chromium-tools/get-chromium-toolchain-strings.py +TEST_FONT=a28b222b79851716f8358d2800157d9ffe117b3545031ae51f69b7e1e1b9a969 +BUNDLED_CLANG_VER=llvmorg-22-init-8940-g4d4cb757-84 +BUNDLED_RUST_VER=15283f6fe95e5b604273d13a428bab5fc0788f5a-1 +RUST_SHORT_HASH=${BUNDLED_RUST_VER:0:10}-${BUNDLED_RUST_VER##*-} +NODE_VER=22.11.0 + +VIRTUALX_REQUIRED="pgo" + +CHROMIUM_LANGS="af am ar bg bn ca cs da de el en-GB es es-419 et fa fi fil fr gu he + hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr + sv sw ta te th tr uk ur vi zh-CN zh-TW" + +LLVM_COMPAT=( 20 21 ) +PYTHON_COMPAT=( python3_{11..13} ) +PYTHON_REQ_USE="xml(+)" +RUST_MIN_VER=1.78.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 + +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 virtualx xdg-utils + +DESCRIPTION="Open-source version of Google Chrome web browser" +HOMEPAGE="https://www.chromium.org/" +PPC64_HASH="a85b64f07b489b8c6fdb13ecf79c16c56c560fc6" +PATCH_V="${PV%%\.*}" +COPIUM_COMMIT="8025c57b5b5d0f93ca6392cbcfab8fd2f8255e75" +SRC_URI="https://github.com/chromium-linux-tarballs/chromium-tarballs/releases/download/${PV}/chromium-${PV}-linux.tar.xz + !bundled-toolchain? ( + https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${PATCH_V}/chromium-patches-${PATCH_V}.tar.bz2 + 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 + ) + 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 + ) + pgo? ( https://github.com/elkablo/chromium-profiler/releases/download/v0.2/chromium-profiler-0.2.tar )" + +# https://gitweb.gentoo.org/proj/chromium-tools.git/tree/get-chromium-licences.py +LICENSE="BSD Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 Base64 Boost-1.0 CC-BY-3.0 CC-BY-4.0 Clear-BSD" +LICENSE+=" FFT2D FTL IJG ISC LGPL-2 LGPL-2.1 libpng libpng2 MIT MPL-1.1 MPL-2.0 Ms-PL openssl PSF-2" +LICENSE+=" SGI-B-2.0 SSLeay SunSoft Unicode-3.0 Unicode-DFS-2015 Unlicense UoI-NCSA X11-Lucent" +LICENSE+=" rar? ( unRAR )" + +SLOT="0/stable" +# Dev exists mostly to give devs some breathing room for beta/stable releases; +# it shouldn't be keyworded but adventurous users can select it. +if [[ ${SLOT} != "0/dev" ]]; then + KEYWORDS="amd64 ~arm64" +fi + +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" +IUSE+=" +proprietary-codecs pulseaudio qt6 +rar +screencast selinux test +vaapi +wayland +widevine cpu_flags_ppc_vsx3" +RESTRICT=" + !bindist? ( bindist ) + test" # Since M142 tests have been segfaulting on Gentoo systems; disabling for now. + +REQUIRED_USE=" + !headless? ( || ( X wayland ) ) + pgo? ( X !wayland ) + screencast? ( wayland ) + ffmpeg-chromium? ( bindist proprietary-codecs ) +" + +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. +COMMON_SNAPSHOT_DEPEND=" + system-icu? ( >=dev-libs/icu-73.0:= ) + >=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:= + system-zstd? ( >=app-arch/zstd-1.5.5:= ) + >=media-libs/libwebp-0.4.0:= + media-libs/mesa:=[gbm(+)] + >=media-libs/openh264-1.6.0:= + sys-libs/zlib:= + !headless? ( + dev-libs/glib:2 + >=media-libs/alsa-lib-1.0.19:= + pulseaudio? ( media-libs/libpulse:= ) + 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? ( + dev-libs/libffi:= + dev-libs/wayland:= + screencast? ( media-video/pipewire:= ) + ) + ) +" + +COMMON_DEPEND=" + ${COMMON_SNAPSHOT_DEPEND} + app-arch/bzip2:= + dev-libs/expat:= + 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} + !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-6.1-r1:0/58.60.60[chromium] ) + ffmpeg-chromium? ( media-video/ffmpeg-chromium:${PV%%\.*} ) + ) +" +DEPEND="${COMMON_DEPEND} + !headless? ( + gtk4? ( gui-libs/gtk:4[X?,wayland?] ) + !gtk4? ( x11-libs/gtk+:3[X?,wayland?] ) + ) +" + +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} + llvm-core/lld:${LLVM_SLOT} + official? ( + !ppc64? ( llvm-runtimes/compiler-rt-sanitizers:${LLVM_SLOT}[cfi] ) + ) ') + ${RUST_DEPEND} + ) + pgo? ( + >=dev-python/selenium-3.141.0 + >=dev-util/web_page_replay_go-20220314 + ) + >=dev-util/bindgen-0.68.0 + >=dev-build/gn-${GN_MIN_VER} + app-alternatives/ninja + dev-lang/perl + >=dev-util/gperf-3.2 + dev-vcs/git + >=net-libs/nodejs-${NODE_VER}[inspector] + sys-apps/hwdata + >=sys-devel/bison-2.4.3 + sys-devel/flex + virtual/pkgconfig +" + +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. +" + +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 +} + +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 + + # 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. + # TODO: check if the user has already selected a specific impl via make.conf and respect that. + use_lto="false" + if tc-is-lto; then + use_lto="true" + # We can rely on GN to do this for us; anecdotally without this builds + # take significantly longer with LTO enabled and it doesn't hurt anything. + filter-lto + fi + + if [ "$use_lto" = "false" ] && use official; 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 + + # 936858 + if tc-ld-is-mold; then + eerror "Your toolchain is using the mold linker." + eerror "This is not supported by Chromium." + die "Please switch to a different linker." + fi + + if use !bundled-toolchain; then + llvm-r1_pkg_setup + rust_pkg_setup + fi + + # Forcing clang; respect llvm_slot_x to enable selection of impl from LLVM_COMPAT + AR=llvm-ar + CPP="${CHOST}-clang++-${LLVM_SLOT} -E" + NM=llvm-nm + CC="${CHOST}-clang-${LLVM_SLOT}" + CXX="${CHOST}-clang++-${LLVM_SLOT}" + + 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 + + # 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 + + # Users should never hit this, it's purely a 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 + fi + + chromium_suid_sandbox_check_kernel_config +} + +src_unpack() { + unpack ${P}-linux.tar.xz + # These should only be required when we're not using the official toolchain + if use !bundled-toolchain; then + unpack chromium-patches-${PATCH_V}.tar.bz2 + unpack chromium-patches-copium-${COPIUM_COMMIT:0:10}.tar.gz + fi + + use pgo && unpack chromium-profiler-0.2.tar + + if use test; then + # A new testdata tarball is available for each release; but testfonts tend to remain stable + # for the duration of a release. + # This unpacks directly into/over ${WORKDIR}/${P} so we can just use `unpack`. + unpack ${P}-linux-testdata.tar.xz + # This just contains a bunch of font files that need to be unpacked (or moved) to the correct location. + local testfonts_dir="${WORKDIR}/${P}/third_party/test_fonts" + local testfonts_tar="${DISTDIR}/chromium-testfonts-${TEST_FONT:0:10}.tar.gz" + 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 +} + +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 + + # To know which patches are safe to drop from files/ after tidying up old ebuilds: + # comm -13 \ + # <(grep 'FILESDIR' *.ebuild | grep patch | grep -o '\${FILESDIR}/[^") ]*' \ + # | sed 's|\${FILESDIR}/|files/|; s|\${PN}|chromium|' | sort -u) \ + # <(find files/ -name "*.patch" | sort) + + local PATCHES=( + "${FILESDIR}/${PN}-cross-compile.patch" + "${FILESDIR}/${PN}-109-system-zlib.patch" + "${FILESDIR}/${PN}-131-unbundle-icu-target.patch" + "${FILESDIR}/${PN}-134-bindgen-custom-toolchain.patch" + "${FILESDIR}/${PN}-135-oauth2-client-switches.patch" + "${FILESDIR}/${PN}-138-nodejs-version-check.patch" + ) + + PATCHES+=( + "${WORKDIR}/copium/cr143-libsync-__BEGIN_DECLS.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 + shopt -s globstar nullglob + # 130: moved the PPC64 patches into the chromium-patches repo + local patch + for patch in "${WORKDIR}/chromium-patches-${PATCH_V}"/**/*.patch; do + if [[ ${patch} == *"ppc64le"* ]]; then + use ppc64 && PATCHES+=( "${patch}" ) + else + PATCHES+=( "${patch}" ) + fi + done + + shopt -u globstar nullglob + + remove_compiler_builtins + + # 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 + + # Oxidised hacks, let's keep 'em all in one place + # This is a nightly option that does not exist in older releases + # https://github.com/rust-lang/rust/commit/389a399a501a626ebf891ae0bb076c25e325ae64 + if ver_test ${RUST_SLOT} -lt "1.83.0"; then + sed '/rustflags = \[ "-Zdefault-visibility=hidden" \]/d' -i build/config/gcc/BUILD.gn || + die "Failed to remove default visibility nightly option" + fi + + # Upstream Rust replaced adler with adler2, for older versions of Rust we still need + # to tell GN that we have the older lib when it tries to copy the Rust sysroot + # into the bulid directory. + if ver_test ${RUST_SLOT} -lt "1.86.0"; then + sed -i 's/adler2/adler/' build/rust/std/BUILD.gn || + die "Failed to tell GN that we have adler and not adler2" + fi + + if ver_test ${RUST_SLOT} -lt "1.89.0"; then + # The rust allocator was changed in 1.89.0, so we need to patch sources for older versions + PATCHES+=( "${FILESDIR}/chromium-140-__rust_no_alloc_shim_is_unstable.patch" ) + fi + + if ver_test ${RUST_SLOT} -lt "1.90.0"; then + PATCHES+=( + "${WORKDIR}/copium/cr142-rust-pre1.90.patch" + ) + fi + + if ver_test ${RUST_SLOT} -lt "1.91.0"; then + PATCHES+=( + "${WORKDIR}/copium/cr142-crabbyavif-gn-rust-pre1.91.patch" + "${WORKDIR}/copium/cr142-crabbyavif-src-rust-pre1.91.patch" + ) + fi + fi + + default + + 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 + + # 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 + base/third_party/double_conversion + 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 + net/third_party/mozilla_security_manager + net/third_party/quic + net/third_party/uri_template + third_party/abseil-cpp + third_party/angle + third_party/angle/src/common/third_party/xxhash + third_party/angle/src/third_party/ceval + third_party/angle/src/third_party/libXNVCtrl + 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 + third_party/brotli + 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/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 + third_party/compiler-rt # Since M137 atomic is required; we could probably unbundle this as a target of opportunity. + 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 + third_party/crc32c + third_party/cros_system_api + third_party/d3 + third_party/dav1d + third_party/dawn + third_party/dawn/third_party/gn/webgpu-cts + third_party/dawn/third_party/khronos + 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/esm/third_party/mitt + third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/parsel-js + third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/rxjs + 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/ffmpeg + 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/highway + third_party/hunspell + third_party/ink_stroke_modeler/src/ink_stroke_modeler + third_party/ink_stroke_modeler/src/ink_stroke_modeler/internal + 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 + third_party/jsoncpp + third_party/khronos + third_party/lens_server_proto + third_party/leveldatabase + third_party/libaddressinput + third_party/libaom + third_party/libaom/source/libaom/third_party/fastfeat + third_party/libaom/source/libaom/third_party/SVT-AV1 + third_party/libaom/source/libaom/third_party/vector + third_party/libaom/source/libaom/third_party/x86inc + third_party/libc++ + 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 + third_party/libva_protected_content + third_party/libvpx + third_party/libvpx/source/libvpx/third_party/x86inc + third_party/libwebm + third_party/libx11 + third_party/libxcb-keysyms + third_party/libxml/chromium + third_party/libyuv + third_party/libzip + third_party/lit + third_party/llvm-libc + third_party/llvm-libc/src/shared/ + 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/opus + 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 + third_party/pdfium/third_party/libopenjpeg + third_party/pdfium/third_party/libtiff + third_party/perfetto + third_party/perfetto/protos/third_party/chromium + 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/re2 + 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/skia/third_party/vulkan + third_party/smhasher + third_party/snappy + 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/webrtc/rtc_base/third_party/sigslot + third_party/widevine + third_party/woff2 + 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 + third_party/xdg-utils + ) + + if use rar; then + keeplibs+=( third_party/unrar ) + fi + + if use test; then + # tar tvf /var/cache/distfiles/${P}-testdata.tar.xz | grep '^d' | grep 'third_party' | awk '{print $NF}' + 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/perfetto/protos/third_party/pprof + third_party/test_fonts + third_party/test_fonts/fontconfig + ) + fi + + # USE=system-* + if ! use system-harfbuzz; then + keeplibs+=( third_party/harfbuzz-ng ) + fi + + if ! use system-icu; then + keeplibs+=( third_party/icu ) + fi + + if ! use system-zstd; then + keeplibs+=( third_party/zstd ) + 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/h264q |
