From b787c81d76de45fb5ea22ca329d720d8e8266fb3 Mon Sep 17 00:00:00 2001 From: odrling Date: Fri, 24 Dec 2021 05:41:44 +0100 Subject: [PATCH] ungoogled-chromium: fix pipewire dep --- www-client/ungoogled-chromium/Manifest | 3 + .../files/chromium-93-InkDropHost-crash.patch | 25 + .../files/chromium-93-ffmpeg-4.4.patch | 60 + .../files/chromium-94-ffmpeg-roll.patch | 49 + .../files/chromium-96-EnumTable-crash.patch | 76 ++ .../files/chromium-96-freetype-unbundle.patch | 10 + .../files/chromium-browser.xml | 13 + .../files/chromium-glibc-2.34.patch | 50 + .../files/chromium-launcher-r7.sh | 59 + .../files/chromium-shim_headers.patch | 48 + .../files/chromium-system-jsoncpp-r2.patch | 56 + .../files/chromium-system-openjpeg-r2.patch | 26 + .../files/chromium-ucf-dict-utility.patch | 111 ++ ...se-oauth2-client-switches-as-default.patch | 17 + .../ungoogled-chromium/files/chromium.default | 10 + .../sql-VirtualCursor-standard-layout.patch | 231 ++++ .../ungoogled-chromium/files/update-dicts.sh | 58 + .../files/vdpau-support-r4.patch | 56 + www-client/ungoogled-chromium/metadata.xml | 52 + ...ungoogled-chromium-96.0.4664.110-r1.ebuild | 1183 +++++++++++++++++ 20 files changed, 2193 insertions(+) create mode 100644 www-client/ungoogled-chromium/Manifest create mode 100644 www-client/ungoogled-chromium/files/chromium-93-InkDropHost-crash.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-93-ffmpeg-4.4.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-94-ffmpeg-roll.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-96-EnumTable-crash.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-96-freetype-unbundle.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-browser.xml create mode 100644 www-client/ungoogled-chromium/files/chromium-glibc-2.34.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-launcher-r7.sh create mode 100644 www-client/ungoogled-chromium/files/chromium-shim_headers.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-system-jsoncpp-r2.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-system-openjpeg-r2.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-ucf-dict-utility.patch create mode 100644 www-client/ungoogled-chromium/files/chromium-use-oauth2-client-switches-as-default.patch create mode 100644 www-client/ungoogled-chromium/files/chromium.default create mode 100644 www-client/ungoogled-chromium/files/sql-VirtualCursor-standard-layout.patch create mode 100644 www-client/ungoogled-chromium/files/update-dicts.sh create mode 100644 www-client/ungoogled-chromium/files/vdpau-support-r4.patch create mode 100644 www-client/ungoogled-chromium/metadata.xml create mode 100644 www-client/ungoogled-chromium/ungoogled-chromium-96.0.4664.110-r1.ebuild diff --git a/www-client/ungoogled-chromium/Manifest b/www-client/ungoogled-chromium/Manifest new file mode 100644 index 0000000..5248252 --- /dev/null +++ b/www-client/ungoogled-chromium/Manifest @@ -0,0 +1,3 @@ +DIST chromium-96-patchset-4.tar.xz 4812 BLAKE2B 5d82d212b8ec1689be6f4a7a0646256311d06c17e74ee0e5b2035c32125a5235e4b6b7605cefffa367cc53e651be17b75f5e339149b4c80dca50cd959b1623f1 SHA512 a72c1bb2c58e9e2912a641093c153f01ad7239dc971c7c96481ba4164204afe41741f3253e8af03070dab8276179784dc6a11761b39ad7902ed2553016778282 +DIST chromium-96.0.4664.110.tar.xz 1209944416 BLAKE2B 1cec11b248b9225e47caf6bf8ec243e301bb63df2b0a070fb55b829b712e513b2510944f72306cebde3715704cae5b2c6be83847e91b358cb5135b56d55255b3 SHA512 7db962dc7016f531c33e915408303f06f429b53d1c5a69b281e64f6204d4bdb413fd281c3d891bb696d846f80f6182289c10f4b19b3b4c2c8b7fd72070de3f02 +DIST ungoogled-chromium-96.0.4664.110-1.tar.gz 716247 BLAKE2B 8c5e9298fd5c1aba367e92208e720b5a4249a60f831f6d87e1ff848094266bf7d7cc9cc06d30b9e37b80df32ebb2e61b6b47af581583b1e15222e2d53a5d5a33 SHA512 c29c2723df6c984c4102144561f96073250f2a3d228faeb1901ad8a8002dee291471ffdd02891f7b31672f1f6353c93664563c0c39d295dc5f06368b45e2a5d3 diff --git a/www-client/ungoogled-chromium/files/chromium-93-InkDropHost-crash.patch b/www-client/ungoogled-chromium/files/chromium-93-InkDropHost-crash.patch new file mode 100644 index 0000000..54d16db --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-93-InkDropHost-crash.patch @@ -0,0 +1,25 @@ +diff --git a/ui/views/animation/ink_drop_host_view.h b/ui/views/animation/ink_drop_host_view.h +index bd0975b..e5df288 100644 +--- a/ui/views/animation/ink_drop_host_view.h ++++ b/ui/views/animation/ink_drop_host_view.h +@@ -238,6 +238,11 @@ class VIEWS_EXPORT InkDropHost { + // Used to observe View and inform the InkDrop of host-transform changes. + ViewLayerTransformObserver host_view_transform_observer_; + ++ // Declared before |ink_drop_|, because InkDropImpl may call ++ // RemoveInkDropLayer on partly destructed InkDropHost. In ++ // that case |ink_drop_mask_| must be still valid. ++ std::unique_ptr ink_drop_mask_; ++ + // Should not be accessed directly. Use GetInkDrop() instead. + std::unique_ptr ink_drop_; + +@@ -261,8 +266,6 @@ class VIEWS_EXPORT InkDropHost { + int ink_drop_small_corner_radius_ = 2; + int ink_drop_large_corner_radius_ = 4; + +- std::unique_ptr ink_drop_mask_; +- + base::RepeatingCallback()> create_ink_drop_callback_; + base::RepeatingCallback()> + create_ink_drop_ripple_callback_; diff --git a/www-client/ungoogled-chromium/files/chromium-93-ffmpeg-4.4.patch b/www-client/ungoogled-chromium/files/chromium-93-ffmpeg-4.4.patch new file mode 100644 index 0000000..5dbf541 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-93-ffmpeg-4.4.patch @@ -0,0 +1,60 @@ +--- chromium-93.0.4577.63/media/filters/ffmpeg_demuxer.cc.orig 2021-09-07 08:38:33.765397601 +0200 ++++ chromium-93.0.4577.63/media/filters/ffmpeg_demuxer.cc 2021-09-07 09:03:32.575927180 +0200 +@@ -427,11 +427,19 @@ + scoped_refptr buffer; + + if (type() == DemuxerStream::TEXT) { ++#if defined FF_API_BUFFER_SIZE_T && ! FF_API_BUFFER_SIZE_T + size_t id_size = 0; ++#else ++ int id_size = 0; ++#endif + uint8_t* id_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_WEBVTT_IDENTIFIER, &id_size); + ++#if defined FF_API_BUFFER_SIZE_T && ! FF_API_BUFFER_SIZE_T + size_t settings_size = 0; ++#else ++ int settings_size = 0; ++#endif + uint8_t* settings_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_WEBVTT_SETTINGS, &settings_size); + +@@ -443,7 +451,11 @@ + buffer = DecoderBuffer::CopyFrom(packet->data, packet->size, + side_data.data(), side_data.size()); + } else { ++#if defined FF_API_BUFFER_SIZE_T && ! FF_API_BUFFER_SIZE_T + size_t side_data_size = 0; ++#else ++ int side_data_size = 0; ++#endif + uint8_t* side_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, &side_data_size); + +@@ -504,7 +516,11 @@ + packet->size - data_offset); + } + ++#if defined FF_API_BUFFER_SIZE_T && ! FF_API_BUFFER_SIZE_T + size_t skip_samples_size = 0; ++#else ++ int skip_samples_size = 0; ++#endif + const uint32_t* skip_samples_ptr = + reinterpret_cast(av_packet_get_side_data( + packet.get(), AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size)); +--- chromium-93.0.4577.63/media/filters/audio_decoder_unittest.cc.orig 2021-09-01 03:39:39.000000000 +0200 ++++ chromium-93.0.4577.63/media/filters/audio_decoder_unittest.cc 2021-09-07 09:00:33.311446755 +0200 +@@ -109,7 +109,11 @@ + } + + // If the timestamp is positive, try to use FFmpeg's discard data. ++#if defined FF_API_BUFFER_SIZE_T && ! FF_API_BUFFER_SIZE_T + size_t skip_samples_size = 0; ++#else ++ int skip_samples_size = 0; ++#endif + const uint32_t* skip_samples_ptr = + reinterpret_cast(av_packet_get_side_data( + packet, AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size)); diff --git a/www-client/ungoogled-chromium/files/chromium-94-ffmpeg-roll.patch b/www-client/ungoogled-chromium/files/chromium-94-ffmpeg-roll.patch new file mode 100644 index 0000000..68f2636 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-94-ffmpeg-roll.patch @@ -0,0 +1,49 @@ +From b94755e4633045be96ab5e0bdde0db7e16a804bd Mon Sep 17 00:00:00 2001 +From: "liberato@chromium.org" +Date: Fri, 6 Aug 2021 04:25:31 +0000 +Subject: [PATCH] FFmpeg M94 roll. + +Contains DEPS update + chromium-side fixes. + +Bug: 1227259 +Change-Id: I61c5eaa789ea12c17d0cbcbf837435b9cf32479b +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3011889 +Reviewed-by: Thomas Guilbert +Commit-Queue: Frank Liberato +Cr-Commit-Position: refs/heads/master@{#909174} +--- + media/ffmpeg/ffmpeg_common.h | 1 + + media/filters/ffmpeg_demuxer.cc | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h +index cede8ac5a7..97d6307e28 100644 +--- a/media/ffmpeg/ffmpeg_common.h ++++ b/media/ffmpeg/ffmpeg_common.h +@@ -29,6 +29,7 @@ extern "C" { + #include + #include + #include ++#include + #include + #include + #include +diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc +index ac4713b072..605001d935 100644 +--- a/media/filters/ffmpeg_demuxer.cc ++++ b/media/filters/ffmpeg_demuxer.cc +@@ -106,12 +106,12 @@ static base::TimeDelta ExtractStartTime(AVStream* stream) { + + // Next try to use the first DTS value, for codecs where we know PTS == DTS + // (excludes all H26x codecs). The start time must be returned in PTS. +- if (stream->first_dts != kNoFFmpegTimestamp && ++ if (av_stream_get_first_dts(stream) != kNoFFmpegTimestamp && + stream->codecpar->codec_id != AV_CODEC_ID_HEVC && + stream->codecpar->codec_id != AV_CODEC_ID_H264 && + stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) { + const base::TimeDelta first_pts = +- ConvertFromTimeBase(stream->time_base, stream->first_dts); ++ ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream)); + if (first_pts < start_time) + start_time = first_pts; + } diff --git a/www-client/ungoogled-chromium/files/chromium-96-EnumTable-crash.patch b/www-client/ungoogled-chromium/files/chromium-96-EnumTable-crash.patch new file mode 100644 index 0000000..9736739 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-96-EnumTable-crash.patch @@ -0,0 +1,76 @@ +diff --git a/components/cast_channel/enum_table.h b/components/cast_channel/enum_table.h +index aad9e08..2f3fcad 100644 +--- a/components/cast_channel/enum_table.h ++++ b/components/cast_channel/enum_table.h +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + + #include "base/check_op.h" + #include "base/macros.h" +@@ -188,7 +189,6 @@ class + inline constexpr GenericEnumTableEntry(int32_t value); + inline constexpr GenericEnumTableEntry(int32_t value, base::StringPiece str); + +- GenericEnumTableEntry(const GenericEnumTableEntry&) = delete; + GenericEnumTableEntry& operator=(const GenericEnumTableEntry&) = delete; + + private: +@@ -254,7 +254,6 @@ class EnumTable { + constexpr Entry(E value, base::StringPiece str) + : GenericEnumTableEntry(static_cast(value), str) {} + +- Entry(const Entry&) = delete; + Entry& operator=(const Entry&) = delete; + }; + +@@ -313,15 +312,14 @@ class EnumTable { + if (is_sorted_) { + const std::size_t index = static_cast(value); + if (ANALYZER_ASSUME_TRUE(index < data_.size())) { +- const auto& entry = data_.begin()[index]; ++ const auto& entry = data_[index]; + if (ANALYZER_ASSUME_TRUE(entry.has_str())) + return entry.str(); + } + return absl::nullopt; + } + return GenericEnumTableEntry::FindByValue( +- reinterpret_cast(data_.begin()), +- data_.size(), static_cast(value)); ++ &data_[0], data_.size(), static_cast(value)); + } + + // This overload of GetString is designed for cases where the argument is a +@@ -349,8 +347,7 @@ class EnumTable { + // enum value directly. + absl::optional GetEnum(base::StringPiece str) const { + auto* entry = GenericEnumTableEntry::FindByString( +- reinterpret_cast(data_.begin()), +- data_.size(), str); ++ &data_[0], data_.size(), str); + return entry ? static_cast(entry->value) : absl::optional(); + } + +@@ -365,7 +362,7 @@ class EnumTable { + // Align the data on a cache line boundary. + alignas(64) + #endif +- std::initializer_list data_; ++ const std::vector data_; + bool is_sorted_; + + constexpr EnumTable(std::initializer_list data, bool is_sorted) +@@ -377,8 +374,8 @@ class EnumTable { + + for (std::size_t i = 0; i < data.size(); i++) { + for (std::size_t j = i + 1; j < data.size(); j++) { +- const Entry& ei = data.begin()[i]; +- const Entry& ej = data.begin()[j]; ++ const Entry& ei = data[i]; ++ const Entry& ej = data[j]; + DCHECK(ei.value != ej.value) + << "Found duplicate enum values at indices " << i << " and " << j; + DCHECK(!(ei.has_str() && ej.has_str() && ei.str() == ej.str())) diff --git a/www-client/ungoogled-chromium/files/chromium-96-freetype-unbundle.patch b/www-client/ungoogled-chromium/files/chromium-96-freetype-unbundle.patch new file mode 100644 index 0000000..6ef5ff6 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-96-freetype-unbundle.patch @@ -0,0 +1,10 @@ +--- a/build/linux/BUILD.gn ++++ b/build/linux/BUILD.gn +@@ -23,6 +23,7 @@ + # the system, use with caution,for details see build/config/freetype/BUILD.gn. + pkg_config("freetype_from_pkgconfig") { + visibility = [ ++ "//build/config/freetype:freetype", + "//third_party:freetype_harfbuzz", + "//third_party/harfbuzz-ng:harfbuzz_source", + ] diff --git a/www-client/ungoogled-chromium/files/chromium-browser.xml b/www-client/ungoogled-chromium/files/chromium-browser.xml new file mode 100644 index 0000000..2c95a55 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-browser.xml @@ -0,0 +1,13 @@ + + + + + + Chromium + chromium-browser + chromium-browser %s + chromium-browser + false + + + diff --git a/www-client/ungoogled-chromium/files/chromium-glibc-2.34.patch b/www-client/ungoogled-chromium/files/chromium-glibc-2.34.patch new file mode 100644 index 0000000..64c03a6 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-glibc-2.34.patch @@ -0,0 +1,50 @@ +From 600d63c2c59a9892dbc5423d7d8bb1565a9f91e7 Mon Sep 17 00:00:00 2001 +From: Michel Salim +Date: Thu, 04 Nov 2021 14:22:40 -0700 +Subject: [PATCH] Handle long SIGSTKSZ in glibc > 2.33 + +`SIGSTKSZ` is no longer constant in glibc > 2.33 but a function +returning a long. Cast before taking `max`. + +See https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS;h=85e84fe53699fe9e392edffa993612ce08b2954a;hb=HEAD + +Signed-off-by: Michel Salim +Change-Id: I197f8ff3053eede80d6aed096be4f0113dd43241 +(relocated to chromium repo, removed static) +--- + +diff --git a/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc b/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc +index ca353c4..5cdabcf 100644 +--- a/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc ++++ b/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc +@@ -138,7 +138,7 @@ + // SIGSTKSZ may be too small to prevent the signal handlers from overrunning + // the alternative stack. Ensure that the size of the alternative stack is + // large enough. +- static const unsigned kSigStackSize = std::max(16384, SIGSTKSZ); ++ const unsigned kSigStackSize = std::max(16384U, (unsigned)SIGSTKSZ); + + // Only set an alternative stack if there isn't already one, or if the current + // one is too small. +diff --git a/sandbox/linux/services/credentials.cc b/sandbox/linux/services/credentials.cc +index ca6b595..1c1ee42 100644 +--- a/sandbox/linux/services/credentials.cc ++++ b/sandbox/linux/services/credentials.cc +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -100,7 +101,8 @@ bool ChrootToSafeEmptyDir() { + // TODO(crbug.com/1247458) Broken in MSan builds after LLVM f1bb30a4956f. + clone_flags |= CLONE_VM | CLONE_VFORK | CLONE_SETTLS; + +- char tls_buf[PTHREAD_STACK_MIN] = {0}; ++ char tls_buf[PTHREAD_STACK_MIN]; ++ memset(tls_buf, 0, PTHREAD_STACK_MIN); + tls = tls_buf; + #endif + diff --git a/www-client/ungoogled-chromium/files/chromium-launcher-r7.sh b/www-client/ungoogled-chromium/files/chromium-launcher-r7.sh new file mode 100644 index 0000000..1163ff3 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-launcher-r7.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# Allow the user to override command-line flags, bug #357629. +# This is based on Debian's chromium-browser package, and is intended +# to be consistent with Debian. +for f in /etc/chromium/*; do + [[ -f ${f} ]] && source "${f}" +done + +# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system +# default CHROMIUM_FLAGS (from /etc/chromium/default). +CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-"$CHROMIUM_FLAGS"} + +# Let the wrapped binary know that it has been run through the wrapper +export CHROME_WRAPPER=$(readlink -f "$0") + +PROGDIR=${CHROME_WRAPPER%/*} + +case ":$PATH:" in + *:$PROGDIR:*) + # $PATH already contains $PROGDIR + ;; + *) + # Append $PROGDIR to $PATH + export PATH="$PATH:$PROGDIR" + ;; +esac + +if [[ ${EUID} == 0 && -O ${XDG_CONFIG_HOME:-${HOME}} ]]; then + # Running as root with HOME owned by root. + # Pass --user-data-dir to work around upstream failsafe. + CHROMIUM_FLAGS="--user-data-dir=${XDG_CONFIG_HOME:-${HOME}/.config}/chromium + ${CHROMIUM_FLAGS}" +fi + +# Select session type and platform +if @@OZONE_AUTO_SESSION@@; then + platform= + if [[ ${XDG_SESSION_TYPE} == x11 ]]; then + platform=x11 + elif [[ ${XDG_SESSION_TYPE} == wayland ]]; then + platform=wayland + else + if [[ -n ${WAYLAND_DISPLAY} ]]; then + platform=wayland + else + platform=x11 + fi + fi + if ${DISABLE_OZONE_PLATFORM:-false}; then + platform=x11 + fi + CHROMIUM_FLAGS="--ozone-platform=${platform} ${CHROMIUM_FLAGS}" +fi + +# Set the .desktop file name +export CHROME_DESKTOP="chromium-browser-chromium.desktop" + +exec -a "chromium-browser" "$PROGDIR/chrome" --extra-plugin-dir=/usr/lib/nsbrowser/plugins ${CHROMIUM_FLAGS} "$@" diff --git a/www-client/ungoogled-chromium/files/chromium-shim_headers.patch b/www-client/ungoogled-chromium/files/chromium-shim_headers.patch new file mode 100644 index 0000000..9372632 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-shim_headers.patch @@ -0,0 +1,48 @@ +From e273172bbafedca36984fc40f4aa6c44b79ac2ef Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann +Date: Fri, 25 Dec 2020 09:10:32 +0000 +Subject: [PATCH] shim_headers: fix outputs generation + +--- + build/shim_headers.gni | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/build/shim_headers.gni b/build/shim_headers.gni +index 0900cba..5138647 100644 +--- a/build/shim_headers.gni ++++ b/build/shim_headers.gni +@@ -6,6 +6,8 @@ template("shim_headers") { + action_name = "gen_${target_name}" + config_name = "${target_name}_config" + shim_headers_path = "${root_gen_dir}/shim_headers/${target_name}" ++ shim_root_path = rebase_path(invoker.root_path) ++ shim_rel_path = rebase_path("${shim_root_path}", rebase_path("//")) + + config(config_name) { + include_dirs = [ shim_headers_path ] +@@ -16,7 +18,7 @@ template("shim_headers") { + args = [ + "--generate", + "--headers-root", +- rebase_path(invoker.root_path), ++ "${shim_root_path}", + "--output-directory", + rebase_path(shim_headers_path), + ] +@@ -27,9 +29,10 @@ template("shim_headers") { + ] + } + args += invoker.headers +- +- outputs = process_file_template(invoker.headers, +- "${shim_headers_path}/{{source_file_part}}") ++ outputs = [] ++ foreach(shim_header, invoker.headers) { ++ outputs += [ "${shim_headers_path}/${shim_rel_path}/" + shim_header ] ++ } + } + + group(target_name) { +-- +2.26.2 + diff --git a/www-client/ungoogled-chromium/files/chromium-system-jsoncpp-r2.patch b/www-client/ungoogled-chromium/files/chromium-system-jsoncpp-r2.patch new file mode 100644 index 0000000..d21a43f --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-system-jsoncpp-r2.patch @@ -0,0 +1,56 @@ +--- a/third_party/jsoncpp/BUILD.gn ++++ b/third_party/jsoncpp/BUILD.gn +@@ -3,49 +3,15 @@ + # found in the LICENSE file. + + import("//testing/libfuzzer/fuzzer_test.gni") ++import("//build/config/linux/pkg_config.gni") + +-config("jsoncpp_config") { +- include_dirs = [ "source/include" ] +- +- # TODO(crbug.com/983223): Update JsonCpp BUILD.gn to remove deprecated +- # declaration flag. +- # This temporary flag allowing clients to update to the new version, and then +- # update to the new StreamWriter and CharReader classes. +- if (!is_win || is_clang) { +- cflags_cc = [ "-Wno-deprecated-declarations" ] +- } ++pkg_config("jsoncpp_config") { ++ packages = [ "jsoncpp" ] + } + +-source_set("jsoncpp") { +- sources = [ +- "source/include/json/allocator.h", +- "source/include/json/assertions.h", +- "source/include/json/config.h", +- "source/include/json/forwards.h", +- "source/include/json/json.h", +- "source/include/json/json_features.h", +- "source/include/json/reader.h", +- "source/include/json/value.h", +- "source/include/json/version.h", +- "source/include/json/writer.h", +- "source/src/lib_json/json_reader.cpp", +- "source/src/lib_json/json_tool.h", +- "source/src/lib_json/json_value.cpp", +- "source/src/lib_json/json_writer.cpp", +- ] +- ++group("jsoncpp") { + public_configs = [ ":jsoncpp_config" ] + +- defines = [ +- "JSON_USE_EXCEPTION=0", +- "JSON_USE_NULLREF=0", +- ] +- +- include_dirs = [ "source/src/lib_json" ] +- +- if (!is_win || is_clang) { +- cflags_cc = [ "-Wno-implicit-fallthrough" ] +- } + } + + if (build_with_chromium) { diff --git a/www-client/ungoogled-chromium/files/chromium-system-openjpeg-r2.patch b/www-client/ungoogled-chromium/files/chromium-system-openjpeg-r2.patch new file mode 100644 index 0000000..ab8e027 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-system-openjpeg-r2.patch @@ -0,0 +1,26 @@ +description: build using system openjpeg +author: Michael Gilbert + +--- a/third_party/pdfium/core/fpdfapi/render/BUILD.gn ++++ b/third_party/pdfium/core/fpdfapi/render/BUILD.gn +@@ -43,6 +43,7 @@ jumbo_source_set("render") { + ] + configs += [ "../../../:pdfium_core_config" ] + deps = [ ++ "../../../third_party:libopenjpeg2", + "../../../constants", + "../../fxcodec", + "../../fxcrt", +--- a/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.h ++++ b/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.h +@@ -13,8 +13,8 @@ + #include "core/fxcrt/unowned_ptr.h" + #include "third_party/base/span.h" + +-#if defined(USE_SYSTEM_LIBOPENJPEG2) +-#include ++#if 1 ++#include + #else + #include "third_party/libopenjpeg20/openjpeg.h" + #endif diff --git a/www-client/ungoogled-chromium/files/chromium-ucf-dict-utility.patch b/www-client/ungoogled-chromium/files/chromium-ucf-dict-utility.patch new file mode 100644 index 0000000..4c8abf3 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-ucf-dict-utility.patch @@ -0,0 +1,111 @@ +Taken from +https://github.com/qvint/ungoogled-chromium-fedora/commit/a68fdd679566da5134d916776f14e00c8e6a8042 + +--- a/chrome/tools/convert_dict/convert_dict.cc ++++ b/chrome/tools/convert_dict/convert_dict.cc +@@ -24,6 +24,7 @@ + #include "build/build_config.h" + #include "chrome/tools/convert_dict/aff_reader.h" + #include "chrome/tools/convert_dict/dic_reader.h" ++#include "components/spellcheck/common/spellcheck_common.h" + #include "third_party/hunspell/google/bdict_reader.h" + #include "third_party/hunspell/google/bdict_writer.h" + +@@ -76,13 +77,32 @@ bool VerifyWords(const convert_dict::Dic + } + + int PrintHelp() { +- printf("Usage: convert_dict \n\n"); +- printf("Example:\n"); +- printf(" convert_dict en-US\nwill read en-US.dic, en-US.dic_delta, and " +- "en-US.aff from the current directory and generate en-US.bdic\n\n"); ++ printf( ++ "Usage:\n" ++ " dict-utility list\n" ++ " dict-utility convert \n"); + return 1; + } + ++int PrintList() { ++ base::FilePath root("/"); ++ std::vector languages = spellcheck::SpellCheckLanguages(); ++ ++ for (auto &language : languages) { ++ std::string language_region = ++ spellcheck::GetSpellCheckLanguageRegion(language); ++ base::FilePath language_bdic_path = ++ spellcheck::GetVersionedFileName(language, root).BaseName(); ++ ++ printf("%s\t%s\t%s\n", ++ language.c_str(), ++ language_region.c_str(), ++ language_bdic_path.value().c_str()); ++ } ++ ++ return 0; ++} ++ + } // namespace + + #if defined(OS_WIN) +@@ -91,16 +111,15 @@ int wmain(int argc, wchar_t* argv[]) { + int main(int argc, char* argv[]) { + #endif + base::EnableTerminationOnHeapCorruption(); +- if (argc != 2) ++ if (argc == 2 && strcmp(argv[1], "list") == 0) ++ return PrintList(); ++ if (argc != 5 || strcmp(argv[1], "convert") != 0) + return PrintHelp(); + + base::AtExitManager exit_manager; + base::i18n::InitializeICU(); + +- base::FilePath file_base = base::FilePath(argv[1]); +- +- base::FilePath aff_path = +- file_base.ReplaceExtension(FILE_PATH_LITERAL(".aff")); ++ base::FilePath aff_path = base::FilePath(argv[2]); + printf("Reading %" PRFilePath " ...\n", aff_path.value().c_str()); + convert_dict::AffReader aff_reader(aff_path); + if (!aff_reader.Read()) { +@@ -108,8 +127,7 @@ int main(int argc, char* argv[]) { + return 1; + } + +- base::FilePath dic_path = +- file_base.ReplaceExtension(FILE_PATH_LITERAL(".dic")); ++ base::FilePath dic_path = base::FilePath(argv[3]); + printf("Reading %" PRFilePath " ...\n", dic_path.value().c_str()); + // DicReader will also read the .dic_delta file. + convert_dict::DicReader dic_reader(dic_path); +@@ -135,8 +153,7 @@ int main(int argc, char* argv[]) { + return 1; + } + +- base::FilePath out_path = +- file_base.ReplaceExtension(FILE_PATH_LITERAL(".bdic")); ++ base::FilePath out_path = base::FilePath(argv[4]); + printf("Writing %" PRFilePath " ...\n", out_path.value().c_str()); + FILE* out_file = base::OpenFile(out_path, "wb"); + if (!out_file) { +--- a/chrome/tools/convert_dict/BUILD.gn ++++ b/chrome/tools/convert_dict/BUILD.gn +@@ -34,6 +34,7 @@ executable("convert_dict") { + "//base", + "//base:i18n", + "//build/win:default_exe_manifest", ++ "//components/spellcheck/common", + "//third_party/hunspell", + ] + } +--- a/components/spellcheck/common/spellcheck_common.h ++++ b/components/spellcheck/common/spellcheck_common.h +@@ -30,6 +30,8 @@ static const size_t kMaxSyncableDictiona + // chrome/browser/resources/settings/languages_page/edit_dictionary_page.js + static const size_t kMaxCustomDictionaryWordBytes = 99; + ++std::string GetSpellCheckLanguageRegion(base::StringPiece input_language); ++ + base::FilePath GetVersionedFileName(base::StringPiece input_language, + const base::FilePath& dict_dir); diff --git a/www-client/ungoogled-chromium/files/chromium-use-oauth2-client-switches-as-default.patch b/www-client/ungoogled-chromium/files/chromium-use-oauth2-client-switches-as-default.patch new file mode 100644 index 0000000..9d9c57b --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium-use-oauth2-client-switches-as-default.patch @@ -0,0 +1,17 @@ +diff -upr chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc chromium-89.0.4389.58/google_apis/google_api_keys.cc +--- chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc 2021-02-24 22:37:18.494007649 +0000 ++++ chromium-89.0.4389.58/google_apis/google_api_keys.cc 2021-02-24 22:35:00.865777600 +0000 +@@ -154,11 +154,11 @@ class APIKeyCache { + + std::string default_client_id = CalculateKeyValue( + GOOGLE_DEFAULT_CLIENT_ID, +- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), nullptr, ++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), ::switches::kOAuth2ClientID, + std::string(), environment.get(), command_line, gaia_config); + std::string default_client_secret = CalculateKeyValue( + GOOGLE_DEFAULT_CLIENT_SECRET, +- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), nullptr, ++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), ::switches::kOAuth2ClientSecret, + std::string(), environment.get(), command_line, gaia_config); + + // We currently only allow overriding the baked-in values for the diff --git a/www-client/ungoogled-chromium/files/chromium.default b/www-client/ungoogled-chromium/files/chromium.default new file mode 100644 index 0000000..32a1d58 --- /dev/null +++ b/www-client/ungoogled-chromium/files/chromium.default @@ -0,0 +1,10 @@ +# Default settings for ungoogled-chromium. This file is sourced by /bin/bash +# from the chromium launcher. + +# Uncomment this to spoof timezone to UTC +#export TZ='Etc/UTC' + +# Options to pass to ungoogled-chromium. +# See https://github.com/Eloston/ungoogled-chromium#features for additional +# command-line switches. +#CHROMIUM_FLAGS="" diff --git a/www-client/ungoogled-chromium/files/sql-VirtualCursor-standard-layout.patch b/www-client/ungoogled-chromium/files/sql-VirtualCursor-standard-layout.patch new file mode 100644 index 0000000..a4864ba --- /dev/null +++ b/www-client/ungoogled-chromium/files/sql-VirtualCursor-standard-layout.patch @@ -0,0 +1,231 @@ +From 80368f8ba7a8bab13440463a254888311efe3986 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann +Date: Tue, 04 May 2021 15:00:19 +0000 +Subject: [PATCH] sql: make VirtualCursor standard layout type + +sql::recover::VirtualCursor needs to be a standard layout type, but +has members of type std::unique_ptr. However, std::unique_ptr is not +guaranteed to be standard layout. Compiling with clang combined with +gcc-11 libstdc++ fails because of this. Replace std::unique_ptr with +raw pointers. + +Bug: 1189788 +Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c +--- + +diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc +index 9ecaafe..839318a 100644 +--- a/sql/recover_module/btree.cc ++++ b/sql/recover_module/btree.cc +@@ -135,16 +135,25 @@ + "Move the destructor to the .cc file if it's non-trival"); + #endif // !DCHECK_IS_ON() + +-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept +- : page_id_(db_reader->page_id()), +- db_reader_(db_reader), +- cell_count_(ComputeCellCount(db_reader)), +- next_read_index_(0), +- last_record_size_(0) { ++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) { ++ DCHECK(db_reader); + DCHECK(IsOnValidPage(db_reader)); ++ page_id_ = db_reader->page_id(); ++ db_reader_ = db_reader; ++ cell_count_ = ComputeCellCount(db_reader); ++ next_read_index_ = 0; ++ last_record_size_ = 0; + DCHECK(DatabasePageReader::IsValidPageId(page_id_)); + } + ++void LeafPageDecoder::Reset() { ++ db_reader_ = nullptr; ++ page_id_ = 0; ++ cell_count_ = 0; ++ next_read_index_ = 0; ++ last_record_size_ = 0; ++} ++ + bool LeafPageDecoder::TryAdvance() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(CanAdvance()); +diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h +index d76d076..33114b0 100644 +--- a/sql/recover_module/btree.h ++++ b/sql/recover_module/btree.h +@@ -102,7 +102,7 @@ + // + // |db_reader| must have been used to read an inner page of a table B-tree. + // |db_reader| must outlive this instance. +- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept; ++ explicit LeafPageDecoder() noexcept = default; + ~LeafPageDecoder() noexcept = default; + + LeafPageDecoder(const LeafPageDecoder&) = delete; +@@ -150,6 +150,15 @@ + // read as long as CanAdvance() returns true. + bool TryAdvance(); + ++ // Initialize with DatabasePageReader ++ void Initialize(DatabasePageReader* db_reader); ++ ++ // Reset internal DatabasePageReader ++ void Reset(); ++ ++ // True if DatabasePageReader is valid ++ bool IsValid() { return (db_reader_ != nullptr); } ++ + // True if the given reader may point to an inner page in a table B-tree. + // + // The last ReadPage() call on |db_reader| must have succeeded. +@@ -163,14 +172,14 @@ + static int ComputeCellCount(DatabasePageReader* db_reader); + + // The number of the B-tree page this reader is reading. +- const int64_t page_id_; ++ int64_t page_id_; + // Used to read the tree page. + // + // Raw pointer usage is acceptable because this instance's owner is expected + // to ensure that the DatabasePageReader outlives this. +- DatabasePageReader* const db_reader_; ++ DatabasePageReader* db_reader_; + // Caches the ComputeCellCount() value for this reader's page. +- const int cell_count_ = ComputeCellCount(db_reader_); ++ int cell_count_; + + // The reader's cursor state. + // +diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc +index 0029ff9..42548bc 100644 +--- a/sql/recover_module/cursor.cc ++++ b/sql/recover_module/cursor.cc +@@ -26,7 +26,7 @@ + int VirtualCursor::First() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + inner_decoders_.clear(); +- leaf_decoder_ = nullptr; ++ leaf_decoder_.Reset(); + + AppendPageDecoder(table_->root_page_id()); + return Next(); +@@ -36,18 +36,18 @@ + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + record_reader_.Reset(); + +- while (!inner_decoders_.empty() || leaf_decoder_.get()) { +- if (leaf_decoder_.get()) { +- if (!leaf_decoder_->CanAdvance()) { ++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) { ++ if (leaf_decoder_.IsValid()) { ++ if (!leaf_decoder_.CanAdvance()) { + // The leaf has been exhausted. Remove it from the DFS stack. +- leaf_decoder_ = nullptr; ++ leaf_decoder_.Reset(); + continue; + } +- if (!leaf_decoder_->TryAdvance()) ++ if (!leaf_decoder_.TryAdvance()) + continue; + +- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(), +- leaf_decoder_->last_record_offset())) { ++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(), ++ leaf_decoder_.last_record_offset())) { + continue; + } + if (!record_reader_.Initialize()) +@@ -99,13 +99,13 @@ + int64_t VirtualCursor::RowId() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(record_reader_.IsInitialized()); +- DCHECK(leaf_decoder_.get()); +- return leaf_decoder_->last_record_rowid(); ++ DCHECK(leaf_decoder_.IsValid()); ++ return leaf_decoder_.last_record_rowid(); + } + + void VirtualCursor::AppendPageDecoder(int page_id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +- DCHECK(leaf_decoder_.get() == nullptr) ++ DCHECK(!leaf_decoder_.IsValid()) + << __func__ + << " must only be called when the current path has no leaf decoder"; + +@@ -113,7 +113,7 @@ + return; + + if (LeafPageDecoder::IsOnValidPage(&db_reader_)) { +- leaf_decoder_ = std::make_unique(&db_reader_); ++ leaf_decoder_.Initialize(&db_reader_); + return; + } + +diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h +index afcd690..b15c31d 100644 +--- a/sql/recover_module/cursor.h ++++ b/sql/recover_module/cursor.h +@@ -129,7 +129,7 @@ + std::vector> inner_decoders_; + + // Decodes the leaf page containing records. +- std::unique_ptr leaf_decoder_; ++ LeafPageDecoder leaf_decoder_; + + SEQUENCE_CHECKER(sequence_checker_); + }; +diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc +index 58e75de..5fe9620 100644 +--- a/sql/recover_module/pager.cc ++++ b/sql/recover_module/pager.cc +@@ -23,8 +23,7 @@ + "ints are not appropriate for representing page IDs"); + + DatabasePageReader::DatabasePageReader(VirtualTable* table) +- : page_data_(std::make_unique(table->page_size())), +- table_(table) { ++ : page_data_(), table_(table) { + DCHECK(table != nullptr); + DCHECK(IsValidPageSize(table->page_size())); + } +@@ -57,8 +56,8 @@ + std::numeric_limits::max(), + "The |read_offset| computation above may overflow"); + +- int sqlite_status = +- RawRead(sqlite_file, read_size, read_offset, page_data_.get()); ++ int sqlite_status = RawRead(sqlite_file, read_size, read_offset, ++ const_cast(page_data_.data())); + + // |page_id_| needs to be set to kInvalidPageId if the read failed. + // Otherwise, future ReadPage() calls with the previous |page_id_| value +diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h +index 0e388ddc..99314e3 100644 +--- a/sql/recover_module/pager.h ++++ b/sql/recover_module/pager.h +@@ -5,6 +5,7 @@ + #ifndef SQL_RECOVER_MODULE_PAGER_H_ + #define SQL_RECOVER_MODULE_PAGER_H_ + ++#include + #include + #include + +@@ -70,7 +71,7 @@ + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_NE(page_id_, kInvalidPageId) + << "Successful ReadPage() required before accessing pager state"; +- return page_data_.get(); ++ return page_data_.data(); + } + + // The number of bytes in the page read by the last ReadPage() call. +@@ -137,7 +138,7 @@ + int page_id_ = kInvalidPageId; + // Stores the bytes of the last page successfully read by ReadPage(). + // The content is undefined if the last call to ReadPage() did not succeed. +- const std::unique_ptr page_data_; ++ const std::array page_data_; + // Raw pointer usage is acceptable because this instance's owner is expected + // to ensure that the VirtualTable outlives this. + VirtualTable* const table_; diff --git a/www-client/ungoogled-chromium/files/update-dicts.sh b/www-client/ungoogled-chromium/files/update-dicts.sh new file mode 100644 index 0000000..c5d600e --- /dev/null +++ b/www-client/ungoogled-chromium/files/update-dicts.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Taken from +# https://github.com/qvint/ungoogled-chromium-fedora/commit/a68fdd679566da5134d916776f14e00c8e6a8042 + +self="$(readlink -f "${0}")" +self_dir="$(dirname "${self}")" +dict_utility="${self_dir}/convert_dict" + +# Defaults. +hunspell_dicts_dir="/usr/share/myspell" +user_data_dir="${HOME}/.config/chromium" + +# Parse command-line arguments. +while [[ $# -gt 0 ]]; do + arg_name="${1}" + + case "${arg_name}" in + "--hunspell-dicts-dir") + hunspell_dicts_dir="${2}" + shift; shift + ;; + "--user-data-dir") + user_data_dir="${2}" + shift; shift + ;; + *) + echo -n "Usage: ungoogled-chromium-update-dicts " + echo "[--hunspell-dicts-dir DIR] [--user-data-dir DIR]" + exit 1 + esac +done + +# List all chromium language entries. +chromium_language_entries="$("${dict_utility}" list)" + +# Iterate through chromium language entries and make *.bdic files. +chromium_dicts_dir="${user_data_dir}/Dictionaries" +mkdir -p "${chromium_dicts_dir}" +while read -r chromium_language_entry; do + while read \ + chromium_language \ + chromium_language_region \ + chromium_bdic_basename; do + + hunspell_language_region="${chromium_language_region//-/_}" + aff_path="${hunspell_dicts_dir}/${hunspell_language_region}.aff" + dic_path="${hunspell_dicts_dir}/${hunspell_language_region}.dic" + bdic_path="${chromium_dicts_dir}/${chromium_bdic_basename}" + + if \ + [[ -f "${aff_path}" ]] && \ + [[ -f "${dic_path}" ]] && \ + [[ ! -f "${bdic_path}" ]]; then + "${dict_utility}" convert "${aff_path}" "${dic_path}" "${bdic_path}" + fi + done <<< "${chromium_language_entry}" +done <<< "${chromium_language_entries}" \ No newline at end of file diff --git a/www-client/ungoogled-chromium/files/vdpau-support-r4.patch b/www-client/ungoogled-chromium/files/vdpau-support-r4.patch new file mode 100644 index 0000000..2469a85 --- /dev/null +++ b/www-client/ungoogled-chromium/files/vdpau-support-r4.patch @@ -0,0 +1,56 @@ +--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc ++++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc +@@ -705,7 +705,7 @@ + // implementation we get from |vaapi_picture_factory_| requires the video + // processing pipeline for downloading the decoded frame from the internal + // surface, we need to create a |vpp_vaapi_wrapper_|. +- if (requires_vpp && buffer_allocation_mode_ != BufferAllocationMode::kNone) { ++ if (requires_vpp && buffer_allocation_mode_ != BufferAllocationMode::kWrapVdpau) { + if (!vpp_vaapi_wrapper_) { + vpp_vaapi_wrapper_ = VaapiWrapper::Create( + VaapiWrapper::kVideoProcess, VAProfileNone, +@@ -1209,6 +1209,11 @@ + + VaapiVideoDecodeAccelerator::BufferAllocationMode + VaapiVideoDecodeAccelerator::DecideBufferAllocationMode() { ++ // NVIDIA blobs use VDPAU ++ if (VaapiWrapper::GetImplementationType() == VAImplementation::kNVIDIAVDPAU) { ++ LOG(INFO) << "VA-API driver on VDPAU backend"; ++ return BufferAllocationMode::kWrapVdpau; ++ } + #if BUILDFLAG(USE_VAAPI_X11) + // The IMPORT mode is used for Android on Chrome OS, so this doesn't apply + // here. + +--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.h ++++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.h +@@ -204,6 +204,7 @@ class MEDIA_GPU_EXPORT VaapiVideoDecodeAccelerator + // Using |client_|s provided PictureBuffers and as many internally + // allocated. + kNormal, ++ kWrapVdpau, + }; + + // Decides the concrete buffer allocation mode, depending on the hardware +--- a/media/gpu/vaapi/vaapi_wrapper.cc ++++ b/media/gpu/vaapi/vaapi_wrapper.cc +@@ -131,6 +131,9 @@ media::VAImplementation VendorStringToImplementationType( + } else if (base::StartsWith(va_vendor_string, "Intel iHD driver", + base::CompareCase::SENSITIVE)) { + return media::VAImplementation::kIntelIHD; ++ } else if (base::StartsWith(va_vendor_string, "Splitted-Desktop Systems VDPAU", ++ base::CompareCase::SENSITIVE)) { ++ return media::VAImplementation::kNVIDIAVDPAU; + } + return media::VAImplementation::kOther; + } +--- a/media/gpu/vaapi/vaapi_wrapper.h ++++ b/media/gpu/vaapi/vaapi_wrapper.h +@@ -79,6 +79,7 @@ enum class VAImplementation { + kIntelIHD, + kOther, + kInvalid, ++ kNVIDIAVDPAU, + }; + + // This class handles VA-API calls and ensures proper locking of VA-API calls diff --git a/www-client/ungoogled-chromium/metadata.xml b/www-client/ungoogled-chromium/metadata.xml new file mode 100644 index 0000000..bc84597 --- /dev/null +++ b/www-client/ungoogled-chromium/metadata.xml @@ -0,0 +1,52 @@ + + + + + PF4Public@users.noreply.github.com + + + Eloston/ungoogled-chromium + https://github.com/Eloston/ungoogled-chromium/issues + https://ungoogled-software.github.io/ungoogled-chromium-wiki/ + + + ungoogled-chromium is Google Chromium, sans integration with Google. + It also features some tweaks to enhance privacy, control, and + transparency (almost all of which require manual activation or enabling). + + ungoogled-chromium retains the default Chromium experience as closely as + possible. Unlike other Chromium forks that have their own visions of a + web browser, ungoogled-chromium is essentially a drop-in replacement for + Chromium. + + + Build with CFI (Control Flow Integrity) enabled. It requires "-stdlib=libc++", see #40 for more details. + Use Clang compiler instead of GCC + Patch and build the convert_dict utility. The script will be installed into /usr/lib64/chromium-browser/update-dicts.sh. More info here: https://github.com/Eloston/ungoogled-chromium/issues/188#issuecomment-444752907 + Enable DCHECK feature with severity configurable at runtime. Mostly intended for debugging and development, NOT RECOMMENDED for general use. + Build chromedriver + Enable support for Google Hangouts features such as screen sharing + Build Ozone only with headless backend, NOT RECOMMENDED for general uses + Enable JavaScript type-checking for Chrome's web technology-based UI. Requires Java. + Enable Official build instead of Developer build. + Whether to enable ThinLTO optimizations. Turning ThinLTO optimizations on can substantially increase link time and binary size, but they generally also make binaries a fair bit faster. + Optimize parts of Chromium's UI written with web technologies (HTML/CSS/JS) for runtime performance purposes. This does more work at compile time for speed benefits at runtime. + Use PartitionAlloc explicitly + Enable PGO. Requires clang and bundled binary profile data in sources tree. + Enable proprietary codecs like H.264, MP3 + Enable support for remote desktop and screen cast using media-video/pipewire + Build the SUID sandbox, which is only needed on CONFIG_USER_NS=n kernels + Use the system media-video/ffmpeg instead of the bundled one + Use the system media-libs/harfbuzz instead of the bundled one + Use the system dev-libs/icu instead of the bundled one + Use the system dev-libs/jsoncpp instead of the bundled one + Use the system dev-libs/libevent instead of the bundled one + Use the system media-libs/libvpx instead of the bundled one + Use the system media-libs/openh264 instead of the bundled one. If disabled, it will restrict USE=bindist. + Use the system-wide media-libs/openjpeg instead of the bundled one. OpenJPEG use are exclusively for Chromium's PDF viewer. + Use the system-wide dev-libs/re2 instead of the bundled one + Use tcmalloc explicitly + Build with ThinLTO support. LTO (Link Time Optimization) achieves better runtime performance through whole-program analysis and cross-module optimization (highly recommended). + Unsupported closed-source DRM capability (required by Netflix VOD) + + diff --git a/www-client/ungoogled-chromium/ungoogled-chromium-96.0.4664.110-r1.ebuild b/www-client/ungoogled-chromium/ungoogled-chromium-96.0.4664.110-r1.ebuild new file mode 100644 index 0000000..7adc2bd --- /dev/null +++ b/www-client/ungoogled-chromium/ungoogled-chromium-96.0.4664.110-r1.ebuild @@ -0,0 +1,1183 @@ +# Copyright 2009-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +PYTHON_COMPAT=( python3_{8..10} ) +PYTHON_REQ_USE="xml" + +CHROMIUM_LANGS="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 vi zh-CN zh-TW" + +inherit check-reqs chromium-2 desktop flag-o-matic ninja-utils pax-utils python-any-r1 readme.gentoo-r1 toolchain-funcs xdg-utils + +UGC_PVR="${PVR/r}" +UGC_PF="${PN}-${UGC_PVR}" +UGC_URL="https://github.com/Eloston/${PN}/archive/" +#UGC_COMMIT_ID="14ddda72b1b44f743153f1d394759e149c1b1f0d" + +# 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 + +if [ -z "$UGC_COMMIT_ID" ] +then + UGC_URL="${UGC_URL}${UGC_PVR}.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 + +DESCRIPTION="Modifications to Chromium for removing Google integration and enhancing privacy" +HOMEPAGE="https://github.com/Eloston/ungoogled-chromium" +PATCHSET="4" +PATCHSET_NAME="chromium-$(ver_cut 1)-patchset-${PATCHSET}" +SRC_URI="https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${PV}.tar.xz + https://github.com/stha09/chromium-patches/releases/download/${PATCHSET_NAME}/${PATCHSET_NAME}.tar.xz + ${UGC_URL}" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="amd64 ~arm64 ~x86" +IUSE="cfi +clang convert-dict cups custom-cflags debug enable-driver hangouts headless js-type-check kerberos +official optimize-thinlto optimize-webui +partition pgo +proprietary-codecs pulseaudio screencast selinux suid +system-ffmpeg +system-harfbuzz +system-icu +system-jsoncpp +system-libevent system-libvpx +system-openh264 system-openjpeg +system-re2 tcmalloc thinlto vaapi vdpau wayland widevine" +RESTRICT=" + !system-ffmpeg? ( proprietary-codecs? ( bindist ) ) + !system-openh264? ( bindist ) +" +REQUIRED_USE=" + thinlto? ( clang ) + optimize-thinlto? ( thinlto ) + cfi? ( thinlto ) + pgo? ( clang ) + x86? ( !thinlto !widevine ) + screencast? ( wayland ) +" + +COMMON_X_DEPEND=" + media-libs/mesa:=[gbm(+)] + x11-libs/libX11:= + x11-libs/libXcomposite:= + x11-libs/libXcursor:= + x11-libs/libXdamage:= + x11-libs/libXext:= + x11-libs/libXfixes:= + >=x11-libs/libXi-1.6.0:= + x11-libs/libXrandr:= + x11-libs/libXrender:= + x11-libs/libXtst:= + x11-libs/libxcb:= + x11-libs/libxshmfence:= + vaapi? ( >=x11-libs/libva-2.7:=[X,drm] ) +" + +COMMON_DEPEND=" + app-arch/bzip2:= + cups? ( >=net-print/cups-1.3.11:= ) + dev-libs/expat:= + dev-libs/glib:2 + >=dev-libs/libxml2-2.9.4-r3:=[icu] + dev-libs/nspr:= + >=dev-libs/nss-3.26:= + >=media-libs/alsa-lib-1.0.19:= + media-libs/fontconfig:= + >=media-libs/freetype-2.11.0-r1:= + system-harfbuzz? ( >=media-libs/harfbuzz-2.9.0:0=[icu(-)] ) + media-libs/libjpeg-turbo:= + media-libs/libpng:= + system-libvpx? ( >=media-libs/libvpx-1.8.2:=[postproc] ) + pulseaudio? ( + || ( + media-sound/pulseaudio + >=media-sound/apulse-0.1.9 + ) + ) + system-ffmpeg? ( + >=media-video/ffmpeg-4.3:= + || ( + media-video/ffmpeg[-samba] + >=net-fs/samba-4.5.10-r1[-debug(-)] + ) + >=media-libs/opus-1.3.1:= + ) + net-misc/curl[ssl] + sys-apps/dbus:= + sys-apps/pciutils:= + virtual/udev + x11-libs/cairo:= + x11-libs/gdk-pixbuf:2 + x11-libs/libxkbcommon:= + x11-libs/pango:= + media-libs/flac:= + >=media-libs/libwebp-0.4.0:= + sys-libs/zlib:=[minizip] + kerberos? ( virtual/krb5 ) + !headless? ( + ${COMMON_X_DEPEND} + >=app-accessibility/at-spi2-atk-2.26:2 + >=app-accessibility/at-spi2-core-2.26:2 + >=dev-libs/atk-2.26 + x11-libs/gtk+:3[X] + wayland? ( + dev-libs/wayland:= + screencast? ( media-video/pipewire:0/0.4 ) + x11-libs/gtk+:3[wayland,X] + x11-libs/libdrm:= + ) + ) + media-libs/lcms:= + system-jsoncpp? ( dev-libs/jsoncpp ) + system-libevent? ( dev-libs/libevent ) + system-openjpeg? ( media-libs/openjpeg:2= ) + app-arch/snappy:= + dev-libs/libxslt:= + system-re2? ( dev-libs/re2:= ) + >=media-libs/openh264-1.6.0:= + system-icu? ( >=dev-libs/icu-67.1:= ) +" +RDEPEND="${COMMON_DEPEND} + x11-misc/xdg-utils + virtual/opengl + virtual/ttf-fonts + selinux? ( sec-policy/selinux-chromium ) + !www-client/chromium + !www-client/chromium-bin + !www-client/ungoogled-chromium-bin +" +DEPEND="${COMMON_DEPEND} +" +# dev-vcs/git - https://bugs.gentoo.org/593476 +BDEPEND=" + ${PYTHON_DEPS} + $(python_gen_any_dep ' + dev-python/setuptools[${PYTHON_USEDEP}] + ') + >=app-arch/gzip-1.7 + dev-lang/perl + >=dev-util/gn-0.1807 + dev-vcs/git + >=dev-util/gperf-3.0.3 + >=dev-util/ninja-1.7.2 + >=net-libs/nodejs-7.6.0[inspector] + >=sys-devel/bison-2.4.3 + sys-devel/flex + virtual/pkgconfig + js-type-check? ( virtual/jre ) + clang? ( sys-devel/clang sys-devel/lld ) + cfi? ( sys-devel/clang-runtime[sanitize] ) +" + +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() { + has_version -b "dev-python/setuptools[${PYTHON_USEDEP}]" +} + +pre_build_checks() { + if [[ ${MERGE_TYPE} != binary ]]; then + local -x CPP="$(tc-getCXX) -E" + if tc-is-gcc && ! ver_test "$(gcc-version)" -ge 9.2; then + [[ -z "${NODIE}" ]] && die "At least gcc 9.2 is required" + fi + if use clang; then + CPP="${CHOST}-clang++ -E" + if ! ver_test "$(clang-major-version)" -ge 12; then + [[ -z "${NODIE}" ]] && die "At least clang 12 is required" + fi + fi + fi + + # Check build requirements, bug #541816 and bug #471810 . + CHECKREQS_MEMORY="4G" + CHECKREQS_DISK_BUILD="9G" + if ( shopt -s extglob; is-flagq '-g?(gdb)?([1-9])' ); then + CHECKREQS_DISK_BUILD="16G" + fi + check-reqs_pkg_setup +} + +pkg_pretend() { + if has_version "sys-libs/libcxx"; then + ewarn + ewarn "You have sys-libs/libcxx, please be aware that system-*" + ewarn "and some other c++ dependencies need to be compiled" + ewarn "with the same library as ungoogled-chromium itself" + ewarn "dev-libs/jsoncpp is most problematic, see #58 #49 #119 for details" + 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 system-libvpx && use vaapi; then + ewarn + ewarn "New vaapi code depends heavily on libvpx-1.9, see #43" + ewarn "Consider disabling system-libvpx USE flag if using vaapi" + ewarn "A patch to make vaapi compatible with system libvpx-1.9 is welcome" + ewarn + [[ -z "${NODIE}" ]] && die "The build will fail!" + fi + pre_build_checks +} + +pkg_setup() { + pre_build_checks + + chromium_suid_sandbox_check_kernel_config + + # nvidia-drivers does not work correctly with Wayland due to unsupported EGLStreams + if use wayland && ! use headless && has_version "x11-drivers/nvidia-drivers"; then + ewarn "Proprietary nVidia driver does not work with Wayland. You can disable" + ewarn "Wayland by setting DISABLE_OZONE_PLATFORM=true in /etc/chromium/default." + fi +} + +src_prepare() { + # Calling this here supports resumption via FEATURES=keepwork + python_setup + + if ! use custom-cflags; then #See #25 #92 + sed -i '/default_stack_frames/Q' "${WORKDIR}/patches/chromium-$(ver_cut 1)-compiler.patch" || die + fi + + local PATCHES=( + "${WORKDIR}/patches" + "${FILESDIR}/chromium-93-InkDropHost-crash.patch" + "${FILESDIR}/chromium-96-EnumTable-crash.patch" + "${FILESDIR}/chromium-96-freetype-unbundle.patch" + "${FILESDIR}/chromium-glibc-2.34.patch" + "${FILESDIR}/chromium-use-oauth2-client-switches-as-default.patch" + "${FILESDIR}/chromium-shim_headers.patch" + "${FILESDIR}/sql-VirtualCursor-standard-layout.patch" + ) + + default + + mkdir -p third_party/node/linux/node-linux-x64/bin || die + 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 convert-dict && eapply "${FILESDIR}/chromium-ucf-dict-utility.patch" + + if use system-ffmpeg; then + eapply "${FILESDIR}/chromium-93-ffmpeg-4.4.patch" + eapply -R "${FILESDIR}/chromium-94-ffmpeg-roll.patch" + fi + + if use system-jsoncpp; then + eapply "${FILESDIR}/chromium-system-jsoncpp-r2.patch" + sed -i '/^#include "third_party\/jsoncpp.*$/{s//#include /;h};${x;/./{x;q0};x;q1}' components/mirroring/service/receiver_response.h || die + sed -i '/^.*json\/reader.h"$/{s//#include /;h};${x;/./{x;q0};x;q1}' components/mirroring/service/receiver_response.cc || die + sed -i '/^.*json\/writer.h"$/{s//#include /;h};${x;/./{x;q0};x;q1}' components/mirroring/service/receiver_response.cc || die + fi + + use system-openjpeg && eapply "${FILESDIR}/chromium-system-openjpeg-r2.patch" + + use vdpau && eapply "${FILESDIR}/vdpau-support-r4.patch" + + # 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 + ) + + 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 use js-type-check; then + ewarn "Keeping binary compiler.jar in source tree for js-type-check" + sed -i '\!third_party/closure_compiler/compiler/compiler.jar!d' "${ugc_pruning_list}" || die + fi + + if use pgo || [ ! -z "$UGC_COMMIT_ID" ]; then + ewarn "Keeping binary profile data in source tree for pgo" + sed -i '\!chrome/build/pgo_profiles/.*!d' "${ugc_pruning_list}" || die + fi + + 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" -c build/domsubcache.tar.gz . + eend $? || die + + local keeplibs=( + base/third_party/cityhash + base/third_party/double_conversion + base/third_party/dynamic_annotations + base/third_party/icu + base/third_party/nspr + base/third_party/superfasthash + base/third_party/symbolize + base/third_party/valgrind + base/third_party/xdg_mime + base/third_party/xdg_user_dirs + buildtools/third_party/libc++ + buildtools/third_party/libc++abi + chrome/third_party/mozilla_security_manager + courgette/third_party + net/third_party/mozilla_security_manager + net/third_party/nss + net/third_party/quic + net/third_party/uri_template + third_party/abseil-cpp + third_party/angle + third_party/angle/src/common/third_party/base + third_party/angle/src/common/third_party/smhasher + third_party/angle/src/common/third_party/xxhash + third_party/angle/src/third_party/libXNVCtrl + third_party/angle/src/third_party/trace_event + third_party/angle/src/third_party/volk + third_party/apple_apsl + third_party/axe-core + 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/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/dav1d + third_party/dawn + third_party/dawn/third_party/khronos + third_party/dawn/third_party/tint + 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/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/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/lighthouse + third_party/devtools-frontend/src/front_end/third_party/lit-html + third_party/devtools-frontend/src/front_end/third_party/lodash-isequal + 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/wasmparser + third_party/devtools-frontend/src/test/unittests/front_end/third_party/i18n + third_party/devtools-frontend/src/third_party + third_party/distributed_point_functions + third_party/dom_distiller_js + third_party/eigen3 + third_party/emoji-segmenter + third_party/farmhash + third_party/fdlibm + third_party/fft2d + third_party/flatbuffers + third_party/freetype + third_party/fusejs + third_party/highway + third_party/libgifcodec + third_party/liburlpattern + third_party/libzip + 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/hunspell + third_party/iccjpeg + third_party/inspector_protocol + third_party/jinja2 + ) + use system-jsoncpp || keeplibs+=( + third_party/jsoncpp + ) + keeplibs+=( + third_party/jstemplate + third_party/khronos + third_party/leveldatabase + third_party/libXNVCtrl + third_party/libaddressinput + 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 + third_party/libavif + third_party/libgav1 + third_party/libjingle + third_party/libjxl + third_party/libphonenumber + third_party/libsecret + third_party/libsrtp + third_party/libsync + third_party/libudev + 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/llvm + third_party/lottie + third_party/lss + third_party/lzma_sdk + third_party/mako + third_party/maldoca + third_party/maldoca/src/third_party/tensorflow_protos + third_party/maldoca/src/third_party/zlibwrapper + third_party/markupsafe + third_party/mesa + third_party/metrics_proto + third_party/minigbm + third_party/modp_b64 + third_party/nasm + third_party/nearby + third_party/neon_2_sse + third_party/node + third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2 + third_party/one_euro_filter + third_party/opencv + third_party/openscreen + third_party/openscreen/src/third_party/mozilla + 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/base + 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/libopenjpeg20 + ) + keeplibs+=( + third_party/pdfium/third_party/libpng16 + third_party/pdfium/third_party/libtiff + third_party/pdfium/third_party/skia_shared + third_party/perfetto + third_party/perfetto/protos/third_party/chromium + third_party/pffft + third_party/ply + third_party/polymer + third_party/private-join-and-compute + third_party/private_membership + third_party/protobuf + third_party/protobuf/third_party/six + third_party/pyjson5 + third_party/qcms + ) + keeplibs+=( + third_party/rnnoise + third_party/s2cellid + third_party/securemessage + third_party/shell-encryption + third_party/simplejson + third_party/skia + third_party/skia/include/third_party/skcms + third_party/skia/include/third_party/vulkan + third_party/skia/third_party/skcms + third_party/skia/third_party/vulkan + third_party/smhasher + third_party/snappy + 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/subzero + third_party/swiftshader/third_party/SPIRV-Headers/include/spirv/unified1 + third_party/tcmalloc + third_party/tensorflow-text + third_party/tflite + third_party/tflite/src/third_party/eigen3 + third_party/tflite/src/third_party/fft2d + third_party/ruy + third_party/six + third_party/ukey2 + third_party/usrsctp + third_party/utf + third_party/vulkan + third_party/web-animations-js + 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/base64 + 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/zxcvbn-cpp + third_party/zlib/google + url/third_party/mozilla + v8/src/third_party/siphash + v8/src/third_party/valgrind + v8/src/third_party/utf8-decoder + v8/third_party/inspector_protocol + v8/third_party/v8 + ) + use system-libevent || keeplibs+=( + base/third_party/libevent + ) + keeplibs+=( + third_party/speech-dispatcher + third_party/usb_ids + third_party/xdg-utils + ) + 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-harfbuzz; then + keeplibs+=( third_party/harfbuzz-ng/utils ) + else + keeplibs+=( third_party/harfbuzz-ng ) + fi + if use wayland && ! use headless ; then + keeplibs+=( third_party/wayland ) + fi + if ! use system-openh264; then + keeplibs+=( third_party/openh264 ) + fi + if ! use system-re2; then + keeplibs+=( third_party/re2 ) + fi + 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 + ./generate_gni.sh || die + popd >/dev/null || die + fi + + # Remove most bundled libraries. Some are still needed. + build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove || die + + if use js-type-check; then + ln -s "${EPREFIX}"/usr/bin/java third_party/jdk/current/bin/java || die + fi + + # bundled eu-strip is for amd64 only and we don't want to pre-stripped binaries + mkdir -p buildtools/third_party/eu-strip/bin || die + ln -s "${EPREFIX}"/bin/true buildtools/third_party/eu-strip/bin/eu-strip || die +} + +src_configure() { + # Calling this here supports resumption via FEATURES=keepwork + python_setup + + local myconf_gn="" + + # Make sure the build system will use the right tools, bug #340795. + tc-export AR CC CXX NM + + if use clang && ! tc-is-clang ; then + einfo "Enforcing the use of clang due to USE=clang ..." + CC=${CHOST}-clang + CXX=${CHOST}-clang++ + AR=llvm-ar #thinlto fails otherwise + strip-unsupported-flags + elif ! use clang && ! tc-is-gcc ; then + einfo "Enforcing the use of gcc due to USE=-clang ..." + CC=${CHOST}-gcc + CXX=${CHOST}-g++ + AR=gcc-ar #just in case + strip-unsupported-flags + fi + + if tc-is-clang; then + myconf_gn+=" is_clang=true clang_use_chrome_plugins=false" + else + myconf_gn+=" is_clang=false" + fi + + # Define a custom toolchain for GN + myconf_gn+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\"" + + if tc-is-cross-compiler; then + tc-export BUILD_{AR,CC,CXX,NM} + myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:host\"" + myconf_gn+=" v8_snapshot_toolchain=\"//build/toolchain/linux/unbundle:host\"" + else + myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\"" + fi + + # GN needs explicit config for Debug/Release as opposed to inferring it from build directory. + myconf_gn+=" is_debug=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. + myconf_gn+=" dcheck_always_on=$(usex debug true false)" + myconf_gn+=" dcheck_is_configurable=$(usex debug true false)" + + if use tcmalloc; then + myconf_gn+=" use_allocator=\"tcmalloc\"" + fi + + if use partition; then + myconf_gn+=" use_allocator=\"partition\"" + fi + + # Disable nacl, we can't build without pnacl (http://crbug.com/269560). + myconf_gn+=" enable_nacl=false" + + local gn_system_libraries=( + flac + fontconfig + freetype + libdrm + libjpeg + libpng + libwebp + libxml + libxslt + ) + use system-openh264 && gn_system_libraries+=( + openh264 + ) + use system-re2 && gn_system_libraries+=( + re2 + ) + gn_system_libraries+=( + snappy + zlib + ) + if use system-ffmpeg; then + gn_system_libraries+=( ffmpeg opus ) + fi + if use system-icu; then + gn_system_libraries+=( icu ) + fi + if use system-libvpx; then + gn_system_libraries+=( libvpx ) + fi + if use system-libevent; then + gn_system_libraries+=( libevent ) + fi + build/linux/unbundle/replace_gn_files.py --system-libraries "${gn_system_libraries[@]}" || die + + # See dependency logic in third_party/BUILD.gn + myconf_gn+=" use_system_harfbuzz=$(usex system-harfbuzz true false)" + + # Disable deprecated libgnome-keyring dependency, bug #713012 + myconf_gn+=" use_gnome_keyring=false" + + # Optional dependencies. + myconf_gn+=" enable_js_type_check=$(usex js-type-check true false)" + myconf_gn+=" enable_hangout_services_extension=$(usex hangouts true false)" + myconf_gn+=" enable_widevine=$(usex widevine true false)" + myconf_gn+=" use_cups=$(usex cups true false)" + myconf_gn+=" use_kerberos=$(usex kerberos true false)" + myconf_gn+=" use_pulseaudio=$(usex pulseaudio true false)" + myconf_gn+=" use_vaapi=$(usex vaapi true false)" + myconf_gn+=" rtc_use_pipewire=$(usex screencast true false)" + + # TODO: link_pulseaudio=true for GN. + + myconf_gn+=" disable_fieldtrial_testing_config=true" + + myconf_gn+=" is_cfi=$(usex cfi true false)" + + if use cfi; then + myconf_gn+=" use_cfi_icall=true" + myconf_gn+=" use_cfi_cast=true" + fi + + if use pgo; then + myconf_gn+=" chrome_pgo_phase=2" + else + myconf_gn+=" chrome_pgo_phase=0" + fi + + myconf_gn+=" use_thin_lto=$(usex thinlto true false)" + myconf_gn+=" thin_lto_enable_optimizations=$(usex optimize-thinlto true false)" + myconf_gn+=" optimize_webui=$(usex optimize-webui true false)" + myconf_gn+=" use_system_freetype=$(usex system-harfbuzz true false)" + myconf_gn+=" use_system_libopenjpeg2=$(usex system-openjpeg true false)" + myconf_gn+=" enable_pdf=true" + myconf_gn+=" use_system_lcms2=true" + myconf_gn+=" enable_print_preview=true" + + # Ungoogled flags + myconf_gn+=" enable_mdns=false" + myconf_gn+=" enable_mse_mpeg2ts_stream_parser=true" + myconf_gn+=" enable_nacl_nonsfi=false" + myconf_gn+=" enable_one_click_signin=false" + myconf_gn+=" enable_reading_list=false" + myconf_gn+=" enable_remoting=false" + myconf_gn+=" enable_reporting=false" + myconf_gn+=" enable_service_discovery=false" + myconf_gn+=" exclude_unwind_tables=true" + myconf_gn+=" use_official_google_api_keys=false" + myconf_gn+=" google_api_key=\"\"" + myconf_gn+=" google_default_client_id=\"\"" + myconf_gn+=" google_default_client_secret=\"\"" + myconf_gn+=" safe_browsing_mode=0" + myconf_gn+=" use_unofficial_version_number=false" + myconf_gn+=" blink_symbol_level=0" + myconf_gn+=" symbol_level=0" + myconf_gn+=" enable_iterator_debugging=false" + myconf_gn+=" enable_swiftshader=false" + myconf_gn+=" build_with_tflite_lib=false" + + # Additional flags + myconf_gn+=" use_system_libjpeg=true" + myconf_gn+=" use_system_zlib=true" + myconf_gn+=" rtc_build_examples=false" + + # Never use bundled gold binary. Disable gold linker flags for now. + # Do not use bundled clang. + # Trying to use gold results in linker crash. + myconf_gn+=" use_gold=false use_sysroot=false use_custom_libcxx=false" + + if use clang; then + myconf_gn+=" use_lld=true" #x86 fails with gnu ld + else + # Disable forced lld, bug 641556 + myconf_gn+=" use_lld=false" + fi + + # Disable pseudolocales, only used for testing + myconf_gn+=" enable_pseudolocales=false" + + # Disable code formating of generated files + myconf_gn+=" blink_enable_generated_code_formatting=false" + + ffmpeg_branding="$(usex proprietary-codecs Chrome Chromium)" + myconf_gn+=" proprietary_codecs=$(usex proprietary-codecs true false)" + myconf_gn+=" ffmpeg_branding=\"${ffmpeg_branding}\"" + + local myarch="$(tc-arch)" + + # Avoid CFLAGS problems, bug #352457, bug #390147. + if ! use custom-cflags; then + filter-flags "-O*" "-Wl,-O*" #See #25 + strip-flags + + # Prevent linker from running out of address space, bug #471810 . + if use x86; then + filter-flags "-g*" + fi + + # Prevent libvpx build failures. Bug 530248, 544702, 546984. + if [[ ${myarch} == amd64 || ${myarch} == x86 ]]; then + filter-flags -mno-mmx -mno-sse2 -mno-ssse3 -mno-sse4.1 -mno-avx -mno-avx2 -mno-fma -mno-fma4 + fi + fi + + if [[ $myarch = amd64 ]] ; then + myconf_gn+=" target_cpu=\"x64\"" + ffmpeg_target_arch=x64 + elif [[ $myarch = x86 ]] ; then + myconf_gn+=" target_cpu=\"x86\"" + ffmpeg_target_arch=ia32 + + # This is normally defined by compiler_cpu_abi in + # build/config/compiler/BUILD.gn, but we patch that part out. + append-flags -msse2 -mfpmath=sse -mmmx + elif [[ $myarch = arm64 ]] ; then + myconf_gn+=" target_cpu=\"arm64\"" + ffmpeg_target_arch=arm64 + elif [[ $myarch = arm ]] ; then + myconf_gn+=" target_cpu=\"arm\"" + ffmpeg_target_arch=$(usex cpu_flags_arm_neon arm-neon arm) + elif [[ $myarch = ppc64 ]] ; then + myconf_gn+=" target_cpu=\"ppc64\"" + ffmpeg_target_arch=ppc64 + else + die "Failed to determine target arch, got '$myarch'." + 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" + + append-ldflags "-Wl,--thinlto-jobs=$(makeopts_jobs)" + myconf_gn+=" use_lld=true" + fi + + # Make sure that -Werror doesn't get added to CFLAGS by the build system. + # Depending on GCC version the warnings are different and we don't want + # the build to fail because of that. + myconf_gn+=" treat_warnings_as_errors=false" + + # Disable fatal linker warnings, bug 506268. + myconf_gn+=" fatal_linker_warnings=false" + + # Bug 491582. + export TMPDIR="${WORKDIR}/temp" + mkdir -p -m 755 "${TMPDIR}" || die + + # https://bugs.gentoo.org/654216 + addpredict /dev/dri/ #nowarn + + #if ! use system-ffmpeg; then + if false; then + local build_ffmpeg_args="" + if use pic && [[ "${ffmpeg_target_arch}" == "ia32" ]]; then + build_ffmpeg_args+=" --disable-asm" + fi + + # Re-configure bundled ffmpeg. See bug #491378 for example reasons. + einfo "Configuring bundled ffmpeg..." + pushd third_party/ffmpeg > /dev/null || die + chromium/scripts/build_ffmpeg.py linux ${ffmpeg_target_arch} \ + --branding ${ffmpeg_branding} -- ${build_ffmpeg_args} || die + chromium/scripts/copy_config.sh || die + chromium/scripts/generate_gn.py || die + popd > /dev/null || die + fi + + # Chromium relies on this, but was disabled in >=clang-10, crbug.com/1042470 + append-cxxflags $(test-flags-CXX -flax-vector-conversions=all) + + # Disable unknown warning message from clang. + tc-is-clang && append-flags -Wno-unknown-warning-option + + # Explicitly disable ICU data file support for system-icu builds. + if use system-icu; then + myconf_gn+=" icu_use_data_file=false" + fi + + # Enable ozone wayland and/or headless support + myconf_gn+=" use_ozone=true ozone_auto_platforms=false" + myconf_gn+=" ozone_platform_headless=true" + myconf_gn+=" ozone_platform_x11=$(usex headless false true)" + if use wayland || use headless; then + if use headless; then + myconf_gn+=" ozone_platform=\"headless\"" + myconf_gn+=" use_x11=false" + else + myconf_gn+=" ozone_platform_wayland=true" + myconf_gn+=" use_system_libdrm=true" + myconf_gn+=" use_system_minigbm=true" + myconf_gn+=" use_xkbcommon=true" + myconf_gn+=" ozone_platform=\"wayland\"" + fi + else + myconf_gn+=" ozone_platform=\"x11\"" + fi + + # Enable official builds + myconf_gn+=" is_official_build=$(usex official true false)" + 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 + 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 + + einfo "Configuring Chromium..." + set -- gn gen --args="${myconf_gn} ${EXTRA_GN}" out/Release + echo "$@" + "$@" || die + + # 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 + + # Don't inherit PYTHONPATH from environment, bug #789021, #812689 + local -x PYTHONPATH= + + #"${EPYTHON}" tools/clang/scripts/update.py --force-local-build --gcc-toolchain /usr --skip-checkout --use-system-cmake --without-android || die + + use convert-dict && eninja -C out/Release convert_dict + + # Build mksnapshot and pax-mark it. + local x + for x in mksnapshot v8_context_snapshot_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 + + # 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 + + use enable-driver && eninja -C out/Release chromedriver + use suid && eninja -C out/Release chrome_sandbox + + pax-mark m out/Release/chrome + + use enable-driver && mv out/Release/chromedriver{.unstripped,} + + # Build manpage; bug #684550 + sed -e 's|@@PACKAGE@@|chromium-browser|g; + s|@@MENUNAME@@|Chromium|g;' \ + chrome/app/resources/manpage.1.in > \ + out/Release/chromium-browser.1 || die + + # Build desktop file; bug #706786 + sed -e 's|@@MENUNAME@@|Chromium|g; + s|@@USR_BIN_SYMLINK_NAME@@|chromium-browser|g; + s|@@PACKAGE@@|chromium-browser|g; + s|\(^Exec=\)/usr/bin/|\1|g;' \ + chrome/installer/linux/common/desktop.template > \ + out/Release/chromium-browser-chromium.desktop || die +} + +src_install() { + local CHROMIUM_HOME="/usr/$(get_libdir)/chromium-browser" + exeinto "${CHROMIUM_HOME}" + doexe out/Release/chrome + + if use convert-dict; then + newexe "${FILESDIR}/update-dicts.sh" update-dicts.sh + doexe out/Release/convert_dict + fi + + if use suid; then + newexe out/Release/chrome_sandbox chrome-sandbox + fperms 4755 "${CHROMIUM_HOME}/chrome-sandbox" + fi + + use enable-driver && doexe out/Release/chromedriver + + ozone_auto_session () { + use wayland && ! use headless && echo true || echo false + } + local sedargs=( -e + "s:/usr/lib/:/usr/$(get_libdir)/:g; + s:@@OZONE_AUTO_SESSION@@:$(ozone_auto_session):g" + ) + sed "${sedargs[@]}" "${FILESDIR}/chromium-launcher-r7.sh" > chromium-launcher.sh || die + if has_version ">=media-sound/apulse-0.1.9" ; then + sed -i 's/exec -a "chromium-browser"/exec -a "chromium-browser" apulse/' chromium-launcher.sh || die + fi + doexe chromium-launcher.sh + + # It is important that we name the target "chromium-browser", + # xdg-utils expect it; bug #355517. + dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium-browser + # keep the old symlink around for consistency + dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium + + use enable-driver && dosym "${CHROMIUM_HOME}/chromedriver" /usr/bin/chromedriver + + # Allow users to override command-line options, bug #357629. + insinto /etc/chromium + newins "${FILESDIR}/chromium.default" "default" + + pushd out/Release/locales > /dev/null || die + chromium_remove_language_paks + popd + + insinto "${CHROMIUM_HOME}" + doins out/Release/*.bin + doins out/Release/*.pak + ( + shopt -s nullglob + local files=(out/Release/*.so out/Release/*.so.[0-9]) + [[ ${#files[@]} -gt 0 ]] && doins "${files[@]}" + ) + + if ! use system-icu; then + doins out/Release/icudtl.dat + fi + + doins -r out/Release/locales + doins -r out/Release/resources + #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 /usr/$(get_libdir)/chromium-browser/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" \ + chromium-browser.png + done + + # Install desktop entry + domenu out/Release/chromium-browser-chromium.desktop + + # Install GNOME default application entry (bug #303100). + insinto /usr/share/gnome-control-center/default-apps + newins "${FILESDIR}"/chromium-browser.xml chromium-browser.xml + + # Install manpage; bug #684550 + doman out/Release/chromium-browser.1 + dosym chromium-browser.1 /usr/share/man/man1/chromium.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 vaapi; then + elog "VA-API is disabled by default at runtime. You have to enable it" + elog "by adding --enable-features=VaapiVideoDecoder to CHROMIUM_FLAGS" + elog "in /etc/chromium/default." + 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-webrtc-pipewire-capturer" + 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 +}