12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097 |
- # 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>
- # Contributor: Márcio Silva <coadde@hyperbola.info>
- # Contributor: fauno <fauno@kiwwwi.com.ar>
- # Contributor: vando <facundo@esdebian.org>
- # 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>
- # Contributor: Isaac David <isacdaavid@isacdaavid.info>
- # Contributor: bill-auger <bill-auger@programmer.net>
- # Contributor: grizzlyuser <grizzlyuser@protonmail.com>
- # 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
- # - 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 32-bit arches with GCC instead of clang (sometimes)
- # - disable rust-SIMD, LTO, PGO, and skip profiling build for armv7h and i686
- # - 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)
- # - 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=133.0
- pkgrel=1
- _brandingver=131.0
- _brandingrel=1
- pkgdesc="Fast, Private & Safe Web Browser"
- url=https://wiki.parabola.nu/Iceweasel
- arch=(x86_64)
- arch+=(armv7h i686)
- license=(MPL-2.0)
- depends=(
- alsa-lib
- at-spi2-core
- bash
- cairo
- dbus
- ffmpeg
- fontconfig
- freetype2
- gcc-libs
- gdk-pixbuf2
- glib2
- glibc
- gtk3
- hicolor-icon-theme
- libpulse
- libx11
- libxcb
- libxcomposite
- libxdamage
- libxext
- libxfixes
- libxrandr
- libxss
- libxt
- mime-types
- nspr
- nss
- pango
- 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 # clean source-ball
- imagemagick # process branding images
- jq # anti-features check
- libxslt # process branding images
- python-jsonschema # process-json-files.py
- python-setuptools # de-pip
- python-typing_extensions # de-vendoring
- python-zstandard # de-pip
- quilt # apply branding patches
- )
- optdepends=(
- 'hunspell-en_US: Spell checking, American English'
- 'libnotify: Notification integration'
- 'networkmanager: Location detection via available WiFi networks'
- '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
- !lto
- !makeflags
- )
- source=(
- https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz{,.asc}
- $pkgname-symbolic.svg
- $pkgname.desktop
- org.mozilla.$pkgname.metainfo.xml
- )
- source=( ${source[*]/${pkgname}-symbolic.svg/} ) # branding over-ride
- source=( ${source[*]/org.mozilla./nu.parabola.}) # branding over-ride
- source+=( vendor.js.in ) # FSDG config options
- source_i686=(
- avoid-libxul-OOM-python-check.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+=(
- 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger (branding source-ball)
- BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin (branding source-ball)
- 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40 # bill-auger (libre source-ball)
- )
- sha256sums=('492b2c9a3b6d215e38ce490624e8b2b9473419accdeaddb24ba00bc6adc3cc60'
- 'SKIP'
- # $pkgname-symbolic.svg
- '614f2ab3f7bbe783ca50b94f4c78081ee1f98605156ee8ff379e251191b61bdb' # $pkgname.desktop
- 'a6e4ab312203ae1df50537f4e6631417b84df46bac4cce2d51145751a405cd8f') # nu.parabola.$pkgname.metainfo.xml
- sha256sums+=('86bd54db6026ff65bd24ac4f05d0679a645ff447e2f81b0ee44037c0c4285e06') # vendor.js.in
- sha256sums_i686=('65395a49fd3d998f7e06a430bdd656ad453254dafcc34e21ec7931902d8c1809' # avoid-libxul-OOM-python-check.patch
- 'ed3bb281697af7c4353a34067ffb4b18a971d40757bef2d6af3c8bf2d28d42d1' # firefox-111.0.1-fdlibm.patch
- '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06' # fix-i686-build-moz-1792159.patch
- 'c3ce181fbb0142055aa6dd17f3cda2ba6a1e54d7a689a8c6e9cce76aa40e6544') # fix-i686-xsimd-incomplete.patch
- b2sums=('6c356a4d34044825e86f712b959cbfa6ee27c989c74e42b0b276ee6b169ca84b467ed5ea82f850a517694b75be104362273075c2aa6019f9d30e1be4035b3dd6'
- 'SKIP'
- # $pkgname-symbolic.svg
- '49b4776b3ec8c70194a8f7c5a6467f71820c6a5d6e2033a519fe2742282c6dc141855c6213c67e34b4e0774227d3c15f9083e708c33e7cd6e4c3a982830fefdf' # $pkgname.desktop
- '80cf1f7644f9b509fe374cd51fea288ffcca73f735c7d4c8e2a22be7543aa7e0f3c84a619315e5fb4b82967f1cc7b2b4282658af859be1a08d2f29c39f2815d7') # nu.parabola.$pkgname.metainfo.xml
- b2sums+=('f3f344196d03499f3f0392d5dfc5310e131d8c85772edd340faf1df3f04ebf2931eb1dda1b7fe6870d61d498618f4d8ae9f1dd446acbe83e0ce324e04b38f3f9') # vendor.js.in
- b2sums_i686=('572bb35d7aee0ac847a864b4309f73390435f16b750b8fa3c78b986181d57cdad434bca006d7438c903b2fdc08385292d08fee1d68c87240af72688d60cb8657' # avoid-libxul-OOM-python-check.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)
- # 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= # anti-feature
- ## parabola mksource over-rides ##
- _N_MKSOURCES=2 # number of sources=() to be isolated for mksource
- _N_MKKEYS=3 # number of validpgpkeys=() to be isolated for mksource
- mksource=( ${source[*]: 0:${_N_MKSOURCES}} )
- mksha256sums=( ${sha256sums[*]: 0:${_N_MKSOURCES}} )
- mkb2sums=( ${b2sums[*]: 0:${_N_MKSOURCES}} )
- mkvalidpgpkeys=( ${validpgpkeys[*]:0:${_N_MKKEYS}} )
- mksource+=( 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 )
- mksha256sums+=( 'c2f97b90795b9cc8fdb2ebb73cda38100529794ba8f4e358d4238fcc5293cee5' # *.branding.tar.xz
- 'SKIP'
- 'b9bb1e26b4f4ca4962be5a472f8965813ffb87354281934bbb9e2aa7b2a4a05e' # 9001-FSDG-sync-remote-settings-with-local-dump.patch
- 'e488677c244ecec60d5cf07d5a106807e35e71d19449280041944ef62325141b' # 9002-FSDG-preference-defaults.patch
- '02f8f09e30fab3ea1dd05fa3dcf58fe3e5204e2aa2ee53755fb3f2966b0e4a2e' # 9003-FSDG-urihandlers.patch
- '54be3c5ff632592f4db49911bc99a561aa6d5ba5e105b6f1109b884a4a3169c0' # 9004-FSDG-misc.patch
- 'd77624602d6064669e3c44dc4f45fb0ff12d2bf4bbe8e3d36be51a5ae94ca46e' ) # process-json-files.py
- mkb2sums+=( '3bdd96a8a398075651d4ea1d87fe58193a53d898a70dccc034d7c9d2c9ed13a17b7539bdc8de2925b55d76171b6583313ad6f75d373fc088f0a2a517bc33cb18' # *.branding.tar.xz
- 'SKIP'
- 'a3fb269470123df26d388dd05d46bca468c7bee14fec539c394df8b462f69d2d12f4b66f0a1ce3a70d25e8e82bfe55569fd1c4ff125f0ab0af46b4c146315b33' # 9001-FSDG-sync-remote-settings-with-local-dump.patchsettings-with-local-dump.patch
- '3c16edbcd7ec79530960097b49a9c72347ef108506bee9e51f06111035a5a09a8ea52bc66126a71e422a90ea0da67d34051568c6e9d0926cb9121281e33589fb' # 9002-FSDG-preference-defaults.patchefaults.patch
- '90a4676b9dfaf79f2265bfffa85251ac50423543a4ea6c113047293a36641f5efdac19a6aa753c91861b7ab0844a69c40fe01041d4f8c880c2332f0f79964c5e' # 9003-FSDG-urihandlers.patchpatch
- 'fb45647122c3af3a3c4fbdbb5175a05ef950cb47ad98af3deace3bc9fefa277e2ae57ccfbe5dfc0cb713e0d3a2faf47f5e61d22bd9d3568c310e6ea93116e901' # 9004-FSDG-misc.patch
- '123a23027f1bf5f0e1f7851de5c95b679d0a110b07f2fc7d2447290157963fce2bbb1f5ed46b0bfdcaf32927cf86cb0226965cafd85a2924be2b1812abb9d4b9' ) # process-json-files.py
- source=( https://repo.parabola.nu/other/${pkgname}/${pkgname}-${pkgver}.tar.zst{,.sig}
- ${source[*]:${_N_MKSOURCES}} )
- sha256sums=( 'db19d3dbcdacdcd9cdb622780d48068072851244187ba97ff1dc547bbfec99bc' # libre source-ball
- 'SKIP'
- ${sha256sums[*]:${_N_MKSOURCES}} )
- b2sums=( '8999c30b38f0f80b054e00ffb33b9246fbbd55c2ab467354cebdeebbf6e16b0e05369e25caa9d45796d84239bfe4a38c1f326c621bec06cff4fe4db1382b9910' # libre source-ball
- 'SKIP'
- ${b2sums[*]:${_N_MKSOURCES}} )
- validpgpkeys=( ${validpgpkeys[*]:${_N_MKKEYS}} )
- ## compiler and optimization tweaks ##
- # use GCC vs LLVM
- # one option or the other may resolve compiler/linker discrepancies for some releases
- # this option implies $_SKIP_PGO
- # ERROR: Cannot use cross-language PGO with GCC.
- readonly _USE_ALT_COMPILER=$(case "${CARCH}" in none) echo 1 ;; *) echo 0 ;; esac)
- # use 'bfd' linker vs 'lld'
- # most significantly, this also disables LTO and debugging
- # the final build with --enable-lto=cross,full requires >50GB RAM + swap
- # try one option or the other if during the final stage, the build freezes,
- # is killed, or chokes the host due to resource exhaustion
- readonly _USE_ALT_LINKER=$(case "${CARCH}" in i686) echo 1 ;; *) echo 0 ;; esac)
- # try hard to tell ld and rust not to use too much memory
- # this is mainly for x86_64, the combination of all explicit tweaks for armv7h and i686
- readonly _USE_LESS_MEMORY=$(case "${CARCH}" in none) echo 1 ;; *) echo 0 ;; esac)
- # disable PGO
- # PGO is said to afford some marginal performance gains at run-time
- # however, it doubles the build time and requires gobs of memory to build
- # building with less than 50GB combined RAM+swap available will need to $_SKIP_PGO
- # it is possible to build with less memory if the build chroot is on a ZRAM drive
- # (see this ticket for details https://pagure.io/abslibre/pull-request/89)
- # otherwise, try this if during the profiling stage, the build hangs indefinitely,
- # or as an alternative or supplement to $_USE_ALT_LINKER, to reduce memory usage
- # known past causes:
- # * resource exhaustion
- # * a test which misbehaves in environments without networking
- readonly _SKIP_PGO=$(case "${CARCH}" in armv7h|i686) echo 1 ;; *) echo $_USE_ALT_COMPILER ;; esac)
- # disable debug package
- # FIXME: problems with debug symbols - the first error may be due to resource exhaustion <32 GB RAM
- # debugedit: Warning, not replacing comp_dir ... encoded as DW_FORM_string. Replacement too large.
- # objcopy: ./usr/lib/iceweasel/libxul.so: debuglink section already exists
- readonly _NO_DEBUG=$(case "${CARCH}" in none) echo 1 ;; *) echo 0 ;; esac)
- (( _NO_DEBUG )) && options+=( !debug )
- (( _USE_ALT_LINKER )) && options+=( !debug !lto )
- (( _USE_LESS_MEMORY )) && options+=( !debug !lto )
- ## dependency tweaks ##
- depends+=( libicudata.so libicui18n.so libicuuc.so ) # --with-system-icu
- case "${CARCH}" in
- armv7h)
- makedepends=( ${makedepends[*]/wasi-*/} ) # armv7h has no wasi compiler
- makedepends=( ${makedepends[*]/nodejs/nodejs-lts-iron} ) # from archarm since v128 - the reason is not obvious
- # obj/dist/system_wrappers/new:3:15: fatal error: 'new' file not found
- if ! (( _USE_ALT_COMPILER ))
- then makedepends+=( libc++ ) ; export CXXFLAGS+=' -stdlib=libc++' ;
- fi
- # obj/dist/system_wrappers/aom/aomcx.h:3:15: fatal error: 'aom/aomcx.h' file not found
- makedepends+=( aom )
- ;;
- i686)
- # FIXME: disable wasm for i686 - 'wasi-compiler-rt' (in extra) supports only clang 18 (in staging)
- # DEBUG: | wasm-ld: error: cannot open /usr/lib/clang/15.0.7/lib/wasi/libclang_rt.builtins-wasm32.a: No such file or directory
- # DEBUG: | clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
- # ERROR: Cannot find wasi libraries or problem with the wasm linker. Please fix the problem. Or build with --without-wasm-sandboxed-libraries.
- makedepends=( ${makedepends[*]/wasi-*/} )
- ;;
- esac
- ## helpers ##
- _check_patching() {
- echo "Verifying libre patching..."
- pushd "${srcdir}"/firefox-${pkgver} > /dev/null
- # Remote Settings
- local settings_server_regex='firefox.settings.services.(mozilla|allizom).org'
- local settings_err_msg="ERROR: 9001-FSDG-sync-remote-settings-with-local-dump.patch needs reworking"
- ! grep -qrE $settings_server_regex || ! echo "${settings_err_msg}" || return 1
- # Model Hub
- local model_hub_server_regex='model-hub.(mozilla|allizom).org'
- local model_hub_err_msg="ERROR: 9002-FSDG-preference-defaults.patch needs reworking"
- ! grep -qrE $model_hub_server_regex || ! echo "${model_hub_err_msg}" || return 1
- # Merino
- local merino_server_regex='merino.services.(mozilla|allizom).com'
- local merino_err_msg="ERROR: 9002-FSDG-preference-defaults.patch needs reworking"
- ! grep -qrE $merino_server_regex || ! echo "${merino_err_msg}" || return 1
- # services.addons.mozilla.org API endpoint
- local amo_api_endpoint='services.addons.mozilla.org'
- local amo_err_msg="ERROR: 9002-FSDG-preference-defaults.patch needs reworking: AMO API endpoint hostname found in source tree"
- ! grep -qr $amo_api_endpoint || ! echo "${amo_err_msg}" || return 1
- # URI protocol handlers
- local uri_handlers=uriloader/exthandler/HandlerList.sys.mjs
- local webmails='google|yahoo'
- local misc_err_msg="ERROR: 9003-FSDG-urihandlers.patch needs reworking"
- grep 'name:' $uri_handlers | grep -q '"KiwiIRC",' &&
- ! grep 'name:' $uri_handlers | grep -qv '"KiwiIRC",' &&
- ! grep -Eq "($webmails)" $uri_handlers ||
- ! echo "${misc_err_msg}" || return 1
- popd > /dev/null
- echo "Verifying libre patching - OK"
- }
- _check_build_config() {
- # WIP: the check for unsupported/obsolete options does not quite work yet for ARM;
- # but i always build i686 and x86_64 first, so the other checks would probably pass on armv7h too
- [[ "${CARCH}" != armv7h ]] || return 0
- echo "Checking build configuration..."
- pushd "${srcdir}"/firefox-${pkgver} > /dev/null
- # 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
- [[ -f .mozconfig ]] ||
- ! echo "ERROR: cannot continue without a .mozconfig file" || return 1
- grep -q ' --with-distribution-id=nu.parabola' .mozconfig ||
- ! echo "ERROR: .mozconfig file is not properly re-branded" || return 1
- # `./mach configure` produces mozinfo.json, reflecting the current configuration.
- # See build/docs/mozinfo.rst
- local test_options=( --disable-eme ) # inject important options to detect their validity
- cp .mozconfig mozconfig-backup
- for opt in ${test_options[*]} ; do echo "ac_add_options ${opt}" >> .mozconfig ; done ;
- local was_configure_success=$(./mach configure > configure.log && echo 1 || echo 0)
- local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}')
- echo "obj_directory is: ${obj_directory}"
- # ensure that DRM (aka: EME) is properly de-configured
- # and report failures due to unsupported/obsolete config options (cleanly)
- local invalid_opts="$(grep 'InvalidOptionError: ' configure.log | cut -d ' ' -f 3-)"
- local is_eme_opt_valid=$([[ "${invalid_opts}" =~ --disable-eme ]] && echo 0 || echo 1)
- local is_eme_disabled=$(grep -Eq '[^#]*ac_add_options --disable-eme' mozconfig-backup && echo 1 || echo 0)
- mv mozconfig-backup .mozconfig
- if (( ! is_eme_opt_valid && is_eme_disabled ))
- then echo "ERROR: '--disable-eme' should not be in .mozconfig" ; return 1 ;
- elif (( is_eme_opt_valid && ! is_eme_disabled ))
- then echo "ERROR: DRM (aka: EME) is not disabled in .mozconfig" ; return 1 ;
- elif (( ! was_configure_success ))
- then [[ -n "${invalid_opts}" ]] || cat configure.log
- echo -e "ERROR: \`./mach configure\` failed\n${invalid_opts}" ; return 1 ;
- else rm configure.log
- fi
- # 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 antifeature_keys=( .crashreporter .datareporting .healthreport .normandy .telemetry .updater )
- local antifeatures_enabled=()
- for key in ${antifeature_keys[*]}
- do if jq -e "${key} != false" "${obj_directory}"/mozinfo.json &> /dev/null
- then antifeatures_enabled+=( ${key} )
- fi
- done
- if (( ${#antifeatures_enabled[*]} ))
- then echo "ERROR: Some anti-features are not disabled - aborting:"
- printf " - %s is enabled\n" ${antifeatures_enabled[*]}
- return 1
- fi
- popd > /dev/null
- echo "Checking build configuration - READY"
- }
- ## FSDG patching ##
- mksource() {
- cd firefox-$pkgver
- # delete unused code, such as android build support
- echo "Removing unused code..."
- # rm -rfv mobile/ # TODO: lets try to prune this
- rm -v toolkit/crashreporter/tools/upload_symbols.py
- # 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/' \
- --exclude='!gfx/cairo/cairo/src/cairo-features.h'
- rm -rf .git/
- echo "removing pre-built bits"
- rm -frv third_party/rust/winapi-{i686,x86_64}-pc-windows-gnu/**/*.a | sed 's|/[^/]*\.a$|/*.a|' | sort -u
- find \( -iregex '.+test.+bundle\.js' -o -iregex '.+[_.]min\.js' -o -name 'minified.js' \) -exec rm -v {} \;
- sed -i '/mappings.wasm/d' devtools/client/shared/vendor/source-map/lib/moz.build
- find -name '*.wasm' -exec rm -v {} \;
- # 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 various components at the source level
- sed -i 's/;1/;0/' toolkit/components/telemetry/components.conf
- sed -Ei 's/((MOZ_SERVICES_HEALTHREPORT|MOZ_NORMANDY).+)True/\1False/' browser/moz.configure
- #sed -i 's/;1/;0/' browser/experiments/Experiments.manifest
- #sed -i '/pocket/d' browser/extensions/moz.build
- #sed -i '/activity-stream/d' browser/extensions/moz.build
- # Disable/neutralize Remote Settings (as best we can)
- local branding_srcdir="${srcdir}"/${pkgname}-${_brandingver}
- python ../process-json-files.py "${srcdir}"/firefox-${pkgver} "${branding_srcdir}"
- echo "applying 9001-FSDG-sync-remote-settings-with-local-dump.patch"
- patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9001-FSDG-sync-remote-settings-with-local-dump.patch
- # 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
- # 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
- # Remove remaining non-free bits
- echo "applying 9004-FSDG-misc.patch"
- patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9004-FSDG-misc.patch
- ## FSDG patching checks ##
- _check_patching
- }
- ## business ##
- prepare() {
- mkdir mozbuild
- cd firefox-$pkgver
- ## 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 '' # de-vendoring
- # 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
- ## [ARCH-SPECIFIC PATCHING] ##
- case ${CARCH} in
- aarch64|armv7h)
- ;;
- 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
- # https://bugzilla.mozilla.org/show_bug.cgi?id=1729459
- # 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
- 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-install-strip
- 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 --disable-official-branding # branding over-ride
- ac_add_options --enable-update-channel=release
- 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
- # System libraries
- ac_add_options --with-system-nspr
- ac_add_options --with-system-nss
- # Features
- ac_add_options --enable-alsa
- ac_add_options --enable-jack
- ac_add_options --disable-crashreporter # anti-feature
- ac_add_options --disable-updater
- ac_add_options --disable-tests
- ac_add_options --disable-eme # anti-feature
- END
- # de-vendor system libs
- cat >> ../mozconfig <<EOF
- ac_add_options --with-system-ffi
- ac_add_options --with-system-icu
- ac_add_options --with-system-jpeg
- ac_add_options --with-system-libevent
- ac_add_options --with-system-libvpx
- ac_add_options --with-system-nspr
- ac_add_options --with-system-nss
- ac_add_options --with-system-pixman
- # ac_add_options --with-system-png # ERROR: --with-system-png won't work because the system's libpng doesn't have APNG support
- ac_add_options --with-system-webp
- ac_add_options --with-system-zlib
- EOF
- ## [ARCH-SPECIFIC CONFIG] ##
- case ${CARCH} in
- aarch64|armv7h)
- # 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
- # `--disable-elf-hack` is handled oddly - rather than minimizing the diff against arch
- # as it does for the other deleted options above, the archarm PKGBUILD omits it from
- # the 'general configuration' section, then declares it here for armv7 only
- 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="-j1"
- export MAKEFLAGS="-j4" # NOTE: under libremakepkg, MAKEFLAGS (in prepare function) must be exported
- # archarm 'rust.mk' over-rides are under the '[ARCH-SPECIFIC BUILD CONFIG]' section
- # (also, for all arches, under the 'compiler and optimization tweaks' section)
- # 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
- sed -i '/--disable-elf-hack/d' ../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
- # NOTE: 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.
- # Later, ${srcdir}/mozconfig will clobber firefox-$pkgver/.mozconfig during build().
- cat .mozconfig >> ../mozconfig
- ;;
- i686)
- # arch32 configuration #
- # FIXME: see note in 'dependency tweaks' section
- sed -i 's| --with-wasi-sysroot=.*| --without-wasm-sandboxed-libraries|' ../mozconfig
- # arch32 `export` commands are under the '[ARCH-SPECIFIC BUILD ENV]' section
- # arch32 toolchain.configure patching is under the '[ARCH-SPECIFIC BUILD ENV]' section
- # arch32 recipe has mozconfig over-rides in mozconfig-i686.patch
- cat >>../mozconfig <<END
- ac_add_options --disable-webrtc
- END
- # arch32 patching is under the '[ARCH-SPECIFIC PATCHING]' section
- ;;
- x86_64)
- ;;
- *) echo "no [ARCH-SPECIFIC CONFIG] for arch: ${CARCH}" ; return 1 ;
- ;;
- esac
- ## compiler and optimization tweaks ##
- 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
- fi
- 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
- ac_add_options --disable-debug
- ac_add_options --disable-debug-symbols
- END
- fi
- if (( _USE_LESS_MEMORY ))
- then # reduce jobs due to RAM constraints
- export MAKEFLAGS+=' -j4'
- echo 'ac_add_options --enable-optimize="-g0 -O2"' >> ../mozconfig
- echo "mk_add_options MOZ_MAKE_FLAGS=\"${MAKEFLAGS}\"" >> ../mozconfig
- # 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
- # 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
- # 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 "
- fi
- ## 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"
- 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}"/${pkgname}-symbolic.svg # minimize diff (in package())
- cp ../unofficial/document.ico document.ico
- cp ../unofficial/content/document_pdf.svg content/document_pdf.svg
- 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
- # 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 -- \
- # "${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
- # 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
- }
- build() {
- cd firefox-$pkgver
- ## 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}"
- # Breaks compilation since https://bugzilla.mozilla.org/show_bug.cgi?id=1896066
- CFLAGS="${CFLAGS/-fexceptions/}"
- CXXFLAGS="${CXXFLAGS/-fexceptions/}"
- # LTO needs more open files
- ulimit -n 4096
- if ! (( _USE_ALT_COMPILER ))
- then # clang-16: error: unknown argument: '-fvar-tracking-assignments'
- export CFLAGS="${CFLAGS/-fvar-tracking-assignments/}"
- export CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}"
- fi
- ## [ARCH-SPECIFIC BUILD ENV] ##
- case ${CARCH} in
- aarch64|armv7h)
- export MOZ_DEBUG_FLAGS=" "
- export CFLAGS+=" -g0"
- export CXXFLAGS+=" -g0"
- export LDFLAGS+=" -Wl,--no-keep-memory"
- # export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off"
- export RUSTFLAGS+=" -Cdebuginfo=0"
- # clang-16: warning: argument unused during compilation: '-fstack-clash-protection' [-Wunused-command-line-argument]
- if ! (( _USE_ALT_COMPILER ))
- then export CFLAGS+=' -Wno-unused-command-line-argument'
- export CXXFLAGS+=' -Wno-unused-command-line-argument'
- fi
- # ld.lld: error: version script assignment of <MANY> to symbol <MANY> failed: symbol not defined
- # this was supposedly fixed in LLVM 17 https://reviews.llvm.org/D135402
- # but could also be de to using a version of LLVM (18) other than rust's vendored version (17)
- # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277075#c12
- (( _USE_ALT_LINKER )) || export LDFLAGS+=" -Wl,--undefined-version"
- ;;
- 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)
- ;;
- *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ;
- ;;
- esac
- export CFLAGS
- export CXXFLAGS
- ## [ARCH-SPECIFIC BUILD CONFIG] ##
- case ${CARCH} in
- aarch64|armv7h)
- # 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
- ;;
- 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 (( _SKIP_PGO ))
- then
- # skipping "3-tier PGO" "instrumented browser"; so the final .mozconfig is ready now
- cp ../mozconfig .mozconfig
- else
- # Do 3-tier PGO
- echo "Building instrumented browser..."
- cat >.mozconfig ../mozconfig - <<END
- ac_add_options --enable-profile-generate=cross
- END
- _check_build_config # FSDG check
- ./mach build --priority normal
- echo "Profiling instrumented browser..."
- ./mach package
- LLVM_PROFDATA=llvm-profdata JARLOG_FILE="$PWD/jarlog" \
- dbus-run-session \
- 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 objdir
- echo "Building optimized browser..."
- cat >.mozconfig ../mozconfig - <<END
- 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
- ## FSDG config checks ##
- _check_build_config
- ## main build ##
- (( ! _SKIP_PGO )) ||
- echo "Building optimized browser..."
- ./mach build --priority normal
- }
- 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
- 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);
- // Enable GNOME Shell search provider
- pref("browser.gnome-search-provider.enabled", true);
- END
- cat "${srcdir}"/vendor.js.in >> "${vendorjs}" # Parabola additions to vendor.js
- local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
- install -Dvm644 /dev/stdin "$distini" <<END
- [Global]
- id=parabola
- 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
- app.distributor.channel=$pkgname
- app.partner.parabola=parabola
- END
- 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/$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 ../$pkgname-symbolic.svg -t "$pkgdir/usr/share/icons/hicolor/symbolic/apps"
- install -Dvm644 ../$pkgname.desktop -t "$pkgdir/usr/share/applications"
- install -Dvm644 ../nu.parabola.$pkgname.metainfo.xml -t "$pkgdir/usr/share/metainfo" # branding over-ride
- # 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
- sed -i "s|/firefox |/${pkgname} |" "$pkgdir/usr/bin/$pkgname" # minimize diff
- ## [ARCH-SPECIFIC INSTALL] ##
- case ${CARCH} in
- 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
- ;;
- x86_64)
- ;;
- *) 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/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
- }
|