unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Looking for Thunderbird/Icedove
@ 2018-04-03 13:49 Björn Höfling
  2018-04-03 16:48 ` Nils Gillmann
  2018-04-04  5:14 ` Mark H Weaver
  0 siblings, 2 replies; 14+ messages in thread
From: Björn Höfling @ 2018-04-03 13:49 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 762 bytes --]

One of my key customers needs a new GNU/Linux installation and they are
willing to give GuixSD a try if Thunderbird is available.

I thought that's no problem and was surprised to not find anything
like Icedove in the guix repository.

I found two references on the net, but both are negative:

https://lists.gnu.org/archive/html/guix-devel/2017-08/msg00231.html
https://gitlab.secushare.org/infotropique/issues/issues/4

Are there any more recent news on the Thunderbird side? Does anyone have
more-or-less ready snippets available?

Maybe I can convince then to switch to an alternative: What would you
suggest for a graphical mail-reader that can import Thunderbird message
archives and address book and is part of Guix?

Thanks,

Björn

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
@ 2018-04-03 16:33 Rene
  2018-04-03 16:43 ` Nils Gillmann
  0 siblings, 1 reply; 14+ messages in thread
From: Rene @ 2018-04-03 16:33 UTC (permalink / raw)
  To: guix-devel@gnu.org

[-- Attachment #1: Type: text/plain, Size: 241 bytes --]

Hello,

GNOME Evolution is another graphical mail-reader;
currently it is not packaged, but the important part is that it requires the evolution-data-server service that does not exist either.

See more:
https://wiki.gnome.org/Apps/Evolution

[-- Attachment #2: Type: text/html, Size: 409 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 16:33 Rene
@ 2018-04-03 16:43 ` Nils Gillmann
  0 siblings, 0 replies; 14+ messages in thread
From: Nils Gillmann @ 2018-04-03 16:43 UTC (permalink / raw)
  To: Rene; +Cc: guix-devel@gnu.org

Rene transcribed 1.2K bytes:
> Hello,
> 
> GNOME Evolution is another graphical mail-reader;
> currently it is not packaged, but the important part is that it requires the evolution-data-server service that does not exist either.
> 
> See more:
> https://wiki.gnome.org/Apps/Evolution

I'm confused. Are you asking about Evolution (the mailinglist
should have an older thread where I posted an initial receipe)
or Thunderbird/Icedove?
As far as I know no one else is working on Thunderbird for now
except for me. Current part where I'm struck for some time now:
errors related to mdb.h which is searched, never found etc
in the build process.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 13:49 Looking for Thunderbird/Icedove Björn Höfling
@ 2018-04-03 16:48 ` Nils Gillmann
  2018-04-03 19:05   ` Mark H Weaver
  2018-04-04  5:14 ` Mark H Weaver
  1 sibling, 1 reply; 14+ messages in thread
From: Nils Gillmann @ 2018-04-03 16:48 UTC (permalink / raw)
  To: Björn Höfling; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1325 bytes --]

Björn Höfling transcribed 1.2K bytes:
> One of my key customers needs a new GNU/Linux installation and they are
> willing to give GuixSD a try if Thunderbird is available.
> 
> I thought that's no problem and was surprised to not find anything
> like Icedove in the guix repository.
> 
> I found two references on the net, but both are negative:
> 
> https://lists.gnu.org/archive/html/guix-devel/2017-08/msg00231.html
> https://gitlab.secushare.org/infotropique/issues/issues/4

The second link is negative. I stopped pretending that bugtrackers
are of any use without people caring for them.

> Are there any more recent news on the Thunderbird side? Does anyone have
> more-or-less ready snippets available?

I can not post the link to straight-out of the box Thunderbird here
(current repository is against the policy in Guix), but if you really
want to work on it I can send you the link offlist (just contact me at
gillmann@infotropique.org).

> Maybe I can convince then to switch to an alternative: What would you
> suggest for a graphical mail-reader that can import Thunderbird message
> archives and address book and is part of Guix?

Thunderbird has its own format, right? .eml, but can export to mbox.
So I guess anything that reads mbox would work?

> Thanks,
> 
> Björn



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 16:48 ` Nils Gillmann
@ 2018-04-03 19:05   ` Mark H Weaver
  2018-04-03 19:23     ` Nils Gillmann
  0 siblings, 1 reply; 14+ messages in thread
From: Mark H Weaver @ 2018-04-03 19:05 UTC (permalink / raw)
  To: Nils Gillmann; +Cc: guix-devel

Hi Nils,

Nils Gillmann <ng0@n0.is> writes:

> Björn Höfling transcribed 1.2K bytes:
>
>> Are there any more recent news on the Thunderbird side? Does anyone have
>> more-or-less ready snippets available?
>
> I can not post the link to straight-out of the box Thunderbird here
> (current repository is against the policy in Guix), but if you really
> want to work on it I can send you the link offlist (just contact me at
> gillmann@infotropique.org).

Did someone tell you that you shouldn't post a preliminary
Thunderbird/Icedove package definition to this mailing list?
If so, can you show me the email?

It's true that we shouldn't post package definitions for nonfree
software on the Guix mailing lists.  However, Thunderbird/Icedove has
only a couple of known freedom issues which have apparently already been
addressed in Parabola GNU/Linux:

  https://libreplanet.org/wiki/List_of_software_that_does_not_respect_the_Free_System_Distribution_Guidelines#Thunderbird

Given that a GNU FSDG compliant version of Thunderbird/Icedove already
exists, and that we could surely apply the same fixes to our package, I
see no problem with you posting your preliminary package definition.
Please do so.  It would enable other interested developers to continue
your work.

    Regards,
      Mark

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 19:05   ` Mark H Weaver
@ 2018-04-03 19:23     ` Nils Gillmann
  2018-04-03 19:45       ` Mark H Weaver
  0 siblings, 1 reply; 14+ messages in thread
From: Nils Gillmann @ 2018-04-03 19:23 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: guix-devel, Nils Gillmann

Mark H Weaver transcribed 1.3K bytes:
> Hi Nils,
> 
> Nils Gillmann <ng0@n0.is> writes:
> 
> > Björn Höfling transcribed 1.2K bytes:
> >
> >> Are there any more recent news on the Thunderbird side? Does anyone have
> >> more-or-less ready snippets available?
> >
> > I can not post the link to straight-out of the box Thunderbird here
> > (current repository is against the policy in Guix), but if you really
> > want to work on it I can send you the link offlist (just contact me at
> > gillmann@infotropique.org).
> 
> Did someone tell you that you shouldn't post a preliminary
> Thunderbird/Icedove package definition to this mailing list?

No. It just exists in a branch in an (experimental, fluid) repository where
other nonfree software (partially as a base for other builds to be upstreamed)
is located in, which is why I mentioned "policy reasons". If that's an exception
I could link to the cgit, I'll do it of course.

If the repo is not okay, I can send a mbox formated patch.

> If so, can you show me the email?
> 
> It's true that we shouldn't post package definitions for nonfree
> software on the Guix mailing lists.  However, Thunderbird/Icedove has
> only a couple of known freedom issues which have apparently already been
> addressed in Parabola GNU/Linux:
> 
>   https://libreplanet.org/wiki/List_of_software_that_does_not_respect_the_Free_System_Distribution_Guidelines#Thunderbird
> 
> Given that a GNU FSDG compliant version of Thunderbird/Icedove already
> exists, and that we could surely apply the same fixes to our package, I
> see no problem with you posting your preliminary package definition.
> Please do so.  It would enable other interested developers to continue
> your work.
> 
>     Regards,
>       Mark

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 19:23     ` Nils Gillmann
@ 2018-04-03 19:45       ` Mark H Weaver
  2018-04-03 20:02         ` Nils Gillmann
  0 siblings, 1 reply; 14+ messages in thread
From: Mark H Weaver @ 2018-04-03 19:45 UTC (permalink / raw)
  To: Nils Gillmann; +Cc: guix-devel

Nils Gillmann <ng0@n0.is> writes:

> Mark H Weaver transcribed 1.3K bytes:
>> Did someone tell you that you shouldn't post a preliminary
>> Thunderbird/Icedove package definition to this mailing list?
>
> No. It just exists in a branch in an (experimental, fluid) repository where
> other nonfree software (partially as a base for other builds to be upstreamed)
> is located in, which is why I mentioned "policy reasons". If that's an exception
> I could link to the cgit, I'll do it of course.

