summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2022-06-01 12:31:09 +0300
committerEfraim Flashner <efraim@flashner.co.il>2022-06-01 12:42:04 +0300
commit64c043e63a4be97f59fd1906c47973a74eedda67 (patch)
tree37b15dfb4830e4f874edca87b521b6e9cdc3c81b /gnu/packages/patches
parentb1f763de54dc2b8e240d0f01f7948ce76f67243e (diff)
parent75af73e1b7ac58770122d8831faa3a8158638bb0 (diff)
downloadguix-64c043e63a4be97f59fd1906c47973a74eedda67.tar.gz
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/4store-fix-buildsystem.patch56
-rw-r--r--gnu/packages/patches/4store-unset-preprocessor-directive.patch16
-rw-r--r--gnu/packages/patches/breezy-fix-gio.patch338
-rw-r--r--gnu/packages/patches/casync-renameat2-declaration.patch27
-rw-r--r--gnu/packages/patches/emacs-deferred-fix-number-of-arguments.patch58
-rw-r--r--gnu/packages/patches/emacs-helpful-fix-docstring-test.patch18
-rw-r--r--gnu/packages/patches/gcc-12-cross-environment-variables.patch54
-rw-r--r--gnu/packages/patches/gourmet-sqlalchemy-compat.patch18
-rw-r--r--gnu/packages/patches/guile-ac-d-bus-fix-tests.patch28
-rw-r--r--gnu/packages/patches/itk-snap-alt-glibc-compat.patch22
-rw-r--r--gnu/packages/patches/mia-fix-boost-headers.patch479
-rw-r--r--gnu/packages/patches/mozjs17-aarch64-support.patch60
-rw-r--r--gnu/packages/patches/mozjs24-aarch64-support.patch21
-rw-r--r--gnu/packages/patches/mozjs38-pkg-config-version.patch24
-rw-r--r--gnu/packages/patches/mozjs38-shell-version.patch67
-rw-r--r--gnu/packages/patches/mozjs38-tracelogger.patch608
-rw-r--r--gnu/packages/patches/mozjs38-version-detection.patch180
-rw-r--r--gnu/packages/patches/mozjs60-riscv64-support.patch122
-rw-r--r--gnu/packages/patches/openbox-python3.patch165
-rw-r--r--gnu/packages/patches/python2-parameterized-docstring-test.patch18
-rw-r--r--gnu/packages/patches/python2-pygobject-2-deprecation.patch39
-rw-r--r--gnu/packages/patches/python2-subprocess32-disable-input-test.patch18
-rw-r--r--gnu/packages/patches/rapicorn-isnan.patch87
-rw-r--r--gnu/packages/patches/virtuoso-ose-remove-pre-built-jar-files.patch117
-rw-r--r--gnu/packages/patches/vtk-7-gcc-10-compat.patch14
-rw-r--r--gnu/packages/patches/vtk-7-hdf5-compat.patch38
-rw-r--r--gnu/packages/patches/vtk-7-python-compat.patch16
-rw-r--r--gnu/packages/patches/wicd-bitrate-none-fix.patch24
-rw-r--r--gnu/packages/patches/wicd-get-selected-profile-fix.patch16
-rw-r--r--gnu/packages/patches/wicd-urwid-1.3.patch18
-rw-r--r--gnu/packages/patches/wicd-wpa2-ttls.patch38
31 files changed, 1365 insertions, 1439 deletions
diff --git a/gnu/packages/patches/4store-fix-buildsystem.patch b/gnu/packages/patches/4store-fix-buildsystem.patch
deleted file mode 100644
index 383baa9461..0000000000
--- a/gnu/packages/patches/4store-fix-buildsystem.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-This patch sets a fixed version to avoid needing Git and the .git/ folder.
-It also removes the creation of "/var/lib/4store", which is not available
-during the install phase in GNU Guix.
-
-Patch by Roel Janssen <roel@gnu.org>
-*** a/configure.ac	Wed Feb  4 19:05:24 2015
---- b/configure.ac	Wed Mar 23 11:20:38 2016
-***************
-*** 2,13 ****
-  # Process this file with autoconf to produce a configure script.
-
-  AC_PREREQ([2.50])
-! AC_INIT([4store], m4_esyscmd([./version.sh .version]), [http://4store.org/support/], [4store])
-  AC_CONFIG_SRCDIR([src/backend/backend-intl.h])
-! AM_INIT_AUTOMAKE([1.7 std-options -Wall])
-  AC_CONFIG_HEADERS(4store-config.h)
-
-  # Checks for programs.
-  AC_PROG_LIBTOOL
-  AC_PROG_AWK
-  AC_PROG_CC
---- 2,14 ----
-  # Process this file with autoconf to produce a configure script.
-
-  AC_PREREQ([2.50])
-! AC_INIT([4store], [1.1.6], [http://4store.org/support/], [4store])
-  AC_CONFIG_SRCDIR([src/backend/backend-intl.h])
-! AM_INIT_AUTOMAKE([1.7 std-options foreign -Wall])
-  AC_CONFIG_HEADERS(4store-config.h)
-
-  # Checks for programs.
-+ AM_PROG_AR
-  AC_PROG_LIBTOOL
-  AC_PROG_AWK
-  AC_PROG_CC
-
-*** a/src/utilities/Makefile.am	Wed Feb  4 19:05:24 2015
---- b/src/utilities/Makefile.am	Wed Mar 23 14:05:56 2016
-***************
-*** 13,20 ****
-  noinst_PROGRAMS = lex-file-verify 4s-rid
-
-  install-data-local: 
-! 	mkdir -p $(DESTDIR)@FS_STORE_ROOT@
-! 	chmod 1777 $(DESTDIR)@FS_STORE_ROOT@
-
-  4s_backend_destroy_SOURCES = backend-destroy.c
-  4s_backend_destroy_LDADD = ../common/lib4sintl.a
---- 13,19 ----
-  noinst_PROGRAMS = lex-file-verify 4s-rid
-
-  install-data-local: 
-! 	echo "Please create the following directory: " $(DESTDIR)@FS_STORE_ROOT@
-
-  4s_backend_destroy_SOURCES = backend-destroy.c
-  4s_backend_destroy_LDADD = ../common/lib4sintl.a
diff --git a/gnu/packages/patches/4store-unset-preprocessor-directive.patch b/gnu/packages/patches/4store-unset-preprocessor-directive.patch
deleted file mode 100644
index c4b1d6eda4..0000000000
--- a/gnu/packages/patches/4store-unset-preprocessor-directive.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-This patch removes the _XOPEN_SOURCE preprocessor directive as it does not seem to be needed.
-Setting it removes the definition of strdup, which is used in filter-datatypes.c.
-
-Patch by Roel Janssen <roel@gnu.org>
-*** a/src/frontend/filter-datatypes.c	1970-01-01 01:00:00.000000000 +0100
---- b/src/frontend/filter-datatypes.c	2018-04-03 17:39:23.177905592 +0200
-***************
-*** 18,24 ****
-   *  Copyright (C) 2006 Steve Harris for Garlik
-   */
-  
-- #define _XOPEN_SOURCE
-  #include <stdlib.h>
-  #include <string.h>
-  #include <math.h>
---- 18,23 ----
diff --git a/gnu/packages/patches/breezy-fix-gio.patch b/gnu/packages/patches/breezy-fix-gio.patch
new file mode 100644
index 0000000000..f70e761555
--- /dev/null
+++ b/gnu/packages/patches/breezy-fix-gio.patch
@@ -0,0 +1,338 @@
+This patch combines https://code.launchpad.net/~jelmer/brz/enable-gio/+merge/419150
+and https://bazaar.launchpad.net/~jelmer/brz/fix-gio/revision/7570.
+
+=== modified file 'breezy/transport/gio_transport.py'
+--- a/breezy/transport/gio_transport.py	2022-04-09 12:17:41 +0000
++++ b/breezy/transport/gio_transport.py	2022-04-09 12:33:51 +0000
+@@ -52,11 +52,7 @@
+ from ..tests.test_server import TestServer
+ 
+ try:
+-    import glib
+-except ImportError as e:
+-    raise errors.DependencyNotPresent('glib', e)
+-try:
+-    import gio
++    from gi.repository import Gio as gio
+ except ImportError as e:
+     raise errors.DependencyNotPresent('gio', e)
+ 
+
+@@ -57,6 +57,9 @@
+     raise errors.DependencyNotPresent('gio', e)
+ 
+ 
++from gi.repository.GLib import GError
++
++
+ class GioLocalURLServer(TestServer):
+     """A pretend server for local transports, using file:// urls.
+ 
+@@ -81,7 +84,7 @@
+     def __init__(self, transport, relpath):
+         FileStream.__init__(self, transport, relpath)
+         self.gio_file = transport._get_GIO(relpath)
+-        self.stream = self.gio_file.create()
++        self.stream = self.gio_file.create(0, None)
+ 
+     def _close(self):
+         self.stream.close()
+@@ -90,7 +93,7 @@
+         try:
+             # Using pump_string_file seems to make things crash
+             osutils.pumpfile(BytesIO(bytes), self.stream)
+-        except gio.Error as e:
++        except GError as e:
+             # self.transport._translate_gio_error(e,self.relpath)
+             raise errors.BzrError(str(e))
+ 
+@@ -98,12 +101,12 @@
+ class GioStatResult(object):
+ 
+     def __init__(self, f):
+-        info = f.query_info('standard::size,standard::type')
++        info = f.query_info('standard::size,standard::type', 0, None)
+         self.st_size = info.get_size()
+         type = info.get_file_type()
+-        if (type == gio.FILE_TYPE_REGULAR):
++        if type == gio.FileType.REGULAR:
+             self.st_mode = stat.S_IFREG
+-        elif type == gio.FILE_TYPE_DIRECTORY:
++        elif type == gio.FileType.DIRECTORY:
+             self.st_mode = stat.S_IFDIR
+ 
+ 
+@@ -122,7 +125,7 @@
+             user, netloc = netloc.rsplit('@', 1)
+         # Seems it is not possible to list supported backends for GIO
+         # so a hardcoded list it is then.
+-        gio_backends = ['dav', 'file', 'ftp', 'obex', 'sftp', 'ssh', 'smb']
++        gio_backends = ['dav', 'file', 'ftp', 'obex', 'sftp', 'ssh', 'smb', 'http']
+         if scheme not in gio_backends:
+             raise urlutils.InvalidURL(base,
+                                       extra="GIO support is only available for " +
+@@ -138,13 +141,10 @@
+                                            _from_transport=_from_transport)
+ 
+     def _relpath_to_url(self, relpath):
+-        full_url = urlutils.join(self.url, relpath)
+-        if isinstance(full_url, str):
+-            raise urlutils.InvalidURL(full_url)
+-        return full_url
++        return urlutils.join(self.url, relpath)
+ 
+     def _get_GIO(self, relpath):
+-        """Return the ftplib.GIO instance for this object."""
++        """Return the GIO instance for this object."""
+         # Ensures that a connection is established
+         connection = self._get_connection()
+         if connection is None:
+@@ -152,7 +152,7 @@
+             connection, credentials = self._create_connection()
+             self._set_connection(connection, credentials)
+         fileurl = self._relpath_to_url(relpath)
+-        file = gio.File(fileurl)
++        file = gio.File.new_for_uri(fileurl)
+         return file
+ 
+     def _auth_cb(self, op, message, default_user, default_domain, flags):
+@@ -197,7 +197,7 @@
+         try:
+             obj.mount_enclosing_volume_finish(res)
+             self.loop.quit()
+-        except gio.Error as e:
++        except GError as e:
+             self.loop.quit()
+             raise errors.BzrError(
+                 "Failed to mount the given location: " + str(e))
+@@ -209,12 +209,12 @@
+             user, password = credentials
+ 
+         try:
+-            connection = gio.File(self.url)
++            connection = gio.File.new_for_uri(self.url)
+             mount = None
+             try:
+                 mount = connection.find_enclosing_mount()
+-            except gio.Error as e:
+-                if (e.code == gio.ERROR_NOT_MOUNTED):
++            except GError as e:
++                if e.code == gio.IOErrorEnum.NOT_MOUNTED:
+                     self.loop = glib.MainLoop()
+                     ui.ui_factory.show_message('Mounting %s using GIO' %
+                                                self.url)
+@@ -227,7 +227,7 @@
+                     m = connection.mount_enclosing_volume(op,
+                                                           self._mount_done_cb)
+                     self.loop.run()
+-        except gio.Error as e:
++        except GError as e:
+             raise errors.TransportError(msg="Error setting up connection:"
+                                         " %s" % str(e), orig_error=e)
+         return connection, (user, password)
+@@ -257,8 +257,8 @@
+             if stat.S_ISREG(st.st_mode) or stat.S_ISDIR(st.st_mode):
+                 return True
+             return False
+-        except gio.Error as e:
+-            if e.code == gio.ERROR_NOT_FOUND:
++        except GError as e:
++            if e.code == gio.IOErrorEnum.NOT_FOUND:
+                 return False
+             else:
+                 self._translate_gio_error(e, relpath)
+@@ -281,10 +281,10 @@
+             buf = fin.read()
+             fin.close()
+             return BytesIO(buf)
+-        except gio.Error as e:
++        except GError as e:
+             # If we get a not mounted here it might mean
+             # that a bad path has been entered (or that mount failed)
+-            if (e.code == gio.ERROR_NOT_MOUNTED):
++            if e.code == gio.IOErrorEnum.NOT_MOUNTED:
+                 raise errors.PathError(relpath,
+                                        extra='Failed to get file, make sure the path is correct. '
+                                        + str(e))
+@@ -307,19 +307,19 @@
+             closed = True
+             try:
+                 f = self._get_GIO(tmppath)
+-                fout = f.create()
++                fout = f.create(0, None)
+                 closed = False
+                 length = self._pump(fp, fout)
+                 fout.close()
+                 closed = True
+                 self.stat(tmppath)
+                 dest = self._get_GIO(relpath)
+-                f.move(dest, flags=gio.FILE_COPY_OVERWRITE)
++                f.move(dest, flags=gio.FileCopyFlags.OVERWRITE)
+                 f = None
+                 if mode is not None:
+                     self._setmode(relpath, mode)
+                 return length
+-            except gio.Error as e:
++            except GError as e:
+                 self._translate_gio_error(e, relpath)
+         finally:
+             if not closed and fout is not None:
+@@ -335,7 +335,7 @@
+             f = self._get_GIO(relpath)
+             f.make_directory()
+             self._setmode(relpath, mode)
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath)
+ 
+     def open_write_stream(self, relpath, mode=None):
+@@ -369,14 +369,11 @@
+                 f.delete()
+             else:
+                 raise errors.NotADirectory(relpath)
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath)
+         except errors.NotADirectory as e:
+             # just pass it forward
+             raise e
+-        except Exception as e:
+-            mutter('failed to rmdir %s: %s' % (relpath, e))
+-            raise errors.PathError(relpath)
+ 
+     def append_file(self, relpath, file, mode=None):
+         """Append the text in the file-like object into the final
+@@ -392,7 +389,7 @@
+             result = 0
+             fo = self._get_GIO(tmppath)
+             fi = self._get_GIO(relpath)
+-            fout = fo.create()
++            fout = fo.create(0, None)
+             try:
+                 info = GioStatResult(fi)
+                 result = info.st_size
+@@ -400,11 +397,11 @@
+                 self._pump(fin, fout)
+                 fin.close()
+             # This separate except is to catch and ignore the
+-            # gio.ERROR_NOT_FOUND for the already existing file.
++            # gio.IOErrorEnum.NOT_FOUND for the already existing file.
+             # It is valid to open a non-existing file for append.
+             # This is caused by the broken gio append_to...
+-            except gio.Error as e:
+-                if e.code != gio.ERROR_NOT_FOUND:
++            except GError as e:
++                if e.code != gio.IOErrorEnum.NOT_FOUND:
+                     self._translate_gio_error(e, relpath)
+             length = self._pump(file, fout)
+             fout.close()
+@@ -413,9 +410,11 @@
+                 raise errors.BzrError("Failed to append size after "
+                                       "(%d) is not original (%d) + written (%d) total (%d)" %
+                                       (info.st_size, result, length, result + length))
+-            fo.move(fi, flags=gio.FILE_COPY_OVERWRITE)
++            fo.move(
++                fi, flags=gio.FileCopyFlags.OVERWRITE, cancellable=None,
++                progress_callback=None)
+             return result
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath)
+ 
+     def _setmode(self, relpath, mode):
+@@ -429,8 +428,8 @@
+             try:
+                 f = self._get_GIO(relpath)
+                 f.set_attribute_uint32(gio.FILE_ATTRIBUTE_UNIX_MODE, mode)
+-            except gio.Error as e:
+-                if e.code == gio.ERROR_NOT_SUPPORTED:
++            except GError as e:
++                if e.code == gio.IOErrorEnum.NOT_SUPPORTED:
+                     # Command probably not available on this server
+                     mutter("GIO Could not set permissions to %s on %s. %s",
+                            oct(mode), self._remote_path(relpath), str(e))
+@@ -444,8 +443,8 @@
+                 mutter("GIO move (rename): %s => %s", rel_from, rel_to)
+             f = self._get_GIO(rel_from)
+             t = self._get_GIO(rel_to)
+-            f.move(t)
+-        except gio.Error as e:
++            f.move(t, flags=0, cancellable=None, progress_callback=None)
++        except GError as e:
+             self._translate_gio_error(e, rel_from)
+ 
+     def move(self, rel_from, rel_to):
+@@ -455,8 +454,8 @@
+                 mutter("GIO move: %s => %s", rel_from, rel_to)
+             f = self._get_GIO(rel_from)
+             t = self._get_GIO(rel_to)
+-            f.move(t, flags=gio.FILE_COPY_OVERWRITE)
+-        except gio.Error as e:
++            f.move(t, flags=gio.FileCopyFlags.OVERWRITE)
++        except GError as e:
+             self._translate_gio_error(e, relfrom)
+ 
+     def delete(self, relpath):
+@@ -466,7 +465,7 @@
+                 mutter("GIO delete: %s", relpath)
+             f = self._get_GIO(relpath)
+             f.delete()
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath)
+ 
+     def external_url(self):
+@@ -489,11 +488,11 @@
+         try:
+             entries = []
+             f = self._get_GIO(relpath)
+-            children = f.enumerate_children(gio.FILE_ATTRIBUTE_STANDARD_NAME)
++            children = f.enumerate_children(gio.FILE_ATTRIBUTE_STANDARD_NAME, 0, None)
+             for child in children:
+                 entries.append(urlutils.escape(child.get_name()))
+             return entries
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath)
+ 
+     def iter_files_recursive(self):
+@@ -519,7 +518,7 @@
+                 mutter("GIO stat: %s", relpath)
+             f = self._get_GIO(relpath)
+             return GioStatResult(f)
+-        except gio.Error as e:
++        except GError as e:
+             self._translate_gio_error(e, relpath, extra='error w/ stat')
+ 
+     def lock_read(self, relpath):
+@@ -556,21 +555,21 @@
+             mutter("GIO Error: %s %s" % (str(err), path))
+         if extra is None:
+             extra = str(err)
+-        if err.code == gio.ERROR_NOT_FOUND:
++        if err.code == gio.IOErrorEnum.NOT_FOUND:
+             raise errors.NoSuchFile(path, extra=extra)
+-        elif err.code == gio.ERROR_EXISTS:
++        elif err.code == gio.IOErrorEnum.EXISTS:
+             raise errors.FileExists(path, extra=extra)
+-        elif err.code == gio.ERROR_NOT_DIRECTORY:
++        elif err.code == gio.IOErrorEnum.NOT_DIRECTORY:
+             raise errors.NotADirectory(path, extra=extra)
+-        elif err.code == gio.ERROR_NOT_EMPTY:
++        elif err.code == gio.IOErrorEnum.NOT_EMPTY:
+             raise errors.DirectoryNotEmpty(path, extra=extra)
+-        elif err.code == gio.ERROR_BUSY:
++        elif err.code == gio.IOErrorEnum.BUSY:
+             raise errors.ResourceBusy(path, extra=extra)
+-        elif err.code == gio.ERROR_PERMISSION_DENIED:
++        elif err.code == gio.IOErrorEnum.PERMISSION_DENIED:
+             raise errors.PermissionDenied(path, extra=extra)
+-        elif err.code == gio.ERROR_HOST_NOT_FOUND:
++        elif err.code == gio.IOErrorEnum.HOST_NOT_FOUND:
+             raise errors.PathError(path, extra=extra)
+-        elif err.code == gio.ERROR_IS_DIRECTORY:
++        elif err.code == gio.IOErrorEnum.IS_DIRECTORY:
+             raise errors.PathError(path, extra=extra)
+         else:
+             mutter('unable to understand error for path: %s: %s', path, err)
+
diff --git a/gnu/packages/patches/casync-renameat2-declaration.patch b/gnu/packages/patches/casync-renameat2-declaration.patch
deleted file mode 100644
index 74c2ca7b3c..0000000000
--- a/gnu/packages/patches/casync-renameat2-declaration.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Fix build failure on glibc 2.28 where 'renameat2' would end up being
-declared twice: <https://github.com/systemd/casync/issues/166>.
-
-From 625244ca47e8ee1375d2d0092271bfd13b0913ea Mon Sep 17 00:00:00 2001
-From: Daniel Mack <daniel@zonque.org>
-Date: Tue, 13 Nov 2018 17:52:48 +0100
-Subject: [PATCH] meson.build: pass -D_GNU_SOURCE when checking for functions
-
-As described in #166, -D_GNU_SOURCE needs to be passed to the meson function
-availability checker. h/t to @tomeon for providing a link to the solution as
-well.
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index f42ed16..c0f741e 100644
---- a/meson.build
-+++ b/meson.build
-@@ -78,6 +78,6 @@ foreach ident : [
-         ['copy_file_range',   '''#include <sys/syscall.h>
-                                  #include <unistd.h>'''],
- ]
--        have = cc.has_function(ident[0], prefix : ident[1])
-+        have = cc.has_function(ident[0], args : '-D_GNU_SOURCE', prefix : ident[1])
-         conf.set10('HAVE_' + ident[0].to_upper(), have)
- endforeach
diff --git a/gnu/packages/patches/emacs-deferred-fix-number-of-arguments.patch b/gnu/packages/patches/emacs-deferred-fix-number-of-arguments.patch
new file mode 100644
index 0000000000..fdb444c29b
--- /dev/null
+++ b/gnu/packages/patches/emacs-deferred-fix-number-of-arguments.patch
@@ -0,0 +1,58 @@
+From 226734f06196d31971d8ca2026a9ce432d5227d0 Mon Sep 17 00:00:00 2001
+From: r0man <roman@burningswell.com>
+Date: Thu, 26 May 2022 10:42:25 +0200
+Subject: [PATCH] Fix wrong-number-of-arguments error
+
+With Emacs 28 I'm seeing the following error when running the tests.
+
+```
+deferred error : (wrong-number-of-arguments #<subr start-process-shell-command> 4)
+```
+
+I believe this is because the `start-process-shell-command` function
+is called with the command arguments as &rest parameters. This is the
+function signature of `start-process-shell-command`, and it only takes
+3 arguments, the name, buffer, and command. The command argument can
+be a shell string like "ls -l" for example.
+
+```
+(defun start-process-shell-command (name buffer command) ...)
+```
+
+The `start-process` function on the other hand has &rest parameters
+and can be called with a list of arguments.
+
+```
+(defun start-process (name buffer program &rest program-args) ...)
+```
+
+This PR fixes the issue by concatenating the command and it's argument
+before calling out to `deferred:process-buffer-gen`, which is used in
+both cases, when calling `start-process-shell-command`, and when
+calling `start-process`.
+---
+ deferred.el | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/deferred.el b/deferred.el
+index 041c90b..3092ac0 100644
+--- a/deferred.el
++++ b/deferred.el
+@@ -754,7 +754,7 @@ object. The process name and buffer name of the argument of the
+ `start-process-shell-command' are generated by this function automatically.
+ The next deferred object receives stdout and stderr string from
+ the command process."
+-  (deferred:process-gen 'start-process-shell-command command args))
++  (deferred:process-gen 'start-process-shell-command  (string-join (cons command args) " ") nil))
+ 
+ (defun deferred:process-buffer (command &rest args)
+   "A deferred wrapper of `start-process'. Return a deferred
+@@ -770,7 +770,7 @@ object. The process name and buffer name of the argument of the
+ `start-process-shell-command' are generated by this function automatically.
+ The next deferred object receives stdout and stderr buffer from
+ the command process."
+-  (deferred:process-buffer-gen 'start-process-shell-command command args))
++  (deferred:process-buffer-gen 'start-process-shell-command (string-join (cons command args) " ") nil))
+ 
+ (defun deferred:process-gen (f command args)
+   "[internal]"
diff --git a/gnu/packages/patches/emacs-helpful-fix-docstring-test.patch b/gnu/packages/patches/emacs-helpful-fix-docstring-test.patch
new file mode 100644
index 0000000000..de40010fa2
--- /dev/null
+++ b/gnu/packages/patches/emacs-helpful-fix-docstring-test.patch
@@ -0,0 +1,18 @@
+This patch fixing a build failure has been cherry-picked from upstream.
+Originally submitted as pull request by Erik Šabič.
+See also <https://github.com/Wilfred/helpful/pull/296>.
+diff --git a/test/helpful-unit-test.el b/test/helpful-unit-test.el
+index a07aa8e..8a95129 100644
+--- a/test/helpful-unit-test.el
++++ b/test/helpful-unit-test.el
+@@ -119,7 +119,9 @@ bar")))
+   (should
+    (equal
+     (helpful--docstring #'test-foo-advised t)
+-    "Docstring here too.")))
++    (if (version< emacs-version "28")
++        "Docstring here too."
++    "Docstring here too.\n\nThis function has :around advice: `ad-Advice-test-foo-advised'."))))
+ 
+ (defun test-foo-no-docstring ()
+   nil)
diff --git a/gnu/packages/patches/gcc-12-cross-environment-variables.patch b/gnu/packages/patches/gcc-12-cross-environment-variables.patch
new file mode 100644
index 0000000000..8787f094c0
--- /dev/null
+++ b/gnu/packages/patches/gcc-12-cross-environment-variables.patch
@@ -0,0 +1,54 @@
+Search path environment variables for cross-compilers.  See the discussion
+at <http://gcc.gnu.org/ml/gcc/2013-02/msg00124.html>.
+
+Note: Touch 'C_INCLUDE_PATH' et al. rather than 'CPATH', as discussed
+at <http://bugs.gnu.org/22186>.
+
+diff --git a/gcc/gcc.cc b/gcc/gcc.cc
+--- a/gcc/gcc.cc
++++ b/gcc/gcc.cc
+@@ -4832,7 +4832,7 @@ process_command (unsigned int decoded_options_count,
+     }
+ 
+   temp = env.get (LIBRARY_PATH_ENV);
+-  if (temp && *cross_compile == '0')
++  if (temp)
+     {
+       const char *startp, *endp;
+       char *nstore = (char *) alloca (strlen (temp) + 3);
+diff --git a/gcc/incpath.cc b/gcc/incpath.cc
+--- a/gcc/incpath.cc
++++ b/gcc/incpath.cc
+@@ -480,8 +480,8 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 			 int stdinc, int cxx_stdinc, int verbose)
+ {
+   static const char *const lang_env_vars[] =
+-    { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+-      "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" };
++    { "CROSS_C_INCLUDE_PATH", "CROSS_CPLUS_INCLUDE_PATH",
++      "CROSS_OBJC_INCLUDE_PATH", "CROSS_OBJCPLUS_INCLUDE_PATH" };
+   cpp_options *cpp_opts = cpp_get_options (pfile);
+   size_t idx = (cpp_opts->objc ? 2: 0);
+ 
+@@ -492,7 +492,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 
+   /* CPATH and language-dependent environment variables may add to the
+      include chain.  */
+-  add_env_var_paths ("CPATH", INC_BRACKET);
++  add_env_var_paths ("CROSS_CPATH", INC_BRACKET);
+   add_env_var_paths (lang_env_vars[idx], INC_SYSTEM);
+ 
+   target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
+diff --git a/gcc/system.h b/gcc/system.h
+--- a/gcc/system.h
++++ b/gcc/system.h
+@@ -1317,4 +1317,6 @@ endswith (const char *str, const char *suffix)
+   return memcmp (str + str_len - suffix_len, suffix, suffix_len) == 0;
+ }
+ 
++#define LIBRARY_PATH_ENV "CROSS_LIBRARY_PATH"
++
+ #endif /* ! GCC_SYSTEM_H */
+-- 
+2.36.1
+
diff --git a/gnu/packages/patches/gourmet-sqlalchemy-compat.patch b/gnu/packages/patches/gourmet-sqlalchemy-compat.patch
new file mode 100644
index 0000000000..d0cdf9e5a7
--- /dev/null
+++ b/gnu/packages/patches/gourmet-sqlalchemy-compat.patch
@@ -0,0 +1,18 @@
+diff --git a/gourmet/backends/db.py b/gourmet/backends/db.py
+index faa6a57a..7e6d2bc6 100644
+--- a/gourmet/backends/db.py
++++ b/gourmet/backends/db.py
+@@ -773,9 +773,11 @@ class RecData (Pluggable):
+         """Return the number of rows in table that match criteria
+         """
+         if criteria:
+-            return table.count(*make_simple_select_arg(criteria,table)).execute().fetchone()[0]
++            return sqlalchemy.select(
++                sqlalchemy.func.count(criteria)).select_from(table).scalar()
+         else:
+-            return table.count().execute().fetchone()[0]
++            return sqlalchemy.select(
++                sqlalchemy.func.count()).select_from(table).scalar()
+ 
+     def fetch_join (self, table1, table2, col1, col2,
+                     column_names=None, sort_by=[], **criteria):
diff --git a/gnu/packages/patches/guile-ac-d-bus-fix-tests.patch b/gnu/packages/patches/guile-ac-d-bus-fix-tests.patch
new file mode 100644
index 0000000000..19fd475c39
--- /dev/null
+++ b/gnu/packages/patches/guile-ac-d-bus-fix-tests.patch
@@ -0,0 +1,28 @@
+Submitted upstream: https://gitlab.com/weinholt/ac-d-bus/-/merge_requests/3
+
+diff --git a/tests/test-signature.sps b/tests/test-signature.sps
+index 278401b..cc5574f 100755
+--- a/tests/test-signature.sps
++++ b/tests/test-signature.sps
+@@ -43,6 +43,7 @@
+             (format-type-signature '(message BYTE BYTE BYTE BYTE UINT32 UINT32
+                                              (ARRAY (STRUCT BYTE VARIANT)))))
+ 
++(define fail-count (test-runner-fail-count (test-runner-get)))
+ (test-end)
+ 
+-(exit (if (zero? (test-runner-fail-count (test-runner-get))) 0 1))
++(exit (if (zero? fail-count) 0 1))
+diff --git a/tests/test-wire.sps b/tests/test-wire.sps
+index c3354bf..06ae73b 100755
+--- a/tests/test-wire.sps
++++ b/tests/test-wire.sps
+@@ -147,6 +147,7 @@
+                   #x08 #x01 #x67 #x00  #x00 #x00 #x00 #x00  #x05 #x01 #x75 #x00  #x04 #x00 #x00 #x00
+                   #x07 #x01 #x73 #x00  #x06 #x00 #x00 #x00  #x3A #x31 #x2E #x32  #x39 #x38 #x00 #x00)))
+ 
++(define fail-count (test-runner-fail-count (test-runner-get)))
+ (test-end)
+ 
+-(exit (if (zero? (test-runner-fail-count (test-runner-get))) 0 1))
++(exit (if (zero? fail-count) 0 1))
diff --git a/gnu/packages/patches/itk-snap-alt-glibc-compat.patch b/gnu/packages/patches/itk-snap-alt-glibc-compat.patch
new file mode 100644
index 0000000000..764c5da2c2
--- /dev/null
+++ b/gnu/packages/patches/itk-snap-alt-glibc-compat.patch
@@ -0,0 +1,22 @@
+Retrieved from ALT Linux.
+https://git.altlinux.org/tasks/273587/build/300/x86_64/srpm/itk-snap-3.8.0-alt6.src.rpm
+
+diff --git a/GUI/Qt/main.cxx b/GUI/Qt/main.cxx
+index 576f7160..ceab92e6 100644
+--- a/GUI/Qt/main.cxx
++++ b/GUI/Qt/main.cxx
+@@ -51,12 +51,13 @@ using namespace std;
+ #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__))
+ 
+ #include <signal.h>
++#include <string.h>
+ #include <execinfo.h>
+ 
+ void SegmentationFaultHandler(int sig)
+ {
+   cerr << "*************************************" << endl;
+-  cerr << "ITK-SNAP: " << sys_siglist[sig] << endl;
++  cerr << "ITK-SNAP: " << strsignal(sig) << " (" << sigabbrev_np(sig) << ")" << endl;
+   cerr << "BACKTRACE: " << endl;
+   void *array[50];
+   int nsize = backtrace(array, 50);
diff --git a/gnu/packages/patches/mia-fix-boost-headers.patch b/gnu/packages/patches/mia-fix-boost-headers.patch
new file mode 100644
index 0000000000..158ab2afeb
--- /dev/null
+++ b/gnu/packages/patches/mia-fix-boost-headers.patch
@@ -0,0 +1,479 @@
+Retrieved from Debian, and added a few "#include <boost/mpl/vector.hpp>"
+directives to fix the build.
+
+diff --git a/addons/hdf5/test_hdf5_3dimage.cc b/addons/hdf5/test_hdf5_3dimage.cc
+index a7185618..7a398821 100644
+--- a/addons/hdf5/test_hdf5_3dimage.cc
++++ b/addons/hdf5/test_hdf5_3dimage.cc
+@@ -23,7 +23,7 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
++#include <boost/test/unit_test.hpp>
+ 
+ #include <addons/hdf5/hdf5_3dimage.hh>
+ 
+diff --git a/addons/hdf5/test_hdf5mia.cc b/addons/hdf5/test_hdf5mia.cc
+index 3d62106e..8141be07 100644
+--- a/addons/hdf5/test_hdf5mia.cc
++++ b/addons/hdf5/test_hdf5mia.cc
+@@ -23,7 +23,6 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <boost/mpl/insert_range.hpp>
+ 
+ #include <addons/hdf5/hdf5a_mia.hh>
+diff --git a/addons/nifti/test_niftiimage.cc b/addons/nifti/test_niftiimage.cc
+index 8df3f0b5..840ae585 100644
+--- a/addons/nifti/test_niftiimage.cc
++++ b/addons/nifti/test_niftiimage.cc
+@@ -23,8 +23,6 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ 
+ #include <nifti/niftiimage.hh>
+ #include <unistd.h>
+diff --git a/addons/vistaio/test_2dvistaio.cc b/addons/vistaio/test_2dvistaio.cc
+index b3da29a0..9b1599dd 100644
+--- a/addons/vistaio/test_2dvistaio.cc
++++ b/addons/vistaio/test_2dvistaio.cc
+@@ -23,8 +23,6 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ 
+ #include <vistaio/2dvistaio.hh>
+ #include <unistd.h>
+diff --git a/addons/vistaio/test_3dvistaio.cc b/addons/vistaio/test_3dvistaio.cc
+index 93c007d0..c3ae1fdb 100644
+--- a/addons/vistaio/test_3dvistaio.cc
++++ b/addons/vistaio/test_3dvistaio.cc
+@@ -23,8 +23,6 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ 
+ #include <vistaio/3dvistaio.hh>
+ #include <unistd.h>
+diff --git a/addons/vtk/test_vtkimage.cc b/addons/vtk/test_vtkimage.cc
+index eaf96a6b..8212ef1d 100644
+--- a/addons/vtk/test_vtkimage.cc
++++ b/addons/vtk/test_vtkimage.cc
+@@ -23,8 +23,6 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ 
+ #include <vtk/vtkimage.hh>
+ #include <unistd.h>
+diff --git a/mia/2d/creator/test_circle.cc b/mia/2d/creator/test_circle.cc
+index 9784e05d..7ca4bab9 100644
+--- a/mia/2d/creator/test_circle.cc
++++ b/mia/2d/creator/test_circle.cc
+@@ -21,8 +21,6 @@
+ 
+ #include <mia/internal/plugintester.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ #include <mia/2d/creator/circle.hh>
+ 
+ using namespace mia;
+diff --git a/mia/2d/filter/test_convert.cc b/mia/2d/filter/test_convert.cc
+index 80304793..f40d295a 100644
+--- a/mia/2d/filter/test_convert.cc
++++ b/mia/2d/filter/test_convert.cc
+@@ -25,7 +25,6 @@
+ #include <type_traits>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <boost/mpl/insert_range.hpp>
+ 
+ 
+diff --git a/mia/2d/filter/test_morphological.cc b/mia/2d/filter/test_morphological.cc
+index 2fc58583..9a004946 100644
+--- a/mia/2d/filter/test_morphological.cc
++++ b/mia/2d/filter/test_morphological.cc
+@@ -20,7 +20,6 @@
+ 
+ #include <mia/internal/plugintester.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <mia/2d/filter/morphological.hh>
+ 
+ namespace bmpl = boost::mpl;
+diff --git a/mia/2d/filter/test_sortlabel.cc b/mia/2d/filter/test_sortlabel.cc
+index 78464e1a..49c327e3 100644
+--- a/mia/2d/filter/test_sortlabel.cc
++++ b/mia/2d/filter/test_sortlabel.cc
+@@ -23,7 +23,6 @@
+ #include <mia/2d/filter/sortlabel.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ namespace bmpl = boost::mpl;
+ 
+ 
+diff --git a/mia/2d/filter/test_thinning.cc b/mia/2d/filter/test_thinning.cc
+index 3ebb2cdc..8bc5b356 100644
+--- a/mia/2d/filter/test_thinning.cc
++++ b/mia/2d/filter/test_thinning.cc
+@@ -21,7 +21,6 @@
+ 
+ #include <mia/internal/plugintester.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <mia/2d/filter/thinning.hh>
+ #include <mia/2d/imagetest.hh>
+ 
+diff --git a/mia/2d/test_filter_cast.cc b/mia/2d/test_filter_cast.cc
+index e806e14f..91c77398 100644
+--- a/mia/2d/test_filter_cast.cc
++++ b/mia/2d/test_filter_cast.cc
+@@ -24,7 +24,7 @@
+ #include <mia/internal/autotest.hh>
+ #include <mia/2d/filter.hh>
+ 
+-#include <boost/test/test_case_template.hpp>
++#include <boost/mpl/vector.hpp>
+ #include <boost/type_traits.hpp>
+ #include <boost/mpl/list.hpp>
+ 
+diff --git a/mia/2d/test_image.cc b/mia/2d/test_image.cc
+index c82dc59b..1f602510 100644
+--- a/mia/2d/test_image.cc
++++ b/mia/2d/test_image.cc
+@@ -24,6 +24,7 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/filesystem/path.hpp>
++#include <boost/mpl/vector.hpp>
+ 
+ #include <iostream>
+ 
+diff --git a/mia/2d/test_interpol.cc b/mia/2d/test_interpol.cc
+index d1f3703d..5caafccf 100644
+--- a/mia/2d/test_interpol.cc
++++ b/mia/2d/test_interpol.cc
+@@ -23,7 +23,6 @@
+ 
+ #include <mia/internal/autotest.hh>
+ 
+-#include <boost/test/test_case_template.hpp>
+ #include <boost/type_traits.hpp>
+ #include <boost/mpl/list.hpp>
+ 
+diff --git a/mia/3d/fifotestfixture.cc b/mia/3d/fifotestfixture.cc
+index ab2e7c65..1b6e6bb4 100644
+--- a/mia/3d/fifotestfixture.cc
++++ b/mia/3d/fifotestfixture.cc
+@@ -24,7 +24,7 @@
+ 
+ #include <climits>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ #include <mia/core/msgstream.hh>
+ #include <mia/2d/imagetest.hh>
+ #include <mia/3d/fifotestfixture.hh>
+diff --git a/mia/3d/filter/test_convert.cc b/mia/3d/filter/test_convert.cc
+index e83032c1..dad9afaa 100644
+--- a/mia/3d/filter/test_convert.cc
++++ b/mia/3d/filter/test_convert.cc
+@@ -20,7 +20,6 @@
+ 
+ #include <mia/internal/autotest.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <mia/core/type_traits.hh>
+ #include <mia/3d/filter/convert.hh>
+ #include <boost/mpl/insert_range.hpp>
+diff --git a/mia/3d/test_image.cc b/mia/3d/test_image.cc
+index 18f71892..c21e0d20 100644
+--- a/mia/3d/test_image.cc
++++ b/mia/3d/test_image.cc
+@@ -21,7 +21,8 @@
+ #include <climits>
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
++#include <boost/mpl/vector.hpp>
+ 
+ #include <mia/3d/image.hh>
+ #include <mia/core/filter.hh>
+diff --git a/mia/3d/test_imageio.cc b/mia/3d/test_imageio.cc
+index 0640a668..7a6b5635 100644
+--- a/mia/3d/test_imageio.cc
++++ b/mia/3d/test_imageio.cc
+@@ -20,7 +20,6 @@
+ 
+ #include <mia/internal/autotest.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ #include <boost/mpl/insert_range.hpp>
+ 
+ #include <mia/core/attribute_names.hh>
+diff --git a/mia/core/splinekernel/test_bspline.cc b/mia/core/splinekernel/test_bspline.cc
+index 54d6bda3..0abfe443 100644
+--- a/mia/core/splinekernel/test_bspline.cc
++++ b/mia/core/splinekernel/test_bspline.cc
+@@ -23,8 +23,6 @@
+ #include <mia/core/splinekernel/bspline.hh>
+ #include <mia/core/interpolator1d.hh>
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+-
+ 
+ using namespace mia;
+ using namespace mia::bsplinekernel;
+diff --git a/mia/core/test_cost.cc b/mia/core/test_cost.cc
+index 70097b2e..305ca84d 100644
+--- a/mia/core/test_cost.cc
++++ b/mia/core/test_cost.cc
+@@ -27,7 +27,7 @@
+ #include <mia/core/msgstream.hh>
+ 
+ #include <boost/test/unit_test_suite.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ #include <boost/test/test_tools.hpp>
+ 
+ NS_MIA_USE
+diff --git a/mia/core/test_cstplan.cc b/mia/core/test_cstplan.cc
+index aa241d48..a9e5a0e3 100644
+--- a/mia/core/test_cstplan.cc
++++ b/mia/core/test_cstplan.cc
+@@ -23,7 +23,7 @@
+ 
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/cstplan.hh>
+ 
+diff --git a/mia/core/test_dictmap.cc b/mia/core/test_dictmap.cc
+index a9217290..fd05fe30 100644
+--- a/mia/core/test_dictmap.cc
++++ b/mia/core/test_dictmap.cc
+@@ -26,7 +26,7 @@
+ 
+ #include <boost/test/test_tools.hpp>
+ #include <boost/test/unit_test_suite.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/dictmap.hh>
+ #include <mia/core/cmdlineparser.hh>
+diff --git a/mia/core/test_fifofilter.cc b/mia/core/test_fifofilter.cc
+index 2a066f2e..6e2a385d 100644
+--- a/mia/core/test_fifofilter.cc
++++ b/mia/core/test_fifofilter.cc
+@@ -27,7 +27,7 @@
+ 
+ #include <boost/test/test_tools.hpp>
+ #include <boost/test/unit_test_suite.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ 
+ #include <mia/core/cmdlineparser.hh>
+diff --git a/mia/core/test_gsl_matrix.cc b/mia/core/test_gsl_matrix.cc
+index 4add5f7a..6d16353d 100644
+--- a/mia/core/test_gsl_matrix.cc
++++ b/mia/core/test_gsl_matrix.cc
+@@ -25,7 +25,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_ALTERNATIVE_INIT_API
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ #include <mia/core/gsl_matrix.hh>
+ 
+ #include <stdexcept>
+diff --git a/mia/core/test_gsl_matrix_vector_ops.cc b/mia/core/test_gsl_matrix_vector_ops.cc
+index e5f7d7b9..217020f7 100644
+--- a/mia/core/test_gsl_matrix_vector_ops.cc
++++ b/mia/core/test_gsl_matrix_vector_ops.cc
+@@ -28,7 +28,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_ALTERNATIVE_INIT_API
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <iostream>
+ #include <cmath>
+diff --git a/mia/core/test_gsl_multimin.cc b/mia/core/test_gsl_multimin.cc
+index 5bbc434b..129f578a 100644
+--- a/mia/core/test_gsl_multimin.cc
++++ b/mia/core/test_gsl_multimin.cc
+@@ -25,7 +25,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_ALTERNATIVE_INIT_API
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ #include <vector>
+ 
+ #include <mia/core/gsl_multimin.hh>
+diff --git a/mia/core/test_gsl_pca.cc b/mia/core/test_gsl_pca.cc
+index 436b36b0..12942921 100644
+--- a/mia/core/test_gsl_pca.cc
++++ b/mia/core/test_gsl_pca.cc
+@@ -27,7 +27,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_ALTERNATIVE_INIT_API
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/gsl_pca.hh>
+ 
+diff --git a/mia/core/test_gsl_vector.cc b/mia/core/test_gsl_vector.cc
+index 541c88b8..ba91f159 100644
+--- a/mia/core/test_gsl_vector.cc
++++ b/mia/core/test_gsl_vector.cc
+@@ -25,10 +25,9 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_ALTERNATIVE_INIT_API
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
+ 
+ #include <mia/core/gsl_vector.hh>
+ 
+diff --git a/mia/core/test_interpol.cc b/mia/core/test_interpol.cc
+index 36669dc0..2dd5157d 100644
+--- a/mia/core/test_interpol.cc
++++ b/mia/core/test_interpol.cc
+@@ -24,7 +24,7 @@
+ #include <mia/internal/autotest.hh>
+ 
+ #include <boost/mpl/vector.hpp>
+-#include <boost/test/test_case_template.hpp>
++#include <boost/test/unit_test.hpp>
+ #include <boost/type_traits.hpp>
+ #include <boost/filesystem/path.hpp>
+ 
+diff --git a/mia/core/test_parameter.cc b/mia/core/test_parameter.cc
+index ae9b4976..28ef2a80 100644
+--- a/mia/core/test_parameter.cc
++++ b/mia/core/test_parameter.cc
+@@ -26,7 +26,7 @@
+ 
+ #include <boost/test/test_tools.hpp>
+ #include <boost/test/unit_test_suite.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/parameter.hh>
+ #include <mia/core/msgstream.hh>
+diff --git a/mia/core/test_probmap.cc b/mia/core/test_probmap.cc
+index 2dc6cb6c..38052681 100644
+--- a/mia/core/test_probmap.cc
++++ b/mia/core/test_probmap.cc
+@@ -22,7 +22,7 @@
+ 
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/cmdlineparser.hh>
+ #include <mia/core/probmap.hh>
+diff --git a/mia/core/test_sqmin.cc b/mia/core/test_sqmin.cc
+index f00b3b85..4a0b67b9 100644
+--- a/mia/core/test_sqmin.cc
++++ b/mia/core/test_sqmin.cc
+@@ -23,7 +23,7 @@
+ #define BOOST_TEST_DYN_LINK
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core/sqmin.hh>
+ 
+diff --git a/mia/internal/autotest.hh b/mia/internal/autotest.hh
+index 419f6e8f..4458c0b2 100644
+--- a/mia/internal/autotest.hh
++++ b/mia/internal/autotest.hh
+@@ -34,7 +34,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_NO_MAIN
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <miaconfig.h>
+ #include <mia/core/cmdlineparser.hh>
+diff --git a/mia/internal/plugintester.hh b/mia/internal/plugintester.hh
+index 2d42b858..e632e5f7 100644
+--- a/mia/internal/plugintester.hh
++++ b/mia/internal/plugintester.hh
+@@ -31,7 +31,7 @@
+ #define BOOST_TEST_MAIN
+ #define BOOST_TEST_NO_MAIN
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <miaconfig.h>
+ #include <mia/core/factory.hh>
+diff --git a/mia/test/testhelpers.hh b/mia/test/testhelpers.hh
+index 27f37e7f..68c213a6 100644
+--- a/mia/test/testhelpers.hh
++++ b/mia/test/testhelpers.hh
+@@ -23,7 +23,7 @@
+ 
+ #include <type_traits>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ namespace miatest
+ {
+diff --git a/src/2dlerp.cc b/src/2dlerp.cc
+index 4c7dde77..1e8801de 100644
+--- a/src/2dlerp.cc
++++ b/src/2dlerp.cc
+@@ -25,7 +25,7 @@
+ 
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core.hh>
+ #include <mia/internal/main.hh>
+diff --git a/src/3dlerp.cc b/src/3dlerp.cc
+index 6ee8dca0..2f1c1f3a 100644
+--- a/src/3dlerp.cc
++++ b/src/3dlerp.cc
+@@ -24,7 +24,7 @@
+ #define BOOST_TEST_NO_MAIN
+ #include <boost/test/unit_test_suite.hpp>
+ #include <boost/test/unit_test.hpp>
+-#include <boost/test/floating_point_comparison.hpp>
++#include <boost/test/tools/floating_point_comparison.hpp>
+ 
+ #include <mia/core.hh>
+ #include <mia/internal/main.hh>
diff --git a/gnu/packages/patches/mozjs17-aarch64-support.patch b/gnu/packages/patches/mozjs17-aarch64-support.patch
deleted file mode 100644
index 51e2e306d5..0000000000
--- a/gnu/packages/patches/mozjs17-aarch64-support.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-https://build.opensuse.org/package/view_file/openSUSE:Factory/mozjs17/mozjs-aarch64-support.patch
-
-index c071c33..90764c3 100644
---- a/js/src/assembler/jit/ExecutableAllocator.h
-+++ b/js/src/assembler/jit/ExecutableAllocator.h
-@@ -382,6 +382,12 @@ public:
-     {
-         reprotectRegion(start, size, Executable);
-     }
-+#elif WTF_CPU_AARCH64 && WTF_PLATFORM_LINUX
-+    static void cacheFlush(void* code, size_t size)
-+    {
-+        intptr_t end = reinterpret_cast<intptr_t>(code) + size;
-+        __builtin___clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(end));
-+    }
- #else
-     static void makeWritable(void*, size_t) {}
-     static void makeExecutable(void*, size_t) {}
-diff --git a/js/src/assembler/wtf/Platform.h b/js/src/assembler/wtf/Platform.h
-index 0c84896..e8763a7 100644
---- a/js/src/assembler/wtf/Platform.h
-+++ b/js/src/assembler/wtf/Platform.h
-@@ -325,6 +325,10 @@
- #define WTF_THUMB_ARCH_VERSION 0
- #endif
- 
-+/* CPU(AArch64) - 64-bit ARM */
-+#if defined(__aarch64__)
-+#define WTF_CPU_AARCH64 1
-+#endif
- 
- /* WTF_CPU_ARMV5_OR_LOWER - ARM instruction set v5 or earlier */
- /* On ARMv5 and below the natural alignment is required. 
-diff --git a/js/src/configure.in b/js/src/configure.in
-index 15605b2..19fd704 100644
---- a/js/src/configure.in
-+++ b/js/src/configure.in
-@@ -1121,6 +1121,10 @@ arm*)
-     CPU_ARCH=arm
-     ;;
- 
-+aarch64)
-+    CPU_ARCH=aarch64
-+    ;;
-+
- mips|mipsel)
-     CPU_ARCH=&quot;mips&quot;
-     ;;
-diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h
-index 0eec2d9..fe26dab 100644
---- a/mfbt/double-conversion/utils.h
-+++ b/mfbt/double-conversion/utils.h
-@@ -58,6 +58,7 @@
-     defined(__mips__) || defined(__powerpc__) || \
-     defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
-     defined(__SH4__) || defined(__alpha__) || \
-+    defined(__aarch64__) || \
-     defined(_MIPS_ARCH_MIPS32R2)
- #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
- #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
diff --git a/gnu/packages/patches/mozjs24-aarch64-support.patch b/gnu/packages/patches/mozjs24-aarch64-support.patch
deleted file mode 100644
index 9dca8e500c..0000000000
--- a/gnu/packages/patches/mozjs24-aarch64-support.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-This patch is sourced from Debian's mozjs24 patch set.
-
-Description: Add arm64 support
-Author: Andreas Schwab <schwab@suse.de>
-Origin: vendor, https://build.opensuse.org/package/view_file/openSUSE:Factory/mozjs17/mozjs-aarch64-support.patch
-Forwarded: no
-Last-Update: 2014-01-03
-
-Index: b/mfbt/double-conversion/utils.h
-===================================================================
---- a/mfbt/double-conversion/utils.h
-+++ b/mfbt/double-conversion/utils.h
-@@ -58,7 +58,7 @@
-     defined(__mips__) || defined(__powerpc__) || \
-     defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
-     defined(__SH4__) || defined(__alpha__) || \
--    defined(_MIPS_ARCH_MIPS32R2)
-+    defined(_MIPS_ARCH_MIPS32R2) || defined(__aarch64__)
- #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
- #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
- #if defined(_WIN32)
diff --git a/gnu/packages/patches/mozjs38-pkg-config-version.patch b/gnu/packages/patches/mozjs38-pkg-config-version.patch
deleted file mode 100644
index 49ff6f6f8d..0000000000
--- a/gnu/packages/patches/mozjs38-pkg-config-version.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Taken from https://bug1339931.bmoattachments.org/attachment.cgi?id=8837770.
-
-Add major version to pkg-config filename.
-Author: Rico Tzschichholz <ricotz@ubuntu.com>
-Forwarded: no
-Last-Update: 2015-05-04
-
-Index: b/js/src/Makefile.in
-===================================================================
---- a/js/src/Makefile.in
-+++ b/js/src/Makefile.in
-@@ -214,10 +214,10 @@
- $(JS_CONFIG_NAME): js-config
-    cp $^ $@
- 
--$(LIBRARY_NAME).pc: js.pc
-+$(JS_LIBRARY_NAME).pc: js.pc
- 	cp $^ $@
- 
--install:: $(LIBRARY_NAME).pc
-+install:: $(JS_LIBRARY_NAME).pc
- 	$(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig
- 
- install:: js-config.h
diff --git a/gnu/packages/patches/mozjs38-shell-version.patch b/gnu/packages/patches/mozjs38-shell-version.patch
deleted file mode 100644
index e7d3d19c85..0000000000
--- a/gnu/packages/patches/mozjs38-shell-version.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-Taken from https://bug1339931.bmoattachments.org/attachment.cgi?id=8837771.
-
-# HG changeset patch
-# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a
-Add major version to shell and js-config filenames.
-Author: Rico Tzschichholz <ricotz@ubuntu.com>
-Forwarded: no
-Last-Update: 2014-10-29
-
----
-diff --git a/js/src/configure b/js/src/configure
---- a/js/src/configure
-+++ b/js/src/configure
-@@ -1696,8 +1696,13 @@
- MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
- IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
- 
-+if test -n "$JS_STANDALONE"; then
-+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
-+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
-+else
- JS_SHELL_NAME=js
- JS_CONFIG_NAME=js-config
-+fi
- 
- 
- if test -n "$IS_ALPHA"; then
-
-diff --git a/js/src/configure.in b/js/src/configure.in
---- a/js/src/configure.in
-+++ b/js/src/configure.in
-@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI
- MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
- IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
- 
--dnl XXX in a temporary bid to avoid developer anger at renaming files
--dnl XXX before "js" symlinks exist, don't change names.
--dnl
--dnl if test -n "$JS_STANDALONE"; then
--dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
--dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
--dnl else
-+if test -n "$JS_STANDALONE"; then
-+JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
-+JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
-+else
- JS_SHELL_NAME=js
- JS_CONFIG_NAME=js-config
--dnl fi
-+fi
- 
- changequote([,])
- if test -n "$IS_ALPHA"; then
-
-diff -r 80a9e64d75f5 js/src/Makefile.in
---- a/js/src/Makefile.in        Wed Jun 25 15:11:42 2014 +0200
-+++ b/js/src/Makefile.in        Sat Jul 05 14:08:38 2014 +0200
-@@ -273,6 +273,9 @@
- SCRIPTS = $(JS_CONFIG_NAME)
- SDK_BINARY = $(JS_CONFIG_NAME)
- 
-+$(JS_CONFIG_NAME): js-config
-+	cp $^ $@
-+
- $(JS_LIBRARY_NAME).pc: js.pc
- 	cp $^ $@
- 
diff --git a/gnu/packages/patches/mozjs38-tracelogger.patch b/gnu/packages/patches/mozjs38-tracelogger.patch
deleted file mode 100644
index 0375ec36cc..0000000000
--- a/gnu/packages/patches/mozjs38-tracelogger.patch
+++ /dev/null
@@ -1,608 +0,0 @@
-Squashed version of several commits to fix the tracelogger.
-
-Taken from
-https://github.com/GNOME/jhbuild/blob/master/patches/mozjs38-fix-tracelogger.patch.
-
-# === Fix the SM38 tracelogger ===
-# This patch is a squashed version of several patches that were adapted
-# to fix failing hunks.
-#
-# Applied in the following order, they are:
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767
-#    Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 
-#    Also fix stop-information to make reduce.py work correctly.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914
-#    Limit the memory tracelogger can take.
-#    This causes tracelogger to flush data to the disk regularly and prevents out of 
-#    memory issues if a lot of data gets logged.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618
-#    Fix tracelogger destructor that touches possibly uninitialised hash table.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636
-#    Don't treat extraTextId as containing only extra ids.
-#    This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028
-#    Fix when to keep the payload of a TraceLogger event.
-#    This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649
-#    Handle failing to add to pointermap gracefully.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648
-#    Don't cache based on pointers to movable GC things.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123
-#    Fix the use of LastEntryId in tracelogger.h.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170
-#    Use size in debugger instead of the current id to track last logged item.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844
-#    Move TraceLogger_Invalidation to LOG_ITEM.
-#    Add some debug checks to logTimestamp.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766
-#    Also mark resizing of memory.
-# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403
-#    Only increase capacity by multiples of 2.
-#    Always make sure there are 3 free slots for events.
-# ===
-
-diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js
-new file mode 100644
-index 0000000..023e93e
---- /dev/null
-+++ b/js/src/jit-test/tests/tracelogger/bug1231170.js
-@@ -0,0 +1,3 @@
-+var du = new Debugger();
-+if (typeof du.drainTraceLogger === "function")
-+    du.drainTraceLogger();
-diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js
-new file mode 100644
-index 0000000..81ae7ad
---- /dev/null
-+++ b/js/src/jit-test/tests/tracelogger/bug1266649.js
-@@ -0,0 +1,10 @@
-+
-+var du = new Debugger();
-+if (typeof du.setupTraceLogger === "function" &&
-+    typeof oomTest === 'function')
-+{
-+    du.setupTraceLogger({
-+        Scripts: true
-+    })
-+    oomTest(() => function(){});
-+}
-diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp
-index 93e2fda..09049d6 100644
---- a/js/src/jit/Ion.cpp
-+++ b/js/src/jit/Ion.cpp
-@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script)
- 
-     script->destroyCaches();
-     script->unlinkFromRuntime(fop);
-+    // Frees the potential event we have set.
-+    script->traceLoggerScriptEvent_ = TraceLoggerEvent();
-     fop->free_(script);
- }
- 
-diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
-index 26262fd..af7f313 100644
---- a/js/src/vm/Debugger.cpp
-+++ b/js/src/vm/Debugger.cpp
-@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg)
-     objects(cx),
-     environments(cx),
- #ifdef NIGHTLY_BUILD
--    traceLoggerLastDrainedId(0),
-+    traceLoggerLastDrainedSize(0),
-     traceLoggerLastDrainedIteration(0),
- #endif
--    traceLoggerScriptedCallsLastDrainedId(0),
-+    traceLoggerScriptedCallsLastDrainedSize(0),
-     traceLoggerScriptedCallsLastDrainedIteration(0)
- {
-     assertSameCompartment(cx, dbg);
-@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp)
-     size_t num;
-     TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
-     bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration,
--                                         dbg->traceLoggerLastDrainedId);
-+                                         dbg->traceLoggerLastDrainedSize);
-     EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration,
--                                                     &dbg->traceLoggerLastDrainedId,
-+                                                     &dbg->traceLoggerLastDrainedSize,
-                                                      &num);
- 
-     RootedObject array(cx, NewDenseEmptyArray(cx));
-@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp)
-     size_t num;
-     TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
-     bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration,
--                                         dbg->traceLoggerScriptedCallsLastDrainedId);
-+                                         dbg->traceLoggerScriptedCallsLastDrainedSize);
-     EventEntry* events = logger->getEventsStartingAt(
-                                          &dbg->traceLoggerScriptedCallsLastDrainedIteration,
--                                         &dbg->traceLoggerScriptedCallsLastDrainedId,
-+                                         &dbg->traceLoggerScriptedCallsLastDrainedSize,
-                                          &num);
- 
-     RootedObject array(cx, NewDenseEmptyArray(cx));
-diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h
-index 8cac36a..c92d685 100644
---- a/js/src/vm/Debugger.h
-+++ b/js/src/vm/Debugger.h
-@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger>
-      * lost events.
-      */
- #ifdef NIGHTLY_BUILD
--    uint32_t traceLoggerLastDrainedId;
-+    uint32_t traceLoggerLastDrainedSize;
-     uint32_t traceLoggerLastDrainedIteration;
- #endif
--    uint32_t traceLoggerScriptedCallsLastDrainedId;
-+    uint32_t traceLoggerScriptedCallsLastDrainedSize;
-     uint32_t traceLoggerScriptedCallsLastDrainedIteration;
- 
-     class FrameRange;
-diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp
-index 6715b36..9766a6f 100644
---- a/js/src/vm/TraceLogging.cpp
-+++ b/js/src/vm/TraceLogging.cpp
-@@ -131,7 +131,7 @@ TraceLoggerThread::init()
- {
-     if (!pointerMap.init())
-         return false;
--    if (!extraTextId.init())
-+    if (!textIdPayloads.init())
-         return false;
-     if (!events.init())
-         return false;
-@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread()
-         graph = nullptr;
-     }
- 
--    for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront())
--        js_delete(r.front().value());
--    extraTextId.finish();
--    pointerMap.finish();
-+    if (textIdPayloads.initialized()) {
-+        for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront())
-+            js_delete(r.front().value());
-+    }
- }
- 
- bool
-@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id)
-     if (id < TraceLogger_Last)
-         return TLTextIdString(static_cast<TraceLoggerTextId>(id));
- 
--    TextIdHashMap::Ptr p = extraTextId.lookup(id);
-+    TextIdHashMap::Ptr p = textIdPayloads.lookup(id);
-     MOZ_ASSERT(p);
- 
-     return p->value()->string();
-@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename,
- TraceLoggerEventPayload*
- TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId)
- {
--    TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId);
--    if (p)
-+    TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId);
-+    if (p) {
-+        MOZ_ASSERT(p->value()->textId() == textId); // Sanity check.
-         return p->value();
-+    }
- 
-     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr);
- 
--    if (!extraTextId.add(p, textId, payload))
-+    if (!textIdPayloads.add(p, textId, payload))
-         return nullptr;
- 
-     return payload;
-@@ -357,8 +359,10 @@ TraceLoggerEventPayload*
- TraceLoggerThread::getOrCreateEventPayload(const char* text)
- {
-     PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text);
--    if (p)
-+    if (p) {
-+        MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check.
-         return p->value();
-+    }
- 
-     size_t len = strlen(text);
-     char* str = js_pod_malloc<char>(len + 1);
-@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text)
-     MOZ_ASSERT(ret == len);
-     MOZ_ASSERT(strlen(str) == len);
- 
--    uint32_t textId = extraTextId.count() + TraceLogger_Last;
-+    uint32_t textId = nextTextId;
- 
-     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str);
-     if (!payload) {
-@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text)
-         return nullptr;
-     }
- 
--    if (!extraTextId.putNew(textId, payload)) {
-+    if (!textIdPayloads.putNew(textId, payload)) {
-         js_delete(payload);
-         return nullptr;
-     }
- 
--    if (!pointerMap.add(p, text, payload))
--        return nullptr;
--
-     if (graph.get())
-         graph->addTextId(textId, str);
- 
-+    nextTextId++;
-+
-+    if (!pointerMap.add(p, text, payload))
-+        return nullptr;
-+
-     return payload;
- }
- 
-@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f
-     if (!traceLoggerState->isTextIdEnabled(type))
-         return getOrCreateEventPayload(type);
- 
--    PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr);
--    if (p)
--        return p->value();
-+    PointerHashMap::AddPtr p;
-+    if (ptr) {
-+        p = pointerMap.lookupForAdd(ptr);
-+        if (p) {
-+            MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check.
-+            return p->value();
-+        }
-+    }
- 
-     // Compute the length of the string to create.
-     size_t lenFilename = strlen(filename);
-@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f
-     MOZ_ASSERT(ret == len);
-     MOZ_ASSERT(strlen(str) == len);
- 
--    uint32_t textId = extraTextId.count() + TraceLogger_Last;
-+    uint32_t textId = nextTextId;
-     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str);
-     if (!payload) {
-         js_free(str);
-         return nullptr;
-     }
- 
--    if (!extraTextId.putNew(textId, payload)) {
-+    if (!textIdPayloads.putNew(textId, payload)) {
-         js_delete(payload);
-         return nullptr;
-     }
- 
--    if (!pointerMap.add(p, ptr, payload))
--        return nullptr;
--
-     if (graph.get())
-         graph->addTextId(textId, str);
- 
-+    nextTextId++;
-+
-+    if (ptr) {
-+        if (!pointerMap.add(p, ptr, payload))
-+            return nullptr;
-+    }
-+
-     return payload;
- }
- 
-@@ -453,14 +468,14 @@ TraceLoggerEventPayload*
- TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script)
- {
-     return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(),
--                                   script);
-+                                   nullptr);
- }
- 
- TraceLoggerEventPayload*
- TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type,
-                                            const JS::ReadOnlyCompileOptions& script)
- {
--    return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script);
-+    return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr);
- }
- 
- void
-@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id)
-     if (!traceLoggerState->isTextIdEnabled(id))
-        return;
- 
--    logTimestamp(id);
-+    log(id);
- }
- 
- void
-@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id)
-     if (!traceLoggerState->isTextIdEnabled(id))
-         return;
- 
--    logTimestamp(TraceLogger_Stop);
-+    log(TraceLogger_Stop);
- }
- 
- void
-@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id)
- void
- TraceLoggerThread::logTimestamp(uint32_t id)
- {
-+    MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last);
-+    log(id);
-+}
-+
-+void
-+TraceLoggerThread::log(uint32_t id)
-+{
-     if (enabled == 0)
-         return;
- 
-     MOZ_ASSERT(traceLoggerState);
--    if (!events.ensureSpaceBeforeAdd()) {
-+
-+    // We request for 3 items to add, since if we don't have enough room
-+    // we record the time it took to make more place. To log this information
-+    // we need 2 extra free entries.
-+    if (!events.hasSpaceForAdd(3)) {
-         uint64_t start = rdtsc() - traceLoggerState->startupTime;
- 
--        if (graph.get())
--            graph->log(events);
-+        if (!events.ensureSpaceBeforeAdd(3)) {
-+            if (graph.get())
-+                graph->log(events);
-+
-+            iteration_++;
-+            events.clear();
-+
-+            // Remove the item in the pointerMap for which the payloads
-+            // have no uses anymore
-+            for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) {
-+                if (e.front().value()->uses() != 0)
-+                    continue;
-+
-+                TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId());
-+                MOZ_ASSERT(p);
-+                textIdPayloads.remove(p);
-+
-+                e.removeFront();
-+            }
- 
--        iteration_++;
--        events.clear();
-+            // Free all payloads that have no uses anymore.
-+            for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) {
-+                if (e.front().value()->uses() == 0) {
-+                    js_delete(e.front().value());
-+                    e.removeFront();
-+                }
-+            }
-+        }
- 
-         // Log the time it took to flush the events as being from the
-         // Tracelogger.
-         if (graph.get()) {
--            MOZ_ASSERT(events.capacity() > 2);
-+            MOZ_ASSERT(events.hasSpaceForAdd(2));
-             EventEntry& entryStart = events.pushUninitialized();
-             entryStart.time = start;
-             entryStart.textId = TraceLogger_Internal;
-@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id)
-             entryStop.textId = TraceLogger_Stop;
-         }
- 
--        // Free all TextEvents that have no uses anymore.
--        for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) {
--            if (e.front().value()->uses() == 0) {
--                js_delete(e.front().value());
--                e.removeFront();
--            }
--        }
-     }
- 
-     uint64_t time = rdtsc() - traceLoggerState->startupTime;
-@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent()
-     if (payload_)
-         payload_->release();
- }
-+
-+TraceLoggerEvent&
-+TraceLoggerEvent::operator=(const TraceLoggerEvent& other)
-+{
-+    if (hasPayload())
-+        payload()->release();
-+    if (other.hasPayload())
-+        other.payload()->use();
-+
-+    payload_ = other.payload_;
-+
-+    return *this;
-+}
-diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h
-index a124dcb..91a1eb0 100644
---- a/js/src/vm/TraceLogging.h
-+++ b/js/src/vm/TraceLogging.h
-@@ -110,6 +110,9 @@ class TraceLoggerEvent {
-     bool hasPayload() const {
-         return !!payload_;
-     }
-+
-+    TraceLoggerEvent& operator=(const TraceLoggerEvent& other);
-+    TraceLoggerEvent(const TraceLoggerEvent& event) = delete;
- };
- 
- /**
-@@ -130,6 +133,10 @@ class TraceLoggerEventPayload {
-         uses_(0)
-     { }
- 
-+    ~TraceLoggerEventPayload() {
-+        MOZ_ASSERT(uses_ == 0);
-+    }
-+
-     uint32_t textId() {
-         return textId_;
-     }
-@@ -166,7 +173,8 @@ class TraceLoggerThread
-     mozilla::UniquePtr<TraceLoggerGraph> graph;
- 
-     PointerHashMap pointerMap;
--    TextIdHashMap extraTextId;
-+    TextIdHashMap textIdPayloads;
-+    uint32_t nextTextId;
- 
-     ContinuousSpace<EventEntry> events;
- 
-@@ -181,6 +189,7 @@ class TraceLoggerThread
-       : enabled(0),
-         failed(false),
-         graph(),
-+        nextTextId(TraceLogger_Last),
-         iteration_(0),
-         top(nullptr)
-     { }
-@@ -195,22 +204,22 @@ class TraceLoggerThread
-     bool enable(JSContext* cx);
-     bool disable();
- 
--    // Given the previous iteration and lastEntryId, return an array of events
-+    // Given the previous iteration and size, return an array of events
-     // (there could be lost events). At the same time update the iteration and
--    // lastEntry and gives back how many events there are.
--    EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) {
-+    // size and gives back how many events there are.
-+    EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) {
-         EventEntry* start;
-         if (iteration_ == *lastIteration) {
--            MOZ_ASSERT(events.lastEntryId() >= *lastEntryId);
--            *num = events.lastEntryId() - *lastEntryId;
--            start = events.data() + *lastEntryId + 1;
-+            MOZ_ASSERT(*lastSize <= events.size());
-+            *num = events.size() - *lastSize;
-+            start = events.data() + *lastSize;
-         } else {
--            *num = events.lastEntryId() + 1;
-+            *num = events.size();
-             start = events.data();
-         }
- 
-         *lastIteration = iteration_;
--        *lastEntryId = events.lastEntryId();
-+        *lastSize = events.size();
-         return start;
-     }
- 
-@@ -220,16 +229,16 @@ class TraceLoggerThread
-                               const char** lineno, size_t* lineno_len, const char** colno,
-                               size_t* colno_len);
- 
--    bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) {
-+    bool lostEvents(uint32_t lastIteration, uint32_t lastSize) {
-         // If still logging in the same iteration, there are no lost events.
-         if (lastIteration == iteration_) {
--            MOZ_ASSERT(lastEntryId <= events.lastEntryId());
-+            MOZ_ASSERT(lastSize <= events.size());
-             return false;
-         }
- 
--        // When proceeded to the next iteration and lastEntryId points to
--        // the maximum capacity there are no logs that are lost.
--        if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity())
-+        // If we are in a consecutive iteration we are only sure we didn't lose any events,
-+        // when the lastSize equals the maximum size 'events' can get.
-+        if (lastIteration == iteration_ - 1 && lastSize == events.maxSize())
-             return false;
- 
-         return true;
-@@ -268,6 +277,7 @@ class TraceLoggerThread
-     void stopEvent(uint32_t id);
-   private:
-     void stopEvent();
-+    void log(uint32_t id);
- 
-   public:
-     static unsigned offsetOfEnabled() {
-diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp
-index d1b7f2e..a4eb273 100644
---- a/js/src/vm/TraceLoggingGraph.cpp
-+++ b/js/src/vm/TraceLoggingGraph.cpp
-@@ -276,7 +276,7 @@ TraceLoggerGraph::flush()
-         if (bytesWritten < tree.size())
-             return false;
- 
--        treeOffset += tree.lastEntryId();
-+        treeOffset += tree.size();
-         tree.clear();
-     }
- 
-@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp)
- 
-     if (parent.lastChildId() == 0) {
-         MOZ_ASSERT(!entry.hasChildren());
--        MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset);
-+        MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1);
- 
-         if (!updateHasChildren(parent.treeId()))
-             return false;
-diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h
-index f1c9d0c..10b76d6 100644
---- a/js/src/vm/TraceLoggingTypes.h
-+++ b/js/src/vm/TraceLoggingTypes.h
-@@ -21,7 +21,6 @@
-     _(Internal)                                       \
-     _(Interpreter)                                    \
-     _(InlinedScripts)                                 \
--    _(Invalidation)                                   \
-     _(IonCompilation)                                 \
-     _(IonCompilationPaused)                           \
-     _(IonLinking)                                     \
-@@ -60,6 +59,7 @@
- 
- #define TRACELOGGER_LOG_ITEMS(_)                      \
-     _(Bailout)                                        \
-+    _(Invalidation)                                   \
-     _(Disable)                                        \
-     _(Enable)                                         \
-     _(Stop)
-@@ -130,6 +130,9 @@ class ContinuousSpace {
-     uint32_t size_;
-     uint32_t capacity_;
- 
-+    // The maximum amount of ram memory a continuous space structure can take (in bytes).
-+    static const uint32_t LIMIT = 200 * 1024 * 1024;
-+
-   public:
-     ContinuousSpace ()
-      : data_(nullptr)
-@@ -151,6 +154,10 @@ class ContinuousSpace {
-         data_ = nullptr;
-     }
- 
-+    static uint32_t maxSize() {
-+        return LIMIT / sizeof(T);
-+    }
-+
-     T* data() {
-         return data_;
-     }
-@@ -187,11 +194,14 @@ class ContinuousSpace {
-         if (hasSpaceForAdd(count))
-             return true;
- 
-+        // Limit the size of a continuous buffer.
-+        if (size_ + count > maxSize())
-+            return false;
-+
-         uint32_t nCapacity = capacity_ * 2;
--        if (size_ + count > nCapacity)
--            nCapacity = size_ + count;
--        T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T));
-+        nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize();
- 
-+        T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T));
-         if (!entries)
-             return false;
- 
diff --git a/gnu/packages/patches/mozjs38-version-detection.patch b/gnu/packages/patches/mozjs38-version-detection.patch
deleted file mode 100644
index ec2d264ccc..0000000000
--- a/gnu/packages/patches/mozjs38-version-detection.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-Taken from
-https://trac.wildfiregames.com/export/18656/ps/trunk/libraries/source/spidermonkey/FixVersionDetectionConfigure.diff.
-
-Fixes a version detection issue in 0ad.  See
-https://lists.gnu.org/archive/html/guix-devel/2017-01/msg00625.html.
-
-diff --git a/js/src/configure b/js/src/configure
---- a/js/src/configure
-+++ b/js/src/configure
-@@ -1662,70 +1662,6 @@ esac
- 
- fi
- 
--MOZILLA_VERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir`
--MOZILLA_UAVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --uaversion`
--MOZILLA_SYMBOLVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --symbolversion`
--
--cat >> confdefs.pytmp <<EOF
--    (''' MOZILLA_VERSION ''', r''' "$MOZILLA_VERSION" ''')
--EOF
--cat >> confdefs.h <<EOF
--#define MOZILLA_VERSION "$MOZILLA_VERSION"
--EOF
--
--cat >> confdefs.pytmp <<EOF
--    (''' MOZILLA_VERSION_U ''', r''' $MOZILLA_VERSION ''')
--EOF
--cat >> confdefs.h <<EOF
--#define MOZILLA_VERSION_U $MOZILLA_VERSION
--EOF
--
--cat >> confdefs.pytmp <<EOF
--    (''' MOZILLA_UAVERSION ''', r''' "$MOZILLA_UAVERSION" ''')
--EOF
--cat >> confdefs.h <<EOF
--#define MOZILLA_UAVERSION "$MOZILLA_UAVERSION"
--EOF
--
--
--
--# Separate version into components for use in shared object naming etc
--
--MOZJS_MAJOR_VERSION=`echo $MOZILLA_VERSION | sed "s|\(^[0-9]*\)\.[0-9]*.*|\1|"`
--MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.\([0-9]*\).*|\1|"`
--MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
--IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
--
--JS_SHELL_NAME=js
--JS_CONFIG_NAME=js-config
--
--
--if test -n "$IS_ALPHA"; then
--  
--  MOZJS_ALPHA=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9\.]*\([^0-9]\).*|\1|"`
--  
--fi
--cat >> confdefs.pytmp <<EOF
--    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
--EOF
--cat >> confdefs.h <<EOF
--#define MOZJS_MAJOR_VERSION $MOZJS_MAJOR_VERSION
--EOF
--
--cat >> confdefs.pytmp <<EOF
--    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
--EOF
--cat >> confdefs.h <<EOF
--#define MOZJS_MINOR_VERSION $MOZJS_MINOR_VERSION
--EOF
--
--
--
--
--
--
--
--
- 
- AR_FLAGS='crs $@'
- 
-@@ -5731,6 +5565,71 @@ XCFLAGS="$X_CFLAGS"
- 
- fi # COMPILE_ENVIRONMENT
- 
-+MOZILLA_VERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir`
-+MOZILLA_UAVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --uaversion`
-+MOZILLA_SYMBOLVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --symbolversion`
-+
-+cat >> confdefs.pytmp <<EOF
-+    (''' MOZILLA_VERSION ''', r''' "$MOZILLA_VERSION" ''')
-+EOF
-+cat >> confdefs.h <<EOF
-+#define MOZILLA_VERSION "$MOZILLA_VERSION"
-+EOF
-+
-+cat >> confdefs.pytmp <<EOF
-+    (''' MOZILLA_VERSION_U ''', r''' $MOZILLA_VERSION ''')
-+EOF
-+cat >> confdefs.h <<EOF
-+#define MOZILLA_VERSION_U $MOZILLA_VERSION
-+EOF
-+
-+cat >> confdefs.pytmp <<EOF
-+    (''' MOZILLA_UAVERSION ''', r''' "$MOZILLA_UAVERSION" ''')
-+EOF
-+cat >> confdefs.h <<EOF
-+#define MOZILLA_UAVERSION "$MOZILLA_UAVERSION"
-+EOF
-+
-+
-+
-+# Separate version into components for use in shared object naming etc
-+
-+MOZJS_MAJOR_VERSION=`echo $MOZILLA_VERSION | sed "s|\(^[0-9]*\)\.[0-9]*.*|\1|"`
-+MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.\([0-9]*\).*|\1|"`
-+MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
-+IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
-+
-+JS_SHELL_NAME=js
-+JS_CONFIG_NAME=js-config
-+
-+
-+if test -n "$IS_ALPHA"; then
-+  
-+  MOZJS_ALPHA=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9\.]*\([^0-9]\).*|\1|"`
-+  
-+fi
-+cat >> confdefs.pytmp <<EOF
-+    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
-+EOF
-+cat >> confdefs.h <<EOF
-+#define MOZJS_MAJOR_VERSION $MOZJS_MAJOR_VERSION
-+EOF
-+
-+cat >> confdefs.pytmp <<EOF
-+    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
-+EOF
-+cat >> confdefs.h <<EOF
-+#define MOZJS_MINOR_VERSION $MOZJS_MINOR_VERSION
-+EOF
-+
-+
-+
-+
-+
-+
-+
-+
-+
- AS_BIN=$AS
- AR_LIST='$(AR) t'
- AR_EXTRACT='$(AR) x'
-@@ -16003,13 +15908,6 @@ sed 's/$/,/' >> $CONFIG_STATUS <<EOF
-     (''' ANDROID_NDK ''', r''' $ANDROID_NDK ''')
-     (''' ANDROID_TOOLCHAIN ''', r''' $ANDROID_TOOLCHAIN ''')
-     (''' ANDROID_PLATFORM ''', r''' $ANDROID_PLATFORM ''')
--    (''' MOZILLA_SYMBOLVERSION ''', r''' $MOZILLA_SYMBOLVERSION ''')
--    (''' JS_SHELL_NAME ''', r''' $JS_SHELL_NAME ''')
--    (''' JS_CONFIG_NAME ''', r''' $JS_CONFIG_NAME ''')
--    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
--    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
--    (''' MOZJS_PATCH_VERSION ''', r''' $MOZJS_PATCH_VERSION ''')
--    (''' MOZJS_ALPHA ''', r''' $MOZJS_ALPHA ''')
-     (''' HOST_CC ''', r''' $HOST_CC ''')
-     (''' HOST_CXX ''', r''' $HOST_CXX ''')
-     (''' HOST_RANLIB ''', r''' $HOST_RANLIB ''')
-@@ -16061,6 +15959,13 @@ sed 's/$/,/' >> $CONFIG_STATUS <<EOF
-     (''' X_PRE_LIBS ''', r''' $X_PRE_LIBS ''')
-     (''' X_LIBS ''', r''' $X_LIBS ''')
-     (''' X_EXTRA_LIBS ''', r''' $X_EXTRA_LIBS ''')
-+    (''' MOZILLA_SYMBOLVERSION ''', r''' $MOZILLA_SYMBOLVERSION ''')
-+    (''' JS_SHELL_NAME ''', r''' $JS_SHELL_NAME ''')
-+    (''' JS_CONFIG_NAME ''', r''' $JS_CONFIG_NAME ''')
-+    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
-+    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
-+    (''' MOZJS_PATCH_VERSION ''', r''' $MOZJS_PATCH_VERSION ''')
-+    (''' MOZJS_ALPHA ''', r''' $MOZJS_ALPHA ''')
-     (''' SOLARIS_SUNPRO_CC ''', r''' $SOLARIS_SUNPRO_CC ''')
-     (''' SOLARIS_SUNPRO_CXX ''', r''' $SOLARIS_SUNPRO_CXX ''')
-     (''' MOZ_THUMB2 ''', r''' $MOZ_THUMB2 ''')
diff --git a/gnu/packages/patches/mozjs60-riscv64-support.patch b/gnu/packages/patches/mozjs60-riscv64-support.patch
deleted file mode 100644
index c9fa2ba9b3..0000000000
--- a/gnu/packages/patches/mozjs60-riscv64-support.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-This is a combination of several upstream patches which weren't accepted.
-They were proposed by Fedora for spidermonkey 52 and were ultimately
-accepted years later after some changes for a later version. It was
-adapted slightly from both sets of patches to apply cleanly to mozjs-60.
-
-https://bugzilla.mozilla.org/show_bug.cgi?id=1318905
-https://bug1318905.bmoattachments.org/attachment.cgi?id=8812602
-https://bug1318905.bmoattachments.org/attachment.cgi?id=8812603
-https://bug1318905.bmoattachments.org/attachment.cgi?id=8812604
-https://phabricator.services.mozilla.com/D78623
-https://phabricator.services.mozilla.com/D78624
-https://phabricator.services.mozilla.com/D78625
-
-
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
-index 83b8d705..59131525 100644
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -676,6 +676,9 @@ def split_triplet(triplet, allow_unknown=False):
-     elif cpu == 'sh4':
-         canonical_cpu = 'sh4'
-         endianness = 'little'
-+    elif cpu.startswith('riscv64'):
-+        canonical_cpu = 'riscv64'
-+        endianness = 'little'
-     elif allow_unknown:
-         canonical_cpu = cpu
-         endianness = 'unknown'
-diff --git a/js/src/jit/AtomicOperations.h b/js/src/jit/AtomicOperations.h
-index a8970b0d..6b947a3f 100644
---- a/js/src/jit/AtomicOperations.h
-+++ b/js/src/jit/AtomicOperations.h
-@@ -375,7 +375,7 @@ AtomicOperations::isLockfreeJS(int32_t size)
- # endif
- #elif defined(__ppc__) || defined(__PPC__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
--#elif defined(__sparc__)
-+#elif defined(__sparc__) || defined(__riscv)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
- #elif defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
-diff --git a/js/src/jit/none/AtomicOperations-feeling-lucky.h b/js/src/jit/none/AtomicOperations-feeling-lucky.h
-index da572284..6ce40c89 100644
---- a/js/src/jit/none/AtomicOperations-feeling-lucky.h
-+++ b/js/src/jit/none/AtomicOperations-feeling-lucky.h
-@@ -49,6 +49,12 @@
- #  define GNUC_COMPATIBLE
- #endif
- 
-+#if defined(__riscv) && __riscv_xlen == 64
-+#  define HAS_64BIT_ATOMICS
-+#  define HAS_64BIT_LOCKFREE
-+#  define GNUC_COMPATIBLE
-+#endif
-+
- #ifdef __sparc__
- #  define GNUC_COMPATIBLE
- #  ifdef  __LP64__
-diff --git a/js/src/jit/none/MacroAssembler-none.h b/js/src/jit/none/MacroAssembler-none.h
-index 80143dc8..b430fedb 100644
---- a/js/src/jit/none/MacroAssembler-none.h
-+++ b/js/src/jit/none/MacroAssembler-none.h
-@@ -402,6 +402,10 @@ class MacroAssemblerNone : public Assembler
- #endif
- };
- 
-+    struct AutoPrepareForPatching {
-+        explicit AutoPrepareForPatching(MacroAssemblerNone&) {}
-+    };
-+
- typedef MacroAssemblerNone MacroAssemblerSpecific;
- 
- class ABIArgGenerator
-diff --git a/mfbt/tests/TestPoisonArea.cpp b/mfbt/tests/TestPoisonArea.cpp
-index 06c24ed0..c3fed0df 100644
---- a/mfbt/tests/TestPoisonArea.cpp
-+++ b/mfbt/tests/TestPoisonArea.cpp
-@@ -160,6 +160,9 @@
- #elif defined __aarch64__
- #define RETURN_INSTR 0xd65f03c0 /* ret */
- 
-+#elif defined __riscv
-+#define RETURN_INSTR 0x80828082 /* ret; ret */
-+
- #elif defined __ia64
- struct ia64_instr { uint32_t mI[4]; };
- static const ia64_instr _return_instr =
-diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py
-index 33ae5a45..11a01d3b 100644
---- a/python/mozbuild/mozbuild/configure/constants.py
-+++ b/python/mozbuild/mozbuild/configure/constants.py
-@@ -50,6 +50,7 @@ CPU_bitness = {
-     'mips64': 64,
-     'ppc': 32,
-     'ppc64': 64,
-+    'riscv64': 64,
-     's390': 32,
-     's390x': 64,
-     'sh4': 32,
-@@ -82,6 +84,7 @@ CPU_preprocessor_checks = OrderedDict((
-     ('s390', '__s390__'),
-     ('ppc64', '__powerpc64__'),
-     ('ppc', '__powerpc__'),
-+    ('riscv64', '__riscv && __riscv_xlen == 64'),
-     ('Alpha', '__alpha__'),
-     ('hppa', '__hppa__'),
-     ('sparc64', '__sparc__ && __arch64__'),
-diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
-index cb7ff709..9da41adf 100755
---- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
-@@ -1165,6 +1165,10 @@ class LinuxCrossCompileToolchainTest(BaseToolchainTest):
-         'sh4-unknown-linux-gnu': little_endian + {
-             '__sh__': 1,
-         },
-+        'riscv64-unknown-linux-gnu': little_endian + {
-+            '__riscv': 1,
-+            '__riscv_xlen': 64,
-+        },
-     }
- 
-     PLATFORMS['powerpc64le-unknown-linux-gnu'] = \
diff --git a/gnu/packages/patches/openbox-python3.patch b/gnu/packages/patches/openbox-python3.patch
new file mode 100644
index 0000000000..782524d8a7
--- /dev/null
+++ b/gnu/packages/patches/openbox-python3.patch
@@ -0,0 +1,165 @@
+Retrieved from the openbox Debian package.
+
+From acfbbc4ea40932f183617bb7006700140fe5f61e Mon Sep 17 00:00:00 2001
+From: Troy Curtis Jr <troycurtisjr@gmail.com>
+Date: Wed, 13 Sep 2017 21:59:48 -0500
+Subject: [PATCH] Add python3 support to openbox-xdg-autostart.
+
+Updated syntax in openbox-xdg-autostart to support both python2 and
+python3.
+
+Added a configure substitution to set the chosen python at build time.
+
+https://bugzilla.icculus.org/show_bug.cgi?id=6444
+---
+ .gitignore                                    |  1 +
+ configure.ac                                  |  3 +
+ ...xdg-autostart => openbox-xdg-autostart.in} | 70 +++++++++----------
+ 3 files changed, 38 insertions(+), 36 deletions(-)
+ rename data/autostart/{openbox-xdg-autostart => openbox-xdg-autostart.in} (77%)
+
+diff --git a/configure.ac b/configure.ac
+index ca1602670..9a31e9845 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -103,6 +103,8 @@ AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h grp.h locale.h pwd.h)
+ AC_CHECK_HEADERS(signal.h string.h stdio.h stdlib.h unistd.h sys/stat.h)
+ AC_CHECK_HEADERS(sys/select.h sys/socket.h sys/time.h sys/types.h sys/wait.h)
+ 
++AM_PATH_PYTHON([2],,)
++
+ AC_PATH_PROG([SED], [sed], [no])
+ if test "$SED" = "no"; then
+   AC_MSG_ERROR([The program "sed" is not available. This program is required to build Openbox.])
+@@ -259,6 +261,7 @@ AC_CONFIG_FILES([
+   obrender/version.h
+   obt/version.h
+   version.h
++  data/autostart/openbox-xdg-autostart
+ ])
+ AC_CONFIG_COMMANDS([doc],
+                    [test -d doc || mkdir doc])
+diff --git a/data/autostart/openbox-xdg-autostart b/data/autostart/openbox-xdg-autostart.in
+similarity index 77%
+rename from data/autostart/openbox-xdg-autostart
+rename to data/autostart/openbox-xdg-autostart.in
+index 04a17a199..3c365b112 100755
+--- a/data/autostart/openbox-xdg-autostart
++++ b/data/autostart/openbox-xdg-autostart.in
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!@PYTHON@
+ 
+ # openbox-xdg-autostart runs things based on the XDG autostart specification
+ # Copyright (C) 2008       Dana Jansens
+@@ -28,9 +28,7 @@ try:
+     from xdg.DesktopEntry import DesktopEntry
+     from xdg.Exceptions import ParsingError
+ except ImportError:
+-    print
+-    print >>sys.stderr, "ERROR:", ME, "requires PyXDG to be installed"
+-    print
++    sys.stderr.write("\nERROR: %s requires PyXDG to be installed\n" % ME)
+     sys.exit(1)
+ 
+ def main(argv=sys.argv):
+@@ -51,7 +49,7 @@ def main(argv=sys.argv):
+             try:
+                 autofile = AutostartFile(path)
+             except ParsingError:
+-                print "Invalid .desktop file: " + path
++                print("Invalid .desktop file: " + path)
+             else:
+                 if not autofile in files:
+                     files.append(autofile)
+@@ -99,9 +97,9 @@ class AutostartFile:
+ 
+     def _alert(self, str, info=False):
+         if info:
+-            print "\t ", str
++            print("\t ", str)
+         else:
+-            print "\t*", str
++            print("\t*", str)
+ 
+     def _showInEnvironment(self, envs, verbose=False):
+         default = not self.de.getOnlyShowIn()
+@@ -146,14 +144,14 @@ class AutostartFile:
+ 
+     def display(self, envs):
+         if self._shouldRun(envs):
+-            print "[*] " + self.de.getName()
++            print("[*] " + self.de.getName())
+         else:
+-            print "[ ] " + self.de.getName()
++            print("[ ] " + self.de.getName())
+         self._alert("File: " + self.path, info=True)
+         if self.de.getExec():
+             self._alert("Executes: " + self.de.getExec(), info=True)
+         self._shouldRun(envs, True)
+-        print
++        print()
+ 
+     def run(self, envs):
+         here = os.getcwd()
+@@ -165,34 +163,34 @@ class AutostartFile:
+         os.chdir(here)
+ 
+ def show_help():
+-    print "Usage:", ME, "[OPTION]... [ENVIRONMENT]..."
+-    print
+-    print "This tool will run xdg autostart .desktop files"
+-    print
+-    print "OPTIONS"
+-    print "  --list        Show a list of the files which would be run"
+-    print "                Files which would be run are marked with an asterix"
+-    print "                symbol [*].  For files which would not be run,"
+-    print "                information is given for why they are excluded"
+-    print "  --help        Show this help and exit"
+-    print "  --version     Show version and copyright information"
+-    print
+-    print "ENVIRONMENT specifies a list of environments for which to run autostart"
+-    print "applications.  If none are specified, only applications which do not "
+-    print "limit themselves to certain environments will be run."
+-    print
+-    print "ENVIRONMENT can be one or more of:"
+-    print "  GNOME         Gnome Desktop"
+-    print "  KDE           KDE Desktop"
+-    print "  ROX           ROX Desktop"
+-    print "  XFCE          XFCE Desktop"
+-    print "  Old           Legacy systems"
+-    print
++    print("Usage:", ME, "[OPTION]... [ENVIRONMENT]...")
++    print()
++    print("This tool will run xdg autostart .desktop files")
++    print()
++    print("OPTIONS")
++    print("  --list        Show a list of the files which would be run")
++    print("                Files which would be run are marked with an asterix")
++    print("                symbol [*].  For files which would not be run,")
++    print("                information is given for why they are excluded")
++    print("  --help        Show this help and exit")
++    print("  --version     Show version and copyright information")
++    print()
++    print("ENVIRONMENT specifies a list of environments for which to run autostart")
++    print("applications.  If none are specified, only applications which do not ")
++    print("limit themselves to certain environments will be run.")
++    print()
++    print("ENVIRONMENT can be one or more of:")
++    print("  GNOME         Gnome Desktop")
++    print("  KDE           KDE Desktop")
++    print("  ROX           ROX Desktop")
++    print("  XFCE          XFCE Desktop")
++    print("  Old           Legacy systems")
++    print()
+ 
+ def show_version():
+-    print ME, VERSION
+-    print "Copyright (c) 2008        Dana Jansens"
+-    print
++    print(ME, VERSION)
++    print("Copyright (c) 2008        Dana Jansens")
++    print()
+ 
+ if __name__ == "__main__":
+         sys.exit(main())
diff --git a/gnu/packages/patches/python2-parameterized-docstring-test.patch b/gnu/packages/patches/python2-parameterized-docstring-test.patch
deleted file mode 100644
index 14691e1904..0000000000
--- a/gnu/packages/patches/python2-parameterized-docstring-test.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Skip unicode docstring test, required when running on Python 2.
-
-See <https://github.com/wolever/parameterized/issues/44>.
-
---- a/parameterized/test.py
-+++ b/parameterized/test.py
-@@ -284,11 +284,6 @@
-             "        More" %(foo, )
-         )
- 
--    @parameterized.expand([param("foo")])
--    def test_unicode_docstring(self, foo):
--        u"""Döcumentation."""
--        self._assert_docstring(u"Döcumentation [with foo=%r]." %(foo, ))
--
-     @parameterized.expand([param("foo", )])
-     def test_default_values_get_correct_value(self, foo, bar=12):
-         """Documentation"""
diff --git a/gnu/packages/patches/python2-pygobject-2-deprecation.patch b/gnu/packages/patches/python2-pygobject-2-deprecation.patch
deleted file mode 100644
index 6a08e56351..0000000000
--- a/gnu/packages/patches/python2-pygobject-2-deprecation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From e5df32ffbf37481dbb6a70c4d4e7b7b9778c5549 Mon Sep 17 00:00:00 2001
-From: "John (J5) Palmieri" <johnp@redhat.com>
-Date: Sat, 13 Aug 2011 04:13:28 -0400
-Subject: remove references to deprecated GI_INFO_TYPE_ERROR_DOMAIN
-
-
-diff --git a/gi/pygi-info.c b/gi/pygi-info.c
-index 8729e25..007b609 100644
---- a/gi/pygi-info.c
-+++ b/gi/pygi-info.c
-@@ -165,9 +165,6 @@ _pygi_info_new (GIBaseInfo *info)
-         case GI_INFO_TYPE_CONSTANT:
-             type = &PyGIConstantInfo_Type;
-             break;
--        case GI_INFO_TYPE_ERROR_DOMAIN:
--            type = &PyGIErrorDomainInfo_Type;
--            break;
-         case GI_INFO_TYPE_UNION:
-             type = &PyGIUnionInfo_Type;
-             break;
-@@ -484,7 +481,6 @@ _pygi_g_type_info_size (GITypeInfo *type_info)
-                 case GI_INFO_TYPE_INVALID:
-                 case GI_INFO_TYPE_FUNCTION:
-                 case GI_INFO_TYPE_CONSTANT:
--                case GI_INFO_TYPE_ERROR_DOMAIN:
-                 case GI_INFO_TYPE_VALUE:
-                 case GI_INFO_TYPE_SIGNAL:
-                 case GI_INFO_TYPE_PROPERTY:
-@@ -863,7 +859,6 @@ pygi_g_struct_info_is_simple (GIStructInfo *struct_info)
-                     case GI_INFO_TYPE_INVALID:
-                     case GI_INFO_TYPE_FUNCTION:
-                     case GI_INFO_TYPE_CONSTANT:
--                    case GI_INFO_TYPE_ERROR_DOMAIN:
-                     case GI_INFO_TYPE_VALUE:
-                     case GI_INFO_TYPE_SIGNAL:
-                     case GI_INFO_TYPE_PROPERTY:
--- 
-cgit v0.10.1
-
diff --git a/gnu/packages/patches/python2-subprocess32-disable-input-test.patch b/gnu/packages/patches/python2-subprocess32-disable-input-test.patch
deleted file mode 100644
index 05b4eef1ba..0000000000
--- a/gnu/packages/patches/python2-subprocess32-disable-input-test.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-This test tries to send a KeyboardInterrupt, which does
-not work in the build environment.
-
---- a/test_subprocess32.py	2017-03-06 22:21:49.334045485 +0100
-+++ b/test_subprocess32.py	2017-03-06 22:22:02.490439949 +0100
-@@ -1299,12 +1299,6 @@
-         getattr(p, method)(*args)
-         return p
- 
--    def test_send_signal(self):
--        p = self._kill_process('send_signal', signal.SIGINT)
--        _, stderr = p.communicate()
--        self.assertIn('KeyboardInterrupt', stderr)
--        self.assertNotEqual(p.wait(), 0)
--
-     def test_kill(self):
-         p = self._kill_process('kill')
-         _, stderr = p.communicate()
diff --git a/gnu/packages/patches/rapicorn-isnan.patch b/gnu/packages/patches/rapicorn-isnan.patch
deleted file mode 100644
index b0e7819e64..0000000000
--- a/gnu/packages/patches/rapicorn-isnan.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From e0c8341b3e4e13778bcde00d477e461ea8e94306 Mon Sep 17 00:00:00 2001
-From: Stefan Westerfeld <stefan@space.twc.de>
-Date: Fri, 22 Apr 2016 18:03:37 +0200
-Subject: [PATCH 031/176] RCORE: compile fixes for KUbuntu 16.04/gcc
- 5.3.1-14ubuntu2
-
-Rapicorn uses isnan(...) and isinf(...) from cmath.h, however on KUbuntu 16.04
-it should use std::isnan(...) and std::isinf(...) instead. Patch below.
-
-Acked-by: Tim Janik <timj@gnu.org>
----
- rcore/strings.cc          | 10 +++++-----
- rcore/tests/benchrcore.cc |  4 ++--
- rcore/tests/strings.cc    |  4 ++--
- 3 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/rcore/strings.cc b/rcore/strings.cc
-index d5b0216..8b3bc3f 100644
---- a/rcore/strings.cc
-+++ b/rcore/strings.cc
-@@ -437,7 +437,7 @@ static long double
- libc_strtold (const char *nptr, char **endptr)
- {
-   const long double result = strtold (nptr, endptr);
--  if (isnan (result) && std::signbit (result) == 0)
-+  if (std::isnan (result) && std::signbit (result) == 0)
-     {
-       const char *p = nptr;
-       while (isspace (*p))
-@@ -500,9 +500,9 @@ string_to_double (const char *dblstring, const char **endptr)
- String
- string_from_float (float value)
- {
--  if (isnan (value))
-+  if (std::isnan (value))
-     return std::signbit (value) ? "-NaN" : "+NaN";
--  if (isinf (value))
-+  if (std::isinf (value))
-     return std::signbit (value) ? "-Infinity" : "+Infinity";
-   return string_format ("%.7g", value);
- }
-@@ -511,9 +511,9 @@ string_from_float (float value)
- String
- string_from_double (double value)
- {
--  if (isnan (value))
-+  if (std::isnan (value))
-     return std::signbit (value) ? "-NaN" : "+NaN";
--  if (isinf (value))
-+  if (std::isinf (value))
-     return std::signbit (value) ? "-Infinity" : "+Infinity";
-   return string_format ("%.17g", value);
- }
-diff --git a/rcore/tests/benchrcore.cc b/rcore/tests/benchrcore.cc
-index 3899a08..12fde16 100644
---- a/rcore/tests/benchrcore.cc
-+++ b/rcore/tests/benchrcore.cc
-@@ -188,8 +188,8 @@ test_random_numbers()
-       const double rf = random_frange (989617512, 9876547656);
-       TASSERT (rf >= 989617512 && rf < 9876547656);
-     }
--  TASSERT (isnan (random_frange (NAN, 1)));
--  TASSERT (isnan (random_frange (0, NAN)));
-+  TASSERT (std::isnan (random_frange (NAN, 1)));
-+  TASSERT (std::isnan (random_frange (0, NAN)));
- #if 0 // example penalty paid in random_int64()
-   size_t i, j = 0;
-   for (i = 0; i < 100; i++)
-diff --git a/rcore/tests/strings.cc b/rcore/tests/strings.cc
-index 468a6e6..dae3e3d 100644
---- a/rcore/tests/strings.cc
-+++ b/rcore/tests/strings.cc
-@@ -311,9 +311,9 @@ string_conversions (void)
-   TCMP (string_to_double ("-0.5"), ==, -0.5);
-   double tfloat;
-   tfloat = string_to_double ("+NAN");
--  assert (isnan (tfloat) && std::signbit (tfloat) == 0);
-+  assert (std::isnan (tfloat) && std::signbit (tfloat) == 0);
-   tfloat = string_to_double ("-NAN");
--  assert (isnan (tfloat) && std::signbit (tfloat) == 1);
-+  assert (std::isnan (tfloat) && std::signbit (tfloat) == 1);
-   TCMP (string_capitalize ("fOO bar"), ==, "Foo Bar");
-   TCMP (string_capitalize ("foo BAR BAZ", 2), ==, "Foo Bar BAZ");
- }
--- 
-2.9.1
-
diff --git a/gnu/packages/patches/virtuoso-ose-remove-pre-built-jar-files.patch b/gnu/packages/patches/virtuoso-ose-remove-pre-built-jar-files.patch
new file mode 100644
index 0000000000..17413c71ae
--- /dev/null
+++ b/gnu/packages/patches/virtuoso-ose-remove-pre-built-jar-files.patch
@@ -0,0 +1,117 @@
+This patch disables build targets that contain pre-built Java archives that
+would be copied to the build's output.
+
+Patch by Roel Janssen <roel@gnu.org>
+*** a-virtuoso-opensource-7.2.7/binsrc/Makefile.am	1970-01-01 01:00:01.000000000 +0100
+--- b-virtuoso-opensource-7.2.7/binsrc/Makefile.am	2022-05-27 12:20:52.909135774 +0200
+***************
+*** 19,25 ****
+  #  
+  #  
+  
+! SUBDIRS = dav mono virtuoso tests rdf_mappers driver maildrop sqldoc hosting bpel fct tutorial conductor samples vsp ws sync vspx vad cached_resources virtodbc virtoledb virtuoso_sink xddl VirtuosoClient.Net oat isparql jena jena2 jena3 jena4 sesame sesame2 sesame3 sesame4 redland hibernate dbpedia rdb2rdf rdf4j
+  
+  
+  # ----------------------------------------------------------------------
+--- 19,25 ----
+  #  
+  #  
+  
+! SUBDIRS = dav mono virtuoso tests rdf_mappers driver maildrop sqldoc hosting bpel fct tutorial conductor samples vsp ws sync vspx vad cached_resources virtodbc virtoledb virtuoso_sink xddl VirtuosoClient.Net oat isparql redland dbpedia rdb2rdf
+  
+  
+  # ----------------------------------------------------------------------
+*** a-virtuoso-opensource-7.2.7/configure.ac	1970-01-01 01:00:01.000000000 +0100
+--- b-virtuoso-opensource-7.2.7/configure.ac	2022-05-27 12:27:51.879208018 +0200
+***************
+*** 57,64 ****
+  dnl	AM_INIT_AUTOMAKE([1.8])
+  dnl	AM_INIT_AUTOMAKE([1.9 tar-ustar])
+  dnl
+! AM_INIT_AUTOMAKE([1.9 tar-ustar])
+! 
+  AM_MAINTAINER_MODE
+  
+  
+--- 57,63 ----
+  dnl	AM_INIT_AUTOMAKE([1.8])
+  dnl	AM_INIT_AUTOMAKE([1.9 tar-ustar])
+  dnl
+! AM_INIT_AUTOMAKE([1.9 tar-ustar subdir-objects])
+  AM_MAINTAINER_MODE
+  
+  
+***************
+*** 3157,3163 ****
+  	binsrc/dbpedia/Makefile
+  	binsrc/driver/Makefile
+  	binsrc/fct/Makefile
+- 	binsrc/hibernate/Makefile
+  	binsrc/hosting/Makefile
+  	binsrc/hosting/mono/Makefile
+  	binsrc/hosting/mono/tests/Makefile
+--- 3156,3161 ----
+***************
+*** 3169,3184 ****
+  	binsrc/hosting/ruby/Makefile
+  	binsrc/hosting/shapefileio/Makefile
+  	binsrc/isparql/Makefile
+- 	binsrc/jena/Makefile
+- 	binsrc/jena2/Makefile
+- 	binsrc/jena3/Makefile
+- 	binsrc/jena4/Makefile
+  	binsrc/maildrop/Makefile
+  	binsrc/mono/Makefile
+  	binsrc/oat/Makefile
+  	binsrc/rdf_mappers/Makefile
+  	binsrc/rdb2rdf/Makefile
+- 	binsrc/rdf4j/Makefile
+  	binsrc/redland/Makefile
+  	binsrc/samples/demo/Makefile
+  	binsrc/samples/hslookup/Makefile
+--- 3167,3177 ----
+***************
+*** 3191,3200 ****
+  	binsrc/samples/webapp/Makefile
+  	binsrc/samples/xpath/Makefile
+  	binsrc/samples/xquery/Makefile
+- 	binsrc/sesame/Makefile
+- 	binsrc/sesame2/Makefile
+- 	binsrc/sesame3/Makefile
+- 	binsrc/sesame4/Makefile
+  	binsrc/sqldoc/Makefile
+  	binsrc/sync/Makefile
+  	binsrc/tests/biftest/Makefile
+--- 3184,3189 ----
+***************
+*** 3236,3245 ****
+  	docsrc/stylesheets/Makefile
+  	docsrc/xmlsource/Makefile
+  	libsrc/Dk/Makefile
+- 	libsrc/JDBCDriverType4/Makefile
+- 	libsrc/JDBCDriverType4/testsuite_4.0/Makefile
+- 	libsrc/JDBCDriverType4/virtuoso/jdbc/Makefile
+- 	libsrc/JDBCDriverType4/virtuoso/Makefile
+  	libsrc/langfunc/Makefile
+  	libsrc/odbcsdk/Makefile
+  	libsrc/plugin/Makefile
+--- 3225,3230 ----
+*** a-virtuoso-opensource-7.2.7/libsrc/Makefile.am	1970-01-01 01:00:01.000000000 +0100
+--- b-virtuoso-opensource-7.2.7/libsrc/Makefile.am	2022-05-27 12:30:12.658593011 +0200
+***************
+*** 19,25 ****
+  #  
+  #  
+  
+! SUBDIRS = util zlib odbcsdk Dk Thread langfunc Wi plugin Tidy Xml.new JDBCDriverType4
+  
+  noinst_HEADERS = Dk.h libutil.h
+  
+--- 19,25 ----
+  #  
+  #  
+  
+! SUBDIRS = util zlib odbcsdk Dk Thread langfunc Wi plugin Tidy Xml.new
+  
+  noinst_HEADERS = Dk.h libutil.h
+  
diff --git a/gnu/packages/patches/vtk-7-gcc-10-compat.patch b/gnu/packages/patches/vtk-7-gcc-10-compat.patch
new file mode 100644
index 0000000000..50f9f6cca3
--- /dev/null
+++ b/gnu/packages/patches/vtk-7-gcc-10-compat.patch
@@ -0,0 +1,14 @@
+Retrieved from
+https://sources.debian.org/src/vtk7/7.1.1%2Bdfsg2-10.1/debian/patches/.
+
+--- a/CMake/VTKGenerateExportHeader.cmake
++++ b/CMake/VTKGenerateExportHeader.cmake
+@@ -174,7 +174,7 @@
+     execute_process(COMMAND ${CMAKE_C_COMPILER} --version
+       OUTPUT_VARIABLE _gcc_version_info
+       ERROR_VARIABLE _gcc_version_info)
+-    string(REGEX MATCH "[3-9]\\.[0-9]\\.[0-9]*"
++    string(REGEX MATCH "[0-9]*\\.[0-9]\\.[0-9]*"
+       _gcc_version "${_gcc_version_info}")
+     # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
+     # patch level, handle this here:
diff --git a/gnu/packages/patches/vtk-7-hdf5-compat.patch b/gnu/packages/patches/vtk-7-hdf5-compat.patch
new file mode 100644
index 0000000000..1f3c0c7be4
--- /dev/null
+++ b/gnu/packages/patches/vtk-7-hdf5-compat.patch
@@ -0,0 +1,38 @@
+Description: The H5FD_class_t struct gained an extra member in 1.10
+Bug-Debian: https://bugs.debian.org/846372
+Author: Iain Lane <iain.lane@canonical.com>
+--- a/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfH5Driver.cxx
++++ b/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfH5Driver.cxx
+@@ -139,7 +139,11 @@
+ #if (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=8))
+ static haddr_t H5FD_dsm_get_eoa(const H5FD_t *_file, H5FD_mem_t type);
+ static herr_t H5FD_dsm_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
++#if (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=10))
++static haddr_t H5FD_dsm_get_eof(const H5FD_t *_file, H5FD_mem_t type);
++#else
+ static haddr_t H5FD_dsm_get_eof(const H5FD_t *_file);
++#endif
+ #else
+ static haddr_t H5FD_dsm_get_eoa(H5FD_t *_file);
+ static herr_t H5FD_dsm_set_eoa(H5FD_t *_file, haddr_t addr);
+@@ -155,6 +159,9 @@
+     "dsm",                      /*name          */
+     MAXADDR,                    /*maxaddr       */
+     H5F_CLOSE_WEAK,             /*fc_degree     */
++#if (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=8))
++    NULL,                       /* terminate    */
++#endif
+     NULL,                       /*sb_size       */
+     NULL,                       /*sb_encode     */
+     NULL,                       /*sb_decode     */
+@@ -687,7 +694,9 @@
+  *-------------------------------------------------------------------------
+  */
+ static haddr_t
+-#if (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=8))
++#if (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=10))
++H5FD_dsm_get_eof(const H5FD_t *_file, H5FD_mem_t type)
++#elif (H5_VERS_MAJOR>1)||((H5_VERS_MAJOR==1)&&(H5_VERS_MINOR>=8))
+ H5FD_dsm_get_eof(const H5FD_t *_file)
+ #else
+ H5FD_dsm_get_eof(H5FD_t *_file)
diff --git a/gnu/packages/patches/vtk-7-python-compat.patch b/gnu/packages/patches/vtk-7-python-compat.patch
new file mode 100644
index 0000000000..375624e4e2
--- /dev/null
+++ b/gnu/packages/patches/vtk-7-python-compat.patch
@@ -0,0 +1,16 @@
+Author: Gert Wollny <gewo@debian.org>
+Description: Work around compile bug with python 3.7.1
+Debian-Bug: https://bugs.debian.org/914347
+diff --git a/Wrapping/PythonCore/vtkPythonArgs.cxx b/Wrapping/PythonCore/vtkPythonArgs.cxx
+index 1b1e4b9..682f8b8 100644
+--- a/Wrapping/PythonCore/vtkPythonArgs.cxx
++++ b/Wrapping/PythonCore/vtkPythonArgs.cxx
+@@ -102,7 +102,7 @@ bool vtkPythonGetStringValue(PyObject *o, T *&a, const char *exctext)
+   else if (PyUnicode_Check(o))
+   {
+ #if PY_VERSION_HEX >= 0x03030000
+-    a = PyUnicode_AsUTF8(o);
++    a = const_cast<char*>(PyUnicode_AsUTF8(o));
+     return true;
+ #else
+     PyObject *s = _PyUnicode_AsDefaultEncodedString(o, NULL);
diff --git a/gnu/packages/patches/wicd-bitrate-none-fix.patch b/gnu/packages/patches/wicd-bitrate-none-fix.patch
deleted file mode 100644
index 1809b7217d..0000000000
--- a/gnu/packages/patches/wicd-bitrate-none-fix.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Fix copied from https://bugs.launchpad.net/wicd/+bug/1432423/comments/1
-
---- wicd-1.7.3/curses/netentry_curses.py	1969-12-31 19:00:00.000000000 -0500
-+++ wicd-1.7.3/curses/netentry_curses.py	2015-08-11 23:26:19.999999649 -0400
-@@ -538,11 +538,16 @@
-         self.bitrates = wireless.GetAvailableBitrates()
-         self.bitrates.append('auto')
-         self.bitrate_combo.set_list(self.bitrates)
-+
-+        # bitrate property is sometimes None
-+        chosen_bitrate = wireless.GetWirelessProperty(networkID, 'bitrate')
-+        if chosen_bitrate not in self.bitrates:
-+            chosen_bitrate = 'auto'
-+
-         self.bitrate_combo.set_focus(
--            self.bitrates.index(
--                wireless.GetWirelessProperty(networkID, 'bitrate')
--            )
-+            self.bitrates.index(chosen_bitrate)
-         )
-+
-         self.allow_lower_bitrates_chkbox.set_state(
-             to_bool(self.format_entry(networkID, 'allow_lower_bitrates'))
-         )
diff --git a/gnu/packages/patches/wicd-get-selected-profile-fix.patch b/gnu/packages/patches/wicd-get-selected-profile-fix.patch
deleted file mode 100644
index 3042a87308..0000000000
--- a/gnu/packages/patches/wicd-get-selected-profile-fix.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Fix copied from https://bugs.launchpad.net/wicd/+bug/1421918/comments/2
-
---- wicd-1.7.3/curses/wicd-curses.py	2014-12-21 16:57:33 +0000
-+++ wicd-1.7.3/curses/wicd-curses.py	2015-02-24 23:41:01 +0000
-@@ -532,7 +532,10 @@
-     def get_selected_profile(self):
-         """Get the selected wired profile"""
-         loc = self.get_focus()[1]
--        return self.theList[loc]
-+        if len(self.theList) > loc:
-+            return self.theList[loc]
-+        else:
-+            return self.theList[-1]
- 
- 
- class AdHocDialog(Dialog2):
diff --git a/gnu/packages/patches/wicd-urwid-1.3.patch b/gnu/packages/patches/wicd-urwid-1.3.patch
deleted file mode 100644
index 1dc47f869b..0000000000
--- a/gnu/packages/patches/wicd-urwid-1.3.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Update the wicd-curses client to work with urwid-1.3.  Based on a patch from:
-http://technik.blogbasis.net/wicd-curses-fix-fuer-attributeerror-screen-object-no-attribute-get_input_nonblocking-04-12-2014
-
---- wicd-1.7.3/curses/wicd-curses.py.orig	2014-12-21 14:40:46.000000000 -0500
-+++ wicd-1.7.3/curses/wicd-curses.py	2015-02-05 23:41:17.530901204 -0500
-@@ -1153,9 +1153,10 @@
-         if not ui._started:
-             return False
- 
--        input_data = ui.get_input_nonblocking()
-+        ui.set_input_timeouts(max_wait=0)
-+        input_data = ui.get_input()
-         # Resolve any "alarms" in the waiting
--        self.handle_keys(input_data[1])
-+        self.handle_keys(input_data)
- 
-         # Update the screen
-         canvas = self.frame.render((self.size), True)
diff --git a/gnu/packages/patches/wicd-wpa2-ttls.patch b/gnu/packages/patches/wicd-wpa2-ttls.patch
deleted file mode 100644
index 9d80ee7ed2..0000000000
--- a/gnu/packages/patches/wicd-wpa2-ttls.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Add a template for WPA2-TTLS, which is notably used by Eduroam.
-
---- a/encryption/templates/active
-+++ b/encryption/templates/active
-@@ -4,6 +4,7 @@ wpa-psk
- wpa-psk-hex
- wpa2-leap
- wpa2-peap
-+wpa2-ttls
- wep-hex
- wep-passphrase
- wep-shared
-diff --git a/encryption/templates/wpa2-ttls b/encryption/templates/wpa2-ttls
-new file mode 100644
-index 0000000..4f66a1e
---- /dev/null
-+++ b/encryption/templates/wpa2-ttls
-@@ -0,0 +1,20 @@
-+name = WPA2-TTLS (used notably by Eduroam)
-+author = various contributors
-+version = 1
-+require identity *Identity anonymous_identity *Anonymous_identity password *Password ca_cert *Path_to_CA_Cert
-+protected password *Password
-+-----
-+ctrl_interface=/var/run/wpa_supplicant
-+network={
-+        ssid="$_ESSID"
-+        scan_ssid=$_SCAN
-+        proto=WPA2
-+        key_mgmt=WPA-EAP
-+        group=CCMP TKIP
-+        eap=TTLS
-+        identity="$_IDENTITY"
-+        password="$_PASSWORD"
-+        anonymous_identity="$_ANONYMOUS_IDENTITY"
-+        ca_cert="$_CA_CERT"
-+        phase2="auth=PAP"
-+}