# Maintainer (Arch): Jan Alexander Steffens (heftig) # Contributor (Arch): Ionut Biru # Contributor (Arch): Jakub Schmidtke # Contributor: Figue # Contributor: fauno # Contributor: evr # Contributor: Muhammad 'MJ' Jassim # Contributor: vando # Contributor: André Silva # Contributor: Henry Jensen # Contributor: Luke Shumaker # Contributor: Márcio Silva # Maintainer: Andreas Grapentin # NOTE: icecat (60.7 < V <= 78.4) are not upstream releases # upstream releases would normally have '-gnu' appended to $_upstream_ver # this build is based on gnuzilla VCS developement sources # rev: 05adddbf87a5ee11de7cd90794c331a178bcfd5c # needed for the !(...) matching in prepare() shopt -s extglob pkgname=icecat _upstream_ver=78.4.0 # -gnu pkgver=${_upstream_ver//-/_} pkgrel=1 pkgdesc="GNU IceCat - a libre standalone web browser based on Mozilla Firefox ESR" arch=(x86_64 i686 armv7h) license=(MPL GPL LGPL) url=http://www.gnu.org/software/gnuzilla/ depends=(gtk3 libxt mime-types dbus-glib ffmpeg nss ttf-font libpulse) makedepends=(unzip zip diffutils yasm mesa imake inetutils xorg-server-xvfb autoconf2.13 rust clang llvm jack gtk2 nodejs cbindgen nasm python-setuptools python-psutil lld) makedepends+=(mozilla-searchplugins jq) optdepends=('networkmanager: Location detection via available WiFi networks' 'libnotify: Notification integration' 'pulseaudio: Audio support' 'speech-dispatcher: Text-to-Speech' 'hunspell-en_US: Spell checking, American English') options=(!emptydirs !makeflags !strip) source=(https://repo.parabola.nu/other/${pkgname}/${pkgname}-${_upstream_ver}-pre.tar.bz2{,.sig} ${pkgname}.desktop 0001-Use-remoting-name-for-GDK-application-names.patch rust-1.48_icecat-78.6.0.patch) source+=(libre.patch mozilla-1663715.patch) source_i686=('avoid-libxul-OOM-python-check.patch' 'rust-static-disable-network-test-on-static-libraries.patch') sha256sums=('314171bb68cd8b0fb7b880a77f3a2daa65acd660fc6f2a7d6871c5a5ba44be52' 'SKIP' 'f9f954fd06739e70a72ccf4774cfa71f349a4b133ec8f5dea0a3bcca2cf7321d' '3bb7463471fb43b2163a705a79a13a3003d70fff4bbe44f467807ca056de9a75' 'd90faa59dc59f457c5770b3cc1ee4caa5b255e754ab9ab3993af894992c007e4' '28029afa3201e1be8138be06f741c59d64869edf0c9e90dbb05cfa6b5fff4ecd' '665cf25255fd240f79d5d010b3c3764f2d80aa81fdc7b6e9a9728e4a7970685b') sha256sums_i686=('80b6461579398398c28f9b72b0c55220f261d9bf6c5a253e3bc66dc8a65131f6' 'e661665ee00ecec66c33e115b0af3474452022f0d8ceda634a6315dc8cb99014') validpgpkeys=('318C679D94F17700CC847DE646A70073E4E50D4E' # Ruben Rodriguez '3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger # PGO requires networking _should_skip_pgo_armv7h=1 # disable for armv7h - always _should_skip_pgo_i686=1 # disable for i686 - always _should_skip_pgo_x86_64=0 # disable for x86_64 - libremakepkg eval "_should_skip_pgo=\$_should_skip_pgo_${CARCH}" _check_build_config() { pushd "${srcdir}"/${pkgname}-${pkgver%_*} > /dev/null echo "Checking build configuration..." # Configure produces mozinfo.json that reflects current configuration. # See build/docs/mozinfo.rst ./mach configure # In this test, jq collects values of the following keys of mozinfo.json into array, # and checks if any of them are not equal to false, in which case it returns "true". # E.g. if the value of any key is true or null (in case the key is missing from mozinfo.json), # that means the build configuration has to be reworked. declare -A antifeatures=( [.crashreporter]=true \ [.datareporting]=true \ [.healthreport]=true \ [.normandy]=true \ [.telemetry]=true \ [.updater]=true ) local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}') local config_file="${obj_directory}"/mozinfo.json echo "verifying disabled anti-features in: ${config_file}" for key in ${!antifeatures[@]} do jq -e "${key} != false" "${config_file}" > /dev/null || unset antifeatures[${key}] done if (( ${#antifeatures[@]} )) then echo "Some anti-features are not disabled in build configuration files - aborting:" for key in ${!antifeatures[@]} ; do echo " - ${key} is enabled" ; done ; # FIXME: '- .datareporting is enabled' - this build may not be FSDG-fit # TODO: investigate the implications of this # return 1 fi popd > /dev/null } prepare() { mkdir -p mozbuild cd "$srcdir/$pkgname-${pkgver%_*}" # https://bugzilla.mozilla.org/show_bug.cgi?id=1530052 patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1667736 patch -Np1 -i ../rust-1.48_icecat-78.6.0.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1663715 patch -Np1 -i ../mozilla-1663715.patch cat >../mozconfig <> ../mozconfig <>../mozconfig < browser/components/search/extensions/list.json << EOF { "default": { "visibleDefaultEngines": [ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki", "searx", "wikipedia", "yacy" ] }, "regionOverrides": { }, "locales": { EOF comma="," for locale in "${locales[@]}"; do [ "$locale" != "${locales[-1]}" ] || comma="" cat >> browser/components/search/extensions/list.json << EOF $locale: { "default": { "visibleDefaultEngines": [ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki", "searx", "wikipedia", "yacy" ] } }$comma EOF done cat >> browser/components/search/extensions/list.json << EOF } } EOF # Sanity-check search-engines patching local engines_err_msg="search-engines patching needs re-working" jq < browser/components/search/extensions/list.json || ! echo "${engines_err_msg}" # Patch and remove anything that's left echo "applying libre.patch" patch -Np1 -i "${srcdir}"/libre.patch } build() { cd "$srcdir/$pkgname-${pkgver%_*}" export MOZ_NOSPAM=1 export MOZBUILD_STATE_PATH="$srcdir/mozbuild" # LTO needs more open files ulimit -n 4096 # clang-{9,10,11} -> error: unknown argument: '-fvar-tracking-assignments' CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}" ## [ARCH-SPECIFIC BUILD ENV] ## # TODO: this per-arch handling is yet to be re-worked for armv7h case "${CARCH}" in armv*) # export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" # export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" # export CFLAGS # export CXXFLAGS ;; i686) # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error CFLAGS="${CFLAGS/-fno-plt/}" CXXFLAGS="${CXXFLAGS/-fno-plt/}" export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off" # export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" # ld.lld: error: unknown argument '--reduce-memory-overheads' export LDFLAGS+=" -Wl,--no-keep-memory" export CFLAGS export CXXFLAGS ;; x86_64) # TODO: this may only be needed for v78 # -fno-plt with cross-LTO causes obscure LLVM errors # LLVM ERROR: Function Import: link error CFLAGS="${CFLAGS/-fno-plt/}" CXXFLAGS="${CXXFLAGS/-fno-plt/}" export CFLAGS export CXXFLAGS ;; *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ; ;; esac ## [ARCH-SPECIFIC BUILD CONFIG] ## # TODO: this per-arch handling is yet to be re-worked for armv7h case ${CARCH} in armv7h) ;; i686) # avoid excessive debug symbols in rust leading to out-of-memory situations sed -i "s/debug_info = '\''2'\''/debug_info = '\''0'\''/" build/moz.configure/toolchain.configure ;; x86_64) ;; *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ; ;; esac ## PGO build ## if (( $_should_skip_pgo )) then # skipping "3-tier PGO" "instrumented browser", to avoid OOM problems; # so we have the final .mozconfig now cp ../mozconfig .mozconfig else # Do 3-tier PGO echo "Building instrumented browser..." cat >.mozconfig ../mozconfig - <.mozconfig ../mozconfig - < "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf ;; x86_64) ;; *) echo "no [ARCH-SPECIFIC INSTALL] for arch: ${CARCH}" ; return 1 ; ;; esac }