diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 286 |
1 files changed, 228 insertions, 58 deletions
@@ -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: |