aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/gnuzilla.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/gnuzilla.scm')
-rw-r--r--gnu/packages/gnuzilla.scm604
1 files changed, 457 insertions, 147 deletions
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 2cd7f0f7d8..0cdd0936ba 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
@@ -17,7 +17,7 @@
;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
;;;
;;; This file is part of GNU Guix.
@@ -37,6 +37,7 @@
(define-module (gnu packages gnuzilla)
#:use-module ((srfi srfi-1) #:hide (zip))
+ #:use-module (ice-9 format)
#:use-module (ice-9 match)
#:use-module (gnu packages)
#:use-module ((guix licenses) #:prefix license:)
@@ -46,6 +47,7 @@
#:use-module (guix hg-download)
#:use-module (guix gexp)
#:use-module (guix store)
+ #:use-module (guix modules)
#:use-module (guix monads)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
@@ -92,7 +94,8 @@
#:use-module (gnu packages xiph)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages readline)
- #:use-module (gnu packages sqlite))
+ #:use-module (gnu packages sqlite)
+ #:autoload (json parser) (json->scm))
(define-public mozjs
(package
@@ -368,6 +371,10 @@ from collections.abc import MutableSequence"))))
(inputs
(list icu4c-69 readline zlib))))
+
+;;;
+;;; Localization helper procedures.
+;;;
(define mozilla-compare-locales
(origin
(method hg-fetch)
@@ -391,11 +398,23 @@ from collections.abc import MutableSequence"))))
(list (mozilla-locale locale changeset hash-string)
...))
+(define (update-mozilla-locales changesets.json)
+ "Output a new list of Mozilla locales, to update the ALL-MOZILLA-LOCALES
+variable defined below. It requires guile-json to be installed."
+ (match (call-with-input-file changesets.json json->scm)
+ (((lang ("revision" . revision) platforms pin) ...)
+ (let ((data (reverse (map (lambda (rev lang)
+ `(,(list->string (make-list 40 #\0))
+ ,(string-take rev 12) ,lang))
+ revision lang))))
+ (format #t "~{~s~%~}" data)
+ data))))
+
(define all-mozilla-locales
(mozilla-locales
;; sha256 changeset locale
;;---------------------------------------------------------------------------
- ("1y562h0dg33vhhhwfk6jl7xbr67gng21vcf3rpm96zzcgbnf8rjj" "503a7baec899" "ach")
+ ("1s59ihmj8x6z0ssq4xav689jb5azrpdnay8csgjm1b9pw7wmvcli" "a6940ae1a02f" "ach")
("1cqixlk9f8p63jz20wzsvnfb7xa82ba725gzdydlwz2axgp09c26" "4e2c7d1ddbed" "af")
("19r1yhmfxqasyslc8gr9as5w1scscz1xr8iqy9zi4b90fdjzs0ac" "06897e40a7ea" "an")
("0nfknb1p03j9fgmkwlm1mzdyh10g0l33x34ab39kc072apziyv0n" "9272819b09e2" "ar")
@@ -497,20 +516,19 @@ from collections.abc import MutableSequence"))))
;; XXXX: Workaround 'snippet' limitations.
(define computed-origin-method (@@ (guix packages) computed-origin-method))
-(define %icecat-version "102.7.0-guix0-preview1")
-(define %icecat-build-id "20230117000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-base-version "102.8.0")
+(define %icecat-version (string-append %icecat-base-version "-guix0-preview1"))
+(define %icecat-build-id "20230214000000") ;must be of the form YYYYMMDDhhmmss
;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
;; script from the upstream IceCat project.
(define icecat-source
- (let* ((base-version (first (string-split %icecat-version #\-)))
-
- (major-version (first (string-split base-version #\.)))
- (minor-version (second (string-split base-version #\.)))
- (sub-version (third (string-split base-version #\.)))
+ (let* ((major-version (first (string-split %icecat-base-version #\.)))
+ (minor-version (second (string-split %icecat-base-version #\.)))
+ (sub-version (third (string-split %icecat-base-version #\.)))
- (upstream-firefox-version (string-append base-version "esr"))
+ (upstream-firefox-version (string-append %icecat-base-version "esr"))
(upstream-firefox-source
(origin
(method url-fetch)
@@ -520,11 +538,12 @@ from collections.abc import MutableSequence"))))
"firefox-" upstream-firefox-version ".source.tar.xz"))
(sha256
(base32
- "1ahl66x8chnsz80capqa5ivyrqhc50s91zrcgz1jxd7w2ws61957"))))
+ "0j6afrgfsmd0adbbmffw4p1f2hznpck9d36z3bsjx36f7cjgdy27"))))
- (upstream-icecat-base-version "102.7.0") ; maybe older than base-version
- ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
- (gnuzilla-commit "7f76da3cfd5d04fa38d894f6ea6ac5f2fd0ea837")
+ ;; The upstream-icecat-base-version may be older than the
+ ;; %icecat-base-version.
+ (upstream-icecat-base-version "102.8.0")
+ (gnuzilla-commit "f23f8b609ef4afcc7d8ac5fa795093f1c403f8da")
(gnuzilla-source
(origin
(method git-fetch)
@@ -536,7 +555,7 @@ from collections.abc import MutableSequence"))))
(string-take gnuzilla-commit 8)))
(sha256
(base32
- "19i66qvwzgllgnlw270bxphymybjj1qb5hdznqi4i2dcgpcrq77l"))))
+ "1zvvgjvsj7k8753f7xmpmkq35dqzyik95943hzl84v2j5mnahhj4"))))
;; 'search-patch' returns either a valid file name or #f, so wrap it
;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -554,14 +573,13 @@ from collections.abc import MutableSequence"))))
#~(begin
(use-modules (guix build utils))
(let ((firefox-dir
- (string-append "firefox-" #$base-version))
+ (string-append "firefox-" #$%icecat-base-version))
(icecat-dir
(string-append "icecat-" #$%icecat-version)))
(set-path-environment-variable
"PATH" '("bin")
- (list #+rename
- #+python
+ (list #+python
#+(canonical-package bash)
#+(canonical-package coreutils)
#+(canonical-package findutils)
@@ -673,9 +691,9 @@ from collections.abc import MutableSequence"))))
"--sort=name"
icecat-dir)))))))))
-(define-public icecat
+(define-public icecat-minimal
(package
- (name "icecat")
+ (name "icecat-minimal")
(version %icecat-version)
(source icecat-source)
(build-system mozilla-build-system)
@@ -687,7 +705,6 @@ from collections.abc import MutableSequence"))))
gdk-pixbuf
glib
gtk+
- gtk+-2
;; UNBUNDLE-ME! graphite2
cairo
pango
@@ -718,10 +735,8 @@ from collections.abc import MutableSequence"))))
mit-krb5
hunspell
libnotify
- ;; See <https://bugs.gnu.org/32833>
- ;; and related comments in the 'remove-bundled-libraries' phase.
- ;; UNBUNDLE-ME! nspr
- ;; UNBUNDLE-ME! nss
+ nspr-next
+ nss-next
shared-mime-info
sqlite
eudev
@@ -776,7 +791,8 @@ from collections.abc import MutableSequence"))))
"--disable-tests"
"--disable-updater"
"--disable-crashreporter"
- "--disable-eme"
+ ;; The --disable-eme option is not available on aarch64.
+ #$(if (target-aarch64?) "" "--disable-eme")
;; Building with debugging symbols takes ~5GiB, so disable it.
"--disable-debug"
@@ -816,12 +832,8 @@ from collections.abc import MutableSequence"))))
;; UNBUNDLE-ME! "--with-system-theora" ; wants theora-1.2, not yet released
;; UNBUNDLE-ME! "--with-system-libvpx"
"--with-system-icu"
-
- ;; See <https://bugs.gnu.org/32833>
- ;; and related comments in the
- ;; 'remove-bundled-libraries' phase below.
- ;; UNBUNDLE-ME! "--with-system-nspr"
- ;; UNBUNDLE-ME! "--with-system-nss"
+ "--with-system-nspr"
+ "--with-system-nss"
;; UNBUNDLE-ME! "--with-system-harfbuzz"
;; UNBUNDLE-ME! "--with-system-graphite2"
@@ -870,12 +882,9 @@ from collections.abc import MutableSequence"))))
;; FIXME: A script from the bundled nspr is used.
;;"nsprpub"
;;
- ;; FIXME: With the update to IceCat 60, using system NSS
- ;; broke certificate validation. See
- ;; <https://bugs.gnu.org/32833>. For now, we use
- ;; the bundled NSPR and NSS. TODO: Investigate,
- ;; and try to unbundle these libraries again.
- ;; UNBUNDLE-ME! "security/nss"
+ ;; FIXME: Some of the bundled NSS sources are used
+ ;; to build third_party/prio.
+ ;;"security/nss"
;;
;; TODO: Use more system media libraries. See:
;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
@@ -1117,27 +1126,196 @@ standards of the IceCat project.")
(cpe-name . "firefox_esr")
(cpe-version . ,(first (string-split version #\-)))))))
-(define %icedove-build-id "20230119000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "102.7.0")
+(define %icecat-locales
+ '("ach" "af" "an" "ar" "ast" "az" "be" "bg" "bn" "br" "bs" "ca" "cak"
+ "ca-valencia" "cs" "cy" "da" "de" "dsb" "el" "en-CA" "en-GB" "eo" "es-AR"
+ "es-CL" "es-ES" "es-MX" "et" "eu" "fa" "ff" "fi" "fr" "fy-NL" "ga-IE" "gd"
+ "gl" "gn" "gu-IN" "he" "hi-IN" "hr" "hsb" "hu" "hy-AM" "ia" "id" "is" "it"
+ "ja" "ja-JP-mac" "ka" "kab" "kk" "km" "kn" "ko" "lij" "lt" "lv" "mk" "mr" "ms"
+ "my" "nb-NO" "ne-NP" "nl" "nn-NO" "oc" "pa-IN" "pl" "pt-BR" "pt-PT" "rm" "ro"
+ "ru" "sco" "si" "sk" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te" "th" "tl"
+ "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW"))
+
+(define %icedove-build-id "20230207000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-version "102.7.2")
;; Provides the "comm" folder which is inserted into the icecat source.
;; Avoids the duplication of Icecat's source tarball.
-(define thunderbird-source
+(define thunderbird-comm-source
(origin
(method hg-fetch)
(uri (hg-reference
(url "https://hg.mozilla.org/releases/comm-esr102")
- (changeset "a786f143946e93a3059e6fe290bb954840ab9778")))
+ (changeset "0f6deed0752b618055c34e06c268af3da9d1548d")))
(file-name (string-append "thunderbird-" %icedove-version "-checkout"))
(sha256
(base32
- "02pz9yhpp3lswjmvj30vbx05mbi31bnzzfwyw5v996zg5wz2fpyv"))))
-
-(define-public icedove
+ "071q0pcfvfpzx741ly1sl8anlmzx02h17w4ylfnrkwrpaclq3p6p"))))
+
+(define (comm-source->locales+changeset source)
+ "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the
+list of languages supported as well as the currently used changeset."
+ (match (update-mozilla-locales
+ (string-append source "/mail/locales/l10n-changesets.json"))
+ (((_ changeset locale) ...)
+ (values locale (first changeset)))))
+
+;;; Generated with comm-source->locales+changeset.
+(define %icedove-locales
+ '("af" "ar" "ast" "be" "bg" "br" "ca" "cak" "cs" "cy" "da" "de" "dsb" "el"
+ "en-CA" "en-GB" "es-AR" "es-ES" "es-MX" "et" "eu" "fi" "fr" "fy-NL" "ga-IE"
+ "gd" "gl" "he" "hr" "hsb" "hu" "hy-AM" "id" "is" "it" "ja" "ja-JP-mac" "ka"
+ "kab" "kk" "ko" "lt" "lv" "ms" "nb-NO" "nl" "nn-NO" "pa-IN" "pl" "pt-BR"
+ "pt-PT" "rm" "ro" "ru" "sk" "sl" "sq" "sr" "sv-SE" "th" "tr" "uk" "uz" "vi"
+ "zh-CN" "zh-TW"))
+
+;;; To find out which changeset to use for the comm-l10n repo, use the
+;;; 'comm-source->locales+changeset' procedure on the thunderbird-comm-source
+;;; checkout directory. The complete localization data should be released as
+;;; a tarball in the next release (see:
+;;; https://bugzilla.mozilla.org/show_bug.cgi?id=1817086). When this tarball
+;;; is available, it should replace the complete 'l10n' directory at the root
+;;; of the IceCat source, instead of only the 'calendar', chat and mail
+;;; directories that it provides.
+(define thunderbird-comm-l10n
+ (let* ((changeset "5b6788295358")
+ (version (git-version %icedove-version "0" changeset)))
+ (origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "https://hg.mozilla.org/projects/comm-l10n")
+ (changeset changeset)))
+ (file-name (git-file-name "comm-l10n" version))
+ (sha256
+ (base32
+ "1jrsmkscjjllcfawi3788vwm53wn25inbhdis5nk4vfpr7wk5ill")))))
+
+(define icedove-source
+ (let ((name (string-append "icedove-" %icedove-version)))
+ (origin
+ (method computed-origin-method)
+ (file-name (string-append name ".tar.xz"))
+ (sha256 #f)
+ (uri
+ (delay
+ (with-imported-modules (source-module-closure '((guix build utils)))
+ #~(begin
+ (use-modules (guix build utils)
+ (sxml simple))
+
+ (set-path-environment-variable
+ "PATH" '("bin")
+ (list #+(canonical-package tar)
+ #+(canonical-package xz)))
+
+ ;; Extract the base Icecat tarball, renaming its top-level
+ ;; directory.
+ (invoke "tar" "--transform" (string-append "s,[^/]*," #$name ",")
+ "-xf" #$icecat-source)
+ (chdir #$name)
+
+ ;; Merge the Thunderdbird localization data.
+ (copy-recursively #$thunderbird-comm-l10n "l10n")
+
+ ;; Add the Thunderbird-specific "comm" directory..
+ (mkdir "comm")
+ (copy-recursively #$thunderbird-comm-source "comm")
+ (delete-file "sourcestamp.txt")
+
+ ;; Adjust the application name.
+ (substitute* "comm/mail/confvars.sh"
+ (("MOZ_APP_NAME=thunderbird")
+ "MOZ_APP_NAME=icedove")
+ (("MOZ_UPDATER=1")
+ "MOZ_UPDATER=0"))
+
+ ;; Remove branding to comply with Mozilla's trademark policy
+ (with-directory-excursion "comm/mail/branding/nightly"
+ (delete-file "content/about-wordmark.svg")
+ (call-with-output-file "content/about-wordmark.svg"
+ (lambda (port)
+ (sxml->xml '(svg (@ (xmlns "http://www.w3.org/2000/svg")
+ (viewBox "0 0 789.1 90.78")
+ (width "333")
+ (height "48")
+ (fill "#fff"))
+ (text (@ (x "400") (y "70")
+ (text-anchor "middle")
+ (font-size "90"))
+ "Icedove Daily"))
+ port)))
+ (substitute* '("locales/en-US/brand.properties"
+ "locales/en-US/brand.ftl"
+ "locales/en-US/brand.dtd"
+ "configure.sh")
+ (("Thunderbird") "Icedove")
+ (("mozilla.org") "guix.gnu.org")))
+ ;; Remove other mentions of Thunderbird in user-visible text.
+ (with-directory-excursion "comm/mail/base/content"
+ (substitute* '("overrides/app-license-name.html")
+ (("Thunderbird") "Icedove")))
+ (with-directory-excursion "comm/mail/components/"
+ (substitute* '("MailGlue.jsm"
+ "extensions/schemas/addressBook.json"
+ "extensions/schemas/tabs.json"
+ "extensions/schemas/cloudFile.json"
+ "extensions/schemas/chrome_settings_overrides.json"
+ "extensions/schemas/windows.json"
+ "extensions/parent/ext-mail.js"
+ "im/messages/mail/Info.plist"
+ "enterprisepolicies/moz.build"
+ "enterprisepolicies/helpers/moz.build"
+ "enterprisepolicies/schemas/moz.build")
+ (("Thunderbird") "Icedove")))
+ (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
+ "comm/mail/base/content/customizeToolbar.js"
+ "comm/suite/components/customizeToolbar.js")
+ (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
+ (format #f "AppConstants.MOZ_APP_NAME ~a= \"icedove" e)))
+
+ ;; Override addon URLs and settings
+ (substitute* "comm/mail/app/profile/all-thunderbird.js"
+ (("(pref\\(\"extensions.webservice.discoverURL\").*" _ m)
+ (string-append m ", \"https://directory.fsf.org/wiki/Icedove\");"))
+ (("(pref\\(\"extensions.getAddons.search.url\").*" _ m)
+ (string-append m ", \"https://guix.gnu.org/packages\");"))
+ (("(pref\\(\"extensions.update.enabled\").*" _ m)
+ (string-append m ", false);"))
+ (("(pref\\(\"extensions.systemAddon.update.enabled\").*" _ m)
+ (string-append m ", false);"))
+ (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
+ (string-append m ", false);"))
+
+ ;; XXX: The autoDisableScopes is tweaked by the makeicecat
+ ;; script, but it doesn't know about Thunderbird. This is
+ ;; necessary to allow picking up the extensions found in the
+ ;; system global application directory, such as the language
+ ;; packs.
+ (("\"extensions.autoDisableScopes\", 15")
+ "\"extensions.autoDisableScopes\", 3")
+
+ ;; Set the default locale to that of the operating system.
+ ((".*extensions.autoDisableScopes.*" anchor)
+ (string-append anchor
+ "pref(\"intl.locale.requested\", \"\");\n")))
+
+ ;; Step out of the directory and create the tarball.
+ (chdir "..")
+ (format #t "Packing Icedove source tarball...~%")
+ (force-output)
+ (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+ (invoke "tar" "cfa" #$output
+ "--mtime=@315619200" ;1980-01-02 UTC
+ "--owner=root:0"
+ "--group=root:0"
+ "--sort=name"
+ #$name))))))))
+
+(define-public icedove-minimal
(package
- (name "icedove")
+ (name "icedove-minimal")
(version %icedove-version)
- (source icecat-source)
+ (source icedove-source)
(properties
`((cpe-name . "thunderbird_esr")))
(build-system gnu-build-system)
@@ -1151,11 +1329,6 @@ standards of the IceCat project.")
,@%gnu-build-system-modules)
#:phases
#~(modify-phases %standard-phases
- (add-after 'unpack 'prepare-thunderbird-sources
- (lambda _
- (mkdir "comm")
- (copy-recursively #$thunderbird-source "comm")
- (delete-file "sourcestamp.txt")))
(add-after 'patch-source-shebangs 'patch-cargo-checksums
(lambda _
(use-modules (guix build cargo-utils))
@@ -1183,71 +1356,8 @@ ca495991b7852b855"))
(add-after 'patch-source-shebangs 'fix-profile-setting
(lambda _
(substitute* "comm/mail/moz.configure"
- (("MOZ_DEDICATED_PROFILES, True")
- "MOZ_DEDICATED_PROFILES, False"))))
- (add-after 'prepare-thunderbird-sources 'rename-to-icedove
- (lambda _
- (substitute* "comm/mail/confvars.sh"
- (("MOZ_APP_NAME=thunderbird")
- "MOZ_APP_NAME=icedove")
- (("MOZ_UPDATER=1")
- "MOZ_UPDATER=0"))
- ;; Remove branding to comply with Mozilla's trademark policy
- (with-directory-excursion "comm/mail/branding/nightly"
- (delete-file "content/about-wordmark.svg")
- (call-with-output-file "content/about-wordmark.svg"
- (lambda (port)
- (sxml->xml '(svg (@ (xmlns "http://www.w3.org/2000/svg")
- (viewBox "0 0 789.1 90.78")
- (width "333")
- (height "48")
- (fill "#fff"))
- (text (@ (x "400") (y "70")
- (text-anchor "middle")
- (font-size "90"))
- "Icedove Daily"))
- port)))
- (substitute* '("locales/en-US/brand.properties"
- "locales/en-US/brand.ftl"
- "locales/en-US/brand.dtd"
- "configure.sh")
- (("Thunderbird") "Icedove")
- (("mozilla.org") "guix.gnu.org")))
- ;; Remove other mentions of Thunderbird in user-visible text.
- (with-directory-excursion "comm/mail/base/content"
- (substitute* '("overrides/app-license-name.html")
- (("Thunderbird") "Icedove")))
- (with-directory-excursion "comm/mail/components/"
- (substitute* '("MailGlue.jsm"
- "extensions/schemas/addressBook.json"
- "extensions/schemas/tabs.json"
- "extensions/schemas/cloudFile.json"
- "extensions/schemas/chrome_settings_overrides.json"
- "extensions/schemas/windows.json"
- "extensions/parent/ext-mail.js"
- "im/messages/mail/Info.plist"
- "enterprisepolicies/moz.build"
- "enterprisepolicies/helpers/moz.build"
- "enterprisepolicies/schemas/moz.build")
- (("Thunderbird") "Icedove")))
- (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
- "comm/mail/base/content/customizeToolbar.js"
- "comm/suite/components/customizeToolbar.js")
- (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
- (format #f "AppConstants.MOZ_APP_NAME ~a= \"icedove" e)))
-
- ;; Override addon URLs and settings
- (substitute* "comm/mail/app/profile/all-thunderbird.js"
- (("(pref\\(\"extensions.webservice.discoverURL\").*" _ m)
- (string-append m ", \"https://directory.fsf.org/wiki/Icedove\");"))
- (("(pref\\(\"extensions.getAddons.search.url\").*" _ m)
- (string-append m ", \"https://guix.gnu.org/packages\");"))
- (("(pref\\(\"extensions.update.enabled\").*" _ m)
- (string-append m ", false);"))
- (("(pref\\(\"extensions.systemAddon.update.enabled\").*" _ m)
- (string-append m ", false);"))
- (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
- (string-append m ", false);")))))
+ (("\"MOZ_DEDICATED_PROFILES\", True")
+ "\"MOZ_DEDICATED_PROFILES\", False"))))
(add-after 'build 'neutralize-store-references
(lambda _
;; Mangle the store references to compilers & other build tools in
@@ -1266,7 +1376,8 @@ ca495991b7852b855"))
(string-drop hash 8))))))
(delete 'bootstrap)
(replace 'configure
- (lambda* (#:key inputs configure-flags #:allow-other-keys)
+ (lambda* (#:key native-inputs inputs configure-flags
+ #:allow-other-keys)
(let* ((bash (which "bash"))
(abs-srcdir (getcwd))
(srcdir (string-append "../" (basename abs-srcdir)))
@@ -1299,6 +1410,8 @@ ca495991b7852b855"))
(lambda ()
(display
(string-append
+ "ac_add_options --allow-addon-sideload\n"
+ "ac_add_options --with-unsigned-addon-scopes=app,system\n"
"ac_add_options --disable-crashreporter\n"
"ac_add_options --disable-debug\n"
"ac_add_options --disable-debug-symbols\n"
@@ -1318,15 +1431,18 @@ ca495991b7852b855"))
"ac_add_options --enable-system-ffi\n"
"ac_add_options --enable-system-pixman\n"
"ac_add_options --prefix=" #$output "\n"
- "ac_add_options --with-clang-path=" (assoc-ref %build-inputs "clang") "/bin/clang\n"
+ "ac_add_options --with-clang-path="
+ (search-input-file (or native-inputs inputs)
+ "bin/clang") "\n"
"ac_add_options --with-distribution-id=org.gnu\n"
- "ac_add_options --with-libclang-path=" (assoc-ref %build-inputs "clang") "/lib\n"
+ "ac_add_options --with-libclang-path="
+ #$(this-package-native-input "clang") "/lib\n"
"ac_add_options --with-system-bz2\n"
"ac_add_options --with-system-icu\n"
"ac_add_options --with-system-jpeg\n"
"ac_add_options --with-system-libevent\n"
"ac_add_options --with-system-nspr\n"
- ;"ac_add_options --with-system-nss\n"
+ "ac_add_options --with-system-nss\n"
"ac_add_options --with-system-zlib\n"
"ac_add_options --without-wasm-sandboxed-libraries\n"
"mk_add_options MOZ_MAKE_FLAGS=-j"
@@ -1363,6 +1479,20 @@ ca495991b7852b855"))
Name=Write new message~@
Exec=~@*~a/bin/icedove -compose~%"
#$output))))))
+ (add-after 'install-desktop-file 'install-icons
+ ;; TODO: Use actual Icedove branding icons (currently the stock
+ ;; Thunderbird icon is used).
+ (lambda _
+ (with-directory-excursion "comm/mail/branding/thunderbird"
+ (for-each
+ (lambda (file)
+ (let* ((size (string-filter char-numeric? file))
+ (icons (string-append #$output "/share/icons/hicolor/"
+ size "x" size "/apps")))
+ (mkdir-p icons)
+ (copy-file file (string-append icons "/icedove.png"))))
+ '("default16.png" "default22.png" "default24.png"
+ "default32.png" "default48.png" "default256.png")))))
(add-after 'install 'wrap-program
(lambda* (#:key inputs #:allow-other-keys)
(let* ((lib (string-append #$output "/lib"))
@@ -1403,9 +1533,7 @@ ca495991b7852b855"))
libxt
mesa
mit-krb5
- nspr-4.32
- ;; FIXME: create nss >= 3.68 after core-updates merge
- ;;nss
+ nss-next
pango
pixman
pulseaudio
@@ -1436,41 +1564,223 @@ ca495991b7852b855"))
Thunderbird. It supports email, news feeds, chat, calendar and contacts.")
(license license:mpl2.0)))
+(define (make-l10n-package project version source locales)
+ "Return a package for PROJECT, a symbol (either icecat or icedove), with
+their corresponding VERSION, SOURCE and LOCALES variables."
+ (unless (member project '(icecat icedove))
+ (error "only icecat or icedove components are currently supported"))
+
+ (let ((name (if (eq? 'icecat project)
+ "IceCat"
+ "Icedove")))
+ (package
+ (name (format #f "~a-l10n" project))
+ (version version)
+ (source source)
+ (outputs (cons "out" locales))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:modules '((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 format)
+ (ice-9 ftw)
+ (srfi srfi-1)
+ (srfi srfi-26))
+ #:tests? #f ;no tests, this is data
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'bootstrap)
+ (delete 'install)
+ (replace 'configure
+ (lambda _
+ ;; The following configuration is inspired by guidance at
+ ;; https://firefox-source-docs.mozilla.org/build/buildsystem/locales.html.
+ (call-with-output-file ".mozconfig"
+ (lambda (p)
+ (format p "~{~a~%~}"
+ (list (if (eq? 'icecat '#$project)
+ "ac_add_options --enable-project=browser"
+ "ac_add_options --enable-project=comm/mail")
+ "ac_add_options --disable-compile-environment"
+ (string-append
+ "ac_add_options --with-l10n-base="
+ (getcwd) "/l10n")
+ ;; Hack, otherwise the build system throws:
+ ;; 'RuntimeError: File "brand.dtd" not found'.
+ "ac_add_options --enable-official-branding"
+ "mk_add_options MOZ_OBJDIR=obj"))))
+ (setenv "CONFIG_SHELL" (which "bash"))
+ (setenv "MOZBUILD_STATE_PATH"
+ (string-append (getcwd) "/mach_state"))
+ (setenv "MOZCONFIG" (string-append (getcwd) "/.mozconfig"))
+ (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
+ (setenv "BUILD_BACKENDS" "FasterMake,RecursiveMake")))
+ (replace 'build ;build and install data files
+ (lambda* (#:key outputs #:allow-other-keys)
+ (define (find-file dir name)
+ (let ((files (find-files dir name)))
+ (when (null? files)
+ (error "could not find file in dir" name dir))
+ (car files)))
+
+ (for-each
+ (lambda (l)
+ (let* ((out (assoc-ref outputs l))
+ ;; The older lib/$project/distribution/extensions
+ ;; directory is deprecated. Use the newer app-global
+ ;; directory, which is lib/$project/extensions.
+ (ext-dir-prefix
+ (format
+ #f "lib/~a/~:[~;browser/~]extensions"
+ '#$project (eq? 'icecat '#$project)))
+ (all-ext (string-append #$output "/" ext-dir-prefix))
+ (ext-dir (string-append out "/" ext-dir-prefix))
+ ;; XXX: Because Icedove doesn't have a makeicedove
+ ;; script that substitutes all the Thunderbird
+ ;; references to Icedove, the MOZ_LANGPACK_EID
+ ;; defined in comm/mail/locales/Makefile.in uses
+ ;; 'thunderbird' in its ID extension rather than
+ ;; 'icedove'.
+ (name (format #f "langpack-~a@~a.mozilla.org.xpi"
+ l (if (eq? 'icedove '#$project)
+ 'thunderbird
+ '#$project))))
+ (format #t "processing locale `~a'...~%" l)
+ (if (eq? 'icecat '#$project)
+ ;; XXX: For some reasons, for IceCat, there are some
+ ;; parsing errors that cause the build system to
+ ;; return an unclean exit code; use system* to ignore
+ ;; errors.
+ (system* "./mach" "build" (string-append "langpack-" l))
+ (invoke "./mach" "build" (string-append "langpack-" l)))
+ (mkdir-p ext-dir)
+ (let ((xpi (find-file "obj" (string-append
+ "\\." l "\\.langpack\\.xpi$"))))
+ (copy-file xpi (string-append ext-dir "/" name))
+ ;; Symlink to the main output so that a user can
+ ;; install all of the language packs at once.
+ (mkdir-p all-ext)
+ (symlink (string-append ext-dir "/" name)
+ (string-append all-ext "/" name)))))
+ (if (eq? 'icedove '#$project)
+ '#$%icedove-locales
+ '#$%icecat-locales)))))))
+ (native-inputs
+ (list m4
+ perl
+ python-wrapper
+ node
+ unzip))
+ (home-page "https://www.mozilla.org/")
+ (synopsis (string-append "Language localization data for " name))
+ (description (string-append "This package contains the various language
+localization data files (language pack extensions) for " name ". The
+individual localization packages can be installed by using the output
+associated with their name."))
+ (license license:mpl2.0))))
+
+(define-public icecat-l10n
+ (make-l10n-package 'icecat %icecat-version icecat-source %icecat-locales))
+
+(define-public icedove-l10n
+ (make-l10n-package 'icedove %icedove-version icedove-source %icedove-locales))
+
+;;; This hack exists because there's no way to configure extra extension
+;;; search paths for IceCat or Icedove. The global extensions directory is
+;;; constructed relatively to the executable file name.
+(define (make-mozilla-with-l10n project base l10n-package)
+ "Return a package definition for PROJECT (a symbol such as 'icecat or
+'icedove) that combines the BASE package with L10N-PACKAGE."
+
+ (unless (member project '(icecat icedove))
+ (error "only icecat or icedove components are currently supported"))
+
+ (let ((name (symbol->string project))
+ (icecat? (eq? 'icecat project)))
+ (package
+ (inherit base)
+ (name (symbol->string project))
+ (build-system trivial-build-system)
+ (arguments
+ (list
+ #:modules '((guix build union)
+ (guix build utils))
+ #:builder
+ #~(begin
+ (use-modules (guix build union)
+ (guix build utils))
+
+ (union-build #$output (list #$base #$l10n-package)
+ #:create-all-directories? #t)
+
+ (define* (expose name #:optional (proc copy-file)
+ #:key (source #$base))
+ (let ((dest (string-append #$output "/" name)))
+ (mkdir-p (dirname dest))
+ (proc (string-append source "/" name) dest)))
+
+ (let ((wrapper (string-append "lib/" #$name "/" #$name))
+ (real-binary (string-append "lib/" #$name "/." #$name
+ "-real"))
+ (desktop-file (string-append "share/applications/"
+ #$name ".desktop")))
+ ;; Copy wrapper file.
+ (delete-file (string-append #$output "/" wrapper))
+ (expose wrapper)
+
+ ;; Recreate bin symlink.
+ (delete-file (string-append #$output "/bin/" #$name))
+ (symlink (string-append #$output "/" wrapper)
+ (string-append #$output "/bin/" #$name))
+
+ ;; Copy actual binary.
+ (delete-file (string-append #$output "/" real-binary))
+ (expose real-binary)
+
+ ;; Copy desktop file.
+ (delete-file (string-append #$output "/" desktop-file))
+ (expose desktop-file)
+
+ ;; Adjust the references in the desktop file and wrapper.
+ (substitute* (list (string-append #$output "/" desktop-file)
+ (string-append #$output "/" wrapper))
+ ((#$base) #$output)))))))))
+
+(define-public icecat
+ (make-mozilla-with-l10n 'icecat icecat-minimal icecat-l10n))
+
+(define-public icedove
+ (make-mozilla-with-l10n 'icedove icedove-minimal icedove-l10n))
+
(define-public icedove/wayland
(package
(inherit icedove)
(name "icedove-wayland")
- (native-inputs '())
- (inputs
- `(("bash" ,bash-minimal)
- ("icedove" ,icedove)))
(build-system trivial-build-system)
(arguments
- '(#:modules ((guix build utils))
- #:builder
- (begin
+ (list
+ #:modules '((guix build utils))
+ #:builder
+ #~(begin
(use-modules (guix build utils))
- (let* ((bash (assoc-ref %build-inputs "bash"))
- (icedove (assoc-ref %build-inputs "icedove"))
- (out (assoc-ref %outputs "out"))
- (exe (string-append out "/bin/icedove")))
+ (let* ((exe (string-append #$output "/bin/icedove")))
(mkdir-p (dirname exe))
-
(call-with-output-file exe
(lambda (port)
(format port "#!~a
MOZ_ENABLE_WAYLAND=1 exec ~a $@"
- (string-append bash "/bin/bash")
- (string-append icedove "/bin/icedove"))))
+ #$(file-append bash-minimal "/bin/bash")
+ #$(file-append icedove "/bin/icedove"))))
(chmod exe #o555)
-
;; Provide the manual and .desktop file.
- (copy-recursively (string-append icedove "/share")
- (string-append out "/share"))
- (substitute* (string-append
- out "/share/applications/icedove.desktop")
- ((icedove) out))
- #t))))))
+ (copy-recursively (string-append #$icedove "/share")
+ (string-append #$output "/share"))
+ (substitute* (string-append #$output
+ "/share/applications/icedove.desktop")
+ ((#$icedove) #$output))))))
+ (native-inputs '())
+ (inputs '())))
(define-public firefox-decrypt
(package