Please do *not* link to that repo here.

> If the repo is not okay, I can send a mbox formated patch.

If you can isolate your preliminary Thunderbird/Icedove work from other
nonfree software, then please do send the patch here.

     Thanks!
       Mark

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 19:45       ` Mark H Weaver
@ 2018-04-03 20:02         ` Nils Gillmann
  2018-04-03 21:37           ` Björn Höfling
  0 siblings, 1 reply; 14+ messages in thread
From: Nils Gillmann @ 2018-04-03 20:02 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: guix-devel, Nils Gillmann

[-- Attachment #1: Type: text/plain, Size: 1202 bytes --]

Mark H Weaver transcribed 751 bytes:
> Nils Gillmann <ng0@n0.is> writes:
> 
> > Mark H Weaver transcribed 1.3K bytes:
> >> Did someone tell you that you shouldn't post a preliminary
> >> Thunderbird/Icedove package definition to this mailing list?
> >
> > No. It just exists in a branch in an (experimental, fluid) repository where
> > other nonfree software (partially as a base for other builds to be upstreamed)
> > is located in, which is why I mentioned "policy reasons". If that's an exception
> > I could link to the cgit, I'll do it of course.
> 
> Please do *not* link to that repo here.
> 
> > If the repo is not okay, I can send a mbox formated patch.
> 
> If you can isolate your preliminary Thunderbird/Icedove work from other
> nonfree software, then please do send the patch here.
> 
>      Thanks!
>        Mark

The patches would apply nowhere then, I'm sending a tarball of the work.
You can ignore the AGPL3 header, it's my default and for what I upstream
I relicense.

This is Thunderbird 52.6.0, I fear that version newer than 54.x will have the
same problem I'm debugging in newer Firefox now with mandatory rust.

Headsup: The package is wip'ish and generally very ugly in code.

[-- Attachment #2: ports-20180303-mail.tar --]
[-- Type: application/octet-stream, Size: 22911 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 20:02         ` Nils Gillmann
@ 2018-04-03 21:37           ` Björn Höfling
  2018-04-04  8:34             ` Ludovic Courtès
  0 siblings, 1 reply; 14+ messages in thread
From: Björn Höfling @ 2018-04-03 21:37 UTC (permalink / raw)
  To: Nils Gillmann; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 672 bytes --]

On Tue, 3 Apr 2018 20:02:23 +0000
Nils Gillmann <ng0@n0.is> wrote:

> The patches would apply nowhere then, I'm sending a tarball of the
> work. You can ignore the AGPL3 header, it's my default and for what I
> upstream I relicense.
> 
> This is Thunderbird 52.6.0, I fear that version newer than 54.x will
> have the same problem I'm debugging in newer Firefox now with
> mandatory rust.
> 
> Headsup: The package is wip'ish and generally very ugly in code.

Thanks for sharing this. I appreciate that you published this in
WIP-state. I just scrolled through the .scm-definition and be impressed
of the length. Will look into the details later.

Björn

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 13:49 Looking for Thunderbird/Icedove Björn Höfling
  2018-04-03 16:48 ` Nils Gillmann
@ 2018-04-04  5:14 ` Mark H Weaver
  2018-04-05  5:21   ` Björn Höfling
  2018-04-06 14:07   ` Mark H Weaver
  1 sibling, 2 replies; 14+ messages in thread
From: Mark H Weaver @ 2018-04-04  5:14 UTC (permalink / raw)
  To: Björn Höfling; +Cc: guix-devel

Hi Björn,

Björn Höfling <bjoern.hoefling@bjoernhoefling.de> writes:
> One of my key customers needs a new GNU/Linux installation and they are
> willing to give GuixSD a try if Thunderbird is available.
>
> I thought that's no problem and was surprised to not find anything
> like Icedove in the guix repository.

I looked into this a bit more, and the way forward now seems clear:
Parabola GNU/Linux has an Icedove package, based on Debian's Icedove but
with some additional fixes for FSDG and privacy issues.  It seems to be
well-maintained and up-to-date with Mozilla ESR 52:

  https://git.parabola.nu/abslibre.git/tree/libre/icedove

Icedove 52.x is based on the same upstream code as IceCat 52.x, so our
Icedove package should be based on our IceCat package, and possibly even
inheriting from it.  Thanks to Nils for posting his preliminary patch,
but I don't think it will be useful to us.

No promises, but I'll try to find time in the next few days to make an
attempt at an Icedove package.  As de-facto maintainer of the IceCat
package in Guix, I suppose that I'm well-positioned to work on this, and
I certainly agree that Guix should include Icedove.

     Regards,
       Mark

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-03 21:37           ` Björn Höfling
@ 2018-04-04  8:34             ` Ludovic Courtès
  2018-04-04  9:09               ` Nils Gillmann
  0 siblings, 1 reply; 14+ messages in thread
From: Ludovic Courtès @ 2018-04-04  8:34 UTC (permalink / raw)
  To: Björn Höfling; +Cc: guix-devel, Nils Gillmann

Hello,

Björn Höfling <bjoern.hoefling@bjoernhoefling.de> skribis:

> On Tue, 3 Apr 2018 20:02:23 +0000
> Nils Gillmann <ng0@n0.is> wrote:
>
>> The patches would apply nowhere then, I'm sending a tarball of the
>> work. You can ignore the AGPL3 header, it's my default and for what I
>> upstream I relicense.
>> 
>> This is Thunderbird 52.6.0, I fear that version newer than 54.x will
>> have the same problem I'm debugging in newer Firefox now with
>> mandatory rust.
>> 
>> Headsup: The package is wip'ish and generally very ugly in code.
>
> Thanks for sharing this. I appreciate that you published this in
> WIP-state. I just scrolled through the .scm-definition and be impressed
> of the length. Will look into the details later.

Maybe one of you can post the current patch to guix-patches and people
can then work from there?  (There’s already a few WIP patches at
https://bugs.gnu.org/guix-patches and I think it’s a fine way to let
people know that you’ve started working on something but that more work
is needed.)

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-04  8:34             ` Ludovic Courtès
@ 2018-04-04  9:09               ` Nils Gillmann
  0 siblings, 0 replies; 14+ messages in thread
From: Nils Gillmann @ 2018-04-04  9:09 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Nils Gillmann

Ludovic Courtès transcribed 1.1K bytes:
> Hello,
> 
> Björn Höfling <bjoern.hoefling@bjoernhoefling.de> skribis:
> 
> > On Tue, 3 Apr 2018 20:02:23 +0000
> > Nils Gillmann <ng0@n0.is> wrote:
> >
> >> The patches would apply nowhere then, I'm sending a tarball of the
> >> work. You can ignore the AGPL3 header, it's my default and for what I
> >> upstream I relicense.
> >> 
> >> This is Thunderbird 52.6.0, I fear that version newer than 54.x will
> >> have the same problem I'm debugging in newer Firefox now with
> >> mandatory rust.
> >> 
> >> Headsup: The package is wip'ish and generally very ugly in code.
> >
> > Thanks for sharing this. I appreciate that you published this in
> > WIP-state. I just scrolled through the .scm-definition and be impressed
> > of the length. Will look into the details later.
> 
> Maybe one of you can post the current patch to guix-patches and people
> can then work from there?  (There’s already a few WIP patches at
> https://bugs.gnu.org/guix-patches and I think it’s a fine way to let
> people know that you’ve started working on something but that more work
> is needed.)
> 
> Thanks,
> Ludo’.
> 

As far as I understood Mark's reply, Mark will work on this and there's no need
for my work.
For different purposes I'll continue with mine (opt-in optionals somewhere else).
Working the coming (54.x version) rust problems with Mozilla based software
will be for the benefit of Guix too, so I hope I can tell you how to get past
the obstacles created by this.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-04  5:14 ` Mark H Weaver
@ 2018-04-05  5:21   ` Björn Höfling
  2018-04-06 14:07   ` Mark H Weaver
  1 sibling, 0 replies; 14+ messages in thread
From: Björn Höfling @ 2018-04-05  5:21 UTC (permalink / raw)
  To: Mark H Weaver; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 447 bytes --]

On Wed, 04 Apr 2018 01:14:53 -0400
Mark H Weaver <mhw@netris.org> wrote:

> No promises, but I'll try to find time in the next few days to make an
> attempt at an Icedove package.  As de-facto maintainer of the IceCat
> package in Guix, I suppose that I'm well-positioned to work on this,
> and I certainly agree that Guix should include Icedove.
> 
>      Regards,
>        Mark

