PKGBUILD 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. # Maintainer (arch:firefox): Jan Alexander Steffens (heftig) <heftig@archlinux.org>
  2. # Contributor: Ionut Biru <ibiru@archlinux.org>
  3. # Contributor: Jakub Schmidtke <sjakub@gmail.com>
  4. # Contributor: Henry Jensen <hjensen@connochaetos.org>
  5. # Maintainer (archarm:firefox): Kevin Mihelich <kevin@archlinuxarm.org>
  6. # Maintainer (arch32:firefox): Andreas Baumann <mail@andreasbaumann.cc>
  7. # Contributor: Erich Eckner <git@eckner.net>
  8. # Contributor: Andreas Grapentin <andreas@grapentin.org>
  9. # Contributor: Luke Shumaker <lukeshu@parabola.nu>
  10. # Contributor: André Silva <emulatorman@hyperbola.info>
  11. # Contributor: Márcio Silva <coadde@hyperbola.info>
  12. # Contributor: fauno <fauno@kiwwwi.com.ar>
  13. # Contributor: vando <facundo@esdebian.org>
  14. # Contributor: Figue <ffigue at gmail>
  15. # Contributor: evr <evanroman at gmail>
  16. # Contributor: Muhammad 'MJ' Jassim <UnbreakableMJ@gmail.com>
  17. # Contributor: vando <facundo@esdebian.org>
  18. # Contributor: taro-k <taro-k@movasense_com>
  19. # Contributor: Michał Masłowski <mtjm@mtjm.eu>
  20. # Contributor: Luke R. <g4jc@openmailbox.org>
  21. # Contributor: Isaac David <isacdaavid@isacdaavid.info>
  22. # Contributor: bill-auger <bill-auger@programmer.net>
  23. # Contributor: grizzlyuser <grizzlyuser@protonmail.com>
  24. # parabola changes and rationale
  25. # libre:
  26. # - Modify the addons pages to use GNU IceCat plugins sources, rather
  27. # than addons.mozilla.org, which hosts non-free addons
  28. # - Disable EME, which is implemented via the non-free libWideVine CDM
  29. # - Disable Normandy that let Mozilla push messages with recommendations
  30. # of nonfree software
  31. # - Make Remote Settings work completely offline using local data
  32. # - Use system python libs. The arch package uses 'pip' to download
  33. # dependencies from the internet at build-time, despite that those needed
  34. # dependencies are already packaged in the arch repos. So strictly-speaking,
  35. # the package is not built from source, as some sources will be missing
  36. # from the published source package, and will not be required as makedepends.
  37. #
  38. # technical:
  39. # - build 32-bit arches with GCC instead of clang
  40. # - disable rust-SIMD, LTO, PGO, and skip profiling build for armv7h and i686
  41. # - allow skipping profiling build for x86_64 (_SHOULD_SKIP_PGO).
  42. # this is to avoid OOM problems, and occasional deadlocks in some versions,
  43. # which expect active netwokring or internet access at build time.
  44. # - prefer as many system libs as possible, over their vendored couterparts
  45. # - Rebrand to Iceweasel, per the mozilla trademark policy, due to the FSDG changes
  46. # - set user profile directory to ~/.mozilla/iceweasel
  47. #
  48. # privacy:
  49. # - Remove Google API keys and usage
  50. # - Disable Mozilla telemetry and crash reporting
  51. # (good manners because of all of the other patching we're doing)
  52. # - do not compile/upload remote debug symbols
  53. # NOTE: This PKGBUILD is kept in-sync, as closely as possible,
  54. # with arch{,arm,32} (firefox), and parabola {iceweasel,icecat},
  55. # for the sake of documentation and cleaner diffs.
  56. # That also helps to identify which changes were made by Parabola vs upstream.
  57. # Therefore, this PKGBUILD may declare blacklisted dependencies, non-free sources,
  58. # or include code for anti-features; but those will be filtered-out subsequently.
  59. # Any code which implements an anti-feature should be commented-out;
  60. # and include an 'anti-feature' comment, for clarity.
  61. # Any blacklisted dependencies and non-free sources should be filtered,
  62. # and include a 'non-free' comment, for clarity.
  63. # Without those over-rides, the resulting program may not be FSDG-fit.
  64. # Do not circumvent those over-rides, if compiling for the Parabola repos.
  65. pkgname=iceweasel
  66. epoch=1
  67. pkgver=110.0.1
  68. pkgrel=1
  69. pkgrel+=.parabola1
  70. _brandingver=102.0-1
  71. pkgdesc="Standalone web browser derived from Mozilla Firefox"
  72. url=https://wiki.parabola.nu/Iceweasel
  73. arch=(x86_64)
  74. arch+=(
  75. armv7h
  76. i686)
  77. license=(
  78. GPL
  79. LGPL
  80. MPL
  81. )
  82. depends=(
  83. dbus-glib
  84. ffmpeg
  85. gtk3
  86. libpulse
  87. libxt
  88. mime-types
  89. nss
  90. ttf-font
  91. )
  92. makedepends=(
  93. cbindgen
  94. clang
  95. diffutils
  96. dump_syms
  97. imake
  98. inetutils
  99. jack
  100. lld
  101. llvm
  102. mesa
  103. nasm
  104. nodejs
  105. python
  106. rust
  107. unzip
  108. wasi-compiler-rt
  109. wasi-libc
  110. wasi-libc++
  111. wasi-libc++abi
  112. xorg-server-xvfb
  113. yasm
  114. zip
  115. )
  116. makedepends+=(
  117. git
  118. imagemagick
  119. jq
  120. libxslt
  121. python-jsonschema
  122. python-setuptools
  123. python-typing-extensions
  124. python-zstandard
  125. quilt
  126. )
  127. optdepends=(
  128. 'hunspell-en_US: Spell checking, American English'
  129. 'libnotify: Notification integration'
  130. 'networkmanager: Location detection via available WiFi networks'
  131. 'pulseaudio: Audio support'
  132. 'speech-dispatcher: Text-to-Speech'
  133. 'xdg-desktop-portal: Screensharing with Wayland'
  134. )
  135. # install=${pkgname}.install # TODO: redmine #2164
  136. # provides=('firefox') # TODO: redmine #2164 - currently conflicts with 'your-freedom'
  137. replaces=('firefox')
  138. options=(
  139. !debug
  140. !emptydirs
  141. !lto
  142. !makeflags
  143. !strip
  144. )
  145. source=(
  146. https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz{,.asc}
  147. $pkgname.desktop
  148. identity-icons-brand.svg
  149. 0001-libwebrtc-screen-cast-sync.patch
  150. )
  151. source=(${source[*]/identity-icons-brand.svg/}) # branding over-ride
  152. source+=(
  153. https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.branding.tar.xz{,.sig}
  154. 9001-FSDG-sync-remote-settings-with-local-dump.patch
  155. 9002-FSDG-preference-defaults.patch
  156. 9003-FSDG-urihandlers.patch
  157. 9004-FSDG-misc.patch
  158. process-json-files.py
  159. vendor.js.in
  160. )
  161. source_armv7h=(build-arm-libopus.patch)
  162. source_i686=(
  163. avoid-libxul-OOM-python-check.patch
  164. rust-static-disable-network-test-on-static-libraries.patch
  165. firefox-107.0-fdlibm.patch
  166. fix-i686-build-moz-1792159.patch
  167. )
  168. validpgpkeys=(
  169. '14F26682D0916CDD81E37B6D61B7B526D98F0353' # Mozilla Software Releases <release@mozilla.com>
  170. )
  171. validpgpkeys+=(
  172. 'BFA8008A8265677063B11BF47171986E4B745536' # Andreas Grapentin
  173. '3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40' # bill-auger
  174. )
  175. sha256sums=('f19bb74d684b992625abca68f5776198974cd2785eb5d02d51ba007fc998491f'
  176. 'SKIP'
  177. '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58'
  178. '43c83101b7ad7dba6f5fffeb89b70a661a547d506a031ea2beada42ccf04eec7')
  179. sha256sums+=('d29c194ed7b3b4fa0f511866723118938c2be40077b4e9aadf8b3e6bfff91049'
  180. 'SKIP'
  181. '58f6cdb31df0da4c8bf599d033ceb8f97c3e19b21c72b5b4cb70f13e1dfa5139' # 9001-FSDG-sync-remote-settings-with-local-dump.patch
  182. '1e4d28bd87688334b20cce9213490111e004ea6bcf1654f550da8ebe6bdbf3ef' # 9002-FSDG-preference-defaults.patch
  183. '13b701372b6fb35b96a1d58853db64643feb9be061ebc461b41ceca5de8eea62' # 9003-FSDG-urihandlers.patch
  184. 'b664e65ad916effcd4807f8dc11b2d74e28733118c4a189dd19da6663a99577b' # 9004-FSDG-misc.patch
  185. '591b07d4a23bf978329420b7d7f53e16824dfbbf30ef0ffe8efd73a6cd836624' # process-json-files.py
  186. '8e113fd2730be3fd11b2a24918dd62e8741513cf4dce9819d8eae358c5411adc') # vendor.js.in
  187. sha256sums_armv7h=('2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
  188. sha256sums_i686=('2f0c81a38c4578f68f5456b618fe84a78974072821488173eb55e0e72287e353'
  189. '10c5276eab2e87f400a6ec15d7ffbef3b0407ee888dea36f1128927ca55b9041'
  190. '1c2015e9f59c2c3bc898e04c6c6d33523f835638fd314d24944a8063cbce79d8'
  191. '2fb39374fd3d80eea9e346032a2a4b2bc2e357dee7380855b24bcf19b1335d06')
  192. b2sums=('ff196016e0271f7828163b8f767f3321b5ee08ef6bd0b03b134e17a1e5b62666f10ae80a14569438f6ac1c995a7a8422265eaabbc505b6a86e95a66b5db07209'
  193. 'SKIP'
  194. 'f86353bbba05d8994db34c6abb66094aa61d2c37c8599930dbe9d215413f0f718a1ce55a8f2d07a65074c3947e28fc80d44c925bd9be239a870f82d2a1803635'
  195. '2bf65874c8c1f41c9273b68d74f4fe5c81dca5acbad0b9a5f917df1d46e1b2a1fb25d42a419eb885e76f4d193483cdeb6294e14ed4b2e241c34b84565b6ffd72')
  196. b2sums+=('c2a2ead1b44c563583abb5cd3579e8f2724ea79e12aba1b315f201a09547d611b4a3c98de12f063b25826fd1520562d411ab917780bab4d78a1240fe56096b1b'
  197. 'SKIP'
  198. '553f96ab709cfc60324829b7225f89081b0aae06fd6d52699e83ee8483dc23ff227caec68949cf62caaffad09a26e817287508000dae5df60d3062de2e6a8bce' # 9001-FSDG-sync-remote-settings-with-local-dump.patch
  199. 'bdb08d681f6f17ae9f8e0bb37e23087a0401d4be26c91ead3eda4654362ad37c3b1cddf69596e2b2278f77e0fd45714b7dbb7a97aca35aae5417e916079d24bf' # 9002-FSDG-preference-defaults.patch
  200. '9e4ccfb8850d9f9a5222f5186b35f2ae7986b6c6d435de024b109a6fa01e65a1362664cfb6ea81621387cf33364cc8d3d466fae1bee24ab5fc7e23c4cb17bf2c' # 9003-FSDG-urihandlers.patch
  201. '3c2041eac7230a2268cd2590bbccf2d3cf66f9164b6032c039e1d2656c0331301d39fb25623d27ee9cf701867f79f9e7fec6dbf68ff46f4fc5abb4ebeb3784cc' # 9004-FSDG-misc.patch
  202. 'f53c0bdd1b1e09f3e4e4e376f6ada654fc6f5a02a248c87daad1f644fc8cf9bdb1009802f352b59d76b17c6d6a81745da1e7c59a5e2421fd2b8475bb9ba34798' # process-json-files.py
  203. '5302b6abcfec3155c578e0664e6a0ac921234c5912d74c4a9b0feb3a051ed4ef5f11b93ee37739a3a92fc6693683374f92ac9c3f560780f879c4249d0718157a') # vendor.js.in
  204. b2sums_armv7h=('6e5980e56343a23bce4fcda58f6abc8f2debca0c278c87b09e53abb17ff15849c26e8df3bbff2388985f8fe5a4e9be9982c602ef7159546f0ae335fca1000a41')
  205. b2sums_i686=('97035e44cd1deae7bb2422c81eec7294feb51f43f460b4d7ddba083e1d8a48d265a36ca43cf1d9dee49b01ee6df0c76e0f6916cc73cb7ad9caa1c235a59da0e4'
  206. '009789d3bb93ba418929019135804fc3de7de161e5be8efba7fc75646fbde395720be5b7a7d3f5d1671f459fdd2944dd14aca306bbf1c975436d4f7765d62d15'
  207. 'e4851eaa9030d9b8811f505f8f1569a41f8dc7cf586269108ebe370ac91896f69d36fc6d2e1937f427656fe4fca63031ca5e11d39a3667205a4b0a6f935cd548'
  208. 'd20ce3eff595f85df86eaa0dfb665fc356f8987117a771f76adc4ac12046a7e82b0af182fa99f87ea1362a5026c9d0216c7b714649fef0c7294c61c8e8f4d790')
  209. # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) # anti-feature
  210. # Note: These are for Arch Linux use ONLY. For your own distribution, please # anti-feature
  211. # get your own set of keys. Feel free to contact foutrelis@archlinux.org for # anti-feature
  212. # more information. # anti-feature
  213. # _google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM # anti-feature
  214. # Mozilla API keys (see https://location.services.mozilla.com/api) # anti-feature
  215. # Note: These are for Arch Linux use ONLY. For your own distribution, please # anti-feature
  216. # get your own set of keys. Feel free to contact heftig@archlinux.org for # anti-feature
  217. # more information. # anti-feature
  218. # _mozilla_api_key=e05d56db0a694edc8b5aaebda3f2db6a # anti-feature
  219. ## compiler and optimization tweaks ##
  220. # disable PGO for 32-bit arches (always), x86_64 optionally
  221. # normally enabled ('0') for x86_64 - try '1' if the build hangs indefinitely
  222. readonly _SHOULD_SKIP_PGO=$(case "${CARCH}" in armv7h|i686) echo 1 ;; *) echo 0 ;; esac)
  223. # use GCC vs LLVM for 32-bit arches
  224. # normally not needed ('0') for x86_64
  225. # for 32-bit arches, try one or the other, to resolve compiler/linker issues
  226. readonly _SHOULD_USE_GCC==$(case "${CARCH}" in armv7h) echo 1 ;;
  227. i686 ) echo 1 ;;
  228. x86_64) echo 0 ;; esac)
  229. ## dependency tweaks ##
  230. makedepends+=( python-pydantic=1.9.2 ) # dustbin - configure error: pydantic 1.10.4 has requirement typing-extensions>=4.2.0, but you have typing-extensions 3.10.0.0
  231. makedepends+=( python-zstandard=0.19.0 ) # dustbin - configure error: zstandard<=0.19.0,>=0.11.1: Installed with unexpected version "0.20.0"
  232. case "${CARCH}" in
  233. armv7h)
  234. makedepends=( ${makedepends[*]/wasi-*/} ) # armv7h has no wasi compiler
  235. depends+=( icu=72.1 ) # --with-system-icu
  236. ;;
  237. i686)
  238. makedepends+=( llvm14 ) # rustup: error while loading shared libraries: libLLVM-14.so:
  239. makedepends=( ${makedepends[*]/wasi-*/} ) # wasm-ld: error: cannot open /usr/lib/clang/15.0.7/lib/wasi/libclang_rt.builtins-wasm32.a: No such file or directory
  240. makedepends+=( 'wasi-libc++>=15' 'wasi-libc++<16' ) # in [community-testing]
  241. makedepends+=( 'wasi-libc++abi>=15' 'wasi-libc++abi<16' ) # in [community-testing]
  242. makedepends+=( 'wasi-compiler-rt>=15' 'wasi-compiler-rt<16' ) # in [community-testing]
  243. ;;
  244. esac
  245. ## helpers ##
  246. _check_build_config() {
  247. pushd "${srcdir}"/firefox-${pkgver} > /dev/null
  248. echo "Checking build configuration..."
  249. # Each of the [ARCH-SPECIFIC CONFIG] branches in prepare(), should have prepared a
  250. # $srcdir/mozconfig file with any arch-specific changes to the Arch x86_64 PKGBUILD.
  251. # Finally, that file should have been copied to $srcdir/firefox-$pkgver/.mozconfig
  252. grep '^ac_add_options --with-distribution-id=nu.parabola' .mozconfig &> /dev/null || \
  253. ! echo "cannot continue without a .mozconfig file" || return 1
  254. if ! [[ "${CARCH}" =~ ^(aarch64|armv7h)$ ]] # ARM has no --disable-eme option
  255. then grep '^ac_add_options --disable-eme' .mozconfig &> /dev/null || \
  256. ! echo ".mozconfig file was not properly treated per the FSDG" || return 1
  257. fi
  258. # Configure produces mozinfo.json that reflects current configuration.
  259. # See build/docs/mozinfo.rst
  260. ./mach configure
  261. # In this test, jq collects values of the following keys of mozinfo.json into array,
  262. # and checks if any of them are not equal to false, in which case it returns "true".
  263. # E.g. if the value of any key is true or null (in case the key is missing from mozinfo.json),
  264. # that means the build configuration has to be reworked.
  265. local obj_directory=$(./mach environment | sed -En '/object directory:/{n;s/^\s+//;p;}')
  266. local antifeature_keys=(.crashreporter .datareporting .healthreport .normandy .telemetry .updater)
  267. local antifeatures=()
  268. echo "obj_directory is: ${obj_directory}"
  269. for key in ${antifeature_keys[@]}
  270. do if jq -e "${key} != false" "${obj_directory}"/mozinfo.json &> /dev/null
  271. then antifeatures+=(${key})
  272. fi
  273. done
  274. if (( ${#antifeatures[@]} ))
  275. then echo "Some anti-features are not disabled in build configuration files, aborting:"
  276. for key in ${antifeatures[@]} ; do echo " - ${key} is enabled" ; done ;
  277. return 1
  278. fi
  279. popd > /dev/null
  280. }
  281. _check_patching() {
  282. pushd "${srcdir}"/firefox-${pkgver} > /dev/null
  283. echo "verifying libre patching"
  284. # URI protocol handlers
  285. local uri_handlers=uriloader/exthandler/HandlerList.sys.mjs
  286. local webmails='google|yahoo'
  287. grep 'name:' $uri_handlers | grep '"KiwiIRC",' &> /dev/null && \
  288. ! grep 'name:' $uri_handlers | grep -v '"KiwiIRC",' &> /dev/null && \
  289. ! grep -E "($webmails)" $uri_handlers &> /dev/null || \
  290. ! echo "9003-FSDG-misc.patch needs reworking" || \
  291. return 1
  292. # services.addons.mozilla.org API endpoint
  293. local amo_api_endpoint='services.addons.mozilla.org'
  294. ! grep -qr $amo_api_endpoint &> /dev/null || \
  295. ! echo '9002-FSDG-preference-defaults.patch needs reworking: AMO API endpoint hostname found in source tree' || \
  296. return 1
  297. # Remote Settings
  298. local settings_server='firefox.settings.services.mozilla.com'
  299. ! grep -qr $settings_server &> /dev/null || \
  300. ! echo '9001-FSDG-sync-remote-settings-with-local-dump.patch needs reworking' || \
  301. return 1
  302. popd > /dev/null
  303. }
  304. ## business ##
  305. prepare() {
  306. mkdir mozbuild
  307. cd firefox-$pkgver
  308. ## technical patching ##
  309. # https://bugs.archlinux.org/task/76231
  310. # https://bugzilla.mozilla.org/show_bug.cgi?id=1790496
  311. # https://src.fedoraproject.org/rpms/firefox/blob/rawhide/f/libwebrtc-screen-cast-sync.patch
  312. patch -Np1 -i ../0001-libwebrtc-screen-cast-sync.patch
  313. # arch-specific technical patching
  314. case ${CARCH} in
  315. aarch64|armv7h)
  316. # Error: immediate expression requires a # prefix -- `pld [r0,1792]'
  317. # mozilla #1787405 and #1791267
  318. sed -i "s|# 'LIBYUV_DISABLE_NEON',|'LIBYUV_DISABLE_NEON',|" media/libyuv/libyuv/libyuv.gyp
  319. ! grep "# 'LIBYUV_DISABLE_NEON'," media/libyuv/libyuv/libyuv.gyp || ! echo "error patching media/libyuv/libyuv/libyuv.gyp" || exit 1
  320. patch -p1 -i ../build-arm-libopus.patch
  321. ;;
  322. i686)
  323. # readelf: Error: Unable to seek to 0x801db328 for section headers
  324. echo "applying avoid-libxul-OOM-python-check.patch"
  325. patch -p1 -i ../avoid-libxul-OOM-python-check.patch
  326. # test failure in rust code (complaining about network functions) when PGO is used,
  327. # see https://bugzilla.mozilla.org/show_bug.cgi?id=1565757
  328. echo "applying rust-static-disable-network-test-on-static-libraries.patch"
  329. patch -p1 -i ../rust-static-disable-network-test-on-static-libraries.patch
  330. # FIXME: this patch is probably temporary - it comes from mozilla
  331. # https://bugzilla.mozilla.org/show_bug.cgi?id=1729459
  332. # /build/iceweasel/src/firefox-96.0.1/modules/fdlibm/src/math_private.h:34:21:
  333. # error: conflicting declaration ‘typedef __double_t double_t’
  334. # /usr/include/math.h:156:21: note: previous declaration as ‘typedef long double double_t’
  335. echo "applying firefox-107.0-fdlibm.patch"
  336. patch -p1 -i "$srcdir/firefox-107.0-fdlibm.patch"
  337. # js/src/jit/shared/AtomicOperations-shared-jit.cpp:88:9: error: ‘AtomicCopyByteUnsynchronized’ was not declared in this scope; did you mean ‘AtomicMemcpyUpUnsynchronized’?
  338. echo "applying fix-i686-build-moz-1792159.patch"
  339. patch -p1 -i "$srcdir/fix-i686-build-moz-1792159.patch"
  340. ;;
  341. x86_64)
  342. ;;
  343. esac
  344. ## general configuration ##
  345. # echo -n "$_google_api_key" >google-api-key # anti-feature
  346. # echo -n "$_mozilla_api_key" >mozilla-api-key # anti-feature
  347. cat >../mozconfig <<END
  348. ac_add_options --enable-application=browser
  349. mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
  350. ac_add_options --prefix=/usr
  351. ac_add_options --enable-release
  352. ac_add_options --enable-hardening
  353. ac_add_options --enable-optimize
  354. ac_add_options --enable-rust-simd
  355. ac_add_options --enable-linker=lld
  356. ac_add_options --disable-elf-hack
  357. ac_add_options --disable-bootstrap
  358. ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
  359. # Branding
  360. ac_add_options --disable-official-branding # branding over-ride
  361. ac_add_options --enable-update-channel=release
  362. ac_add_options --with-distribution-id=nu.parabola # branding over-ride
  363. ac_add_options --with-branding=browser/branding/${pkgname} # branding over-ride
  364. ac_add_options --with-app-name=${pkgname} # branding over-ride
  365. ac_add_options --with-app-basename=${pkgname} # branding over-ride
  366. ac_add_options --with-unsigned-addon-scopes=app,system
  367. ac_add_options --allow-addon-sideload
  368. # export MOZILLA_OFFICIAL=1 # branding over-ride
  369. export MOZ_APP_REMOTINGNAME=${pkgname//-/}
  370. export MOZ_TELEMETRY_REPORTING=
  371. export MOZ_REQUIRE_SIGNING=
  372. # Keys
  373. # ac_add_options --with-google-location-service-api-keyfile=${PWD@Q}/google-api-key # anti-feature
  374. # ac_add_options --with-google-safebrowsing-api-keyfile=${PWD@Q}/google-api-key # anti-feature
  375. # ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key # anti-feature
  376. # System libraries
  377. ac_add_options --with-system-nspr
  378. ac_add_options --with-system-nss
  379. # Features
  380. ac_add_options --enable-alsa
  381. ac_add_options --enable-jack
  382. ac_add_options --disable-crashreporter # anti-feature
  383. ac_add_options --disable-updater
  384. ac_add_options --disable-tests
  385. ac_add_options --disable-eme # anti-feature
  386. END
  387. ## [ARCH-SPECIFIC CONFIG] ##
  388. case ${CARCH} in
  389. aarch64|armv7h)
  390. # experimental/version-specific hacks #
  391. (( ! _SHOULD_USE_GCC )) ||
  392. cat >> ../mozconfig <<EOF
  393. export CC=gcc
  394. export CXX=g++
  395. export AR=gcc-ar
  396. export NM=gcc-nm
  397. export RANLIB=gcc-ranlib
  398. EOF
  399. # ld.lld: error: undefined hidden symbol: std::type_info::operator==(std::type_info const&) const
  400. echo 'ac_add_options --with-system-icu' >> ../mozconfig
  401. # archarm configuration #
  402. if [[ $CARCH == "armv7h" ]]; then
  403. echo "ac_add_options --disable-elf-hack" >> .mozconfig
  404. # https://bugzilla.redhat.com/show_bug.cgi?id=1641623
  405. echo "ac_add_options --disable-av1" >> .mozconfig
  406. # reduce jobs due to RAM constraints
  407. MAKEFLAGS="-j4"
  408. # disable hard-coded LTO
  409. sed -i '/cargo_rustc_flags += -Clto/d' config/makefiles/rust.mk
  410. sed -i '/RUSTFLAGS += -Cembed-bitcode=yes/d' config/makefiles/rust.mk
  411. # increase codegen-units due to RAM constraints
  412. sed -i 's/codegen-units=1/codegen-units=16/' config/makefiles/rust.mk
  413. # webrtc on ARMv7 implies android, so disable it
  414. echo "ac_add_options --disable-webrtc" >> .mozconfig
  415. elif [[ $CARCH == "aarch64" ]]; then
  416. echo 'ac_add_options --enable-rust-simd' >> .mozconfig
  417. fi
  418. echo 'ac_add_options --enable-optimize="-g0 -O2"' >> .mozconfig
  419. echo "mk_add_options MOZ_MAKE_FLAGS=\"${MAKEFLAGS}\"" >> .mozconfig
  420. # archarm `export` commands are under the '[ARCH-SPECIFIC BUILD ENV]' section
  421. # archarm patching is under the 'technical patching' section
  422. # archarm has these differences in ## general configuration ## above
  423. # NOTE: '--disable-eme' is currently an invalid option for armv7h.
  424. # It must be deleted in order to compile.
  425. # If ever it becomes valid, it should not be deleted below.
  426. sed -i '
  427. /--enable-hardening/d
  428. /--enable-optimize/d
  429. /--enable-rust-simd/d
  430. s| --with-wasi-sysroot=.*| --without-wasm-sandboxed-libraries|
  431. /--disable-eme/d
  432. ' ../mozconfig
  433. # At this point in the recipe (this `case` block), the arch, arch32, and parabola
  434. # PKGBUILDs have prepared a temporary ${srcdir}/mozconfig; but the archarm PKGBUILD
  435. # writes directly to the final firefox-$pkgver/.mozconfig.
  436. # We allowed .mozconfig to be written above, only to minimize the diff against archarm.
  437. # For consistency across arches, we append those changes to ${srcdir}/mozconfig now.
  438. # ${srcdir}/mozconfig will clobber firefox-$pkgver/.mozconfig later, during build().
  439. cat .mozconfig >> ../mozconfig
  440. ;;
  441. i686)
  442. # experimental/version-specific hacks #
  443. (( ! _SHOULD_USE_GCC )) ||
  444. cat >>../mozconfig <<END
  445. export CC=gcc
  446. export CXX=g++
  447. export AR=gcc-ar
  448. export NM=gcc-nm
  449. export RANLIB=gcc-ranlib
  450. END
  451. # arch32 configuration #
  452. # arch32 `export` commands are under the '[ARCH-SPECIFIC BUILD ENV]' section
  453. # NOTE: these diffs and the compiler flags above, were moved to mozconfig-i686.patch
  454. # they are more handy to tweak in-line though
  455. # disable LTO as it has little benefit and uses too many resources
  456. # don't compile with clang, use gcc toolchain (clang has issues on IA32)
  457. # disable SIMD (SSE2 for i686)
  458. # set correct compiler and toochain tools
  459. cat >>../mozconfig <<END
  460. #ac_add_options --disable-linker=lld
  461. #ac_add_options --enable-linker=bfd
  462. ac_add_options --disable-lto
  463. ac_add_options --disable-rust-simd
  464. ac_add_options --disable-debug
  465. ac_add_options --disable-debug-symbols
  466. END
  467. # FIXME GCC: /usr/lib/gcc/i686-pc-linux-gnu/12.1.0/include/xmmintrin.h:208:1: error: inlining failed in call to ‘always_inline’ ‘__m128 _mm_sqrt_ps(__m128)’: target specific option mismatch
  468. # FIXME LLVM: /build/iceweasel/src/firefox-106.0.1/third_party/libwebrtc/modules/audio_processing/aec3/adaptive_fir_filter.cc:110:27: error: always_inline function '_mm_loadu_ps' requires target feature 'sse', but would be inlined into function 'ComputeFrequencyResponse_Sse2' that is compiled without support for 'sse'
  469. echo "ac_add_options --disable-webrtc" >> ../mozconfig
  470. sed -i '/cargo_rustc_flags += -Clto/d' config/makefiles/rust.mk # FIXME: is this needed?
  471. # arch32 patching is under the 'technical patching' section
  472. ;;
  473. x86_64)
  474. ;;
  475. *) echo "no [ARCH-SPECIFIC CONFIG] for arch: ${CARCH}" ; return 1 ;
  476. ;;
  477. esac
  478. ## branding ##
  479. echo "applying parabola branding"
  480. local brandingsrcdir="${srcdir}"/${pkgname}-${_brandingver/-*}
  481. local brandingdestdir="${srcdir}"/firefox-${pkgver}/browser/branding/${pkgname}
  482. local tippytopdir="${srcdir}"/firefox-${pkgver}/browser/components/newtab/data/content/tippytop
  483. local blank_svg='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"></svg>'
  484. rm -rf -- ${brandingdestdir}
  485. cp -aT -- ${brandingsrcdir}/branding ${brandingdestdir}
  486. pushd "${brandingdestdir}" > /dev/null
  487. # generate icons, logos, banners
  488. for size in 16 22 24 32 48 64 128 256
  489. do rsvg-convert -w ${size} -h ${size} iceweasel_icon.svg -o default${size}.png
  490. done
  491. cp iceweasel_logo.svg content/aboutlogins.svg
  492. cp iceweasel_logo.svg content/about-logo.svg
  493. # cp iceweasel_logo.svg content/about-logo.svg # RuntimeError: File "about-logo.svg" not found in browser/branding/iceweasel/content
  494. rsvg-convert -w 192 --keep-aspect-ratio iceweasel_logo.svg -o content/about-logo.png
  495. rsvg-convert -w 384 --keep-aspect-ratio iceweasel_logo.svg -o content/about-logo@2x.png
  496. cp content/about-logo.png content/about-logo-private.png
  497. cp content/about-logo@2x.png content/about-logo-private@2x.png
  498. echo ${blank_svg} > content/blank.svg
  499. popd > /dev/null
  500. # custom new tab page
  501. # FIXME: the newtab page (aka "Start Page") has changed significantly
  502. # the new upstream start page ('activity-streams') is an add-on now
  503. # it must be forked and customized externally, then copied into the browser tree
  504. # see: the branding-dev-build/ dir on the '68.0' branch of the branding git repo
  505. # some of the branding components above and commented out below may no longer be used
  506. # the following section aims to restore something similar
  507. # to the previous parabola-branded "start page"
  508. # once it is working well, all of these comments should be removed
  509. # and any unused branding components may be deleted from the branding package
  510. # Put "Start Page" branding images in the source code
  511. # install -m644 -t browser/base/content/abouthome -- \
  512. # "${brandingsrcdir}/branding"/{drm-free,gnu_headshadow,parabola-banner}.png
  513. # install -m644 -t browser/extensions/onboarding/content/img -- \
  514. # "${brandingsrcdir}/branding/watermark.svg"
  515. # process default Top Sites and their icons
  516. find ${tippytopdir} -type f \
  517. -not -name 'wikipedia-org*' \
  518. -not -name 'top_sites.json' \
  519. -exec rm -v {} \;
  520. for image in "${brandingsrcdir}"/tippytop/*.svg; do
  521. local outname=$(basename -s .svg "${image}")
  522. local size=$(identify -format '%wx%h' ${tippytopdir}/images/wikipedia-org@2x.png)
  523. local background=$( [[ "${outname}" == 'gnu' ]] && echo 'white' || echo 'none' )
  524. magick -density 300 ${image} \
  525. -gravity center -resize ${size} -extent ${size} \
  526. "${tippytopdir}/images/${outname}@2x.png"
  527. size=256x256
  528. magick -density 300 -background ${background} ${image} \
  529. -gravity center -resize ${size} -extent ${size} \
  530. -define icon:auto-resize=64,48,32,16 \
  531. "${tippytopdir}/favicons/${outname}.ico"
  532. done
  533. # apply branding patches
  534. export QUILT_PATCHES="${brandingsrcdir}"/patches
  535. export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
  536. export QUILT_DIFF_ARGS='--no-timestamps'
  537. export QUILT_PC="${srcdir}"/.pc
  538. quilt push -av
  539. # misc branding
  540. sed -i "s|({ \$bits }-bit)|($CARCH)|" browser/locales/en-US/browser/aboutDialog.ftl
  541. ## searchengines ##
  542. pushd browser/components/search/extensions > /dev/null
  543. # Patch search-engines configs
  544. sed -i 's|https://duckduckgo.com/|https://html.duckduckgo.com/html/|' ddg/manifest.json
  545. # Removing URL parameters that let DuckDuckGo know the place in UI
  546. # the search was ran from (like address bar, context menu, etc.)
  547. local jq_cmd='del(.chrome_settings_overrides.search_provider.params)'
  548. jq "${jq_cmd}" ddg/manifest.json > manifest.json.tmp
  549. ! diff manifest.json.tmp ddg/manifest.json > /dev/null
  550. mv manifest.json.tmp ddg/manifest.json
  551. # Delete unused search engine configs
  552. find -mindepth 1 -maxdepth 1 \
  553. -not -name ddg \
  554. -not -name wikipedia \
  555. -exec rm -frv {} \;
  556. popd > /dev/null
  557. ## libre patching ##
  558. # Upstream tarball can contain some ignored cruft,
  559. # including binaries (for example, python3).
  560. echo 'Removing files specified in .gitignore...'
  561. git init && git clean -dfX \
  562. --exclude='!ipc/chromium/src/third_party/libevent/evconfig-private.h' \
  563. --exclude='!toolkit/crashreporter/google-breakpad/src/third_party/lss/' \
  564. --exclude='!third_party/python/**/*.egg-info/'
  565. rm -rf .git
  566. # Remove test-related networking dumps, because they contain code from
  567. # some Amazon webpage with no clear licensing, thus nonfree.
  568. # Also they interfere with checking of Remote Settings patching done later,
  569. # because communication with RS server has been captured in them too.
  570. rm python/mozperftest/mozperftest/system/example.zip
  571. rm testing/mozbase/mozproxy/tests/files/mitm5-linux-firefox-amazon.zip
  572. # Disable/neutralize Remote Settings (as best we can)
  573. echo "applying 9001-FSDG-sync-remote-settings-with-local-dump.patch"
  574. git apply ../9001-FSDG-sync-remote-settings-with-local-dump.patch
  575. # Disable various components at the source level
  576. sed -i 's/;1/;0/' toolkit/components/telemetry/components.conf
  577. sed -Ei 's/((MOZ_SERVICES_HEALTHREPORT|MOZ_NORMANDY).+)True/\1False/' browser/moz.configure
  578. #sed -i 's/;1/;0/' browser/experiments/Experiments.manifest
  579. #sed -i '/pocket/d' browser/extensions/moz.build
  580. #sed -i '/activity-stream/d' browser/extensions/moz.build
  581. python ../process-json-files.py "${srcdir}"/firefox-${pkgver} "${brandingsrcdir}"
  582. # disable various phone-home/goelocation anti-featires
  583. echo "applying 9002-FSDG-preference-defaults.patch"
  584. patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9002-FSDG-preference-defaults.patch
  585. # over-ride/install default URI protocol handlers
  586. echo "applying 9003-FSDG-urihandlers.patch"
  587. patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9003-FSDG-urihandlers.patch
  588. # Remove remaining non-free bits
  589. echo "applying 9004-FSDG-misc.patch"
  590. patch -Np1 --no-backup-if-mismatch -i "${srcdir}"/9004-FSDG-misc.patch
  591. echo "removing remaining non-free bits"
  592. rm -v toolkit/crashreporter/tools/upload_symbols.py
  593. rm -frv third_party/rust/winapi-{i686,x86_64}-pc-windows-gnu/**/*.a
  594. ## patching sanity checks ##
  595. _check_patching
  596. }
  597. build() {
  598. cd firefox-$pkgver
  599. ## build env ##
  600. export MOZ_NOSPAM=1
  601. export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
  602. # export MOZ_ENABLE_FULL_SYMBOLS=1 # anti-feature
  603. export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system # parabola policy
  604. # LTO needs more open files
  605. ulimit -n 4096
  606. ## [ARCH-SPECIFIC BUILD ENV] ##
  607. case ${CARCH} in
  608. aarch64|armv7h)
  609. export MOZ_DEBUG_FLAGS=" "
  610. export CFLAGS+=" -g0"
  611. export CXXFLAGS+=" -g0"
  612. export LDFLAGS+=" -Wl,--no-keep-memory"
  613. export RUSTFLAGS="-Cdebuginfo=0"
  614. ;;
  615. i686)
  616. # -fno-plt with cross-LTO -> LLVM ERROR: Function Import: link error
  617. CFLAGS="${CFLAGS/-fno-plt/}"
  618. CXXFLAGS="${CXXFLAGS/-fno-plt/}"
  619. # try hard to tell ld and rust not to use too much memory (no lto, no debug info, etc.)
  620. export RUSTFLAGS+=" -Cdebuginfo=0 -Clto=off"
  621. export LDFLAGS+=" -Wl,--no-keep-memory " # -Wl,--reduce-memory-overheads -Wl,--max-cache-size=16384000 "
  622. export MOZ_SOURCE_CHANGESET="DEVEDITION_${pkgver//./_}_RELEASE"
  623. # export MOZ_MAKE_FLAGS=-j2
  624. # libvpx has some hard-coded compiler flags for MMX, SSE, SSE2, use the correct one
  625. # per CARCH (75.0 uses an intrisic _mm_empty now, which required the corresponding
  626. # architecture flag to be preset - before it was merely embedding some assembly
  627. # code with EMMS
  628. export CFLAGS+=" -mmmx"
  629. export CXXFLAGS+=" -mmmx"
  630. ;;
  631. x86_64)
  632. ;;
  633. *) echo "no [ARCH-SPECIFIC BUILD ENV] for arch: ${CARCH}" ; return 1 ;
  634. ;;
  635. esac
  636. export CFLAGS
  637. export CXXFLAGS
  638. ## [ARCH-SPECIFIC BUILD CONFIG] ##
  639. case ${CARCH} in
  640. aarch64|armv7h)
  641. ;;
  642. i686)
  643. # avoid excessive debug symbols in rust leading to out-of-memory situations
  644. sed -i "s/debug_info = '\''2'\''/debug_info = '\''0'\''/" build/moz.configure/toolchain.configure
  645. ;;
  646. x86_64)
  647. ;;
  648. *) echo "no [ARCH-SPECIFIC BUILD CONFIG] for arch: ${CARCH}" ; return 1 ;
  649. ;;
  650. esac
  651. ## PGO build ##
  652. if (( _SHOULD_SKIP_PGO ))
  653. then
  654. # skipping "3-tier PGO" "instrumented browser"; so the final .mozconfig is ready now
  655. cp ../mozconfig .mozconfig
  656. else
  657. # Do 3-tier PGO
  658. echo "Building instrumented browser..."
  659. cat >.mozconfig ../mozconfig - <<END
  660. ac_add_options --enable-profile-generate=cross
  661. END
  662. _check_build_config
  663. ./mach build
  664. echo "Profiling instrumented browser..."
  665. ./mach package
  666. LLVM_PROFDATA=llvm-profdata \
  667. JARLOG_FILE="$PWD/jarlog" \
  668. xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \
  669. ./mach python build/pgo/profileserver.py
  670. stat -c "Profile data found (%s bytes)" merged.profdata
  671. test -s merged.profdata
  672. stat -c "Jar log found (%s bytes)" jarlog
  673. test -s jarlog
  674. echo "Removing instrumented browser..."
  675. ./mach clobber
  676. echo "Building optimized browser..."
  677. cat >.mozconfig ../mozconfig - <<END
  678. ac_add_options --enable-lto=cross
  679. ac_add_options --enable-profile-use=cross
  680. ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
  681. ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog
  682. END
  683. fi # _SHOULD_SKIP_PGO
  684. ## sanity checks ##
  685. _check_build_config
  686. ## main build ##
  687. (( ! _SHOULD_SKIP_PGO )) || echo "Building optimized browser..."
  688. ./mach build
  689. # echo "Building symbol archive..." # anti-feature
  690. # ./mach buildsymbols # anti-feature
  691. }
  692. package() {
  693. export MOZBUILD_STATE_PATH="$srcdir/mozbuild" # needed for `libremakepkg -R`
  694. export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system # needed for `libremakepkg -R`
  695. cd firefox-$pkgver
  696. DESTDIR="$pkgdir" ./mach install
  697. local vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
  698. install -Dvm644 /dev/stdin "$vendorjs" <<END
  699. // Use LANG environment variable to choose locale
  700. pref("intl.locale.requested", "");
  701. // Use system-provided dictionaries
  702. pref("spellchecker.dictionary_path", "/usr/share/hunspell");
  703. // Disable default browser checking.
  704. pref("browser.shell.checkDefaultBrowser", false);
  705. // Don't disable extensions in the application directory
  706. pref("extensions.autoDisableScopes", 11);
  707. END
  708. # Parabola additions to vendor.js
  709. cat "${srcdir}"/vendor.js.in >> "${vendorjs}"
  710. local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
  711. install -Dvm644 /dev/stdin "$distini" <<END
  712. [Global]
  713. id=parabola
  714. version=(${_brandingver} branding)
  715. about=${pkgname^} for Parabola GNU/Linux-libre
  716. about.en-US=${pkgname^} for Parabola GNU/Linux-libre
  717. about.eo=${pkgname^} por Parabola GNU/Linux-libre
  718. about.es-ES=${pkgname^} para Parabola GNU/Linux-libre
  719. about.gl=${pkgname^} para Parabola GNU/Linux-libre
  720. about.pt-BR=${pkgname^} para Parabola GNU/Linux-libre
  721. [Preferences]
  722. app.distributor=parabola
  723. app.distributor.channel=$pkgname
  724. app.partner.parabola=parabola
  725. END
  726. # NOTE: browser/branding/$theme is $brandingdestdir in prepare()
  727. local i theme=$pkgname
  728. for i in 16 22 24 32 48 64 128 256; do
  729. install -Dvm644 browser/branding/$theme/default$i.png \
  730. "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
  731. done
  732. install -Dvm644 browser/branding/$theme/content/about-logo.png \
  733. "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
  734. install -Dvm644 browser/branding/$theme/content/about-logo@2x.png \
  735. "$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png"
  736. install -Dvm644 browser/branding/$theme/content/about-logo.svg \
  737. "$pkgdir/usr/share/icons/hicolor/scalable/apps/$pkgname.svg"
  738. install -Dvm644 browser/branding/$theme/content/blank.svg \
  739. "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"
  740. install -Dvm644 ../$pkgname.desktop \
  741. "$pkgdir/usr/share/applications/$pkgname.desktop"
  742. # Install a wrapper to avoid confusion about binary path
  743. install -Dvm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
  744. #!/bin/sh
  745. exec /usr/lib/$pkgname/$pkgname "\$@"
  746. END
  747. ## [ARCH-SPECIFIC INSTALL] ##
  748. case ${CARCH} in
  749. aarch64|armv7h)
  750. ;;
  751. i686)
  752. # libxul.so cannot find it's libraries
  753. install -dm 755 "${pkgdir}/etc/ld.so.conf.d"
  754. echo "/usr/lib/${pkgname}" > "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf
  755. ;;
  756. x86_64)
  757. ;;
  758. *) echo "no [ARCH-SPECIFIC INSTALL] for arch: ${CARCH}" ; return 1 ;
  759. ;;
  760. esac
  761. # Replace duplicate binary with wrapper
  762. # https://bugzilla.mozilla.org/show_bug.cgi?id=658850
  763. ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/$pkgname-bin"
  764. # Use system certificates
  765. local nssckbi="$pkgdir/usr/lib/$pkgname/libnssckbi.so"
  766. if [[ -e $nssckbi ]]; then
  767. ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi"
  768. fi
  769. # export SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE="$startdir/.crash-stats-api.token" # anti-feature
  770. # if [[ -f $SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE ]]; then # anti-feature
  771. # make -C obj uploadsymbols # anti-feature
  772. # else # anti-feature
  773. # cp -fvt "$startdir" obj/dist/*crashreporter-symbols-full.tar.zst # anti-feature
  774. # fi
  775. }