brave-browser-1.86.142canutethegreat-overlay
download
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{11..13} )
PYTHON_REQ_USE="ncurses"
CHROMIUM_LANGS="
af am ar bg bn ca cs da de el en-GB en-US 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
"
inherit check-reqs chromium-2 desktop flag-o-matic llvm-r1 multiprocessing ninja-utils pax-utils python-any-r1 qmake-utils readme.gentoo-r1 toolchain-funcs xdg-utils
DESCRIPTION="Privacy-focused browser based on Chromium with built-in ad blocking"
HOMEPAGE="https://brave.com/"
if [[ ${PV} == *9999 ]]; then
EGIT_REPO_URI="https://github.com/brave/brave-browser.git"
inherit git-r3
else
BRAVE_TAG="${PV}"
SRC_URI="https://github.com/brave/brave-browser/archive/v${BRAVE_TAG}.tar.gz -> ${P}.tar.gz"
KEYWORDS="~amd64 ~arm64"
S="${WORKDIR}/${PN}-${BRAVE_TAG}"
fi
LICENSE="MPL-2.0"
SLOT="0"
IUSE="+component-build cups cpu_flags_arm_neon debug +hangouts kerberos libcxx +lto +official +pax-kernel pgo +proprietary-codecs pulseaudio +rewards +js-optimize screencast selinux +system-toolchain tor vaapi vpn +wallet +widevine"
REQUIRED_USE="
component-build? ( !official )
libcxx? ( || ( system-toolchain clang ) )
pgo? ( official )
x64-macos? ( !system-toolchain )
!system-toolchain? ( clang )
"
COMMON_DEPEND="
>=app-accessibility/at-spi2-core-2.46.0:2
app-arch/bzip2:=
cups? ( >=net-print/cups-1.7.0:= )
dev-libs/expat:=
dev-libs/glib:2
dev-libs/libxml2:=[icu]
dev-libs/libxslt:=
dev-libs/nspr:=
>=dev-libs/nss-3.26:=
dev-libs/re2:=
>=media-libs/alsa-lib-1.0.19:=
media-libs/fontconfig:=
media-libs/freetype:=
>=media-libs/harfbuzz-3.0.0:=[icu(-)]
media-libs/libjpeg-turbo:=
media-libs/libpng:=
media-libs/libwebp:=
media-libs/mesa:=[gbm(+)]
>=media-libs/openh264-1.6.0:=
pulseaudio? ( media-libs/libpulse:= )
sys-apps/dbus:=
sys-apps/pciutils:=
sys-libs/zlib:=[minizip]
virtual/udev
x11-libs/cairo:=
x11-libs/gdk-pixbuf:2
x11-libs/gtk+:3[X]
x11-libs/libdrm:=
x11-libs/libX11:=
x11-libs/libxcb:=
x11-libs/libXcomposite:=
x11-libs/libXcursor:=
x11-libs/libXdamage:=
x11-libs/libXext:=
x11-libs/libXfixes:=
x11-libs/libXi:=
x11-libs/libXrandr:=
x11-libs/libXrender:=
x11-libs/libXScrnSaver:=
x11-libs/libXtst:=
x11-libs/pango:=
kerberos? ( virtual/krb5 )
vaapi? ( >=media-libs/libva-2.7:=[X] )
screencast? ( media-video/pipewire:= )
selinux? ( sec-policy/selinux-chromium )
"
RDEPEND="${COMMON_DEPEND}
virtual/ttf-fonts
selinux? ( sec-policy/selinux-chromium )
"
DEPEND="${COMMON_DEPEND}
!www-client/brave-bin
"
BDEPEND="
${PYTHON_DEPS}
$(python_gen_any_dep '
dev-python/setuptools[${PYTHON_USEDEP}]
')
>=dev-build/gn-0.2193
dev-lang/perl
>=dev-util/gperf-3.1
>=dev-util/ninja-1.7.2
>=net-libs/nodejs-24.0.0[ssl]
>=sys-devel/bison-3.8.2
sys-devel/flex
virtual/pkgconfig
clang? (
sys-devel/clang:=
sys-devel/lld
pgo? ( sys-libs/compiler-rt-sanitizers[profile] )
)
"
if ! has chromium ${INHERITED}; then
BDEPEND+=" $(llvm_gen_dep '
sys-devel/clang:${LLVM_SLOT}
sys-devel/llvm:${LLVM_SLOT}
clang? (
sys-devel/lld:${LLVM_SLOT}
pgo? ( sys-libs/compiler-rt-sanitizers:${LLVM_SLOT}[profile] )
)
')"
fi
# Chromium/Brave is extremely resource intensive
# RAM: 8GB (minimum), 16GB+ (recommended)
# Disk: 100GB+ free space for build
CHECKREQS_MEMORY="16G"
CHECKREQS_DISK_BUILD="100G"
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 XDG icon naming specification, e.g. package x11-themes/adwaita-icon-theme.
"
python_check_deps() {
python_has_version "dev-python/setuptools[${PYTHON_USEDEP}]"
}
needs_lld() {
# https://bugs.gentoo.org/918897#c32
tc-ld-is-lld || use clang
}
llvm_check_deps() {
if ! has_version -b "sys-devel/clang:${LLVM_SLOT}" ; then
einfo "sys-devel/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
if use clang && ! has_version -b "sys-devel/lld:${LLVM_SLOT}" ; then
einfo "sys-devel/lld:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
if use pgo ; then
if ! has_version -b "sys-libs/compiler-rt-sanitizers:${LLVM_SLOT}[profile]" ; then
einfo "sys-libs/compiler-rt-sanitizers:${LLVM_SLOT}[profile] is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
return 1
fi
fi
einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
}
pkg_pretend() {
check-reqs_pkg_pretend
}
pkg_setup() {
check-reqs_pkg_setup
python-any-r1_pkg_setup
chromium_suid_sandbox_check_kernel_config
llvm-r1_pkg_setup
}
src_unpack() {
if [[ ${PV} == *9999 ]]; then
git-r3_src_unpack
else
default
fi
}
src_prepare() {
# Apply Chromium patches if available
# Most Chromium patches should apply to Brave
default
# Create .gclient configuration for Brave
cat > .gclient <<-EOF || die
solutions = [
{
"name": "src/brave",
"url": "https://github.com/brave/brave-core.git",
"managed": False,
"custom_deps": {},
"custom_vars": {},
},
]
EOF
# Respect user's CC, CXX, AR, NM, RANLIB
tc-export AR CC CXX NM RANLIB
# Prevent automagic dependencies on zstd
sed -i -e '/zstd/d' build/linux/unbundle/BUILD.gn || die
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
# Brave-specific preparations
pushd brave >/dev/null || die
# Apply any Brave-specific patches here
popd >/dev/null || die
# Remove bundled libraries
python_fix_shebang build/landmines.py
python_fix_shebang tools/protoc_wrapper/protoc_wrapper.py
python_fix_shebang third_party/depot_tools/
}
src_configure() {
# Set up build environment
tc-export AR CC CXX NM
# Use system toolchain if requested
if use system-toolchain; then
# Ensure we're using system compiler
export CC="${CC:-gcc}"
export CXX="${CXX:-g++}"
export AR="${AR:-ar}"
export NM="${NM:-nm}"
export RANLIB="${RANLIB:-ranlib}"
fi
if use clang; then
export CC=clang
export CXX=clang++
export AR=llvm-ar
export NM=llvm-nm
export RANLIB=llvm-ranlib
strip-unsupported-flags
fi
local myconf_gn=""
# GN bootstrap variables
myconf_gn+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\""
myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\""
myconf_gn+=" is_official_build=$(usex official true false)"
myconf_gn+=" use_thin_lto=$(usex lto true false)"
myconf_gn+=" is_debug=$(usex debug 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)"
myconf_gn+=" enable_hangout_services_extension=$(usex hangouts true false)"
myconf_gn+=" enable_widevine=$(usex widevine true false)"
myconf_gn+=" use_system_zlib=true"
myconf_gn+=" use_system_freetype=true"
myconf_gn+=" use_system_harfbuzz=true"
myconf_gn+=" use_system_libjpeg=true"
myconf_gn+=" use_system_libpng=true"
myconf_gn+=" use_system_libwebp=true"
myconf_gn+=" enable_nacl=false"
myconf_gn+=" optimize_webui=$(usex js-optimize true false)"
myconf_gn+=" ffmpeg_branding=\"Chrome\""
myconf_gn+=" proprietary_codecs=$(usex proprietary-codecs true false)"
myconf_gn+=" is_component_build=$(usex component-build true false)"
myconf_gn+=" use_allocator=\"none\""
myconf_gn+=" symbol_level=$(usex debug 2 0)"
myconf_gn+=" v8_symbol_level=$(usex debug 2 0)"
myconf_gn+=" is_clang=$(usex clang true false)"
myconf_gn+=" use_lld=$(usex clang true false)"
myconf_gn+=" treat_warnings_as_errors=false"
myconf_gn+=" use_custom_libcxx=$(usex libcxx true false)"
# Brave-specific options
myconf_gn+=" brave_chromium_build=true"
myconf_gn+=" brave_google_api_endpoint=\"\""
myconf_gn+=" brave_google_api_key=\"\""
myconf_gn+=" brave_infura_project_id=\"\""
myconf_gn+=" brave_services_key=\"\""
myconf_gn+=" brave_stats_api_key=\"\""
myconf_gn+=" brave_stats_updater_url=\"\""
# Brave optional components
myconf_gn+=" brave_rewards_enabled=$(usex rewards true false)"
myconf_gn+=" brave_wallet_enabled=$(usex wallet true false)"
myconf_gn+=" enable_tor=$(usex tor true false)"
myconf_gn+=" enable_brave_vpn=$(usex vpn true false)"
# Set flags
if use official; then
myconf_gn+=" is_official_build=true"
append-cppflags -DOFFICIAL_BUILD
fi
# Architecture-specific settings
if use arm64; then
myconf_gn+=" target_cpu=\"arm64\""
if use cpu_flags_arm_neon; then
myconf_gn+=" arm_use_neon=true"
fi
else
myconf_gn+=" target_cpu=\"x64\""
fi
einfo "Configuring Brave with GN arguments:"
einfo "${myconf_gn}"
# Set up build directory
set -- gn gen out/Release --args="${myconf_gn}"
echo "$@"
"$@" || die "GN configuration failed"
}
src_compile() {
# Build Brave
eninja -C out/Release chrome chrome_sandbox chromedriver
}
src_install() {
local BRAVE_HOME="/usr/$(get_libdir)/brave-browser"
exeinto "${BRAVE_HOME}"
doexe out/Release/brave || die
if use suid; then
newexe out/Release/chrome_sandbox chrome-sandbox
fperms 4755 "${BRAVE_HOME}/chrome-sandbox"
fi
doexe out/Release/chromedriver || die
# Install resources
insinto "${BRAVE_HOME}"
doins out/Release/*.pak
doins out/Release/*.bin
# Install V8 snapshots
if [[ -f out/Release/snapshot_blob.bin ]]; then
doins out/Release/snapshot_blob.bin
fi
# Install locales
insinto "${BRAVE_HOME}/locales"
doins out/Release/locales/*.pak
# Install resources directory
if [[ -d out/Release/resources ]]; then
insinto "${BRAVE_HOME}/resources"
doins -r out/Release/resources/*
fi
# Install MEI Preload
if [[ -d out/Release/MEIPreload ]]; then
insinto "${BRAVE_HOME}/MEIPreload"
doins -r out/Release/MEIPreload/*
fi
# Install WidevineCdm
if use widevine && [[ -d out/Release/WidevineCdm ]]; then
insinto "${BRAVE_HOME}/WidevineCdm"
doins -r out/Release/WidevineCdm/*
fi
# Install icons
local size
for size in 24 48 64 128 256; do
newicon -s ${size} "brave/app/theme/brave/product_logo_${size}.png" brave-browser.png
done
# Install desktop file
make_desktop_entry \
brave-browser \
"Brave Web Browser" \
brave-browser \
"Network;WebBrowser" \
"MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;\nStartupWMClass=brave-browser"
# Install wrapper script
dodir /usr/bin
cat > "${ED}/usr/bin/brave-browser" <<-EOF || die
#!/bin/sh
exec ${BRAVE_HOME}/brave "\$@"
EOF
fperms +x /usr/bin/brave-browser
# Install man page
doman brave/app/resources/manpage.1.in
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 component-build; then
ewarn
ewarn "You have enabled the 'component-build' USE flag."
ewarn "This is only intended for development and debugging."
ewarn "You may experience crashes and other issues."
ewarn
fi
if ! use official; then
ewarn
ewarn "You are using an unofficial build of Brave."
ewarn "Some features may not work as expected."
ewarn
fi
if use pax-kernel; then
elog
elog "For PaX users:"
elog "If you experience problems with Brave, you may need to disable"
elog "some PaX features. Please see:"
elog "https://wiki.gentoo.org/wiki/Chromium#PaX"
elog
fi
}