Sounds nice.

Thanks for doing that work.

Björn

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Looking for Thunderbird/Icedove
  2018-04-04  5:14 ` Mark H Weaver
  2018-04-05  5:21   ` Björn Höfling
@ 2018-04-06 14:07   ` Mark H Weaver
  1 sibling, 0 replies; 14+ messages in thread
From: Mark H Weaver @ 2018-04-06 14:07 UTC (permalink / raw)
  To: Björn Höfling; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 483 bytes --]

FYI, here's my current WIP patch to add Icedove.  It's currently stuck
on the same issue that Nils reported being stuck on, but it's based on
our existing IceCat package and already includes most (maybe all?) of
the Icedove rebranding and FSDG fixes from Parabola.

This is currently based on core-updates, but it should apply to master
without difficultly.  It also contains a few small untested changes to
the 'icecat' package.

I intend to continue working on this.

      Mark



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: [PATCH] WIP: gnu: Add icedove. --]
[-- Type: text/x-patch, Size: 57118 bytes --]

From 47fbd170b9d3718ff3a343ff362b6c9ca2150fa6 Mon Sep 17 00:00:00 2001
From: Mark H Weaver <mhw@netris.org>
Date: Thu, 5 Apr 2018 16:34:50 -0400
Subject: [PATCH] WIP: gnu: Add icedove.

---
 gnu/local.mk                                       |   5 +
 gnu/packages/gnuzilla.scm                          | 216 +++++++++-
 gnu/packages/patches/icedove-CVE-2018-5148.patch   |  53 +++
 .../patches/icedove-avoid-bundled-libraries.patch  |  35 ++
 gnu/packages/patches/icedove-libre.patch           | 448 +++++++++++++++++++++
 .../patches/icedove-use-system-graphite2.patch     | 250 ++++++++++++
 .../patches/icedove-use-system-harfbuzz.patch      | 281 +++++++++++++
 7 files changed, 1287 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/icedove-CVE-2018-5148.patch
 create mode 100644 gnu/packages/patches/icedove-avoid-bundled-libraries.patch
 create mode 100644 gnu/packages/patches/icedove-libre.patch
 create mode 100644 gnu/packages/patches/icedove-use-system-graphite2.patch
 create mode 100644 gnu/packages/patches/icedove-use-system-harfbuzz.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 7697a37b1..6cf49ad07 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -793,6 +793,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
   %D%/packages/patches/icecat-use-system-graphite2.patch	\
   %D%/packages/patches/icecat-use-system-harfbuzz.patch		\
+  %D%/packages/patches/icedove-CVE-2018-5148.patch		\
+  %D%/packages/patches/icedove-avoid-bundled-libraries.patch	\
+  %D%/packages/patches/icedove-libre.patch			\
+  %D%/packages/patches/icedove-use-system-graphite2.patch	\
+  %D%/packages/patches/icedove-use-system-harfbuzz.patch	\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index b4789d687..52ff09745 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -31,6 +31,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages autotools)
@@ -563,10 +564,18 @@ security standards.")
        #:validate-runpath? #f
 
        #:configure-flags '("--enable-default-toolkit=cairo-gtk3"
+
+                           "--with-distribution-id=org.gnu"
+
                            "--enable-gio"
                            "--enable-startup-notification"
                            "--enable-pulseaudio"
 
+                           "--disable-tests"
+                           "--disable-updater"
+                           "--disable-crashreporter"
+                           "--disable-maintenance-service"
+                           "--disable-eme"
                            "--disable-gconf"
                            "--disable-gnomeui"
 
@@ -639,7 +648,7 @@ security standards.")
               (close-port out))
             #t))
          (add-after
-          'unpack 'arrange-to-link-libxul-with-libraries-it-might-dlopen
+          'unpack 'link-libxul-with-libraries
           (lambda _
             ;; libxul.so dynamically opens libraries, so here we explicitly
             ;; link them into libxul.so instead.
@@ -754,3 +763,208 @@ features built-in privacy-protecting features.")
      `((ftp-directory . "/gnu/gnuzilla")
        (cpe-name . "firefox_esr")
        (cpe-version . ,(first (string-split version #\-)))))))
+
+(define-public icedove
+  (package
+    (name "icedove")
+    (version "52.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://ftp.mozilla.org/pub/mozilla.org/"
+                                  "thunderbird/releases/" version "/source/"
+                                  "thunderbird-" version ".source.tar.xz"))
+              (sha256
+               (base32 "18rf576mhx9sf4g0gdb22mnpnssrcrhlm4i66b07ivcksf82hil2"))
+              (patches (search-patches "icedove-avoid-bundled-libraries.patch"
+                                       "icedove-use-system-harfbuzz.patch"
+                                       "icedove-use-system-graphite2.patch"
+                                       "icedove-libre.patch"
+                                       "icedove-CVE-2018-5148.patch"))
+              (modules (origin-modules (package-source icecat)))
+              (snippet
+               `(begin
+                  (with-directory-excursion "mozilla"
+                    ,(origin-snippet (package-source icecat)))))))
+    (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments icecat)
+       ((#:configure-flags icecat-configure-flags)
+        `(append (list "--enable-application=mail"
+                       "--enable-calendar"
+                       "--enable-release"
+                       "--disable-official-branding"
+                       "--with-branding=mail/branding/icedove"
+                       "--disable-safe-browsing"
+                       "--disable-url-classifier"
+                       "--disable-webrtc"
+                       "--disable-elf-hack")
+                 (delete "--enable-official-branding"
+                         ,icecat-configure-flags)))
+       ((#:make-flags icecat-make-flags ''())
+        `(append (list "-f" "client.mk"
+                       "SH=sh")
+                 ,icecat-make-flags))
+       ((#:out-of-source? icecat-out-of-source?)
+        #f)
+       ((#:phases icecat-phases)
+        `(let ((icecat-phases ,icecat-phases))
+           (modify-phases %standard-phases
+             (add-after 'unpack 'unpack-branding
+               (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                 (define (first-file directory)
+                   (car (scandir directory
+                                 (lambda (name)
+                                   (not (member name '("." "..")))))))
+                 (with-directory-excursion ".."
+                   (let* ((native-inputs (or native-inputs inputs))
+                          (tar           (assoc-ref native-inputs "tar"))
+                          (branding      (assoc-ref native-inputs "branding"))
+                          (tmp           ".tmp-unpack"))
+                     (mkdir tmp)
+                     (with-directory-excursion tmp
+                       (invoke (string-append tar "/bin/tar") "xf" branding)
+                       (rename-file (first-file ".") "../branding"))
+                     (rmdir tmp)))
+                 #t))
+
+             (add-after 'unpack-branding 'apply-branding
+               (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                 (let ((native-inputs (or native-inputs inputs))
+                       (branding "../branding"))
+
+                   ;; Populate mail/branding/icedove.
+                   (copy-recursively (string-append branding "/icedove-branding")
+                                     "mail/branding/icedove")
+
+                   ;; Copy the icons.
+                   (let ((icons-dir (string-append branding "/app-icons")))
+                     (define (copy-icons target-fmt sizes)
+                       (for-each (lambda (size)
+                                   (copy-file (format #f "~a/icedove~a.png"
+                                                      icons-dir size)
+                                              (format #f target-fmt size)))
+                                 sizes))
+                     (copy-icons "mail/branding/icedove/mailicon~a.png"
+                                 '(16 22 24 32 48 64 128 256))
+                     (copy-icons "mail/branding/icedove/content/icon~a.png"
+                                 '(48 64))
+                     (copy-file (string-append branding "/preview.png")
+                                "mail/themes/linux/mail/preview.png"))
+
+                   ;; Fix branding in migration wizard, etc.
+                   (substitute* "mail/app/profile/all-thunderbird.js"
+                     (("%APP%") "thunderbird"))
+
+                   ;; Apply the included patches.
+                   (let* ((patch         (assoc-ref native-inputs "patch"))
+                          (patch-dir     (string-append branding "/patches"))
+                          (series-file   (string-append patch-dir "/series"))
+                          (file-contents (call-with-input-file series-file
+                                           read-string))
+                          (patches       (filter (negate string-null?)
+                                                 (string-split file-contents
+                                                               #\newline))))
+                     (for-each (lambda (file)
+                                 (unless (string-contains file "migration-wizard")
+                                   (invoke (string-append patch "/bin/patch")
+                                           "--force" "--no-backup-if-mismatch"
+                                           "-p1" "--input"
+                                           (string-append patch-dir "/" file))))
+                               patches))
+                   #t)))
+
+             (add-after 'apply-branding 'replace-search-plugins
+               (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                 ;; Replace the default search plugins with those of IceCat.
+                 (let* ((native-inputs (or native-inputs inputs))
+                        (gnuzilla      (assoc-ref native-inputs "gnuzilla"))
+                        (plugins-dir   "mail/locales/en-US/searchplugins"))
+                   (delete-file-recursively plugins-dir)
+                   (mkdir plugins-dir)
+                   (copy-recursively (string-append gnuzilla "/data/searchplugins")
+                                     plugins-dir))
+                 #t))
+
+             (add-before 'configure 'link-libxul-with-libraries
+               (lambda args
+                 (with-directory-excursion "mozilla"
+                   (apply (assoc-ref icecat-phases 'link-libxul-with-libraries)
+                          args))))
+
+             (add-before 'configure 'ensure-no-mtimes-pre-1980
+               (assoc-ref icecat-phases 'ensure-no-mtimes-pre-1980))
+
+             (replace 'configure
+               ;; configure does not work followed by both "SHELL=..." and
+               ;; "CONFIG_SHELL=..."; set environment variables instead
+               (lambda* (#:key outputs configure-flags #:allow-other-keys)
+                 (let* ((out   (assoc-ref outputs "out"))
+                        (bash  (which "bash"))
+                        (flags (cons (string-append "--prefix=" out)
+                                     configure-flags)))
+                   (format #t "configure flags: ~s~%" flags)
+                   (call-with-output-file ".mozconfig"
+                     (lambda (port)
+                       (for-each (lambda (flag)
+                                   (format port "ac_add_options ~a~%" flag))
+                                 flags)))
+                   (setenv "SHELL" bash)
+                   (setenv "CONFIG_SHELL" bash)
+                   (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
+                   (substitute* "configure"
+                     (("^SRCDIR=.*") (format #f "SRCDIR=~s~%" (getcwd))))
+                   ;; The configure script is run during the 'build' phase.
+                   #t)))
+
+             ;; FIXME: Implement these phases, if needed.
+             (delete 'install-desktop-entry)
+             (delete 'install-icons)
+             (delete 'wrap-program))))))
+    (inputs (package-inputs icecat))
+    (native-inputs
+     `(,@(package-native-inputs icecat)
+       ("patch" ,patch)
+       ("tar" ,tar)
+       ("xz" ,xz)
+       ("gnuzilla"
+        ,(let ((commit "95d8edd62741b0ef504f0c47e374c8af90650458"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference (url "git://git.savannah.gnu.org/gnuzilla.git")
+                                 (commit commit)))
+             (file-name (string-append "gnuzilla-source-"
+                                       (string-take commit 7)
+                                       "-checkout"))
+             (sha256
+              (base32 "0qlwad45ln318ifhh29q2aafa3g0lfhmcbdqh7ny1nzzf9i4z2ca")))))
+       ("branding"
+        ,(let ((branding-version "52.1-1"))
+           (origin
+             (method url-fetch)
+             (uri (string-append "https://repomirror.parabola.nu/other/icedove/"
+                                 "icedove_" branding-version ".branding.tar.xz"))
+             (file-name (string-append "icedove-branding" branding-version))
+             (sha256
+              (base32 "0rgwvv68xbk1apkrrpqfbv2d9y12fgwjfqlyp7aymyr4cnbihr14")))))
+       ("desktop-file"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://git.parabola.nu/abslibre.git"
+                 "/plain/libre/icedove/icedove.desktop"
+                 "?id=053755d6cabfc82cc3cf83042ea7b09e91d83bde"))
+           (sha256
+            (base32 "1w1jcsjli9194gf23l8f87rsyw805lgbsn1l2jfih2dy5shrk0dg"))))))
+    (home-page "https://directory.fsf.org/wiki/Icedove")
+    (synopsis "Mail/news client with RSS and integrated spam filter support")
+    (description
+     "Icedove is an unbranded Thunderbird mail client suitable for free
+distribution.  It supports different mail accounts (POP, IMAP, Gmail), has an
+integrated learning Spam filter, and offers easy organization of mails with
+tagging and virtual folders.  More features can be added by installing
+extensions.")
+    ;; TODO: Check licensing more carefully.
+    (license (list license:mpl1.1
+                   license:mpl2.0
+                   license:gpl2+
+                   license:lgpl2.1+))))
diff --git a/gnu/packages/patches/icedove-CVE-2018-5148.patch b/gnu/packages/patches/icedove-CVE-2018-5148.patch
new file mode 100644
index 000000000..a5afe64c5
--- /dev/null
+++ b/gnu/packages/patches/icedove-CVE-2018-5148.patch
@@ -0,0 +1,53 @@
+This changeset from the upstream mozilla-esr52 repository was adapted
+to apply to icedove, by prepending "mozilla/" to the file names.
+
+# HG changeset patch
+# User Nicolas Silva <nsilva@mozilla.com>
+# Date 1520858160 -3600
+# Node ID c3e447e07077412b9cfaacb2ea91974655ed753b
+# Parent  bb8ae7990f45dd295b80a347b779bcc4690205fa
+Bug 1440717 - Use RefPtr for CompositingRenderTargetOGL::mGL. r=Bas, a=ritu
+
+--- a/mozilla/gfx/layers/opengl/CompositingRenderTargetOGL.cpp
++++ b/mozilla/gfx/layers/opengl/CompositingRenderTargetOGL.cpp
+@@ -55,17 +55,17 @@ CompositingRenderTargetOGL::BindRenderTa
+         mGL->RenewSurface(mCompositor->GetWidget()->RealWidget());
+         result = mGL->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
+       }
+       if (result != LOCAL_GL_FRAMEBUFFER_COMPLETE) {
+         nsAutoCString msg;
+         msg.AppendPrintf("Framebuffer not complete -- CheckFramebufferStatus returned 0x%x, "
+                          "GLContext=%p, IsOffscreen()=%d, mFBO=%d, aFBOTextureTarget=0x%x, "
+                          "aRect.width=%d, aRect.height=%d",
+-                         result, mGL, mGL->IsOffscreen(), mFBO, mInitParams.mFBOTextureTarget,
++                         result, mGL.get(), mGL->IsOffscreen(), mFBO, mInitParams.mFBOTextureTarget,
+                          mInitParams.mSize.width, mInitParams.mSize.height);
+         NS_WARNING(msg.get());
+       }
+     }
+ 
+     needsClear = mClearOnBind;
+   }
+ 
+--- a/mozilla/gfx/layers/opengl/CompositingRenderTargetOGL.h
++++ b/mozilla/gfx/layers/opengl/CompositingRenderTargetOGL.h
+@@ -179,17 +179,17 @@ private:
+ 
+   InitParams mInitParams;
+   /**
+    * There is temporary a cycle between the compositor and the render target,
+    * each having a strong ref to the other. The compositor's reference to
+    * the target is always cleared at the end of a frame.
+    */
+   RefPtr<CompositorOGL> mCompositor;
+-  GLContext* mGL;
++  RefPtr<GLContext> mGL;
+   GLuint mTextureHandle;
+   GLuint mFBO;
+ };
+ 
+ } // namespace layers
+ } // namespace mozilla
+ 
+ #endif /* MOZILLA_GFX_SURFACEOGL_H */
+
diff --git a/gnu/packages/patches/icedove-avoid-bundled-libraries.patch b/gnu/packages/patches/icedove-avoid-bundled-libraries.patch
new file mode 100644
index 000000000..56b263702
--- /dev/null
+++ b/gnu/packages/patches/icedove-avoid-bundled-libraries.patch
@@ -0,0 +1,35 @@
+Fixes needed when avoiding bundled libraries.
+
+--- icedove-52.7.0/mozilla/xpcom/build/moz.build.orig
++++ icedove-52.7.0/mozilla/xpcom/build/moz.build
+@@ -93,10 +93,5 @@
+     '/docshell/base',
+ ]
+ 
+-if CONFIG['MOZ_VPX']:
+-    LOCAL_INCLUDES += [
+-        '/media/libvpx',
+-    ]
+-
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
+     CXXFLAGS += CONFIG['TK_CFLAGS']
+--- icedove-52.7.0/mozilla/storage/moz.build.orig
++++ icedove-52.7.0/mozilla/storage/moz.build
+@@ -114,7 +114,6 @@
+     DEFINES['MOZ_MEMORY_TEMP_STORE_PRAGMA'] = True
+ 
+ LOCAL_INCLUDES += [
+-    '/db/sqlite3/src',
+     '/dom/base',
+ ]
+ 
+--- icedove-52.7.0/mozilla/dom/indexedDB/moz.build.orig
++++ icedove-52.7.0/mozilla/dom/indexedDB/moz.build
+@@ -101,7 +101,6 @@
+     CXXFLAGS += ['-Wno-error=shadow']
+ 
+ LOCAL_INCLUDES += [
+-    '/db/sqlite3/src',
+     '/dom/base',
+     '/dom/storage',
+     '/dom/workers',
diff --git a/gnu/packages/patches/icedove-libre.patch b/gnu/packages/patches/icedove-libre.patch
new file mode 100644
index 000000000..6e2197a4b
--- /dev/null
+++ b/gnu/packages/patches/icedove-libre.patch
@@ -0,0 +1,448 @@
+Based on the following patch from Parabola:
+<https://git.parabola.nu/abslibre.git/tree/libre/icedove/libre.patch?id=70c99b45b3cfd2b5f6b33b858c35dff893988875>
+
+with additional changes to mail/installer/package-manifest.in and
+mail/app/profile/all-thunderbird.js based on similar changes made by
+Parabola's PKGBUILD using 'sed'.
+
+--- a/mail/locales/search/list.json
++++ b/mail/locales/search/list.json
+@@ -1,315 +1,315 @@
+ {
+   "default": {
+     "visibleDefaultEngines": [
+-      "amazondotcom", "aol-web-search", "bing", "twitter", "wikipedia", "yahoo"
++      "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+     ]
+   },
+   "locales": {
+     "en-US": {
+       "default": {
+         "visibleDefaultEngines": [
+-           "amazondotcom", "aol-web-search", "bing", "twitter", "wikipedia", "yahoo"
++           "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ar": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "bing", "yahoo", "twitter", "wikipedia-ar", "amazondotcom"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ast": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "twitter", "wikipedia-ast", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "be": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "be.wikipedia.org", "be-x-old.wikipedia.org", "ru.wikipedia.org-be", "tut.by", "yahoo", "yandex.by"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "br": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "google", "twitter", "wikipedia", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ca": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "bing", "huubs", "diec2", "wikipedia-ca", "llibres"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "cs": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "seznam-cz", "duckduckgo-cz", "heureka-cz", "mapy-cz", "wikipedia-cz"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "da": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazon-co-uk", "bing", "google", "wikipedia-da"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "de": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom-de", "bing", "twitter-de", "wikipedia-de", "yahoo-de"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "en-GB": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazon-en-GB", "aol-en-GB", "bing", "google", "twitter", "wikipedia", "yahoo-en-GB"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "es-AR": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yahoo-ar", "amazondotcom", "mercadolibre-ar", "drae", "wikipedia-es"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "es-ES": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yahoo-es", "bing", "drae", "twitter", "wikipedia-es"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "et": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "neti-ee", "osta-ee", "eki-ee", "wikipedia-et"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "fi": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "bing", "twitter", "wikipedia-fi", "yahoo-fi"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "fr": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazon-france", "bing", "wikipedia-fr", "yahoo-france", "cnrtl-tlfi-fr"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ga-IE": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "twitter", "yahoo-en-GB", "amazon-en-GB", "focal", "wikipedia-ga-IE"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "gd": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yahoo-en-GB", "bbc-alba", "amazon-en-GB", "faclair-beag", "wikipedia-gd"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "he": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "google", "twitter", "wikipedia", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "hr": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "google", "twitter", "wikipedia", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "hu": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "sztaki-en-hu", "vatera", "wikipedia-hu"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "id": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yahoo-id", "wikipedia-id"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "is": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "bing", "leit-is", "wikipedia-is", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "it": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazon-it", "bing", "google", "twitter", "wikipedia-it", "yahoo-it"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ja-JP-mac": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google-jp", "yahoo-jp", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ja": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google-jp", "yahoo-jp", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "kab": {
+       "default": {
+         "visibleDefaultEngines": [
+-           "amazondotcom", "aol-web-search", "bing", "twitter", "wikipedia", "yahoo"
++           "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ko": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "danawa-kr", "daum-kr", "google","naver-kr", "wikipedia-kr"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "lt": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "bing", "google", "twitter", "wikipedia-lt"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "nb-NO": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "google", "twitter", "wikipedia", "yahoo", "gulesider-NO"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "nl": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "bing", "yahoo", "google", "twitter", "wikipedia-nl", "marktplaats-nl"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "nn-NO": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "twitter", "wikipedia", "yahoo", "gulesider-NO"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "pl": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "allegro-pl", "google", "pwn-pl", "wikipedia-pl", "wolnelektury-pl"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "pt-PT": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "sapo", "priberam", "wikipedia-ptpt", "amazon-en-GB"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "rm": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "bing", "google", "leo_ende_de", "pledarigrond", "wikipedia-rm", "yahoo-ch"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ro": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "yahoo", "bing", "amazondotcom", "wikipediaro"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "ru": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "bing", "duckduckgo-ru", "ozonru", "priceru", "wikipedia-ru", "yandex"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "sk": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "atlas-sk", "azet-sk", "bing", "google", "slovnik-sk", "wikipedia-sk", "zoznam-sk"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "sl": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "najdi-si", "ceneji", "google", "odpiralni", "twitter", "wikipedia-sl"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "sq": {
+       "default": {
+         "visibleDefaultEngines": [
+-           "amazondotcom", "bing", "twitter", "wikipedia-sq", "yahoo"
++           "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "sv-SE": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "bing", "yahoo", "wikipedia-sv-SE", "tyda-sv-SE", "prisjakt-sv-SE"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "tr": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yandex-tr", "wikipedia-tr"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "uk": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yandex", "meta-ua", "metamarket", "wikipedia-uk"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "vi": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "amazondotcom", "aol-web-search", "bing", "google", "twitter", "wikipedia", "yahoo"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     },
+     "zh-TW": {
+       "default": {
+         "visibleDefaultEngines": [
+-          "google", "yahoo-zh-TW", "yahoo-bid-zh-TW", "wikipedia-zh-TW", "chunghwapost-zh-TW", "google-maps-zh-TW", "ipeen-zh-TW", "findbook-zh-TW"
++          "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+         ]
+       }
+     }
+diff --git a/mail/locales/en-US/chrome/messenger-region/region.properties b/mail/locales/en-US/chrome/messenger-region/region.properties
+index fcc870d..f810450 100644
+--- a/mail/locales/en-US/chrome/messenger-region/region.properties
++++ b/mail/locales/en-US/chrome/messenger-region/region.properties
+@@ -3,12 +3,12 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ # Default search engine
+-browser.search.defaultenginename=Bing
++browser.search.defaultenginename=searx
+ 
+ # Search engine order (order displayed in the search bar dropdown)s
+-browser.search.order.1=Bing
+-browser.search.order.2=Yahoo
+-browser.search.order.3=
++browser.search.order.1=searx
++browser.search.order.2=DuckDuckGo HTML
++browser.search.order.3=DuckDuckGo Lite
+ 
+ # To make mapit buttons to disappear in the addressbook, specify empty string.  For example:
+ # mail.addr_book.mapit_url.format=
+@@ -23,14 +23,12 @@ browser.search.order.3=
+ # @ZI == zip code
+ # @CO == country
+ # Default map service:
+-mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO
++mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO
+ # List of available map services (up to 5 can be defined here):
+-mail.addr_book.mapit_url.1.name=Google Maps
+-mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO
+-mail.addr_book.mapit_url.2.name=OpenStreetMap
+-mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO
++mail.addr_book.mapit_url.1.name=OpenStreetMap
++mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO
+ 
+-mailnews.messageid_browser.url=http://groups.google.com/search?as_umsgid=%mid
++mailnews.messageid_browser.url=
+ 
+ # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al.
+ # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV
+--- a/mail/installer/package-manifest.in
++++ b/mail/installer/package-manifest.in
+@@ -696,12 +696,6 @@
+ ; Modules
+ @RESPATH@/modules/*
+ 
+-@RESPATH@/components/nsURLClassifier.manifest
+-@RESPATH@/components/nsUrlClassifierHashCompleter.js
+-@RESPATH@/components/nsUrlClassifierListManager.js
+-@RESPATH@/components/nsUrlClassifierLib.js
+-@RESPATH@/components/url-classifier.xpt
+-
+ ; Security Reports
+ @RESPATH@/components/SecurityReporter.manifest
+ @RESPATH@/components/SecurityReporter.js
+--- a/mail/app/profile/all-thunderbird.js
++++ b/mail/app/profile/all-thunderbird.js
+@@ -156,13 +156,13 @@
+ // Preferences for AMO integration
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.maxResults", 15);
+-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/search/guid:%IDS%?src=thunderbird&appOS=%OS%&appVersion=%VERSION%");
+-pref("extensions.getAddons.getWithPerformance.url", "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/search/guid:%IDS%?src=thunderbird&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
+-pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/%APP%/");
+-pref("extensions.getAddons.recommended.url", "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/%OS%/%VERSION%?src=thunderbird");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/%APP%/search?q=%TERMS%");
+-pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%?src=thunderbird");
+-pref("extensions.webservice.discoverURL", "https://services.addons.mozilla.org/%LOCALE%/%APP%/discovery/pane/%VERSION%/%OS%");
++pref("extensions.getAddons.get.url", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.getAddons.getWithPerformance.url", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.getAddons.link.url", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.getAddons.recommended.url", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.getAddons.search.browseURL", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.getAddons.search.url", "https://directory.fsf.org/wiki/Icedove");
++pref("extensions.webservice.discoverURL", "https://directory.fsf.org/wiki/Icedove");
+ 
+ // Blocklist preferences
+ pref("extensions.blocklist.enabled", true);
diff --git a/gnu/packages/patches/icedove-use-system-graphite2.patch b/gnu/packages/patches/icedove-use-system-graphite2.patch
new file mode 100644
index 000000000..9794bbe63
--- /dev/null
+++ b/gnu/packages/patches/icedove-use-system-graphite2.patch
@@ -0,0 +1,250 @@
+Copied from <https://reviewboard.mozilla.org/r/90218/diff/4>
+See <https://bugzilla.mozilla.org/show_bug.cgi?id=847568>
+
+Adapted for Icedove.
+
+diff --git a/mozilla/config/Makefile.in b/config/Makefile.in
+--- a/mozilla/config/Makefile.in
++++ b/mozilla/config/Makefile.in
+@@ -36,16 +36,17 @@ ifdef WRAP_SYSTEM_INCLUDES
+ export-preqs = \
+   $(call mkdir_deps,system_wrappers) \
+   $(NULL)
+ 
+ export:: $(export-preqs)
+ 	$(PYTHON) -m mozbuild.action.preprocessor $(DEFINES) $(ACDEFINES) \
+ 		-DMOZ_TREE_CAIRO=$(MOZ_TREE_CAIRO) \
+ 		-DMOZ_TREE_PIXMAN=$(MOZ_TREE_PIXMAN) \
++		-DMOZ_SYSTEM_GRAPHITE2=$(MOZ_SYSTEM_GRAPHITE2) \
+ 		-DMOZ_SYSTEM_HARFBUZZ=$(MOZ_SYSTEM_HARFBUZZ) \
+ 		-DMOZ_SYSTEM_HUNSPELL=$(MOZ_SYSTEM_HUNSPELL) \
+ 		-DMOZ_SYSTEM_BZ2=$(MOZ_SYSTEM_BZ2) \
+ 		-DMOZ_SYSTEM_ZLIB=$(MOZ_SYSTEM_ZLIB) \
+ 		-DMOZ_SYSTEM_PNG=$(MOZ_SYSTEM_PNG) \
+ 		-DMOZ_SYSTEM_JPEG=$(MOZ_SYSTEM_JPEG) \
+ 		-DMOZ_SYSTEM_LIBEVENT=$(MOZ_SYSTEM_LIBEVENT) \
+ 		-DMOZ_SYSTEM_LIBVPX=$(MOZ_SYSTEM_LIBVPX) \
+diff --git a/mozilla/config/system-headers b/config/system-headers
+--- a/mozilla/config/system-headers
++++ b/mozilla/config/system-headers
+@@ -1260,16 +1260,20 @@ zlib.h
+ #ifdef MOZ_ENABLE_STARTUP_NOTIFICATION
+ libsn/sn.h
+ libsn/sn-common.h
+ libsn/sn-launchee.h
+ libsn/sn-launcher.h
+ libsn/sn-monitor.h
+ libsn/sn-util.h
+ #endif
++#if MOZ_SYSTEM_GRAPHITE2==1
++graphite2/Font.h
++graphite2/Segment.h
++#endif
+ #if MOZ_SYSTEM_HARFBUZZ==1
+ harfbuzz/hb-glib.h
+ harfbuzz/hb-ot.h
+ harfbuzz/hb.h
+ #endif
+ #if MOZ_SYSTEM_HUNSPELL==1
+ hunspell.hxx
+ #endif
+diff --git a/mozilla/gfx/graphite2/moz-gr-update.sh b/gfx/graphite2/moz-gr-update.sh
+--- a/mozilla/gfx/graphite2/moz-gr-update.sh
++++ b/mozilla/gfx/graphite2/moz-gr-update.sh
+@@ -1,11 +1,12 @@
+ #!/bin/bash
+ 
+ # Script used to update the Graphite2 library in the mozilla source tree
++# and bump version for --with-system-graphite2
+ 
+ # This script lives in gfx/graphite2, along with the library source,
+ # but must be run from the top level of the mozilla-central tree.
+ 
+ # Run as
+ #
+ #    ./gfx/graphite2/moz-gr-update.sh RELEASE
+ #
+@@ -32,22 +33,26 @@ echo "This directory contains the Graphi
+ echo "$TARBALL" >> gfx/graphite2/README.mozilla
+ echo ""
+ echo "See" $0 "for update procedure." >> gfx/graphite2/README.mozilla
+ 
+ # fix up includes because of bug 721839 (cstdio) and bug 803066 (Windows.h)
+ #find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+ #find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+ 
++# chase version for --with-system-graphite2
++perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \
++  if /GR2_VERSION_REQUIRE/" old-configure.in
++
+ # summarize what's been touched
+ echo Updated to $RELEASE.
+ echo Here is what changed in the gfx/graphite2 directory:
+ echo
+ 
+-hg stat gfx/graphite2
++hg stat old-configure.in gfx/graphite2
+ 
+ echo
+ echo If gfx/graphite2/src/files.mk has changed, please make corresponding
+ echo changes to gfx/graphite2/src/moz.build
+ echo
+ 
+ echo
+ echo Now use hg commands to create a patch for the mozilla tree.
+diff --git a/mozilla/gfx/moz.build b/gfx/moz.build
+--- a/mozilla/gfx/moz.build
++++ b/mozilla/gfx/moz.build
+@@ -2,28 +2,30 @@
+ # vim: set filetype=python:
+ # This Source Code Form is subject to the terms of the Mozilla Public
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ if CONFIG['MOZ_TREE_CAIRO']:
+     DIRS += ['cairo']
+ 
++if not CONFIG['MOZ_SYSTEM_GRAPHITE2']:
++    DIRS += ['graphite2/src' ]
++
+ if not CONFIG['MOZ_SYSTEM_HARFBUZZ']:
+     DIRS += ['harfbuzz/src']
+ 
+ DIRS += [
+     '2d',
+     'ycbcr',
+     'angle',
+     'src',
+     'qcms',
+     'gl',
+     'layers',
+-    'graphite2/src',
+     'ots/src',
+     'thebes',
+     'ipc',
+     'vr',
+     'config',
+ ]
+ 
+ if CONFIG['MOZ_ENABLE_SKIA']:
+diff --git a/mozilla/gfx/thebes/moz.build b/gfx/thebes/moz.build
+--- a/mozilla/gfx/thebes/moz.build
++++ b/mozilla/gfx/thebes/moz.build
+@@ -261,16 +261,19 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('and
+     CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+ 
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'):
+     CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS']
+ 
+ LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES']
+ LOCAL_INCLUDES += ['/media/libyuv/include']
+ 
+-DEFINES['GRAPHITE2_STATIC'] = True
++if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
++    CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
++else:
++    DEFINES['GRAPHITE2_STATIC'] = True
+ 
+ if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
+     CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+ 
+ if CONFIG['CLANG_CXX']:
+     # Suppress warnings from Skia header files.
+     SOURCES['gfxPlatform.cpp'].flags += ['-Wno-implicit-fallthrough']
+diff --git a/mozilla/moz.configure b/moz.configure
+--- a/mozilla/moz.configure
++++ b/mozilla/moz.configure
+@@ -260,16 +260,28 @@ def extra_programs(target):
+ 
+ check_prog('DSYMUTIL', delayed_getattr(extra_programs, 'DSYMUTIL'),
+            allow_missing=True)
+ check_prog('GENISOIMAGE', delayed_getattr(extra_programs, 'GENISOIMAGE'),
+            allow_missing=True)
+ check_prog('RPMBUILD', delayed_getattr(extra_programs, 'RPMBUILD'),
+            allow_missing=True)
+ 
++option('--with-system-graphite2',
++       help="Use system graphite2 (located with pkgconfig)")
++
++@depends('--with-system-graphite2', compile_environment)
++def check_for_graphite2(value, compile_env):
++    return value and compile_env
++
++system_graphite2 = pkg_check_modules('MOZ_GRAPHITE2', 'graphite2',
++                                    check_for_graphite2)
++
++set_config('MOZ_SYSTEM_GRAPHITE2', depends_if(system_graphite2)(lambda _: True))
++
+ option('--with-system-harfbuzz',
+        help="Use system harfbuzz (located with pkgconfig)")
+ 
+ @depends('--with-system-harfbuzz', compile_environment)
+ def check_for_harfbuzz(value, compile_env):
+     return value and compile_env
+ 
+ system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.3.3',
+diff --git a/mozilla/old-configure.in b/old-configure.in
+--- a/mozilla/old-configure.in
++++ b/mozilla/old-configure.in
+@@ -5060,16 +5060,37 @@ if test "$USE_FC_FREETYPE"; then
+         CPPFLAGS="$CPPFLAGS $FT2_CFLAGS $XCFLAGS"
+         MOZ_CHECK_HEADERS([fontconfig/fcfreetype.h], ,
+             [AC_MSG_ERROR(Can't find header fontconfig/fcfreetype.h.)], [#include <fontconfig/fontconfig.h>])
+         CPPFLAGS="$_SAVE_CPPFLAGS"
+     fi
+ fi
+ 
+ dnl ========================================================
++dnl Check for graphite2
++dnl ========================================================
++if test -n "$MOZ_SYSTEM_GRAPHITE2"; then
++    dnl graphite2.pc has bogus version, check manually
++    _SAVE_CFLAGS=$CFLAGS
++    CFLAGS="$CFLAGS $MOZ_GRAPHITE2_CFLAGS"
++    AC_TRY_COMPILE([ #include <graphite2/Font.h>
++                     #define GR2_VERSION_REQUIRE(major,minor,bugfix)  \
++                             ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \
++                               * 100 + GR2_VERSION_BUGFIX >= \
++                               (major) * 10000 + (minor) * 100 + (bugfix) )
++                   ], [
++                     #if !GR2_VERSION_REQUIRE(1,3,8)
++                     #error "Insufficient graphite2 version."
++                     #endif
++                   ], [],
++                   [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])])
++    CFLAGS=$_SAVE_CFLAGS
++fi
++
++dnl ========================================================
+ dnl Check for pixman and cairo
+ dnl ========================================================
+ 
+ MOZ_TREE_CAIRO=1
+ MOZ_ARG_ENABLE_BOOL(system-cairo,
+ [  --enable-system-cairo   Use system cairo (located with pkgconfig)],
+ MOZ_TREE_CAIRO=,
+ MOZ_TREE_CAIRO=1 )
+diff --git a/mozilla/toolkit/library/moz.build b/toolkit/library/moz.build
+--- a/mozilla/toolkit/library/moz.build
++++ b/mozilla/toolkit/library/moz.build
+@@ -221,16 +221,19 @@ if CONFIG['SERVO_TARGET_DIR']:
+         OS_LIBS += ['-L%s' % CONFIG['SERVO_TARGET_DIR'], '-lgeckoservo']
+ 
+ if CONFIG['MOZ_SYSTEM_JPEG']:
+     OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_PNG']:
+     OS_LIBS += CONFIG['MOZ_PNG_LIBS']
+ 
++if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
++    OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS']
++
+ if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
+     OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_HUNSPELL']:
+     OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_LIBEVENT']:
+     OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
+
diff --git a/gnu/packages/patches/icedove-use-system-harfbuzz.patch b/gnu/packages/patches/icedove-use-system-harfbuzz.patch
new file mode 100644
index 000000000..89670a8fd
--- /dev/null
+++ b/gnu/packages/patches/icedove-use-system-harfbuzz.patch
@@ -0,0 +1,281 @@
+Copied from <https://reviewboard.mozilla.org/r/35763/diff/9>
+See <https://bugzilla.mozilla.org/show_bug.cgi?id=847568>
+
+Adapted for Icedove.
+
+diff --git a/mozilla/config/Makefile.in b/config/Makefile.in
+--- a/mozilla/config/Makefile.in
++++ b/mozilla/config/Makefile.in
+@@ -36,16 +36,17 @@ ifdef WRAP_SYSTEM_INCLUDES
+ export-preqs = \
+   $(call mkdir_deps,system_wrappers) \
+   $(NULL)
+ 
+ export:: $(export-preqs)
+ 	$(PYTHON) -m mozbuild.action.preprocessor $(DEFINES) $(ACDEFINES) \
+ 		-DMOZ_TREE_CAIRO=$(MOZ_TREE_CAIRO) \
+ 		-DMOZ_TREE_PIXMAN=$(MOZ_TREE_PIXMAN) \
++		-DMOZ_SYSTEM_HARFBUZZ=$(MOZ_SYSTEM_HARFBUZZ) \
+ 		-DMOZ_SYSTEM_HUNSPELL=$(MOZ_SYSTEM_HUNSPELL) \
+ 		-DMOZ_SYSTEM_BZ2=$(MOZ_SYSTEM_BZ2) \
+ 		-DMOZ_SYSTEM_ZLIB=$(MOZ_SYSTEM_ZLIB) \
+ 		-DMOZ_SYSTEM_PNG=$(MOZ_SYSTEM_PNG) \
+ 		-DMOZ_SYSTEM_JPEG=$(MOZ_SYSTEM_JPEG) \
+ 		-DMOZ_SYSTEM_LIBEVENT=$(MOZ_SYSTEM_LIBEVENT) \
+ 		-DMOZ_SYSTEM_LIBVPX=$(MOZ_SYSTEM_LIBVPX) \
+ 		-DMOZ_SYSTEM_ICU=$(MOZ_SYSTEM_ICU) \
+diff --git a/mozilla/config/system-headers b/config/system-headers
+--- a/mozilla/config/system-headers
++++ b/mozilla/config/system-headers
+@@ -1260,16 +1260,21 @@ zlib.h
+ #ifdef MOZ_ENABLE_STARTUP_NOTIFICATION
+ libsn/sn.h
+ libsn/sn-common.h
+ libsn/sn-launchee.h
+ libsn/sn-launcher.h
+ libsn/sn-monitor.h
+ libsn/sn-util.h
+ #endif
++#if MOZ_SYSTEM_HARFBUZZ==1
++harfbuzz/hb-glib.h
++harfbuzz/hb-ot.h
++harfbuzz/hb.h
++#endif
+ #if MOZ_SYSTEM_HUNSPELL==1
+ hunspell.hxx
+ #endif
+ #if MOZ_SYSTEM_BZ2==1
+ bzlib.h
+ #endif
+ #ifdef MOZ_ENABLE_GIO
+ gio/gio.h
+diff --git a/mozilla/dom/base/moz.build b/dom/base/moz.build
+--- a/mozilla/dom/base/moz.build
++++ b/mozilla/dom/base/moz.build
+@@ -474,16 +474,19 @@ for var in ('MOZ_B2G_RIL'):
+         DEFINES[var] = True
+ 
+ if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/android', 'xulrunner']:
+     DEFINES['HAVE_SIDEBAR'] = True
+ 
+ if CONFIG['MOZ_X11']:
+     CXXFLAGS += CONFIG['TK_CFLAGS']
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ GENERATED_FILES += [
+     'PropertyUseCounterMap.inc',
+     'UseCounterList.h',
+ ]
+ 
+ countermap = GENERATED_FILES['PropertyUseCounterMap.inc']
+ countermap.script = 'gen-usecounters.py:property_map'
+ countermap.inputs = ['UseCounters.conf']
+diff --git a/mozilla/gfx/harfbuzz/README-mozilla b/gfx/harfbuzz/README-mozilla
+--- a/mozilla/gfx/harfbuzz/README-mozilla
++++ b/mozilla/gfx/harfbuzz/README-mozilla
+@@ -14,8 +14,13 @@ this file when updating harfbuzz, and ch
+ 
+ The normal approach to updating harfbuzz, therefore, is to pull the latest HB
+ source into a scratch directory and do a local build; then copy the original
+ sources AND the generated header mentioned above from the build directory into
+ the mozilla tree.
+ 
+ If the collection of source files changes, manual updates to moz.build may be
+ needed, as we don't use the upstream makefiles.
++
++The in-tree copy may be omitted during build by --with-system-harfbuzz.
++Make sure to keep pkg-config version check within old-configure.in in sync
++with checkout version or increment latest tag by one if it's not based
++on upstream release.
+diff --git a/mozilla/gfx/moz.build b/gfx/moz.build
+--- a/mozilla/gfx/moz.build
++++ b/mozilla/gfx/moz.build
+@@ -2,26 +2,28 @@
+ # vim: set filetype=python:
+ # This Source Code Form is subject to the terms of the Mozilla Public
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ if CONFIG['MOZ_TREE_CAIRO']:
+     DIRS += ['cairo']
+ 
++if not CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    DIRS += ['harfbuzz/src']
++
+ DIRS += [
+     '2d',
+     'ycbcr',
+     'angle',
+     'src',
+     'qcms',
+     'gl',
+     'layers',
+     'graphite2/src',
+-    'harfbuzz/src',
+     'ots/src',
+     'thebes',
+     'ipc',
+     'vr',
+     'config',
+ ]
+ 
+ if CONFIG['MOZ_ENABLE_SKIA']:
+diff --git a/mozilla/gfx/skia/generate_mozbuild.py b/gfx/skia/generate_mozbuild.py
+--- a/mozilla/gfx/skia/generate_mozbuild.py
++++ b/mozilla/gfx/skia/generate_mozbuild.py
+@@ -138,16 +138,19 @@ if CONFIG['GNU_CXX'] and not CONFIG['CLA
+ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_CL']:
+     CXXFLAGS += [
+         '-Wno-implicit-fallthrough',
+         '-Wno-inconsistent-missing-override',
+         '-Wno-macro-redefined',
+         '-Wno-unused-private-field',
+     ]
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android'):
+     CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+     CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+ 
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'):
+     CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS']
+ """
+ 
+diff --git a/mozilla/gfx/skia/moz.build b/gfx/skia/moz.build
+--- a/mozilla/gfx/skia/moz.build
++++ b/mozilla/gfx/skia/moz.build
+@@ -748,14 +748,17 @@ if CONFIG['GNU_CXX'] and not CONFIG['CLA
+ if CONFIG['CLANG_CXX'] or CONFIG['CLANG_CL']:
+     CXXFLAGS += [
+         '-Wno-implicit-fallthrough',
+         '-Wno-inconsistent-missing-override',
+         '-Wno-macro-redefined',
+         '-Wno-unused-private-field',
+     ]
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android'):
+     CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+     CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+ 
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'):
+     CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS']
+diff --git a/mozilla/gfx/thebes/moz.build b/gfx/thebes/moz.build
+--- a/mozilla/gfx/thebes/moz.build
++++ b/mozilla/gfx/thebes/moz.build
+@@ -263,11 +263,14 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('and
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'):
+     CXXFLAGS += CONFIG['MOZ_PANGO_CFLAGS']
+ 
+ LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES']
+ LOCAL_INCLUDES += ['/media/libyuv/include']
+ 
+ DEFINES['GRAPHITE2_STATIC'] = True
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['CLANG_CXX']:
+     # Suppress warnings from Skia header files.
+     SOURCES['gfxPlatform.cpp'].flags += ['-Wno-implicit-fallthrough']
+diff --git a/mozilla/intl/unicharutil/util/moz.build b/intl/unicharutil/util/moz.build
+--- a/mozilla/intl/unicharutil/util/moz.build
++++ b/mozilla/intl/unicharutil/util/moz.build
+@@ -37,9 +37,12 @@ if CONFIG['_MSC_VER']:
+     DEFINES['_USE_ANSI_CPP'] = True
+     # Don't include directives about which CRT to use
+     CFLAGS += ['-Zl']
+     CXXFLAGS += ['-Zl']
+ 
+ if CONFIG['ENABLE_INTL_API']:
+     USE_LIBS += ['icu']
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ DIST_INSTALL = True
+diff --git a/mozilla/moz.configure b/moz.configure
+--- a/mozilla/moz.configure
++++ b/mozilla/moz.configure
+@@ -260,16 +260,28 @@ def extra_programs(target):
+ 
+ check_prog('DSYMUTIL', delayed_getattr(extra_programs, 'DSYMUTIL'),
+            allow_missing=True)
+ check_prog('GENISOIMAGE', delayed_getattr(extra_programs, 'GENISOIMAGE'),
+            allow_missing=True)
+ check_prog('RPMBUILD', delayed_getattr(extra_programs, 'RPMBUILD'),
+            allow_missing=True)
+ 
++option('--with-system-harfbuzz',
++       help="Use system harfbuzz (located with pkgconfig)")
++
++@depends('--with-system-harfbuzz', compile_environment)
++def check_for_harfbuzz(value, compile_env):
++    return value and compile_env
++
++system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.3.3',
++                                    check_for_harfbuzz)
++
++set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))
++
+ option('--enable-system-hunspell',
+        help="Use system hunspell (located with pkgconfig)")
+ 
+ @depends('--enable-system-hunspell', compile_environment)
+ def check_for_hunspell(value, compile_env):
+     return value and compile_env
+ 
+ system_hunspell = pkg_check_modules('MOZ_HUNSPELL', 'hunspell',
+diff --git a/mozilla/netwerk/dns/moz.build b/netwerk/dns/moz.build
+--- a/mozilla/netwerk/dns/moz.build
++++ b/mozilla/netwerk/dns/moz.build
+@@ -61,16 +61,19 @@ etld_data = GENERATED_FILES['etld_data.i
+ etld_data.script = 'prepare_tlds.py'
+ etld_data.inputs = ['effective_tld_names.dat']
+ 
+ # need to include etld_data.inc
+ LOCAL_INCLUDES += [
+     '/netwerk/base',
+ ]
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['ENABLE_INTL_API']:
+     DEFINES['IDNA2008'] = True
+     USE_LIBS += ['icu']
+ else:
+     UNIFIED_SOURCES += [
+         'nameprep.c',
+     ]
+ 
+diff --git a/mozilla/toolkit/library/moz.build b/toolkit/library/moz.build
+--- a/mozilla/toolkit/library/moz.build
++++ b/mozilla/toolkit/library/moz.build
+@@ -221,16 +221,19 @@ if CONFIG['SERVO_TARGET_DIR']:
+         OS_LIBS += ['-L%s' % CONFIG['SERVO_TARGET_DIR'], '-lgeckoservo']
+ 
+ if CONFIG['MOZ_SYSTEM_JPEG']:
+     OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_PNG']:
+     OS_LIBS += CONFIG['MOZ_PNG_LIBS']
+ 
++if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
++    OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
++
+ if CONFIG['MOZ_SYSTEM_HUNSPELL']:
+     OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_LIBEVENT']:
+     OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
+ 
+ if CONFIG['MOZ_SYSTEM_LIBVPX']:
+     OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS']
+
-- 
2.16.3


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2018-04-06 14:08 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-03 13:49 Looking for Thunderbird/Icedove Björn Höfling
2018-04-03 16:48 ` Nils Gillmann
2018-04-03 19:05   ` Mark H Weaver
2018-04-03 19:23     ` Nils Gillmann
2018-04-03 19:45       ` Mark H Weaver
2018-04-03 20:02         ` Nils Gillmann
2018-04-03 21:37           ` Björn Höfling
2018-04-04  8:34             ` Ludovic Courtès
2018-04-04  9:09               ` Nils Gillmann
2018-04-04  5:14 ` Mark H Weaver
2018-04-05  5:21   ` Björn Höfling
2018-04-06 14:07   ` Mark H Weaver
  -- strict thread matches above, loose matches on Subject: below --
2018-04-03 16:33 Rene
2018-04-03 16:43 ` Nils Gillmann

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).