summarylogtreecommitdiffstats
path: root/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'PKGBUILD')
-rw-r--r--PKGBUILD225
1 files changed, 177 insertions, 48 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 5b9896fe17d9..714d9881ac35 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,68 +1,141 @@
# $Id$
# Maintainer: Frederic Bezies <fredbezies at gmail dot com>
-# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+# Contributor: Felix Golatofski <contact@xdfr.de>
+# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor: Ionut Biru <ibiru@archlinux.org>
# Contributor: Jakub Schmidtke <sjakub@gmail.com>
+# Contributor: Luna Jernberg <droidbittin@gmail.com>
+
+##
+## The following variables can be customized at build time. Use env or export to change at your wish
+##
+## Example: env enable_pgo=y makepkg -sc
+##
+## Optimized build: env enable_pgo=y enable_lto=y makepkg -sc
+## Optimized build, less RAM required: env enable_pgo=y enable_lto=y enable_no_keep_memory=y makepkg -sc
+## Less optimization enabled, faster compilation: env enable_pgo=n enable_lto=n makepkg -sc
+##
+## Enable PGO, increasing performances but makes the compilation slower.
+## It builds Firefox a first time without LTO, runs the test suite to generate
+## a PGO profile, then builds Firefox again (with optional LTO) using this
+## profile.
+## Set variable "enable_pgo" to: y to enable (increase performance, default in official firefox-beta)
+## n to disable (less optimized, but faster compilation, as it will skip the profile generation)
+if [ -z ${enable_pgo+x} ]; then
+ enable_pgo=y
+fi
+
+## Enable LTO, increasing performances but makes the compilation slower and
+## requires more RAM to build. Only affects clang, rust has LTO enabled by
+## default.
+## Disable it if the compilation runs out-of-memory.
+## Set variable "enable_lto" to: y to enable (increase performance, default in official firefox-beta, but slower to compile)
+## n to disable (less optimized, but faster to compile)
+if [ -z ${enable_lto+x} ]; then
+ enable_lto=y
+fi
+
+## Enable --no-keep-memory in LD when compiling with LTO enabled. Useful when
+## running OOM during the compilation, as LD will consume less memory when ##
+## linking. Doesn't impact the performance of the generated binary, but makes
+## the compilation a bit slower.
+## Set variable "enable_no_keep_memory" to: n to disable (default)
+## y to enable (slower compilation, but compilation requires less memory)
+if [ -z ${enable_no_keep_memory+x} ]; then
+ enable_no_keep_memory=n
+fi
+
+### IMPORTANT: Do no edit below this line unless you know what you're doing
pkgname=firefox-beta
_pkgname=firefox
-name=firefox-beta
-pkgver=70.0b13
-_pkgver=70.0
+pkgver=95.0b2
+_major=${pkgver/rc*}
+_build=${pkgver/*rc}
+_pkgver=95.0
pkgrel=1
pkgdesc="Standalone web browser from mozilla.org - Beta"
arch=(i686 x86_64)
license=(MPL GPL LGPL)
url="https://www.mozilla.org/en-US/firefox/channel/#beta"
-depends=(gtk3 mozilla-common libxt startup-notification mime-types dbus-glib
- ffmpeg nss ttf-font libpulse)
-makedepends=(unzip zip diffutils python2-setuptools yasm mesa imake inetutils
- xorg-server-xvfb autoconf2.13 rust clang llvm jack gtk2
- python nodejs python2-psutil cbindgen nasm)
+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 nodejs cbindgen nasm
+ python-setuptools python-psutil python-zstandard lld dump_syms)
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')
+ 'hunspell-en_US: Spell checking, American English'
+ 'xdg-desktop-portal: Screensharing with Wayland')
provides=("firefox=$pkgver")
conflicts=('firefox-beta-bin')
options=(!emptydirs !makeflags !strip)
-source=("http://ftp.mozilla.org/pub/firefox/releases/$pkgver/source/$_pkgname-$pkgver.source.tar.xz"
- "$_pkgname.sh"
- "$pkgname.desktop"
- "$_pkgname-symbolic.svg")
-sha256sums=('b53e893c0584f2f890f1675cd76001cfb68a03648fe21d430a7195a14270427b'
- '367100e5f66523a90c3792e2e0d0e2fe8a3c28748b905ce9f5f6b121343d7842'
- 'd6b4c91a7fe77f9a335b44b943e120ce44511e46bbb16ae305cc82b4c3db66cd'
- 'a2474b32b9b2d7e0fb53a4c89715507ad1c194bef77713d798fa39d507def9e9')
+source=(http://archive.mozilla.org/pub/firefox/releases/${pkgver}/source/$_pkgname-$pkgver.source.tar.xz{,.asc}
+ 0001-Use-remoting-name-for-GDK-application-names.patch
+ $pkgname.desktop)
+sha256sums=('9eb978f7573077e8c3682050ef19dbd4517d6afc4ea91d423331a7a460765914'
+ 'SKIP'
+ 'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb'
+ '54d93249fedc9c4cdc5eb82da498b08f08bcb089f85a138b457f3251a0913ad1')
+validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release@mozilla.com>
+
+# RC
+if [[ $_build = ? ]]; then
+ source[0]="firefox-$pkgver.source.tar.xz::https://ftp.mozilla.org/pub/firefox/candidates/$_major-candidates/build$_build/source/firefox-$_major.source.tar.xz"
+ source[1]="firefox-$pkgver.source.tar.xz.asc::https://ftp.mozilla.org/pub/firefox/candidates/$_major-candidates/build$_build/source/firefox-$_major.source.tar.xz.asc"
+fi
+
+# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
+# Note: These are for Arch Linux use ONLY. For your own distribution, please
+# get your own set of keys. Feel free to contact foutrelis@archlinux.org for
+# more information.
+_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM
+
+# Mozilla API keys (see https://location.services.mozilla.com/api)
+# Note: These are for Arch Linux use ONLY. For your own distribution, please
+# get your own set of keys. Feel free to contact heftig@archlinux.org for
+# more information.
+_mozilla_api_key=e05d56db0a694edc8b5aaebda3f2db6a
+
prepare() {
mkdir mozbuild
cd firefox-$_pkgver
- cat >.mozconfig <<END
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1530052
+ patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch
+
+ echo -n "$_google_api_key" >google-api-key
+ echo -n "$_mozilla_api_key" >mozilla-api-key
+
+ cat >../mozconfig <<END
ac_add_options --enable-application=browser
+mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
ac_add_options --prefix=/usr
ac_add_options --enable-release
ac_add_options --enable-hardening
ac_add_options --enable-optimize
ac_add_options --enable-rust-simd
-
-export CC=clang
-export CXX=clang++
-export AR=llvm-ar
-export NM=llvm-nm
-export RANLIB=llvm-ranlib
+ac_add_options --enable-linker=lld
+ac_add_options --disable-elf-hack
+ac_add_options --disable-bootstrap
# Branding
-ac_add_options --with-branding=browser/branding/aurora
-#ac_add_options --enable-update-channel=beta
+ac_add_options --enable-official-branding
+ac_add_options --enable-update-channel=beta
ac_add_options --with-distribution-id=org.archlinux
+ac_add_options --with-unsigned-addon-scopes=app,system
+ac_add_options --allow-addon-sideload
export MOZILLA_OFFICIAL=1
-#export MOZ_TELEMETRY_REPORTING=0
-export MOZ_ADDON_SIGNING=1
-export MOZ_REQUIRE_SIGNING=0
+export MOZ_APP_REMOTINGNAME=${pkgname//-/}
+export MOZ_TELEMETRY_REPORTING=1
+
+# Keys
+ac_add_options --with-google-location-service-api-keyfile=${PWD@Q}/google-api-key
+ac_add_options --with-google-safebrowsing-api-keyfile=${PWD@Q}/google-api-key
+ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key
# System libraries
ac_add_options --with-system-nspr
@@ -71,12 +144,9 @@ ac_add_options --with-system-nss
# Features
ac_add_options --enable-alsa
ac_add_options --enable-jack
-ac_add_options --enable-startup-notification
ac_add_options --enable-crashreporter
-ac_add_options --disable-gconf
ac_add_options --disable-updater
ac_add_options --disable-tests
-
END
}
@@ -85,18 +155,66 @@ build() {
export MOZ_NOSPAM=1
export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
+ export MOZ_ENABLE_FULL_SYMBOLS=1
+ export MACH_USE_SYSTEM_PYTHON=1
- ./mach configure
+ # LTO needs more open files
+ ulimit -n 4096
+
+ if [ "$enable_pgo" = "y" ]; then
+ # Do 3-tier PGO
+ echo "Building instrumented browser..."
+ cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-profile-generate=cross
+END
+ ./mach build
+
+ echo "Profiling instrumented browser..."
+ ./mach package
+ LLVM_PROFDATA=llvm-profdata \
+ JARLOG_FILE="$PWD/jarlog" \
+ xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \
+ ./mach python build/pgo/profileserver.py
+
+ stat -c "Profile data found (%s bytes)" merged.profdata
+ test -s merged.profdata
+
+ stat -c "Jar log found (%s bytes)" jarlog
+ test -s jarlog
+
+ echo "Removing instrumented browser..."
+ ./mach clobber
+
+ echo "Building optimized browser..."
+ cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-profile-use=cross
+ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
+ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog
+END
+ else
+ cat >.mozconfig ../mozconfig
+ fi
+
+ if [ "$enable_lto" = "y" ]; then
+ echo "ac_add_options --enable-lto=cross" >> .mozconfig
+ if [ "$enable_no_keep_memory" = "y" ]; then
+ LDFLAGS="$LDFLAGS,--no-keep-memory"
+ fi
+ fi
./mach build
+ echo "Building symbol archive..."
+ ./mach buildsymbols
}
package() {
cd firefox-$_pkgver
DESTDIR="$pkgdir" ./mach install
+ mv "$pkgdir"/usr/lib/{firefox,$pkgname}
+ rm "$pkgdir"/usr/bin/firefox
- _vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
- install -Dm644 /dev/stdin "$_vendorjs" <<END
+ local vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
+ install -Dvm644 /dev/stdin "$vendorjs" <<END
// Use LANG environment variable to choose locale
pref("intl.locale.requested", "");
@@ -108,11 +226,10 @@ pref("browser.shell.checkDefaultBrowser", false);
// Don't disable our bundled extensions in the application directory
pref("extensions.autoDisableScopes", 11);
-pref("extensions.shownSelectionUI", true);
END
- _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
- install -Dm644 /dev/stdin "$_distini" <<END
+ local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
+ install -Dm644 /dev/stdin "$distini" <<END
[Global]
id=archlinux
version=1.0
@@ -124,29 +241,41 @@ app.distributor.channel=$pkgname
app.partner.archlinux=archlinux
END
+local i theme=official
for i in 16 22 24 32 48 64 128 256; do
- install -Dm644 browser/branding/official/default$i.png \
+ install -Dvm644 browser/branding/$theme/default$i.png \
"$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
done
- install -Dm644 browser/branding/official/content/about-logo.png \
+ install -Dvm644 browser/branding/$theme/content/about-logo.png \
"$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
- install -Dm644 browser/branding/official/content/about-logo@2x.png \
+ install -Dvm644 browser/branding/$theme/content/about-logo@2x.png \
"$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png"
- install -Dm644 ../firefox-symbolic.svg \
+ install -Dvm644 browser/branding/$theme/content/identity-icons-brand.svg \
"$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"
- install -Dm644 ../$pkgname.desktop \
+ install -Dvm644 ../$pkgname.desktop \
"$pkgdir/usr/share/applications/$pkgname.desktop"
# Install a wrapper to avoid confusion about binary path
- install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
+ install -Dvm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
#!/bin/sh
exec /usr/lib/$pkgname/firefox "\$@"
END
# Replace duplicate binary with wrapper
# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
- ln -srf "$pkgdir/usr/bin/$pkgname" \
- "$pkgdir/usr/lib/$pkgname/firefox-bin"
-}
+ ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/firefox-bin"
+
+ # Use system certificates
+ local nssckbi="$pkgdir/usr/lib/$pkgname/libnssckbi.so"
+ if [[ -e $nssckbi ]]; then
+ ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi"
+ fi
+ export SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE="$startdir/.crash-stats-api.token"
+ if [[ -f $SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE ]]; then
+ make -C obj uploadsymbols
+ else
+ cp -fvt "$startdir" obj/dist/*crashreporter-symbols-full.tar.zst
+ fi
+}