void-packages/srcpkgs/chromium/template

262 lines
8.3 KiB
Bash

# Template file for 'chromium'
pkgname=chromium
# See http://www.chromium.org/developers/calendar for the latest version
version=72.0.3626.119
revision=1
archs="i686 x86_64 x86_64-musl"
short_desc="Google's attempt at creating a safer, faster, and more stable browser"
maintainer="Rasmus Thomsen <rasmus.thomsen@protonmail.com>"
license="BSD-3-Clause"
homepage="https://www.chromium.org/"
distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
checksum=b3953ce18044117d98f0b1b9922aeb93030a7b49b85b140060c6fe3e467a917a
lib32disabled=yes
nodebug=yes
nopie=yes # contains tools that are not PIE, enables PIE itself
build_options="clang jumbo_build js_optimize"
desc_option_clang="Use clang to build"
desc_option_jumbo_build="Do a jumbo build, needs way more RAM but builds way faster"
desc_option_js_optimize="Optimize the JS used for Chromium's UI"
hostmakedepends="$(vopt_if clang clang) yasm python pkgconf perl gperf bison ninja nodejs hwids
libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk)"
makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel
libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel
libXcomposite-devel speech-dispatcher-devel libXrandr-devel mit-krb5-devel
libXScrnSaver-devel alsa-lib-devel snappy-devel libdrm-devel
libxml2-devel libxslt-devel pulseaudio-devel nss-devel libexif-devel
libXcursor-devel libflac-devel speex-devel libmtp-devel libwebp-devel
libjpeg-turbo-devel libevent-devel json-c-devel harfbuzz-devel
minizip-devel jsoncpp-devel zlib-devel libcap-devel libXdamage-devel
re2-devel fontconfig-devel freetype-devel harfbuzz-devel opus-devel
ffmpeg-devel libva-devel"
depends="libexif hwids desktop-file-utils hicolor-icon-theme"
build_options_default="jumbo_build clang"
case "${XBPS_TARGET_MACHINE}" in
x86_64|i686) build_options_default+=" js_optimize" ;;
esac
post_extract() {
case "${XBPS_TARGET_MACHINE}" in
*-musl)
for f in "${FILESDIR}"/musl-patches/*.patch; do
echo "Applying $f"
patch -Np0 -i "$f"
done
;;
i686)
for f in "${FILESDIR}"/i686-patches/*.patch; do
echo "Applying $f"
patch -Np0 -i "$f"
done
;;
esac
# Use the file at run time instead of effectively compiling it in
sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \
-i device/usb/BUILD.gn
# use system nodejs
mkdir -p third_party/node/linux/node-linux-x64/bin
ln -sf /usr/bin/node third_party/node/linux/node-linux-x64/bin/node
if [ -z "$build_option_clang" ]; then
# Work around bug in blink in which GCC 6 optimizes away null pointer checks
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833524
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68853#c2
sed -i '/config("compiler")/ a cflags_cc = [ "-fno-delete-null-pointer-checks" ]' \
build/config/linux/BUILD.gn
fi
}
do_configure() {
local system="" conf=()
export -n CFLAGS CXXFLAGS LDFLAGS
if [ "$build_option_clang" ]; then
export CC=clang
export CXX=clang++
fi
# Use system-provided libraries.
# TODO: use_system_hunspell (upstream changes needed).
# TODO: use_system_libsrtp.
# TODO: use_system_libusb (http://crbug.com/266149).
# TODO: use_system_ssl (http://crbug.com/58087).
# TODO: use_system_sqlite (http://crbug.com/22208).
# TODO: use_system_icu (segfaults)
# XXX xtraeme: broken currently
# use_system_protobuf
# use_system_v8=1
# use_system_zlib=1
# use_system_libvpx=1
# bzip2 jsoncpp minizip xdg_utils speex
system="
ffmpeg
flac
fontconfig
harfbuzz-ng
libdrm
libevent
libjpeg
libpng
libwebp
libxml
libxslt
opus
re2
snappy
yasm
"
# remove build scripts for system provided dependencies - basically does the
# same as the bundeled script to remove bundeled libs, but this way we don't
# have to list the remaining libs
for LIB in ${system} libjpeg_turbo; do
find -type f -path "*third_party/$LIB/*" \
\! -path "*third_party/$LIB/chromium/*" \
\! -path "*third_party/$LIB/google/*" \
\! -path './base/third_party/icu/*' \
\! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \
\! -path './third_party/yasm/run_yasm.py' \
\! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
-delete
done
# switch to system provided dependencies
python2 build/linux/unbundle/replace_gn_files.py --system-libraries ${system}
python2 third_party/libaddressinput/chromium/tools/update-strings.py
# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
# Note: These are for Void Linux use ONLY.
conf+=(
'google_api_key="AIzaSyA9gWazKaHaNIPPg2hrMj6_ZSG8AFmq738"'
'google_default_client_id="126659149423-hoo6ickbk3p1u2qjsdsp0ddciurfvb4t.apps.googleusercontent.com"'
'google_default_client_secret="_ozIx2D-DKm_se_2NPwV4l5b"'
)
conf+=(
'enable_nacl=false'
'enable_nacl_nonsfi=false'
"is_clang=$(vopt_if clang true false)"
'is_debug=false'
'clang_use_chrome_plugins=false'
'custom_toolchain="//build/toolchain/linux/unbundle:default"'
'host_toolchain="//build/toolchain/linux/unbundle:default"'
'remove_webcore_debug_symbols=true'
'symbol_level=0'
'icu_use_data_file=true'
'use_allocator="none"'
'use_allocator_shim=false'
'use_cups=true'
'use_pulseaudio=true'
'use_sysroot=false'
'use_system_harfbuzz=true'
'enable_widevine=true'
'enable_hangout_services_extension=true'
'is_desktop_linux=true'
)
# Jumbo/Unity builds: https://chromium.googlesource.com/chromium/src/+/master/docs/jumbo.md
conf+=( "use_jumbo_build=$(vopt_if jumbo_build true false)" )
# Enable VAAPI - hardware accelerated video decoding.
conf+=(
"use_vaapi=true"
)
conf+=(
"closure_compile=$(vopt_if js_optimize true false)"
)
# Use explicit library dependencies instead of dlopen.
# GN only has "link_pulseaudio", the other options used before are not available atm
# linux_link_cups=true
# linux_link_gsettings=true
# linux_link_libpci=true
# linux_link_libspeechd=true
# libspeechd_h_prefix=\"speech-dispatcher/\""
conf+=( 'link_pulseaudio=true' )
# Never use bundled binutils/gold binary.
conf+=(
"binutils_path=\"${XBPS_CROSS_BASE}/usr/bin\""
"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
'linux_use_bundled_binutils=false'
'use_custom_libcxx=false'
'use_lld=false'
)
# XXX: gold broken with musl
case "${XBPS_TARGET_MACHINE}" in
*-musl) conf+=( 'use_gold=false' ) ;;
*) conf+=( 'use_gold=true' ) ;;
esac
# Always support proprietary codecs.
# Enable H.264 support in bundled ffmpeg.
conf+=(
'proprietary_codecs=true'
'ffmpeg_branding="Chrome"'
)
# 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.
conf+=(
'treat_warnings_as_errors=false'
'fatal_linker_warnings=false'
)
# Save space by removing DLOG and DCHECK messages (about 6% reduction).
# conf+=" logging_like_official_build=true"
conf+=( fieldtrial_testing_like_official_build=true )
case "${XBPS_TARGET_MACHINE}" in
x86_64*) conf+=( 'target_cpu="x64"' ) ;;
i686*) conf+=( 'target_cpu="x86"' ) ;;
arm*) conf+=( 'target_cpu="arm"' ) ;;
aarch64*) conf+=( 'target_cpu="arm64"' ) ;;
esac
export LDFLAGS="-pthread"
AR="ar" CC=$CC_FOR_BUILD CXX=$CXX_FOR_BUILD LD=$CXX_FOR_BUILD \
python2 tools/gn/bootstrap/bootstrap.py -s -v \
--gn-gen-args "${conf[*]}"
out/Release/gn gen out/Release --args="${conf[*]}"
}
do_build() {
ninja -C out/Release ${makejobs} chrome chromedriver mksnapshot
}
do_install() {
vinstall out/Release/chrome 755 usr/lib/${pkgname} ${pkgname}
vinstall out/Release/chromedriver 755 usr/lib/${pkgname} chromedriver
cp out/Release/{*.pak,*.bin} ${DESTDIR}/usr/lib/chromium
cp -a out/Release/locales ${DESTDIR}/usr/lib/chromium
vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications
vinstall out/Release/icudtl.dat 0644 usr/lib/chromium
for size in 22 24 48 64 128 256; do
install -Dm644 "chrome/app/theme/chromium/product_logo_${size}.png" \
${DESTDIR}/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png
done
for size in 16 32; do
install -Dm644 "chrome/app/theme/default_100_percent/chromium/product_logo_${size}.png" \
${DESTDIR}/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png
done
vbin ${FILESDIR}/chromium.sh chromium
vlicense LICENSE
ln -s /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver
}