summaryrefslogtreecommitdiff
path: root/gnu/packages/gnuzilla.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/gnuzilla.scm')
-rw-r--r--gnu/packages/gnuzilla.scm1150
1 files changed, 675 insertions, 475 deletions
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 13de000920..259f9a6fc6 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -17,7 +17,7 @@
;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021-2023, 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
;;; Copyright © 2022 SeerLite <seerlite@disroot.org>
;;; Copyright © 2024 Aleksandr Vityazev <avityazew@gmail.com>
@@ -41,6 +41,8 @@
#:use-module ((srfi srfi-1) #:hide (zip))
#:use-module (ice-9 format)
#:use-module (ice-9 match)
+ #:autoload (ice-9 pretty-print) (pretty-print)
+ #:autoload (ice-9 textual-ports) (get-string-all)
#:use-module (gnu packages)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
@@ -74,6 +76,7 @@
#:use-module (gnu packages linux)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python-web)
#:use-module (gnu packages compression)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages fonts)
@@ -100,12 +103,12 @@
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages readline)
#:use-module (gnu packages sqlite)
- #:autoload (json parser) (json->scm))
+ #:use-module (gnu packages time))
(define-public mozjs
(package
(name "mozjs")
- (version "128.3.1")
+ (version "140.3.0")
(source (origin
(method url-fetch)
;; TODO: Switch to IceCat source once available on ftp.gnu.org.
@@ -114,7 +117,7 @@
version "esr.source.tar.xz"))
(sha256
(base32
- "1a3h7p7126pxzpidb1lqckvhfh1had805mai4l96mnc878phbx61"))))
+ "05i3czn3v2qnhir8apcphbqy7rmy1dn7kcwx5yyi2qvmjcyfpipg"))))
(build-system gnu-build-system)
(arguments
(list
@@ -136,6 +139,7 @@
"--enable-optimize"
"--enable-release"
"--enable-readline"
+ "--enable-rust-simd"
"--enable-shared-js"
"--with-system-icu"
"--with-system-nspr"
@@ -187,6 +191,136 @@
((".*killed process should not have exitStatus.*")
""))
+ ;; Most of the timezone related failures are probably
+ ;; attributable to our use of a system-provided icu4c library
+ ;; instead of the bundled one.
+ (for-each
+ delete-file
+ '( ;; FIXME: An one-hour difference is produced after DST
+ ;; starting in the timezone the test suite uses.
+ "non262/Date/15.9.5.7.js"
+
+ ;; The test suite expects a lightly patched ICU. Disable tests
+ ;; that do not work with the system version. See
+ ;; "intl/icu-patches" for clues.
+
+ ;; See <https://unicode-org.atlassian.net/browse/ICU-20992> and
+ ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1636984> and
+ ;; related patch for why this is failing.
+ "non262/Intl/DateTimeFormat/fractional-second-digits-append-item.js"
+ ;; FIXME: got "0 \u251CAM/PM: noon\u2524", expected "0 (AM/PM: noon)"
+ "non262/Intl/DateTimeFormat/day-period-hour-cycle.js"
+ ;; FIXME: got "en-US-posix", expected "en-US-POSIX".
+ "non262/Intl/available-locales-supported.js"
+ ;; FIXME: got "en-US", expected "en-US-POSIX"
+ "non262/Intl/available-locales-resolved.js"
+
+;;; Since 115:
+ ;; Mismatching array lengths
+ "non262/Intl/supportedValuesOf-timeZones-canonical.js"
+ ;; TODO: tzdata 2024a expected – find a way to regenerate
+ ;; these generated tests
+ "non262/Intl/DateTimeFormat/timeZone_version.js"
+
+ ;; FIXME: got "\uD840\uDDF2", expected "\u5047"
+ "non262/Intl/Collator/implicithan.js"
+ ;; FIXME: got "\uD840\uDDF2", expected "\u3467"
+ "non262/Intl/Collator/big5han-gb2312han.js"
+
+ ;; Since 128:
+ ;; FIXME: got (void 0), expected "GMT"
+ "non262/Intl/DateTimeFormat/formatRange-timeZoneName-matches-format.js"
+ ;; FIXME: got 7, expected 9: parts count mismatch
+ "non262/Intl/DateTimeFormat/formatRange-timeZone-offset.js"
+ "non262/Intl/DateTimeFormat/formatRange-timeZoneName.js"
+
+ ;; Since 140:
+ ;; RangeError: invalid time zone: America/Coyhaique
+ "non262/Temporal/ZonedDateTime/zones-and-links.js"
+ ;; got 2042, expected 2043
+ "non262/Temporal/Intl/consistent-dates.js"
+ ;; got "Pacific/Auckland", expected "Antarctica/McMurdo"
+ "non262/Intl/DateTimeFormat/timeZone_links.js"
+ "test262/staging/sm/Temporal/ZonedDateTime/zones-and-links.js"
+ ;; Test262Error: Expected true but got false
+ "test262/staging/Intl402/Temporal/old/zoneddatetime-dst-corner-cases.js"
+ ;; Test262Error: getTimeZoneTransition(next) does not return its input
+ "test262/intl402/Temporal/ZonedDateTime/prototype/\
+getTimeZoneTransition/result-type.js"
+ ;; Expected SameValue («1912-01-01T00:16:08+00:00[Africa/Abidjan]», «null»
+ "test262/intl402/Temporal/ZonedDateTime/prototype/\
+getTimeZoneTransition/transition-at-instant-boundaries.js"
+ ;; Expected SameValue(«1762063200000000000n», «1572760800000000000n»
+ "test262/intl402/Temporal/ZonedDateTime/prototype/\
+getTimeZoneTransition/specific-tzdb-values.js"
+ ;; Expected SameValue(«"2025-03-30T03:00:00+02:00[Europe/Berlin]"»,
+ ;; «"2020-10-25T02:00:00+01:00[Europe/Berlin]"»
+ "test262/intl402/Temporal/ZonedDateTime/prototype/\
+getTimeZoneTransition/nanoseconds-subtracted-or-added-at-dst-transition.js"
+ ;; TypeError: can't access property "epochNanoseconds",
+ ;; before.getTimeZoneTransition(...) is null
+ "test262/intl402/Temporal/ZonedDateTime/prototype/\
+getTimeZoneTransition/transitions-close-together.js")))))
+ (add-before 'check 'pre-check
+ (lambda _
+ (setenv "JSTESTS_EXTRA_ARGS"
+ (string-join
+ (list
+ ;; Do not run tests marked as "random".
+ "--exclude-random"
+ ;; Exclude web platform tests.
+ "--wpt=disabled"
+ ;; Respect the daemons configured number of jobs.
+ (string-append "--worker-count="
+ (number->string (parallel-job-count)))))))))))
+ (native-inputs
+ (list autoconf
+ llvm ;for llvm-objdump
+ m4
+ perl
+ pkg-config
+ python-wrapper
+ rust
+ `(,rust "cargo")
+ rust-cbindgen))
+ (inputs
+ (list icu4c-77 readline zlib))
+ (propagated-inputs
+ (list nspr)) ; in the Requires.private field of mozjs-*.pc
+ (home-page
+ "https://spidermonkey.dev/")
+ (synopsis "Mozilla JavaScript engine")
+ (description "SpiderMonkey is Mozilla's JavaScript engine written
+in C/C++.")
+ (license license:mpl2.0))) ; and others for some files
+
+(define-public mozjs-128
+ (package
+ (inherit mozjs)
+ (version "128.3.1")
+ (source (origin
+ (method url-fetch)
+ ;; TODO: Switch to IceCat source once available on ftp.gnu.org.
+ (uri (string-append "https://ftp.mozilla.org/pub/firefox"
+ "/releases/" version "esr/source/firefox-"
+ version "esr.source.tar.xz"))
+ (sha256
+ (base32
+ "1a3h7p7126pxzpidb1lqckvhfh1had805mai4l96mnc878phbx61"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments mozjs)
+ ((#:configure-flags flags)
+ #~(delete "--enable-rust-simd" #$flags))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'adjust-tests
+ (lambda _
+ (with-directory-excursion "../js/src/tests"
+ (substitute* "shell/os.js"
+ ;; FIXME: Why does the killed process have an exit status?
+ ((".*killed process should not have exitStatus.*")
+ ""))
+
;; This was fixed sometime between 102.15.1 and 115.11.0.
;; These tests are supposed to be skipped on all 64-bit systems.
#$@(if (target-riscv64?)
@@ -235,39 +369,9 @@ fractional-second-digits-append-item.js")
(delete-file "non262/Intl/DateTimeFormat/formatRange-timeZoneName-matches-format.js")
;; FIXME: got 7, expected 9: parts count mismatch
(delete-file "non262/Intl/DateTimeFormat/formatRange-timeZone-offset.js")
- (delete-file "non262/Intl/DateTimeFormat/formatRange-timeZoneName.js"))))
- (add-before 'check 'pre-check
- (lambda _
- (setenv "JSTESTS_EXTRA_ARGS"
- (string-join
- (list
- ;; Do not run tests marked as "random".
- "--exclude-random"
- ;; Exclude web platform tests.
- "--wpt=disabled"
- ;; Respect the daemons configured number of jobs.
- (string-append "--worker-count="
- (number->string (parallel-job-count)))))))))))
- (native-inputs
- (list autoconf
- llvm ;for llvm-objdump
- m4
- perl
- pkg-config
- python-wrapper
- rust
- `(,rust "cargo")
- rust-cbindgen))
+ (delete-file "non262/Intl/DateTimeFormat/formatRange-timeZoneName.js"))))))))
(inputs
- (list icu4c readline zlib))
- (propagated-inputs
- (list nspr)) ; in the Requires.private field of mozjs-*.pc
- (home-page
- "https://spidermonkey.dev/")
- (synopsis "Mozilla JavaScript engine")
- (description "SpiderMonkey is Mozilla's JavaScript engine written
-in C/C++.")
- (license license:mpl2.0))) ; and others for some files
+ (list icu4c-73 readline zlib))))
(define-public mozjs-115
(package
@@ -283,6 +387,8 @@ in C/C++.")
"0xvwk3vkbxnybpi3gwk48nxffg44lbv58mbk2xq6cz50ffq0k5k2"))))
(arguments
(substitute-keyword-arguments (package-arguments mozjs)
+ ((#:configure-flags flags)
+ #~(delete "--enable-rust-simd" #$flags))
((#:phases phases)
#~(modify-phases #$phases
(replace 'adjust-tests
@@ -348,330 +454,14 @@ fractional-second-digits-append-item.js")
(inputs
(list icu4c-73 readline zlib))))
-
-;;;
-;;; Localization helper procedures.
-;;;
-(define mozilla-115-compare-locales
- (origin
- (method hg-fetch)
- (uri (hg-reference
- (url "https://hg.mozilla.org/l10n/compare-locales/")
- (changeset "RELEASE_8_1_0")))
- (file-name "mozilla-compare-locales")
- (sha256 (base32 "00bpkaqf2ng1nn9ajyb5mli0jq58q5fm2n3yy90jy0hp4q2gbs50"))))
-
-(define (mozilla-115-locale locale changeset hash-string)
- (origin
- (method hg-fetch)
- (uri (hg-reference
- (url (string-append "https://hg.mozilla.org/l10n-central/"
- locale))
- (changeset changeset)))
- (file-name (string-append "mozilla-locale-" locale))
- (sha256 (base32 hash-string))))
-
-(define-syntax-rule (mozilla-115-locales (hash-string changeset locale) ...)
- (list (mozilla-115-locale locale changeset hash-string)
- ...))
-
-(define (update-mozilla-115-locales changesets.json)
- "Output a new list of Mozilla locales, to update the ALL-MOZILLA-115-LOCALES
-variable defined below. It requires guile-json to be installed."
- (match (call-with-input-file changesets.json json->scm)
- (((lang ("revision" . revision) platforms pin) ...)
- (let ((data (reverse (map (lambda (rev lang)
- `(,(list->string (make-list 40 #\0))
- ,(string-take rev 12) ,lang))
- revision lang))))
- (format #t "~{~s~%~}" data)
- data))))
-
-(define-public all-mozilla-115-locales
- (mozilla-115-locales
- ;; sha256 changeset locale
- ;;---------------------------------------------------------------------------
- ("152dc3nxbsjhawq8wm040hbnhq96l039j3k8ll4q93qm93msj507" "de9eb6a1e3e0" "ach")
- ("0rfbzyv87x5d4qspjaiwsvqcf57g0d93daibj4rc4xsq3g2gw45v" "45b72420bf17" "af")
- ("13lfl3nq0nr3zvh1zddpnyk8x054784yz08nkprmqhzyvfv3i5wq" "babed417b5e8" "an")
- ("07fjh9wvl9jgvyqbvsd7l4pq895y4sv725fd8fr274s6l4x7pzz0" "7df35a519b47" "ar")
- ("04zmfr15a3zhalj66ydpcrh3nxk1q7wb2gckfqsq55q72i3hvkcy" "fd0068a8989f" "ast")
- ("1x2hnsa1nfmysd7w53ly14bp8hk1vbgfj1016wapcshvf1kap3mr" "4df6d5edc74d" "az")
- ("1synmbnng6ai8gmz8srxdgf3qgadjvymb66inp3g2lww0c98c4qn" "97829729f043" "be")
- ("1zank8f4145v4fv28y47ssknn55zrpyll3kxhha2h54za4zkn4p1" "4f568ae49cf3" "bg")
- ("00wdllmdmzg11x6dcj3f2i047y3bgab1qw2zjaa92i36d5nd2hdr" "a634f8559ffd" "bn")
- ("0b5f50ar7zj2z1jjvhv8841rabx5a2ylcl0rma3qiz5i6r41lgli" "4ca046b16e37" "br")
- ("1g1qh8b496psq9yknjzi7drzqzhd5g50xl5qiwd6pr61xyqfvnkx" "690960700526" "bs")
- ("1wd463lfhdybx0nz0dqvhrsi7f9xl5qd7mvshpgqxlj5x1nhamzy" "58714a456fd6" "ca")
- ("1s9ls2fh9xfgb8q9vay5lkszfhh0k99lrp28m3fi83b5vv8qj8fq" "12760eef74bc" "cak")
- ("0abwslv88hda2wfsnkyi7si9v16923gf4xfbq3h0a6mpxf1mylhs" "703352c2a9b4" "ca-valencia")
- ("05pfacr2kk0sxrpw3s15c8rvchkzxgvsy1njp5q72b270sw98i7h" "6a7eef3982fb" "cs")
- ("0cidwylb4s7n1hdw4yjqj89bl2qsscf3b1vnfl7hsxf68lj2lzaj" "9c30e4ec1dde" "cy")
- ("10d7mn2qq0nvw3073ga4garwnvpk5xqkgn3dgw1az2g5pncclhfk" "668cf42570ef" "da")
- ("0nfb3nf47gavafb35mm4ghl82kpylyj0r1vqc47nz151mjj2mnli" "c968a5118cda" "de")
- ("1qjf12aymz1x281chv7sqyarbz6f8w7nxsli3b4srsar12l5f0lb" "27dd7f4a3f3f" "dsb")
- ("040165lwplyj0cv9ccagdjwigy527rli3qda6b633bqrpx6310sw" "920e28aa6758" "el")
- ("1h5zk58rmrqnbfhxyiwcn0385v6r5ayfkblpwqkji80p135n74sa" "b0e55a5a6413" "en-CA")
- ("1w5q4b1a9ysgc76dg45cr2q55y4djdcrj2qzs0imq61sjrvih2fv" "9aae743f32df" "en-GB")
- ("0mxsp5ipg36jdpphwrdra877z9vz1ifbhas988awhc3i9byx7zbh" "3c825be76f39" "eo")
- ("1nxscjmk80wh359lv4cxgh1y85f8qw522dppy292pkqnqnsrfnq1" "ffac56bd3aef" "es-AR")
- ("02353n524fy5icp2myjn198n511lzb03hcd4a61bgd7f26cpkhy5" "77e209bb2114" "es-CL")
- ("1863d4zy2745hfw2kgw5z0625znvzkqwlwbvcj8cw6nv3r6dxgdv" "215ced58e499" "es-ES")
- ("0asrcxvig4i75r4kpkmcfsc1kzjl8cbaz11an5kny2slcy63av7i" "d748a2a91643" "es-MX")
- ("1p40zmf29mq81blssjh6gs8fih925mia3l1gya9vzgyp5i4dvln6" "66edf9863a04" "et")
- ("1hr4q01856j8jmjia39586mxfbv5ijkq7i6cyxz1r422gqivv13v" "752b6aa2225e" "eu")
- ("0d6vgd6anz237ckgc3a30nzdxa98fw33rc1r2wkr4y3yfvd2bidc" "4a57be1cf783" "fa")
- ("1kjb8k55vkgn7fpzgvayahzx7cbx7vryyv89kynp2lv052smhh01" "e42c0149059c" "ff")
- ("0d392s3fh1cl491b72cxlj7la6in84mfxbcn862f0sr63iz0q7wn" "0a2a3e96367c" "fi")
- ("10rvxinl9as9wdd9yrhsskjwsklzxd35j4b1ygr4jlvslcrmdhpn" "119b009eba98" "fr")
- ("1x0bfp7gaplnwcmfvv8c87znxp9fxsa99nl88j87qxn45h9kz8q6" "475065215d5c" "fur")
- ("0p20jlm8vxlzixm446wcqjs5sz7m9x7v4zgqczvriwyspad7d8xp" "6909c0c42a2e" "fy-NL")
- ("1rh8mvlamawzdfis0ah8rgnjk30mzpxhgh1yx8rxppps7l5n2hpj" "2f350c9ba505" "ga-IE")
- ("1n2dxvv0q77azg2cz4nasq47pbsh1l6fngphy3lzz1wj4x3s8z7g" "3fe4a6bcac31" "gd")
- ("15x51q3lsr67lklci13cqlxmgjyk8px12qc3qfrfdv2dk68znwmq" "0482da4a3d5b" "gl")
- ("1zx7a0l781hyi9k6bi0m9ghgzcb116cqy88q7bf9sm0gar85yxwi" "bb255fc733c3" "gn")
- ("1p6ycyjp7qsv1fk19yca5bwvyg72y3v87fr3wmhq7xzmdz6994fm" "dd3707daa411" "gu-IN")
- ("02r68v2yhxxdfms9l2yq8pk7rarg1ysv67mbny04gaws6k5fv3an" "c247293030ae" "he")
- ("116s9qgcwb0j1mzwy5napq5ww9cs5hcj41xiq2k6kz4gjxw4jazl" "e9c1a1fe1b79" "hi-IN")
- ("1kg7xiw75ks490kiay2gndlc2akkg4bxdx4q7ysaxf6kpgisakxg" "068c00ca7cae" "hr")
- ("1xjqvqn65nyb0dlchy3bikpf0g3qjba7i5g68jcicz0hcyrfagvd" "5fd424d1061b" "hsb")
- ("1j81cv599h3iv26yzzdf8m5vkdw9kdhrlls8c6zd3fslpd91yn5q" "0ef89daff942" "hu")
- ("0wwjyjpqcxvjsw7md6sz2zxncay3wk066qiv4p2vpqv5sw9z1sdh" "771fd65bc781" "hy-AM")
- ("0pxjvzkkhls3d28c1656y3fc78snhc90f0mj5jx9rhh7l6hg0801" "6cfa8fc01f2a" "ia")
- ("1xh93qkj7y4ad10sqyldr9hymsbffnq7kya0smvci1nwmnndd8bk" "ae863f3cd230" "id")
- ("1npyaz5zyk6yr8z8sj2gbd0ahynglxmalw27rcdb57h81n0520y7" "d465499a6600" "is")
- ("14hhl050vzbrwwppvpyicqfcqazpvyaygnr8hgrz0jgyb30lfvhw" "a8ac50410815" "it")
- ("1jz9i0x22qig74gwrrrvnwc7s50h1x18sl797lr678xiw4f6p0ar" "13abbdd8abdf" "ja")
- ("04k53mnskapqv968gphpmzhxbg1m0jxbzf24z9g0lgspnhcgwpx9" "1f388ad7f0e9" "ja-JP-mac")
- ("1n9ayc6l72fy08zdqpwag54rh6j5aagj7y7976gyvjl1ssz745fs" "ed774dd2eff3" "ka")
- ("09bw4sk8g7bmx9xxxiy8y9p8zhf3h3gvaddlx86zdk12k44iqmnc" "c9cfab9734b4" "kab")
- ("0lmwsq72vk424nlrgnq46apdbgivzrmx303rvng8h03wrp9qjz1m" "4797db4a0fcb" "kk")
- ("0al453bmiq85kkkfaba11iwnx0dy9f3dl9hlz0j38ysgcipwap5l" "f312da458d8b" "km")
- ("1rjf875nwcqnlbfgk92vpa8msy3vp2xcgfasj7kksr37rxcbwa8m" "a30ac878de56" "kn")
- ("0v5a1v0a6xziwhspfqpdccl00h0b4j4k4vwmmijld44cdmj208v9" "6f5e9c8eb029" "ko")
- ("0kx0hz0dp9bdgf0r0m9qsip2ybrc4dwmry3kp488z2pig0asai7x" "dcdf4bf4482b" "lij")
- ("1iawv3hbl0wab1xzhhihxiqsz2i6icf64ipmjrpm9srlg6kaxgg5" "913770b70ead" "lt")
- ("15ppml5b0f78ycdswff0yqr27d649fr2rggv5dnxqxxm2bx5hzw6" "6351f7efe4d7" "lv")
- ("0crbysr0raqh90ayb5rq73d3cddfryfaj4bdbzijk2j2rpdlwv1m" "6acffb2c66ee" "mk")
- ("0b5dw5a904w5ibd7yz1839a0cv2hmnlv2bz0kpsr6xf52jv20g6a" "942eca4c76b6" "mr")
- ("0fr83kiq7xmw1kyrjrmm3iirlfcp94dyacdkkj9df6gr5qp6wn7i" "de00ab4bb6fe" "ms")
- ("011y1yyl97avjawja3gmwwa74kxcvm2g2wn47yv01xqy74wbbss7" "2ce7138cd126" "my")
- ("0f6ffh76g31df9kfj6azip2qy0b14s287isgm7sxnclch4jwq83s" "5cc51d238790" "nb-NO")
- ("193nw6l0z7vlcd7flb72bc8h7vd9vjj8xlz5lhf7irmfr2bldj0r" "db205a4fd15a" "ne-NP")
- ("14qizkrcs1avd78ci4i4hr7v3bz3m51if1jc5wxydkx9n0yb8cgn" "1abc02acab91" "nl")
- ("1cjglsaf8ynm4wgzpbcf68gj8jhvnzldrnjlni4c4vvl0bfxnxa2" "b4ff1a7885c2" "nn-NO")
- ("0jpdq7zpqs3gnyzz1xvccvjqbzwga35sj85z52vprm6zcxd8gm0m" "1c7d5471dba9" "oc")
- ("14apl3vhxkqcy8l5a0ny71f9dkmbb5fakvkpngqv5xgbbl0byfk3" "cf3fd8eb605b" "pa-IN")
- ("1aglsx0w3xgbn1dhdbzwcqn8sdkp4bncl5bj7nlick56rbkicj9j" "3c9c3c67830a" "pl")
- ("10hqfd0fjbcbgdsj0jxdfvm9abiya05lw2bpy0cz6h61mgjywqiz" "68bf2b7c6f25" "pt-BR")
- ("1vvs0kkvnnnsxn1d5fnma55fizzs1bbx5sv5k2w4164k6h7fhxfv" "fae18b48519f" "pt-PT")
- ("0c8dl12n5fjdd3bjaf8idyaxsf8ppbma132vdw8bk2wqnh4cv69a" "92110fd6e211" "rm")
- ("0mxxy56kj0k5jhjxjv8v4zz57pha819mz7j803lcilax7w52wgca" "5eeba1f64743" "ro")
- ("0jrd95n108r4sxdwgy39zjynm5nlzzmiijsfpxxfwj7886wl4faz" "47131134e349" "ru")
- ("1lwm5jv3hvjp84a70186x2083nhr3mfcl7kpmw5in9amaflfi41b" "a5cd6d3d67ee" "sat")
- ("1q6pn3iixzcas9blf61bhvwgppbsh0am0wdz6a6p9f9978894d73" "880b7986692a" "sc")
- ("0xndsph4v725q3xcpmxxjb9vxv19sssqnng82m9215cdsv9klgpb" "bf5f6e362f6f" "sco")
- ("0l70n8817mbmbc09fsnn2aqjj9k9dhad2gmzgphmiilf9mqm2dpf" "1f705c926a99" "si")
- ("19bqjazazww08chd1qc08dsnr2521088jq5jd4j3185yb1ypm3nr" "c1bd10d70325" "sk")
- ("12q1nv6z4bk8yaw3vhl9xs41i7kpx1415mwg635v76fx8h94ycl3" "00eaf8d9e83b" "skr")
- ("11nmjmy2j249588ahg4mh9lxdqr476jbh28a07qxxibfa76j9vk3" "44be3cbf69b6" "sl")
- ("1ww35141nixg2s03kfmmq9fk6m3qiz2vg7p5a85shjp7i89pyj1d" "800576ff8ef9" "son")
- ("1q7nfybwc8mxdwi9fpvfhayq18mykzygkpakr5ngfz2316k8lf5r" "4de8638ac27f" "sq")
- ("06wr7zx6kvaxsly5f3ci7kb2zaqlwjjbg1vrimp0jcqs4l5x6wpl" "ec560d96370c" "sr")
- ("01n1ly9lihnznrab3kcby2i93k0qwg99c9fh55xpi90vkyq77gmq" "c5754f9325a1" "sv-SE")
- ("09kk9bj2139j34md26zysaaf8cqyh5nmf861vxnc2vdsd37nr4x4" "c3fa195a8edf" "szl")
- ("1vpr88vj9n7pm87dynyqyyiv1v2igd3w0f3a65g8rirknh3wfw44" "755763981e95" "ta")
- ("19qwvi642fpg7zyhlcj9fgnm0bbkvqby6apr7iijayammg2vnyx3" "3a34078388af" "te")
- ("1lh3m1d8rblas50g990qwcr2qv2nk5m6isjvi0gr57zhc4l9a4lw" "24c3a61f463c" "tg")
- ("0sr0wa886a5gwrgn7rmn08sn6qz4p58037wx9gskacclhrzs53aw" "6dad5f8774df" "th")
- ("19cvf42lmi9996mxlmplpk1b65p1fh4ja36xprs115z2n1iky9y5" "befaa7917b35" "tl")
- ("04p50pd380hdalizz09qix7camipazkjyyi97f3sl04h6i67vz17" "66c8bc5e9da6" "tr")
- ("0lqbaxkdvi8hjns8myssmv6bxymh53glf0w2nfpj72zh40rr1n09" "9e86caeded11" "trs")
- ("13qmsji7gyad0d23ac7lx4181zhm3kb9xym82z786f7k271jq7kl" "bd5e0aad5f0b" "uk")
- ("0m52xl2vy0paj5kcfk8jy70hhck5bgdg8lb6cvjqm2mhl5sli0ka" "040d506ed663" "ur")
- ("1n0gdgjwwwd5yd69ylr05hskjxasydnkqw33rncpx7491x3nf4kf" "7e4e5290c700" "uz")
- ("140lnl9dq82azlw1qic386h4z0xbilcf3jvjy93qid67mvnmwqqm" "b8196f646583" "vi")
- ("07yc91645aiks3fxzx16kw4kzvksyrj36n9iz59wn9wppzlampx6" "ef98e07b4b9e" "xh")
- ("1c1sfaincridbdp66bzgwgxgp5gqpvzkf10m9yafm9bgkif18vwy" "f614d8a31562" "zh-CN")
- ("0s9chi76476gznrxjcn6slhgsznjnaps0h29kck6ijb0x3yx98xi" "ab22459ceb2f" "zh-TW")))
-
(define computed-origin-method (@@ (guix packages) computed-origin-method))
-(define %icecat-115-base-version "115.24.0")
-(define %icecat-115-version (string-append %icecat-115-base-version "-guix1"))
-(define %icecat-115-build-id "20250527000000") ;must be of the form YYYYMMDDhhmmss
-
-(define icecat-115-source
- (let* ((major-version (first (string-split %icecat-115-base-version #\.)))
- (minor-version (second (string-split %icecat-115-base-version #\.)))
- (sub-version (third (string-split %icecat-115-base-version #\.)))
-
- (upstream-firefox-version (string-append %icecat-115-base-version "esr"))
- (upstream-firefox-source
- (origin
- (method url-fetch)
- (uri (string-append
- "https://ftp.mozilla.org/pub/firefox/releases/"
- upstream-firefox-version "/source/"
- "firefox-" upstream-firefox-version ".source.tar.xz"))
- (sha256
- (base32
- "00229s39xidjzf7afpkyai9jz6ffqqcghn2wniraxyqa2rc5mfc1"))))
-
- ;; The upstream-icecat-base-version may be older than the
- ;; %icecat-base-version.
- (upstream-icecat-base-version "115.24.0")
- (gnuzilla-commit "b1da0f01591182b43e179451ce2484d0fee88dd8")
- (gnuzilla-source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "git://git.savannah.gnu.org/gnuzilla.git")
- (commit gnuzilla-commit)))
- (file-name (git-file-name "gnuzilla"
- ;;upstream-icecat-base-version
- (string-take gnuzilla-commit 8)))
- (sha256
- (base32
- "1nrswd5g75wq8z997dilh2mxd0ssjrp1kp7v7l6x2gqmfiwa8r7h"))))
-
- ;; 'search-patch' returns either a valid file name or #f, so wrap it
- ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
- (makeicecat-patch
- (local-file (assume-valid-file-name
- (search-patch "icecat-makeicecat.patch")))))
-
- (origin
- (method computed-origin-method)
- (file-name (string-append "icecat-" %icecat-115-version ".tar.xz"))
- (sha256 #f)
- (uri
- (delay
- (with-imported-modules '((guix build utils))
- #~(begin
- (use-modules (guix build utils))
- (let ((firefox-dir
- (string-append "firefox-" #$%icecat-115-base-version))
- (icecat-dir
- (string-append "icecat-" #$%icecat-115-version)))
-
- (set-path-environment-variable
- "PATH" '("bin")
- (list #+python
- #+(canonical-package bash)
- #+(canonical-package coreutils)
- #+(canonical-package findutils)
- #+(canonical-package patch)
- #+(canonical-package xz)
- #+(canonical-package sed)
- #+(canonical-package grep)
- #+(canonical-package bzip2)
- #+(canonical-package gzip)
- #+(canonical-package tar)))
-
- (set-path-environment-variable
- "PYTHONPATH"
- (list #+(format #f "lib/python~a/site-packages"
- (version-major+minor
- (package-version python))))
- '#+(cons python-jsonschema
- (map second
- (package-transitive-propagated-inputs
- python-jsonschema))))
-
- ;; We copy the gnuzilla source directory because it is
- ;; read-only in 'gnuzilla-source', and the makeicecat script
- ;; uses "cp -a" to copy parts of it and assumes that the
- ;; copies will be writable.
- (copy-recursively #+gnuzilla-source "/tmp/gnuzilla"
- #:log (%make-void-port "w"))
-
- (with-directory-excursion "/tmp/gnuzilla"
- (make-file-writable "makeicecat")
- (invoke "patch" "--force" "--no-backup-if-mismatch"
- "-p1" "--input" #+makeicecat-patch)
- (patch-shebang "makeicecat")
- (substitute* "makeicecat"
- (("^readonly FFMAJOR=(.*)" all ffmajor)
- (unless (string=? #$major-version
- (string-trim-both ffmajor))
- ;; The makeicecat script cannot be expected to work
- ;; properly on a different version of Firefox, even if
- ;; no errors occur during execution.
- (error "makeicecat major version mismatch"))
- (string-append "readonly FFMAJOR=" #$major-version "\n"))
- (("^readonly FFMINOR=.*")
- (string-append "readonly FFMINOR=" #$minor-version "\n"))
- (("^readonly FFSUB=.*")
- (string-append "readonly FFSUB=" #$sub-version "\n"))
- (("^readonly DATADIR=.*")
- "readonly DATADIR=/tmp/gnuzilla/data\n")
- (("^readonly SOURCEDIR=.*")
- (string-append "readonly SOURCEDIR=" icecat-dir "\n"))
- (("/bin/sed")
- #+(file-append (canonical-package sed) "/bin/sed"))))
-
- (format #t "Unpacking upstream firefox tarball...~%")
- (force-output)
- (invoke "tar" "xf" #+upstream-firefox-source)
- (rename-file firefox-dir icecat-dir)
-
- (with-directory-excursion icecat-dir
- (format #t "Populating l10n directory...~%")
- (force-output)
- (mkdir "l10n")
- (with-directory-excursion "l10n"
- (for-each
- (lambda (locale-dir)
- (let ((locale
- (string-drop (basename locale-dir)
- (+ 32 ; length of hash
- (string-length "-mozilla-locale-")))))
- (format #t " ~a~%" locale)
- (force-output)
- (copy-recursively locale-dir locale
- #:log (%make-void-port "w"))
- (for-each make-file-writable (find-files locale))
- (with-directory-excursion locale
- (when (file-exists? ".hgtags")
- (delete-file ".hgtags"))
- (mkdir-p "browser/chrome/browser/preferences")
- (call-with-output-file
- "browser/chrome/browser/preferences/advanced-scripts.dtd"
- (lambda (port) #f)))))
- '#+all-mozilla-115-locales)
- (copy-recursively #+mozilla-115-compare-locales
- "compare-locales"
- #:log (%make-void-port "w"))
- (delete-file "compare-locales/.gitignore")
- (delete-file "compare-locales/.hgignore")
- (delete-file "compare-locales/.hgtags")))
-
- (format #t "Running makeicecat script...~%")
- (force-output)
- (invoke "bash" "/tmp/gnuzilla/makeicecat")
-
- (format #t "Packing IceCat source tarball...~%")
- (force-output)
- (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
- (invoke "tar" "cfa" #$output
- ;; Avoid non-determinism in the archive. We set the
- ;; mtime of files in the archive to early 1980 because
- ;; the build process fails if the mtime of source
- ;; files is pre-1980, due to the creation of zip
- ;; archives.
- "--mtime=@315619200" ; 1980-01-02 UTC
- "--owner=root:0"
- "--group=root:0"
- "--sort=name"
- icecat-dir)))))))))
-
(define mozilla-compare-locales
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/mozilla/compare-locales")
- (commit "RELEASE_9_0_4")))
+ (commit "RELEASE_9_0_4"))) ;use the latest release
(file-name "mozilla-compare-locales")
(sha256 (base32 "13qn983j0pgs2550fgd5gvnl4lq6ywqjvgbyx850jwg79w8b0ifz"))))
@@ -679,25 +469,143 @@ variable defined below. It requires guile-json to be installed."
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/mozilla-l10n/firefox-l10n")
- (commit "fcd0300e8478d1ec4d1c097a073ddb8e1e0351e3")))
+ (url "https://github.com/mozilla-l10n/firefox-l10n")
+ ;; Use the revision specified in the
+ ;; browser/locales/l10n-changesets.json file of the used firefox
+ ;; source (all the languages normally use the same revision).
+ (commit "64046fdc97c1b1886a479dead61e6dc5428ae6e6")))
(file-name "mozilla-l10n")
- (sha256 (base32 "1pzw65852ix6a6qb3wwhg5vrkz8337cs6lznk2vj0md5cvf2rrc4"))))
+ (sha256 (base32 "1rvk1m8bjnk9x61663s7bhgax6ig37v9m1d64g89fk1qwsk3djhh"))))
+(define (format-locales all-locales-file)
+ "Format a Scheme list of all the locales string found in ALL-LOCALES-FILE.
+In the case of Thunderbird, that file is comm/mail/locales/all-locales, while
+in the case of Firefox, it is browser/locales/all-locales."
+ (pretty-print (string-split
+ (string-trim-right
+ (call-with-input-file all-locales-file
+ get-string-all))
+ #\newline)))
+
+;;; To regenerate, use the above `format-locales' procedure.
(define %icecat-locales
- '("ach" "af" "an" "ar" "ast" "az" "be" "bg" "bn" "br" "bs" "ca" "cak"
- "ca-valencia" "cs" "cy" "da" "de" "dsb" "el" "en-CA" "en-GB" "eo"
- "es-AR" "es-CL" "es-ES" "es-MX" "et" "eu" "fa" "ff" "fi" "fr" "fur"
- "fy-NL" "ga-IE" "gd" "gl" "gn" "gu-IN" "he" "hi-IN" "hr" "hsb" "hu"
- "hy-AM" "ia" "id" "is" "it" "ja" "ja-JP-mac" "ka" "kab" "kk" "km"
- "kn" "ko" "lij" "lt" "lv" "mk" "mr" "ms" "my" "nb-NO" "ne-NP" "nl"
- "nn-NO" "oc" "pa-IN" "pl" "pt-BR" "pt-PT" "rm" "ro" "ru" "sat" "sc"
- "sco" "si" "sk" "skr" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te"
- "tg" "th" "tl" "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW"))
+ '("ach"
+ "af"
+ "an"
+ "ar"
+ "ast"
+ "az"
+ "be"
+ "bg"
+ "bn"
+ "bo"
+ "br"
+ "brx"
+ "bs"
+ "ca"
+ "ca-valencia"
+ "cak"
+ "ckb"
+ "cs"
+ "cy"
+ "da"
+ "de"
+ "dsb"
+ "el"
+ "en-CA"
+ "en-GB"
+ "eo"
+ "es-AR"
+ "es-CL"
+ "es-ES"
+ "es-MX"
+ "et"
+ "eu"
+ "fa"
+ "ff"
+ "fi"
+ "fr"
+ "fur"
+ "fy-NL"
+ "ga-IE"
+ "gd"
+ "gl"
+ "gn"
+ "gu-IN"
+ "he"
+ "hi-IN"
+ "hr"
+ "hsb"
+ "hu"
+ "hy-AM"
+ "hye"
+ "ia"
+ "id"
+ "is"
+ "it"
+ "ja"
+ "ja-JP-mac"
+ "ka"
+ "kab"
+ "kk"
+ "km"
+ "kn"
+ "ko"
+ "lij"
+ "lo"
+ "lt"
+ "ltg"
+ "lv"
+ "meh"
+ "mk"
+ "ml"
+ "mr"
+ "ms"
+ "my"
+ "nb-NO"
+ "ne-NP"
+ "nl"
+ "nn-NO"
+ "oc"
+ "pa-IN"
+ "pl"
+ "pt-BR"
+ "pt-PT"
+ "rm"
+ "ro"
+ "ru"
+ "sat"
+ "sc"
+ "scn"
+ "sco"
+ "si"
+ "sk"
+ "skr"
+ "sl"
+ "son"
+ "sq"
+ "sr"
+ "sv-SE"
+ "szl"
+ "ta"
+ "te"
+ "tg"
+ "th"
+ "tl"
+ "tr"
+ "trs"
+ "uk"
+ "ur"
+ "uz"
+ "vi"
+ "wo"
+ "xh"
+ "zh-CN"
+ "zh-TW"))
-(define %icecat-base-version "128.13.0")
+(define %icecat-base-version "140.4.0")
(define %icecat-version (string-append %icecat-base-version "-gnu1"))
-(define %icecat-build-id "20250722000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-build-id "20251014000000") ;must be of the form YYYYMMDDhhmmss
;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -717,9 +625,9 @@ variable defined below. It requires guile-json to be installed."
"firefox-" upstream-firefox-version ".source.tar.xz"))
(sha256
(base32
- "1x22a1ihnpsmcmj1ljx586rh8kgm996qbncgyr7z3rgsmslx1am4"))))
+ "1xx4rsdkfkx9nxlfzw07j5di07kfqi0a7jplcixvqihh2xrhdwj9"))))
- (gnuzilla-commit "b73acfe395ea849fcd15c9886a7f4631f2b6f82b")
+ (gnuzilla-commit "579bc2897077119e38a7e1493bca6ec97a06a36a")
(gnuzilla-source
(origin
(method git-fetch)
@@ -730,7 +638,7 @@ variable defined below. It requires guile-json to be installed."
(string-take gnuzilla-commit 8)))
(sha256
(base32
- "06zm63vs1m8c3xh4jw75ffah6anf1xxqgqn3hl3gqw5g486ncir1"))))
+ "094sci1mvvmb6xrpfjw0r482lspkmkfdln78mrkcqq7a5x3gwp83"))))
;; 'search-patch' returns either a valid file name or #f, so wrap it
;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -740,7 +648,7 @@ variable defined below. It requires guile-json to be installed."
(origin
(method computed-origin-method)
- (file-name (string-append "icecat-" %icecat-version ".tar.xz"))
+ (file-name (string-append "icecat-" %icecat-version ".tar.zst"))
(sha256 #f)
(uri
(delay
@@ -760,6 +668,7 @@ variable defined below. It requires guile-json to be installed."
#+(canonical-package findutils)
#+(canonical-package patch)
#+(canonical-package xz)
+ #+(canonical-package zstd)
#+(canonical-package sed)
#+(canonical-package grep)
#+(canonical-package bzip2)
@@ -820,27 +729,23 @@ variable defined below. It requires guile-json to be installed."
(with-directory-excursion "l10n"
(for-each
(lambda (locale)
- (let ((locale-dir
- (string-append #+mozilla-l10n "/" locale)))
+ (let ((locale-dir (string-append #+mozilla-l10n "/"
+ locale)))
(format #t " ~a~%" locale)
(force-output)
(copy-recursively locale-dir locale
#:log (%make-void-port "w"))
(for-each make-file-writable (find-files locale))
(with-directory-excursion locale
- (when (file-exists? ".hgtags")
- (delete-file ".hgtags"))
(mkdir-p "browser/chrome/browser/preferences")
- (call-with-output-file
- "browser/chrome/browser/preferences/advanced-scripts.dtd"
+ (call-with-output-file "browser/chrome/browser/\
+preferences/advanced-scripts.dtd"
(lambda (port) #f)))))
'#+%icecat-locales)
(copy-recursively #+mozilla-compare-locales
"compare-locales"
#:log (%make-void-port "w"))
- (delete-file "compare-locales/.gitignore")
- (delete-file "compare-locales/.hgignore")
- (delete-file "compare-locales/.hgtags")))
+ (delete-file "compare-locales/.gitignore")))
(format #t "Running makeicecat script...~%")
(force-output)
@@ -848,7 +753,7 @@ variable defined below. It requires guile-json to be installed."
(format #t "Packing IceCat source tarball...~%")
(force-output)
- (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+ (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count)))
(invoke "tar" "cfa" #$output
;; Avoid non-determinism in the archive. We set the
;; mtime of files in the archive to early 1980 because
@@ -885,7 +790,7 @@ variable defined below. It requires guile-json to be installed."
libcanberra
libgnome
libjpeg-turbo
- libpng-apng
+ libpng-apng-next
;; UNBUNDLE-ME! libogg
;; UNBUNDLE-ME! libtheora ; wants theora-1.2, not yet released
;; UNBUNDLE-ME! libvorbis
@@ -896,9 +801,10 @@ variable defined below. It requires guile-json to be installed."
libxcomposite
libxt
libffi
- ffmpeg
+ ;; See <https://bugzilla.mozilla.org/show_bug.cgi?id=1962139>
+ ffmpeg-6
libvpx
- icu4c
+ icu4c-77
pixman
pulseaudio
mesa
@@ -950,6 +856,7 @@ variable defined below. It requires guile-json to be installed."
#:configure-flags
#~(list
+ "--disable-fhs"
"--enable-application=browser"
"--with-distribution-id=org.gnu"
"--enable-geckodriver"
@@ -987,8 +894,6 @@ variable defined below. It requires guile-json to be installed."
(dirname (search-input-file %build-inputs
"lib/libclang.so")))
- "--enable-official-branding"
-
;; TODO: Add support for wasm sandboxed libraries.
"--without-wasm-sandboxed-libraries"
@@ -1034,7 +939,9 @@ variable defined below. It requires guile-json to be installed."
'(#$(local-file
(search-patch "icecat-compare-paths.patch"))
#$(local-file
- (search-patch "icecat-use-system-wide-dir.patch"))))))
+ (search-patch "icecat-use-system-wide-dir.patch"))
+ #$(local-file
+ (search-patch "icecat-fhs-configure-option.patch"))))))
(add-after 'apply-guix-specific-patches 'remove-bundled-libraries
(lambda _
;; Remove bundled libraries that we don't use, since they may
@@ -1152,7 +1059,9 @@ variable defined below. It requires guile-json to be installed."
;; complain that it's not able to change Cargo.lock.
;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
(substitute* "build/RunCbindgen.py"
- (("args.append\\(\"--frozen\"\\)") "pass"))))
+ (("args.append\\(\"--frozen\"\\)") "pass"))
+ (substitute* "config/makefiles/rust.mk"
+ (("cargo_build_flags \\+= --frozen") ""))))
(delete 'bootstrap)
(replace 'configure
;; configure does not work followed by both "SHELL=..." and
@@ -1231,7 +1140,28 @@ variable defined below. It requires guile-json to be installed."
;; reason. Use 'find-files' to avoid having to deal with the
;; system/architecture-specific file name.
(install-file (first (find-files "." "geckodriver"))
- (string-append #$output "/bin"))))
+ (string-append #$output "/bin"))
+ ;; Install a policies.json file as an extra step to ensure
+ ;; IceCat does not call home. The available policies can be
+ ;; found at <https://mozilla.github.io/policy-templates/>.
+
+ ;; TODO: Disable remote settings feature when it becomes
+ ;; possible to do so (see:
+ ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988070>).
+ (let ((policies.json (string-append
+ #$output
+ "/lib/icecat/distribution/policies.json")))
+ (mkdir-p (dirname policies.json))
+ (call-with-output-file policies.json
+ (lambda (p)
+ (format p "\
+{
+ \"policies\": {
+ \"DisableFirefoxAccounts\": true,
+ \"DisableTelemetry\": true,
+ \"DisablePocket\": true
+ }
+}~%"))))))
(add-after 'install 'wrap-program
(lambda* (#:key inputs #:allow-other-keys)
(let* ((lib (string-append #$output "/lib"))
@@ -1263,20 +1193,24 @@ variable defined below. It requires guile-json to be installed."
(add-after 'wrap-program 'install-desktop-entry
(lambda _
;; Install the '.desktop' file.
- (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
+ (let* ((desktop-file (string-append "toolkit/mozapps/installer"
+ "/linux/rpm/mozilla.desktop"))
(applications (string-append #$output "/share/applications")))
(substitute* desktop-file
- (("^Exec=icecat") (string-append "Exec=" #$output "/bin/icecat"))
- (("IceCat") "GNU IceCat")
- (("Icon=.*") "Icon=icecat\n")
- (("NewWindow") "new-window")
- (("NewPrivateWindow") "new-private-window")
- (("StartupNotify=true")
- "StartupNotify=true\nStartupWMClass=Icecat"))
- (install-file desktop-file applications))))
+ (("@MOZ_APP_NAME@")
+ "icecat")
+ (("^Exec=icecat")
+ (string-append "Exec=" #$output "/bin/icecat"))
+ (("@MOZ_APP_DISPLAYNAME@")
+ "GNU IceCat")
+ (("@MOZ_APP_REMOTINGNAME@")
+ "Icecat"))
+ (mkdir-p applications)
+ (copy-file desktop-file
+ (string-append applications "/icecat.desktop")))))
(add-after 'install-desktop-entry 'install-icons
(lambda _
- (with-directory-excursion "browser/branding/official"
+ (with-directory-excursion "browser/branding/unofficial"
(for-each
(lambda (file)
(let* ((size (string-filter char-numeric? file))
@@ -1285,13 +1219,13 @@ variable defined below. It requires guile-json to be installed."
(mkdir-p icons)
(copy-file file (string-append icons "/icecat.png"))))
'("default16.png" "default22.png" "default24.png"
- "default32.png" "default48.png" "content/icon64.png"
- "mozicon128.png" "default256.png"))))))))
+ "default32.png" "default48.png" "default256.png"
+ "content/icon64.png" "mozicon128.png" ))))))))
(native-search-paths
(list (search-path-specification
- (variable "ICECAT_SYSTEM_DIR")
- (separator #f) ;single entry
- (files '("lib/icecat")))))
+ (variable "MOZILLA_SYSTEM_DIR")
+ (separator #f) ;single entry
+ (files '("lib/icecat")))))
(home-page "https://www.gnu.org/software/gnuzilla/")
(synopsis "Entirely free browser derived from Mozilla Firefox")
(description
@@ -1306,57 +1240,275 @@ testing.")
(cpe-name . "firefox_esr")
(cpe-version . ,(first (string-split version #\-)))))))
-(define %icedove-build-id "20241119000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "115.16.3")
+(define icecat-140.3-source
+ (let* ((%icecat-140.3-base-version "140.3.1")
+ (%icecat-140.3-version (string-append %icecat-140.3-base-version "-gnu1"))
+ (major-version (first (string-split %icecat-140.3-base-version #\.)))
+ (minor-version (second (string-split %icecat-140.3-base-version #\.)))
+ (sub-version (third (string-split %icecat-140.3-base-version #\.)))
+
+ (upstream-firefox-version (string-append %icecat-140.3-base-version "esr"))
+ (upstream-firefox-source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://ftp.mozilla.org/pub/firefox/releases/"
+ upstream-firefox-version "/source/"
+ "firefox-" upstream-firefox-version ".source.tar.xz"))
+ (sha256
+ (base32
+ "0db7qgcvw4knl6qbkn0a52vh2pcghcw4s2djdvcna1zlqjhv6hqb"))))
+
+ (gnuzilla-commit "b7f0c6b7d19ececd92640f26eaa43cfec29cf728")
+ (gnuzilla-source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.savannah.gnu.org/gnuzilla.git")
+ (commit gnuzilla-commit)))
+ (file-name (git-file-name "gnuzilla"
+ (string-take gnuzilla-commit 8)))
+ (sha256
+ (base32
+ "1hzwa4dbk5pvwas867vp2iivdr9zqppr9zbw2xgyd2mdf2kj4a20"))))
+
+ ;; 'search-patch' returns either a valid file name or #f, so wrap it
+ ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
+ (makeicecat-patch
+ (local-file (assume-valid-file-name
+ (search-patch "icecat-makeicecat.patch")))))
+
+ (origin
+ (method computed-origin-method)
+ (file-name (string-append "icecat-" %icecat-140.3-version ".tar.zst"))
+ (sha256 #f)
+ (uri
+ (delay
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (let ((firefox-dir
+ (string-append "firefox-" #$%icecat-140.3-base-version))
+ (icecat-dir
+ (string-append "icecat-" #$%icecat-140.3-version)))
+
+ (set-path-environment-variable
+ "PATH" '("bin")
+ (list #+python
+ #+(canonical-package bash)
+ #+(canonical-package coreutils)
+ #+(canonical-package findutils)
+ #+(canonical-package patch)
+ #+(canonical-package xz)
+ #+(canonical-package zstd)
+ #+(canonical-package sed)
+ #+(canonical-package grep)
+ #+(canonical-package bzip2)
+ #+(canonical-package gzip)
+ #+(canonical-package tar)))
+
+ (set-path-environment-variable
+ "PYTHONPATH"
+ (list #+(format #f "lib/python~a/site-packages"
+ (version-major+minor
+ (package-version python))))
+ '#+(cons python-jsonschema
+ (map second
+ (package-transitive-propagated-inputs
+ python-jsonschema))))
+
+ ;; We copy the gnuzilla source directory because it is
+ ;; read-only in 'gnuzilla-source', and the makeicecat script
+ ;; uses "cp -a" to copy parts of it and assumes that the
+ ;; copies will be writable.
+ (copy-recursively #+gnuzilla-source "/tmp/gnuzilla"
+ #:log (%make-void-port "w"))
+
+ (with-directory-excursion "/tmp/gnuzilla"
+ (make-file-writable "makeicecat")
+ (invoke "patch" "--force" "--no-backup-if-mismatch"
+ "-p1" "--input" #+makeicecat-patch)
+ (patch-shebang "makeicecat")
+ (substitute* "makeicecat"
+ (("^readonly FFMAJOR=(.*)" all ffmajor)
+ (unless (string=? #$major-version
+ (string-trim-both ffmajor))
+ ;; The makeicecat script cannot be expected to work
+ ;; properly on a different version of Firefox, even if
+ ;; no errors occur during execution.
+ (error "makeicecat major version mismatch"))
+ (string-append "readonly FFMAJOR=" #$major-version "\n"))
+ (("^readonly FFMINOR=.*")
+ (string-append "readonly FFMINOR=" #$minor-version "\n"))
+ (("^readonly FFSUB=.*")
+ (string-append "readonly FFSUB=" #$sub-version "\n"))
+ (("^readonly DATADIR=.*")
+ "readonly DATADIR=/tmp/gnuzilla/data\n")
+ (("^readonly SOURCEDIR=.*")
+ (string-append "readonly SOURCEDIR=" icecat-dir "\n"))
+ (("/bin/sed")
+ #+(file-append (canonical-package sed) "/bin/sed"))))
+
+ (format #t "Unpacking upstream firefox tarball...~%")
+ (force-output)
+ (invoke "tar" "xf" #+upstream-firefox-source)
+ (rename-file firefox-dir icecat-dir)
+
+ (with-directory-excursion icecat-dir
+ (format #t "Populating l10n directory...~%")
+ (force-output)
+ (mkdir "l10n")
+ (with-directory-excursion "l10n"
+ (for-each
+ (lambda (locale)
+ (let ((locale-dir (string-append #+mozilla-l10n "/"
+ locale)))
+ (format #t " ~a~%" locale)
+ (force-output)
+ (copy-recursively locale-dir locale
+ #:log (%make-void-port "w"))
+ (for-each make-file-writable (find-files locale))
+ (with-directory-excursion locale
+ (mkdir-p "browser/chrome/browser/preferences")
+ (call-with-output-file "browser/chrome/browser/\
+preferences/advanced-scripts.dtd"
+ (lambda (port) #f)))))
+ '#+%icecat-locales)
+ (copy-recursively #+mozilla-compare-locales
+ "compare-locales"
+ #:log (%make-void-port "w"))
+ (delete-file "compare-locales/.gitignore")))
+
+ (format #t "Running makeicecat script...~%")
+ (force-output)
+ (invoke "bash" "/tmp/gnuzilla/makeicecat")
+
+ (format #t "Packing IceCat source tarball...~%")
+ (force-output)
+ (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count)))
+ (invoke "tar" "cfa" #$output
+ ;; Avoid non-determinism in the archive. We set the
+ ;; mtime of files in the archive to early 1980 because
+ ;; the build process fails if the mtime of source
+ ;; files is pre-1980, due to the creation of zip
+ ;; archives.
+ "--mtime=@315619200" ; 1980-01-02 UTC
+ "--owner=root:0"
+ "--group=root:0"
+ "--sort=name"
+ icecat-dir)))))))))
+
+(define %icedove-build-id "20250916000000") ;must be of the form YYYYMMDDhhmmss
+;;; See <https://product-details.mozilla.org/1.0/thunderbird_versions.json>
+;;; for the source of truth regarding Thunderbird releases.
+(define %icedove-version "140.3.0")
;; Provides the "comm" folder which is inserted into the icecat source.
-;; Avoids the duplication of Icecat's source tarball.
+;; Avoids the duplication of Icecat's source tarball. Pick the changeset that
+;; matches the most recent tag of the form 'THUNDERBIRD_140_2_0esr_RELEASE'.
(define thunderbird-comm-source
(origin
(method hg-fetch)
(uri (hg-reference
- (url "https://hg.mozilla.org/releases/comm-esr115")
- (changeset "8ab43355c97d91f5adaae732fb8c9f5ca210fe8b")))
+ (url "https://hg.mozilla.org/releases/comm-esr140")
+ (changeset "0a019f4060541a15af8be50c4d923aebe6b9ccb2")))
(file-name (string-append "thunderbird-" %icedove-version "-checkout"))
(sha256
(base32
- "1fax5sdc087ly62fh2g4yvi7v80vrhn94hpzdr98a4m3psdgglh0"))))
+ "00m2xzb1mvyllg31yrz7kw0m89c28b55cdd486mbk0k6xwv2gm8m"))
+ (patches (search-patches "icedove-observer-fix.patch"))))
-(define (comm-source->locales+changeset source)
- "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the
-list of languages supported as well as the currently used changeset."
- (match (update-mozilla-115-locales
- (string-append source "/mail/locales/l10n-changesets.json"))
- (((_ changeset locale) ...)
- (values locale (first changeset)))))
-
-;;; Generated with comm-source->locales+changeset.
+;;; To regenerate, see the `format-locales' helper defined above.
(define %icedove-locales
- '("af" "ar" "ast" "be" "bg" "br" "ca" "cak" "cs" "cy" "da" "de" "dsb" "el"
- "en-CA" "en-GB" "es-AR" "es-ES" "es-MX" "et" "eu" "fi" "fr" "fy-NL" "ga-IE"
- "gd" "gl" "he" "hr" "hsb" "hu" "hy-AM" "id" "is" "it" "ja" "ja-JP-mac" "ka"
- "kab" "kk" "ko" "lt" "lv" "ms" "nb-NO" "nl" "nn-NO" "pa-IN" "pl" "pt-BR"
- "pt-PT" "rm" "ro" "ru" "sk" "sl" "sq" "sr" "sv-SE" "th" "tr" "uk" "uz" "vi"
- "zh-CN" "zh-TW"))
+ '("af"
+ "ar"
+ "ast"
+ "be"
+ "bg"
+ "br"
+ "ca"
+ "cak"
+ "cs"
+ "cy"
+ "da"
+ "de"
+ "dsb"
+ "el"
+ "en-CA"
+ "en-GB"
+ "es-AR"
+ "es-ES"
+ "es-MX"
+ "et"
+ "eu"
+ "fi"
+ "fr"
+ "fy-NL"
+ "ga-IE"
+ "gd"
+ "gl"
+ "he"
+ "hr"
+ "hsb"
+ "hu"
+ "hy-AM"
+ "id"
+ "is"
+ "it"
+ "ja"
+ "ja-JP-mac"
+ "ka"
+ "kab"
+ "kk"
+ "ko"
+ "lt"
+ "lv"
+ "mk"
+ "ms"
+ "nb-NO"
+ "nl"
+ "nn-NO"
+ "pa-IN"
+ "pl"
+ "pt-BR"
+ "pt-PT"
+ "rm"
+ "ro"
+ "ru"
+ "sk"
+ "sl"
+ "sq"
+ "sr"
+ "sv-SE"
+ "th"
+ "tr"
+ "uk"
+ "uz"
+ "vi"
+ "zh-CN"
+ "zh-TW"))
(define thunderbird-comm-l10n
- (origin
- (method url-fetch)
- (uri (string-append
- "https://ftp.mozilla.org/pub/thunderbird/releases/"
- %icedove-version
- "/source/thunderbird-"
- %icedove-version
- ".strings_all.tar.zst"))
- (sha256
- (base32
- "1nnvnfhbb7174898i62a9sy1zxc5qw3nhmf9agy1p6jvldn5nb8z"))))
+ ;; The commit to use can be found in the mail/locales/l10n-changesets.json
+ ;; file in Thunderbird's source.
+ (let* ((commit "b6fd3d6c75ba35d91fe131a654df76ca86f35ac5")
+ (revision "0")
+ (version (git-version %icedove-version revision commit)))
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/thunderbird/thunderbird-l10n")
+ (commit commit)))
+ (file-name (git-file-name "thunderbird-l10n" version))
+ (sha256
+ (base32
+ "0n4df6kv70a6mxxsqwc83nhj8vl7acv9bcbf07nkcsjjxh3szvqc")))))
(define icedove-source
(let ((name (string-append "icedove-" %icedove-version)))
(origin
(method computed-origin-method)
- (file-name (string-append name ".tar.xz"))
+ (file-name (string-append name ".tar.zst"))
(sha256 #f)
(uri
(delay
@@ -1368,30 +1520,27 @@ list of languages supported as well as the currently used changeset."
(set-path-environment-variable
"PATH" '("bin")
(list #+(canonical-package tar)
- #+(canonical-package xz)
#+(canonical-package zstd)))
;; Extract the base Icecat tarball, renaming its top-level
;; directory.
(invoke "tar" "--transform" (string-append "s,[^/]*," #$name ",")
- "-xf" #$icecat-115-source)
+ "-xf" #$icecat-140.3-source)
(chdir #$name)
;; Merge the Thunderdbird localization data.
- (invoke "tar" "--extract" "--file" #$thunderbird-comm-l10n
- "--directory" "l10n/")
+ (copy-recursively #$thunderbird-comm-l10n "l10n")
- ;; Add the Thunderbird-specific "comm" directory..
+ ;; Add the Thunderbird-specific "comm" directory.
(mkdir "comm")
(copy-recursively #$thunderbird-comm-source "comm")
+ (for-each make-file-writable (find-files "comm"))
(delete-file "sourcestamp.txt")
;; Adjust the application name.
- (substitute* "comm/mail/confvars.sh"
- (("MOZ_APP_NAME=thunderbird")
- "MOZ_APP_NAME=icedove")
- (("MOZ_UPDATER=1")
- "MOZ_UPDATER=0"))
+ (substitute* "comm/mail/moz.configure"
+ (("\"MOZ_APP_NAME\", \"thunderbird\"")
+ "\"MOZ_APP_NAME\", \"icedove\""))
;; Remove branding to comply with Mozilla's trademark policy
(with-directory-excursion "comm/mail/branding/nightly"
@@ -1419,7 +1568,7 @@ list of languages supported as well as the currently used changeset."
(substitute* '("overrides/app-license-name.html")
(("Thunderbird") "Icedove")))
(with-directory-excursion "comm/mail/components/"
- (substitute* '("MailGlue.jsm"
+ (substitute* '("MailGlue.sys.mjs"
"extensions/schemas/addressBook.json"
"extensions/schemas/tabs.json"
"extensions/schemas/cloudFile.json"
@@ -1431,7 +1580,8 @@ list of languages supported as well as the currently used changeset."
"enterprisepolicies/helpers/moz.build"
"enterprisepolicies/schemas/moz.build")
(("Thunderbird") "Icedove")))
- (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
+ (substitute* '("devtools/startup/DevToolsStartup.sys.mjs"
+ "comm/mailnews/base/prefs/content/accountUtils.js"
"comm/mail/base/content/customizeToolbar.js"
"comm/suite/components/customizeToolbar.js")
(("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
@@ -1449,6 +1599,8 @@ list of languages supported as well as the currently used changeset."
(string-append m ", false);"))
(("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
(string-append m ", false);"))
+ (("(pref\\(\"services.settings.server\").*" _ m)
+ (string-append m ", \"\");"))
;; XXX: The autoDisableScopes is tweaked by the makeicecat
;; script, but it doesn't know about Thunderbird. This is
@@ -1463,11 +1615,21 @@ list of languages supported as well as the currently used changeset."
(string-append anchor
"pref(\"intl.locale.requested\", \"\");\n")))
+ ;; Fix more discrepancies caused by the fact that the
+ ;; makeicecat script didn't run on the Thunderbird sources.
+ (substitute* '("Cargo.lock"
+ "comm/rust/Cargo.lock"
+ "comm/rust/Cargo.toml"
+ "gfx/qcms/Cargo.toml"
+ "toolkit/library/rust/shared/Cargo.toml")
+ (("IceCatGraphics") "FirefoxGraphics")
+ (("firefox-on-glean") "icecat-on-glean"))
+
;; Step out of the directory and create the tarball.
(chdir "..")
(format #t "Packing Icedove source tarball...~%")
(force-output)
- (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+ (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count)))
(invoke "tar" "cfa" #$output
"--mtime=@315619200" ;1980-01-02 UTC
"--owner=root:0"
@@ -1493,6 +1655,11 @@ list of languages supported as well as the currently used changeset."
,@%default-gnu-modules)
#:phases
#~(modify-phases %standard-phases
+ (add-after 'unpack 'do-not-verify-vendored-rust-dependencies
+ (lambda _
+ (substitute* "comm/python/rocbuild/rocbuild/rust.py"
+ (("result = check_vendored_dependencies\\(topsrcdir)")
+ "sys.exit(0)"))))
(add-after 'patch-source-shebangs 'patch-cargo-checksums
(lambda _
(use-modules (guix build cargo-utils))
@@ -1505,15 +1672,35 @@ ca495991b7852b855"))
(string-append "checksum = \"" null-hash "\""))))
(find-files "." "Cargo.lock$"))
(for-each generate-all-checksums
- '("third_party/rust"
- "toolkit/library/rust")))))
+ '("services"
+ "js"
+ "third_party/rust"
+ "dom/media"
+ "dom/webauthn"
+ "toolkit"
+ "gfx"
+ "storage"
+ "modules"
+ "xpcom/rust"
+ "media"
+ "mozglue/static/rust"
+ "netwerk"
+ "remote"
+ "intl"
+ "servo"
+ "security/manager/ssl"
+ "build"
+ ;; Thunderbird-specific.
+ "comm")))))
(add-after 'patch-cargo-checksums 'remove-cargo-frozen-flag
(lambda _
;; Remove --frozen flag from cargo invocation, otherwise it'll
;; complain that it's not able to change Cargo.lock.
;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
(substitute* "build/RunCbindgen.py"
- (("\"--frozen\",") ""))))
+ (("args.append\\(\"--frozen\"\\)") "pass"))
+ (substitute* "config/makefiles/rust.mk"
+ (("cargo_build_flags \\+= --frozen") ""))))
;; Fixes issue where each installation directory generates its own
;; profile (see:
;; https://trac.torproject.org/projects/tor/ticket/31457).
@@ -1563,8 +1750,6 @@ ca495991b7852b855"))
(setenv "MOZ_NOSPAM" "1")
(setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
- (setenv "PYTHON"
- (search-input-file inputs "/bin/python"))
(setenv "GUIX_PYTHONPATH"
(string-append (getcwd)
"/obj-x86_64-pc-linux-gnu/_virtualenvs/build"))
@@ -1598,6 +1783,7 @@ ca495991b7852b855"))
"ac_add_options --enable-optimize\n"
"ac_add_options --enable-pulseaudio\n"
"ac_add_options --enable-release\n"
+ "ac_add_options --enable-rust-simd\n"
"ac_add_options --enable-strip\n"
"ac_add_options --enable-system-ffi\n"
"ac_add_options --enable-system-pixman\n"
@@ -1678,10 +1864,18 @@ ca495991b7852b855"))
(eudev-lib (string-append eudev "/lib"))
;; For the integration of native notifications (same reason as icecat)
(libnotify #$(this-package-input "libnotify"))
- (libnotify-lib (string-append libnotify "/lib")))
+ (libnotify-lib (string-append libnotify "/lib"))
+ (mesa #$(this-package-input "mesa"))
+ (mesa-lib (string-append mesa "/lib"))
+ (pciutils #$(this-package-input "pciutils"))
+ (pciutils-lib (string-append pciutils "/lib"))
+ (libva #$(this-package-input "libva"))
+ (libva-lib (string-append libva "/lib")))
(wrap-program (car (find-files lib "^icedove$"))
`("XDG_DATA_DIRS" prefix (,gtk-share))
- `("LD_LIBRARY_PATH" prefix (,pulseaudio-lib ,eudev-lib ,libnotify-lib ,gpgme-lib)))))))))
+ `("LD_LIBRARY_PATH" prefix
+ (,pulseaudio-lib ,eudev-lib ,libnotify-lib ,gpgme-lib
+ ,mesa-lib ,libva-lib ,pciutils-lib)))))))))
(inputs
(list alsa-lib
bash-minimal
@@ -1689,16 +1883,15 @@ ca495991b7852b855"))
cairo
cups
dbus-glib
- ;; Support for FFmpeg 6 was only added in version 112 (see:
- ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1819374).
+ eudev
+ ffmpeg
freetype
gdk-pixbuf
glib
gpgme
gtk+
- gtk+-2
hunspell
- icu4c
+ icu4c-77
libcanberra
libevent
libffi
@@ -1706,6 +1899,7 @@ ca495991b7852b855"))
libjpeg-turbo
libnotify
libpng-apng
+ libva
libvpx
libxcomposite
libxft
@@ -1715,20 +1909,19 @@ ca495991b7852b855"))
mesa
mit-krb5
nspr
- nss
+ nss-rapid
pango
+ pciutils
pixman
pulseaudio
sqlite
startup-notification
- eudev
unzip
zip
zlib))
(native-inputs
- (list `(,rust "cargo")
- clang-15
- llvm-15
+ (list clang-20
+ llvm-20
m4
nasm
node-lts
@@ -1736,7 +1929,8 @@ ca495991b7852b855"))
pkg-config
python-wrapper
rust
- rust-cbindgen-0.24
+ `(,rust "cargo")
+ rust-cbindgen
which
yasm))
(home-page "https://www.thunderbird.net")
@@ -1797,9 +1991,6 @@ their corresponding VERSION, SOURCE and LOCALES variables."
(string-append (getcwd) "/mach_state"))
(setenv "MOZCONFIG" (string-append (getcwd) "/.mozconfig"))
(setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
- (setenv "GUIX_PYTHONPATH"
- (string-append (getcwd)
- "/obj/_virtualenvs/build/lib/python3.11/site-packages"))
(setenv "BUILD_BACKENDS" "FasterMake,RecursiveMake")))
(replace 'build ;build and install data files
(lambda* (#:key outputs #:allow-other-keys)
@@ -1809,6 +2000,13 @@ their corresponding VERSION, SOURCE and LOCALES variables."
(error "could not find file in dir" name dir))
(car files)))
+ ;; Register "tb_common" as a valid site, to please the mach
+ ;; virtualenv machinery (see:
+ ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1986420>).
+ (substitute* "python/mach/mach/site.py"
+ (("\"mach\", \"build\", \"common\"" all)
+ (string-append all ", \"tb_common\"")))
+
(for-each
(lambda (l)
(let* ((out (assoc-ref outputs l))
@@ -1832,10 +2030,9 @@ their corresponding VERSION, SOURCE and LOCALES variables."
'thunderbird
'#$project))))
(format #t "processing locale `~a'...~%" l)
- ;; XXX: For some reasons, on version 115, there are some
- ;; parsing errors that cause the build system to
- ;; return an unclean exit code; use system* to ignore
- ;; errors.
+ ;; TODO: Revert to use 'invoke' here, after
+ ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988069>
+ ;; is fixed.
(system* "./mach" "build" (string-append "langpack-" l))
(mkdir-p ext-dir)
(let ((xpi (find-file "obj" (string-append
@@ -1850,7 +2047,10 @@ their corresponding VERSION, SOURCE and LOCALES variables."
(native-inputs
(list m4
perl
- python-wrapper
+ python
+ python-aiohttp
+ python-async-timeout
+ python-dateutil
node-lts
unzip))
(home-page "https://www.mozilla.org/")