diff options
Diffstat (limited to 'nongnu/packages/mozilla.scm')
-rw-r--r-- | nongnu/packages/mozilla.scm | 614 |
1 files changed, 100 insertions, 514 deletions
diff --git a/nongnu/packages/mozilla.scm b/nongnu/packages/mozilla.scm index b1da29f..f159446 100644 --- a/nongnu/packages/mozilla.scm +++ b/nongnu/packages/mozilla.scm @@ -1,7 +1,7 @@ -;;; GNU Guix --- Functional package management for GNU +;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> @@ -14,27 +14,13 @@ ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net> ;;; Copyright © 2019, 2020 Adrian Malacoda <malacoda@monarch-pass.net> -;;; Copyright © 2020-2022 Jonathan Brielmaier <jonathan.brielmaier@web.de> +;;; Copyright © 2020-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de> ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com> ;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com> ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re> -;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com> +;;; Copyright © 2021, 2022, 2023 John Kehayias <john.kehayias@protonmail.com> ;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com> -;;; -;;; This file is not part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. +;;; Copyright © 2023 Tomas Volf <wolf@wolfsden.cz> (define-module (nongnu packages mozilla) #:use-module (guix build-system gnu) @@ -60,6 +46,7 @@ #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) + #:use-module (gnu packages hunspell) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages jemalloc) @@ -67,7 +54,6 @@ #:use-module (gnu packages libcanberra) #:use-module (gnu packages libevent) #:use-module (gnu packages libffi) - #:use-module (gnu packages libreoffice) ;for hunspell #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages m4) @@ -79,473 +65,51 @@ #:use-module (gnu packages python) #:use-module (gnu packages rust) #:use-module (gnu packages rust-apps) + #:use-module (gnu packages speech) #:use-module (gnu packages sqlite) #:use-module (gnu packages video) #:use-module (nongnu packages wasm) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xorg)) -;; Copied from guix/gnu/packages/rust.scm -(define* (rust-uri version #:key (dist "static")) - (string-append "https://" dist ".rust-lang.org/dist/" - "rustc-" version "-src.tar.gz")) +;; Define the versions of rust needed to build firefox, trying to match +;; upstream. See the file taskcluster/ci/toolchain/rust.yml at +;; https://searchfox.org under the particular firefox release, like +;; mozilla-esr102. +(define-public rust-firefox-esr rust) ; 1.60 is the default in Guix +(define-public rust-firefox rust) ; 1.65 is the minimum -(define* (rust-bootstrapped-package base-rust version checksum) - "Bootstrap rust VERSION with source checksum CHECKSUM using BASE-RUST." +(define icu4c-73 (package - (inherit base-rust) - (version version) - (source - (origin - (inherit (package-source base-rust)) - (uri (rust-uri version)) - (sha256 (base32 checksum)))) - (native-inputs - (alist-replace "cargo-bootstrap" (list base-rust "cargo") - (alist-replace "rustc-bootstrap" (list base-rust) - (package-native-inputs base-rust)))))) - -(define rust-firefox-1.58 - (rust-bootstrapped-package - rust "1.58.1" "1iq7kj16qfpkx8gvw50d8rf7glbm6s0pj2y1qkrz7mi56vfsyfd8")) - -(define rust-firefox-1.59 - (rust-bootstrapped-package - rust-firefox-1.58 "1.59.0" "1yc5bwcbmbwyvpfq7zvra78l0r8y3lbv60kbr62fzz2vx2pfxj57")) - -(define-public rust-firefox rust-firefox-1.59) - -;; rust-cbindgen-0.23/0.24 dependencies -(define-public rust-unicode-ident-1 - (package - (name "rust-unicode-ident") - (version "1.0.3") - (source (origin - (method url-fetch) - (uri (crate-uri "unicode-ident" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1bqswc96ws8l6k7xx56dg521a3l5imi3mhlcz7rsi6a92mxb7xf4")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t)) - (home-page "https://github.com/dtolnay/unicode-ident") - (synopsis - "Better optimized implementation of the older unicode-xid crate") - (description - "Determine whether characters have the XID_Start or XID_Continue properties -according to Unicode Standard Annex #31") - (license (list license:unicode license:expat)))) - -(define-public rust-proc-macro2-1.0.43 - (package - (inherit rust-proc-macro2-1) - (name "rust-proc-macro2") - (version "1.0.43") - (source (origin - (method url-fetch) - (uri (crate-uri "proc-macro2" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1avvpf4qki8mg2na60yr3afbsfl5p6vllac6516xgwy93g3a4b0a")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-unicode-ident" ,rust-unicode-ident-1)))))) - -(define-public rust-syn-1.0.99 - (package - (inherit rust-syn-1) - (name "rust-syn") - (version "1.0.99") - (source (origin - (method url-fetch) - (uri (crate-uri "syn" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "04xba78p559nl737llv7nqcwm723dp6ah5bbp0h5w1amqrpfznsq")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-unicode-ident" ,rust-unicode-ident-1)))))) - -(define-public rust-textwrap-0.15 - (package - (inherit rust-textwrap-0.12) - (name "rust-textwrap") - (version "0.15.0") - (source (origin - (method url-fetch) - (uri (crate-uri "textwrap" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1yw513k61lfiwgqrfvsjw1a5wpvm0azhpjr2kr0jhnq9c56is55i")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-hyphenation" ,rust-hyphenation-0.8) - ("rust-smawk" ,rust-smawk-0.3) - ("rust-terminal-size" ,rust-terminal-size-0.1) - ("rust-unicode-linebreak" ,rust-unicode-linebreak-0.1) - ("rust-unicode-width" ,rust-unicode-width-0.1)))))) - -(define-public rust-windows-x86-64-msvc-0.36 - (package - (inherit rust-windows-x86-64-msvc-0.28) - (name "rust-windows-x86-64-msvc") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_x86_64_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "103n3xijm5vr7qxr1dps202ckfnv7njjnnfqmchg8gl5ii5cl4f8")))))) - -(define-public rust-windows-x86-64-gnu-0.36 - (package - (inherit rust-windows-x86-64-gnu-0.28) - (name "rust-windows-x86-64-gnu") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_x86_64_gnu" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1qfrck3jnihymfrd01s8260d4snql8ks2p8yaabipi3nhwdigkad")))))) - -(define-public rust-windows-i686-msvc-0.36 - (package - (inherit rust-windows-i686-msvc-0.28) - (name "rust-windows-i686-msvc") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_i686_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "097h2a7wig04wbmpi3rz1akdy4s8gslj5szsx8g2v0dj91qr3rz2")))))) - -(define-public rust-windows-i686-gnu-0.36 - (package - (inherit rust-windows-i686-gnu-0.28) - (name "rust-windows-i686-gnu") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows_i686_gnu" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1dm3svxfzamrv6kklyda9c3qylgwn5nwdps6p0kc9x6s077nq3hq")))))) - -(define-public rust-windows-aarch64-msvc-0.36 - (package - (inherit rust-windows-aarch64-msvc-0.28) - (name "rust-windows-aarch64-msvc") - (version "0.36.1") + (inherit icu4c) + (version "73.1") (source (origin (method url-fetch) - (uri (crate-uri "windows_aarch64_msvc" version)) - (file-name (string-append name "-" version ".tar.gz")) + (uri (string-append + "https://github.com/unicode-org/icu/releases/download/release-" + (string-map (lambda (x) (if (char=? x #\.) #\- x)) version) + "/icu4c-" + (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version) + "-src.tgz")) (sha256 (base32 - "0ixaxs2c37ll2smprzh0xq5p238zn8ylzb3lk1zddqmd77yw7f4v")))))) + "0iccpdvc0kvpww5a31k9gjkqigyz016i7v80r9zamd34w4fl6mx4")))))) -(define-public rust-windows-sys-0.36 - (package - (inherit rust-windows-sys-0.28) - (name "rust-windows-sys") - (version "0.36.1") - (source (origin - (method url-fetch) - (uri (crate-uri "windows-sys" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1lmqangv0zg1l46xiq7rfnqwsx8f8m52mqbgg2mrx7x52rd1a17a")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-windows-aarch64-msvc" ,rust-windows-aarch64-msvc-0.36) - ("rust-windows-i686-gnu" ,rust-windows-i686-gnu-0.36) - ("rust-windows-i686-msvc" ,rust-windows-i686-msvc-0.36) - ("rust-windows-x86-64-gnu" ,rust-windows-x86-64-gnu-0.36) - ("rust-windows-x86-64-msvc" ,rust-windows-x86-64-msvc-0.36)))))) - -(define-public rust-hashbrown-0.12 - (package - (inherit rust-hashbrown-0.11) - (name "rust-hashbrown") - (version "0.12.3") - (source (origin - (method url-fetch) - (uri (crate-uri "hashbrown" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la")))))) - -(define-public rust-object-0.29 - (package - (inherit rust-object-0.28) - (name "rust-object") - (version "0.29.0") - (source (origin - (method url-fetch) - (uri (crate-uri "object" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0lzblxwxcih7j4z2cfx9094caax97hlfm9n0y5hlavda6cn8n591")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-compiler-builtins" ,rust-compiler-builtins-0.1) - ("rust-crc32fast" ,rust-crc32fast-1) - ("rust-flate2" ,rust-flate2-1) - ("rust-hashbrown" ,rust-hashbrown-0.12) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-memchr" ,rust-memchr-2) - ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1) - ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1) - ("rust-wasmparser" ,rust-wasmparser-0.57)))))) - -(define-public rust-object-0.27 - (package - (inherit rust-object-0.28) - (name "rust-object") - (version "0.27.1") - (source (origin - (method url-fetch) - (uri (crate-uri "object" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1ygv9zgi9wz6q5f2z9xn72i0c97jjr1dgj30kbyicdhxk8zivb37")))))) - -(define-public rust-gimli-0.26 - (package - (inherit rust-gimli-0.23) - (name "rust-gimli") - (version "0.26.2") - (source (origin - (method url-fetch) - (uri (crate-uri "gimli" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0pafbk64rznibgnvfidhm1pqxd14a5s9m50yvsgnbv38b8n0w0r2")))))) - -(define-public rust-addr2line-0.17 - (package - (inherit rust-addr2line-0.14) - (name "rust-addr2line") - (version "0.17.0") - (source (origin - (method url-fetch) - (uri (crate-uri "addr2line" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0sw16zqy6w0ar633z69m7lw6gb0k1y7xj3387a8wly43ij5div5r")))))) - -(define-public rust-backtrace-0.3.66 - (package - (inherit rust-backtrace-0.3) - (name "rust-backtrace") - (version "0.3.66") - (source (origin - (method url-fetch) - (uri (crate-uri "backtrace" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "19yrfx0gprqmzphmf6qv32g93w76ny5g751ks1abdkqnsqcl7f6a")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-addr2line" ,rust-addr2line-0.17) - ("rust-cc" ,rust-cc-1) - ("rust-cfg-if" ,rust-cfg-if-1) - ("rust-cpp-demangle" ,rust-cpp-demangle-0.3) - ("rust-libc" ,rust-libc-0.2) - ("rust-miniz-oxide" ,rust-miniz-oxide-0.5) - ("rust-object" ,rust-object-0.29) - ("rust-rustc-demangle" ,rust-rustc-demangle-0.1) - ("rust-rustc-serialize" ,rust-rustc-serialize-0.3) - ("rust-serde" ,rust-serde-1) - ("rust-winapi" ,rust-winapi-0.3)))))) - -(define-public rust-parking-lot-core-0.9 - (package - (inherit rust-parking-lot-core-0.8) - (name "rust-parking-lot-core") - (version "0.9.3") - (source (origin - (method url-fetch) - (uri (crate-uri "parking_lot_core" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "0ab95rljb99rm51wcic16jgbajcr6lgbqkrr21w7bc2wyb5pk8h9")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-backtrace" ,rust-backtrace-0.3.66) - ("rust-cfg-if" ,rust-cfg-if-1) - ("rust-libc" ,rust-libc-0.2) - ("rust-petgraph" ,rust-petgraph-0.6) - ("rust-redox-syscall" ,rust-redox-syscall-0.2) - ("rust-smallvec" ,rust-smallvec-1) - ("rust-thread-id" ,rust-thread-id-4) - ("rust-windows-sys" ,rust-windows-sys-0.36)))))) - -(define-public rust-once-cell-1.13.0 - (package - (inherit rust-once-cell-1) - (name "rust-once-cell") - (version "1.13.0") - (source (origin - (method url-fetch) - (uri (crate-uri "once_cell" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1qfqvgnwfzzwxd13ybvplzshaqwnjnna9ghcn0zgijaq0zixp9hq")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-atomic-polyfill" ,rust-atomic-polyfill-0.1) - ("rust-parking-lot-core" ,rust-parking-lot-core-0.9)))))) - -(define-public rust-clap-lex-0.2 - (package - (name "rust-clap-lex") - (version "0.2.4") - (source (origin - (method url-fetch) - (uri (crate-uri "clap_lex" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18")))) - (build-system cargo-build-system) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-os-str-bytes" ,rust-os-str-bytes-6)))) - (home-page "https://github.com/clap-rs/clap/tree/master/clap_lex") - (synopsis "Minimal, flexible command line parser") - (description "Minimal, flexible command line parser") - (license (list license:expat license:asl2.0)))) - -(define-public rust-clap-derive-3.2.15 - (package - (inherit rust-clap-derive-3) - (name "rust-clap-derive") - (version "3.2.15") - (source (origin - (method url-fetch) - (uri (crate-uri "clap_derive" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1d2c4vs345fwihkd8cc7m6acbiydcwramkd5mnp36p0a7g6jm9cv")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-heck" ,rust-heck-0.4) - ("rust-proc-macro-error" ,rust-proc-macro-error-1) - ("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-syn" ,rust-syn-1.0.99)))))) - -(define-public rust-clap-3.2.16 - (package - (inherit rust-clap-3) - (name "rust-clap") - (version "3.2.16") - (source (origin - (method url-fetch) - (uri (crate-uri "clap" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1af06z8z7m3327yz1xvzxfjanclgpvvy3lssb745rig7adkbpnx3")))) - (arguments - `(#:skip-build? #t - #:cargo-inputs (("rust-atty" ,rust-atty-0.2) - ("rust-backtrace" ,rust-backtrace-0.3.66) - ("rust-bitflags" ,rust-bitflags-1) - ("rust-clap-derive" ,rust-clap-derive-3.2.15) - ("rust-clap-lex" ,rust-clap-lex-0.2) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-once-cell" ,rust-once-cell-1.13.0) - ("rust-regex" ,rust-regex-1) - ("rust-strsim" ,rust-strsim-0.10) - ("rust-termcolor" ,rust-termcolor-1) - ("rust-terminal-size" ,rust-terminal-size-0.1) - ("rust-textwrap" ,rust-textwrap-0.15) - ("rust-unicase" ,rust-unicase-2) - ("rust-yaml-rust" ,rust-yaml-rust-0.4)))))) - -(define-public rust-cbindgen-0.24 - (package - (inherit rust-cbindgen-0.19) - (name "rust-cbindgen") - (version "0.24.3") - (source (origin - (method url-fetch) - (uri (crate-uri "cbindgen" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "1yqxqsz2d0cppd8zwihk2139g5gy38wqgl9snj6rnk8gyvnqsdd6")))) - (arguments - `(#:cargo-inputs (("rust-clap" ,rust-clap-3.2.16) - ("rust-heck" ,rust-heck-0.4) - ("rust-indexmap" ,rust-indexmap-1) - ("rust-log" ,rust-log-0.4) - ("rust-proc-macro2" ,rust-proc-macro2-1.0.43) - ("rust-quote" ,rust-quote-1) - ("rust-serde" ,rust-serde-1) - ("rust-serde-json" ,rust-serde-json-1) - ("rust-syn" ,rust-syn-1.0.99) - ("rust-tempfile" ,rust-tempfile-3) - ("rust-toml" ,rust-toml-0.5)) - #:cargo-development-inputs (("rust-serial-test" ,rust-serial-test-0.5)))))) - -;; Bug with firefox build (v101-102) with cbindgen-0.24, see -;; https://bugzilla.mozilla.org/show_bug.cgi?id=1773259#c5 for possible patch -;; (untested) -(define-public rust-cbindgen-0.23 - (package - (inherit rust-cbindgen-0.24) - (name "rust-cbindgen") - (version "0.23.0") - (source (origin - (method url-fetch) - (uri (crate-uri "cbindgen" version)) - (file-name (string-append name "-" version ".tar.gz")) - (sha256 - (base32 - "006rn3fn4njayjxr2vd24g1awssr9i3894nbmfzkybx07j728vav")))))) - -;; Update this id with every firefox update to it's release date. -;; It's used for cache validation and therefor can lead to strange bugs. -(define %firefox-esr-build-id "20220726000000") +;; Update this id with every firefox update to its release date. +;; It's used for cache validation and therefore can lead to strange bugs. +(define %firefox-esr-build-id "20240219101823") (define-public firefox-esr (package (name "firefox-esr") - (version "102.1.0esr") + (version "115.8.0esr") (source (origin (method url-fetch) (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/" version "/source/firefox-" version ".source.tar.xz")) (sha256 - (base32 "0q4lawxynvdiihlqnqiwxdp0ai71qq2fp6mkdsy5p08vgmr6wyv3")))) + (base32 "1slmp2v1q3my81z8kiym9rpxw5d9n4sn07v7hv99517w7vr8d05g")))) (build-system gnu-build-system) (arguments (list @@ -592,8 +156,14 @@ according to Unicode Standard Annex #31") "--disable-elf-hack")) #:imported-modules %cargo-utils-modules #:modules `((ice-9 regex) + (ice-9 string-fun) (ice-9 ftw) + (srfi srfi-1) (srfi srfi-26) + (rnrs bytevectors) + (rnrs io ports) + (guix elf) + (guix build gremlin) ,@%gnu-build-system-modules) #:phases #~(modify-phases %standard-phases @@ -663,6 +233,22 @@ according to Unicode Standard Annex #31") (substitute* "build/RunCbindgen.py" (("\"--frozen\",") "")))) (delete 'bootstrap) + (add-before 'configure 'patch-SpeechDispatcherService.cpp + (lambda _ + (let* ((lib "libspeechd.so.2") + (file "dom/media/webspeech/synth/speechd/SpeechDispatcherService.cpp") + (old-content (call-with-input-file file get-string-all))) + (substitute + file + `((,(format #f "~s" lib) + . ,(lambda (line _) + (string-replace-substring + line + lib + (string-append #$speech-dispatcher "/lib/" lib)))))) + (if (string=? old-content + (call-with-input-file file get-string-all)) + (error "substitute did nothing, phase requires an update"))))) (add-before 'configure 'set-build-id ;; Firefox will write the timestamp to output, which is harmful ;; for reproducibility, so change it to a fixed date. Use a @@ -753,6 +339,19 @@ according to Unicode Standard Annex #31") (lambda _ (invoke "./mach" "install"))) (add-after 'install 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) + ;; The following two functions are from Guix's icecat package in + ;; (gnu packages gnuzilla). See commit + ;; b7a0935420ee630a29b7e5ac73a32ba1eb24f00b. + (define (runpath-of lib) + (call-with-input-file lib + (compose elf-dynamic-info-runpath + elf-dynamic-info + parse-elf + get-bytevector-all))) + (define (runpaths-of-input label) + (let* ((dir (string-append (assoc-ref inputs label) "/lib")) + (libs (find-files dir "\\.so$"))) + (append-map runpath-of libs))) (let* ((out (assoc-ref outputs "out")) (lib (string-append out "/lib")) ;; TODO: make me a loop again @@ -763,6 +362,20 @@ according to Unicode Standard Annex #31") ;; For hardware video acceleration via VA-API (libva-lib (string-append (assoc-ref inputs "libva") "/lib")) + ;; VA-API is run in the RDD (Remote Data Decoder) sandbox + ;; and must be explicitly given access to files it needs. + ;; Rather than adding the whole store (as Nix had + ;; upstream do, see + ;; <https://github.com/NixOS/nixpkgs/pull/165964> and + ;; linked upstream patches), we can just follow the + ;; runpaths of the needed libraries to add everything to + ;; LD_LIBRARY_PATH. These will then be accessible in the + ;; RDD sandbox. + (rdd-whitelist + (map (cut string-append <> "/") + (delete-duplicates + (append-map runpaths-of-input + '("mesa" "ffmpeg"))))) (pulseaudio-lib (string-append (assoc-ref inputs "pulseaudio") "/lib")) ;; For U2F and WebAuthn @@ -771,7 +384,7 @@ according to Unicode Standard Annex #31") "/share"))) (wrap-program (car (find-files lib "^firefox$")) `("LD_LIBRARY_PATH" prefix (,mesa-lib ,libnotify-lib ,libva-lib - ,pulseaudio-lib ,eudev-lib)) + ,pulseaudio-lib ,eudev-lib ,@rdd-whitelist)) `("XDG_DATA_DIRS" prefix (,gtk-share)) `("MOZ_LEGACY_PROFILES" = ("1")) `("MOZ_ALLOW_DOWNGRADE" = ("1")))))) @@ -824,7 +437,7 @@ according to Unicode Standard Annex #31") gtk+ gtk+-2 hunspell - icu4c-71 + icu4c-73 jemalloc libcanberra libevent @@ -845,10 +458,12 @@ according to Unicode Standard Annex #31") nspr-4.32 ;; nss pango + pipewire pixman pulseaudio - startup-notification + speech-dispatcher sqlite + startup-notification eudev unzip zip @@ -857,18 +472,18 @@ according to Unicode Standard Annex #31") (list alsa-lib autoconf-2.13 - `(,rust-firefox "cargo") - clang-12 - llvm-12 + `(,rust-firefox-esr "cargo") + clang + llvm wasm32-wasi-clang-toolchain m4 nasm - node + node-lts perl pkg-config python - rust-firefox - rust-cbindgen-0.23 + rust-firefox-esr + rust-cbindgen-0.24 which yasm)) (home-page "https://mozilla.org/firefox/") @@ -915,22 +530,22 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" ((firefox) out)) #t)))))) -;; Update this id with every firefox update to it's release date. -;; It's used for cache validation and therefor can lead to strange bugs. -(define %firefox-build-id "20220809000000") +;; Update this id with every firefox update to its release date. +;; It's used for cache validation and therefore can lead to strange bugs. +(define %firefox-build-id "20240219104035") (define-public firefox (package (inherit firefox-esr) (name "firefox") - (version "103.0.2") + (version "123.0") (source (origin (method url-fetch) (uri (string-append "https://archive.mozilla.org/pub/firefox/releases/" version "/source/firefox-" version ".source.tar.xz")) (sha256 - (base32 "1ajkshdsbbi4fdxdkjf632qaxzqrg4is6pd80m1sh5wwwgl86qbn")))) + (base32 "1dscgn1ymqi4zr29fpj43y8gaspc5wl7a59w657ws56vmnymm24y")))) (arguments (substitute-keyword-arguments (package-arguments firefox-esr) ((#:phases phases) @@ -940,43 +555,14 @@ MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" (setenv "MOZ_BUILD_DATE" #$%firefox-build-id))))))) (native-inputs (modify-inputs (package-native-inputs firefox-esr) - (replace "rust-cbindgen" rust-cbindgen-0.24))) + (replace "rust" rust-firefox) + (replace "rust:cargo" `(,rust-firefox "cargo")) + (replace "rust-cbindgen" rust-cbindgen-0.26))) (description "Full-featured browser client built from Firefox source tree, without the official icon and the name \"firefox\"."))) -(define-public firefox/wayland - (package - (inherit firefox) - (name "firefox-wayland") - (native-inputs '()) - (inputs - `(("bash" ,bash-minimal) - ("firefox" ,firefox))) - (build-system trivial-build-system) - (arguments - '(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils)) - (let* ((bash (assoc-ref %build-inputs "bash")) - (firefox (assoc-ref %build-inputs "firefox")) - (out (assoc-ref %outputs "out")) - (exe (string-append out "/bin/firefox"))) - (mkdir-p (dirname exe)) - - (call-with-output-file exe - (lambda (port) - (format port "#!~a -MOZ_ENABLE_WAYLAND=1 exec ~a $@\n" - (string-append bash "/bin/bash") - (string-append firefox "/bin/firefox")))) - (chmod exe #o555) - - ;; Provide the manual and .desktop file. - (copy-recursively (string-append firefox "/share") - (string-append out "/share")) - (substitute* (string-append - out "/share/applications/firefox.desktop") - ((firefox) out)) - #t)))))) +;; As of Firefox 121.0, Firefox uses Wayland by default. This means we no longer need a seperate package +;; for Firefox on Wayland. +(define-public firefox-wayland + (deprecated-package "firefox-wayland" firefox)) |