src_prepare-overlay/www-client/icecat/icecat-60.7.0.ebuild

393 lines
12 KiB
Bash

# Copyright 2019-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=6
VIRTUALX_REQUIRED="pgo"
WANT_AUTOCONF="2.1"
#MOZ_ESR="0"
PYTHON_COMPAT=( python3_{5,6,7} )
PYTHON_REQ_USE='ncurses,sqlite,ssl,threads(+)'
# Get the list with this command:
# curl https://ftp.gnu.org/gnu/icecat/${PV}/langpacks/ 2>/dev/null | grep langpack | sed 's/^.*href=\"icecat//;/xpi\.sig/d;s/\.langpack.*$//;/compare\-locales$/d;s/^.*\.//;/^[0-9]/d' | tr '\n' ' ' | sed 's/$/\n/'
MOZ_LANGS=( ach af an ar as ast az be bg bn-BD bn-IN br bs ca cak cs cy da de dsb
el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE
gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja ka kab kk km kn ko lij lt lv
mai mk ml mr ms my nb-NO nl nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq
sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW )
# Convert the ebuild version to the upstream mozilla version, used by icecatlinguas
MOZ_PV="${PV/_alpha/a}" # Handle alpha for SRC_URI
MOZ_PV="${MOZ_PV/_beta/b}" # Handle beta for SRC_URI
MOZ_PV="${MOZ_PV/_rc/rc}" # Handle rc for SRC_URI
# https://ftp.gnu.org/gnu/
MOZ_HTTP_URI="mirror://gnu/${PN}"
MOZCONFIG_OPTIONAL_WIFI=1
LLVM_MAX_SLOT=9
inherit check-reqs flag-o-matic toolchain-funcs eutils gnome2-utils llvm \
icecatconfig-v6.60 pax-utils xdg-utils autotools icecatlinguas-v2
DESCRIPTION="IceCat Web Browser"
HOMEPAGE="https://www.gnu.org/software/gnuzilla/"
KEYWORDS="~amd64"
SLOT="0"
LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
IUSE="eme-free geckodriver +gmp-autoupdate hardened hwaccel jack +screenshot selinux test -system-harfbuzz"
SDIR="release"
[[ ${PV} = *_beta* ]] && SDIR="beta"
PATCH_URI="https://dev.gentoo.org/~anarchy/mozilla/patchsets/firefox-60.6-patches-07.tar.xz"
SRC_URI="${SRC_URI}
${MOZ_HTTP_URI}/${PV}/${PN}-${PV}-gnu1.tar.bz2
${PATCH_URI}"
ASM_DEPEND=">=dev-lang/yasm-1.1"
RDEPEND="
system-icu? ( >=dev-libs/icu-60.2 )
jack? ( virtual/jack )
>=dev-libs/nss-3.36.7
>=dev-libs/nspr-4.19
<=virtual/rust-1.37.0
<=dev-lang/rust-1.37.0
selinux? ( sec-policy/selinux-mozilla )"
DEPEND="${RDEPEND}
amd64? ( ${ASM_DEPEND} virtual/opengl )
x86? ( ${ASM_DEPEND} virtual/opengl )"
S="${WORKDIR}/icecat-${PV}"
QA_PRESTRIPPED="usr/lib*/${PN}/icecat"
BUILD_OBJ_DIR="${S}/ff"
# allow GMP_PLUGIN_LIST to be set in an eclass or
# overridden in the enviromnent (advanced hackers only)
if [[ -z $GMP_PLUGIN_LIST ]]; then
GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )
fi
llvm_check_deps() {
if ! has_version --host-root "sys-devel/clang:${LLVM_SLOT}" ; then
ewarn "sys-devel/clang:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..."
return 1
fi
if use clang ; then
if ! has_version --host-root "=sys-devel/lld-${LLVM_SLOT}*" ; then
ewarn "=sys-devel/lld-${LLVM_SLOT}* is missing! Cannot use LLVM slot ${LLVM_SLOT} ..."
return 1
fi
fi
einfo "Will use LLVM slot ${LLVM_SLOT}!"
}
pkg_setup() {
moz_pkgsetup
# Avoid PGO profiling problems due to enviroment leakage
# These should *always* be cleaned up anyway
unset DBUS_SESSION_BUS_ADDRESS \
DISPLAY \
ORBIT_SOCKETDIR \
SESSION_MANAGER \
XDG_SESSION_COOKIE \
XAUTHORITY
addpredict /proc/self/oom_score_adj
llvm_pkg_setup
}
pkg_pretend() {
# Ensure we have enough disk space to compile
CHECKREQS_DISK_BUILD="4G"
check-reqs_pkg_setup
}
src_unpack() {
unpack ${A}
# Unpack language packs
icecatlinguas_src_unpack
}
src_prepare() {
eapply "${WORKDIR}"/firefox/2005_rust-1.33.0-missing-docs.patch
# Enable gnomebreakpad
if use debug ; then
sed -i -e "s:GNOME_DISABLE_CRASH_DIALOG=1:GNOME_DISABLE_CRASH_DIALOG=0:g" \
"${S}"/build/unix/run-mozilla.sh || die "sed failed!"
fi
# Drop -Wl,--as-needed related manipulation for ia64 as it causes ld sefgaults, bug #582432
if use ia64 ; then
sed -i \
-e '/^OS_LIBS += no_as_needed/d' \
-e '/^OS_LIBS += as_needed/d' \
"${S}"/widget/gtk/mozgtk/gtk2/moz.build \
"${S}"/widget/gtk/mozgtk/gtk3/moz.build \
|| die "sed failed to drop --as-needed for ia64"
fi
# Ensure that our plugins dir is enabled as default
sed -i -e "s:/usr/lib/mozilla/plugins:/usr/lib/nsbrowser/plugins:" \
"${S}"/xpcom/io/nsAppFileLocationProvider.cpp || die "sed failed to replace plugin path for 32bit!"
sed -i -e "s:/usr/lib64/mozilla/plugins:/usr/lib64/nsbrowser/plugins:" \
"${S}"/xpcom/io/nsAppFileLocationProvider.cpp || die "sed failed to replace plugin path for 64bit!"
# Fix sandbox violations during make clean, bug 372817
sed -e "s:\(/no-such-file\):${T}\1:g" \
-i "${S}"/config/rules.mk \
-i "${S}"/nsprpub/configure{.in,} \
|| die
# Don't exit with error when some libs are missing which we have in
# system.
sed '/^MOZ_PKG_FATAL_WARNINGS/s@= 1@= 0@' \
-i "${S}"/browser/installer/Makefile.in || die
# Don't error out when there's no files to be removed:
sed 's@\(xargs rm\)$@\1 -f@' \
-i "${S}"/toolkit/mozapps/installer/packager.mk || die
# Allow user to apply any additional patches without modifing ebuild
eapply_user
# Autotools configure is now called old-configure.in
# This works because there is still a configure.in that happens to be for the
# shell wrapper configure script
eautoreconf old-configure.in
# Must run autoconf in js/src
cd "${S}"/js/src || die
eautoconf old-configure.in
}
src_configure() {
MEXTENSIONS="default"
# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
# Note: These are for Gentoo Linux use ONLY. For your own distribution, please
# get your own set of keys.
_google_api_key=AIzaSyDEAOvatFo0eTgsV_ZlEzx0ObmepsMzfAc
# Add information about TERM to output (build.log) to aid debugging
# blessings problems
if [[ -n "${TERM}" ]] ; then
einfo "TERM is set to: \"${TERM}\""
else
einfo "TERM is unset."
fi
####################################
#
# mozconfig, CFLAGS and CXXFLAGS setup
#
####################################
mozconfig_init
mozconfig_config
mozconfig_use_enable geckodriver
# enable JACK, bug 600002
mozconfig_use_enable jack
# Enable/Disable eme support
use eme-free && mozconfig_annotate '+eme-free' --disable-eme
# It doesn't compile on alpha without this LDFLAGS
use alpha && append-ldflags "-Wl,--no-relax"
# Add full relro support for hardened
if use hardened; then
append-ldflags "-Wl,-z,relro,-z,now"
mozconfig_use_enable hardened hardening
fi
# Disable built-in ccache support to avoid sandbox violation, #665420
# Use FEATURES=ccache instead!
mozconfig_annotate '' --without-ccache
sed -i -e 's/ccache_stats = None/return None/' \
python/mozbuild/mozbuild/controller/building.py || \
die "Failed to disable ccache stats call"
# Setup api key for location services and safebrowsing, https://bugzilla.mozilla.org/show_bug.cgi?id=1531176#c34
echo -n "${_google_api_key}" > "${S}"/google-api-key
mozconfig_annotate '' --with-google-location-service-api-keyfile="${S}/google-api-key"
mozconfig_annotate '' --with-google-safebrowsing-api-keyfile="${S}/google-api-key"
mozconfig_annotate '' --enable-extensions="${MEXTENSIONS}"
mozconfig_annotate '' --with-branding=browser/branding/official
# allow elfhack to work in combination with unstripped binaries
# when they would normally be larger than 2GiB.
append-ldflags "-Wl,--compress-debug-sections=zlib"
echo "mk_add_options MOZ_OBJDIR=${BUILD_OBJ_DIR}" >> "${S}"/.mozconfig
echo "mk_add_options XARGS=/usr/bin/xargs" >> "${S}"/.mozconfig
# Default mozilla_five_home no longer valid option
sed '/with-default-mozilla-five-home=/d' -i "${S}"/.mozconfig
# Finalize and report settings
mozconfig_final
# workaround for funky/broken upstream configure...
SHELL="${SHELL:-${EPREFIX}/bin/bash}" MOZ_NOSPAM=1 \
./mach configure || die
}
src_compile() {
MOZ_MAKE_FLAGS="${MAKEOPTS}" SHELL="${SHELL:-${EPREFIX}/bin/bash}" MOZ_NOSPAM=1 \
./mach build --verbose || die
}
src_install() {
cd "${BUILD_OBJ_DIR}" || die
# Pax mark xpcshell for hardened support, only used for startupcache creation.
pax-mark m "${BUILD_OBJ_DIR}"/dist/bin/xpcshell
# Add our default prefs for icecat
cp "${FILESDIR}"/gentoo-default-prefs.js-2 \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js" \
|| die
mozconfig_install_prefs \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js"
# Augment this with hwaccel prefs
if use hwaccel ; then
cat "${FILESDIR}"/gentoo-hwaccel-prefs.js-1 >> \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js" \
|| die
fi
if ! use screenshot; then
echo "pref(\"extensions.screenshots.disabled\", true);" >> \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js" \
|| die
fi
echo "pref(\"extensions.autoDisableScopes\", 3);" >> \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js" \
|| die
local plugin
use gmp-autoupdate || use eme-free || for plugin in "${GMP_PLUGIN_LIST[@]}" ; do
echo "pref(\"media.${plugin}.autoupdate\", false);" >> \
"${BUILD_OBJ_DIR}/dist/bin/browser/defaults/preferences/all-gentoo.js" \
|| die
done
cd "${S}"
MOZ_MAKE_FLAGS="${MAKEOPTS}" SHELL="${SHELL:-${EPREFIX}/bin/bash}" MOZ_NOSPAM=1 \
DESTDIR="${D}" ./mach install || die
if use geckodriver ; then
cp "${BUILD_OBJ_DIR}"/dist/bin/geckodriver "${ED%/}"${MOZILLA_FIVE_HOME} || die
pax-mark m "${ED%/}"${MOZILLA_FIVE_HOME}/geckodriver
dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver
fi
# Install language packs
icecatlinguas_src_install
local size sizes icon_path icon name
sizes="16 22 24 32 48 64 128 256"
icon_path="${S}/browser/branding/official"
icon="${PN}"
name="GNU IceCat"
# Disable built-in auto-update because we update icecat through package manager
insinto ${MOZILLA_FIVE_HOME}/distribution/
newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
# Install icons and .desktop for menu entry
for size in ${sizes}; do
insinto "/usr/share/icons/hicolor/${size}x${size}/apps"
newins "${icon_path}/default${size}.png" "${icon}.png"
done
# Install a 48x48 icon into /usr/share/pixmaps for legacy DEs
newicon "${icon_path}/default48.png" "${icon}.png"
newmenu "${FILESDIR}/icon/${PN}.desktop" "${PN}.desktop"
sed -i -e "s:@NAME@:${name}:" -e "s:@ICON@:${icon}:" \
"${ED}/usr/share/applications/${PN}.desktop" || die
# Add StartupNotify=true bug 237317
if use startup-notification ; then
echo "StartupNotify=true"\
>> "${ED}/usr/share/applications/${PN}.desktop" \
|| die
fi
# Don't install llvm-symbolizer from sys-devel/llvm package
[[ -f "${ED%/}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] && \
rm "${ED%/}${MOZILLA_FIVE_HOME}/llvm-symbolizer"
# icecat and icecat-bin are identical
rm "${ED%/}"${MOZILLA_FIVE_HOME}/icecat-bin || die
dosym icecat ${MOZILLA_FIVE_HOME}/icecat-bin
# Required in order to use plugins and even run icecat on hardened.
pax-mark m "${ED}"${MOZILLA_FIVE_HOME}/{icecat,plugin-container}
}
pkg_preinst() {
gnome2_icon_savelist
# if the apulse libs are available in MOZILLA_FIVE_HOME then apulse
# doesn't need to be forced into the LD_LIBRARY_PATH
if use pulseaudio && has_version ">=media-sound/apulse-0.1.9" ; then
einfo "APULSE found - Generating library symlinks for sound support"
local lib
pushd "${ED}"${MOZILLA_FIVE_HOME} &>/dev/null || die
for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do
# a quickpkg rolled by hand will grab symlinks as part of the package,
# so we need to avoid creating them if they already exist.
if ! [ -L ${lib##*/} ]; then
ln -s "${lib}" ${lib##*/} || die
fi
done
popd &>/dev/null || die
fi
}
pkg_postinst() {
gnome2_icon_cache_update
xdg_desktop_database_update
if ! use gmp-autoupdate && ! use eme-free ; then
elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or"
elog "installing into new profiles:"
local plugin
for plugin in "${GMP_PLUGIN_LIST[@]}"; do elog "\t ${plugin}" ; done
elog
fi
if use pulseaudio && has_version ">=media-sound/apulse-0.1.9"; then
elog "Apulse was detected at merge time on this system and so it will always be"
elog "used for sound. If you wish to use pulseaudio instead please unmerge"
elog "media-sound/apulse."
elog
fi
}
pkg_postrm() {
gnome2_icon_cache_update
xdg_desktop_database_update
}