summaryrefslogtreecommitdiff
path: root/libre/iceweasel/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'libre/iceweasel/PKGBUILD')
-rw-r--r--libre/iceweasel/PKGBUILD971
1 files changed, 691 insertions, 280 deletions
diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD
index 39a5fcf75..77b09ab3f 100644
--- a/libre/iceweasel/PKGBUILD
+++ b/libre/iceweasel/PKGBUILD
@@ -1,10 +1,10 @@
-# Maintainer (arch): Jan Alexander Steffens (heftig) <heftig@archlinux.org>
-# Contributor (arch): Ionut Biru <ibiru@archlinux.org>
-# Contributor (arch): Jakub Schmidtke <sjakub@gmail.com>
-# Maintainer (connochaetos): Henry Jensen <hjensen@connochaetos.org>
-# Maintainer (alarm): Kevin Mihelich <kevin@archlinuxarm.org>
-# Maintainer (arch32): Andreas Baumann <mail@andreasbaumann.cc>
-# Contributor (arch32): Erich Eckner <git@eckner.net>
+# Maintainer (arch:firefox): Jan Alexander Steffens (heftig) <heftig@archlinux.org>
+# Contributor: Ionut Biru <ibiru@archlinux.org>
+# Contributor: Jakub Schmidtke <sjakub@gmail.com>
+# Contributor: Henry Jensen <hjensen@connochaetos.org>
+# Maintainer (archarm:firefox): Kevin Mihelich <kevin@archlinuxarm.org>
+# Maintainer (arch32:firefox): Andreas Baumann <mail@andreasbaumann.cc>
+# Contributor: Erich Eckner <git@eckner.net>
# Contributor: Andreas Grapentin <andreas@grapentin.org>
# Contributor: Luke Shumaker <lukeshu@parabola.nu>
# Contributor: André Silva <emulatorman@hyperbola.info>
@@ -14,6 +14,7 @@
# Contributor: Figue <ffigue at gmail>
# Contributor: evr <evanroman at gmail>
# Contributor: Muhammad 'MJ' Jassim <UnbreakableMJ@gmail.com>
+# Contributor: vando <facundo@esdebian.org>
# Contributor: taro-k <taro-k@movasense_com>
# Contributor: Michał Masłowski <mtjm@mtjm.eu>
# Contributor: Luke R. <g4jc@openmailbox.org>
@@ -22,93 +23,390 @@
# Contributor: grizzlyuser <grizzlyuser@protonmail.com>
-# Rational for inclusion in [libre]:
-# FSDG:
-# - Modify the addons pages to use GNU IceCat plugins sources, rather
-# than addons.mozilla.org, which hosts non-free addons
+# parabola changes and rationale:
+# libre:
+# - Modify the add-ons GUI to search the Gnuzilla Mozzarella website
+# instead of the Mozilla add-ons website, which hosts non-free addons
# - Disable EME, which is implemented via the non-free libWideVine CDM
-# - Rebrand to Iceweasel, per the mozilla trademark policy,
-# due to these FSDG changes
+# - Disable Normandy that let Mozilla push messages with recommendations
+# of nonfree software
+# - Make Remote Settings work completely offline using local data
+# - Use system python libs. The arch package uses 'pip' to download
+# dependencies from the internet at build-time, despite that those needed
+# dependencies are already packaged in the arch repos. So strictly-speaking,
+# the package is not built from source, as some sources will be missing
+# from the published source package, and will not be required as makedepends.
#
# technical:
-# - build i686 with GCC instead of clang
+# - build 32-bit arches with GCC instead of clang
# - disable rust-SIMD, LTO, PGO, and skip profiling build for armv7h and i686
-# - allow skipping profiling build for x86_64 (_x86_64_skip_pgo)
+# - allow skipping profiling build for x86_64 (_SKIP_PGO).
+# this is to avoid OOM problems, and occasional deadlocks in some versions,
+# which expect active netwokring or internet access at build time.
# - prefer as many system libs as possible, over their vendored couterparts
-#
+# - Rebrand to Iceweasel, per the mozilla trademark policy, due to the FSDG changes
+# - set user profile directory to ~/.mozilla/iceweasel
+#
# privacy:
# - Remove Google API keys and usage
-# - Disable Mozilla telemetry and crash reporting (good manners
-# because of all of the other patching we're doing)
+# - Disable Mozilla telemetry and crash reporting
+# (good manners because of all of the other patching we're doing)
+# - do not compile/upload remote debug symbols
+
+
+# NOTE: This PKGBUILD is kept in-sync, as closely as possible,
+# with arch{,arm,32} (firefox), and parabola {iceweasel,icecat},
+# for the sake of documentation and cleaner diffs.
+# That also helps to identify which changes were made by Parabola vs upstream.
+# Therefore, this PKGBUILD may declare blacklisted dependencies, non-free sources,
+# or include code for anti-features; but those will be filtered-out subsequently.
+# Any code which implements an anti-feature should be commented-out;
+# and include an 'anti-feature' comment, for clarity.
+# Any blacklisted dependencies and non-free sources should be filtered,
+# and include a 'non-free' comment, for clarity.
+# Without those over-rides, the resulting program may not be FSDG-fit.
+# Do not circumvent those over-rides, if compiling for the Parabola repos.
pkgname=iceweasel
epoch=1
-pkgver=80.0
+pkgver=123.0.1
pkgrel=1
pkgrel+=.parabola1
-_brandingver=80.0
+_brandingver=123.0
_brandingrel=1
pkgdesc="Standalone web browser derived from Mozilla Firefox"
+url=https://wiki.parabola.nu/Iceweasel
arch=(x86_64)
-arch+=(i686 armv7h)
-license=(MPL GPL LGPL)
-url="https://wiki.parabola.nu/Iceweasel"
-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)
-# FIXME: 'mozilla-serarchplugins' package needs re-working (see note in prepare())
-makedepends+=(quilt libxslt imagemagick git 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')
+arch+=(armv7h i686)
+license=(
+ GPL
+ LGPL
+ MPL
+)
+depends=(
+ dbus
+ ffmpeg
+ gtk3
+ libpulse
+ libxss
+ libxt
+ mime-types
+ nss
+ ttf-font
+)
+makedepends=(
+ cbindgen
+ clang
+ diffutils
+ imake
+ inetutils
+ jack
+ lld
+ llvm
+ mesa
+ nasm
+ nodejs
+ python
+ rust
+ unzip
+ wasi-compiler-rt
+ wasi-libc
+ wasi-libc++
+ wasi-libc++abi
+ xorg-server-xvfb
+ yasm
+ zip
+)
+makedepends+=(
+ git
+ imagemagick
+ jq
+ libxslt
+ python-jsonschema
+ python-setuptools
+ python-typing-extensions
+ python-zstandard
+ quilt
+)
+optdepends=(
+ 'hunspell-en_US: Spell checking, American English'
+ 'libnotify: Notification integration'
+ 'networkmanager: Location detection via available WiFi networks'
+ 'pulseaudio: Audio support'
+ 'speech-dispatcher: Text-to-Speech'
+ 'xdg-desktop-portal: Screensharing with Wayland'
+)
+# install=${pkgname}.install # TODO: redmine #2164
+# provides=('firefox') # TODO: redmine #2164 - currently conflicts with 'your-freedom'
replaces=('firefox')
-options=(!emptydirs !makeflags !strip)
-source=(https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz{,.asc}
- 0001-Use-remoting-name-for-GDK-application-names.patch
- $pkgname.desktop)
-source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-${_brandingrel}.branding.tar.xz{,.sig}
- libre.patch
- libre-searchengines.patch
- vendor.js.in)
-source_armv7h=(arm.patch
- build-arm-libopus.patch)
-source_i686=('avoid-libxul-OOM-python-check.patch'
- 'rust-static-disable-network-test-on-static-libraries.patch')
-sha256sums=('380d9853e0712442ba2d4acd85c0e09c19ad36561a3ea8932705ad6b8a91146a'
+options=(
+ !emptydirs
+ !lto
+ !makeflags
+)
+source=(
+ https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz{,.asc}
+ $pkgname.desktop
+ identity-icons-brand.svg
+)
+source=(${source[*]/identity-icons-brand.svg/}) # branding over-ride
+source+=(
+ https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}-${_brandingrel}.branding.tar.xz{,.sig}
+ 9001-FSDG-sync-remote-settings-with-local-dump.patch
+ 9002-FSDG-preference-defaults.patch
+ 9003-FSDG-urihandlers.patch
+ 9004-FSDG-misc.patch
+ process-json-files.py
+ vendor.js.in
+)
+source_i686=(
+ avoid-libxul-OOM-python-check.patch
+ rust-static-disable-network-test-on-static-libraries.patch
+ firefox-111.0.1-fdlibm.patch
+ fix-i686-build-moz-1792159.patch
+ fix-i686-xsimd-incomplete.patch
+)
+validpgpkeys=(
+ # Mozilla Software Releases <release@mozilla.com>
+ # https://blog.mozilla.org/security/2023/05/11/updated-gpg-key-for-signing-firefox-releases/
+ 14F26682D0916CDD81E37B6D61B7B526D98F0353
+)
+validpgpkeys+=(
+ 'BFA8008A8265677063B11BF47171986E4B745536' # Andreas Grapentin
+ '3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40' # bill-auger
+)
+
+sha256sums=('d5dcb955b65e0f164a90cac0760724486e36e896221b98f244801dfd045d741c'
'SKIP'
- '3bb7463471fb43b2163a705a79a13a3003d70fff4bbe44f467807ca056de9a75'
- '44be8e819b8334ed36e9410d62dbc6c16dd8f8329a191403bfdce3cf2e9181fc')
-sha256sums+=('228b7d316ab6836a6e69aa7070033b1ae073f3579474a49d8c306702b1c1413e'
+ '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') # $pkgname.desktop
+ # identity-icons-brand.svg
+sha256sums+=('3a365374e3565a8963b000410cdd863d2fe3b4da9f63aa90d4150d1e1822102b' # *.branding.tar.xz
'SKIP'
- '5cfcadbd168c52b1b1e3f2f2c45911a4ae1a9d8a05918be68475a31985607bd8'
- '0ed6b8efa00f73a96bceaba2d6a31fb11d416106729ab9b8289b191eb9acccfa'
- '714998c5fc379f54a66ff80a845b7880169cd5b4094b77b719a99d33b65c0940')
-sha256sums_armv7h=('bc00516032330760444939c516a60c78f868631e1b37f075f0fe71a53737b966'
- '2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
-sha256sums_i686=('bf2829f280ef05a608584ce7ec95875e147f315bac9609f5e18052bc03e3c4f9'
- 'e661665ee00ecec66c33e115b0af3474452022f0d8ceda634a6315dc8cb99014')
-validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release@mozilla.com>
-validpgpkeys+=('BFA8008A8265677063B11BF47171986E4B745536') # Andreas Grapentin
-validpgpkeys+=('3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger
+ 'b6b100d7749387362bda9c8c8c19fe742870ec8a7a39172878b8dbfe773efeee' # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+ '8f530e41f19675bd74e62f5182f7975a24b690d5d17420fbe8a5365d55b71910' # 9002-FSDG-preference-defaults.patch
+ '07d6910ddd07f60b803957259e06e3babee6f072f48c6fe31b906a1ea24e3b62' # 9003-FSDG-urihandlers.patch
+ '47050470053380f81391eb0631d9977bcc3abaeab632331bdce8576a0ceae1f9' # 9004-FSDG-misc.patch
+ 'c1d57c2b5b3621b34a4c5e7cc6e83170cfa576965b341c71e750e610440f490c' # process-json-files.py
+ '86bd54db6026ff65bd24ac4f05d0679a645ff447e2f81b0ee44037c0c4285e06') # vendor.js.in
+sha256sums_i686=('62fa060e09b95e92fa81f4ac47c06b03d70c2bbc6cda061d85e965a82730e1c0' # avoid-libxul-OOM-python-check.patch
+ 'b25d9fb901afc5447bcd87416741f705eb7188502e10097387d5b0c86417fd01' # rust-static-disable-network-test-on-static-libraries.patch
+ 'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1' # firefox-111.0.1-fdlibm.patch
+ '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06' # fix-i686-build-moz-1792159.patch
+ 'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
+b2sums=('837f2edf2dcf51f19d8cad1f8234723236f318defa1196885b019e46878b377a24a83093ccbf8ef43e7ea94ddd1520f2918bcea520c59379453d40251ff972d6'
+ 'SKIP'
+ 'f86353bbba05d8994db34c6abb66094aa61d2c37c8599930dbe9d215413f0f718a1ce55a8f2d07a65074c3947e28fc80d44c925bd9be239a870f82d2a1803635') # $pkgname.desktop
+ # identity-icons-brand.svg
+b2sums+=('96ee9ddf3306db08e9d3e6efdae87900e088aedebadb4b703524f2396ebd26e67120298bb6ec7fee2363e9fe4a83395b1a314ef34732b059870cdf161eaecc8b' # *.branding.tar.xz
+ 'SKIP'
+ 'adb8c96328cbc6f8c7e50207b89c2d4c68733dd1fdcd341ae2ac4a3a1702430c2e5983e4249682153e0e593e0f54ab0258ed01d849589e8dc77c8729beccf3e7' # 9001-FSDG-sync-remote-settings-with-local-dump.patch
+ '97bc57322635a7fa5d55b087303ece6f982104db5ef945393e74722acd783262bcc63e5cd3e5748eae9f07a9add59925898b67a2e20fa8420d4c7bfc4cd39867' # 9002-FSDG-preference-defaults.patch
+ 'dbb0f9639cbe08bf423faf9e2966b5464a26ab5c6314eea18be0e89edd8ac465bfa04a219821852bdd0801dfed9092999bcca1a982a631035bae9a51408d8dde' # 9003-FSDG-urihandlers.patch
+ '1d7c896bc1b447e833e3f15410d5db16983d002042de23f3e456a40e8cca23a2c82db6b0f73b5095b51de4f48258039ab37b410653b7c7e8653d2996eaab2019' # 9004-FSDG-misc.patch
+ '74e81a58faa219d6a822caae0212896561ecf8d97f736b9b23c6aec2b6e9dbd284702093ee1c75bd99638d8f86c4755542ae4b0dfa0ce8a25064e3430a6f2135' # process-json-files.py
+ 'f3f344196d03499f3f0392d5dfc5310e131d8c85772edd340faf1df3f04ebf2931eb1dda1b7fe6870d61d498618f4d8ae9f1dd446acbe83e0ce324e04b38f3f9') # vendor.js.in
+b2sums_i686=('684559d207d33e8b83c70d79ddb8b4d7532f2440895668245856553e02b6c786cf0de776981cdcce2438c7add2d692f4afbc85255949558852bdec9800c59882' # avoid-libxul-OOM-python-check.patch
+ '32c60a9259f9ab6b950c0a3af81e4c36c14160860d3b9da70aa3fbc3676e5fd2b2705b02d7e6b6ac49f9510577de89ab2334abe3b0a126e3d70e65ac42ba62c9' # rust-static-disable-network-test-on-static-libraries.patch
+ '05c7c9727201971650df4ca2e00539767fc9e159539835c641fccab5ec9577a7294e8f62f5d0670158316e5467ea121c03a36fd4ba153e1d60f3402f0430548d' # firefox-111.0.1-fdlibm.patch
+ 'd20ce3eff595f85df86eaa0dfb665fc356f8987117a771f76adc4ac12046a7e82b0af182fa99f87ea1362a5026c9d0216c7b714649fef0c7294c61c8e8f4d790' # fix-i686-build-moz-1792159.patch
+ '3e6fd4cebe0fd4c250ccf5b04e12b93e5f4cc2d139301316c987cc07a57b4b6b49b830d745520a82f5ac59da8d17f728a3ecce4dccf21804a2d6a256a6f76472') # fix-i686-xsimd-incomplete.patch
+
+# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) # anti-feature
+# Note: These are for Arch Linux use ONLY. For your own distribution, please # anti-feature
+# get your own set of keys. Feel free to contact foutrelis@archlinux.org for # anti-feature
+# more information. # anti-feature
+_google_api_key= # anti-feature
+
+# Mozilla API keys (see https://location.services.mozilla.com/api) # anti-feature
+# Note: These are for Arch Linux use ONLY. For your own distribution, please # anti-feature
+# get your own set of keys. Feel free to contact heftig@archlinux.org for # anti-feature
+# more information. # anti-feature
+_mozilla_api_key= # anti-feature
+
+
+## compiler and optimization tweaks ##
+
+# disable PGO
+# try this if the build hangs indefinitely - known past causes:
+# * resource exhaustion
+# * a test which misbehaves in environments without networking
+readonly _SKIP_PGO=$(case "${CARCH}" in armv7h|i686) echo 1 ;; *) echo 0 ;; esac)
+
+# use GCC vs LLVM
+# trying one or the other, may resolve sporadic compiler/linker discrepancies
+readonly _USE_ALT_COMPILER=$(case "${CARCH}" in armv7h) echo 0 ;; *) echo 0 ;; esac)
+
+# use 'bfd' linker vs 'lld'
+# most significantly, this also disables LTO and debugging
+# try this if the build freezes or crashes due to resource exhaustion
+# FIXME: x86_64 FTBS with LTO due to resource exhaustion
+# luke added a swapfile to beefcake, because this build crashed the server
+# apparently, a measly 32GB RAM is no longer sufficient to contain this beast
+# the system no longer crashes now; but the build process gets killed instead
+# > clang-15: error: unable to execute command: Killed
+readonly _USE_ALT_LINKER=$(case "${CARCH}" in i686|x86_64) echo 1 ;; *) echo 0 ;; esac)
+
+
+## dependency tweaks ##
+
+case "${CARCH}" in
+armv7h)
+ makedepends=( ${makedepends[*]/wasi-*/} ) # armv7h has no wasi compiler
+
+ depends+=( libicudata.so libicui18n.so libicuuc.so ) # --with-system-icu
+ ;;
+i686)
+ # NOTE: due to python incompatabilities in arch32,
+ # we are building for i686 against the repos from 2023-06-01 - but ...
+ # the latest 'cbindgen' is required
+ makedepends=( ${makedepends[*]/cbindgen/cbindgen=0.26.0} )
+ # and ... nss>=3.94 is required; but it FTBS
+ # still FTBS
+ ;;
+esac
+
+
+## helpers ##
+
+_check_build_config() {
+ pushd "${srcdir}"/firefox-${pkgver} > /dev/null
+
+ echo "Checking build configuration..."
+
+ # Each of the [ARCH-SPECIFIC CONFIG] branches in prepare(), should have prepared a
+ # $srcdir/mozconfig file with any arch-specific changes to the Arch x86_64 PKGBUILD.
+ # Finally, that file should have been copied to $srcdir/firefox-$pkgver/.mozconfig
+ grep '^ac_add_options --with-distribution-id=nu.parabola' .mozconfig &> /dev/null || \
+ ! echo "cannot continue without a .mozconfig file" || return 1
+
+ if ! [[ "${CARCH}" =~ ^(aarch64|armv7h)$ ]] # ARM has no --disable-eme option
+ then grep '^ac_add_options --disable-eme' .mozconfig &> /dev/null || \
+ ! echo ".mozconfig file was not properly treated per the FSDG" || return 1
+ fi
+
+ # 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.
+ local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}')
+ local antifeature_keys=(.crashreporter .datareporting .healthreport .normandy .telemetry .updater)
+ local antifeatures=()
+ echo "obj_directory is: ${obj_directory}"
+ for key in ${antifeature_keys[@]}
+ do if jq -e "${key} != false" "${obj_directory}"/mozinfo.json &> /dev/null
+ then antifeatures+=(${key})
+ fi
+ done
+ if (( ${#antifeatures[@]} ))
+ then echo "Some anti-features are not disabled in build configuration files - aborting:"
+ printf " - %s is enabled\n" ${antifeatures[*]}
+ return 1
+ fi
+
+ popd > /dev/null
+}
+_check_patching() {
+ pushd "${srcdir}"/firefox-${pkgver} > /dev/null
-_should_skip_pgo_armv7h=1
-_should_skip_pgo_i686=1
-_should_skip_pgo_x86_64=0
-eval "_should_skip_pgo=\$_should_skip_pgo_${CARCH}"
+ echo "verifying libre patching"
+ # URI protocol handlers
+ local uri_handlers=uriloader/exthandler/HandlerList.sys.mjs
+ local webmails='google|yahoo'
+ local misc_err_msg="9003-FSDG-misc.patch needs reworking"
+ grep 'name:' $uri_handlers | grep '"KiwiIRC",' &> /dev/null && \
+ ! grep 'name:' $uri_handlers | grep -v '"KiwiIRC",' &> /dev/null && \
+ ! grep -E "($webmails)" $uri_handlers &> /dev/null || \
+ ! echo "${misc_err_msg}" || \
+ return 1
+
+ # services.addons.mozilla.org API endpoint
+ local amo_api_endpoint='services.addons.mozilla.org'
+ local amo_err_msg="9002-FSDG-preference-defaults.patch needs reworking: AMO API endpoint hostname found in source tree"
+ ! grep -qr $amo_api_endpoint &> /dev/null || ! echo "${amo_err_msg}" || return 1
+
+ # Remote Settings
+ local settings_server='firefox.settings.services.mozilla.com'
+ local settings_err_msg="9001-FSDG-sync-remote-settings-with-local-dump.patch needs reworking"
+ ! grep -qr $settings_server &> /dev/null || ! echo "${settings_err_msg}" || return 1
+
+ popd > /dev/null
+}
+
+
+## business ##
prepare() {
mkdir mozbuild
cd firefox-$pkgver
- # https://bugzilla.mozilla.org/show_bug.cgi?id=1530052
- echo "applying 0001-Use-remoting-name-for-GDK-application-names.patch"
- patch -Np1 -i ../0001-Use-remoting-name-for-GDK-application-names.patch
+ ## technical patching ##
+
+ # Use system python-typing-extensions instead of the old vendored one to avoid
+ # unresolvable dependency versions. They are probably downloaded when network
+ # connectivity is enabled at built time, but that is not the case for Parabola.
+ echo "deleting vendored 'python-typing-extensions'"
+ rm -rfv third_party/python/typing_extensions | grep -Fq ''
+
+
+ ## [ARCH-SPECIFIC PATCHING] ##
+
+ case ${CARCH} in
+ aarch64|armv7h)
+ # FTBS with LLVM:
+ # intl/lwbrk/LineBreaker.cpp:453:3: error: static assertion failed due to requirement 'U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass)': Gecko vs ICU LineBreak class mismatch
+ # appears to be: https://bugzilla.mozilla.org/show_bug.cgi?id=1843007#c1
+ # but --with-system-icu is still needed
+ # crude fix, adapted from linuxfromscratch https://wiki.linuxfromscratch.org/blfs/ticket/18799
+ for i in {43..47}; do
+ sed '/ZWJ/s/}/,CLASS_CHARACTER&/' -i intl/lwbrk/LineBreaker.cpp
+ done
+ ;;
+ i686)
+ # readelf: Error: Unable to seek to 0x801db328 for section headers
+ echo "applying avoid-libxul-OOM-python-check.patch"
+ patch -p1 -i ../avoid-libxul-OOM-python-check.patch
+
+ # test failure in rust code (complaining about network functions) when PGO is used,
+ # see https://bugzilla.mozilla.org/show_bug.cgi?id=1565757
+ echo "applying rust-static-disable-network-test-on-static-libraries.patch"
+ patch -p1 -i ../rust-static-disable-network-test-on-static-libraries.patch
+
+ # FIXME: this patch is probably temporary - it comes from mozilla
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1729459
+ # /build/iceweasel/src/firefox-96.0.1/modules/fdlibm/src/math_private.h:34:21:
+ # error: conflicting declaration ‘typedef __double_t double_t’
+ # /usr/include/math.h:156:21: note: previous declaration as ‘typedef long double double_t’
+ echo "applying firefox-111.0.1-fdlibm.patch"
+ patch -p1 -i "$srcdir/firefox-111.0.1-fdlibm.patch"
+
+ # js/src/jit/shared/AtomicOperations-shared-jit.cpp:88:9: error: ‘AtomicCopyByteUnsynchronized’ was not declared in this scope; did you mean ‘AtomicMemcpyUpUnsynchronized’?
+ echo "applying fix-i686-build-moz-1792159.patch"
+ patch -p1 -i "$srcdir/fix-i686-build-moz-1792159.patch"
+
+ # https://bugs.archlinux32.org/index.php?do=details&task_id=332
+ # dom/base/nsTextFragmentGeneric.h:38:16: error: ‘any’ is not a member of ‘xsimd’
+ # dom/base/nsTextFragmentGeneric.h:16:70: error: incomplete type ‘xsimd::batch<short int, xsimd::sse2>’ used in nested name specifier
+ # dom/base/nsTextFragmentGeneric.h:35:31: error: ‘xsimd::batch<short int, xsimd::sse2> vectmask’ has incomplete type
+ # dom/base/nsTextFragmentGeneric.h:37:64: error: incomplete type ‘xsimd::batch<short int, xsimd::sse2>’ used in nested name specifier
+ echo "applying fix-i686-xsimd-incomplete.patch"
+ patch -p1 -i "$srcdir/fix-i686-xsimd-incomplete.patch"
+ ;;
+ x86_64)
+ ;;
+ esac
+
+
+ ## general configuration ##
+
+ 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
@@ -120,24 +418,30 @@ 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-install-strip
ac_add_options --disable-elf-hack
-export CC='clang --target=x86_64-unknown-linux-gnu'
-export CXX='clang++ --target=x86_64-unknown-linux-gnu'
-export AR=llvm-ar
-export NM=llvm-nm
-export RANLIB=llvm-ranlib
+ac_add_options --disable-bootstrap
+ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
# Branding
-ac_add_options --disable-official-branding
-ac_add_options --with-branding=browser/branding/iceweasel
+ac_add_options --disable-official-branding # branding over-ride
ac_add_options --enable-update-channel=release
-ac_add_options --with-distribution-id=nu.parabola
+ac_add_options --with-distribution-id=nu.parabola # branding over-ride
+ac_add_options --with-branding=browser/branding/${pkgname} # branding over-ride
+ac_add_options --with-app-name=${pkgname} # branding over-ride
+ac_add_options --with-app-basename=${pkgname} # branding over-ride
ac_add_options --with-unsigned-addon-scopes=app,system
ac_add_options --allow-addon-sideload
+# export MOZILLA_OFFICIAL=1 # branding over-ride
export MOZ_APP_REMOTINGNAME=${pkgname//-/}
export MOZ_TELEMETRY_REPORTING=
export MOZ_REQUIRE_SIGNING=
+# Keys
+# ac_add_options --with-google-location-service-api-keyfile=${PWD@Q}/google-api-key # anti-feature
+# ac_add_options --with-google-safebrowsing-api-keyfile=${PWD@Q}/google-api-key # anti-feature
+# ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key # anti-feature
+
# System libraries
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
@@ -145,123 +449,228 @@ ac_add_options --with-system-nss
# Features
ac_add_options --enable-alsa
ac_add_options --enable-jack
-ac_add_options --disable-crashreporter
+ac_add_options --disable-crashreporter # anti-feature
ac_add_options --disable-updater
ac_add_options --disable-tests
-ac_add_options --disable-eme
+ac_add_options --disable-eme # anti-feature
END
## [ARCH-SPECIFIC CONFIG] ##
- case ${CARCH} in
- armv7h)
- sed -i '
- /--enable-hardening/d
- /--enable-optimize/d
- /--enable-rust-simd/d
- ' ../mozconfig
-
- cat >>../mozconfig <<END
-export CC=clang
-export CXX=clang++
-ac_add_options --disable-webrtc
-ac_add_options --disable-elf-hack
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=1641623
-ac_add_options --disable-av1
-ac_add_options --enable-optimize="-g0 -O2"
+ if (( _USE_ALT_COMPILER ))
+ then cat >> ../mozconfig <<END
+export CC=gcc
+export CXX=g++
+export AR=gcc-ar
+export NM=gcc-nm
+export RANLIB=gcc-ranlib
END
-# mk_add_options MOZ_MAKE_FLAGS=${MAKEFLAGS} # from archlinuxarm
-
- # mozbuild.configure.options.InvalidOptionError: --disable-eme is not available in this configuration
- # EME is disabled anyway in the built package, but better check if it exists for ARM each new release.
- sed -i 's|ac_add_options --disable-eme||' ../mozconfig
+ fi
- echo "applying arm.patch"
- patch -p1 -i ../arm.patch
- echo "applying build-arm-libopus.patch"
- patch -p1 -i ../build-arm-libopus.patch
- ;;
- i686)
- # disable LTO and use gcc toolchain (clang has issues on IA32)
- # disable SIMD (SSE20 for i686)
- export MOZ_SOURCE_CHANGESET="DEVEDITION_${pkgver//./_}_RELEASE"
- cat >>../mozconfig <<END
+ if (( _USE_ALT_LINKER ))
+ then sed -i '/cargo_rustc_flags += -Clto/d' config/makefiles/rust.mk
+ cat >> ../mozconfig <<END
ac_add_options --disable-linker=lld
ac_add_options --enable-linker=bfd
ac_add_options --disable-lto
ac_add_options --disable-rust-simd
-export CC=gcc
-export CXX=g++
-export AR=gcc-ar
-export NM=gcc-nm
-export RANLIB=gcc-ranlib
+ac_add_options --disable-debug
+ac_add_options --disable-debug-symbols
END
+ fi
+
+ case ${CARCH} in
+ aarch64|armv7h)
+ # experimental/version-specific hacks #
+
+ # ld.lld: error: undefined hidden symbol: std::type_info::operator==(std::type_info const&) const
+ echo 'ac_add_options --with-system-icu' >> ../mozconfig
+
+
+ # archarm configuration #
+
+ # archarm recipe has mozconfig over-rides under the 'general configuration' section
+ # NOTE: '--disable-eme' is currently an invalid option for armv7h.
+ # It must be deleted in order to compile.
+ # If ever it becomes valid, it should not be deleted below.
+ sed -i '
+ /--enable-hardening/d
+ /--enable-optimize/d
+ /--enable-rust-simd/d
+ s| --with-wasi-sysroot=.*| --without-wasm-sandboxed-libraries|
+ /--disable-eme/d
+ ' ../mozconfig
+
+ if [[ $CARCH == "armv7h" ]]; then
+ echo "ac_add_options --disable-elf-hack" >> .mozconfig
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1641623
+ echo "ac_add_options --disable-av1" >> .mozconfig
+ # reduce jobs due to RAM constraints
+ MAKEFLAGS="-j4"
+ # disable hard-coded LTO
+ sed -i '/cargo_rustc_flags += -Clto/d' config/makefiles/rust.mk
+ sed -i '/RUSTFLAGS += -Cembed-bitcode=yes/d' config/makefiles/rust.mk
+ # increase codegen-units due to RAM constraints
+ sed -i 's/codegen-units=1/codegen-units=16/' config/makefiles/rust.mk
+ # webrtc on ARMv7 implies android, so disable it
+ echo "ac_add_options --disable-webrtc" >> .mozconfig
+ elif [[ $CARCH == "aarch64" ]]; then
+ echo 'ac_add_options --enable-rust-simd' >> .mozconfig
+ fi
+
+ echo 'ac_add_options --enable-optimize="-g0 -O2"' >> .mozconfig
+ echo "mk_add_options MOZ_MAKE_FLAGS=\"${MAKEFLAGS}\"" >> .mozconfig
+
+ # archarm `export` commands are under the '[ARCH-SPECIFIC BUILD ENV]' section
+
+ # archarm patching is under the '[ARCH-SPECIFIC PATCHING]' section
+
+ # At this point in the recipe, the arch, arch32, and parabola PKGBUILDs
+ # have prepared a temporary ${srcdir}/mozconfig; but the archarm PKGBUILD
+ # writes directly to the final firefox-$pkgver/.mozconfig.
+ # We allowed .mozconfig to be written above, only to minimize the diff against archarm.
+ # For consistency across arches, we append those changes to ${srcdir}/mozconfig now.
+ # ${srcdir}/mozconfig will clobber firefox-$pkgver/.mozconfig later, during build().
+ cat .mozconfig >> ../mozconfig
+ ;;
+ i686)
+ # experimental/version-specific hacks #
- # readelf: Error: Unable to seek to 0x801db328 for section headers
- echo "applying avoid-libxul-OOM-python-check.patch"
- patch -p1 -i "$srcdir"/avoid-libxul-OOM-python-check.patch
- # test failure in rust code (complaining about network functions) when PGO is used,
- # see https://bugzilla.mozilla.org/show_bug.cgi?id=1565757
- echo "applying rust-static-disable-network-test-on-static-libraries.patch"
- patch -p1 -i "$srcdir"/rust-static-disable-network-test-on-static-libraries.patch
+ # arch32 configuration #
+
+ # arch32 `export` commands are under the '[ARCH-SPECIFIC BUILD ENV]' section
+
+ # arch32 recipe has mozconfig over-rides in mozconfig-i686.patch
+ # in this recipe, the '_USE_ALT_LINKER' block includes most of them
+ cat >>../mozconfig <<END
+ac_add_options --disable-webrtc
+END
+
+ # arch32 patching is under the '[ARCH-SPECIFIC PATCHING]' section
;;
- x86_64)
+ x86_64)
;;
- *) echo "no [ARCH-SPECIFIC CONFIG] for arch: ${CARCH}" ; return 1 ;
+ *) echo "no [ARCH-SPECIFIC CONFIG] for arch: ${CARCH}" ; return 1 ;
;;
esac
## branding ##
+ local branding_srcdir="${srcdir}"/${pkgname}-${_brandingver}
+ local branding_destdir="${srcdir}"/firefox-${pkgver}/browser/branding/${pkgname}
+ local tippytopdir="${srcdir}"/firefox-${pkgver}/browser/components/newtab/data/content/tippytop
+ local blank_svg='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"></svg>' # TODO: branding package
+
+ # apply branding
echo "applying parabola branding"
- local brandingsrcdir="${srcdir}/${pkgname}-${_brandingver}"
- local brandingdestdir=browser/branding/${pkgname}
- rm -rf -- ${brandingdestdir}
- cp -aT -- ${brandingsrcdir}/branding ${brandingdestdir}
- # TODO: dont know what aboutlogins.svg is supposed to be or where it is presented
- # but it seems to be essential
- tee "${brandingdestdir}/content/aboutlogins.svg" \
- "${brandingdestdir}/content/about-logo.svg" < ${brandingdestdir}/iceweasel_logo.svg >/dev/null
+ export QUILT_PATCHES="${branding_srcdir}"/patches
+ export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
+ export QUILT_DIFF_ARGS='--no-timestamps'
+ export QUILT_PC="${srcdir}"/.pc
+ rm -rf -- "${branding_destdir}"
+ cp -aT -- "${branding_srcdir}"/branding "${branding_destdir}"
+ quilt push -av
+
+ pushd "${branding_destdir}" > /dev/null
+
+ # generate icons, logos, banners
+ echo "generating branding images"
+ for size in 16 22 24 32 48 64 128 256
+ do rsvg-convert -w ${size} -h ${size} iceweasel_icon.svg -o default${size}.png
+ done
+ cp iceweasel_logo.svg content/aboutlogins.svg
+ cp iceweasel_logo.svg content/about-logo.svg
+# cp iceweasel_logo.svg content/about-logo.svg # RuntimeError: File "about-logo.svg" not found in browser/branding/iceweasel/content
+ rsvg-convert -a -w 192 iceweasel_logo.svg -o content/about-logo.png
+ rsvg-convert -a -w 384 iceweasel_logo.svg -o content/about-logo@2x.png
+ cp content/about-logo.png content/about-logo-private.png
+ cp content/about-logo@2x.png content/about-logo-private@2x.png
+ echo "${blank_svg}" > content/$pkgname-symbolic.svg # TODO: branding package
+ cp content/$pkgname-symbolic.svg "${srcdir}"/identity-icons-brand.svg # minimize diff (in package())
+ cp ../unofficial/document.ico document.ico
+
+ popd > /dev/null
# custom new tab page
# FIXME: the newtab page (aka "Start Page") has changed significantly
# the new upstream start page ('activity-streams') is an add-on now
# it must be forked and customized externally, then copied into the browser tree
# see: the branding-dev-build/ dir on the '68.0' branch of the branding git repo
- # that will also be useful for creating a replacement 'mozilla-searchplugins' package
# some of the branding components above and commented out below may no longer be used
# the following section aims to restore something similar
# to the previous parabola-branded "start page"
# once it is working well, all of these comments should be removed
# and any unused branding components may be deleted from the branding package
# Put "Start Page" branding images in the source code
- #install -m644 -t browser/base/content/abouthome -- \
- # "${brandingsrcdir}/branding"/{drm-free,gnu_headshadow,parabola-banner}.png
- #install -m644 -t browser/extensions/onboarding/content/img -- \
- # "${brandingsrcdir}/branding/watermark.svg"
-
- # produce icons
- for i in 16 22 24 32 48 64 128 192 256 384; do
- rsvg-convert -w $i -h $i "${brandingsrcdir}/branding/${pkgname}_icon.svg" \
- -o "${brandingdestdir}/default$i.png"
+ # install -m644 -t browser/base/content/abouthome -- \
+ # "${branding_srcdir}"/branding/{drm-free,gnu_headshadow,parabola-banner}.png
+ # install -m644 -t browser/extensions/onboarding/content/img -- \
+ # "${branding_srcdir}"/branding/watermark.svg
+
+ # process default Top Sites and their icons
+ echo "deleting unused \"Top Sites\""
+ find "${tippytopdir}" -type f \
+ -not -name 'wikipedia-org*' \
+ -not -name 'top_sites.json' \
+ -exec rm {} \;
+ [[ "${CARCH}" != armv7h ]] || export MAGICK_TIME_LIMIT=300 # magick: time limit exceeded
+ for image in "${branding_srcdir}"/tippytop/*.svg; do
+ local outname=$(basename -s .svg "${image}")
+ local size=$(identify -format '%wx%h' "${tippytopdir}"/images/wikipedia-org@2x.png)
+ local background=$( [[ "${outname}" == 'gnu' ]] && echo 'white' || echo 'none' )
+ magick -density 300 ${image} \
+ -gravity center -resize ${size} -extent ${size} \
+ "${tippytopdir}"/images/${outname}@2x.png
+
+ size=256x256
+ magick -density 300 -background ${background} ${image} \
+ -gravity center -resize ${size} -extent ${size} \
+ -define icon:auto-resize=64,48,32,16 \
+ "${tippytopdir}"/favicons/${outname}.ico
done
- # apply branding patches
- export QUILT_PATCHES="${brandingsrcdir}"/patches
- export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
- export QUILT_DIFF_ARGS='--no-timestamps'
- quilt push -av
+ # misc branding
+ sed -i "s|({ \$bits }-bit)|($CARCH)|" browser/locales/en-US/browser/aboutDialog.ftl
+
+
+ ## search-engines ##
+
+ pushd browser/components/search/extensions > /dev/null
+
+ # Delete unused search engine configs
+ echo "deleting unused search engine configs"
+ find -mindepth 1 -maxdepth 1 \
+ -not -name ddg \
+ -not -name wikipedia \
+ -exec rm -fr {} \;
+
+ popd > /dev/null
## libre patching ##
- # Remove remaining non-free bits
- echo "applying libre.patch"
- patch -Np1 -i "$srcdir/libre.patch"
+ # Upstream tarball can contain some ignored cruft,
+ # including binaries (for example, python3).
+ echo 'Removing files specified in .gitignore...'
+ git init -b master && git clean -dfX \
+ --exclude='!ipc/chromium/src/third_party/libevent/evconfig-private.h' \
+ --exclude='!toolkit/crashreporter/google-breakpad/src/third_party/lss/' \
+ --exclude='!third_party/python/**/*.egg-info/'
+ rm -rf .git
+
+ # Remove test-related networking dumps, because they contain code from
+ # some Amazon webpage with no clear licensing, thus nonfree.
+ # Also they interfere with checking of Remote Settings patching done later,
+ # because communication with RS server has been captured in them too.
+ rm python/mozperftest/mozperftest/system/example.zip
+ rm testing/mozbase/mozproxy/tests/files/mitm5-linux-firefox-amazon.zip
+
+ # Disable/neutralize Remote Settings (as best we can)
+ echo "applying 9001-FSDG-sync-remote-settings-with-local-dump.patch"
+ git apply ../9001-FSDG-sync-remote-settings-with-local-dump.patch
# Disable various components at the source level
sed -i 's/;1/;0/' toolkit/components/telemetry/components.conf
@@ -270,74 +679,42 @@ END
#sed -i '/pocket/d' browser/extensions/moz.build
#sed -i '/activity-stream/d' browser/extensions/moz.build
- # Load custom searchplugins
- # FIXME: no longer applicable - replace with (broken) replacement fo libre/mozilla-searchplugins
- # https://git.parabola.nu/packages/iceweasel.git/tree/branding-dev-build/mozilla-searchplugins?h=68.0
-# rm -rvf -- browser/components/search/searchplugins/{*.xml,images/}
-# cp -av -- /usr/lib/mozilla/searchplugins/* browser/components/search/searchplugins/
-
- # Patch search-engines config
- # FIXME: custom searchplugins ID per new format above ("ddg" is standard)
- # browser/components/search/extensions/<ID>/
-# local _remove_engines_sed='s|.*oogle.*| "ddg", "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-labs", "parabola-packages", "parabola-wiki-en", "searx", "wikipedia", "yacy"|g'
- local _remove_engines_sed='s|.*oogle.*| "ddg", "wikipedia"|g'
- echo "applying libre-searchengines.patch"
- patch -Np1 -i "$srcdir/libre-searchengines.patch"
-
- pushd browser/components/search/extensions
- sed -i "${_remove_engines_sed}" list.json
- sed -i 's|https://duckduckgo.com/|https://html.duckduckgo.com/html/|' ddg/manifest.json
-
- # Sanity-check search-engines patching
- _removed_engines_regex='Bing|Google|Seznam|Twitter|Yahoo|Yandex|Яндекс|amazon|bing|google|ebay|twitter'
- _err_msg="search-engines patch needs re-working"
- ! grep -E ${_removed_engines_regex} list.json > /dev/null || ! echo "${_err_msg}"
+ python ../process-json-files.py "${srcdir}"/firefox-${pkgver} "${branding_srcdir}"
- find -mindepth 1 -maxdepth 1 \
- -not -name ddg \
- -not -name wikipedia \
- -not -name list.json \
- -exec rm -rf {} \;
- popd
-
- # Removing What's New tab from Developer Tools, usages are removed by libre.patch
- rm -rf devtools/client/whats-new
+ # disable various phone-home/goelocation anti-featires
+ echo "applying 9002-FSDG-preference-defaults.patch"
+ patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9002-FSDG-preference-defaults.patch
- # Upstream tarball can contain some ignored cruft,
- # including binaries (for example, python3).
- echo 'Removing files specified in .gitignore...'
- git init && git clean -dfX \
- -e '!ipc/chromium/src/third_party/libevent/evconfig-private.h' \
- -e '!toolkit/crashreporter/google-breakpad/src/third_party/lss/' \
- -e '!third_party/python/**/*.egg-info/'
- rm -rf .git
-}
+ # over-ride/install default URI protocol handlers
+ echo "applying 9003-FSDG-urihandlers.patch"
+ patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9003-FSDG-urihandlers.patch
-_check_build_config() {
- echo "Checking build configuration..."
+ # Remove remaining non-free bits
+ echo "applying 9004-FSDG-misc.patch"
+ patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9004-FSDG-misc.patch
- # Configure produces mozinfo.json that reflects current configuration.
- # See build/docs/mozinfo.rst
- ./mach configure
+ echo "removing remaining non-free bits"
+ rm -v toolkit/crashreporter/tools/upload_symbols.py
+ rm -frv third_party/rust/winapi-{i686,x86_64}-pc-windows-gnu/**/*.a | \
+ sed 's|/[^/]*\.a$|/*.a|' | sort -u
- # 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.
- local object_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}')
- local features_not_disabled=$(cat "$object_directory/mozinfo.json" \
- | jq -e '[.crashreporter, .datareporting, .healthreport, .normandy, .telemetry, .updater] | any(. != false)')
- if $features_not_disabled; then
- echo 'Some features are not disabled correctly in build configuration files, aborting.'
- return 1
- fi
+ ## patching sanity checks ##
+ _check_patching
}
build() {
cd firefox-$pkgver
- export MOZ_NOSPAM=1
+ ## build env ##
+
+ export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system # parabola policy
export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
+ export MOZ_BUILD_DATE="$(date -u${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH} +%Y%m%d%H%M%S)"
+ export MOZ_NOSPAM=1
+
+ # malloc_usable_size is used in various parts of the codebase
+ CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
+ CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}"
# LTO needs more open files
ulimit -n 4096
@@ -346,69 +723,76 @@ build() {
## [ARCH-SPECIFIC BUILD ENV] ##
case ${CARCH} in
- armv7h)
- # clang-9: error: unknown argument: '-fvar-tracking-assignments'
- CFLAGS="${CFLAGS/-fvar-tracking-assignments/}"
- CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}"
-
- export MOZ_DEBUG_FLAGS=" "
- export CFLAGS+=" -g0"
- export CXXFLAGS+=" -g0"
- export LDFLAGS+=" -Wl,--no-keep-memory"
- export RUSTFLAGS="-Cdebuginfo=0"
+ aarch64|armv7h)
+ export MOZ_DEBUG_FLAGS=" "
+ export CFLAGS+=" -g0"
+ export CXXFLAGS+=" -g0"
+ export LDFLAGS+=" -Wl,--no-keep-memory"
+ export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off"
+
+ # clang-16: warning: argument unused during compilation: '-fstack-clash-protection' [-Wunused-command-line-argument]
+ export CFLAGS+=' -Wno-unused-command-line-argument'
+ export CXXFLAGS+=' -Wno-unused-command-line-argument'
+
+ if ! (( _USE_ALT_COMPILER ))
+ then # warning: obj/dist/system_wrappers/cmath:3:15: fatal error: 'cmath' file not found
+ export CFLAGS+=" -I/usr/include/c++/12.1.0 -I/usr/include/c++/12.1.0/armv7l-unknown-linux-gnueabihf"
+ export CXXFLAGS+=" -I/usr/include/c++/12.1.0 -I/usr/include/c++/12.1.0/armv7l-unknown-linux-gnueabihf"
+
+ # clang-16: error: unknown argument: '-fvar-tracking-assignments'
+ export CFLAGS="${CFLAGS/-fvar-tracking-assignments/}"
+ export CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}"
+ fi
;;
- i686)
- # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error
- CFLAGS="${CFLAGS/-fno-plt/}"
- CXXFLAGS="${CXXFLAGS/-fno-plt/}"
-
- # disable LTO (clang has issues on IA32)
- export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off"
- export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
-
- # libvpx has some hard-coded compiler flags for MMX, SSE, SSE2, use the correct one
- # per CARCH (75.0 uses an intrisic _mm_empty now, which required the corresponding
- # architecture flag to be preset - before it was merely embedding some assembly
- # code with EMMS
- export CFLAGS+=" -mmmx"
- export CXXFLAGS+=" -mmmx"
+ i686)
+ # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error
+ CFLAGS="${CFLAGS/-fno-plt/}"
+ CXXFLAGS="${CXXFLAGS/-fno-plt/}"
+
+ # try hard to tell ld and rust not to use too much memory (no lto, no debug info, etc.)
+ export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off"
+ export LDFLAGS+=" -Wl,--no-keep-memory " # -Wl,--reduce-memory-overheads -Wl,--max-cache-size=16384000 "
+ export MOZ_SOURCE_CHANGESET="DEVEDITION_${pkgver//./_}_RELEASE"
+
+# export MOZ_MAKE_FLAGS=-j2
+
+ # libvpx has some hard-coded compiler flags for MMX, SSE, SSE2, use the correct one
+ # per CARCH (75.0 uses an intrisic _mm_empty now, which required the corresponding
+ # architecture flag to be preset - before it was merely embedding some assembly
+ # code with EMMS
+ export CFLAGS+=" -mmmx"
+ export CXXFLAGS+=" -mmmx"
;;
- x86_64)
- # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error
- CFLAGS="${CFLAGS/-fno-plt/}"
- CXXFLAGS="${CXXFLAGS/-fno-plt/}"
-
- # clang-9 -> error: unknown argument: '-fvar-tracking-assignments'
- CFLAGS="${CFLAGS/-fvar-tracking-assignments/}"
- CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}"
-
- export CFLAGS
- export CXXFLAGS
+ x86_64)
;;
- *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ;
+ *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ;
;;
esac
+ export CFLAGS
+ export CXXFLAGS
## [ARCH-SPECIFIC BUILD CONFIG] ##
case ${CARCH} in
- armv7h)
+ aarch64|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
+ 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)
+ x86_64)
;;
- *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ;
+ *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ;
;;
esac
- if (( $_should_skip_pgo ))
+
+ ## PGO build ##
+
+ if (( _SKIP_PGO ))
then
- # skipping "3-tier PGO" "instrumented browser", to avoid OOM problems;
- # so we have the final .mozconfig now
+ # skipping "3-tier PGO" "instrumented browser"; so the final .mozconfig is ready now
cp ../mozconfig .mozconfig
else
# Do 3-tier PGO
@@ -435,29 +819,32 @@ END
echo "Removing instrumented browser..."
./mach clobber
+ echo "Building optimized browser..."
cat >.mozconfig ../mozconfig - <<END
-ac_add_options --enable-lto=cross
+ac_add_options --enable-lto=cross,full
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
- fi # $_skip_pgo
+ fi # _SKIP_PGO
## sanity checks ##
- # each of the [ARCH-SPECIFIC BUILD CONFIG] branches above should have created .mozconfig
- [[ ! -f .mozconfig ]] && echo ".mozconfig file not found in source root" && return 1
-
_check_build_config
+
+
+ ## main build ##
+
+ (( ! _SKIP_PGO )) ||
echo "Building optimized browser..."
./mach build
-
- echo "Building symbol archive..."
- ./mach buildsymbols
}
package() {
+ export MOZBUILD_STATE_PATH="$srcdir/mozbuild" # needed for `{libre,}makepkg -R`
+ export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system # needed for `{libre,}makepkg -R`
+
cd firefox-$pkgver
DESTDIR="$pkgdir" ./mach install
@@ -474,19 +861,25 @@ pref("browser.shell.checkDefaultBrowser", false);
// Don't disable extensions in the application directory
pref("extensions.autoDisableScopes", 11);
+
+// Enable GNOME Shell search provider
+pref("browser.gnome-search-provider.enabled", true);
END
# Parabola additions to vendor.js
- local _shortver=$(cut -d. -f1,2 <<<"$pkgver")
- cat "${srcdir}"/vendor.js.in >> "$vendorjs"
- sed -i "s|@_SHORTVER_@|$_shortver|g" "$vendorjs"
+ cat "${srcdir}"/vendor.js.in >> "${vendorjs}"
local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
install -Dvm644 /dev/stdin "$distini" <<END
[Global]
id=parabola
-version=1.0
-about=Iceweasel for Parabola GNU/Linux-libre
+version=(${_brandingver}-${_brandingrel} branding)
+about=${pkgname^} for Parabola GNU/Linux-libre
+about.en-US=${pkgname^} for Parabola GNU/Linux-libre
+about.eo=${pkgname^} por Parabola GNU/Linux-libre
+about.es-ES=${pkgname^} para Parabola GNU/Linux-libre
+about.gl=${pkgname^} para Parabola GNU/Linux-libre
+about.pt-BR=${pkgname^} para Parabola GNU/Linux-libre
[Preferences]
app.distributor=parabola
@@ -494,48 +887,66 @@ app.distributor.channel=$pkgname
app.partner.parabola=parabola
END
- local i
- for i in 16 22 24 32 48 64 128 192 256 384; do
- install -Dvm644 browser/branding/$pkgname/default$i.png \
+ local i theme=official
+ theme=$pkgname # NOTE: browser/branding/$theme is $branding_destdir in prepare()
+ 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/$pkgname/${pkgname}_icon.svg" \
+ 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"
install -Dvm644 ../$pkgname.desktop \
- "$pkgdir/usr/share/applications/$pkgname.desktop"
+ "$pkgdir/usr/share/applications/${pkgname//-/}.desktop"
# Install a wrapper to avoid confusion about binary path
install -Dvm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
#!/bin/sh
-exec /usr/lib/$pkgname/$pkgname "\$@"
+exec /usr/lib/$pkgname/firefox "\$@"
END
+ sed -i "s|/firefox |/${pkgname} |" "$pkgdir/usr/bin/$pkgname" # minimize diff
## [ARCH-SPECIFIC INSTALL] ##
case ${CARCH} in
- armv7h)
+ aarch64|armv7h)
;;
- i686)
- # libxul.so cannot find it's libraries
- install -dm 755 "${pkgdir}"/etc/ld.so.conf.d
- echo "/usr/lib/${pkgname}" > "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf
+ i686)
+ # libxul.so cannot find it's libraries
+ install -dm 755 "${pkgdir}/etc/ld.so.conf.d"
+ echo "/usr/lib/${pkgname}" > "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf
;;
- x86_64)
+ x86_64)
;;
- *) echo "no [ARCH-SPECIFIC INSTALL] for arch: ${CARCH}" ; return 1 ;
+ *) echo "no [ARCH-SPECIFIC INSTALL] for arch: ${CARCH}" ; return 1 ;
;;
esac
# Replace duplicate binary with wrapper
# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
- ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/$pkgname-bin"
+ ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/firefox-bin"
+ mv "$pkgdir/usr/lib/$pkgname/firefox-bin" "$pkgdir/usr/lib/$pkgname/$pkgname-bin" # minimize diff
# Use system certificates
local nssckbi="$pkgdir/usr/lib/$pkgname/libnssckbi.so"
if [[ -e $nssckbi ]]; then
ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi"
fi
-}
+ # Configure GNOME Shell search provider
+ local sprovider="$pkgdir/usr/share/gnome-shell/search-providers/$pkgname.search-provider.ini"
+ install -Dvm644 /dev/stdin "$sprovider" <<END
+[Shell Search Provider]
+DesktopId=${pkgname//-/}.desktop
+BusName=org.mozilla.${pkgname//-/}.SearchProvider
+ObjectPath=/org/mozilla/${pkgname//-/}/SearchProvider
+Version=2
+END
+}