summarylogtreecommitdiffstats
path: root/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'PKGBUILD')
-rw-r--r--PKGBUILD286
1 files changed, 228 insertions, 58 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 34eb977d248e..828139a83fe5 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,69 +1,239 @@
-# Maintainer: Bruno Pagani (a.k.a. ArchangeGabriel) <bruno.n.pagani@gmail.com>
-# Contributor: Cedric MATHIEU <me.xenom @ gmail.com>
-
-_name=firefox
-_channel=nightly
-_lang=en-US
-pkgname=${_name}-${_channel}
-pkgdesc="Standalone Web Browser from Mozilla — Nightly build (${_lang})"
-url="https://www.mozilla.org/${_lang}/${_name}/${_channel}"
-_version=103.0a1
-pkgver=103.0a1.20220604213903+h490469b53dbe
+# Maintainer: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
+# Contributor: Ionut Biru <ibiru@archlinux.org>
+# Contributor: Jakub Schmidtke <sjakub@gmail.com>
+
+pkgname=firefox-nightly
+pkgver=103.0a1+20220626.1+h8256997a5472
pkgrel=1
-arch=(i686 x86_64)
+pkgdesc="Development version of the popular Firefox web browser"
+arch=(x86_64)
license=(MPL GPL LGPL)
-depends=(dbus-glib gtk3 libxt nss mime-types)
-optdepends=('pulseaudio: audio support'
- 'ffmpeg: h.264 video'
- 'hunspell: spell checking'
- 'hyphen: hyphenation'
- 'libnotify: notification integration'
- 'networkmanager: location detection via available WiFi networks'
- 'speech-dispatcher: text-to-speech')
-_url="https://download-installer.cdn.mozilla.net/pub/${_name}/nightly/latest-mozilla-central"
-_src="${_name}-${_version}.${_lang}.linux"
-_filename="$(date -u +%Y%m%d)-${_src}"
-source=("${pkgname}.desktop" 'policies.json')
-source_i686=("${_filename}-i686.tar.bz2"::"${_url}/${_src}-i686.tar.bz2"
- "${_filename}-i686.tar.bz2.asc"::"${_url}/${_src}-i686.tar.bz2.asc"
- "${_filename}-i686.txt"::"${_url}/${_src}-i686.txt")
-source_x86_64=("${_filename}-x86_64.tar.bz2"::"${_url}/${_src}-x86_64.tar.bz2"
- "${_filename}-x86_64.tar.bz2.asc"::"${_url}/${_src}-x86_64.tar.bz2.asc"
- "${_filename}-x86_64.txt"::"${_url}/${_src}-x86_64.txt")
-sha512sums=('87c181628c3be0762000ff3b5cb841ed2c2371937e4aab7f8f441c608dd08d349085036880c8e8aaed40d01fe258ea9be159741e9fad9f493c96fb9be4cc0de3'
- '5ed67bde39175d4d10d50ba5b12063961e725e94948eadb354c0588b30d3f97d2178b66c1af466a6e7bd208ab694227a1391c4141f88d3da1a1178454eba5308')
-sha512sums_i686=(SKIP SKIP SKIP)
-sha512sums_x86_64=(SKIP SKIP SKIP)
-validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla’s GnuPG release key
+url="https://www.mozilla.org/firefox/channel/#nightly"
+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-zstandard lld dump_syms
+ wasi-compiler-rt wasi-libc wasi-libc++ wasi-libc++abi
+ mercurial)
+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'
+ 'xdg-desktop-portal: Screensharing with Wayland')
+options=(!emptydirs !makeflags !strip !lto !debug)
+_repo=https://hg.mozilla.org/mozilla-central
+source=("hg+$_repo"
+ firefox-install-dir.patch
+ zstandard-0.18.0.diff
+ $pkgname.desktop identity-icons-brand.svg)
+sha256sums=('SKIP'
+ 'c80937969086550237b0e89a02330d438ce17c3764e43cc5d030cb21c2abce5f'
+ 'a6857ad2f2e2091c6c4fdcde21a59fbeb0138914c0e126df64b50a5af5ff63be'
+ '7d90a9abacb5cc9870a31323ef31e361f620538c56609001d6d9e789b99b5e97'
+ 'a9b8b4a0a1f4a7b4af77d5fc70c2686d624038909263c795ecc81e0aec7711e9')
+validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release@mozilla.com>
+
+# 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
pkgver() {
- echo "${_version}.$(head -n1 ${_filename}-${CARCH}.txt)+h$(tail -n1 ${_filename}-${CARCH}.txt | cut -c 44-55)"
+ cd mozilla-central
+
+ local version=$(<browser/config/version_display.txt)
+ local date=$(date +%Y%m%d) # Without TZ=UTC, to match systemd timer
+ local counter=1
+ local rev=$(hg id -i -r. | sed 's/+$//')
+
+ local last_rev=${pkgver##*+h} tmp=${pkgver#*+}; tmp=${tmp%+*}
+ local last_date=${tmp%.*} last_counter=${tmp#*.}
+ if [[ $date == $last_date ]]; then
+ if [[ $rev == $last_rev ]]; then
+ counter=$last_counter
+ else
+ counter=$((last_counter + 1))
+ fi
+ fi
+
+ echo $version+$date.$counter+h$rev
+}
+
+prepare() {
+ mkdir mozbuild
+ cd mozilla-central
+ patch -Np1 -i ../firefox-install-dir.patch
+
+ # Unbreak build with python-zstandard 0.18.0
+ patch -Np1 -i ../zstandard-0.18.0.diff
+
+ 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
+ac_add_options --enable-linker=lld
+ac_add_options --disable-elf-hack
+ac_add_options --disable-bootstrap
+ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
+
+# Branding
+ac_add_options --with-branding=browser/branding/nightly
+ac_add_options --enable-update-channel=nightly
+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_APP_REMOTINGNAME=${pkgname//-/}
+
+# 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
+
+# Features
+ac_add_options --enable-alsa
+ac_add_options --enable-jack
+ac_add_options --enable-crashreporter
+ac_add_options --disable-updater
+ac_add_options --disable-tests
+END
+}
+
+build() {
+ cd mozilla-central
+
+ export MOZ_SOURCE_REPO="$_repo"
+ export MOZ_NOSPAM=1
+ export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
+ export MOZ_ENABLE_FULL_SYMBOLS=1
+ export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
+
+ # LTO needs more open files
+ ulimit -n 4096
+
+ # 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-lto=cross
+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
+ ./mach build
+
+ echo "Building symbol archive..."
+ ./mach buildsymbols
}
package() {
- OPT_PATH="opt/${pkgname}"
-
- # Install the package files
- install -d "${pkgdir}"/{usr/bin,opt}
- cp -r ${_name} "${pkgdir}"/${OPT_PATH}
- ln -s "/${OPT_PATH}/${_name}" "${pkgdir}"/usr/bin/${pkgname}
-
- # Install .desktop files
- install -Dm644 "${srcdir}"/${pkgname}.desktop -t "${pkgdir}"/usr/share/applications
-
- # Install icons
- SRC_LOC="${srcdir}"/${_name}/browser
- DEST_LOC="${pkgdir}"/usr/share/icons/hicolor
- for i in 16 32 48 64 128
- do
- install -Dm644 "${SRC_LOC}"/chrome/icons/default/default${i}.png "${DEST_LOC}"/${i}x${i}/apps/${pkgname}.png
+ cd mozilla-central
+ DESTDIR="$pkgdir" ./mach install
+
+ 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", "");
+
+// Use system-provided dictionaries
+pref("spellchecker.dictionary_path", "/usr/share/hunspell");
+
+// Disable default browser checking.
+pref("browser.shell.checkDefaultBrowser", false);
+
+// Don't disable extensions in the application directory
+pref("extensions.autoDisableScopes", 11);
+END
+
+ local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
+ install -Dvm644 /dev/stdin "$distini" <<END
+[Global]
+id=archlinux
+version=1.0
+about=Mozilla Firefox for Arch Linux
+
+[Preferences]
+app.distributor=archlinux
+app.distributor.channel=$pkgname
+app.partner.archlinux=archlinux
+END
+
+ local i theme=nightly
+ for i in 16 22 24 32 48 64 128 256; do
+ install -Dvm644 browser/branding/$theme/default$i.png \
+ "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
done
+ install -Dvm644 browser/branding/$theme/content/about-logo.png \
+ "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
+ install -Dvm644 browser/branding/$theme/content/about-logo@2x.png \
+ "$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png"
+ install -Dvm644 browser/branding/$theme/content/about-logo.svg \
+ "$pkgdir/usr/share/icons/hicolor/scalable/apps/$pkgname.svg"
+ install -Dvm644 ../identity-icons-brand.svg \
+ "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"
- # Disable auto-updates
- install -Dm644 "${srcdir}"/policies.json -t "${pkgdir}"/${OPT_PATH}/distribution
+ install -Dvm644 ../$pkgname.desktop \
+ "$pkgdir/usr/share/applications/$pkgname.desktop"
- # Use system-provided dictionaries
- rm -rf "${pkgdir}"/${OPT_PATH}/{dictionaries,hyphenation}
- ln -sf /usr/share/hunspell "${pkgdir}"/${OPT_PATH}/dictionaries
- ln -sf /usr/share/hyphen "${pkgdir}"/${OPT_PATH}/hyphenation
+ # Install a wrapper to avoid confusion about binary path
+ 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 -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
}
+
+# vim:set sw=2 et: