gnu: Remove more packages deprecated for over almost a year.
[jackhill/guix/guix.git] / gnu / packages / gnuzilla.scm
CommitLineData
be0f6112 1;;; GNU Guix --- Functional package management for GNU
5deea4fc 2;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
aff0cce9 3;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
429c8284 4;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
1aaaff1a 5;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
e80a4479 6;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
88a8ce87 7;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
8db94716 8;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
47956fa0 9;;; Copyright © 2017 ng0 <ng0@n0.is>
37db2370 10;;; Copyright © 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
192a59d0 11;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
7d141788 12;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
167a0ce0 13;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
37db2370 14;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
be0f6112
AE
15;;;
16;;; This file is part of GNU Guix.
17;;;
18;;; GNU Guix is free software; you can redistribute it and/or modify it
19;;; under the terms of the GNU General Public License as published by
20;;; the Free Software Foundation; either version 3 of the License, or (at
21;;; your option) any later version.
22;;;
23;;; GNU Guix is distributed in the hope that it will be useful, but
24;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26;;; GNU General Public License for more details.
27;;;
28;;; You should have received a copy of the GNU General Public License
29;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
30
31(define-module (gnu packages gnuzilla)
07d4d9b7 32 #:use-module ((srfi srfi-1) #:hide (zip))
1461dd24 33 #:use-module (ice-9 match)
be0f6112 34 #:use-module (gnu packages)
b5b73a82 35 #:use-module ((guix licenses) #:prefix license:)
be0f6112
AE
36 #:use-module (guix packages)
37 #:use-module (guix download)
192a59d0 38 #:use-module (guix git-download)
ad21d767 39 #:use-module (guix hg-download)
948879ee
MW
40 #:use-module (guix gexp)
41 #:use-module (guix store)
42 #:use-module (guix monads)
aaac423c 43 #:use-module (guix utils)
be0f6112 44 #:use-module (guix build-system gnu)
e67ad553 45 #:use-module (guix build-system cargo)
167a0ce0 46 #:use-module (guix build-system trivial)
948879ee 47 #:use-module (gnu packages admin)
94e96f7f 48 #:use-module (gnu packages audio)
002c3e6d 49 #:use-module (gnu packages autotools)
bfb48f4f 50 #:use-module (gnu packages base)
948879ee 51 #:use-module (gnu packages bash)
1aaaff1a 52 #:use-module (gnu packages databases)
be0f6112 53 #:use-module (gnu packages glib)
be0f6112 54 #:use-module (gnu packages gtk)
90e1cdae
MW
55 #:use-module (gnu packages gnome)
56 #:use-module (gnu packages libcanberra)
57 #:use-module (gnu packages cups)
89e34644 58 #:use-module (gnu packages kerberos)
be0f6112
AE
59 #:use-module (gnu packages linux)
60 #:use-module (gnu packages perl)
61 #:use-module (gnu packages pkg-config)
1ae6df81 62 #:use-module (gnu packages compression)
74c7af9f 63 #:use-module (gnu packages fontutils)
1ae6df81 64 #:use-module (gnu packages libevent)
90e1cdae 65 #:use-module (gnu packages libreoffice) ;for hunspell
e55354b8 66 #:use-module (gnu packages image)
1ae6df81 67 #:use-module (gnu packages libffi)
74c7af9f 68 #:use-module (gnu packages pulseaudio)
be0f6112 69 #:use-module (gnu packages python)
44d10b1f 70 #:use-module (gnu packages python-xyz)
ad21d767 71 #:use-module (gnu packages node)
be0f6112 72 #:use-module (gnu packages xorg)
200726ed 73 #:use-module (gnu packages gl)
01497dfe 74 #:use-module (gnu packages assembly)
e67ad553 75 #:use-module (gnu packages rust)
c5c48761 76 #:use-module (gnu packages rust-apps)
8d956d86 77 #:use-module (gnu packages llvm)
aff0cce9 78 #:use-module (gnu packages nss)
13b284d9
MW
79 #:use-module (gnu packages icu4c)
80 #:use-module (gnu packages video)
94e96f7f 81 #:use-module (gnu packages xiph)
13b284d9 82 #:use-module (gnu packages xdisorg)
cd0322a3
RW
83 #:use-module (gnu packages readline)
84 #:use-module (gnu packages sqlite))
be0f6112 85
4923e06f
SB
86(define-public mozjs
87 (package
88 (name "mozjs")
89 (version "17.0.0")
90 (source (origin
91 (method url-fetch)
92 (uri (string-append
93 "https://ftp.mozilla.org/pub/mozilla.org/js/"
94 name version ".tar.gz"))
95 (sha256
96 (base32
68716289 97 "1fig2wf4f10v43mqx67y68z6h77sy900d1w0pz9qarrqx57rc7ij"))
a64b7da5 98 (patches (search-patches "mozjs17-aarch64-support.patch"))
68716289
SB
99 (modules '((guix build utils)))
100 (snippet
101 ;; Fix incompatibility with Perl 5.22+.
6cbee49d
MW
102 '(begin
103 (substitute* '("js/src/config/milestone.pl")
104 (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
105 #t))))
4923e06f
SB
106 (build-system gnu-build-system)
107 (native-inputs
f403c676
EF
108 `(("perl" ,perl)
109 ("pkg-config" ,pkg-config)
110 ("python" ,python-2)))
111 (propagated-inputs
112 `(("nspr" ,nspr))) ; in the Requires.private field of mozjs-17.0.pc
113 (inputs
114 `(("zlib" ,zlib)))
4923e06f 115 (arguments
56486b3a
EF
116 `(;; XXX: parallel build fails, lacking:
117 ;; mkdir -p "system_wrapper_js/"
118 #:parallel-build? #f
87eeeeb0 119 #:make-flags '("CXXFLAGS=-fpermissive")
56486b3a
EF
120 #:phases
121 (modify-phases %standard-phases
122 (add-after 'unpack 'delete-timedout-test
a64b7da5 123 ;; This test times out on slower hardware.
e15793c8
MW
124 (lambda _
125 (delete-file "js/src/jit-test/tests/basic/bug698584.js")
126 #t))
56486b3a 127 (add-before 'configure 'chdir
4923e06f 128 (lambda _
56486b3a
EF
129 (chdir "js/src")
130 #t))
131 (replace 'configure
132 ;; configure fails if it is followed by SHELL and CONFIG_SHELL
133 (lambda* (#:key outputs #:allow-other-keys)
134 (let ((out (assoc-ref outputs "out")))
135 (setenv "SHELL" (which "sh"))
136 (setenv "CONFIG_SHELL" (which "sh"))
e15793c8
MW
137 (invoke "./configure" (string-append "--prefix=" out)
138 ,@(if (string=? "aarch64-linux"
139 (%current-system))
140 '("--host=aarch64-unknown-linux-gnu")
141 '()))))))))
4923e06f
SB
142 (home-page
143 "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey")
144 (synopsis "Mozilla javascript engine")
145 (description "SpiderMonkey is Mozilla's JavaScript engine written
146in C/C++.")
87158e85 147 (license license:mpl2.0))) ; and others for some files
4923e06f 148
cefdcb38
SB
149(define-public mozjs-24
150 (package (inherit mozjs)
151 (name "mozjs")
152 (version "24.2.0")
153 (source (origin
154 (method url-fetch)
155 (uri (string-append
156 "https://ftp.mozilla.org/pub/mozilla.org/js/"
157 name "-" version ".tar.bz2"))
158 (sha256
159 (base32
68716289
SB
160 "1n1phk8r3l8icqrrap4czplnylawa0ddc2cc4cgdz46x3lrkybz6"))
161 (modules '((guix build utils)))
26f38d31 162 (patches (search-patches "mozjs24-aarch64-support.patch"))
68716289
SB
163 (snippet
164 ;; Fix incompatibility with Perl 5.22+.
6cbee49d
MW
165 '(begin
166 (substitute* '("js/src/config/milestone.pl")
167 (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
168 #t))))
cefdcb38 169 (arguments
aaac423c
EF
170 (substitute-keyword-arguments (package-arguments mozjs)
171 ((#:phases phases)
172 `(modify-phases ,phases
173 (replace 'configure
174 (lambda* (#:key outputs #:allow-other-keys)
175 (let ((out (assoc-ref outputs "out")))
176 ;; configure fails if it is followed by SHELL and CONFIG_SHELL
177 (setenv "SHELL" (which "sh"))
178 (setenv "CONFIG_SHELL" (which "sh"))
6073ef75
MW
179 (invoke "./configure"
180 (string-append "--prefix=" out)
181 "--with-system-nspr"
182 "--enable-system-ffi"
183 "--enable-threadsafe"
184 ,@(if (string=? "aarch64-linux"
185 (%current-system))
186 '("--host=aarch64-unknown-linux-gnu")
187 '())))))))))
cefdcb38
SB
188 (inputs
189 `(("libffi" ,libffi)
190 ("zlib" ,zlib)))))
191
29f381ba
CL
192(define-public mozjs-38
193 (package
194 (inherit mozjs)
195 (name "mozjs")
196 (version "38.2.1.rc0")
197 (source (origin
198 (method url-fetch)
199 (uri (string-append
747c8f2a 200 "https://anduin.linuxfromscratch.org/BLFS/mozjs/"
29f381ba
CL
201 name "-" version ".tar.bz2"))
202 (sha256
203 (base32
204 "0p4bmbpgkfsj54xschcny0a118jdrdgg0q29rwxigg3lh5slr681"))
205 (patches
206 (search-patches
207 ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1269317 for
208 ;; GCC 6 compatibility.
209
210 "mozjs38-version-detection.patch" ; for 0ad
211 "mozjs38-tracelogger.patch"
212
213 ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1339931.
214 "mozjs38-pkg-config-version.patch"
215 "mozjs38-shell-version.patch"))
216 (modules '((guix build utils)))
217 (snippet
218 '(begin
219 ;; Fix incompatibility with sed 4.4.
220 (substitute* "js/src/configure"
221 (("\\^\\[:space:\\]") "^[[:space:]]"))
222
223 ;; The headers are symlinks to files that are in /tmp, so they
224 ;; end up broken. Copy them instead.
225 (substitute*
226 "python/mozbuild/mozbuild/backend/recursivemake.py"
227 (("\\['dist_include'\\].add_symlink")
228 "['dist_include'].add_copy"))
229
230 ;; Remove bundled libraries.
231 (for-each delete-file-recursively
232 '("intl"
233 "js/src/ctypes/libffi"
234 "js/src/ctypes/libffi-patches"
235 "modules/zlib"))
236 #t))))
237 (arguments
238 `(;; XXX: parallel build fails, lacking:
239 ;; mkdir -p "system_wrapper_js/"
240 #:parallel-build? #f
241 ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1008470.
242 #:tests? #f
243 #:phases
244 (modify-phases %standard-phases
245 (replace 'configure
246 (lambda* (#:key outputs #:allow-other-keys)
247 (let ((out (assoc-ref outputs "out")))
248 (chdir "js/src")
249 (setenv "SHELL" (which "sh"))
250 (setenv "CONFIG_SHELL" (which "sh"))
5f70b6d4
MW
251 (invoke "./configure"
252 (string-append "--prefix=" out)
253 "--enable-ctypes"
254 "--enable-gcgenerational"
255 "--enable-optimize"
256 "--enable-pie"
257 "--enable-readline"
258 "--enable-shared-js"
259 "--enable-system-ffi"
260 "--enable-threadsafe"
261 "--enable-xterm-updates"
262 "--with-system-icu"
263 "--with-system-nspr"
264 "--with-system-zlib"
29f381ba 265
5f70b6d4
MW
266 ;; Intl API requires bundled ICU.
267 "--without-intl-api")))))))
29f381ba
CL
268 (native-inputs
269 `(("perl" ,perl)
270 ("pkg-config" ,pkg-config)
271 ("python-2" ,python-2)))
272 (inputs
273 `(("libffi" ,libffi)
274 ("readline" ,readline)
275 ("icu4c" ,icu4c)
276 ("zlib" ,zlib)))))
277
192a59d0
RW
278(define-public mozjs-52
279 ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
280 ;; While we could take a snapshot of the complete mozilla-esr52 repository at
281 ;; <https://treeherder.mozilla.org/#/jobs?repo=mozilla-esr52&filter-searchStr=sm-tc>,
282 ;; we take the Debian version instead, because it is easier to work with.
283 (let ((commit "6507e63cc416fd7a3269e390efe712f8b56f374a")
284 (revision "1"))
285 (package (inherit mozjs-38)
286 (version (git-version "52.0" revision commit))
287 (source (origin
288 (method git-fetch)
289 (uri (git-reference
290 (url "https://salsa.debian.org/gnome-team/mozjs52.git")
291 (commit commit)))
292 (file-name (git-file-name "mozjs" version))
293 (sha256
294 (base32
295 "1ny0s53r8wn4byys87h784xrq1xg767akmfm6gqrbvrz57mlm3q2"))))
296 (arguments
297 `(#:tests? #f ; depends on repository metadata
298 #:configure-flags
299 '("--enable-ctypes"
300 "--enable-optimize"
301 "--enable-pie"
302 "--enable-readline"
303 "--enable-shared-js"
304 "--enable-system-ffi"
305 "--with-system-icu"
306 "--with-system-nspr"
307 "--with-system-zlib"
308
309 ;; Intl API requires bundled ICU.
6cc147a3
RW
310 "--without-intl-api"
311
312 ;; Without this gnome-shell will crash at runtime.
313 "--disable-jemalloc")
192a59d0
RW
314 #:phases
315 (modify-phases %standard-phases
316 (add-after 'unpack 'patch-and-chdir
317 (lambda* (#:key inputs #:allow-other-keys)
318 ;; This patch prevents a segfault when executing JS_Init().
319 ;; The build does not fail without this patch, but the
320 ;; configure phase of the gjs package would fail.
321 ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1176787
322 (make-file-writable "js/src/old-configure.in")
323 (make-file-writable "js/src/old-configure")
324 (make-file-writable "mozglue/build/moz.build")
325 (invoke "patch" "-p1" "--force"
326 "--input" "debian/patches/disable-mozglue.patch")
327 (invoke "touch" "js/src/configure")
328 (chdir "js/src")
329 #t))
330 (replace 'configure
331 (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
332 ;; The configure script does not accept environment variables
333 ;; as arguments.
334 (let ((out (assoc-ref outputs "out")))
335 (setenv "SHELL" (which "sh"))
336 (setenv "CONFIG_SHELL" (which "sh"))
337 (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
338 "/bin/autoconf"))
339 (apply invoke "./configure"
340 (cons (string-append "--prefix=" out)
341 configure-flags))))))))
342 (native-inputs
343 `(("autoconf" ,autoconf-2.13)
344 ("automake" ,automake)
345 ,@(package-native-inputs mozjs-38))))))
346
204cfbe1
RW
347(define-public mozjs-60
348 ;; No releases yet at <https://archive.mozilla.org/pub/spidermonkey/releases/>.
349 ;; While we could take a snapshot of the complete mozilla-esr60 repository at
350 ;; <https://treeherder.mozilla.org/#/jobs?repo=mozilla-esr60&filter-searchStr=sm-tc>,
351 ;; we take the Debian version instead, because it is easier to work with.
352 (package
353 (inherit mozjs-38)
354 (version "60.2.3-2")
355 (source (origin
356 (method git-fetch)
357 (uri (git-reference
358 (url "https://salsa.debian.org/gnome-team/mozjs60.git")
359 (commit (string-append "debian/" version))))
360 (file-name (git-file-name "mozjs" version))
361 (sha256
362 (base32
363 "091w050rwzrdcbgyi934k2viyccmlqxrp13sm2mql71mabb5dai6"))))
364 (arguments
365 `(#:tests? #f ; FIXME: all tests pass, but then the check phase fails anyway.
366 #:test-target "check-jstests"
367 #:configure-flags
368 '("--enable-ctypes"
369 "--enable-optimize"
370 "--enable-pie"
371 "--enable-readline"
372 "--enable-shared-js"
373 "--enable-system-ffi"
374 "--with-system-nspr"
375 "--with-system-zlib"
376 "--with-system-icu"
377 "--with-intl-api"
378 ;; This is important because without it gjs will segfault during the
379 ;; configure phase. With jemalloc only the standalone mozjs console
380 ;; will work.
381 "--disable-jemalloc")
382 #:phases
383 (modify-phases %standard-phases
384 (replace 'configure
385 (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
386 ;; The configure script does not accept environment variables as
387 ;; arguments. It also must be run from a different directory,
388 ;; but not the root directory either.
389 (let ((out (assoc-ref outputs "out")))
390 (mkdir "run-configure-from-here")
391 (chdir "run-configure-from-here")
392 (setenv "SHELL" (which "sh"))
393 (setenv "CONFIG_SHELL" (which "sh"))
394 (setenv "AUTOCONF" (string-append (assoc-ref inputs "autoconf")
395 "/bin/autoconf"))
396 (apply invoke "../js/src/configure"
397 (cons (string-append "--prefix=" out)
398 configure-flags))
399 #t)))
400 (add-after 'unpack 'disable-broken-tests
401 (lambda _
402 ;; This test assumes that /bin exists and contains certain
403 ;; executables.
404 (delete-file "js/src/tests/shell/os.js")
405 #t)))))
406 (native-inputs
407 `(("autoconf" ,autoconf)
408 ("automake" ,automake)
409 ("which" ,which)
410 ("perl" ,perl)
411 ("pkg-config" ,pkg-config)
412 ("python" ,python-2)))))
413
ad21d767
MW
414(define mozilla-compare-locales
415 (origin
416 (method hg-fetch)
417 (uri (hg-reference
418 (url "https://hg.mozilla.org/l10n/compare-locales/")
419 (changeset "RELEASE_3_3_0")))
420 (file-name "mozilla-compare-locales")
421 (sha256 (base32 "0biazbq7vbi99b99rfn4szwyx032dkpi09c9z4zs6f1br0f86iy1"))))
422
423(define (mozilla-locale locale changeset hash-string)
424 (origin
425 (method hg-fetch)
426 (uri (hg-reference
427 (url (string-append "https://hg.mozilla.org/l10n-central/"
428 locale))
429 (changeset changeset)))
430 (file-name (string-append "mozilla-locale-" locale))
431 (sha256 (base32 hash-string))))
432
433(define-syntax-rule (mozilla-locales (hash-string changeset locale) ...)
434 (list (mozilla-locale locale changeset hash-string)
435 ...))
436
437(define all-mozilla-locales
438 (mozilla-locales
439 ;; sha256 changeset locale
440 ;;---------------------------------------------------------------------------
441 ("0pybx6j2ycbrr1xmv0spv19sd8a1dyzcs8kf6pzn71w8y6kiagcf" "35959cf2343c" "ach")
442 ("0dixmkha738w7fkx20nx95xkfyrqb9vczpy6m03qnqfvb76xaxj5" "e8dc1010f909" "af")
443 ("124j09va25gwfxdzyfixrli0skxv53c7niagjyp7g3a3kcv2lbhc" "4c67f6b96a7b" "an")
444 ("0flgqll3xx0ym0zj0w9j2jw3fmhs6h9m4l5da6m0bpnk5ff80r06" "34cbea5f44a5" "ar")
445 ("0kdb1yqfbfz508f4p77z3p1v6fwy190vs5ipj58hgdixjgbxkqay" "b4790b27633c" "ast")
446 ("1vm5xw6wg12pygswd3p0qpkaxyryah6nif5n15chb4sb42c1gqcm" "96d341bf49d4" "az")
447 ("1j2qrrws51qij6haz5b77n5vzqhsxgs1ppqqw4mdrkacwvz4ciwh" "4adaede00646" "be")
448 ("0ydr8f9lbd51prgcbjb5yacb461j8va0s5bqfs0rnglkvhmk6ard" "d1140972aefe" "bg")
449 ("0wyw90zjp8kpd1gljng00in9wr2cf59ww6z002lgx5k4gibnqcfd" "2b3ce92c2310" "bn")
450 ("0kkq621h1qdmimyrmms9g5p70m54z2ddw4cd962nqbkrnmabq9vn" "426896350893" "br")
451 ("0vibhnb3cbpbgf10db04g6vm372kb9i27p0jkwif019f7qprswd8" "7463f339ce07" "bs")
452 ("1l8cn2fqfvx7bswzfy9vavv8cd32ha9ygdxxdbxi64wcgw0f80bf" "dab3f05125e4" "ca")
453 ("0fik17y8zyg9w82lq501ic73a53c0q9r8v4zgn9bnzgsygig8qpq" "ebb9d989275a" "cak")
454 ("0sj29v6144h39wzb4rvxph3cwgvs4gzkgpr0463d3fcs6jdi0kjs" "522352780348" "cs")
455 ("1nz8jlx62l69jcdi59hlk8jysm15sh3d1cxqginjmx7w351wsidm" "0791b954c333" "cy")
456 ("1vc01q1vlq26xm1vm1x0119jawxxp975p9k8ashmiwncl1bvqb48" "121f5f876f4c" "da")
457 ("1iqny61rg57banfbbskc2y3pr6d35fabnxmynv7vxm9jd86pndz3" "95fb3e99a2bc" "de")
458 ("06v9j8acx5h8za7m65v6qm0wjbkx6vm46m8sigcp69phyg3fjc96" "90e681b74587" "dsb")
459 ("0lbk90x2dxdbh63fycqxspx6jqq2zlzys6grg45balw8yyvzqrkz" "58ba4c13fd42" "el")
460 ("0c2ypvy0z8g78s5158v6h9khckq1xps34r5wbiiciix289m43dgl" "8953d8c98a30" "en-CA")
461 ("0z3riz3w2z6p710p90ridmwwam4snnz5mn90gd4jc1h2n7vc9mr0" "5a2b9bca3f52" "en-GB")
462 ("102gn3h4ap8c3x1p7vfc88vapkfiz6264y6byhxy1axxjk3x3a77" "e87cb1c61d6e" "eo")
463 ("148wj6wsx0aq7cpaxk8njj7cb1wfjr2m96dgxq6b3qcv781ldvjn" "5db15fdf95d5" "es-AR")
464 ("0r11d8vzvbyz17n371byvkrnszcv1zhr7rg64i58xra3y6d7is7n" "ce2ee0e51a92" "es-CL")
465 ("1xmqa8p7lpqvkgg879hfnmf6kxcpawjk8z31cdzfp1hrdlmxg8n7" "7346617620f3" "es-ES")
466 ("0jxv3jh2018lnybr9mzqrffvwmr87yab9bh8lxqjj294fxw1hrxm" "687f05eb0c58" "es-MX")
467 ("1rpgv7pajv4xldsn1xxsia5j72vn3x8zl5wmbzkyw56lvn9fckvf" "839a5029c496" "et")
468 ("0hxp4fr3y05rkpamdb1hlmybn6d3bv3rcawjm3axbpqxbyfdpfzc" "54e8d87230c9" "eu")
469 ("1y50knymnmcihw8bhvahicc386mjm6dx4hx0j6fv8sl23wzx2h9m" "c5ffca960f9c" "fa")
470 ("0pj9zgi0c3yl3myhvb5afiijayp2lqzhlk630ahxn5hgjgkz0lx7" "75c000a8538d" "ff")
471 ("199jg0zv7wp1cq0ik2hf84j99jx5vq2jwac0gaayvjzkh2z83jqr" "f11b2e689e7b" "fi")
472 ("1vxkiwwni7470ywy99arxxa56ljkhjrhxslsp1l1l61g6gdbbspr" "49ec4f791806" "fr")
473 ("0d8gwdcj0jpjv03nhjds8jrg86pg371xpylaibwri76wlyl7m54i" "faa761a5cfdc" "fy-NL")
474 ("0nipbxx11a2sjadzhbi88vgknw5hzr4nqy2722q3kc1212jbi754" "5bd9466f9f9d" "ga-IE")
475 ("0bay8mrm65cvmnvqpwqgzr0h3cb18ifzg5kbsbxcvdfm9xv0zi9g" "a4f6a47e82dd" "gd")
476 ("00kn5w3nnpw1pxg6hhrn9asf9hgpjd6ia4038iwzcqs68w887qcy" "6c2aa01ada4e" "gl")
477 ("0jj13i0ach85c975vaz2rr83mibs29ipssa7qsjkb0y2ch6xya1k" "c2d607e36cb5" "gn")
478 ("1nhqbgzilcb0pr7941dxkhg079bf8v7ldikp1s5xli34wf9sabm2" "f34465d6ac1c" "gu-IN")
479 ("11bh0541d996cfin1zy72l66753q94i4idgv2waf0h40h9g3z1bm" "c2ecb2762274" "he")
480 ("1lslji7hh5lx5ig1xgfjh4cdindsgh3n2a7qlvzwz96gda43lvv4" "94d2bb10ee03" "hi-IN")
481 ("1nx5yw00l25i3m3grdm29mi9mi7h0cy5qx02pypir754pk3hiwcc" "08df0d94edd5" "hr")
482 ("19yc9dk2pwqycynmx58d1ik6x4mnyfxscgr6sg676dpl613xd7nq" "21b614e77025" "hsb")
483 ("0l3z64jlx6b6ivk1b5hwqyx9hm1m5721ywnb2m4zmg3g9fw4vn7f" "f82cad7170af" "hu")
484 ("1sn0dxbbf2zwcpybwcw77qb4p0hf6fxapnsnn4avaab5g55dlgz4" "d94c30920396" "hy-AM")
485 ("0c92cqxrhv4317kirmhpjk7mrq44yn6fp3v6syxnhz7xwxnhshjm" "6a5f176b0626" "ia")
486 ("03gyg9gqsd6pwb9nydglhm46fi2wk2p2qygmhmrf8hnav3ba7n0r" "94e4302e0f85" "id")
487 ("0ky8aaps92mn56rvkwn0i13wg8av8hzi1fvr0ahqhjcpj5sfgdwq" "eca348a59888" "is")
488 ("01py0sfg7nljcsgpivryrvai4p4wzbcvhgc2ymr19r579nv1vw7g" "d541a6197359" "it")
489 ("0iv7vmj43njmi7g1gjzsv68ax4j502d2wnkvbfz1rx11lrqs7yw1" "a5ab3a1d95b7" "ja")
490 ("1sr9ccshcw6agbj4hbnpblxixb1jz0m36glas6f9ahxmi7m605si" "63763ffa5a94" "ja-JP-mac")
491 ("1as33pzcsdkynrj16dv7w642vl6plbhk650am4l5djwm64f2rgms" "aa83e8555ddc" "ka")
492 ("1jwaqb5qps3i5y9iw8l2hrwa0n8lfnx1k9x0p54y3jkh6p3q3fzc" "0e0e25c26247" "kab")
493 ("0cjfiwv0q5i8d7fpwb4m2w5ahq687dqjlwlicgpa443yi2zsxr4s" "33117723ceb1" "kk")
494 ("0k5b56cv39aaxf9r0p9c27f3fp6yq2ffd4w6qmd0ibpl69sm629d" "aff7b2a7825e" "km")
495 ("1a0zg96jgq4zn9cz0h2qwc0vv1fbkfzs5qrgabg62wqgz286jvvv" "ea91638cb1dd" "kn")
496 ("0jhmv2n3yx55r6fg3myg7j1c1nhsv25g016m6lh2j023xbr723gp" "88821009b5b3" "ko")
497 ("06bybgv4m4i7r9p0qld65j31vbrnljhsdj649dl93msv2r69ilif" "88685d5f07b3" "lij")
498 ("1bzjf8smw6ngi88j5g3fawrg54m8fifbhshwjbgkpj7rnrpjgh4w" "e046c7ffa7d0" "lt")
499 ("18dmzmpavijb7fwzffas0j5nb6byqp8h6ki7hhf6qb35diqgfq6n" "c520ef4f576c" "lv")
500 ("055zf7xj5h1h8mzxj1cjzhngpcvg2p5vs2dmffsa5zfprj02d0dm" "9e43723f18ad" "mk")
501 ("1496fbyyzcl075gzcd3xy50h9jyhnzgb544k1scji56yhyfajacb" "ce615fef92c1" "mr")
502 ("1wc1q8ksry181pvnysqsq4dhhsg5adw5vgqafmmq5sf6i2bwn2z0" "4fefe88cfaee" "ms")
503 ("0awf6mrdwdhy2yvxynssvp1zg1nc2fqbmg2d2bhjcib69zx944xw" "3987a06866fd" "my")
504 ("1hycvz7i4jd40hfs5abx6sgfdkafg0jhdgqih9b7lb08aqcl35pj" "2b3b8997d9a1" "nb-NO")
505 ("048z1ib46izwryyy8l1x71kq4775n7l2ilbskhsyrbxqryma13k8" "f25324281615" "ne-NP")
506 ("1qkxqpyr4la9bn1bqsgc2h9869arglh9n2kwpkq6722jzdbynkz2" "04c7d32c57f6" "nl")
507 ("08gnmdll55dbqj7qs63gq1kljbvg24nzns6q4m0av3sszsic0jv5" "5587520e5019" "nn-NO")
508 ("1yh2p4ipj5p2b7gh0xxj0n7ndvwn5bw2773ibrh7vz932mkzhhjn" "499386b02695" "oc")
509 ("0kjbnixjzv9hvyba4ll20gs76vx84pviy134fvpjp9lfjpnpib55" "31c01c325675" "pa-IN")
510 ("0g61imvr4639bbydyi0kwc1il7l1gzlfij4ywx7hdcmq2x6vgb9v" "fb5f3b8dea09" "pl")
511 ("13n68d7z94d7943m6fwl4kizbqm3wp82xz69vng4w9vyqlvv7d41" "9a541cbdc748" "pt-BR")
512 ("1j8afvrl1afmj2zixrp91rrhag5w4xw90raca1ic6mxyih9kvdi4" "edc959a685c2" "pt-PT")
513 ("0wf4a6q9nvcmam2g8ksbymjdnrz59pdr5nirfpjprfhifjmxx4nn" "d2699db715cd" "rm")
514 ("1k9qalir5pbh490w1mxyq31yhy9hbxsyrrk11hwlwlgn6syp9nvp" "b5460a9017bc" "ro")
515 ("1avy6wyfa5lbvy36wai6mwhhh6x1y8a0jyjk8hvjn52yfxj1gypk" "59ffa8ad047a" "ru")
516 ("1cakhm4jxcw1ij0l1vhxw74hsp5wg68i3319dkdncyyc5a2s1qv9" "8b3c8a7ebdfa" "si")
517 ("0s534r09bqdfvw3q17y9b1035kzzlafjv656v73mqhyz3fkffsx5" "cb39dc77980e" "sk")
518 ("1s58vgmnb9aiaiaqwwcivq3iyzpzj527w2aqh2nrh6xmaw7f43sr" "17d7969b1d9a" "sl")
519 ("147qm7x5z8rkf24jpqvkdlqg0fjz1l3zwnaxvkh9y2jpzv7m0x7z" "c55b0e9ff99d" "son")
520 ("0nn4r1rxi8cy7x9nmn5ljd8gcsn2rjl2ma2j7waxkafkm4rs6n20" "2bb3808072da" "sq")
521 ("0jsb01b94z7qbm59yaj56nb7yx7a6hpgw8v6nzwhbvmnmcsird4p" "c323c0d02d61" "sr")
522 ("1n7vv9y4sk3gig56rgfd2jk8jr2160grxk31bd1wkm7fvbndd259" "4220ce487cbc" "sv-SE")
523 ("06270mq7gajxfrsb8gqd25v2dac68ask5vvlh6kkkp3hrgy02vid" "6a1dbc2fe1d3" "ta")
524 ("10az7pd3npa7n8wq0qywvsj2qrx9592i2wffs3rnc1fviv1i1q0y" "028505b5ecd1" "te")
525 ("0yj0c3iyibb3jyypvyiyhbr9asxa48v0nq21kcf9gphi8fnyp5if" "e44d38b6a67b" "th")
526 ("1qc4nvhw834lx7p304fxma0fjdr4xfj4lf69dhh6biqz795lx45p" "1e0771d95708" "tr")
527 ("1g4y2yq5xp61ncy7c08j7fqqr1jc0m1hjxmbg5659wzif3b3dkg4" "e3c96943e98f" "uk")
528 ("1zbi28z1c3p5il7ndixyjsv4nrimzq36zjvlmq10am38ycqr9df8" "f35da1b02691" "ur")
529 ("1jrxjjj8k771y0wljqbadxdj4pasg0771jmg4l3hvpgs929i3j9g" "6fd2084b3efe" "uz")
530 ("1f8sqgxzgqmw6vzjv3f49lg43q09i3j62f471864vr71815agl8n" "33b5dfd0cd63" "vi")
531 ("0ssnsbxw3q5k88fa081gkn1mbqn4j7bm6vb7yvz6h44j214xkz9x" "2d87c0740715" "xh")
532 ("0kd3mrvvgczhsmw4rvpxxxc71bb469ayr8r4azf7gc0y5nmlm950" "a2b6625688d3" "zh-CN")
533 ("0qy1asyfplkyc89z3g3gfm7b32aka92350b3ayv9d9dcgwxmfdwz" "4d6e959a13d1" "zh-TW")))
534
bfb48f4f 535(define (mozilla-patch file-name changeset hash)
ae71cd8a 536 "Return an origin for CHANGESET from the mozilla-esr60 repository."
bfb48f4f
MW
537 (origin
538 (method url-fetch)
ae71cd8a 539 (uri (string-append "https://hg.mozilla.org/releases/mozilla-esr60/raw-rev/"
bfb48f4f
MW
540 changeset))
541 (sha256 (base32 hash))
542 (file-name file-name)))
543
948879ee
MW
544(define* (computed-origin-method gexp-promise hash-algo hash
545 #:optional (name "source")
546 #:key (system (%current-system))
547 (guile (default-guile)))
548 "Return a derivation that executes the G-expression that results
549from forcing GEXP-PROMISE."
550 (mlet %store-monad ((guile (package->derivation guile system)))
551 (gexp->derivation (or name "computed-origin")
552 (force gexp-promise)
2a1ec7bc 553 #:graft? #f ;nothing to graft
948879ee
MW
554 #:system system
555 #:guile-for-build guile)))
556
c90c0bd5
MW
557(define %icecat-version "68.6.0-guix0-preview1")
558(define %icecat-build-id "20200309000000") ;must be of the form YYYYMMDDhhmmss
948879ee
MW
559
560;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
561;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
562;; script from the upstream IceCat project.
563(define icecat-source
564 (let* ((base-version (first (string-split %icecat-version #\-)))
565
566 (major-version (first (string-split base-version #\.)))
567 (minor-version (second (string-split base-version #\.)))
568 (sub-version (third (string-split base-version #\.)))
569
570 (upstream-firefox-version (string-append base-version "esr"))
571 (upstream-firefox-source
572 (origin
573 (method url-fetch)
574 (uri (string-append
575 "https://ftp.mozilla.org/pub/firefox/releases/"
576 upstream-firefox-version "/source/"
577 "firefox-" upstream-firefox-version ".source.tar.xz"))
578 (sha256
579 (base32
c90c0bd5 580 "17qwfq9hwra8jarawy8k2sqfa6hdhwa9qk84ndr6gjvmxcy22a14"))))
948879ee 581
c90c0bd5 582 (upstream-icecat-base-version "68.6.0") ; maybe older than base-version
ad21d767 583 ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
c90c0bd5 584 (gnuzilla-commit "9dcb24d885eae5973eb2245b532b158c685d707a")
948879ee
MW
585 (gnuzilla-source
586 (origin
587 (method git-fetch)
588 (uri (git-reference
589 (url "git://git.savannah.gnu.org/gnuzilla.git")
590 (commit gnuzilla-commit)))
9b096517
MW
591 (file-name (git-file-name "gnuzilla"
592 ;;upstream-icecat-base-version
593 (string-take gnuzilla-commit 8)))
948879ee
MW
594 (sha256
595 (base32
c90c0bd5 596 "1y3jmh055vmx44gsjgwxvwv3zcyvz8pc5mhgrwkzm0ybbwpp2pqi"))))
948879ee
MW
597
598 (makeicecat-patch
599 (local-file (search-patch "icecat-makeicecat.patch"))))
600
601 (origin
602 (method computed-origin-method)
603 (file-name (string-append "icecat-" %icecat-version ".tar.xz"))
604 (sha256 #f)
605 (uri
606 (delay
607 (with-imported-modules '((guix build utils))
608 #~(begin
609 (use-modules (guix build utils))
610 (let ((firefox-dir
611 (string-append "firefox-" #$base-version))
612 (icecat-dir
ad21d767 613 (string-append "icecat-" #$%icecat-version)))
948879ee
MW
614
615 (mkdir "/tmp/bin")
616 (set-path-environment-variable
617 "PATH" '("bin")
618 (list "/tmp"
619 #+(canonical-package bash)
620 #+(canonical-package coreutils)
621 #+(canonical-package findutils)
622 #+(canonical-package patch)
623 #+(canonical-package xz)
624 #+(canonical-package sed)
625 #+(canonical-package grep)
626 #+(canonical-package bzip2)
627 #+(canonical-package gzip)
628 #+(canonical-package tar)
629 #+rename))
630
631 (symlink #+(file-append rename "/bin/rename")
632 "/tmp/bin/prename")
633
634 ;; We copy the gnuzilla source directory because it is
635 ;; read-only in 'gnuzilla-source', and the makeicecat script
636 ;; uses "cp -a" to copy parts of it and assumes that the
637 ;; copies will be writable.
638 (copy-recursively #+gnuzilla-source "/tmp/gnuzilla"
639 #:log (%make-void-port "w"))
640
641 (with-directory-excursion "/tmp/gnuzilla"
642 (make-file-writable "makeicecat")
643 (invoke "patch" "--force" "--no-backup-if-mismatch"
644 "-p1" "--input" #+makeicecat-patch)
645 (patch-shebang "makeicecat")
646 (substitute* "makeicecat"
3e605b69
MW
647 (("^FFMAJOR=(.*)" all ffmajor)
648 (unless (string=? #$major-version
649 (string-trim-both ffmajor))
650 ;; The makeicecat script cannot be expected to work
651 ;; properly on a different version of Firefox, even if
652 ;; no errors occur during execution.
653 (error "makeicecat major version mismatch"))
948879ee
MW
654 (string-append "FFMAJOR=" #$major-version "\n"))
655 (("^FFMINOR=.*")
656 (string-append "FFMINOR=" #$minor-version "\n"))
657 (("^FFSUB=.*")
658 (string-append "FFSUB=" #$sub-version "\n"))
948879ee
MW
659 (("^DATA=.*")
660 "DATA=/tmp/gnuzilla/data\n")
948879ee
MW
661 (("/bin/sed")
662 #+(file-append (canonical-package sed) "/bin/sed"))))
663
664 (format #t "Unpacking upstream firefox tarball...~%")
665 (force-output)
666 (invoke "tar" "xf" #+upstream-firefox-source)
667 (rename-file firefox-dir icecat-dir)
668
669 (with-directory-excursion icecat-dir
ad21d767
MW
670 (format #t "Populating l10n directory...~%")
671 (force-output)
05947d92 672 (mkdir "l10n")
ad21d767
MW
673 (with-directory-excursion "l10n"
674 (for-each
675 (lambda (locale-dir)
676 (let ((locale
677 (string-drop (basename locale-dir)
678 (+ 32 ; length of hash
679 (string-length "-mozilla-locale-")))))
680 (format #t " ~a~%" locale)
681 (force-output)
682 (copy-recursively locale-dir locale
683 #:log (%make-void-port "w"))
684 (for-each make-file-writable (find-files locale))
685 (with-directory-excursion locale
686 (when (file-exists? ".hgtags")
687 (delete-file ".hgtags"))
688 (mkdir-p "browser/chrome/browser/preferences")
689 (call-with-output-file
690 "browser/chrome/browser/preferences/advanced-scripts.dtd"
691 (lambda (port) #f)))))
692 '#+all-mozilla-locales)
693 (copy-recursively #+mozilla-compare-locales
694 "compare-locales"
695 #:log (%make-void-port "w"))
696 (delete-file "compare-locales/.gitignore")
697 (delete-file "compare-locales/.hgignore")
698 (delete-file "compare-locales/.hgtags"))
699
948879ee
MW
700 (format #t "Running makeicecat script...~%")
701 (force-output)
ad21d767 702 (invoke "bash" "/tmp/gnuzilla/makeicecat"))
948879ee 703
34369f31 704 (format #t "Packing IceCat source tarball...~%")
948879ee
MW
705 (force-output)
706 (invoke "tar" "cfa" #$output
8cf160e1
MW
707 ;; Avoid non-determinism in the archive. We set the
708 ;; mtime of files in the archive to early 1980 because
709 ;; the build process fails if the mtime of source
710 ;; files is pre-1980, due to the creation of zip
711 ;; archives.
712 "--mtime=@315619200" ; 1980-01-02 UTC
948879ee
MW
713 "--owner=root:0"
714 "--group=root:0"
715 "--sort=name"
716 icecat-dir)
717
718 #t))))))))
719
be0f6112
AE
720(define-public icecat
721 (package
722 (name "icecat")
24886c13 723 (version %icecat-version)
46ce12d0 724 (source icecat-source)
be0f6112
AE
725 (build-system gnu-build-system)
726 (inputs
727 `(("alsa-lib" ,alsa-lib)
1ae6df81 728 ("bzip2" ,bzip2)
90e1cdae 729 ("cups" ,cups)
be0f6112 730 ("dbus-glib" ,dbus-glib)
90e1cdae
MW
731 ("gdk-pixbuf" ,gdk-pixbuf)
732 ("glib" ,glib)
002c3e6d
MW
733 ("gtk+" ,gtk+)
734 ("gtk+-2" ,gtk+-2)
257e3247 735 ("graphite2" ,graphite2)
74c7af9f
MW
736 ("pango" ,pango)
737 ("freetype" ,freetype)
257e3247 738 ("harfbuzz" ,harfbuzz)
90e1cdae
MW
739 ("libcanberra" ,libcanberra)
740 ("libgnome" ,libgnome)
7cba7647 741 ("libjpeg-turbo" ,libjpeg-turbo)
94e96f7f
MW
742 ("libogg" ,libogg)
743 ;; ("libtheora" ,libtheora) ; wants theora-1.2, not yet released
744 ("libvorbis" ,libvorbis)
74c7af9f 745 ("libxft" ,libxft)
94e96f7f 746 ("libevent" ,libevent)
90e1cdae
MW
747 ("libxinerama" ,libxinerama)
748 ("libxscrnsaver" ,libxscrnsaver)
9f7ae77f 749 ("libxcomposite" ,libxcomposite)
be0f6112 750 ("libxt" ,libxt)
1ae6df81 751 ("libffi" ,libffi)
e67ad553 752 ("ffmpeg" ,ffmpeg)
037d5913 753 ("libvpx" ,libvpx-1.7)
13b284d9
MW
754 ("icu4c" ,icu4c)
755 ("pixman" ,pixman)
74c7af9f 756 ("pulseaudio" ,pulseaudio)
be0f6112 757 ("mesa" ,mesa)
90e1cdae 758 ("mit-krb5" ,mit-krb5)
6d328879 759 ;; See <https://bugs.gnu.org/32833>
6c83c483 760 ;; and related comments in the 'remove-bundled-libraries' phase.
6d328879
MW
761 ;; UNBUNDLE-ME! ("nspr" ,nspr)
762 ;; UNBUNDLE-ME! ("nss" ,nss)
429c8284 763 ("shared-mime-info" ,shared-mime-info)
9bc79c11 764 ("sqlite" ,sqlite)
90e1cdae 765 ("startup-notification" ,startup-notification)
be0f6112 766 ("unzip" ,unzip)
1ae6df81
LC
767 ("zip" ,zip)
768 ("zlib" ,zlib)))
c4c4cc05 769 (native-inputs
46ce12d0
MW
770 ;; The following patches are specific to the Guix packaging of IceCat,
771 ;; and therefore we prefer to leave them out of 'source', which should be
772 ;; a tarball suitable for compilation on any system that IceCat supports.
773 ;; (Bug fixes and security fixes, however, should go in 'source').
ad21d767
MW
774 `(;; XXX TODO: Adapt these patches to IceCat 68.
775 ;; ("icecat-avoid-bundled-libraries.patch"
776 ;; ,(search-patch "icecat-avoid-bundled-libraries.patch"))
777 ;; ("icecat-use-system-graphite2+harfbuzz.patch"
778 ;; ,(search-patch "icecat-use-system-graphite2+harfbuzz.patch"))
779 ;; ("icecat-use-system-media-libs.patch"
780 ;; ,(search-patch "icecat-use-system-media-libs.patch"))
46ce12d0
MW
781
782 ("patch" ,(canonical-package patch))
783
ad21d767
MW
784 ("rust" ,rust)
785 ("cargo" ,rust "cargo")
786 ("rust-cbindgen" ,rust-cbindgen)
787 ("llvm" ,llvm)
788 ("clang" ,clang)
e67ad553 789 ("perl" ,perl)
ad21d767
MW
790 ("node" ,node)
791 ("python" ,python)
792 ("python-2" ,python-2)
c4c4cc05 793 ("python2-pysqlite" ,python2-pysqlite)
002c3e6d 794 ("yasm" ,yasm)
ad21d767 795 ("nasm" ,nasm) ; XXX FIXME: only needed on x86_64 and i686
bfb48f4f 796 ("pkg-config" ,pkg-config)
002c3e6d 797 ("autoconf" ,autoconf-2.13)
bfb48f4f 798 ("which" ,which)))
be0f6112 799 (arguments
74c7af9f
MW
800 `(#:tests? #f ; no check target
801 #:out-of-source? #t ; must be built outside of the source directory
73b1b4eb
LC
802
803 ;; XXX: There are RUNPATH issues such as
804 ;; $prefix/lib/icecat-31.6.0/plugin-container NEEDing libmozalloc.so,
805 ;; which is not in its RUNPATH, but they appear to be harmless in
806 ;; practice somehow. See <http://hydra.gnu.org/build/378133>.
807 #:validate-runpath? #f
808
8d956d86 809 #:configure-flags `("--enable-default-toolkit=cairo-gtk3"
9502ea3e
MW
810
811 "--with-distribution-id=org.gnu"
812
34369f31
MW
813 ;; Do not require addons in the global app
814 ;; directory to be signed by Mozilla.
815 "--with-unsigned-addon-scopes=app"
816
90e1cdae
MW
817 "--enable-startup-notification"
818 "--enable-pulseaudio"
90e1cdae 819
9502ea3e
MW
820 "--disable-tests"
821 "--disable-updater"
822 "--disable-crashreporter"
9502ea3e 823 "--disable-eme"
90e1cdae 824 "--disable-gconf"
e67ad553 825
90e1cdae 826 ;; Building with debugging symbols takes ~5GiB, so
1ae6df81
LC
827 ;; disable it.
828 "--disable-debug"
829 "--disable-debug-symbols"
830
8d956d86
MW
831 ;; Clang is needed to build Stylo, Mozilla's new
832 ;; CSS engine. We must specify the clang paths
833 ;; manually, because otherwise the Mozilla build
834 ;; system looks in the directories returned by
835 ;; llvm-config --bindir and llvm-config --libdir,
836 ;; which return paths in the llvm package where
837 ;; clang is not found.
838 ,(string-append "--with-clang-path="
839 (assoc-ref %build-inputs "clang")
840 "/bin/clang")
841 ,(string-append "--with-libclang-path="
842 (assoc-ref %build-inputs "clang")
843 "/lib")
844
5bdec7d6
MW
845 ;; Hack to work around missing
846 ;; "unofficial" branding in icecat.
bfb48f4f
MW
847 "--enable-official-branding"
848
90e1cdae 849 ;; Avoid bundled libraries.
1ae6df81 850 "--with-system-zlib"
90e1cdae 851 "--with-system-bz2"
7cba7647 852 "--with-system-jpeg" ; must be libjpeg-turbo
ad21d767
MW
853 ;; UNBUNDLE-ME! "--with-system-libevent"
854 ;; UNBUNDLE-ME! "--with-system-ogg"
855 ;; UNBUNDLE-ME! "--with-system-vorbis"
856 ;; UNBUNDLE-ME! "--with-system-theora" ; wants theora-1.2, not yet released
857 ;; UNBUNDLE-ME! "--with-system-libvpx"
483ab08f 858 "--with-system-icu"
6d328879
MW
859
860 ;; See <https://bugs.gnu.org/32833>
6c83c483
MW
861 ;; and related comments in the
862 ;; 'remove-bundled-libraries' phase below.
6d328879
MW
863 ;; UNBUNDLE-ME! "--with-system-nspr"
864 ;; UNBUNDLE-ME! "--with-system-nss"
865
ad21d767
MW
866 ;; UNBUNDLE-ME! "--with-system-harfbuzz"
867 ;; UNBUNDLE-ME! "--with-system-graphite2"
13b284d9 868 "--enable-system-pixman"
5b17fabc 869 "--enable-system-ffi"
ad21d767 870 ;; UNBUNDLE-ME! "--enable-system-sqlite"
1ae6df81 871
98a046cd
AE
872 ;; Fails with "--with-system-png won't work because
873 ;; the system's libpng doesn't have APNG support".
874 ;; According to
875 ;; http://sourceforge.net/projects/libpng-apng/ ,
876 ;; "the Animated Portable Network Graphics (APNG)
877 ;; is an unofficial extension of the Portable
878 ;; Network Graphics (PNG) format";
879 ;; we probably do not wish to support it.
1ae6df81 880 ;; "--with-system-png"
5b17fabc 881 )
1ae6df81 882
e80a4479 883 #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
7d141788 884
9f7ae77f 885 #:modules ((ice-9 ftw)
6cde5c34 886 (ice-9 rdelim)
37db2370 887 (ice-9 regex)
6cde5c34 888 (ice-9 match)
ad21d767
MW
889 (srfi srfi-34)
890 (srfi srfi-35)
429c8284
MW
891 (rnrs bytevectors)
892 (rnrs io ports)
893 (guix elf)
894 (guix build gremlin)
9f7ae77f 895 ,@%gnu-build-system-modules)
be0f6112 896 #:phases
90e1cdae 897 (modify-phases %standard-phases
46ce12d0
MW
898 (add-after 'unpack 'apply-guix-specific-patches
899 (lambda* (#:key inputs native-inputs #:allow-other-keys)
900 (let ((patch (string-append (assoc-ref (or native-inputs inputs)
901 "patch")
902 "/bin/patch")))
903 (for-each (match-lambda
904 ((label . file)
905 (when (and (string-prefix? "icecat-" label)
906 (string-suffix? ".patch" label))
907 (format #t "applying '~a'...~%" file)
908 (invoke patch "--force" "--no-backup-if-mismatch"
909 "-p1" "--input" file))))
910 (or native-inputs inputs)))
911 #t))
912 (add-after 'apply-guix-specific-patches 'remove-bundled-libraries
913 (lambda _
914 ;; Remove bundled libraries that we don't use, since they may
915 ;; contain unpatched security flaws, they waste disk space and
916 ;; memory, and may cause confusion.
917 (for-each (lambda (file)
918 (format #t "deleting '~a'...~%" file)
919 (delete-file-recursively file))
920 '(;; FIXME: Removing the bundled icu breaks configure.
921 ;; * The bundled icu headers are used in some places.
922 ;; * The version number is taken from the bundled copy.
923 ;;"intl/icu"
924 ;;
925 ;; FIXME: A script from the bundled nspr is used.
926 ;;"nsprpub"
927 ;;
928 ;; FIXME: With the update to IceCat 60, using system NSS
929 ;; broke certificate validation. See
930 ;; <https://bugs.gnu.org/32833>. For now, we use
931 ;; the bundled NSPR and NSS. TODO: Investigate,
932 ;; and try to unbundle these libraries again.
933 ;; UNBUNDLE-ME! "security/nss"
934 ;;
935 ;; TODO: Use more system media libraries. See:
936 ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
937 ;; * libtheora: esr60 wants v1.2, not yet released.
938 ;; * soundtouch: avoiding the bundled library would
939 ;; result in some loss of functionality. There's
940 ;; also an issue with exception handling
941 ;; configuration. It seems that this is needed in
942 ;; some moz.build:
943 ;; DEFINES['ST_NO_EXCEPTION_HANDLING'] = 1
944 ;; * libopus
945 ;; * speex
946 ;;
947 "modules/freetype2"
948 "modules/zlib"
ad21d767
MW
949 ;; "media/libjpeg" ; needed for now, because media/libjpeg/moz.build is referenced from config/external/moz.build
950 ;; UNBUNDLE-ME! "ipc/chromium/src/third_party/libevent"
951 ;; UNBUNDLE-ME! "media/libvpx"
952 ;; UNBUNDLE-ME! "media/libogg"
953 ;; UNBUNDLE-ME! "media/libvorbis"
954 ;; UNBUNDLE-ME! "media/libtheora" ; wants theora-1.2, not yet released
955 ;; UNBUNDLE-ME! "media/libtremor"
956 ;; UNBUNDLE-ME! "gfx/harfbuzz"
957 ;; UNBUNDLE-ME! "gfx/graphite2"
46ce12d0 958 "js/src/ctypes/libffi"
ad21d767
MW
959 ;; UNBUNDLE-ME! "db/sqlite3"
960 ))
46ce12d0
MW
961 #t))
962 (add-after 'remove-bundled-libraries 'link-libxul-with-libraries
963 (lambda _
964 ;; libxul.so dynamically opens libraries, so here we explicitly
965 ;; link them into libxul.so instead.
966 ;;
967 ;; TODO: It might be preferable to patch in absolute file names in
968 ;; calls to dlopen or PR_LoadLibrary, but that didn't seem to
969 ;; work. More investigation is needed.
970 (substitute* "toolkit/library/moz.build"
971 (("^# This library needs to be last" all)
972 (string-append "OS_LIBS += [
9f7ae77f 973 'GL', 'gnome-2', 'canberra', 'Xss', 'cups', 'gssapi_krb5',
002c3e6d 974 'avcodec', 'avutil', 'pulse' ]\n\n"
46ce12d0
MW
975 all)))
976 #t))
8e556719
JL
977 (add-after 'link-libxul-with-libraries 'fix-ffmpeg-runtime-linker
978 (lambda* (#:key inputs #:allow-other-keys)
429c8284
MW
979 (let* ((ffmpeg (assoc-ref inputs "ffmpeg"))
980 (libavcodec (string-append ffmpeg "/lib/libavcodec.so")))
981 ;; Arrange to load libavcodec.so by its absolute file name.
982 (substitute* "dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp"
983 (("libavcodec\\.so")
984 libavcodec))
985 ;; Populate the sandbox read-path whitelist as needed by ffmpeg.
986 (let* ((mime-info (assoc-ref inputs "shared-mime-info"))
987 (libavcodec-runpath (call-with-input-file libavcodec
988 (compose elf-dynamic-info-runpath
989 elf-dynamic-info
990 parse-elf
991 get-bytevector-all)))
992 (whitelist (cons (string-append mime-info "/share/mime/")
993 (map (lambda (dir)
994 (string-append dir "/"))
995 libavcodec-runpath)))
996 (whitelist-string (string-join whitelist ","))
997 (port (open-file "browser/app/profile/icecat.js" "a")))
998 (format #t "setting 'security.sandbox.content.read_path_whitelist' to '~a'~%"
999 whitelist-string)
1000 (format port "~%pref(\"security.sandbox.content.read_path_whitelist\", ~S);~%"
1001 whitelist-string)
1002 (close-output-port port))
1003 #t)))
94e96f7f
MW
1004 (replace 'bootstrap
1005 (lambda _
46ce12d0
MW
1006 (invoke "sh" "-c" "autoconf old-configure.in > old-configure")
1007 ;; 'configure' must be newer than 'old-configure.in', or else the
1008 ;; build system will raise an alarm and abort.
1009 (invoke "touch" "configure")))
e67ad553 1010 (add-after 'patch-source-shebangs 'patch-cargo-checksums
257e3247 1011 (lambda _
7d141788 1012 (use-modules (guix build cargo-utils))
e88735b4 1013 (let ((null-hash "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"))
ad21d767 1014 (substitute* '("Cargo.lock" "gfx/wr/Cargo.lock")
e67ad553
MW
1015 (("(\"checksum .* = )\".*\"" all name)
1016 (string-append name "\"" null-hash "\"")))
e80a4479 1017 (generate-all-checksums "third_party/rust"))
e67ad553 1018 #t))
8d956d86
MW
1019 (add-before 'configure 'augment-CPLUS_INCLUDE_PATH
1020 (lambda* (#:key build inputs #:allow-other-keys)
1021 ;; Here, we add additional entries to CPLUS_INCLUDE_PATH, to work
1022 ;; around a problem that otherwise occurs when attempting to
1023 ;; build Stylo, which requires Rust and Clang. Without these
1024 ;; additional entries, errors occur during the build indicating
1025 ;; that the <cstddef> and "c++config.h" headers cannot be found.
1026 ;; Note that the 'build' keyword argument contains the GNU
1027 ;; triplet, e.g. "x86_64-unknown-linux-gnu".
1028 (let ((gcc (assoc-ref inputs "gcc")))
1029 (setenv "CPLUS_INCLUDE_PATH"
1030 (string-append gcc "/include/c++" ":"
8b3dc667 1031 gcc "/include/c++/" build)))
46ce12d0
MW
1032 #t))
1033 (replace 'configure
1034 ;; configure does not work followed by both "SHELL=..." and
1035 ;; "CONFIG_SHELL=..."; set environment variables instead
1036 (lambda* (#:key outputs configure-flags #:allow-other-keys)
1037 (let* ((out (assoc-ref outputs "out"))
1038 (bash (which "bash"))
1039 (abs-srcdir (getcwd))
1040 (srcdir (string-append "../" (basename abs-srcdir)))
1041 (flags `(,(string-append "--prefix=" out)
1042 ,(string-append "--with-l10n-base="
1043 abs-srcdir "/l10n")
1044 ,@configure-flags)))
1045 (setenv "SHELL" bash)
1046 (setenv "CONFIG_SHELL" bash)
1047 (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
1048 (setenv "CC" "gcc") ; apparently needed when Stylo is enabled
7a1b2ba5 1049 (setenv "MOZ_BUILD_DATE" ,%icecat-build-id) ; avoid timestamp
46ce12d0
MW
1050 (mkdir "../build")
1051 (chdir "../build")
1052 (format #t "build directory: ~s~%" (getcwd))
1053 (format #t "configure flags: ~s~%" flags)
1054 (apply invoke bash
1055 (string-append srcdir "/configure")
1056 flags))))
ad21d767
MW
1057 (replace 'build
1058 ;; The build system often spuriously fails. See
1059 ;; <https://bugs.gentoo.org/show_bug.cgi?id=680934>. To
1060 ;; work around this, we try the standard 'build' phase up
1061 ;; to 5 times.
1062 (lambda args
1063 (let ((build (assoc-ref %standard-phases 'build)))
1064 (let retry ((remaining-attempts 5))
1065 (if (= remaining-attempts 1)
1066 (apply build args)
1067 (guard (c ((invoke-error? c)
1068 (format #t "~%Retrying build! (~a attempts remaining)~%~%"
1069 (- remaining-attempts 1))
1070 (force-output)
1071 (retry (- remaining-attempts 1))))
1072 (apply build args)))))))
37db2370
JK
1073 (add-after 'build 'neutralise-store-references
1074 (lambda _
1075 ;; Mangle the store references to compilers & other build tools in
1076 ;; about:buildconfig, reducing IceCat's closure by 1 GiB on x86-64.
1077 (substitute*
1078 "dist/bin/chrome/toolkit/content/global/buildconfig.html"
1079 (((format #f "(~a/)([0-9a-df-np-sv-z]{32})"
1080 (regexp-quote (%store-directory)))
1081 _ store hash)
1082 (string-append store
1083 (string-take hash 8)
1084 "<!-- Guix: not a runtime dependency -->"
1085 (string-drop hash 8))))
1086 #t))
6cde5c34
LC
1087 (add-before 'configure 'install-desktop-entry
1088 (lambda* (#:key outputs #:allow-other-keys)
1089 ;; Install the '.desktop' file.
05947d92
MW
1090 (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
1091 (out (assoc-ref outputs "out"))
6cde5c34 1092 (applications (string-append out "/share/applications")))
05947d92
MW
1093 (substitute* desktop-file
1094 (("^Exec=icecat") (string-append "Exec=" out "/bin/icecat"))
1095 (("IceCat") "GNU IceCat")
1096 (("Icon=.*") "Icon=icecat\n")
1097 (("NewWindow") "new-window")
1098 (("NewPrivateWindow") "new-private-window"))
1099 (install-file desktop-file applications)
88a8ce87
AG
1100 #t)))
1101 (add-after 'install-desktop-entry 'install-icons
1102 (lambda* (#:key outputs #:allow-other-keys)
1103 (let ((out (assoc-ref outputs "out")))
1104 (with-directory-excursion "browser/branding/official"
1105 (for-each
1106 (lambda (file)
1107 (let* ((size (string-filter char-numeric? file))
1108 (icons (string-append out "/share/icons/hicolor/"
1109 size "x" size "/apps")))
1110 (mkdir-p icons)
1111 (copy-file file (string-append icons "/icecat.png"))))
1112 '("default16.png" "default22.png" "default24.png"
1113 "default32.png" "default48.png" "content/icon64.png"
3f27124e
MW
1114 "mozicon128.png" "default256.png"))
1115 #t))))
6e75740f
CL
1116 ;; This fixes the file chooser crash that happens with GTK 3.
1117 (add-after 'install 'wrap-program
1118 (lambda* (#:key inputs outputs #:allow-other-keys)
1119 (let* ((out (assoc-ref outputs "out"))
1120 (lib (string-append out "/lib"))
1121 (gtk (assoc-ref inputs "gtk+"))
ad21d767
MW
1122 (gtk-share (string-append gtk "/share"))
1123 (pulseaudio (assoc-ref inputs "pulseaudio"))
1124 (pulseaudio-lib (string-append pulseaudio "/lib")))
6e75740f 1125 (wrap-program (car (find-files lib "^icecat$"))
ad21d767 1126 `("XDG_DATA_DIRS" prefix (,gtk-share))
a0619360 1127 `("LD_LIBRARY_PATH" prefix (,pulseaudio-lib)))
3f27124e 1128 #t))))))
6fd52309 1129 (home-page "https://www.gnu.org/software/gnuzilla/")
be0f6112
AE
1130 (synopsis "Entirely free browser derived from Mozilla Firefox")
1131 (description
1132 "IceCat is the GNU version of the Firefox browser. It is entirely free
c5779c93 1133software, which does not recommend non-free plugins and addons. It also
ad21d767
MW
1134features built-in privacy-protecting features.
1135
1136WARNING: IceCat 68 has not yet been released by the upstream IceCat project.
1137This is a preview release, and does not currently meet the privacy-respecting
1138standards of the IceCat project.")
63e8bb12 1139 (license license:mpl2.0) ;and others, see toolkit/content/license.html
99effc8f
LC
1140 (properties
1141 `((ftp-directory . "/gnu/gnuzilla")
1142 (cpe-name . "firefox_esr")
bfb48f4f 1143 (cpe-version . ,(first (string-split version #\-)))))))
f5301f00 1144
167a0ce0
OP
1145(define-public firefox-decrypt
1146 (package
1147 (name "firefox-decrypt")
1148 (version "0.7.0")
1149 (source (origin
1150 (method git-fetch)
1151 (uri (git-reference
1152 (url "https://github.com/Unode/firefox_decrypt.git")
1153 (commit version)))
1154 (file-name (git-file-name name version))
1155 (sha256
1156 (base32
1157 "17yyyxp47z4m8hnflcq34rc1y871515kr3f1y42j1l0yx3g0il07"))))
1158 (build-system trivial-build-system)
1159 (inputs
1160 `(("nss" ,nss)
1161 ("python" ,python)))
1162 (arguments
1163 `(#:modules ((guix build utils))
1164 #:builder
1165 (begin
1166 (use-modules (guix build utils))
1167 (setenv "PATH"
1168 (string-append
1169 (assoc-ref %build-inputs "python") "/bin"))
1170 (copy-file (string-append (assoc-ref %build-inputs "source")
1171 "/firefox_decrypt.py")
1172 "firefox_decrypt.py")
1173 (substitute* "firefox_decrypt.py"
1174 (("/usr/bin/env python") (which "python3"))
1175 (("libnss3.so") (string-append (assoc-ref %build-inputs "nss")
1176 "/lib/nss/libnss3.so")))
1177 (install-file "firefox_decrypt.py" (string-append %output "/bin"))
1178 #t)))
1179 (home-page "https://github.com/Unode/firefox_decrypt/")
1180 (synopsis "Tool to extract passwords from Mozilla profiles")
1181 (description "Firefox Decrypt is a tool to extract passwords from
1182Mozilla (Firefox, Waterfox, Thunderbird, SeaMonkey) profiles.")
1183 (license license:gpl3+)))