gnu: Remove more packages deprecated for over almost a year.
[jackhill/guix/guix.git] / gnu / packages / gnuzilla.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
3 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
5 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
6 ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
7 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
8 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
9 ;;; Copyright © 2017 ng0 <ng0@n0.is>
10 ;;; Copyright © 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
11 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
12 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
13 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
14 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
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)
32 #:use-module ((srfi srfi-1) #:hide (zip))
33 #:use-module (ice-9 match)
34 #:use-module (gnu packages)
35 #:use-module ((guix licenses) #:prefix license:)
36 #:use-module (guix packages)
37 #:use-module (guix download)
38 #:use-module (guix git-download)
39 #:use-module (guix hg-download)
40 #:use-module (guix gexp)
41 #:use-module (guix store)
42 #:use-module (guix monads)
43 #:use-module (guix utils)
44 #:use-module (guix build-system gnu)
45 #:use-module (guix build-system cargo)
46 #:use-module (guix build-system trivial)
47 #:use-module (gnu packages admin)
48 #:use-module (gnu packages audio)
49 #:use-module (gnu packages autotools)
50 #:use-module (gnu packages base)
51 #:use-module (gnu packages bash)
52 #:use-module (gnu packages databases)
53 #:use-module (gnu packages glib)
54 #:use-module (gnu packages gtk)
55 #:use-module (gnu packages gnome)
56 #:use-module (gnu packages libcanberra)
57 #:use-module (gnu packages cups)
58 #:use-module (gnu packages kerberos)
59 #:use-module (gnu packages linux)
60 #:use-module (gnu packages perl)
61 #:use-module (gnu packages pkg-config)
62 #:use-module (gnu packages compression)
63 #:use-module (gnu packages fontutils)
64 #:use-module (gnu packages libevent)
65 #:use-module (gnu packages libreoffice) ;for hunspell
66 #:use-module (gnu packages image)
67 #:use-module (gnu packages libffi)
68 #:use-module (gnu packages pulseaudio)
69 #:use-module (gnu packages python)
70 #:use-module (gnu packages python-xyz)
71 #:use-module (gnu packages node)
72 #:use-module (gnu packages xorg)
73 #:use-module (gnu packages gl)
74 #:use-module (gnu packages assembly)
75 #:use-module (gnu packages rust)
76 #:use-module (gnu packages rust-apps)
77 #:use-module (gnu packages llvm)
78 #:use-module (gnu packages nss)
79 #:use-module (gnu packages icu4c)
80 #:use-module (gnu packages video)
81 #:use-module (gnu packages xiph)
82 #:use-module (gnu packages xdisorg)
83 #:use-module (gnu packages readline)
84 #:use-module (gnu packages sqlite))
85
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
97 "1fig2wf4f10v43mqx67y68z6h77sy900d1w0pz9qarrqx57rc7ij"))
98 (patches (search-patches "mozjs17-aarch64-support.patch"))
99 (modules '((guix build utils)))
100 (snippet
101 ;; Fix incompatibility with Perl 5.22+.
102 '(begin
103 (substitute* '("js/src/config/milestone.pl")
104 (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
105 #t))))
106 (build-system gnu-build-system)
107 (native-inputs
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)))
115 (arguments
116 `(;; XXX: parallel build fails, lacking:
117 ;; mkdir -p "system_wrapper_js/"
118 #:parallel-build? #f
119 #:make-flags '("CXXFLAGS=-fpermissive")
120 #:phases
121 (modify-phases %standard-phases
122 (add-after 'unpack 'delete-timedout-test
123 ;; This test times out on slower hardware.
124 (lambda _
125 (delete-file "js/src/jit-test/tests/basic/bug698584.js")
126 #t))
127 (add-before 'configure 'chdir
128 (lambda _
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"))
137 (invoke "./configure" (string-append "--prefix=" out)
138 ,@(if (string=? "aarch64-linux"
139 (%current-system))
140 '("--host=aarch64-unknown-linux-gnu")
141 '()))))))))
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
146 in C/C++.")
147 (license license:mpl2.0))) ; and others for some files
148
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
160 "1n1phk8r3l8icqrrap4czplnylawa0ddc2cc4cgdz46x3lrkybz6"))
161 (modules '((guix build utils)))
162 (patches (search-patches "mozjs24-aarch64-support.patch"))
163 (snippet
164 ;; Fix incompatibility with Perl 5.22+.
165 '(begin
166 (substitute* '("js/src/config/milestone.pl")
167 (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
168 #t))))
169 (arguments
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"))
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 '())))))))))
188 (inputs
189 `(("libffi" ,libffi)
190 ("zlib" ,zlib)))))
191
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
200 "https://anduin.linuxfromscratch.org/BLFS/mozjs/"
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"))
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"
265
266 ;; Intl API requires bundled ICU.
267 "--without-intl-api")))))))
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
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.
310 "--without-intl-api"
311
312 ;; Without this gnome-shell will crash at runtime.
313 "--disable-jemalloc")
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
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
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
535 (define (mozilla-patch file-name changeset hash)
536 "Return an origin for CHANGESET from the mozilla-esr60 repository."
537 (origin
538 (method url-fetch)
539 (uri (string-append "https://hg.mozilla.org/releases/mozilla-esr60/raw-rev/"
540 changeset))
541 (sha256 (base32 hash))
542 (file-name file-name)))
543
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
549 from forcing GEXP-PROMISE."
550 (mlet %store-monad ((guile (package->derivation guile system)))
551 (gexp->derivation (or name "computed-origin")
552 (force gexp-promise)
553 #:graft? #f ;nothing to graft
554 #:system system
555 #:guile-for-build guile)))
556
557 (define %icecat-version "68.6.0-guix0-preview1")
558 (define %icecat-build-id "20200309000000") ;must be of the form YYYYMMDDhhmmss
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
580 "17qwfq9hwra8jarawy8k2sqfa6hdhwa9qk84ndr6gjvmxcy22a14"))))
581
582 (upstream-icecat-base-version "68.6.0") ; maybe older than base-version
583 ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
584 (gnuzilla-commit "9dcb24d885eae5973eb2245b532b158c685d707a")
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)))
591 (file-name (git-file-name "gnuzilla"
592 ;;upstream-icecat-base-version
593 (string-take gnuzilla-commit 8)))
594 (sha256
595 (base32
596 "1y3jmh055vmx44gsjgwxvwv3zcyvz8pc5mhgrwkzm0ybbwpp2pqi"))))
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
613 (string-append "icecat-" #$%icecat-version)))
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"
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"))
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"))
659 (("^DATA=.*")
660 "DATA=/tmp/gnuzilla/data\n")
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
670 (format #t "Populating l10n directory...~%")
671 (force-output)
672 (mkdir "l10n")
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
700 (format #t "Running makeicecat script...~%")
701 (force-output)
702 (invoke "bash" "/tmp/gnuzilla/makeicecat"))
703
704 (format #t "Packing IceCat source tarball...~%")
705 (force-output)
706 (invoke "tar" "cfa" #$output
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
713 "--owner=root:0"
714 "--group=root:0"
715 "--sort=name"
716 icecat-dir)
717
718 #t))))))))
719
720 (define-public icecat
721 (package
722 (name "icecat")
723 (version %icecat-version)
724 (source icecat-source)
725 (build-system gnu-build-system)
726 (inputs
727 `(("alsa-lib" ,alsa-lib)
728 ("bzip2" ,bzip2)
729 ("cups" ,cups)
730 ("dbus-glib" ,dbus-glib)
731 ("gdk-pixbuf" ,gdk-pixbuf)
732 ("glib" ,glib)
733 ("gtk+" ,gtk+)
734 ("gtk+-2" ,gtk+-2)
735 ("graphite2" ,graphite2)
736 ("pango" ,pango)
737 ("freetype" ,freetype)
738 ("harfbuzz" ,harfbuzz)
739 ("libcanberra" ,libcanberra)
740 ("libgnome" ,libgnome)
741 ("libjpeg-turbo" ,libjpeg-turbo)
742 ("libogg" ,libogg)
743 ;; ("libtheora" ,libtheora) ; wants theora-1.2, not yet released
744 ("libvorbis" ,libvorbis)
745 ("libxft" ,libxft)
746 ("libevent" ,libevent)
747 ("libxinerama" ,libxinerama)
748 ("libxscrnsaver" ,libxscrnsaver)
749 ("libxcomposite" ,libxcomposite)
750 ("libxt" ,libxt)
751 ("libffi" ,libffi)
752 ("ffmpeg" ,ffmpeg)
753 ("libvpx" ,libvpx-1.7)
754 ("icu4c" ,icu4c)
755 ("pixman" ,pixman)
756 ("pulseaudio" ,pulseaudio)
757 ("mesa" ,mesa)
758 ("mit-krb5" ,mit-krb5)
759 ;; See <https://bugs.gnu.org/32833>
760 ;; and related comments in the 'remove-bundled-libraries' phase.
761 ;; UNBUNDLE-ME! ("nspr" ,nspr)
762 ;; UNBUNDLE-ME! ("nss" ,nss)
763 ("shared-mime-info" ,shared-mime-info)
764 ("sqlite" ,sqlite)
765 ("startup-notification" ,startup-notification)
766 ("unzip" ,unzip)
767 ("zip" ,zip)
768 ("zlib" ,zlib)))
769 (native-inputs
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').
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"))
781
782 ("patch" ,(canonical-package patch))
783
784 ("rust" ,rust)
785 ("cargo" ,rust "cargo")
786 ("rust-cbindgen" ,rust-cbindgen)
787 ("llvm" ,llvm)
788 ("clang" ,clang)
789 ("perl" ,perl)
790 ("node" ,node)
791 ("python" ,python)
792 ("python-2" ,python-2)
793 ("python2-pysqlite" ,python2-pysqlite)
794 ("yasm" ,yasm)
795 ("nasm" ,nasm) ; XXX FIXME: only needed on x86_64 and i686
796 ("pkg-config" ,pkg-config)
797 ("autoconf" ,autoconf-2.13)
798 ("which" ,which)))
799 (arguments
800 `(#:tests? #f ; no check target
801 #:out-of-source? #t ; must be built outside of the source directory
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
809 #:configure-flags `("--enable-default-toolkit=cairo-gtk3"
810
811 "--with-distribution-id=org.gnu"
812
813 ;; Do not require addons in the global app
814 ;; directory to be signed by Mozilla.
815 "--with-unsigned-addon-scopes=app"
816
817 "--enable-startup-notification"
818 "--enable-pulseaudio"
819
820 "--disable-tests"
821 "--disable-updater"
822 "--disable-crashreporter"
823 "--disable-eme"
824 "--disable-gconf"
825
826 ;; Building with debugging symbols takes ~5GiB, so
827 ;; disable it.
828 "--disable-debug"
829 "--disable-debug-symbols"
830
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
845 ;; Hack to work around missing
846 ;; "unofficial" branding in icecat.
847 "--enable-official-branding"
848
849 ;; Avoid bundled libraries.
850 "--with-system-zlib"
851 "--with-system-bz2"
852 "--with-system-jpeg" ; must be libjpeg-turbo
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"
858 "--with-system-icu"
859
860 ;; See <https://bugs.gnu.org/32833>
861 ;; and related comments in the
862 ;; 'remove-bundled-libraries' phase below.
863 ;; UNBUNDLE-ME! "--with-system-nspr"
864 ;; UNBUNDLE-ME! "--with-system-nss"
865
866 ;; UNBUNDLE-ME! "--with-system-harfbuzz"
867 ;; UNBUNDLE-ME! "--with-system-graphite2"
868 "--enable-system-pixman"
869 "--enable-system-ffi"
870 ;; UNBUNDLE-ME! "--enable-system-sqlite"
871
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.
880 ;; "--with-system-png"
881 )
882
883 #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
884
885 #:modules ((ice-9 ftw)
886 (ice-9 rdelim)
887 (ice-9 regex)
888 (ice-9 match)
889 (srfi srfi-34)
890 (srfi srfi-35)
891 (rnrs bytevectors)
892 (rnrs io ports)
893 (guix elf)
894 (guix build gremlin)
895 ,@%gnu-build-system-modules)
896 #:phases
897 (modify-phases %standard-phases
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"
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"
958 "js/src/ctypes/libffi"
959 ;; UNBUNDLE-ME! "db/sqlite3"
960 ))
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 += [
973 'GL', 'gnome-2', 'canberra', 'Xss', 'cups', 'gssapi_krb5',
974 'avcodec', 'avutil', 'pulse' ]\n\n"
975 all)))
976 #t))
977 (add-after 'link-libxul-with-libraries 'fix-ffmpeg-runtime-linker
978 (lambda* (#:key inputs #:allow-other-keys)
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)))
1004 (replace 'bootstrap
1005 (lambda _
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")))
1010 (add-after 'patch-source-shebangs 'patch-cargo-checksums
1011 (lambda _
1012 (use-modules (guix build cargo-utils))
1013 (let ((null-hash "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"))
1014 (substitute* '("Cargo.lock" "gfx/wr/Cargo.lock")
1015 (("(\"checksum .* = )\".*\"" all name)
1016 (string-append name "\"" null-hash "\"")))
1017 (generate-all-checksums "third_party/rust"))
1018 #t))
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++" ":"
1031 gcc "/include/c++/" build)))
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
1049 (setenv "MOZ_BUILD_DATE" ,%icecat-build-id) ; avoid timestamp
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))))
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)))))))
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))
1087 (add-before 'configure 'install-desktop-entry
1088 (lambda* (#:key outputs #:allow-other-keys)
1089 ;; Install the '.desktop' file.
1090 (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
1091 (out (assoc-ref outputs "out"))
1092 (applications (string-append out "/share/applications")))
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)
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"
1114 "mozicon128.png" "default256.png"))
1115 #t))))
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+"))
1122 (gtk-share (string-append gtk "/share"))
1123 (pulseaudio (assoc-ref inputs "pulseaudio"))
1124 (pulseaudio-lib (string-append pulseaudio "/lib")))
1125 (wrap-program (car (find-files lib "^icecat$"))
1126 `("XDG_DATA_DIRS" prefix (,gtk-share))
1127 `("LD_LIBRARY_PATH" prefix (,pulseaudio-lib)))
1128 #t))))))
1129 (home-page "https://www.gnu.org/software/gnuzilla/")
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
1133 software, which does not recommend non-free plugins and addons. It also
1134 features built-in privacy-protecting features.
1135
1136 WARNING: IceCat 68 has not yet been released by the upstream IceCat project.
1137 This is a preview release, and does not currently meet the privacy-respecting
1138 standards of the IceCat project.")
1139 (license license:mpl2.0) ;and others, see toolkit/content/license.html
1140 (properties
1141 `((ftp-directory . "/gnu/gnuzilla")
1142 (cpe-name . "firefox_esr")
1143 (cpe-version . ,(first (string-split version #\-)))))))
1144
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
1182 Mozilla (Firefox, Waterfox, Thunderbird, SeaMonkey) profiles.")
1183 (license license:gpl3+)))