summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/ada.scm10
-rw-r--r--gnu/packages/admin.scm46
-rw-r--r--gnu/packages/adns.scm31
-rw-r--r--gnu/packages/aidc.scm36
-rw-r--r--gnu/packages/algebra.scm10
-rw-r--r--gnu/packages/android.scm9
-rw-r--r--gnu/packages/assembly.scm26
-rw-r--r--gnu/packages/audio.scm19
-rw-r--r--gnu/packages/autotools.scm44
-rw-r--r--gnu/packages/aux-files/guile-launcher.c7
-rw-r--r--gnu/packages/aux-files/python/sanity-check.py92
-rw-r--r--gnu/packages/aux-files/python/sitecustomize.py41
-rw-r--r--gnu/packages/avahi.scm2
-rw-r--r--gnu/packages/backup.scm8
-rw-r--r--gnu/packages/base.scm274
-rw-r--r--gnu/packages/bash.scm38
-rw-r--r--gnu/packages/bdw-gc.scm21
-rw-r--r--gnu/packages/benchmark.scm2
-rw-r--r--gnu/packages/bioinformatics.scm167
-rw-r--r--gnu/packages/bison.scm17
-rw-r--r--gnu/packages/boost.scm36
-rw-r--r--gnu/packages/bootstrap.scm157
-rw-r--r--gnu/packages/build-tools.scm48
-rw-r--r--gnu/packages/calendar.scm4
-rw-r--r--gnu/packages/cdrom.scm2
-rw-r--r--gnu/packages/certs.scm123
-rw-r--r--gnu/packages/check.scm333
-rw-r--r--gnu/packages/chez.scm20
-rw-r--r--gnu/packages/ci.scm2
-rw-r--r--gnu/packages/cmake.scm184
-rw-r--r--gnu/packages/commencement.scm402
-rw-r--r--gnu/packages/compression.scm203
-rw-r--r--gnu/packages/connman.scm2
-rw-r--r--gnu/packages/cpio.scm10
-rw-r--r--gnu/packages/crates-io.scm5
-rw-r--r--gnu/packages/cross-base.scm59
-rw-r--r--gnu/packages/crypto.scm6
-rw-r--r--gnu/packages/cups.scm324
-rw-r--r--gnu/packages/curl.scm39
-rw-r--r--gnu/packages/databases.scm35
-rw-r--r--gnu/packages/datastructures.scm2
-rw-r--r--gnu/packages/dbm.scm14
-rw-r--r--gnu/packages/debug.scm4
-rw-r--r--gnu/packages/display-managers.scm2
-rw-r--r--gnu/packages/django.scm81
-rw-r--r--gnu/packages/docbook.scm127
-rw-r--r--gnu/packages/documentation.scm14
-rw-r--r--gnu/packages/ebook.scm6
-rw-r--r--gnu/packages/ed.scm4
-rw-r--r--gnu/packages/education.scm2
-rw-r--r--gnu/packages/elf.scm49
-rw-r--r--gnu/packages/emacs-xyz.scm10
-rw-r--r--gnu/packages/emacs.scm8
-rw-r--r--gnu/packages/emulators.scm19
-rw-r--r--gnu/packages/engineering.scm14
-rw-r--r--gnu/packages/file.scm5
-rw-r--r--gnu/packages/fontutils.scm180
-rw-r--r--gnu/packages/freedesktop.scm70
-rw-r--r--gnu/packages/game-development.scm5
-rw-r--r--gnu/packages/games.scm40
-rw-r--r--gnu/packages/gawk.scm14
-rw-r--r--gnu/packages/gcc.scm176
-rw-r--r--gnu/packages/gd.scm20
-rw-r--r--gnu/packages/gdb.scm15
-rw-r--r--gnu/packages/gettext.scm23
-rw-r--r--gnu/packages/ghostscript.scm20
-rw-r--r--gnu/packages/gimp.scm10
-rw-r--r--gnu/packages/gl.scm116
-rw-r--r--gnu/packages/glib.scm712
-rw-r--r--gnu/packages/gnome-xyz.scm2
-rw-r--r--gnu/packages/gnome.scm440
-rw-r--r--gnu/packages/gnupg.scm64
-rw-r--r--gnu/packages/gnuzilla.scm18
-rw-r--r--gnu/packages/gpodder.scm3
-rw-r--r--gnu/packages/gps.scm2
-rw-r--r--gnu/packages/graphviz.scm20
-rw-r--r--gnu/packages/gtk.scm1441
-rw-r--r--gnu/packages/guile-xyz.scm4
-rw-r--r--gnu/packages/guile.scm199
-rw-r--r--gnu/packages/hurd.scm10
-rw-r--r--gnu/packages/ibus.scm109
-rw-r--r--gnu/packages/icu4c.scm8
-rw-r--r--gnu/packages/image.scm92
-rw-r--r--gnu/packages/inkscape.scm4
-rw-r--r--gnu/packages/java.scm12
-rw-r--r--gnu/packages/jemalloc.scm17
-rw-r--r--gnu/packages/kerberos.scm24
-rw-r--r--gnu/packages/ld-wrapper.in3
-rw-r--r--gnu/packages/libevent.scm18
-rw-r--r--gnu/packages/libffi.scm62
-rw-r--r--gnu/packages/libidn.scm15
-rw-r--r--gnu/packages/libsigsegv.scm4
-rw-r--r--gnu/packages/linux.scm252
-rw-r--r--gnu/packages/lisp.scm8
-rw-r--r--gnu/packages/llvm.scm18
-rw-r--r--gnu/packages/lua.scm3
-rw-r--r--gnu/packages/machine-learning.scm47
-rw-r--r--gnu/packages/mail.scm5
-rw-r--r--gnu/packages/make-bootstrap.scm56
-rw-r--r--gnu/packages/man.scm27
-rw-r--r--gnu/packages/mastodon.scm2
-rw-r--r--gnu/packages/mate.scm5
-rw-r--r--gnu/packages/maths.scm169
-rw-r--r--gnu/packages/mes.scm25
-rw-r--r--gnu/packages/messaging.scm2
-rw-r--r--gnu/packages/mpd.scm6
-rw-r--r--gnu/packages/multiprecision.scm12
-rw-r--r--gnu/packages/music.scm20
-rw-r--r--gnu/packages/nettle.scm30
-rw-r--r--gnu/packages/networking.scm11
-rw-r--r--gnu/packages/ninja.scm10
-rw-r--r--gnu/packages/nss.scm80
-rw-r--r--gnu/packages/ocaml.scm5
-rw-r--r--gnu/packages/onc-rpc.scm20
-rw-r--r--gnu/packages/openldap.scm68
-rw-r--r--gnu/packages/password-utils.scm4
-rw-r--r--gnu/packages/patches/atlas-gfortran-compat.patch37
-rw-r--r--gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch22
-rw-r--r--gnu/packages/patches/binutils-libiberty-endianness-bug.patch36
-rw-r--r--gnu/packages/patches/coreutils-gnulib-tests.patch45
-rw-r--r--gnu/packages/patches/cups-CVE-2020-10001.patch47
-rw-r--r--gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch64
-rw-r--r--gnu/packages/patches/curl-use-ssl-cert-env.patch4
-rw-r--r--gnu/packages/patches/dbus-CVE-2020-12049.patch58
-rw-r--r--gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch11
-rw-r--r--gnu/packages/patches/docbook-xsl-support-old-url.patch17
-rw-r--r--gnu/packages/patches/doxygen-1.8.17-runtests.patch73
-rw-r--r--gnu/packages/patches/doxygen-test.patch60
-rw-r--r--gnu/packages/patches/findutils-test-rwlock-threads.patch38
-rw-r--r--gnu/packages/patches/fontconfig-cache-ignore-mtime.patch15
-rw-r--r--gnu/packages/patches/fontconfig-hurd-path-max.patch17
-rw-r--r--gnu/packages/patches/freeglut-gcc-compat.patch53
-rw-r--r--gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch21
-rw-r--r--gnu/packages/patches/gcc-10-cross-environment-variables.patch51
-rw-r--r--gnu/packages/patches/gcc-cross-gxx-include-dir.patch73
-rw-r--r--gnu/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch179
-rw-r--r--gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch53
-rw-r--r--gnu/packages/patches/ghostscript-CVE-2020-15900.patch36
-rw-r--r--gnu/packages/patches/ghostscript-freetype-compat.patch35
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27218.patch132
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-01.patch176
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-02.patch264
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-03.patch136
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-04.patch308
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-05.patch47
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-06.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-07.patch118
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-08.patch94
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-09.patch98
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-10.patch52
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-11.patch57
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-12.patch30
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-13.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-14.patch32
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-15.patch95
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-16.patch43
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-17.patch37
-rw-r--r--gnu/packages/patches/glib-CVE-2021-27219-18.patch232
-rw-r--r--gnu/packages/patches/glib-CVE-2021-28153.patch283
-rw-r--r--gnu/packages/patches/glib-skip-failing-test.patch27
-rw-r--r--gnu/packages/patches/glib-tests-timer.patch15
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch38
-rw-r--r--gnu/packages/patches/glibc-cross-objcopy.patch159
-rw-r--r--gnu/packages/patches/glibc-cross-objdump.patch159
-rw-r--r--gnu/packages/patches/glibc-dl-cache.patch140
-rw-r--r--gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch19
-rw-r--r--gnu/packages/patches/glibc-hurd-signal-sa-siginfo.patch637
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20231.patch62
-rw-r--r--gnu/packages/patches/gnutls-CVE-2021-20232.patch60
-rw-r--r--gnu/packages/patches/graphviz-CVE-2020-18032.patch49
-rw-r--r--gnu/packages/patches/guile-ssh-fix-test-suite.patch217
-rw-r--r--gnu/packages/patches/guile-ssh-read-error.patch18
-rw-r--r--gnu/packages/patches/icu4c-CVE-2020-10531.patch127
-rw-r--r--gnu/packages/patches/inetutils-hurd.patch583
-rw-r--r--gnu/packages/patches/jsoncpp-fix-inverted-case.patch22
-rw-r--r--gnu/packages/patches/lcms-CVE-2018-16435.patch171
-rw-r--r--gnu/packages/patches/libtirpc-hurd-client.patch50
-rw-r--r--gnu/packages/patches/libxt-guix-search-paths.patch13
-rw-r--r--gnu/packages/patches/mariadb-cmake-compat.patch17
-rw-r--r--gnu/packages/patches/meson-for-build-rpath.patch24
-rw-r--r--gnu/packages/patches/mit-krb5-hurd.patch15
-rw-r--r--gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch29
-rw-r--r--gnu/packages/patches/nss-getcwd-nonnull.patch30
-rw-r--r--gnu/packages/patches/perl-deterministic-ordering.patch29
-rw-r--r--gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch33
-rw-r--r--gnu/packages/patches/perl-no-sys-dirs.patch99
-rw-r--r--gnu/packages/patches/python-2.7-no-static-lib.patch70
-rw-r--r--gnu/packages/patches/python-3-fix-tests.patch194
-rw-r--r--gnu/packages/patches/python-3-hurd-configure.patch27
-rw-r--r--gnu/packages/patches/python-3-no-static-lib.patch75
-rw-r--r--gnu/packages/patches/python-3.8-CVE-2021-3177.patch194
-rw-r--r--gnu/packages/patches/python-3.8-fix-tests.patch42
-rw-r--r--gnu/packages/patches/python-3.9-fix-tests.patch370
-rw-r--r--gnu/packages/patches/python-babel-fix-parse-future-test.patch68
-rw-r--r--gnu/packages/patches/python-libxml2-python39-compat.patch94
-rw-r--r--gnu/packages/patches/python-typing-inspect-fix.patch38
-rw-r--r--gnu/packages/patches/rust-1.19-mrustc.patch28
-rw-r--r--gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch111
-rw-r--r--gnu/packages/patches/rust-1.30-gdb-llvm.patch89
-rw-r--r--gnu/packages/patches/rust-1.45-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-1.48-linker-locale.patch14
-rw-r--r--gnu/packages/patches/rust-bootstrap-stage0-test.patch55
-rw-r--r--gnu/packages/patches/tcl-fix-cross-compilation.patch39
-rw-r--r--gnu/packages/patches/tcsh-fix-autotest.patch11
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.83.patch52
-rw-r--r--gnu/packages/patches/texlive-bin-poppler-0.86.patch17
-rw-r--r--gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch68
-rw-r--r--gnu/packages/patches/zziplib-CVE-2018-16548.patch49
-rw-r--r--gnu/packages/patchutils.scm2
-rw-r--r--gnu/packages/pdf.scm7
-rw-r--r--gnu/packages/perl-check.scm4
-rw-r--r--gnu/packages/perl.scm58
-rw-r--r--gnu/packages/photo.scm8
-rw-r--r--gnu/packages/plotutils.scm6
-rw-r--r--gnu/packages/presentation.scm4
-rw-r--r--gnu/packages/protobuf.scm15
-rw-r--r--gnu/packages/pulseaudio.scm8
-rw-r--r--gnu/packages/python-build.scm14
-rw-r--r--gnu/packages/python-check.scm62
-rw-r--r--gnu/packages/python-crypto.scm27
-rw-r--r--gnu/packages/python-web.scm67
-rw-r--r--gnu/packages/python-xyz.scm771
-rw-r--r--gnu/packages/python.scm566
-rw-r--r--gnu/packages/radio.scm12
-rw-r--r--gnu/packages/readline.scm19
-rw-r--r--gnu/packages/ruby.scm56
-rw-r--r--gnu/packages/rust.scm1712
-rw-r--r--gnu/packages/scheme.scm6
-rw-r--r--gnu/packages/screen.scm2
-rw-r--r--gnu/packages/sdl.scm4
-rw-r--r--gnu/packages/security-token.scm5
-rw-r--r--gnu/packages/selinux.scm69
-rw-r--r--gnu/packages/sequoia.scm2
-rw-r--r--gnu/packages/serialization.scm6
-rw-r--r--gnu/packages/shells.scm18
-rw-r--r--gnu/packages/simulation.scm36
-rw-r--r--gnu/packages/solidity.scm92
-rw-r--r--gnu/packages/sphinx.scm4
-rw-r--r--gnu/packages/spice.scm12
-rw-r--r--gnu/packages/sqlite.scm72
-rw-r--r--gnu/packages/ssh.scm15
-rw-r--r--gnu/packages/statistics.scm23
-rw-r--r--gnu/packages/storage.scm7
-rw-r--r--gnu/packages/swig.scm16
-rw-r--r--gnu/packages/syndication.scm4
-rw-r--r--gnu/packages/task-management.scm4
-rw-r--r--gnu/packages/tcl.scm59
-rw-r--r--gnu/packages/terminals.scm3
-rw-r--r--gnu/packages/tex.scm3009
-rw-r--r--gnu/packages/texinfo.scm27
-rw-r--r--gnu/packages/text-editors.scm3
-rw-r--r--gnu/packages/tls.scm417
-rw-r--r--gnu/packages/tmux.scm4
-rw-r--r--gnu/packages/valgrind.scm4
-rw-r--r--gnu/packages/version-control.scm14
-rw-r--r--gnu/packages/video.scm12
-rw-r--r--gnu/packages/virtualization.scm88
-rw-r--r--gnu/packages/vpn.scm7
-rw-r--r--gnu/packages/w3m.scm13
-rw-r--r--gnu/packages/web.scm23
-rw-r--r--gnu/packages/wget.scm4
-rw-r--r--gnu/packages/wicd.scm5
-rw-r--r--gnu/packages/wm.scm16
-rw-r--r--gnu/packages/xdisorg.scm40
-rw-r--r--gnu/packages/xfce.scm2
-rw-r--r--gnu/packages/xiph.scm5
-rw-r--r--gnu/packages/xml.scm91
-rw-r--r--gnu/packages/xorg.scm93
268 files changed, 9838 insertions, 13994 deletions
diff --git a/gnu/packages/ada.scm b/gnu/packages/ada.scm
index 240e13f3ef..8f8b68d80d 100644
--- a/gnu/packages/ada.scm
+++ b/gnu/packages/ada.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,17 +49,20 @@
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (supported-systems (list "i686-linux" "x86_64-linux"
-                             "armhf-linux" "aarch64-linux"))
+                             "armhf-linux" "aarch64-linux"
+                             "powerpc-linux"))
     (outputs (list "out" "debug"))
     (arguments
      `(#:system
        ,@(match (%current-system)
            ;; This package predates 64-bit PCs: a ‘64-bit’ adaexec segfaults.
            ;; Force a 32-bit build targeting a similar architecture.
-           ((or "armhf-linux" "aarch64-linux")
+           ("aarch64-linux"
             `("armhf-linux"))
+           ("x86_64-linux"
+            `("i686-linux"))
            (_
-            `("i686-linux")))
+            (list (%current-system))))
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
          (list (string-append
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index f5c5be1901..9d1654ef91 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2015, 2016, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2020, 2021 Eric Bavier <bavier@posteo.net>
@@ -35,6 +35,7 @@
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
@@ -271,7 +272,14 @@ and provides a \"top-like\" mode (monitoring).")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))))
+                "0x9zr0x3xvk4qkb6jnda451d5iyrl06cz1bjzjsm0lxvjj3fabyk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Build with -O1 to work around <https://bugs.gnu.org/48368>.
+                  (substitute* "Makefile.in"
+                    (("compile --target")
+                     "compile -O1 --target"))))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--localstatedir=/var")
@@ -647,7 +655,8 @@ console.")
      `(("ncurses" ,ncurses)))
     (native-inputs
      `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
+       ("automake" ,automake)
+       ("python" ,python-minimal-wrapper)))     ; for scripts/MakeHeader.py
     (home-page "https://htop.dev")
     (synopsis "Interactive process viewer")
     (description
@@ -748,15 +757,14 @@ re-executing them as necessary.")
 (define-public inetutils
   (package
     (name "inetutils")
-    (version "1.9.4")
+    (version "2.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/inetutils/inetutils-"
                                  version ".tar.gz"))
-             (patches (search-patches "inetutils-hurd.patch"))
              (sha256
               (base32
-               "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy"))))
+               "0j1nb69bhg29cm4xkqqjh2ln1zqcj2lnpm92v638lpwrs11dypxl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--localstatedir=/var"
@@ -777,10 +785,17 @@ re-executing them as necessary.")
                                    "--disable-uucpd"
                                    "--disable-whois")
                                  '()))
+       ;; Make sure that canonical "coreutils" package is not referred.
+       #:make-flags
+       (list (string-append "CPPFLAGS=-DPATHDEF_CP=\\\""
+                            (assoc-ref %build-inputs "coreutils*")
+                            "/bin/cp\\\""))
        ;; On some systems, 'libls.sh' may fail with an error such as:
        ;; "Failed to tell switch -a apart from -A".
        #:parallel-tests? #f))
-    (inputs `(("ncurses" ,ncurses)
+    (inputs `(("coreutils*" ,coreutils)
+              ("shadow" ,shadow)    ;for login (used in telnetd and rlogind)
+              ("ncurses" ,ncurses)
               ("readline" ,readline)))        ;for 'ftp'
     (native-inputs (if (member (%current-system)
                                (package-supported-systems net-tools))
@@ -922,6 +937,11 @@ to allow automatic login and starting any app.")
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
+       ;; This package consists solely of architecture-independent
+       ;; tables. Cross-compilation is pointless! Make sure we'll
+       ;; always get the same derivation.
+       #:target #f
+       #:allowed-references ()
        #:builder (begin
                    (use-modules (guix build utils)
                                 (srfi srfi-26))
@@ -1671,10 +1691,7 @@ system administrator.")
        ;; the chroot's /etc/passwd doesn't have it.  Turn off the tests.
        #:tests? #f))
     (native-inputs
-     ;; XXX TODO: Remove on next rebuild cycle.
-     (if (hurd-target?)
-         '()
-         `(("groff" ,groff))))
+     `(("groff" ,groff)))
     (inputs
      `(("coreutils" ,coreutils)
        ,@(if (hurd-target?)
@@ -2915,7 +2932,7 @@ done with the @code{auditctl} utility.")
                  "install-nping")
                (make ndiff "install-ndiff")
                (wrap-program (string-append ndiff "/bin/ndiff")
-                 `("PYTHONPATH" prefix
+                 `("GUIX_PYTHONPATH" prefix
                    (,(python-path ndiff)))))
              #t))
          ;; These are the tests that do not require network access.
@@ -2971,7 +2988,7 @@ results (ndiff), and a packet generation and response analysis tool (nping).")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/dstat")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("python" ,python-wrapper)
@@ -4071,8 +4088,7 @@ cache of unix and unix-like systems.")
        (modify-phases %standard-phases
          (add-before 'build 'setenv-PATH
            (lambda _
-             (setenv "PYTHONPATH" (string-append "lib:" (getenv "PYTHONPATH")))
-             #t)))))
+             (setenv "PYTHONPATH" "lib"))))))
     (propagated-inputs
      `(("python-pygobject" ,python-pygobject)
        ("python-pyudev" ,python-pyudev)
diff --git a/gnu/packages/adns.scm b/gnu/packages/adns.scm
index b36ec18462..1b71d0107c 100644
--- a/gnu/packages/adns.scm
+++ b/gnu/packages/adns.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,7 +65,7 @@ scripts.")
 (define-public c-ares
   (package
     (name "c-ares")
-    (version "1.16.0")
+    (version "1.17.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -73,9 +73,15 @@ scripts.")
                     ".tar.gz"))
               (sha256
                (base32
-                "129sm0wzij0mp8vdv68v18hnykcjb6ivi66wnqnnw598q7bql1fy"))))
-    (replacement c-ares/fixed)
+                "0h7wjfnk2092glqcp9mqaax7xx0s13m501z1gi0gsjl2vvvd0gfp"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'filter-live-tests
+           (lambda _
+             ;; Filter tests that require internet access.
+             (setenv "GTEST_FILTER" "-*.Live*:*.FamilyV4*"))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "https://c-ares.haxx.se/")
@@ -88,23 +94,6 @@ The primary examples of such applications are servers which communicate with
 multiple clients and programs with graphical user interfaces.")
     (license (x11-style "https://c-ares.haxx.se/license.html"))))
 
-(define-public c-ares/fixed
-  (package
-    (inherit c-ares)
-    (name "c-ares")
-    (version "1.17.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://c-ares.haxx.se/download/" name "-" version
-                    ".tar.gz"))
-              (sha256
-               (base32
-                "0h7wjfnk2092glqcp9mqaax7xx0s13m501z1gi0gsjl2vvvd0gfp"))))
-    (arguments
-     `(;; FIXME: Some tests require network access
-       #:tests? #f))))
-
 ;; gRPC requires a c-ares built with CMake in order to get the .cmake modules.
 ;; We can not build c-ares itself with CMake because that would introduce a
 ;; circular dependency through nghttp2.
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 3db631d92e..21fc1957a2 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -30,9 +30,11 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
@@ -169,16 +171,18 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
 (define-public zbar
   (package
     (name "zbar")
-    (version "0.23")
+    (version "0.23.90")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://linuxtv.org/downloads/zbar/zbar-"
-                           version
-                           ".tar.bz2"))
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mchehab/zbar")
+         (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0bmd93a15qpgbsq9c9j33qms18rdrgz6gbc48zi6z9w5pvrvi7z9"))))
+         "0rf3i7lx0fqzxsngird6l4d4dnl612nr32rm8sib699qqx67px8n"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list "--with-gtk=auto"
@@ -187,17 +191,27 @@ C/C++ programs to use its capabilities without restrictions or overhead.")
                                               (assoc-ref %outputs "out")
                                               "/etc"))))
     (native-inputs
-     `(("glib" ,glib "bin")
-       ("pkg-config" ,pkg-config)))
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("gobject-introspection" ,gobject-introspection)
-       ("gtk+" ,gtk+)
+     `(("dbus" ,dbus)
        ("imagemagick" ,imagemagick)
        ("libjpeg" ,libjpeg-turbo)
+       ("perl" ,perl)
        ("python" ,python)
-       ("qtbase" ,qtbase-5)
        ("qtx11extras" ,qtx11extras)
        ("v4l-utils" ,v4l-utils)))
+    (propagated-inputs
+     ;; These are in 'requires' field of .pc files.
+     `(("glib" ,glib)
+       ("gtk+" ,gtk+)
+       ("qtbase" ,qtbase-5)))
     (synopsis "Bar code reader")
     (description
      "ZBar can read barcodes from various sources, such as video streams,
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 533b1f09e0..6e7ecdad05 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2019, 2021 Eric Bavier <bavier@posteo.net>
@@ -248,8 +248,8 @@ the real span of the lattice.")
                 "1cgwdpw8b797883z9y92ixxjkv72kiy65zsw2qqf5and1kbzgv41"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("texlive" ,(texlive-union
-                    (list texlive-amsfonts/patched)))))
+     `(("texlive" ,(texlive-updmap.cfg
+                    (list texlive-amsfonts)))))
     (inputs `(("gmp" ,gmp)
               ("libx11" ,libx11)
               ("perl" ,perl)
@@ -706,12 +706,14 @@ binary.")
        ("ed" ,ed)
        ("flex" ,flex)
        ("texinfo" ,texinfo)))
+    (inputs
+     `(("readline" ,readline)))
     (arguments
      '(#:configure-flags
        (list "--with-readline")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
+         (replace 'bootstrap
            (lambda _
              (invoke "autoreconf" "-vif"))))))
     (home-page "https://www.gnu.org/software/bc/")
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index eb538f6540..f09d8e9522 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2017, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020 Andreas Enge <andreas@enge.fr>
@@ -1026,13 +1026,6 @@ connected devices via ADB.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'enjarify-wrapper-inherit-pythonpath
-           ;; enjarify sets PYTHONPATH from a shell script, overwriting
-           ;; PYTHONPATH set from guix. Comment out this line.
-           (lambda _
-             (substitute* "enjarify.sh"
-               (("export PYTHONPATH") "# export PYTHONPATH"))
-             #t))
          (add-before 'check 'fixup-expected-test-results
            ;; Upstream adjusted this test in commit:
            ;; 3ae884a6485af82d300515813f537685b08dd800
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index 51c0572674..177ea0b74f 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Christopher Lemmer Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,14 +58,14 @@
 (define-public nasm
   (package
     (name "nasm")
-    (version "2.14.02")
+    (version "2.15.05")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.nasm.us/pub/nasm/releasebuilds/"
                                   version "/nasm-" version ".tar.xz"))
               (sha256
                (base32
-                "1xg8dfr49py15vbwk1rzcjc3zpqydmr49ahlijm56wlgj8zdwjp2"))))
+                "0gqand86b0r86k3h46dh560lykxmxqqywz5m55kgjfq7q4lngbrw"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)  ;for doc and test target
                      ("texinfo" ,texinfo)))
@@ -75,11 +76,10 @@
          (add-after 'unpack 'dont-build-ps-pdf-outputs
            (lambda _
              (substitute* "doc/Makefile.in"
-               (("html nasmdoc.txt nasmdoc.pdf")
+               (("html nasmdoc.txt nasmdoc.pdf \\$\\(XZFILES\\)")
                 "html nasmdoc.txt")
                (("\\$\\(INSTALL_DATA\\) nasmdoc.pdf")
-                "$(INSTALL_DATA)"))
-             #t))
+                "$(INSTALL_DATA)"))))
          (add-after 'install 'install-info
            (lambda _
              (invoke "make" "install_doc"))))))
@@ -445,19 +445,19 @@ sets, both THUMB and ARM mode.")
 (define-public intel-xed
   (package
     (name "intel-xed")
-    (version "11.2.0")
+    (version "12.0.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/intelxed/xed")
              (commit version)))
-       (sha256 (base32 "1jffayski2gpd54vaska7fmiwnnia8v3cka4nfyzjgl8xsky9v2s"))
+       (sha256 (base32 "07zfff8zf29c2n0wal87hiqfq3cwcjn80zz78mz0nyjfj09nd39f"))
        (file-name (git-file-name name version))
        (patches (search-patches "intel-xed-fix-nondeterminism.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python-wrapper" ,python-wrapper)
+     `(("python" ,python-wrapper)
        ("tcsh" ,tcsh)
        ;; As of the time of writing this comment, mbuild does not exist in the
        ;; Python Package Index and seems to only be used by intel-xed, so we
@@ -471,10 +471,10 @@ sets, both THUMB and ARM mode.")
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/intelxed/mbuild")
-                   (commit "5304b94361fccd830c0e2417535a866b79c1c297")))
+                   (commit "3de3f0d753c11dbe634bec611d4cc13f74768e4f")))
              (sha256
               (base32
-               "0r3avc3035aklqxcnc14rlmmwpj3jp09vbcbwynhvvmcp8srl7dl"))
+               "0z8hdhpmk8y5c9429p2yns9daswnffbprni9czkq3vij8f58lkg4"))
              (file-name (git-file-name name version)))))))
     (outputs '("out" "lib"))
     (arguments
@@ -489,8 +489,7 @@ sets, both THUMB and ARM mode.")
            (replace 'build
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((mbuild (assoc-ref inputs "mbuild")))
-                 (setenv "PYTHONPATH" (string-append
-                                       (getenv "PYTHONPATH") ":" mbuild))
+                 (setenv "PYTHONPATH" mbuild)
                  (invoke "./mfile.py"
                          (string-append "--build-dir=" build-dir)
                          (string-append "--install-dir=" kit-dir)
@@ -517,8 +516,7 @@ sets, both THUMB and ARM mode.")
                  (copy-recursively (string-append kit-dir "/include")
                                    (string-append lib "/include"))
                  (copy-recursively (string-append kit-dir "/lib")
-                                   (string-append lib "/lib"))
-                 #t)))))))
+                                   (string-append lib "/lib")))))))))
     (home-page "https://intelxed.github.io/")
     (synopsis "Encoder and decoder for x86 (IA32 and Intel64) instructions")
     (description "The Intel X86 Encoder Decoder (XED) is a software library and
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 3939d4bc7e..b0058180e4 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -387,8 +387,8 @@ by MusicIP.")
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/faac/files/faac-src/"
-                       "faac-1.30/faac-1_30.tar.gz/download"))
+        (string-append "mirror://sourceforge/faac/faac-src"
+                       "/faac-" version "/faac-1_30.tar.gz"))
        (sha256
         (base32 "1lmj0dib3mjp84jhxc5ddvydkzzhb0gfrdh3ikcidjlcb378ghxd"))))
     (build-system gnu-build-system)
@@ -2108,9 +2108,9 @@ synchronous execution of all clients, and low latency operation.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'jack_control' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/jack_control")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -4336,8 +4336,7 @@ the following features:
           (base32 "189l6lz8sz5vr6bjyzgcsrvksl1w6crqsg0q65r94b5yjsmjnpr4"))))
       (build-system meson-build-system)
       (arguments
-       `(#:meson ,meson-0.55
-         ;; Using a "release" build is recommended for performance
+       `(;; Using a "release" build is recommended for performance
          #:build-type "release"
          #:phases
          (modify-phases %standard-phases
@@ -4823,10 +4822,11 @@ as is the case with audio plugins.")
                (chmod (string-append out "/share/carla/carla") #o555)
                #t)))
          (add-after 'install 'wrap-executables
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-script (string-append out "/bin/carla")
-                            `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                            #:guile (search-input-file inputs "bin/guile")
+                            `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -4920,8 +4920,7 @@ in the package.")
             "1570m2dfia17dbkhd2qhx8jjihrpm7g8nnyg6n4wif4vv229s7dz"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      #:configure-flags
+    `(#:configure-flags
       ;; Build the tests.
       `("-Dtests=true")))
    (inputs
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 33e1905a25..cdd7425a07 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -59,12 +59,9 @@
         "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("bash" ,bash-minimal)
-           ("perl" ,perl)
-           ("m4" ,m4))
-         '()))
+     `(("bash" ,bash-minimal)
+       ("perl" ,perl)
+       ("m4" ,m4)))
     (native-inputs
      `(("perl" ,perl)
        ("m4" ,m4)))
@@ -205,9 +202,9 @@ files with a system-specific shebang."
     (inputs `(("guile"
                ;; XXX: Kludge to hide the circular dependency.
                ,(module-ref (resolve-interface '(gnu packages guile))
-                            'guile-2.0))
+                            'guile-3.0/fixed))
               ("autoconf" ,autoconf)
-              ("bash" ,bash)))
+              ("bash" ,bash-minimal)))
     (arguments
      '(#:modules ((guix build utils))
        #:builder
@@ -320,24 +317,21 @@ output is indexed in many ways to simplify browsing.")
 (define-public automake
   (package
     (name "automake")
-    (version "1.16.2")
+    (version "1.16.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/automake/automake-"
                                  version ".tar.xz"))
              (sha256
               (base32
-                "1l7dkqbsmbf94ax29jj1jf6a0r6ikc8jybg1p5m0c3ki7pg5ki6c"))
+                "0fmz2fhmzcpacnprl5msphvaflwiy0hvpgmqlgfny72ddijzfazz"))
              (patches
               (search-patches "automake-skip-amhello-tests.patch"))))
     (build-system gnu-build-system)
     (inputs
-     ;; TODO: remove `if' in the next rebuild cycle.
-     (if (%current-target-system)
-         `(("autoconf" ,autoconf-wrapper)
-           ("bash" ,bash-minimal)
-           ("perl" ,perl))
-         '()))
+     `(("autoconf" ,autoconf-wrapper)
+       ("bash" ,bash-minimal)
+       ("perl" ,perl)))
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
        ("perl" ,perl)))
@@ -482,11 +476,19 @@ Makefile, simplifying the entire process for the developer.")
                (("/bin/sh")
                 (string-append bash "/bin/sh")))
              #t)))
-         (add-after 'patch-source-shebangs 'restore-ltmain-shebang
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build-aux/ltmain.in"
-               (("^#!.*/bin/sh$") "#!/bin/sh"))
-             #t)))))
+         ;; These files may be copied into source trees by libtoolize,
+         ;; therefore they must not point to store file names that would be
+         ;; leaked with tarballs generated by make dist.
+         (add-after 'install 'restore-build-aux-shebang
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/share/libtool/build-aux")))
+               (for-each (lambda (file)
+                           (format #t "restoring shebang on `~a'~%" file)
+                           (substitute* file
+                             (("^#!.*/bin/sh") "#!/bin/sh")))
+                         (find-files dir ".*"))
+               #t))))))
 
     (synopsis "Generic shared library support tools")
     (description
diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.c
index 47ba069de1..ad0094bff5 100644
--- a/gnu/packages/aux-files/guile-launcher.c
+++ b/gnu/packages/aux-files/guile-launcher.c
@@ -82,10 +82,13 @@ main (int argc, char **argv)
   unsetenv ("GUILE_LOAD_PATH");
   unsetenv ("GUILE_LOAD_COMPILED_PATH");
 
-  /* XXX: Do not let GMP allocate via libgc as this can lead to memory
-     corruption in GnuTLS/Nettle since Nettle also uses GMP:
+#if !SCM_ENABLE_MINI_GMP
+  /* XXX: On Guile < 3.0.6 and Guile built without its bundled mini-GMP, do
+     not let GMP allocate via libgc as this can lead to memory corruption in
+     GnuTLS/Nettle since Nettle also uses GMP:
      <https://issues.guix.gnu.org/46330>.  */
   scm_install_gmp_memory_functions = 0;
+#endif
 
   scm_boot_guile (argc, argv, inner_main, 0);
   return 0; /* never reached */
diff --git a/gnu/packages/aux-files/python/sanity-check.py b/gnu/packages/aux-files/python/sanity-check.py
new file mode 100644
index 0000000000..83b6d583ca
--- /dev/null
+++ b/gnu/packages/aux-files/python/sanity-check.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function  # Python 2 support.
+import importlib
+import pkg_resources
+import sys
+import traceback
+
+try:
+    from importlib.machinery import PathFinder
+except ImportError:
+    PathFinder = None
+
+ret = 0
+
+# Only check site-packages installed by this package, but not dependencies
+# (which pkg_resources.working_set would include). Path supplied via argv.
+ws = pkg_resources.find_distributions(sys.argv[1])
+
+for dist in ws:
+    print('validating', repr(dist.project_name), dist.location)
+    try:
+        print('...checking requirements: ', end='')
+        req = str(dist.as_requirement())
+        # dist.activate() is not enough to actually check requirements, we
+        # have to .require() it.
+        pkg_resources.require(req)
+        print('OK')
+    except Exception as e:
+        print('ERROR:', req, e)
+        ret = 1
+        continue
+
+    # Try to load top level modules. This should not have any side-effects.
+    try:
+        metalines = dist.get_metadata_lines('top_level.txt')
+    except (KeyError, FileNotFoundError):
+        # distutils (i.e. #:use-setuptools? #f) will not install any metadata.
+        # This file is also missing for packages built using a PEP 517 builder
+        # such as poetry.
+        print('WARNING: cannot determine top-level modules')
+        continue
+    for name in metalines:
+        # Only available on Python 3.
+        if PathFinder and PathFinder.find_spec(name) is None:
+            # Ignore unavailable modules, often C modules, which were not
+            # installed at the top-level. Cannot use ModuleNotFoundError,
+            # because it is raised by failed imports too.
+            continue
+        try:
+            print('...trying to load module', name, end=': ')
+            importlib.import_module(name)
+            print('OK')
+        except Exception:
+            print('ERROR:')
+            traceback.print_exc(file=sys.stdout)
+            ret = 1
+
+    # Try to load entry points of console scripts too, making sure they
+    # work. They should be removed if they don't. Other groups may not be
+    # safe, as they can depend on optional packages.
+    for group, v in dist.get_entry_map().items():
+        if group not in {'console_scripts', 'gui_scripts'}:
+            continue
+        for name, ep in v.items():
+            try:
+                print('...trying to load endpoint', group, name, end=': ')
+                ep.load()
+                print('OK')
+            except Exception:
+                print('ERROR:')
+                traceback.print_exc(file=sys.stdout)
+                ret = 1
+
+sys.exit(ret)
diff --git a/gnu/packages/aux-files/python/sitecustomize.py b/gnu/packages/aux-files/python/sitecustomize.py
new file mode 100644
index 0000000000..65d3c7d554
--- /dev/null
+++ b/gnu/packages/aux-files/python/sitecustomize.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+
+python_root = os.path.realpath(sys.executable).split('/bin/')[0]
+major_minor = '{}.{}'.format(sys.version_info[0], sys.version_info[1])
+site_packages_prefix = 'lib/python' + major_minor + '/site-packages'
+python_site = python_root + '/' + site_packages_prefix
+
+try:
+    all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(':')
+except KeyError:
+    all_sites_raw = []
+# Normalize paths, otherwise a trailing slash would cause it to not match.
+all_sites_norm = [os.path.normpath(p) for p in all_sites_raw]
+matching_sites = [p for p in all_sites_norm
+                  if p.endswith(site_packages_prefix)]
+
+# Insert sites matching the current version into sys.path, right before
+# Python's own site.
+sys_path_absolute = [os.path.realpath(p) for p in sys.path]
+index = sys_path_absolute.index(python_site)
+sys.path = sys.path[:index] + matching_sites + sys.path[index:]
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
index b2aeeadf47..602f9d7997 100644
--- a/gnu/packages/avahi.scm
+++ b/gnu/packages/avahi.scm
@@ -74,7 +74,7 @@
        ("expat" ,expat)
        ("gdbm" ,gdbm)
        ("glib" ,glib)
-       ("libcap" ,libcap-2.31)       ;to enable chroot support in avahi-daemon
+       ("libcap" ,libcap)            ;to enable chroot support in avahi-daemon
        ("libdaemon" ,libdaemon)
        ("libevent" ,libevent)))
     (native-inputs
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 9ec4e281d8..ee15836451 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -219,7 +219,7 @@ backups (called chunks) to allow easy burning to CD/DVD.")
 (define-public libarchive
   (package
     (name "libarchive")
-    (version "3.4.2")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
@@ -230,7 +230,7 @@ backups (called chunks) to allow easy burning to CD/DVD.")
                                  version ".tar.xz")))
        (sha256
         (base32
-         "18dd01ahs2hv74xm7axjc3yhq839p0x0s4vssvlmm8fknja09qfq"))))
+         "16r95rlmikll1k8vbhh06vq6x3srkc10hzxjjf3021mjs2ld65qf"))))
     (build-system gnu-build-system)
     (inputs
      `(("bzip2" ,bzip2)
@@ -845,8 +845,8 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
                     (output-dir
                      (assoc-ref outputs "out"))
 
-                    ;; Just a default... not so useful on guixsd though
-                    ;; You probably want to a service with file(s) to point to.
+                    ;; Just a default... not so useful on Guix Systems though.
+                    ;; You probably want a service with file(s) to point to.
                     (confdir "/etc/dirvish")
 
                     (perl (string-append (assoc-ref %build-inputs "perl")
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index ea2e102c15..b7864f67fe 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
 ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +40,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages ed)
@@ -98,18 +100,18 @@ command-line arguments, multiple languages, and so on.")
 (define-public grep
   (package
    (name "grep")
-   (version "3.4")
+   (version "3.6")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/grep/grep-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1yy33kiwrxrwj2nxa4fg15bvmwyghqbs8qwkdvy5phm784f7brjq"))
+              "0gipv6bzkm1aihj0ncqpyh164xrzgcxcv9r1kwzyk2g1mzl1azk6"))
             (patches (search-patches "grep-timing-sensitive-test.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))             ;some of the tests require it
-   (inputs `(("pcre" ,pcre)))
+   (native-inputs (list perl))                   ;some of the tests require it
+   (inputs (list pcre))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -122,8 +124,7 @@ command-line arguments, multiple languages, and so on.")
               (substitute* (list (string-append bin "/egrep")
                                  (string-append bin "/fgrep"))
                 (("^exec grep")
-                 (string-append "exec " bin "/grep")))
-              #t))))))
+                 (string-append "exec " bin "/grep")))))))))
    (synopsis "Print lines matching a pattern")
    (description
      "grep is a tool for finding text inside files.  Text is found by
@@ -146,27 +147,22 @@ including, for example, recursive directory searching.")
                                 ".tar.gz"))
             (sha256
              (base32
-              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))))
+              "0alqagh0nliymz23kfjg6g9w3cr086k0sfni56gi8fhzqwa3xksk"))
+            ;; Remove this snippet once upstream releases a fixed version.
+            ;; This snippet changes Makefile.in, even though the upstream
+            ;; patch changes testsuite/local.mk, since we build sed from a
+            ;; release tarball.  See: https://bugs.gnu.org/36150
+            (snippet
+             '(begin
+                (substitute* "Makefile.in"
+                  (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
+                   (string-append
+                    previous-line
+                    "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))))
+            (modules '((guix build utils)))))
    (build-system gnu-build-system)
-   (arguments
-    ;; TODO: When merging this into core-updates, keep the version of
-    ;; this code (with comment!) applied as a snippet.
-    `(,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
-                                              (%current-system)))
-          `(#:phases
-            (modify-phases %standard-phases
-              (add-after 'unpack 'allow-building-on-selinux-systems
-                (lambda _
-                  (substitute* "Makefile.in"
-                    (("^  abs_srcdir='\\$\\(abs_srcdir\\)'.*" previous-line)
-                     (string-append
-                      previous-line
-                      "  CONFIG_HEADER='$(CONFIG_HEADER)'\t\t\\\n")))
-                  #t))))
-          '())))
    (synopsis "Stream editor")
-   (native-inputs
-    `(("perl" ,perl)))                            ;for tests
+   (native-inputs (list perl))                    ;for tests
    (description
     "Sed is a non-interactive, text stream editor.  It receives a text
 input from a file or from standard input and it then applies a series of text
@@ -179,14 +175,14 @@ implementation offers several extensions over the standard utility.")
 (define-public tar
   (package
    (name "tar")
-   (version "1.32")
+   (version "1.34")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/tar/tar-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh"))
+              "0a0x87anh9chbi2cgcyy7pmnm5hzk4yd1w2j8gm1wplwhwkbvgk3"))
             (patches (search-patches "tar-skip-unreliable-tests.patch"
                                      "tar-remove-wholesparse-check.patch"))))
    (build-system gnu-build-system)
@@ -214,13 +210,12 @@ implementation offers several extensions over the standard utility.")
                      (let ((bash (assoc-ref inputs "bash")))
                        (substitute* "src/system.c"
                          (("/bin/sh")
-                          (string-append bash "/bin/sh")))
-                       #t))))))
+                          (string-append bash "/bin/sh")))))))))
 
    ;; When cross-compiling, the 'set-shell-file-name' phase needs to be able
    ;; to refer to the target Bash.
    (inputs (if (%current-target-system)
-               `(("bash" ,bash))
+               (list bash)
                '()))
 
    (synopsis "Managing tar archives")
@@ -253,7 +248,7 @@ standard utility.")
     (if (%current-target-system)
         `(#:configure-flags '("gl_cv_func_working_mktime=yes"))
         '()))
-   (native-inputs `(("ed" ,ed)))
+   (native-inputs (list ed))
    (synopsis "Apply differences to originals, with optional backups")
    (description
     "Patch is a program that applies changes to files based on differences
@@ -276,7 +271,7 @@ differences.")
              (base32
               "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk"))))
    (build-system gnu-build-system)
-   (native-inputs `(("perl" ,perl)))
+   (native-inputs (list perl))
    (synopsis "Comparing and merging files")
    (description
     "GNU Diffutils is a package containing tools for finding the
@@ -290,16 +285,15 @@ interactive means to merge two files.")
 (define-public findutils
   (package
    (name "findutils")
-   (version "4.7.0")
+   (version "4.8.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/findutils/findutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "16kqz9yz98dasmj70jwf5py7jk558w96w0vgp3zf9xsqk3gzpzn5"))
-            (patches (search-patches "findutils-localstatedir.patch"
-                                     "findutils-test-rwlock-threads.patch"))))
+              "0r3i72hnw0a30khlczi9k2c51aamaj6kfmp5mk3844nrjxz7n4jp"))
+            (patches (search-patches "findutils-localstatedir.patch"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags (list
@@ -311,8 +305,7 @@ interactive means to merge two files.")
                      (substitute* '("tests/xargs/verbose-quote.sh"
                                     "tests/find/exec-plus-last-file.sh")
                        (("#!/bin/sh")
-                        (string-append "#!" (which "sh"))))
-                     #t)))))
+                        (string-append "#!" (which "sh")))))))))
    (synopsis "Operating on files matching given criteria")
    (description
     "Findutils supplies the basic file directory searching utilities of the
@@ -335,18 +328,20 @@ used to apply commands with arbitrarily long arguments.")
             (sha256
              (base32
               "1yjcrh5hw70c0yn8zw55pd6j51dj90anpq8mmg649ps9g3gdhn24"))
-            (patches (search-patches "coreutils-ls.patch"))))
+            (patches (search-patches "coreutils-ls.patch"
+                                     "coreutils-gnulib-tests.patch"))))
    (build-system gnu-build-system)
-   (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
-             ("gmp"  ,gmp)                        ;bignums in 'expr', yay!
+   (inputs `(,acl                                 ;TODO: add SELinux
+             ,attr                                ;for xattrs in ls, mv, etc
+             ,gmp                                 ;bignums in 'expr', yay!
 
              ;; Do not use libcap when cross-compiling since it's not quite
              ;; cross-compilable; and use it only for supported systems.
              ,@(if (and (not (%current-target-system))
                         (member (%current-system)
                                 (package-supported-systems libcap)))
-             `(("libcap" ,libcap-2.31))        ;capability support in 'ls', etc.
-             '())))
+                   `(,libcap)                ;capability support in 'ls', etc.
+                   '())))
    (native-inputs
     ;; Perl is needed to run tests in native builds, and to run the bundled
     ;; copy of help2man.  However, don't pass it when cross-compiling since
@@ -354,7 +349,7 @@ used to apply commands with arbitrarily long arguments.")
     ;; for help2man.
     (if (%current-target-system)
         '()
-        `(("perl" ,perl))))
+        (list perl)))
    (outputs '("out" "debug"))
    (arguments
     `(#:parallel-build? #f            ; help2man may be called too early
@@ -383,16 +378,18 @@ used to apply commands with arbitrarily long arguments.")
                      (substitute* (find-files "gnulib-tests" "\\.c$")
                        (("/bin/sh") (which "sh")))
                      (substitute* (find-files "tests" "\\.sh$")
-                       (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                     #t))
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'remove-tests
-                           (lambda _
-                             (substitute* "Makefile.in"
+                       (("#!/bin/sh") (string-append "#!" (which "sh"))))))
+                 (add-after 'unpack 'remove-tests
+                   (lambda _
+                     ,@(if (hurd-target?)
+                           '((substitute* "Makefile.in"
                                ;; this test hangs
-                               (("^ *tests/misc/timeout-group.sh.*") ""))
-                             #t)))
-                       '()))))
+                               (("^ *tests/misc/timeout-group.sh.*") "")))
+                           '())
+                     (substitute* "Makefile.in"
+                       ;; fails on filesystems where inotify cannot be used,
+                       ;; more info in #47935
+                       (("^ *tests/tail-2/inotify-dir-recreate.sh.*") "")))))))
    (synopsis "Core GNU utilities (file, text, shell)")
    (description
     "GNU Coreutils package includes all of the basic command-line tools that
@@ -436,8 +433,7 @@ standard.")
                 ;; specific issue, but "env-S.pl" is not adjusted for build
                 ;; environments with long prefixes (/tmp/guix-build-...).
                 (substitute* "Makefile"
-                  (("^.*tests/misc/env-S.pl.*$") ""))
-                #t)))))))))
+                  (("^.*tests/misc/env-S.pl.*$") "")))))))))))
 
 (define-public gnu-make
   (package
@@ -452,8 +448,8 @@ standard.")
               "06cfqzpqsvdnsxbysl5p2fgdgxgl9y4p7scpnrfa8z2zgkjdspz0"))
             (patches (search-patches "make-impure-dirs.patch"))))
    (build-system gnu-build-system)
-   (native-inputs `(("pkg-config" ,pkg-config)))  ; to detect Guile
-   (inputs `(("guile" ,guile-3.0)))
+   (native-inputs (list pkg-config))              ;to detect Guile
+   (inputs (list guile-3.0))
    (outputs '("out" "debug"))
    (arguments
     `(,@(if (hurd-target?)
@@ -469,8 +465,7 @@ standard.")
               (substitute* "src/job.c"
                 (("default_shell =.*$")
                  (format #f "default_shell = \"~a/bin/sh\";\n"
-                         bash)))
-              #t))))))
+                         bash)))))))))
    (synopsis "Remake files automatically")
    (description
     "Make is a program that is used to control the production of
@@ -504,21 +499,21 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                (substitute* "job.c"
                  (("default_shell =.*$")
                   (format #f "default_shell = \"~a/bin/sh\";\n"
-                          bash)))
-               #t))))))))
+                          bash)))))))))))
 
 (define-public binutils
   (package
    (name "binutils")
-   (version "2.34")
+   (version "2.36.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/binutils/binutils-"
                                 version ".tar.bz2"))
             (sha256
              (base32
-              "1rin1f5c7wm4n3piky6xilcrpf2s0n3dd5vqq8irrxkcic3i1w49"))
-            (patches (search-patches "binutils-loongson-workaround.patch"))))
+              "18ypqr5y48vxqg9mkz1c47798jp1xb1d4vfpmfq8vkihkvkx4jsv"))
+            (patches (search-patches "binutils-libiberty-endianness-bug.patch"
+                                     "binutils-loongson-workaround.patch"))))
    (build-system gnu-build-system)
 
    ;; TODO: Add dependency on zlib + those for Gold.
@@ -542,17 +537,7 @@ change.  GNU make offers many powerful extensions over the standard utility.")
 
                           ;; Make sure 'ar' and 'ranlib' produce archives in a
                           ;; deterministic fashion.
-                          "--enable-deterministic-archives")
-
-      ;; XXX: binutils 2.34 was mistakenly released without generated manuals:
-      ;; <https://sourceware.org/bugzilla/show_bug.cgi?id=25491>.  To avoid a
-      ;; circular dependency on texinfo, prevent the build system from creating
-      ;; the manuals by calling "true" instead of "makeinfo"...
-      #:make-flags '("MAKEINFO=true")))
-
-   ;; ...and "hide" this package so that users who install binutils get the
-   ;; version with documentation defined below.
-   (properties '((hidden? . #t)))
+                          "--enable-deterministic-archives")))
 
    (synopsis "Binary utilities: bfd gas gprof ld")
    (description
@@ -565,18 +550,6 @@ included.")
    (license gpl3+)
    (home-page "https://www.gnu.org/software/binutils/")))
 
-;; Work around a problem with binutils 2.34 whereby manuals are missing from
-;; the release tarball.  Remove this and the related code above when updating.
-(define-public binutils+documentation
-  (package/inherit
-   binutils
-   (native-inputs
-    `(("texinfo" ,texinfo)))
-   (arguments
-    (substitute-keyword-arguments (package-arguments binutils)
-      ((#:make-flags _ ''()) ''())))
-   (properties '())))
-
 ;; FIXME: ath9k-firmware-htc-binutils.patch do not apply on 2.34 because of a
 ;; big refactoring of xtensa-modules.c (commit 567607c11fbf7105 upstream).
 ;; Keep this version around until the patch is updated.
@@ -597,7 +570,7 @@ included.")
    (properties '())))
 
 (define-public binutils-gold
-  (package/inherit binutils+documentation
+  (package/inherit binutils
     (name "binutils-gold")
     (arguments
      `(#:phases
@@ -605,8 +578,7 @@ included.")
          (add-after 'patch-source-shebangs 'patch-more-shebangs
            (lambda _
              (substitute* "gold/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             #t)))
+               (("/bin/sh") (which "sh"))))))
        ,@(substitute-keyword-arguments (package-arguments binutils)
          ; Upstream is aware of unrelocatable test failures on arm*.
          ((#:tests? _ #f)
@@ -705,32 +677,27 @@ the store.")
   ;; version 2.28, GNU/Hurd used a different glibc branch.
   (package
    (name "glibc")
-   (version "2.31")
+   (version "2.33")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
             (sha256
              (base32
-              "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))
-            (snippet
-             ;; Disable 'ldconfig' and /etc/ld.so.cache.  The latter is
-             ;; required on LFS distros to avoid loading the distro's libc.so
-             ;; instead of ours.
-             '(begin
-                (substitute* "sysdeps/unix/sysv/linux/configure"
-                  (("use_ldconfig=yes")
-                   "use_ldconfig=no"))
-                #t))
-            (modules '((guix build utils)))
-            (patches (search-patches "glibc-ldd-x86_64.patch"
+              "1zvp0qdfbdyqrzydz18d9zg3n5ygy8ps7cmny1bvsp8h1q05c99f"))
+            (patches (search-patches "glibc-ldd-powerpc.patch"
+                                     "glibc-ldd-x86_64.patch"
+                                     "glibc-dl-cache.patch"
                                      "glibc-hidden-visibility-ldconfig.patch"
                                      "glibc-versioned-locpath.patch"
                                      "glibc-allow-kernel-2.6.32.patch"
                                      "glibc-reinstate-prlimit64-fallback.patch"
                                      "glibc-supported-locales.patch"
+                                     "glibc-cross-objdump.patch"
+                                     "glibc-cross-objcopy.patch" ;must come 2nd
                                      "glibc-hurd-clock_t_centiseconds.patch"
                                      "glibc-hurd-clock_gettime_monotonic.patch"
-                                     "glibc-hurd-signal-sa-siginfo.patch"))))
+                                     "glibc-hurd-mach-print.patch"
+                                     "glibc-hurd-gettyent.patch"))))
    (build-system gnu-build-system)
 
    ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
@@ -803,6 +770,11 @@ the store.")
                   '("--disable-werror")
                   '()))
 
+      ;; Arrange so that /etc/rpc & co. go to $out/etc.
+      #:make-flags (list (string-append "sysconfdir="
+                                        (assoc-ref %outputs "out")
+                                        "/etc"))
+
       #:tests? #f                                 ; XXX
       #:phases (modify-phases %standard-phases
                  (add-before
@@ -830,6 +802,11 @@ the store.")
                         ;; 4.7.1.
                         ((" -lgcc_s") ""))
 
+                      ;; Tell the ld.so cache code where the store is.
+                      (substitute* "elf/dl-cache.c"
+                        (("@STORE_DIRECTORY@")
+                         (string-append "\"" (%store-directory) "\"")))
+
                       ;; Have `system' use that Bash.
                       (substitute* "sysdeps/posix/system.c"
                         (("#define[[:blank:]]+SHELL_PATH.*$")
@@ -865,9 +842,7 @@ the store.")
                          ;; "bilingual" eval/exec magic at the top of the file.
                          "")
                         (("exec @PERL@")
-                         "exec perl"))
-
-                      #t)))
+                         "exec perl")))))
 
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -905,17 +880,8 @@ the store.")
                                      ((out) static)))
                                  (filter linker-script?
                                          (map (cut string-append slib "/" <>)
-                                              files)))
-                       #t)))
-
-                 ,@(if (target-powerpc?)
-                     '((add-after 'unpack 'apply-patch
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (let ((patch (assoc-ref inputs
-                                                   "powerpc64le-patch")))
-                             (invoke "patch" "--force" "-p1"
-                                     "-i" patch)))))
-                     '())
+                                              files))))))
+
                  ,@(if (hurd-target?)
                        '((add-after 'install 'augment-libc.so
                            (lambda* (#:key outputs #:allow-other-keys)
@@ -923,8 +889,7 @@ the store.")
                                (substitute* (string-append out "/lib/libc.so")
                                  (("/[^ ]+/lib/libc.so.0.3")
                                   (string-append out "/lib/libc.so.0.3"
-                                                 " libmachuser.so libhurduser.so"))))
-                             #t)))
+                                                 " libmachuser.so libhurduser.so")))))))
                        '()))))
 
    (inputs `(("static-bash" ,static-bash)))
@@ -937,10 +902,6 @@ the store.")
                     ("gettext" ,gettext-minimal)
                     ("python" ,python-minimal)
 
-                    ,@(if (target-powerpc?)
-                        `(("powerpc64le-patch" ,@(search-patches
-                                                   "glibc-ldd-powerpc.patch")))
-                        '())
                     ,@(if (hurd-target?)
                           `(("mig" ,mig)
                             ("perl" ,perl))
@@ -969,6 +930,17 @@ with the Linux kernel.")
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
+(define-public glibc-2.31
+  (package
+    (inherit glibc)
+    (version "2.31")
+    (source (origin
+              (inherit (package-source glibc))
+              (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
+              (sha256
+               (base32
+                "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj"))))))
+
 (define-public glibc-2.30
   (package
     (inherit glibc)
@@ -1126,8 +1098,7 @@ to the @code{share/locale} sub-directory of this package.")
                                             (string-append (dirname directory)
                                                            "/" name "."
                                                            normalized)))))
-                             locales)
-                   #t)))
+                             locales))))
              (delete 'install)
              (delete 'move-static-libs)))
          ((#:configure-flags flags)
@@ -1184,8 +1155,7 @@ to the @code{share/locale} sub-directory of this package.")
                                                          locale ".UTF-8")))
                                ',locales)
                      #t))))
-    (native-inputs `(("glibc" ,glibc)
-                     ("gzip" ,gzip)))
+    (native-inputs (list glibc gzip))
     (synopsis (if default-locales?
                   (P_ "Small sample of UTF-8 locales")
                   (P_ "Customized sample of UTF-8 locales")))
@@ -1238,17 +1208,15 @@ command.")
   (package (inherit glibc)
     (name "glibc-hurd-headers")
     (outputs '("out"))
-    (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
-                         ("hurd-headers" ,hurd-headers)))
+    (propagated-inputs (list gnumach-headers hurd-headers))
     (native-inputs
-     `(("mig" ,(if (%current-target-system)
-                   ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
-                   ;; hence this hack.
-                   (package
-                     (inherit mig)
-                     (arguments `(#:system "i686-linux")))
-                   mig))
-       ,@(package-native-inputs glibc)))
+     (modify-inputs (package-native-inputs glibc)
+       (prepend (if (%current-target-system)
+                    ;; XXX: When targeting i586-pc-gnu, we need a 32-bit MiG,
+                    ;; hence this hack.
+                    (package (inherit mig)
+                             (arguments `(#:system "i686-linux")))
+                    mig))))
     (arguments
      (substitute-keyword-arguments (package-arguments glibc)
        ;; We just pass the flags really needed to build the headers.
@@ -1267,8 +1235,7 @@ command.")
                (let ((out (assoc-ref outputs "out")))
                  (close-port
                   (open-output-file
-                   (string-append out "/include/gnu/stubs.h"))))
-               #t))
+                   (string-append out "/include/gnu/stubs.h"))))))
            (delete 'build)))))))                  ; nothing to build
 
 (define-public tzdata
@@ -1288,6 +1255,14 @@ command.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
+       ;; This consists purely of (architecture-independent) data,
+       ;; so ‘cross-compilation’ is pointless here!
+       ;; (The binaries zic, dump, and tzselect are deleted in the post-install
+       ;; phase.)
+       #:target #f
+       ;; share/zoneinfo/posix is a symlink to share/zoneinfo,
+       ;; so include the package itself in #:allowed-references.
+       #:allowed-references ("out")
        #:make-flags (let ((out (assoc-ref %outputs "out"))
                           (tmp (getenv "TMPDIR")))
                       (list (string-append "TOPDIR=" out)
@@ -1334,8 +1309,7 @@ command.")
                (copy-recursively (string-append out "/share/zoneinfo-leaps")
                                  (string-append out "/share/zoneinfo/right"))
                (delete-file-recursively
-                (string-append out "/share/zoneinfo-leaps"))
-               #t)))
+                (string-append out "/share/zoneinfo-leaps")))))
          (delete 'configure))))
     (inputs `(("tzcode" ,(origin
                           (method url-fetch)
@@ -1363,7 +1337,7 @@ and daylight-saving rules.")
   (hidden-package
    (package
      (inherit tzdata)
-     (version "2019c")
+     (version "2020d")
      (source (origin
                (method url-fetch)
                (uri (string-append
@@ -1371,7 +1345,7 @@ and daylight-saving rules.")
                      version ".tar.gz"))
                (sha256
                 (base32
-                 "0z7w1yv37cfk8yhix2cillam091vgp1j4g8fv84261q9mdnq1ivr"))))
+                 "1wxskk9mh1x2073n99qna2mq58mgi648mbq5dxlqfcrnvrbkk0cd"))))
      (inputs
       `(("tzcode" ,(origin
                      (method url-fetch)
@@ -1380,7 +1354,7 @@ and daylight-saving rules.")
                            version ".tar.gz"))
                      (sha256
                       (base32
-                       "1m3y2rnf1nggxxhxplab5zdd5whvar3ijyrv7lifvm82irkd7szn")))))))))
+                       "1mgsckixmmk9qxzsflfxnp3999qi3ls72bgksclk01g852x51w3c")))))))))
 
 (define-public libiconv
   (package
@@ -1397,11 +1371,9 @@ and daylight-saving rules.")
               (snippet
                ;; Work around "declared gets" error on glibc systems (fixed by
                ;; Gnulib commit 66712c23388e93e5c518ebc8515140fa0c807348.)
-               '(begin
-                  (substitute* "srclib/stdio.in.h"
-                    (("^#undef gets") "")
-                    (("^_GL_WARN_ON_USE \\(gets.*") ""))
-                  #t))))
+               '(substitute* "srclib/stdio.in.h"
+                  (("^#undef gets") "")
+                  (("^_GL_WARN_ON_USE \\(gets.*") "")))))
     (build-system gnu-build-system)
     (synopsis "Character set conversion library")
     (description
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index ed2931fd97..7e98367bbb 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,7 +58,7 @@
 
 (define (patch-url seqno)
   "Return the URL of Bash patch number SEQNO."
-  (format #f "mirror://gnu/bash/bash-5.0-patches/bash50-~3,'0d" seqno))
+  (format #f "mirror://gnu/bash/bash-5.1-patches/bash51-~3,'0d" seqno))
 
 (define (bash-patch seqno sha256-bv)
   "Return the origin of Bash patch SEQNO, with expected hash SHA256-BV."
@@ -70,26 +71,18 @@
   (list (bash-patch seqno (base32 hash))
         ...))
 
-(define %patch-series-5.0
+(define %patch-series-5.1
   ;; This is the current patches series for 5.0, generated using
   ;; 'download-patches' below.
   (patch-series
-    (1 "12bjfdy6bg8nhyw27bdgxn7h4paylx8d927skfmi9pxd1wgrxzpj")
-    (2 "01w7yrzmz10mw06ys0546vhl7isv2v402ziyvfd7k67588spvs47")
-    (3 "0ny81ridp5n0j69hb8ixrc7dmxybby54jbsz5hikly8kgg1wvssf")
-    (4 "021gqqvgydixkrmqss64b6srfdlkvnx88lyfzpxfrn5d6bc7li0l")
-    (5 "0xl2kyzm84nlyklrqzkn73ixabhzfhn9x91lzcmis89cppclvxav")
-    (6 "0844749ixk1z60437nkznzms1f0nzh9an62kj7sny6r0zyk2k1fn")
-    (7 "16xg37gp1b8zlj5969w8mcrparwqlcbj9695vn3qhgb7wdz1xd0p")
-    (8 "1qyp19krjh8zxvb0jgwmyjz40djslwcf4xi7kc1ab0iaca44bipf")
-    (9 "00yrjjqd95s81b21qq3ba1y7h879q8jaajlkjggc6grhcwbs4g7d")
-    (10 "04ca5bjv456v538mkspzvn4xb2zdphh31r4fpvfm9p5my0jw7yyn")
-    (11 "1sklyixvsv8993kxzs0jigacpdchjrq7jv5xpdx7kbqyp4rf6k9c")
-    (12 "0cz21qg2gbr40lfgza7g02bqi2qknwqgxnq459pjj640d0cywhr9")
-    (13 "16h9nwz3yzwj7fnxvlidjymdc4yr30h818433gh9j1x3in6igmzm")
-    (14 "12gm5bvv2pd3m72z2ilj26pa08c61az253dsgfl24vpf2ijywvjx")
-    (15 "0pm0px758w4i23s55wajcv6lqfiym7zgxvq0pxf6vclkv8nxy5x5")
-    (16 "0vdha332km2iwx8g2ld15jy7d24cbplzgr1531dpzylr9ajxglgz")))
+   (1 "1ymm8ppss6gyh9ifznjwiabrb4k91npd09c10y7mk66xp8yppc7b")
+   (2 "1gjx9zqcm407am3n2sh44b8dxm48kgm15rzfiijqxr01m0hn3shm")
+   (3 "1cdnpbfc64yhvkjj4d12s9ywp11g195vzfl1cab24sq55wkcrwi2")
+   (4 "11iwhy6v562bv0kk7lwj7f5jj65ma9bblivy0v02h3ggcibbdbls")
+   (5 "19bdyigdr81824nxvqr6a7k0cax60wq7376j6b91afbnwvlvbjyc")
+   (6 "051x8wlwrqk0yr0zg378vh824iklfl5g9pkmcdf62qp8gn9pvqbm")
+   (7 "0fir80pp1gmlpadmqcgkrv4y119pc7xllchjzg05fd7px73viz5c")
+   (8 "1lfjgshk8i9vch92p5wgc9r90j3phw79aa7gbai89w183b2z6b7j")))
 
 (define (download-patches store count)
   "Download COUNT Bash patches into store.  Return a list of
@@ -125,7 +118,7 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                " -Wl,-rpath -Wl,"
                (assoc-ref %build-inputs "ncurses")
                "/lib")))
-         (version "5.0"))
+         (version "5.1"))
     (package
      (name "bash")
      (source (origin
@@ -134,11 +127,11 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
                     "mirror://gnu/bash/bash-" version ".tar.gz"))
               (sha256
                (base32
-                "0kgvfwqdcd90waczf4gx39xnrxzijhjrzyzv7s8v4w31qqm0za5l"))
+                "1alv68wplnfdm6mh39hm57060xgssb9vqca4yr1cyva0c342n0fc"))
               (patch-flags '("-p0"))
               (patches (cons (search-patch "bash-linux-pgrp-pipe.patch")
-                             %patch-series-5.0))))
-     (version (string-append version "." (number->string (length %patch-series-5.0))))
+                             %patch-series-5.1))))
+     (version (string-append version "." (number->string (length %patch-series-5.1))))
      (build-system gnu-build-system)
 
      (outputs '("out"
@@ -409,6 +402,7 @@ capturing.")
          ;; Install phase
          (invoke "./install.sh" %output)
          (wrap-script (string-append %output "/bin/bats")
+                      #:guile (search-input-file %build-inputs "bin/guile")
                       (list "PATH" 'prefix (string-split (getenv "PATH")
                                                          #\:))))))
     (build-system trivial-build-system)
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index ecac5b9368..5ced11bb64 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -46,14 +46,18 @@
       (list
        ;; Install gc_cpp.h et al.
        "--enable-cplusplus"
-       ;; In GNU/Hurd systems during the 'Check' phase,
+
+       ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
+       "--disable-munmap"
+
+       ;; In GNU/Hurd systems during the 'check' phase,
        ;; there is a deadlock caused by the 'gctest' test.
        ;; To disable the error set "--disable-gcj-support"
        ;; to configure script. See bug report and discussion:
        ;; <https://lists.opendylan.org/pipermail/bdwgc/2017-April/006275.html>
        ;; <https://lists.gnu.org/archive/html/bug-hurd/2017-01/msg00008.html>
-       ,@(if (hurd-triplet? (or (%current-system)
-                                (%current-target-system)))
+       ,@(if (target-hurd? (or (%current-system)
+                               (%current-target-system)))
              '("--disable-gcj-support")
              '()))))
    (native-inputs `(("pkg-config" ,pkg-config)))
@@ -85,17 +89,6 @@ C or C++ programs, though that is not its primary goal.")
 
    (license (x11-style (string-append home-page "license.txt")))))
 
-(define-public libgc/disable-munmap
-  ;; TODO: Use '--disable-munmap' by default on next rebuild cycle.
-  (package/inherit libgc
-    (arguments
-     ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
-     (substitute-keyword-arguments (package-arguments libgc)
-       ((#:configure-flags flags ''())
-        `(cons "--disable-munmap" ,flags))))
-    (properties `((hidden? . #t)
-                  ,@(package-properties libgc)))))
-
 ;; TODO: Add a static output in libgc in the next rebuild cycle.
 (define-public libgc/static-libs
   (package/inherit
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index 36465e4e7d..78b491d50d 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -104,7 +104,7 @@
                            "fiologparser.py"))
                ;; Make sure numpy et.al is found.
                (wrap-program (string-append newbin "/fiologparser_hist.py")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (outputs '("out" "utils"))
     (inputs
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index d9ff16e91e..b844fe5f63 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018, 2019, 2020, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
@@ -219,8 +219,7 @@ structure of the predicted RNA.")
               (snippet
                `(begin
                   ;; Delete bundled htslib.
-                  (delete-file-recursively "c/htslib-1.3.1")
-                  #t))))
+                  (delete-file-recursively "c/htslib-1.3.1")))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2 ; BamM is Python 2 only.
@@ -240,37 +239,22 @@ structure of the predicted RNA.")
                  ;; Use autogen so that 'configure' works.
                  (substitute* "autogen.sh" (("/bin/sh") sh))
                  (setenv "CONFIG_SHELL" sh)
-                 (invoke "./autogen.sh")))
-             #t))
-         (delete 'build)
-         ;; Run tests after installation so compilation only happens once.
-         (delete 'check)
-         (add-after 'install 'wrap-executable
-           (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out  (assoc-ref outputs "out"))
-                   (path (getenv "PATH")))
-              (wrap-program (string-append out "/bin/bamm")
-                `("PATH" ":" prefix (,path))))
-            #t))
-         (add-after 'wrap-executable 'post-install-check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (setenv "PATH"
-                     (string-append (assoc-ref outputs "out")
-                                    "/bin:"
-                                    (getenv "PATH")))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (assoc-ref outputs "out")
-                      "/lib/python"
-                      (string-take (string-take-right
-                                    (assoc-ref inputs "python") 5) 3)
-                      "/site-packages:"
-                      (getenv "PYTHONPATH")))
+                 (invoke "./autogen.sh")))))
+         (delete 'build)                ;the build loops otherwise
+         (replace 'check
+           (lambda _
              ;; There are 2 errors printed, but they are safe to ignore:
              ;; 1) [E::hts_open_format] fail to open file ...
              ;; 2) samtools view: failed to open ...
-             (invoke "nosetests")
-             #t)))))
+             (invoke "nosetests")))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (path (getenv "PATH"))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
+               (wrap-program (string-append out "/bin/bamm")
+                 `("PATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,pythonpath)))))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -916,9 +900,7 @@ servers supporting the protocol.")
                 "0wc7z8g8prgdx7n5chjva2fdq03wiwhqisjjxzkjg1j5k5ha7151"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
+     `(#:modules ((srfi srfi-26)
                   (guix build utils)
                   (guix build python-build-system))
        ;; See https://github.com/daler/pybedtools/issues/192
@@ -938,8 +920,6 @@ servers supporting the protocol.")
              (substitute* "pybedtools/test/test_issues.py"
                (("def test_issue_303")
                 "def _test_issue_303"))))
-         ;; TODO: Remove phase after it's part of PYTHON-BUILD-SYSTEM.
-         ;; build system.
          ;; Force the Cythonization of C++ files to guard against compilation
          ;; problems.
          (add-after 'unpack 'remove-cython-generated-files
@@ -951,20 +931,12 @@ servers supporting the protocol.")
                  (string-take filename (string-index-right filename #\.)))
                (define (cythonized? c/c++-file)
                  (member (strip-extension c/c++-file) cython-sources))
-               (for-each delete-file (filter cythonized? c/c++-files))
-               #t)))
+               (for-each delete-file (filter cythonized? c/c++-files)))))
          (add-after 'remove-cython-generated-files 'generate-cython-extensions
            (lambda _
              (invoke "python" "setup.py" "cythonize")))
          (replace 'check
            (lambda _
-             (let* ((build-root-directory (string-append (getcwd) "/build/"))
-                    (build (string-append
-                            build-root-directory
-                            (find (cut string-prefix? "lib" <>)
-                                  (scandir build-root-directory)))))
-               (setenv "PYTHONPATH"
-                       (string-append build ":" (getenv "PYTHONPATH"))))
              ;; The tests need to be run from elsewhere...
              (mkdir-p "/tmp/test")
              (copy-recursively "pybedtools/test" "/tmp/test")
@@ -2086,15 +2058,10 @@ has several key features:
               (snippet '(begin
                           ;; Drop bundled htslib. TODO: Also remove samtools
                           ;; and bcftools.
-                          (delete-file-recursively "htslib")
-                          #t))))
+                          (delete-file-recursively "htslib")))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build python-build-system)
-                  (guix build utils))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-flags
            (lambda* (#:key inputs #:allow-other-keys)
@@ -2104,22 +2071,16 @@ has several key features:
              (setenv "HTSLIB_INCLUDE_DIR"
                      (string-append (assoc-ref inputs "htslib") "/include"))
              (setenv "LDFLAGS" "-lncurses")
-             (setenv "CFLAGS" "-D_CURSES_LIB=1")
-             #t))
+             (setenv "CFLAGS" "-D_CURSES_LIB=1")))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda _
              ;; This file contains tests that require a connection to the
              ;; internet.
              (delete-file "tests/tabix_test.py")
-             ;; FIXME: This test fails
+             ;; FIXME: These tests fail with "AttributeError: 'array.array'
+             ;; object has no attribute 'tostring'".
              (delete-file "tests/AlignmentFile_test.py")
-             ;; Add first subdirectory of "build" directory to PYTHONPATH.
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build"
-                                    (negate (cut string-prefix? "." <>))))))
+             (delete-file "tests/AlignedSegment_test.py")
              ;; Step out of source dir so python does not import from CWD.
              (with-directory-excursion "tests"
                (setenv "HOME" "/tmp")
@@ -2460,9 +2421,9 @@ gene predictor designed to work with assembled, aligned RNA-seq transcripts.")
           (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Make sure 'couger' runs with the correct PYTHONPATH.
             (let* ((out (assoc-ref outputs "out"))
-                   (path (getenv "PYTHONPATH")))
+                   (path (getenv "GUIX_PYTHONPATH")))
               (wrap-program (string-append out "/bin/couger")
-                `("PYTHONPATH" ":" prefix (,path))))
+                `("GUIX_PYTHONPATH" ":" prefix (,path))))
             #t)))))
     (inputs
      `(("python" ,python-2)
@@ -3138,19 +3099,14 @@ data and settings.")
              (substitute* "src/plasma/fasta.hpp"
                (("#define FASTA_HPP" line)
                 (string-append line "\n#include <random>")))
-             #t))
-         ;; FIXME: this is needed because we're using texlive-union, which
-         ;; doesn't handle fonts correctly.  It expects to be able to generate
-         ;; fonts in the home directory.
-         (add-before 'build 'setenv-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
+             #t)))))
     (inputs
      `(("boost" ,boost)
        ("cairo" ,cairo)
        ("rmath-standalone" ,rmath-standalone)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-fonts-cm
-                                        texlive-fonts-amsfonts
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-cm
+                                        texlive-amsfonts
 
                                         texlive-latex-doi
                                         texlive-latex-examplep
@@ -5586,9 +5542,11 @@ predicts the locations of structural units in the sequences.")
          (add-after 'install 'wrap-programs
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((path (getenv "PATH"))
-                   (out (assoc-ref outputs "out")))
+                   (out (assoc-ref outputs "out"))
+                   (guile (search-input-file inputs "bin/guile")))
                (for-each (lambda (script)
-                           (wrap-script script `("PATH" ":" prefix (,path))))
+                           (wrap-script script #:guile guile
+                                        `("PATH" ":" prefix (,path))))
                          (cons (string-append out "/bin/proteinortho")
                                (find-files out "\\.(pl|py)$"))))
              #t)))))
@@ -6629,25 +6587,6 @@ complexity samples.")
         (base32
          "148vcb7w2wr6a4w6vs2bsxanbqibxfk490zbcbg4m61s8669zdjx"))))
     (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Tests must be run after installation, as the "screed" command does
-         ;; not exist right after building.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append out "/lib/python"
-                                      (string-take (string-take-right
-                                                    (assoc-ref inputs "python")
-                                                    5) 3)
-                                      "/site-packages:"
-                                      (getenv "PYTHONPATH")))
-               (setenv "PATH" (string-append out "/bin:" (getenv "PATH"))))
-             (invoke "python" "setup.py" "test")
-             #t)))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
@@ -7750,10 +7689,11 @@ experience substantial biological insertions and deletions.")
          (delete 'configure)
          (delete 'build)
          (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (scripts (find-files "." "prinseq.*.pl")))
+                    (scripts (find-files "." "prinseq.*.pl"))
+                    (guile (search-input-file "bin/guile")))
                (substitute* scripts
                  (("\"perl -pe")
                   (string-append "\"" (which "perl") " -pe")))
@@ -7761,6 +7701,7 @@ experience substantial biological insertions and deletions.")
                            (chmod file #o555)
                            (install-file file bin)
                            (wrap-script (string-append bin "/" (basename file))
+                                        #:guile guile
                                         `("PERL5LIB" ":" prefix
                                           (,(getenv "PERL5LIB")))))
                          scripts)))))))
@@ -8854,7 +8795,8 @@ matplotlib.use('Agg')
 " line)))
                ;; Make sure GESS has all modules in its path
                (wrap-script (string-append target "GESS.py")
-                 `("PYTHONPATH" ":" = (,target ,(getenv "PYTHONPATH"))))
+                 #:guile (search-input-file inputs "bin/guile")
+                 `("GUIX_PYTHONPATH" ":" = (,target ,(getenv "GUIX_PYTHONPATH"))))
                (mkdir-p bin)
                (symlink (string-append target "GESS.py")
                         (string-append bin "GESS.py"))
@@ -9793,11 +9735,7 @@ variational inference.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
-             (invoke "pytest" "tests")
-             #t)))))
+             (invoke "pytest" "tests"))))))
     (propagated-inputs
      `(("python-h5py" ,python-h5py)
        ("python-numpy" ,python-numpy)
@@ -11278,11 +11216,11 @@ conversions, region filtering, FASTA sequence extraction and more.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (for-each (lambda (script)
                              (install-file script bin)
                              (wrap-program (string-append bin "/" script)
-                               `("PYTHONPATH" ":" prefix (,path))))
+                               `("GUIX_PYTHONPATH" ":" prefix (,path))))
                            '("cmp_bed.py"
                              "find_circ.py"
                              "maxlength.py"
@@ -11406,8 +11344,7 @@ implementation differs in these ways:
              (setenv "PYTHONPATH"
                      (string-append (getcwd) ":"
                                     (getenv "PYTHONPATH")))
-             (invoke "pytest")
-             #t)))))
+             (invoke "pytest"))))))
     (propagated-inputs
      `(("python-anndata" ,python-anndata)
        ("python-h5py" ,python-h5py)
@@ -12460,10 +12397,10 @@ datasets.")
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
-                      (path (getenv "PYTHONPATH")))
+                      (path (getenv "GUIX_PYTHONPATH")))
                  (wrap-program (string-append out
                                               "/share/filtlong/scripts/histogram.py")
-                   `("PYTHONPATH" ":" prefix (,path))))
+                   `("GUIX_PYTHONPATH" ":" prefix (,path))))
                #t))
            (add-before 'check 'patch-tests
              (lambda _
@@ -12535,16 +12472,18 @@ choosing which reads pass the filter.")
                            (find-files "scripts" ".*"))
                  #t)))
            (add-after 'install 'wrap-programs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((pythonpath (getenv "PYTHONPATH"))
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((pythonpath (getenv "GUIX_PYTHONPATH"))
                      (perl5lib (getenv "PERL5LIB"))
                      (scripts (string-append (assoc-ref outputs "out")
-                                             "/share/nanopolish/scripts")))
+                                             "/share/nanopolish/scripts"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each (lambda (file)
-                             (wrap-program file `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             (wrap-program file `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                            (find-files scripts "\\.py"))
                  (for-each (lambda (file)
-                             (wrap-script file `("PERL5LIB" ":" prefix (,perl5lib))))
+                             (wrap-script file #:guile guile
+                                          `("PERL5LIB" ":" prefix (,perl5lib))))
                            (find-files scripts "\\.pl"))))))))
       (inputs
        `(("guile" ,guile-3.0) ; for wrappers
@@ -12758,7 +12697,7 @@ to an artifact/contaminant file.")
      `(("openmpi" ,openmpi)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-graphics
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-latex-graphics
                                         texlive-latex-hyperref)))))
     (home-page "https://www.ebi.ac.uk/~zerbino/velvet/")
     (synopsis "Nucleic acid sequence assembler for very short reads")
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
index 4c6da7d9b7..252cd56c15 100644
--- a/gnu/packages/bison.scm
+++ b/gnu/packages/bison.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2015, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
@@ -33,7 +33,7 @@
 (define-public bison
   (package
     (name "bison")
-    (version "3.5.3")
+    (version "3.7.6")
     (source
      (origin
       (method url-fetch)
@@ -41,7 +41,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1i57hbczvr8674z73775jxdd3y59qggs5lmfd60gmwm5i1gmpy1b"))))
+        "1kzkxrd3z4262k2sbxmyh9k5g5r2lakw0gv44l2hb4i1wbhqrmk7"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Building in parallel on many-core systems may cause an error such as
@@ -68,17 +68,6 @@ simple tools through complex programming languages.
 Bison also provides an implementation of @command{yacc}, as specified by POSIX.")
     (license gpl3+)))
 
-(define-public bison-3.6
-  (package
-    (inherit bison)
-    (version "3.6.3")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/bison/bison-" version ".tar.xz"))
-      (sha256
-       (base32 "0gdpnjh6ra9xa9vj6hzjdf0c04x4pjyy8vssm3qdb7fya4v7knq6"))))))
-
 (define-public bison-3.0
   (package
     (inherit bison)
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index e05a3c32fe..14b6734ed7 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -8,12 +8,14 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
@@ -65,21 +67,15 @@
 (define-public boost
   (package
     (name "boost")
-    (version "1.72.0")
+    (version "1.76.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://boostorg.jfrog.io/artifactory/main/release/"
                                   version "/source/boost_"
                                   (version-with-underscores version) ".tar.bz2"))
-              (patches
-               (list (boost-patch
-                      ;; 1.72.0 was released with a faulty coroutine submodule:
-                      ;; <https://github.com/boostorg/coroutine/issues/46>.
-                      "0001-revert-cease-dependence-on-range.patch" version
-                      "1zcqxzh56m1s635wqwk15j3zcs2gmjvjy2f0hid7i78s4pgm0yfs")))
               (sha256
                (base32
-                "08h7cv61fd0lzb4z50xanfqn0pdgvizjrpd1kcdgj725pisb5jar"))))
+                "0hcc661savk32hx65997p0ss1awj6ala4cmz4w7lbi42x6k7nfgh"))))
     (build-system gnu-build-system)
     (inputs `(("icu4c" ,icu4c)
               ("zlib" ,zlib)))
@@ -87,7 +83,7 @@
      `(("perl" ,perl)
        ,@(if (%current-target-system)
              '()
-             `(("python" ,python-wrapper)))
+             `(("python" ,python-minimal-wrapper)))
        ("tcsh" ,tcsh)))
     (arguments
      `(#:imported-modules ((guix build python-build-system)
@@ -128,8 +124,7 @@
                    (out (assoc-ref outputs "out")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
-                              "tools/build/src/engine/execunix.cpp"
-                              "tools/build/src/engine/Jambase")
+                              "tools/build/src/engine/execunix.cpp")
                  (("/bin/sh") (which "sh")))
 
                (setenv "SHELL" (which "sh"))
@@ -144,13 +139,9 @@
                      '())
 
                ;; Change an #ifdef __MACH__ that really targets macOS.
-               ;; TODO: Inline this on the next rebuild cycle.
-               ,@(if (hurd-target?)
-                     '((substitute* "boost/test/utils/timer.hpp"
-                         (("defined\\(__MACH__\\)")
-                          "(defined __MACH__ && !defined __GNU__)"))
-                       #t)
-                     '())
+               (substitute* "boost/test/utils/timer.hpp"
+                 (("defined\\(__MACH__\\)")
+                  "(defined __MACH__ && !defined __GNU__)"))
 
                (invoke "./bootstrap.sh"
                        (string-append "--prefix=" out)
@@ -288,13 +279,6 @@ across a broad spectrum of applications.")
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "./b2" "install" make-flags))))))))
 
-(define-public boost-with-python2
-  (package/inherit boost
-    (name "boost-python2")
-    (native-inputs
-     `(("python" ,python-2)
-       ,@(alist-delete "python" (package-native-inputs boost))))))
-
 (define-public boost-with-python3
   (deprecated-package "boost-with-python3" boost))
 
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c598cedc0a..5a8028a465 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -32,11 +32,13 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module ((guix store)
-                #:select (run-with-store add-to-store add-text-to-store))
+                #:select (%store-monad interned-file text-file store-lift))
   #:use-module ((guix derivations)
-                #:select (derivation derivation-input derivation->output-path))
-  #:use-module ((guix utils) #:select (gnu-triplet->nix-system))
+                #:select (raw-derivation derivation-input derivation->output-path))
+  #:use-module (guix utils)
+  #:use-module ((guix build utils) #:select (elf-file?))
   #:use-module ((guix gexp) #:select (lower-object))
+  #:use-module (guix monads)
   #:use-module (guix memoization)
   #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
@@ -89,6 +91,15 @@
       ,(base32 "1j51gv08sfg277yxj73xd564wjq3f8xwd6s9rbcg8v9gms47m4cx"))
      ("xz"
       ,(base32 "1d779rwsrasphg5g3r37qppcqy3p7ay1jb1y83w7x4i3qsc7zjy2")))
+    ("powerpc-linux"
+     ("bash"
+      ,(base32 "0hwlw5lcyjzadprf5fm0cv4zb6jw667g9amnmhq0lbixasy7j72j"))
+     ("mkdir"
+      ,(base32 "12lfwh5p8pp06250wgi9mdvjv1jdfpd5xpmvfc0616aj0xqh09hp"))
+     ("tar"
+      ,(base32 "00sbmwl8qh6alxv9mw4hvj1j4yipwmw5mrw6qad8bi2pr7ya5386"))
+     ("xz"
+      ,(base32 "0hi47y6zh5zz137i59l5ibw92x6g54zn7ris1b1ym9rvavsasg7b")))
     ("armhf-linux"
      ("bash"
       ,(base32 "0s6f1s26g4dsrrkl39zblvwpxmbzi6n9mgqf6vxsqz42gik6bgyn"))
@@ -139,6 +150,7 @@
   ;; This is where the bootstrap executables come from.
   '("https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/packages/bootstrap/"
     "https://alpha.gnu.org/gnu/guix/bootstrap/"
+    "http://flashner.co.il/guix/bootstrap/"
     "http://lilypond.org/janneke/guix/"))
 
 (define (bootstrap-executable-file-name system program)
@@ -146,6 +158,7 @@
   (match system
     ("powerpc64le-linux" (string-append system "/20210106/" program))
     ("i586-gnu" (string-append system "/20200326/" program))
+    ("powerpc-linux" (string-append system "/20200923/bin/" program))
     (_ (string-append system "/" program
                       "?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
 
@@ -341,6 +354,8 @@ or false to signal an error."
                  (match system
                    ("aarch64-linux"
                     "/20170217/guile-2.0.14.tar.xz")
+                   ("powerpc-linux"
+                    "/20200923/guile-2.0.14.tar.xz")
                    ("armhf-linux"
                     "/20150101/guile-2.0.11.tar.xz")
                    ("i586-gnu"
@@ -366,7 +381,9 @@ or false to signal an error."
     ("aarch64-linux"
      (base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))
     ("i586-gnu"
-     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))))
+     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
+    ("powerpc-linux"
+     (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))))
 
 (define (bootstrap-guile-origin system)
   "Return an <origin> object for the Guile tarball of SYSTEM."
@@ -376,59 +393,58 @@ or false to signal an error."
               %bootstrap-base-urls))
     (sha256 (bootstrap-guile-hash system))))
 
-(define (download-bootstrap-guile store system)
+(define (download-bootstrap-guile system)
   "Return a derivation that downloads the bootstrap Guile tarball for SYSTEM."
   (let* ((path (bootstrap-guile-url-path system))
          (base (basename path))
          (urls (map (cut string-append <> path) %bootstrap-base-urls)))
-    (run-with-store store
-      (url-fetch urls 'sha256 (bootstrap-guile-hash system)
-                 #:system system))))
+    (url-fetch urls 'sha256 (bootstrap-guile-hash system)
+               #:system system)))
 
-(define* (raw-build store name inputs
+(define* (raw-build name inputs
                     #:key outputs system search-paths
                     #:allow-other-keys)
   (define (->store file)
-    (run-with-store store
-      (lower-object (bootstrap-executable file system)
-                    system)))
-
-  (let* ((tar   (->store "tar"))
-         (xz    (->store "xz"))
-         (mkdir (->store "mkdir"))
-         (bash  (->store "bash"))
-         (guile (download-bootstrap-guile store system))
-         ;; The following code, run by the bootstrap guile after it is
-         ;; unpacked, creates a wrapper for itself to set its load path.
-         ;; This replaces the previous non-portable method based on
-         ;; reading the /proc/self/exe symlink.
-         (make-guile-wrapper
-          '(begin
-             (use-modules (ice-9 match))
-             (match (command-line)
-               ((_ out bash)
-                (let ((bin-dir    (string-append out "/bin"))
-                      (guile      (string-append out "/bin/guile"))
-                      (guile-real (string-append out "/bin/.guile-real"))
-                      ;; We must avoid using a bare dollar sign in this code,
-                      ;; because it would be interpreted by the shell.
-                      (dollar     (string (integer->char 36))))
-                  (chmod bin-dir #o755)
-                  (rename-file guile guile-real)
-                  (call-with-output-file guile
-                    (lambda (p)
-                      (format p "\
+    (lower-object (bootstrap-executable file system)
+                  system))
+
+  (define (make-guile-wrapper bash guile-real)
+    ;; The following code, run by the bootstrap guile after it is unpacked,
+    ;; creates a wrapper for itself to set its load path.  This replaces the
+    ;; previous non-portable method based on reading the /proc/self/exe
+    ;; symlink.
+    '(begin
+       (use-modules (ice-9 match))
+       (match (command-line)
+         ((_ out bash)
+          (let ((bin-dir    (string-append out "/bin"))
+                (guile      (string-append out "/bin/guile"))
+                (guile-real (string-append out "/bin/.guile-real"))
+                ;; We must avoid using a bare dollar sign in this code,
+                ;; because it would be interpreted by the shell.
+                (dollar     (string (integer->char 36))))
+            (chmod bin-dir #o755)
+            (rename-file guile guile-real)
+            (call-with-output-file guile
+              (lambda (p)
+                (format p "\
 #!~a
 export GUILE_SYSTEM_PATH=~a/share/guile/2.0
 export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/2.0/ccache
 exec -a \"~a0\" ~a \"~a@\"\n"
-                              bash out out dollar guile-real dollar)))
-                  (chmod guile   #o555)
-                  (chmod bin-dir #o555))))))
-         (builder
-          (add-text-to-store store
-                             "build-bootstrap-guile.sh"
-                             (format #f "
+                        bash out out dollar guile-real dollar)))
+            (chmod guile   #o555)
+            (chmod bin-dir #o555))))))
+
+  (mlet* %store-monad ((tar   (->store "tar"))
+                       (xz    (->store "xz"))
+                       (mkdir (->store "mkdir"))
+                       (bash  (->store "bash"))
+                       (guile (download-bootstrap-guile system))
+                       (wrapper -> (make-guile-wrapper bash guile))
+                       (builder
+                        (text-file "build-bootstrap-guile.sh"
+                                   (format #f "
 echo \"unpacking bootstrap Guile to '$out'...\"
 ~a $out
 cd $out
@@ -441,19 +457,19 @@ $out/bin/guile -c ~s $out ~a
 
 # Sanity check.
 $out/bin/guile --version~%"
-                                     (derivation->output-path mkdir)
-                                     (derivation->output-path xz)
-                                     (derivation->output-path tar)
-                                     (format #f "~s" make-guile-wrapper)
-                                     (derivation->output-path bash)))))
-    (derivation store name
-                (derivation->output-path bash) `(,builder)
-                #:system system
-                #:inputs (map derivation-input
-                              (list bash mkdir tar xz guile))
-                #:sources (list builder)
-                #:env-vars `(("GUILE_TARBALL"
-                              . ,(derivation->output-path guile))))))
+                                           (derivation->output-path mkdir)
+                                           (derivation->output-path xz)
+                                           (derivation->output-path tar)
+                                           (object->string wrapper)
+                                           (derivation->output-path bash)))))
+    (raw-derivation name
+                    (derivation->output-path bash) `(,builder)
+                    #:system system
+                    #:inputs (map derivation-input
+                                  (list bash mkdir tar xz guile))
+                    #:sources (list builder)
+                    #:env-vars `(("GUILE_TARBALL"
+                                  . ,(derivation->output-path guile))))))
 
 (define* (make-raw-bag name
                        #:key source inputs native-inputs outputs
@@ -500,6 +516,8 @@ $out/bin/guile --version~%"
                                              "/20210106/static-binaries-0-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/static-binaries-0-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/static-binaries.tar.xz")
                                             (_
                                              "/20131110/static-binaries.tar.xz")))
                                      %bootstrap-base-urls))
@@ -523,6 +541,9 @@ $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "17kllqnf3fg79gzy9ansgi801c46yh9c23h4d923plvb0nfm1cfn"))
+                              ("powerpc-linux"
+                               (base32
+                                "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
                               ("mips64el-linux"
                                (base32
                                 "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -573,6 +594,8 @@ $out/bin/guile --version~%"
                                              "/20210106/binutils-static-stripped-2.34-powerpc64le-linux-gnu.tar.xz")
                                             ("i586-gnu"
                                              "/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz")
+                                            ("powerpc-linux"
+                                             "/20200923/binutils-2.35.1.tar.xz")
                                             (_
                                              "/20131110/binutils-2.23.2.tar.xz")))
                                      %bootstrap-base-urls))
@@ -596,6 +619,9 @@ $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
+                              ("powerpc-linux"
+                               (base32
+                                "0asbg1c4avkrvh057mx0942xwddd136jni382zqsxzn79ls42yq8"))
                               ("mips64el-linux"
                                (base32
                                 "1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -653,6 +679,8 @@ $out/bin/guile --version~%"
                                        "/20210106/glibc-stripped-2.31-powerpc64le-linux-gnu.tar.xz")
                                       ("i586-gnu"
                                        "/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz")
+                                      ("powerpc-linux"
+                                       "/20200923/glibc-2.32.tar.xz")
                                       (_
                                        "/20131110/glibc-2.18.tar.xz")))
                                %bootstrap-base-urls))
@@ -676,6 +704,9 @@ $out/bin/guile --version~%"
                         ("i586-gnu"
                          (base32
                           "14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
+                        ("powerpc-linux"
+                         (base32
+                          "0smmssyjrlk5cvx49586smmk81gkwff0i6r91n4rir4jm6ba25sb"))
                         ("mips64el-linux"
                          (base32
                           "0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -749,6 +780,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                                         "/20210106/gcc-stripped-5.5.0-powerpc64le-linux-gnu.tar.xz")
                                        ("i586-gnu"
                                         "/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz")
+                                       ("powerpc-linux"
+                                        "/20200923/gcc-5.5.0.tar.xz")
                                        (_
                                         "/20131110/gcc-4.8.2.tar.xz")))
                                 %bootstrap-base-urls))
@@ -772,14 +805,20 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                          ("i586-gnu"
                           (base32
                            "1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
+                         ("powerpc-linux"
+                          (base32
+                           "1p7df3yixhm87dw5sccc6yn1i9db1r9hnmsg87wq5xi4rfmirq7w"))
                          ("mips64el-linux"
                           (base32
                            "1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
     (native-search-paths
      (list (search-path-specification
-            (variable "CPATH")
+            (variable "C_INCLUDE_PATH")
             (files '("include")))
            (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
             (variable "LIBRARY_PATH")
             (files '("lib" "lib64")))))
     (synopsis "Bootstrap binaries of the GNU Compiler Collection")
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index d2fb9e05df..6285ecabf3 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -264,7 +264,7 @@ files and generates build instructions for the Ninja build system.")
 (define-public meson
   (package
     (name "meson")
-    (version "0.53.2")
+    (version "0.58.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -272,12 +272,11 @@ files and generates build instructions for the Ninja build system.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "07y2hh9dfn1m9g4bsy49nbn3vdmd0b2iwr8bxg19fhqq6c7q73ry"))))
+                "0padn0ykwz8azqiwkhi8p97bl742y8lsjbv0wpqpkkrgcvda6i1i"))))
     (build-system python-build-system)
     (arguments
-     `(;; FIXME: Tests require many additional inputs, a fix for the RUNPATH
-       ;; patch in meson-for-build, and patching many hard-coded file system
-       ;; locations in "run_unittests.py".
+     `(;; FIXME: Tests require many additional inputs and patching many
+       ;; hard-coded file system locations in "run_unittests.py".
        #:tests? #f
        #:phases (modify-phases %standard-phases
                   ;; Meson calls the various executables in out/bin through the
@@ -296,45 +295,6 @@ files}, are written in a custom domain-specific language (@dfn{DSL}) that
 resembles Python.")
     (license license:asl2.0)))
 
-;; Added temporarily for packages that need it.
-;; TODO: Remove when core-updates is merged.
-(define-public meson-0.55
-  (package
-    (inherit meson)
-    (version "0.55.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mesonbuild/meson/"
-                                  "releases/download/" version  "/meson-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1070kjiirxxdfppmrhi3wsc6rykay1zlciqrzayjhjg0hkw42mrv"))))))
-
-(define-public meson-next
-  (package
-    (inherit meson)
-    (version "0.57.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mesonbuild/meson/"
-                                  "releases/download/" version  "/meson-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1iac7p99zfgkznq4qlnkk7b8xwwlilcrnkf33sczm56yqnqyg0rs"))))))
-
-(define-public meson-for-build
-  (package
-    (inherit meson)
-    (name "meson-for-build")
-    (source (origin
-              (inherit (package-source meson))
-              (patches (search-patches "meson-for-build-rpath.patch"))))
-
-    ;; People should probably install "meson", not "meson-for-build".
-    (properties `((hidden? . #t)))))
-
 (define-public premake4
   (package
     (name "premake")
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 0dff4fc362..360826ec85 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -116,7 +116,7 @@ the <tz.h> library for handling time zones and leap seconds.")
 (define-public libical
   (package
     (name "libical")
-    (version "3.0.8")
+    (version "3.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -124,7 +124,7 @@ the <tz.h> library for handling time zones and leap seconds.")
                     version "/libical-" version ".tar.gz"))
               (sha256
                (base32
-                "0vr8s7hn8204lyc4ys5bs3j5qss4lmc9ffly2m1a59avyz5cmzh9"))))
+                "1d1nqcfilb4k8bc5x85fhnd26l1ski58wpk2nmds6mlxrzkb6czr"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; test suite appears broken
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 443d7455a7..de72cc0856 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -1043,7 +1043,7 @@ drive and disc (including CD-ROMs and DVD-ROMs).")
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/cdemu")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "https://cdemu.sourceforge.io/")
     (synopsis "Command-line client for controlling cdemu-daemon")
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index e15a9660df..37e3fa6786 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -4,6 +4,8 @@
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -24,12 +26,14 @@
 (define-module (gnu packages certs)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
+  #:use-module (gnu packages nss)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages perl)
@@ -83,51 +87,43 @@ port forwarding to your local machine.")
       (license license:expat))))
 
 (define certdata2pem
-  (package
-    (name "certdata2pem")
-    (version "2013")
-    (source
-     (origin
-      (method url-fetch)
-        (uri
-          "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/plain/certdata2pem.py?id=053dde8a2f5901e97028a58bf54e7d0ef8095a54")
-        (file-name "certdata2pem.py")
-        (sha256
-          (base32
-            "0zscrm41gnsf14zvlkxhy00h3dmgidyz645ldpda3y3vabnwv8dx"))))
-   (build-system trivial-build-system)
-   (inputs
-     `(("python" ,python-2)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-        (begin
-          (use-modules (guix build utils))
-          (let ((bin (string-append %output "/bin")))
-            (copy-file (assoc-ref %build-inputs "source") "certdata2pem.py")
-            (chmod "certdata2pem.py" #o555)
-            (substitute* "certdata2pem.py"
-              (("/usr/bin/python")
-               (string-append (assoc-ref %build-inputs "python")
-                              "/bin/python"))
-              ;; Use the file extension .pem instead of .crt.
-              (("crt") "pem"))
-            (mkdir-p bin)
-            (copy-file "certdata2pem.py"
-                       (string-append bin "/certdata2pem.py"))
-            #t))))
-   (synopsis "Python script to extract .pem data from certificate collection")
-   (description
-    "certdata2pem.py is a Python script to transform X.509 certificate
-\"source code\" as contained, for example, in the Mozilla sources, into
-.pem formatted certificates.")
-   (license license:gpl2+)
-   (home-page "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/")))
+  (let ((revision "1")
+        (commit "4c576f350f44186d439179f63d5be19f710a73f5"))
+    (package
+      (name "certdata2pem")
+      (version "0.0.0")                   ;no version
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://raw.githubusercontent.com/sabotage-linux/sabotage/"
+                      commit "/KEEP/certdata2pem.c"))
+                (sha256
+                 (base32
+                  "1rywp29q4l1cs2baplkbcravxqs4kw2cys4yifhfznbc210pskq6"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (delete 'configure)
+                    (replace 'build
+                      (lambda _
+                        (invoke ,(cc-for-target) "certdata2pem.c"
+                                "-o" "certdata2pem")))
+                    (delete 'check)     ;no test suite
+                    (replace 'install
+                      (lambda* (#:key outputs #:allow-other-keys)
+                        (let ((out (assoc-ref outputs "out")))
+                          (install-file "certdata2pem"
+                                        (string-append out "/bin"))))))))
+      (home-page "https://github.com/sabotage-linux/")
+      (synopsis "Utility to split TLS certificates data into multiple PEM files")
+      (description "This is a C version of the certdata2pem Python utility
+that was originally contributed to Debian.")
+      (license license:isc))))
 
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.59")
+    (version "3.67")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -138,56 +134,35 @@ port forwarding to your local machine.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))))
+                "0zyfi27lbdz1bmk9dmsivcya4phx25rzlxqcnjab69yd928rlm7n"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
      `(("certdata2pem" ,certdata2pem)
-       ("openssl" ,openssl)
-       ("perl" ,perl)))                           ;for OpenSSL's 'c_rehash'
+       ("openssl" ,openssl)))
     (inputs '())
     (propagated-inputs '())
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (rnrs io ports)
-                  (srfi srfi-26)
-                  (ice-9 regex))
+                  (srfi srfi-26))
        #:phases
        (modify-phases
            (map (cut assq <> %standard-phases)
                 '(set-paths install-locale unpack))
          (add-after 'unpack 'install
            (lambda _
-             (let ((certsdir (string-append %output "/etc/ssl/certs/"))
-                   (trusted-rx (make-regexp "^# openssl-trust=[a-zA-Z]"
-                                            regexp/newline)))
-
-               (define (maybe-install-cert file)
-                 (let ((cert (call-with-input-file file get-string-all)))
-                   (when (regexp-exec trusted-rx cert)
-                     (call-with-output-file
-                         (string-append certsdir file)
-                       (cut display cert <>)))))
-
-               (mkdir-p certsdir)
+             (let ((certsdir (string-append %output "/etc/ssl/certs/")))
                (with-directory-excursion "nss/lib/ckfw/builtins/"
-                 ;; extract single certificates from blob
-                 (invoke "certdata2pem.py" "certdata.txt")
-                 ;; copy selected .pem files into the output
-                 (for-each maybe-install-cert
-                           (find-files "." ".*\\.pem")))
-
-               (with-directory-excursion certsdir
-                 ;; create symbolic links for and by openssl
-                 ;; Strangely, the call (system* "c_rehash" certsdir)
-                 ;; from inside the build dir fails with
-                 ;; "Usage error; try -help."
-                 ;; This looks like a bug in openssl-1.0.2, but we can also
-                 ;; switch into the target directory.
-                 (invoke "c_rehash" "."))
-               #t))))))
-
+                 (unless (file-exists? "blacklist.txt")
+                   (call-with-output-file "blacklist.txt" (const #t)))
+                 ;; Extract selected single certificates from blob.
+                 (invoke "certdata2pem")
+                 ;; Copy .crt files into the output.
+                 (for-each (cut install-file <> certsdir)
+                           (find-files "." ".*\\.crt$")))
+               (invoke "openssl" "rehash" certsdir)))))))
     (synopsis "CA certificates from Mozilla")
     (description
      "This package provides certificates for Certification Authorities (CA)
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 637449351a..fbdc46cd4a 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -25,7 +25,7 @@
 ;;; Copyright © 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2015, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
@@ -35,7 +35,7 @@
 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -68,6 +68,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -148,7 +149,27 @@ like Jasmine or Mocha.")
                           version "/check-" version ".tar.gz"))
       (sha256
        (base32
-        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))))
+        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))
+      (patches
+       (list
+        ;; This patch fixes some tests that would otherwise fail on
+        ;; powerpc64le-linux.  Without this patch, the tests make certain
+        ;; assumptions about floating point number precision that are not true
+        ;; on that platform.
+        ;;
+        ;; TODO: Remove this patch when updating to the next check release,
+        ;; since it will be included there.  See:
+        ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47698
+        (origin
+          (method url-fetch)
+          (uri
+           (string-append "https://github.com/libcheck/check/commit/"
+                          "4fbe702fa4f35bee8a90512f9f59d1441c4ae82e.patch"))
+          (file-name (string-append name
+                                    "-fix-test-precision-for-ppc.patch"))
+          (sha256
+           (base32
+            "04qg1p9afdd6453k18qskazrvscysdcjz9j6w4i6p5x4xyma19v6")))))))
     (build-system gnu-build-system)
     (home-page "https://libcheck.github.io/check/")
     (synopsis "Unit test framework for C")
@@ -920,39 +941,40 @@ standard library.")
 (define-public python-pytest
   (package
     (name "python-pytest")
-    (version "5.3.5")
+    (version "6.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest" version))
        (sha256
         (base32
-         "139i9cjhrv5aici3skq8iihvfb3lq0d8xb5j7qycr2hlk8cfjpqd"))))
+         "01n3jny7m05r6g7gphbkj2xdms75ql93x69crd377hlvi6qikr36"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key (tests? #t) #:allow-other-keys)
+             (setenv "TERM" "dumb")     ;attempt disabling markup tests
              (if tests?
                  (invoke "pytest" "-vv" "-k"
                          (string-append
-                          ;; These tests involve the /usr directory, and fails.
-                          "not test_remove_dir_prefix"
-                          " and not test_argcomplete"
-                          ;; This test tries to override PYTHONPATH, and
-                          ;; subsequently fails to locate the test libraries.
-                          " and not test_collection"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                          ;; This test involve the /usr directory, and fails.
+                          " not test_argcomplete"
+                          ;; These test do not honor the isatty detection and
+                          ;; fail.
+                          " and not test_code_highlight"
+                          " and not test_color_yes"))
+                 (format #t "test suite not run~%")))))))
     (propagated-inputs
-     `(("python-atomicwrites" ,python-atomicwrites)
-       ("python-attrs" ,python-attrs-bootstrap)
+     `(("python-attrs" ,python-attrs-bootstrap)
+       ("python-iniconfig" ,python-iniconfig)
        ("python-more-itertools" ,python-more-itertools)
        ("python-packaging" ,python-packaging-bootstrap)
        ("python-pluggy" ,python-pluggy)
        ("python-py" ,python-py)
        ("python-six" ,python-six-bootstrap)
+       ("python-toml" ,python-toml)
        ("python-wcwidth" ,python-wcwidth)))
     (native-inputs
      `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
@@ -962,6 +984,7 @@ standard library.")
        ("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest-bootstrap)
        ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-toml" ,python-toml)
        ("python-xmlschema" ,python-xmlschema)))
     (home-page "https://docs.pytest.org/en/latest/")
     (synopsis "Python testing library")
@@ -972,45 +995,6 @@ and many external plugins.")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-pytest))))))
 
-(define-public python-pytest-6
-  (package
-    (inherit (strip-python2-variant python-pytest))
-    (version "6.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "pytest" version))
-       (sha256
-        (base32
-         "0gl2sdm322vzmsh5k4f8kj9raiq2y7kdinnca4m45ifvii5fk9y0"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
-             (setenv "TERM" "dumb")     ;attempt disabling markup tests
-             (if tests?
-                 (invoke "pytest" "-vv" "-k"
-                         (string-append
-                          ;; This test involve the /usr directory, and fails.
-                          " not test_argcomplete"
-                          ;; These test do not honor the isatty detection and
-                          ;; fail.
-                          " and not test_code_highlight"
-                          " and not test_color_yes"))
-                 (format #t "test suite not run~%"))
-             #t)))))
-    (propagated-inputs
-     (append (alist-delete "python-py"
-                           (package-propagated-inputs python-pytest))
-             `(("python-py" ,python-py-next))))
-    (native-inputs
-     (append (alist-delete "python-pytest"
-                           (package-native-inputs python-pytest))
-             `(("python-pytest" ,python-pytest-6-bootstrap)
-               ("python-toml" ,python-toml)
-               ("python-iniconfig" ,python-iniconfig))))))
-
 ;; Pytest 4.x are the last versions that support Python 2.
 (define-public python2-pytest
   (package
@@ -1051,19 +1035,12 @@ and many external plugins.")
   (package
     (inherit (strip-python2-variant python-pytest))
     (name "python-pytest-bootstrap")
-    (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (native-inputs `(("python-iniconfig" ,python-iniconfig)
+                     ("python-setuptools-scm" ,python-setuptools-scm)
+                     ("python-toml" ,python-toml)))
     (arguments `(#:tests? #f))
     (properties `((python2-variant . ,(delay python2-pytest-bootstrap))))))
 
-(define-public python-pytest-6-bootstrap
-  (package
-    (inherit (strip-python2-variant python-pytest-6))
-    (name "python-pytest-bootstrap")
-    (arguments `(#:tests? #f))
-    (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-toml" ,python-toml)))))
-
 (define-public python2-pytest-bootstrap
   (hidden-package
    (package/inherit
@@ -1286,20 +1263,25 @@ same arguments.")
            #t))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ;FIXME: Some tests are failing.
-       ;; #:phases
-       ;; (modify-phases %standard-phases
-       ;;   (delete 'check)
-       ;;   (add-after 'install 'check
-       ;;     (lambda* (#:key inputs outputs #:allow-other-keys)
-       ;;       (add-installed-pythonpath inputs outputs)
-       ;;       (zero? (system* "py.test" "-v")))))
+     '(#:tests? #f ; Lots of tests fail.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setup-py
+           (lambda _
+             ;; Relax pytest requirement.
+             (substitute* "setup.py"
+               (("pytest>=6\\.0\\.0") "pytest"))))
+         (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "py.test" "-v")))))))
     (native-inputs
      `(("python-setuptools-scm" ,python-setuptools-scm)))
     (propagated-inputs
      `(("python-execnet" ,python-execnet)
        ("python-pytest" ,python-pytest)
-       ("python-py" ,python-py)))
+       ("python-py" ,python-py)
+       ("python-pytest-forked" ,python-pytest-forked)))
     (home-page
      "https://github.com/pytest-dev/pytest-xdist")
     (synopsis
@@ -1349,19 +1331,18 @@ timeout has been exceeded.")
 (define-public python-pytest-forked
   (package
     (name "python-pytest-forked")
-    (version "1.1.3")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-forked" version))
        (sha256
         (base32
-         "000i4q7my2fq4l49n8idx2c812dql97qv6qpm2vhrrn9v6g6j18q"))))
+         "1jip9qh115zcg1rn7irqx5qycb9k248d5imy86f566md01zaraba"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-pytest" ,python-pytest)))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)))
+     `(("python-pytest" ,python-pytest)
+       ("python-setuptools-scm" ,python-setuptools-scm)))
     (home-page
      "https://github.com/pytest-dev/pytest-forked")
     (synopsis
@@ -1577,7 +1558,12 @@ protocol.")))
                (base32
                 "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f))
+    (arguments
+      `(#:tests? #f
+        #:phases
+         (modify-phases %standard-phases
+           ;; Package is not loadable on its own at this stage.
+           (delete 'sanity-check))))
     (propagated-inputs
      `(("python-pbr-minimal" ,python-pbr-minimal)
        ("python-six" ,python-six)))
@@ -1682,13 +1668,13 @@ executed.")
 (define-public python-pytest-asyncio
   (package
     (name "python-pytest-asyncio")
-    (version "0.10.0")
+    (version "0.15.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-asyncio" version))
        (sha256
-        (base32 "1bysy4nii13bm7h345wxf8fxcjhab7l374pqdv7vwv3izl053b4z"))))
+        (base32 "0vrzsrg3j1cfd57m0b3r5xf87rslgcs42jya346mdg9bc6wwwr15"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-coverage" ,python-coverage)
@@ -1949,13 +1935,13 @@ instantly.")
 (define-public python-hypothesis
   (package
     (name "python-hypothesis")
-    (version "5.4.1")
+    (version "6.0.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0zn09bn6hadk4vxl6jy8bkjr5fz8mrhin3z46w7pq5qgbaycr89p"))))
+                "0wj7ip779naf2n076nylf2gi0sjz68z1ir9d9r2rgs7br18naqdf"))))
     (build-system python-build-system)
     (arguments
      ;; XXX: Tests are not distributed with the PyPI archive.
@@ -1972,18 +1958,6 @@ seamlessly into your existing Python unit testing work flow.")
     (license license:mpl2.0)
     (properties `((python2-variant . ,(delay python2-hypothesis))))))
 
-(define-public python-hypothesis-5.23
-  (package
-    (inherit python-hypothesis)
-    (version "5.23.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "hypothesis" version))
-              (sha256
-               (base32
-                "0sy1v6nyxg4rjcf3rlr8nalb7wqd9nccpb2lzkchbj5an13ysf1h"))))
-    (home-page "https://github.com/HypothesisWorks/hypothesis")))
-
 ;; This is the last version of Hypothesis that supports Python 2.
 (define-public python2-hypothesis
   (let ((hypothesis (package-with-python2
@@ -2003,19 +1977,19 @@ seamlessly into your existing Python unit testing work flow.")
 (define-public python-hypothesmith
   (package
     (name "python-hypothesmith")
-    (version "0.1.2")
+    (version "0.1.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hypothesmith" version))
        (sha256
         (base32
-         "09331sspknv459xcyn1k0lx5flqlc6gmnwp9370pfvg4kg1zmss6"))))
+         "02j101m5grjrbvrgjap17jsxd1hgawkylmyswcn33vf42mxh9zzr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-hypothesis" ,python-hypothesis-5.23)
+     `(("python-hypothesis" ,python-hypothesis)
        ("python-lark-parser" ,python-lark-parser)
-       ("python-libcst" ,python-libcst)))
+       ("python-libcst" ,python-libcst-minimal)))
     (home-page "https://github.com/Zac-HD/hypothesmith")
     (synopsis "Strategies for generating Python programs")
     (description
@@ -2065,7 +2039,18 @@ failures.")
                 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+     `(#:tests? #f ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-dependencies
+           (lambda _
+             (substitute* "setup.py"
+               (("'pytest-cache', ") ""))))  ; Included in recent pytest
+         (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (add-installed-pythonpath inputs outputs)
+                (invoke "pytest" "-v")))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (propagated-inputs
@@ -2150,7 +2135,7 @@ statements in the module it tests.")
 (define-public python-pylint
   (package
     (name "python-pylint")
-    (version "2.5.3")
+    (version "2.6.0")
     (source
      (origin
        (method git-fetch)
@@ -2159,13 +2144,26 @@ statements in the module it tests.")
              (commit (string-append "pylint-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04cgbh2z1mygar63plzziyz34yg6bdr4i0g63jp256fgnqwb1bi3"))))
+        (base32 "0ws3dz3wm49brnhhfm7v75zq202pwlwfbi3njdd69aqxq912x15z"))))
     (build-system python-build-system)
-    ;; FIXME: Tests are failing since version 2.4.3, see:
-    ;; https://github.com/PyCQA/pylint/issues/3198.
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:tests? #t
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; The following failing tests are skipped (see:
+               ;; https://github.com/PyCQA/pylint/issues/4068).
+               (invoke "pytest" "-k"
+                       (string-append
+                        "not unused_typing_imports "
+                        "and not star_needs_assignment_target_py35 "
+                        "and not regression_property_no_member_2641 "
+                        "and not missing_kwoa_py3"))))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
+       ("python-pytest-benchmark" ,python-pytest-benchmark)
        ("python-pytest-runner" ,python-pytest-runner)
        ("python-tox" ,python-tox)))
     (propagated-inputs
@@ -2361,20 +2359,10 @@ backported from Python 2.7 for Python 2.4+.")
        ("python-pyhamcrest" ,python-pyhamcrest)
        ("python-pytest" ,python-pytest)))
     (propagated-inputs
-     `(("python-importlib-metadata" ,python-importlib-metadata)
-       ("python-six" ,python-six)
-       ("python-parse" ,python-parse)
+     `(("python-parse" ,python-parse)
        ("python-parse-type" ,python-parse-type)))
     (arguments
-     '(#:test-target "behave_test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-library-loading
-           (lambda _
-             ;; Otherwise, tests fail with no module named 'path'
-             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":"
-                                                 (getcwd) "/tasks/_vendor"))
-             #t)))))
+     '(#:test-target "behave_test"))
     (home-page "https://github.com/behave/behave")
     (synopsis "Python behavior-driven development")
     (description
@@ -2613,48 +2601,35 @@ retried.")
   (package-with-python2 python-flaky))
 
 (define-public python-pyhamcrest
-  ;; The latest release was in 2016 and its test suite does not work with recent
-  ;; versions of Pytest.  Just take the master branch for now, which seems stable.
-  (let ((commit "25fdc5f00bdf3084335353bc9247253098ec4cf2")
-        (revision "0"))
-    (package
-      (name "python-pyhamcrest")
-      (version (git-version "1.9.0" revision commit))
-      (source (origin
-                ;; Tests not distributed from pypi release.
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/hamcrest/PyHamcrest")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1miqmhhi68vaix8sqc1lvpvbm27bacffxh5anm5cbfsvk7g9n6f3"))))
-      (native-inputs                    ;all native inputs are for tests
-       `(("python-pytest-cov" ,python-pytest-cov)
-         ("python-mock" ,python-mock)
-         ("python-pytest" ,python-pytest)
-         ("python-hypothesis" ,python-hypothesis)))
-      (propagated-inputs
-       `(("python-six" ,python-six)))
-      (build-system python-build-system)
-      (arguments
-       `(#:phases (modify-phases %standard-phases
-                    (replace 'check
-                      (lambda _
-                        (setenv "PYTHONPATH"
-                                (string-append "build/lib:"
-                                               (getenv "PYTHONPATH")))
-                        (invoke "pytest" "-vv"))))))
-      (home-page "http://hamcrest.org/")
-      (synopsis "Hamcrest matchers for Python")
-      (description
-       "PyHamcrest is a framework for writing matcher objects,
- allowing you to declaratively define \"match\" rules.")
-      (license license:bsd-3))))
-
-(define-public python2-pyhamcrest
-  (package-with-python2 python-pyhamcrest))
+  (package
+    (name "python-pyhamcrest")
+    (version "2.0.2")
+    (source (origin
+              ;; Tests not distributed from pypi release.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/hamcrest/PyHamcrest")
+                    (commit (string-append "V" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05kdzlhs2kvj82pfca13qszszcj6dyrk4b9pbr46x06sq2s4qyls"))))
+    (native-inputs                      ;all native inputs are for tests
+     `(("python-pytest-cov" ,python-pytest-cov)
+       ("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-hypothesis" ,python-hypothesis)))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "pytest" "-vv"))))))
+    (home-page "http://hamcrest.org/")
+    (synopsis "Hamcrest matchers for Python")
+    (description "PyHamcrest is a framework for writing matcher objects,
+allowing you to declaratively define \"match\" rules.")
+    (license license:bsd-3)))
 
 (define-public unittest-cpp
   (package
@@ -2684,7 +2659,7 @@ portable to just about any platform.")
 (define-public libfaketime
   (package
     (name "libfaketime")
-    (version "0.9.8")
+    (version "0.9.9")
     (home-page "https://github.com/wolfcw/libfaketime")
     (source (origin
               (method git-fetch)
@@ -2693,35 +2668,35 @@ portable to just about any platform.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1mfdl82ppgbdvy1ny8mb7xii7p0g7awvn4bn36jb8v4r545slmjc"))
+                "1gi1xciqga5hl2xlk7rc3j8wy47ag97pi7ngmdl6ny1d11b2wn1z"))
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'embed-date-reference
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((coreutils (assoc-ref inputs "coreutils")))
+                        (substitute* "src/faketime.c"
+                          (("\"date\"")
+                           (string-append "\"" coreutils "/bin/date\""))))))
                   (replace 'configure
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
-                        (setenv "CC" "gcc")
+                        (setenv "CC" ,(cc-for-target))
                         (setenv "PREFIX" out)
 
                         ;; XXX: Without this flag, the CLOCK_REALTIME test hangs
                         ;; indefinitely.  See README.packagers for more information.
-                        ;; Try removing this for future versions of libfaketime.
-                        (setenv "FAKETIME_COMPILE_CFLAGS" "-DFORCE_MONOTONIC_FIX")
-
-                        #t)))
+                        (setenv "FAKETIME_COMPILE_CFLAGS" "-DFORCE_MONOTONIC_FIX"))))
                   (add-before 'check 'pre-check
                     (lambda _
                       (substitute* "test/functests/test_exclude_mono.sh"
-                        (("/bin/bash") (which "bash")))
-
-                      ;; Do not fail due to use of 'ftime', which was deprecated in
-                      ;; glibc 2.31.  Remove this for later versions of libfaketime.
-                      (setenv "FAKETIME_COMPILE_CFLAGS" "-Wno-deprecated-declarations")
-                      #t)))
+                        (("/bin/bash") (which "bash"))))))
        #:test-target "test"))
     (native-inputs
      `(("perl" ,perl)))                           ;for tests
+    (inputs
+     `(("coreutils" ,coreutils)))
     (synopsis "Fake the system time for single applications")
     (description
      "The libfaketime library allows users to modify the system time that an
@@ -2824,13 +2799,21 @@ grew out of the @dfn{Vc} project.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-testsuite
+           (lambda _
+             ;; Time difference is larger than expected.
+             (substitute* "pyfakefs/tests/fake_filesystem_unittest_test.py"
+               (("(\\s+)def test_copy_real_file" all indent)
+                (string-append
+                  indent
+                  "@unittest.skip('disabled by guix')\n"
+                  all)))))
          ;; The default test suite does not run these extra tests.
          (add-after 'check 'check-pytest-plugin
            (lambda _
              (invoke
               "python" "-m" "pytest"
-              "pyfakefs/pytest_tests/pytest_plugin_test.py")
-             #t)))))
+              "pyfakefs/pytest_tests/pytest_plugin_test.py"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (build-system python-build-system)
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index 1cd2cde71b..a886e59130 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -114,8 +114,8 @@
        ;; for docs
        ("stex" ,stex)
        ("xorg-rgb" ,xorg-rgb)
-       ("texlive" ,(texlive-union (list texlive-latex-oberdiek
-                                        texlive-generic-epsf)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-latex-oberdiek
+                                             texlive-generic-epsf)))
        ("ghostscript" ,ghostscript)
        ("netpbm" ,netpbm)))
     (native-search-paths
@@ -316,13 +316,13 @@ and 32-bit PowerPC architectures.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("ghostscript" ,ghostscript)
-         ("texlive" ,(texlive-union (list texlive-latex-oberdiek
+         ("texlive" ,(texlive-updmap.cfg (list texlive-latex-oberdiek
                                           texlive-generic-epsf
                                           texlive-metapost
                                           texlive-fonts-charter
-                                          texlive-generic-pdftex
-                                          texlive-context-base
-                                          texlive-fonts-cm
+                                          texlive-pdftex
+                                          texlive-context
+                                          texlive-cm
                                           texlive-tex-plain)))))
       (arguments
        `(#:make-flags (list (string-append "PREFIX=" %output)
@@ -333,12 +333,6 @@ and 32-bit PowerPC architectures.")
                       #:tests? #f        ; no tests
                       #:phases
                       (modify-phases %standard-phases
-                        (add-before 'build 'set-HOME
-                          (lambda _
-                            ;; FIXME: texlive-union does not find the built
-                            ;; metafonts, so it tries to generate them in HOME.
-                            (setenv "HOME" "/tmp")
-                            #t))
                         ;; This package has a custom "bootstrap" script that
                         ;; is meant to be run from the Makefile.
                         (delete 'bootstrap)
@@ -381,7 +375,7 @@ programming in Scheme.")
       (native-inputs
        `(("chez-scheme" ,chez-scheme)
          ("chez-web" ,chez-web)
-         ("texlive" ,(texlive-union (list texlive-generic-pdftex)))))
+         ("texlive" ,(texlive-updmap.cfg (list texlive-pdftex)))))
       (arguments
        `(#:tests? #f              ; no tests
          #:phases
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 0bcde0fad5..3a2e6df207 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -168,7 +168,7 @@
                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))
                  #t))))))
       (inputs
-       `(("guile" ,guile-3.0/libgc-7)
+       `(("guile" ,guile-3.0-latest)
          ("guile-avahi" ,guile-avahi)
          ("guile-fibers" ,guile-fibers)
          ("guile-gcrypt" ,guile-gcrypt)
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 65580c9ff7..68d215da93 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -109,7 +109,6 @@ using the CMake build system.")
               "Source/cmGlobalXCodeGenerator.cxx"
               "Source/cmLocalUnixMakefileGenerator3.cxx"
               "Source/cmExecProgramCommand.cxx"
-              "Utilities/Release/release_cmake.cmake"
               "Tests/CMakeLists.txt"
               "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
           (("/bin/sh") (which "sh")))
@@ -122,20 +121,24 @@ using the CMake build system.")
     ;; This test requires network access.
     "CTestTestUpload"
     ;; This test requires 'ldconfig' which is not available in Guix.
-    "RunCMake.install"))
+    "RunCMake.install"
+    ;; This test fails for unknown reason.
+    "RunCMake.file-GET_RUNTIME_DEPENDENCIES"))
 
 (define %preserved-third-party-files
   '(;; 'Source/cm_getdate.c' includes archive_getdate.c wholesale, so it must
     ;; be available along with the required headers.
     "Utilities/cmlibarchive/libarchive/archive_getdate.c"
-    "Utilities/cmlibarchive/libarchive/archive_getdate.h"))
+    "Utilities/cmlibarchive/libarchive/archive_getdate.h"
+    ;; CMake header wrappers.
+    "Utilities/cm3p"))
 
 ;;; The "bootstrap" CMake.  It is used to build 'cmake-minimal' below, as well
 ;;; as any dependencies that need cmake-build-system.
 (define-public cmake-bootstrap
   (package
     (name "cmake-bootstrap")
-    (version "3.16.5")
+    (version "3.20.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://cmake.org/files/v"
@@ -143,49 +146,7 @@ using the CMake build system.")
                                   "/cmake-" version ".tar.gz"))
               (sha256
                (base32
-                "1z4bb8z6b4dvq5hrvajrf1hyybqay3xybyimf71w1jgcp180nxjz"))
-              (modules '((guix build utils)
-                         (ice-9 ftw)))
-              (snippet
-               `(begin
-                  ;; CMake bundles its dependencies in the "Utilities" directory.
-                  ;; Delete those to ensure the system libraries are used.
-                  (define preserved-files
-                    '(,@%preserved-third-party-files
-                      ;; Use the bundled JsonCpp during bootstrap to work around
-                      ;; a circular dependency.  TODO: JsonCpp can be built with
-                      ;; Meson instead of CMake, but meson-build-system currently
-                      ;; does not support cross-compilation.
-                      "Utilities/cmjsoncpp"
-                      ;; LibUV is required to bootstrap the initial build system.
-                      "Utilities/cmlibuv"))
-
-                  (file-system-fold (lambda (dir stat result)         ;enter?
-                                      (or (string=? "Utilities" dir)  ;init
-                                          ;; The bundled dependencies are
-                                          ;; distinguished by having a "cm"
-                                          ;; prefix to their upstream names.
-                                          (and (string-prefix? "Utilities/cm" dir)
-                                               (not (member dir preserved-files)))))
-                                    (lambda (file stat result)        ;leaf
-                                      (unless (or (member file preserved-files)
-                                                  ;; Preserve top-level files.
-                                                  (string=? "Utilities"
-                                                            (dirname file)))
-                                        (delete-file file)))
-                                    (const #t)                        ;down
-                                    (lambda (dir stat result)         ;up
-                                      (when (equal? (scandir dir) '("." ".."))
-                                        (rmdir dir)))
-                                    (const #t)                        ;skip
-                                    (lambda (file stat errno result)
-                                      (format (current-error-port)
-                                              "warning: failed to delete ~a: ~a~%"
-                                              file (strerror errno)))
-                                    #t
-                                    "Utilities"
-                                    lstat)
-                  #t))
+                "0kjlb7sxbwg8z4027c3jjcmyjh9d36p0r9d4nqxynyaijz5nxkxf"))
               (patches (search-patches "cmake-curl-certificates.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -241,14 +202,13 @@ using the CMake build system.")
              (apply invoke "./configure" configure-flags))))))
     (inputs
      `(("bzip2" ,bzip2)
-       ("curl" ,curl-minimal)
+       ("curl" ,curl)
        ("expat" ,expat)
        ("file" ,file)
        ("libarchive" ,libarchive)
        ,@(if (hurd-target?)
              '()
              `(("libuv" ,libuv)))       ;not supported on the Hurd
-       ("ncurses" ,ncurses)             ;required for ccmake
        ("rhash" ,rhash)
        ("zlib" ,zlib)))
     (native-search-paths
@@ -286,17 +246,41 @@ and workspaces that can be used in the compiler environment of your choice.")
     (name "cmake-minimal")
     (source (origin
               (inherit (package-source cmake-bootstrap))
+              ;; Purge CMakes bundled dependencies as they are no longer needed.
+              (modules '((ice-9 ftw)))
               (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files ',%preserved-third-party-files))
-                          exp))))))
+               `(begin
+                  (define preserved-files ',%preserved-third-party-files)
+
+                  (file-system-fold (lambda (dir stat result)         ;enter?
+                                      (or (string=? "Utilities" dir)  ;init
+                                          ;; The bundled dependencies are
+                                          ;; distinguished by having a "cm"
+                                          ;; prefix to their upstream names.
+                                          (and (string-prefix? "Utilities/cm" dir)
+                                               (not (member dir preserved-files)))))
+                                    (lambda (file stat result)        ;leaf
+                                      (unless (or (member file preserved-files)
+                                                  ;; Preserve top-level files.
+                                                  (string=? "Utilities"
+                                                            (dirname file)))
+                                        (delete-file file)))
+                                    (const #t)                        ;down
+                                    (lambda (dir stat result)         ;up
+                                      (when (equal? (scandir dir) '("." ".."))
+                                        (rmdir dir)))
+                                    (const #t)                        ;skip
+                                    (lambda (file stat errno result)
+                                      (format (current-error-port)
+                                              "warning: failed to delete ~a: ~a~%"
+                                              file (strerror errno)))
+                                    #t
+                                    "Utilities"
+                                    lstat)
+                  #t))))
     (inputs
-     `(("curl" ,curl)
-       ("jsoncpp" ,jsoncpp)
-       ,@(alist-delete "curl" (package-inputs cmake-bootstrap))))
+     `(("jsoncpp" ,jsoncpp)
+       ,@(package-inputs cmake-bootstrap)))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -311,6 +295,15 @@ and workspaces that can be used in the compiler environment of your choice.")
        #:phases
        (modify-phases %standard-phases
          ,@%common-build-phases
+         (add-after 'install 'delete-help-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively
+               (string-append (assoc-ref outputs "out")
+                              "/share/cmake-"
+                              ,(version-major+minor
+                                 (package-version cmake-bootstrap))
+                              "/Help"))
+             #t))
          (replace 'check
            (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
              (let ((skipped-tests (list ,@%common-disabled-tests
@@ -334,39 +327,6 @@ and workspaces that can be used in the compiler environment of your choice.")
   (package
     (inherit cmake-minimal)
     (name "cmake")
-    (version "3.19.2")
-    ;; TODO: Move the following source field to the cmake-bootstrap package in
-    ;; the next rebuild cycle.
-    (source (origin
-              (inherit (package-source cmake-bootstrap))
-              (uri (string-append "https://cmake.org/files/v"
-                                  (version-major+minor version)
-                                  "/cmake-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1w67w0ak6vf37501dlz9yhnzlvvpw1w10n2nm3hi7yxp4cxzvq73"))
-              (snippet
-               (match (origin-snippet (package-source cmake-bootstrap))
-                 ((_ _ exp ...)
-                  ;; Now we can delete the remaining software bundles.
-                  (append `(begin
-                             (define preserved-files
-                               '(,@%preserved-third-party-files
-                                 ;; TODO: Move this file to the
-                                 ;; %preserved-third-party-files variable in
-                                 ;; the next rebuild cycle.
-                                 "Utilities/cm3p" ;CMake header wrappers
-                                 ;; Use the bundled JsonCpp during bootstrap
-                                 ;; to work around a circular dependency.
-                                 ;; TODO: JsonCpp can be built with Meson
-                                 ;; instead of CMake, but meson-build-system
-                                 ;; currently does not support
-                                 ;; cross-compilation.
-                                 "Utilities/cmjsoncpp"
-                                 ;; LibUV is required to bootstrap the initial
-                                 ;; build system.
-                                 "Utilities/cmlibuv")))
-                          exp))))))
     (arguments
      (substitute-keyword-arguments (package-arguments cmake-minimal)
        ;; Use cmake-minimal this time.
@@ -388,42 +348,7 @@ and workspaces that can be used in the compiler environment of your choice.")
                  ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-build-phases variable instead: the
-           ;; Utilities/Release/release_cmake.cmake file no longer exists in
-           ;; version 3.19.0.
-           (replace 'patch-bin-sh
-             (lambda _
-               ;; Replace "/bin/sh" by the right path in... a lot of
-               ;; files.
-               (substitute*
-                   '("Modules/CompilerId/Xcode-3.pbxproj.in"
-                     "Modules/Internal/CPack/CPack.RuntimeScript.in"
-                     "Source/cmGlobalXCodeGenerator.cxx"
-                     "Source/cmLocalUnixMakefileGenerator3.cxx"
-                     "Source/cmExecProgramCommand.cxx"
-                     "Tests/CMakeLists.txt"
-                     "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
-                 (("/bin/sh") (which "sh")))
-               #t))
-           ;; TODO: Remove this override in the next rebuild cycle and adjust
-           ;; the %common-disabled-tests variable instead.
-           (replace 'check
-             (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
-               (let ((skipped-tests (list ,@%common-disabled-tests
-                                          ;; This test fails for unknown reason.
-                                          "RunCMake.file-GET_RUNTIME_DEPENDENCIES"
-                                          ;; This test requires the bundled libuv.
-                                          "BootstrapTest")))
-                 (if tests?
-                     (begin
-                       (invoke "ctest" "-j" (if parallel-tests?
-                                                (number->string (parallel-job-count))
-                                                "1")
-                               "--exclude-regex"
-                               (string-append "^(" (string-join skipped-tests "|") ")$")))
-                     (format #t "test suite not run~%"))
-                 #t)))
+           (delete 'delete-help-documentation)
            (add-after 'install 'move-html-doc
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out"))
@@ -436,6 +361,9 @@ and workspaces that can be used in the compiler environment of your choice.")
                                    (string-append doc html))
                  (delete-file-recursively (string-append out html))
                  #t)))))))
+    (inputs
+     `(("ncurses" ,ncurses)             ;required for ccmake
+       ,@(package-inputs cmake-minimal)))
     ;; Extra inputs required to build the documentation.
     (native-inputs
      `(,@(package-native-inputs cmake-minimal)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e7bd6cf002..fb028390a2 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1,15 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,12 +51,13 @@
   #:use-module (gnu packages shells)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix memoization)
   #:use-module (guix utils)
@@ -116,8 +119,7 @@
                       (guile-dir (assoc-ref inputs "guile"))
                       (guile (string-append guile-dir "/bin/guile")))
                  (invoke guile "--no-auto-compile" source)
-                 (chdir "bootar")
-                 #t)))
+                 (chdir "bootar"))))
            (replace 'configure (bootstrap-configure ,version "." "scripts"))
            (replace 'build (bootstrap-build "."))
            (replace 'install (bootstrap-install "." "scripts"))))))
@@ -163,8 +165,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (symlink (string-append out "/bin/gash")
                           (string-append out "/bin/sh"))
                  (symlink (string-append out "/bin/gash")
-                          (string-append out "/bin/bash"))
-                 #t)))))))
+                          (string-append out "/bin/bash")))))))))
     (inputs `(("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
 
@@ -190,8 +191,7 @@ pure Scheme to Tar and decompression in one easy step.")
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((gash (assoc-ref inputs "gash")))
                  (add-to-load-path (string-append gash "/share/guile/site/"
-                                                  (effective-version))))
-               #t))
+                                                  (effective-version))))))
            (add-before 'configure 'pre-configure
              (lambda _
                (format #t "Creating gash/commands/testb.scm~%")
@@ -217,8 +217,7 @@ pure Scheme to Tar and decompression in one easy step.")
                (copy-file "scripts/template.in" "scripts/[.in")
                (substitute* "scripts/[.in"
                  (("@UTILITY@") "testb"))
-               (delete-file "scripts/template.in")
-               #t))
+               (delete-file "scripts/template.in")))
            (replace 'configure
              (bootstrap-configure ,(package-version gash-utils)
                                   "gash" "scripts"))
@@ -247,8 +246,7 @@ pure Scheme to Tar and decompression in one easy step.")
                  (copy-file (string-append gash-godir "/gash/compat.go")
                             (string-append godir "/gash/compat.go"))
                  (copy-recursively (string-append gash-godir "/gash/compat")
-                                   (string-append godir "/gash/compat"))
-                 #t)))))))
+                                   (string-append godir "/gash/compat")))))))))
     (inputs `(("gash" ,gash-boot)
               ("guile" ,%bootstrap-guile)))
     (native-inputs `(("bootar" ,bootar)))))
@@ -438,8 +436,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                                         (string-suffix? ".s" name))))))
                (for-each (lambda (x) (install-file x cache))
                          (append (objects-in-dir ".")
-                                 (objects-in-dir "mescc-lib"))))
-             #t)))))
+                                 (objects-in-dir "mescc-lib")))))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -573,8 +570,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "util.c"
-               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))
-             #t))
+               (("^char [*]strlwr" all) (string-append all "_tcc_cannot_handle_dupe")))))
          (replace 'build
            (lambda _
              (let ((files '("bits" "crypt" "deflate" "getopt" "gzip"
@@ -636,13 +632,11 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (substitute* "build.sh.in"
                (("@LIBOBJS@") "getloadavg.o")
-               (("@REMOTE@") "stub"))
-             #t))
+               (("@REMOTE@") "stub"))))
          (add-after 'configure 'configure-fixup
            (lambda _
              (substitute* "make.h"
-               (("^extern long int lseek.*" all) (string-append "// " all)))
-             #t))
+               (("^extern long int lseek.*" all) (string-append "// " all)))))
          (replace 'build
            (lambda _
              (invoke "sh" "./build.sh")))
@@ -694,16 +688,14 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (("uTimBuf[.]" all)
                 (string-append "// " all))
                (("retVal = utime [(] dstName, &uTimBuf [)];" all)
-                (string-append "retVal = 0; // " all)))
-             #t))
+                (string-append "retVal = 0; // " all)))))
          (replace 'configure
            (lambda _
              (with-output-to-file "utime.h"
                (lambda _ (display "
 #define fchown(filedes, owner, group) 0
 #define fchmod(filedes, mode) 0
-")))
-             #t))
+")))))
          (replace 'check
            (lambda _
              (invoke "./bzip2" "--help")))
@@ -759,8 +751,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "CC" "tcc")
                (setenv "LD" "tcc")
                (setenv "AR" "tcc -ar")
-               (setenv "CFLAGS" "-D _POSIX_VERSION=1")
-               #t)))
+               (setenv "CFLAGS" "-D _POSIX_VERSION=1"))))
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "Makefile.in"
@@ -773,8 +764,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "lib/sh/snprintf.c"
                (("^#if (defined [(]HAVE_LOCALE_H[)])" all define) (string-append "#if 0 //" define)))
              (substitute* "configure"
-               ((" egrep") " grep"))
-             #t))
+               ((" egrep") " grep"))))
          (replace 'configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let ((configure-flags (filter (lambda (x)
@@ -789,20 +779,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "config.h"
                (("#define GETCWD_BROKEN 1") "#undef GETCWD_BROKEN"))
              (let ((config.h (open-file "config.h" "a")))
-               (display (string-append
-                         ;; XXX TODO: remove nested ,(string-append ...) and
-                         ;; store file name on next rebuild cycle
-                         ,(string-append "
+               (display "
 // tcc: error: undefined symbol 'enable_hostname_completion'
 #define enable_hostname_completion(on_or_off) 0
 
-// /gnu/store/" "cq0cmv35s9dhilx14zaghlc08gpc0hwr-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
+// /gnu/store/…-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
 #define HAVE_POSIX_SIGNALS 1
 #define endpwent(x) 0
-"))
+"
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -812,8 +798,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define tcc-boot
   ;; The final tcc.
@@ -846,8 +831,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (copy-file source "tarball.tar.bz2")
              (invoke "bzip2" "-d" "tarball.tar.bz2")
              (invoke "tar" "xvf" "tarball.tar")
-             (chdir (string-append "tcc-" ,version))
-             #t))
+             (chdir (string-append "tcc-" ,version))))
          ;; no patch yet
          ;; (add-after 'unpack 'apply-boot-patch
          ;;   (lambda* (#:key inputs #:allow-other-keys)
@@ -858,8 +842,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              (substitute* "libtcc.c"
                (("s->alacarte_link = 1;" all)
                 (string-append all "
-    s->static_link = 1;")))
-             #t))
+    s->static_link = 1;")))))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -919,57 +902,8 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                 (invoke "tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o")
                 (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a"))
                 (delete-file (string-append out "/lib/tcc/libtcc1.a"))
-                (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))
-                #t)))))))))
-
-(define diffutils-mesboot
-  ;; The initial diffutils.
-  (package
-    (inherit diffutils)
-    (name "diffutils-mesboot")
-    (version "2.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/diffutils/diffutils-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1mirn5i825bn5w7rh6mgn0r8aj9xqanav95dwcl1b8sn82f4iwnm"))))
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (inputs '())
-    (propagated-inputs '())
-    (native-inputs (%boot-tcc0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile
-       #:parallel-build? #f
-       #:tests? #f            ; check is naive, also checks non-built PROGRAMS
-       #:strip-binaries? #f   ; no strip yet
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'remove-diff3-sdiff
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile.in"
-               (("PROGRAMS = .*" all) "PROGRAMS = cmp diff"))))
-         (replace 'configure           ; needs classic invocation of configure
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (shell (string-append bash "/bin/bash")))
-               (setenv "CONFIG_SHELL" shell)
-               (setenv "CC" "tcc")
-               (setenv "LD" "tcc")
-               (format (current-error-port)
-                       "running ./configure ~a\n" (string-join configure-flags))
-               (apply invoke (cons "./configure" configure-flags)))))
-         (replace 'install
-           (lambda _
-             (let* ((out (assoc-ref %outputs "out"))
-                    (bin (string-append out "/bin")))
-               (mkdir-p bin)
-               (install-file "cmp" bin)
-               (install-file "diff" bin)
-               #t))))))))
+                (copy-file "libtcc1.a"
+                           (string-append out "/lib/tcc/libtcc1.a")))))))))))
 
 (define patch-mesboot
   ;; The initial patch.
@@ -1002,8 +936,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
              ;; avoid another segfault
              (substitute* "pch.c"
                (("while [(]p_end >= 0[)]" all)
-                "p_end = -1;\nwhile (0)"))
-             #t))
+                "p_end = -1;\nwhile (0)"))))
          ;; FIXME: no compressing gzip yet
          (delete 'compress-documentation))))))
 
@@ -1039,8 +972,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                     (bash (assoc-ref %build-inputs "bash"))
                     (shell (string-append bash "/bin/bash")))
                (substitute* "configure"
-                 (("/bin/sh") shell))
-               #t)))
+                 (("/bin/sh") shell)))))
          (replace 'check
            (lambda _
              (invoke "./sed" "--version")))
@@ -1048,16 +980,16 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "sed" bin)
-               #t))))))))
+               (install-file "sed" bin)))))))))
 
 (define (%boot-tcc-inputs)
   `(("bash" ,bash-mesboot0)
     ("bzip2" ,bzip2-mesboot)
-    ("diffutils" ,diffutils-mesboot)
     ("gzip" ,gzip-mesboot)
     ("patch" ,patch-mesboot)
     ("sed" ,sed-mesboot0)
+    ;; Place lower than sed so we don't override it.
+    ("gash-utils" ,gash-utils-boot)
     ("tcc" ,tcc-boot)
     ,@(alist-delete "tcc" (%boot-tcc0-inputs))))
 
@@ -1105,14 +1037,12 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
                (setenv "SHELL" shell)
                (setenv "AR" "tcc -ar")
                (setenv "RANLIB" "true")
-               (setenv "CC" "tcc -D __GLIBC_MINOR__=6")
-               #t)))
+               (setenv "CC" "tcc -D __GLIBC_MINOR__=6"))))
          (add-after 'unpack 'scripted-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "bfd/configure"
                (("^sed -e '/SRC-POTFILES.*" all)
-                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))
-             #t))
+                "echo -e 'all:\\n\\ttrue\\n\\ninstall:\\n\\ttrue\\n' > po/Makefile\n"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (format (current-error-port)
@@ -1184,8 +1114,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
          (add-after 'unpack 'apply-boot-patch
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((patch-file (assoc-ref inputs "boot-patch")))
-               (system* "patch" "--force" "-p1" "-i" patch-file)
-               #t)))
+               (system* "patch" "--force" "-p1" "-i" patch-file))))
          (add-before 'configure 'setenv
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1233,8 +1162,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (invoke "ar" "x" (string-append tcc "/lib/libtcc1.a"))
                (invoke "ar" "x" (string-append tcc "/lib/libc.a"))
                (invoke "ar" "r" (string-append gcc-dir "/libc.a")
-                       "libc.o" "libtcc1.o")
-               #t))))))
+                       "libc.o" "libtcc1.o")))))))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -1277,8 +1205,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (headers (assoc-ref %build-inputs "kernel-headers")))
                (mkdir-p include)
                (copy-recursively "include" out)
-               (copy-recursively headers out)
-               #t))))))))
+               (copy-recursively headers out)))))))))
 
 (define gawk-mesboot0
   ;; The initial Gawk.
@@ -1329,8 +1256,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (setenv "CPP" "tcc -E")
                (setenv "LD" "tcc")
                (setenv "ac_cv_func_getpgrp_void" "yes")
-               (setenv "ac_cv_func_tzset" "yes"))
-             #t))
+               (setenv "ac_cv_func_tzset" "yes"))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (let* ((out (assoc-ref %outputs "out"))
@@ -1345,8 +1271,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define glibc-mesboot0
   ;; GNU C Library 2.2.5 is the most recent glibc that we managed to build
@@ -1423,8 +1348,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (setenv "CONFIG_SHELL" shell)
                (setenv "SHELL" shell)
                (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-               (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-               #t)))
+               (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags)))))
          (replace 'configure           ; needs classic invocation of configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (format (current-error-port)
@@ -1441,8 +1365,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                           (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
                           (("BASH = ") (string-append
                                         "SHELL = " shell "
-         BASH = ")))
-                        #t))))))))
+         BASH = ")))))))))))
 
 (define gcc-mesboot0
   (package
@@ -1465,8 +1388,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                  (lambda _
                    (display "
 ac_cv_c_float_format='IEEE (little-endian)'
-")))
-               #t))
+")))))
            (replace 'install2
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -1543,14 +1465,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (substitute* "configure"
                  ((" /bin/sh") shell)))
              (substitute* "Makefile.in"
-               (("^SUBDIRS = doc") "SUBDIRS ="))
-             #t))
+               (("^SUBDIRS = doc") "SUBDIRS ="))))
          (replace 'install
            (lambda _
              (let* ((out (assoc-ref %outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "src/tar" bin)
-               #t))))))))
+               (install-file "src/tar" bin)))))))))
 
 (define grep-mesboot
   ;; The initial grep.
@@ -1587,8 +1507,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (install-file "grep" bin)
                (symlink "grep" (string-append bin "/egrep"))
-               (symlink "grep" (string-append bin "/fgrep"))
-               #t))))))))
+               (symlink "grep" (string-append bin "/fgrep"))))))))))
 
 (define binutils-mesboot1
   (package
@@ -1613,8 +1532,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (let* ((out (assoc-ref %outputs "out"))
                       (bash (assoc-ref %build-inputs "bash"))
                       (shell (string-append bash "/bin/bash")))
-                 (setenv "CONFIG_SHELL" shell)
-                 #t)))))))))
+                 (setenv "CONFIG_SHELL" shell))))))))))
 
 (define coreutils-mesboot0
   (package
@@ -1677,8 +1595,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
-               (install-file "make" bin)
-               #t))))))))
+               (install-file "make" bin)))))))))
 
 (define gawk-mesboot
   (package
@@ -1713,8 +1630,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin")))
                (install-file "gawk" bin)
-               (symlink "gawk" (string-append bin "/awk"))
-               #t))))))))
+               (symlink "gawk" (string-append bin "/awk"))))))))))
 
 (define sed-mesboot
   (package
@@ -1745,8 +1661,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (shell (string-append bash "/bin/bash")))
                (substitute* "testsuite/Makefile.tests"
                  (("^SHELL = /bin/sh")
-                  (string-append "SHELL = " shell)))
-               #t))))))))
+                  (string-append "SHELL = " shell)))))))))))
 
 (define bash-mesboot
   (package
@@ -1789,14 +1704,12 @@ ac_cv_c_float_format='IEEE (little-endian)'
          (add-after 'unpack 'scripted-patch
            (lambda _
              (substitute* "shell.c"
-               ((";;") ";"))
-             #t))
+               ((";;") ";"))))
          (add-before 'configure 'setenv
            (lambda _
              (setenv "AWK" "gawk")
              (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
-             (setenv "gl_cv_func_rename_dest_works" "yes")
-             #t))
+             (setenv "gl_cv_func_rename_dest_works" "yes")))
          (add-after 'configure 'configure-fixups
            (lambda _
              (let ((config.h (open-file "config.h" "a")))
@@ -1804,8 +1717,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
 #define enable_hostname_completion(on_or_off) 0
 ")
                         config.h)
-               (close config.h))
-             #t))
+               (close config.h))))
          (replace 'check
            (lambda _
              (invoke "./bash" "--version")))
@@ -1815,8 +1727,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                     (bin (string-append out "/bin")))
                (mkdir-p bin)
                (copy-file "bash" (string-append bin "/bash"))
-               (copy-file "bash" (string-append bin "/sh"))
-               #t))))))))
+               (copy-file "bash" (string-append bin "/sh"))))))))))
 
 (define (%boot-mesboot1-inputs)
   `(("bash" ,bash-mesboot)
@@ -1942,8 +1853,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((patch-file (assoc-ref inputs "boot-patch")))
                (format (current-error-port) "patch file=~s\n" patch-file)
-               (system* "patch" "--force" "-p1" "-i" patch-file))
-             #t))
+               (system* "patch" "--force" "-p1" "-i" patch-file))))
          ;; c&p from commencement.scm:gcc-boot0
          (add-after 'unpack 'unpack-gmp&co
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1967,8 +1877,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
                                     (package-full-name lib "-")
                                     char-set:letter)
                                   ,(package-name lib)))
-                      (list gmp-boot mpfr-boot mpc-boot))
-               #t)))
+                      (list gmp-boot mpfr-boot mpc-boot)))))
          (add-before 'configure 'setenv
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1986,8 +1895,8 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (setenv "LIBRARY_PATH" (string-append glibc "/lib"
                                                      ":" gcc "/lib"))
                (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-               (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-               #t))))))))
+               (format (current-error-port) "LIBRARY_PATH=~a\n"
+                       (getenv "LIBRARY_PATH"))))))))))
 
 (define gcc-mesboot1
   (package
@@ -2017,8 +1926,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (add-before 'unpack 'unpack-g++
              (lambda _
                (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
-                 (invoke "tar" "xvf" source-g++))
-               #t))
+                 (invoke "tar" "xvf" source-g++))))
            (replace 'setenv
              (lambda _
                (setenv "CONFIG_SHELL" (which "sh"))
@@ -2030,8 +1938,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
 
                ;; Set the C++ search path so that C headers can be found as
                ;; libstdc++ is being compiled.
-               (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
-               #t))))))))
+               (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))))))))))
 
 (define (%boot-mesboot2-inputs)
   `(("gcc" ,gcc-mesboot1)
@@ -2172,8 +2079,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
              (substitute* "gprof/Makefile.in"
                (("^SUBDIRS = po") "SUBDIRS ="))
              (substitute* "ld/Makefile.in"
-               (("^SUBDIRS = po") "SUBDIRS ="))
-             #t)))))))
+               (("^SUBDIRS = po") "SUBDIRS =")))))))))
 
 (define (%boot-mesboot3-inputs)
   `(("binutils" ,binutils-mesboot)
@@ -2225,8 +2131,7 @@ ac_cv_c_float_format='IEEE (little-endian)'
            (replace 'unpack
              (lambda* (#:key source #:allow-other-keys)
                (invoke "tar" "xvf" source)
-               (chdir (string-append "glibc-" ,version))
-               #t))
+               (chdir (string-append "glibc-" ,version))))
            (replace 'setenv
              (lambda* (#:key inputs #:allow-other-keys)
                (let* ((headers  (assoc-ref inputs "headers"))
@@ -2248,15 +2153,13 @@ ac_cv_c_float_format='IEEE (little-endian)'
                  ;; avoid -fstack-protector
                  (setenv "libc_cv_ssp" "false")
                  (substitute* "configure"
-                   (("/bin/pwd") "pwd"))
-                 #t)))
+                   (("/bin/pwd") "pwd")))))
            (replace 'install
              (lambda* (#:key outputs make-flags #:allow-other-keys)
                (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
                      (out (assoc-ref outputs "out")))
-                 (and (apply invoke "make" make-flags)
-                      (copy-recursively kernel-headers out)
-                      #t))))
+                 (apply invoke "make" make-flags)
+                 (copy-recursively kernel-headers out))))
            (replace 'configure
              (lambda* (#:key configure-flags #:allow-other-keys)
                (format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
@@ -2285,8 +2188,7 @@ SHELL := " shell "
                  (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
                  (substitute* "sysd-sorted"
                    ((" sunrpc") " ")
-                   ((" nis") " "))
-                 #t)))))))))
+                   ((" nis") " ")))))))))))
 
 (define glibc-mesboot
   (package
@@ -2307,9 +2209,8 @@ SHELL := " shell "
                    (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
                           (out (assoc-ref outputs "out"))
                           (install-flags (cons "install" make-flags)))
-                     (and (apply invoke "make" install-flags)
-                          (copy-recursively kernel-headers out)
-                          #t)))))))))))
+                     (apply invoke "make" install-flags)
+                     (copy-recursively kernel-headers out)))))))))))
 
 (define (%boot-mesboot4-inputs)
   `(("libc" ,glibc-mesboot)
@@ -2364,8 +2265,7 @@ exec " gcc "/bin/" program
                   "g++"
                   "i686-unknown-linux-gnu-cpp"
                   "i686-unknown-linux-gnu-gcc"
-                  "i686-unknown-linux-gnu-g++"))
-               #t)))
+                  "i686-unknown-linux-gnu-g++")))))
          (replace 'check
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -2380,7 +2280,6 @@ exec " gcc "/bin/" program
     (version (package-version gcc-4.9))
     (source (bootstrap-origin (package-source gcc-4.9)))
     (native-inputs `(("gcc-wrapper" ,gcc-mesboot1-wrapper)
-                     ("gcc" ,gcc-mesboot1)
                      ("headers" ,glibc-headers-mesboot)
                      ,@(%boot-mesboot4-inputs)))
     (arguments
@@ -2453,8 +2352,8 @@ exec " gcc "/bin/" program
                                                            ":" gcc "/lib"))
                      (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
                      (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
-                     (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                     #t))))))))))
+                     (format (current-error-port) "LIBRARY_PATH=~a\n"
+                             (getenv "LIBRARY_PATH"))))))))))))
 
 (define gcc-mesboot-wrapper
   ;; We need this so gcc-mesboot can be used to create shared binaries that
@@ -2506,6 +2405,7 @@ exec " gcc "/bin/" program
 (define gnu-make-boot0
   (package
     (inherit gnu-make)
+    (outputs (delete "debug" (package-outputs gnu-make)))
     (source (bootstrap-origin (package-source gnu-make)))
     (name "make-boot0")
     (arguments
@@ -2517,7 +2417,16 @@ exec " gcc "/bin/" program
             ;; The generated config.status has some problems due to the
             ;; bootstrap environment.  Disable dependency tracking to work
             ;; around it.
-            `(cons "--disable-dependency-tracking" ,flags))
+            `(cons "--disable-dependency-tracking"
+
+                   ;; 'glibc-bootstrap' on non-x86 platforms has a buggy
+                   ;; 'posix_spawn'.  Thus, disable it.  See
+                   ;; <https://bugs.gnu.org/49367>.
+                   ,(match (%current-system)
+                      ((or "i686-linux" "x86_64-linux")
+                       flags)
+                      (_
+                       `(cons "--disable-posix-spawn" ,flags)))))
            ((#:phases phases)
             `(modify-phases ,phases
                (replace 'build
@@ -2527,8 +2436,7 @@ exec " gcc "/bin/" program
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out (assoc-ref outputs "out"))
                           (bin (string-append out "/bin")))
-                     (install-file "make" bin)
-                     #t))))))))
+                     (install-file "make" bin)))))))))
     (native-inputs '())                           ; no need for 'pkg-config'
     (inputs (%bootstrap-inputs+toolchain))))
 
@@ -2549,6 +2457,7 @@ exec " gcc "/bin/" program
 (define coreutils-boot0
   (package
     (inherit coreutils)
+    (outputs (delete "debug" (package-outputs coreutils)))
     (source (bootstrap-origin (package-source coreutils)))
     (name "coreutils-boot0")
     (native-inputs `())
@@ -2594,6 +2503,8 @@ exec " gcc "/bin/" program
        ,@(%bootstrap-inputs+toolchain)))
     (arguments
      `(#:implicit-inputs? #f
+       ;; Ignore test failure in gnulib for armhf/aarch64.
+       #:tests? ,(not (target-arm?))
        #:guile ,%bootstrap-guile
 
        ;; The build system assumes we have done a mistake when time_t is 32-bit
@@ -2608,7 +2519,20 @@ exec " gcc "/bin/" program
                  ((or "arm-linux" "aarch64-linux")
                   ''("--disable-dependency-tracking"))
                  (_ ''()))
-              ,flags)))))))
+              ,flags))
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+              ;; 'test-fnmatch' fails when using glibc-mesboot@2.16, due
+              ;; to incorrect handling of the [:alpha:] regexp character
+              ;; class.  Ignore it.
+               ,@(if (member (%current-system)
+                             '("x86_64-linux" "i686-linux"))
+                     '((add-before 'check 'skip-fnmatch-test
+                         (lambda _
+                           (substitute* "gnulib-tests/Makefile"
+                             (("^XFAIL_TESTS =")
+                              "XFAIL_TESTS = test-fnmatch ")))))
+                     '()))))))))
 
 (define file
   (package
@@ -2640,7 +2564,7 @@ exec " gcc "/bin/" program
 
 (define gawk-boot0
   (package
-    (inherit patch)
+    (inherit gawk)
     (source (bootstrap-origin (package-source gawk)))
     (name "gawk-boot0")
     (native-inputs '())
@@ -2753,8 +2677,7 @@ exec " gcc "/bin/" program
                         (with-directory-excursion (string-append out "/bin")
                           (for-each (lambda (name)
                                       (symlink name (remove-triplet-prefix name)))
-                                    (scandir "." has-triplet-prefix?)))
-                        #t))))
+                                    (scandir "." has-triplet-prefix?)))))))
 
        ,@(substitute-keyword-arguments (package-arguments binutils)
            ((#:configure-flags cf)
@@ -2789,8 +2712,7 @@ exec " gcc "/bin/" program
                       ;; fail, which in turn confuses the configure script.
                       (lambda _
                         (substitute* "libstdc++-v3/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t))))))
+                          (("g\\+\\+ -v") "true"))))))))
              (_ (package-arguments lib)))))
       (inputs (%boot0-inputs))
       (native-inputs '()))))
@@ -2799,6 +2721,7 @@ exec " gcc "/bin/" program
   (package
     (inherit gcc)
     (name "gcc-cross-boot0")
+    (outputs (delete "debug" (package-outputs gcc)))
     (source (bootstrap-origin (package-source gcc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -2819,13 +2742,6 @@ exec " gcc "/bin/" program
                            "--disable-shared"
                            "--enable-languages=c,c++"
 
-                           ;; boot-triplet inserts "guix" in the triplet.
-                           ,@(if (equal? "powerpc64le-guix-linux-gnu" (boot-triplet))
-                                 ;; On POWER9 (little endian) glibc needs the
-                                 ;; 128-bit long double type.
-                                 '("--with-long-double-128")
-                                 '())
-
                            ;; libstdc++ cannot be built at this stage
                            ;; ("Link tests are not allowed after
                            ;; GCC_NO_EXECUTABLES.").
@@ -2879,8 +2795,7 @@ exec " gcc "/bin/" program
                                           (package-full-name lib "-")
                                           char-set:letter)
                                         ,(package-name lib)))
-                            (list gmp-6.0 mpfr mpc))
-                     #t)))
+                            (list gmp-6.0 mpfr mpc)))))
                ,(match (%current-system)
                   ((or "i686-linux" "x86_64-linux")
                    '(add-before 'configure 'fix-libcc1
@@ -2893,8 +2808,7 @@ exec " gcc "/bin/" program
                                           (assoc-ref inputs "gcc") "/lib")))
                         ;; XXX: "g++ -v" is broken (see also libstdc++ above).
                         (substitute* "libcc1/configure"
-                          (("g\\+\\+ -v") "true"))
-                        #t)))
+                          (("g\\+\\+ -v") "true")))))
                   (_ '(add-before 'configure 'return-true
                         (lambda _ #t))))
                (add-after 'install 'symlink-libgcc_eh
@@ -2906,8 +2820,7 @@ exec " gcc "/bin/" program
                          (string-append out "/lib/gcc/"
                                         ,(boot-triplet)
                                         "/" ,(package-version gcc))
-                       (symlink "libgcc.a" "libgcc_eh.a"))
-                     #t))))))))
+                       (symlink "libgcc.a" "libgcc_eh.a"))))))))))
 
     (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
               ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2948,8 +2861,7 @@ exec " gcc "/bin/" program
                  (lambda _
                    (substitute* "Configure"
                      (("^libswanted=(.*)pthread" _ before)
-                      (string-append "libswanted=" before)))
-                   #t))))
+                      (string-append "libswanted=" before)))))))
            ;; Do not configure with '-Dusethreads' since pthread
            ;; support is missing.
            ((#:configure-flags configure-flags)
@@ -2992,6 +2904,15 @@ exec " gcc "/bin/" program
                            "RANLIB=ranlib -D"))
                       "V=1")
 
+       ;; 'glibc-bootstrap' on non-x86 platforms has a buggy 'posix_spawn'.
+       ;; Thus, use the Gnulib replacement instead.  See
+       ;; <https://bugs.gnu.org/49367>.
+       ,@(match (%current-system)
+           ((or "i686-linux" "x86_64-linux")
+            '())
+           (_
+            '(#:configure-flags '("gl_cv_func_posix_spawn_works=no"))))
+
        ,@(package-arguments bison)))))
 
 (define flex-boot0
@@ -3006,15 +2927,6 @@ exec " gcc "/bin/" program
        #:guile ,%bootstrap-guile
        #:tests? #f))))
 
-(define rsync-boot0
-  (package
-    (inherit rsync)
-    (native-inputs `(("perl" ,perl-boot0)))
-    (inputs (%boot0-inputs))
-    (arguments
-     `(#:implicit-inputs? #f
-       #:guile ,%bootstrap-guile))))
-
 (define-syntax define/system-dependent
   (lambda (s)
     "Bind IDENTIFIER to EXP, where the value of EXP is known to depend on
@@ -3050,9 +2962,6 @@ memoized as a function of '%current-system'."
        ;; Flex and Bison are required since version 4.16.
        ("flex" ,flex-boot0)
        ("bison" ,bison-boot0)
-
-       ;; Rsync is required since version 5.3.
-       ("rsync" ,rsync-boot0)
        ,@(%boot0-inputs)))))
 
 (define with-boot0
@@ -3155,6 +3064,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit expat)
     (inputs (%boot0-inputs))
+    (outputs '("out"))
     (arguments
      ;; XXX: Linking 'runtestscpp' fails with things like:
      ;;
@@ -3169,6 +3079,7 @@ memoized as a function of '%current-system'."
             ;; Since we're not passing the right -Wl,-rpath flags, build the
             ;; static library to avoid RUNPATH validation failure.
             `(cons "--disable-shared" ,flags))
+           ((#:phases phases) '%standard-phases)
            ((#:tests? _ #f) #f))))))
 
 (define python-boot0
@@ -3195,11 +3106,17 @@ memoized as a function of '%current-system'."
                    (substitute* "Modules/Setup.dist"
                      ;; Link Expat instead of embedding the bundled one.
                      (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                   #t)))))
+                   ;; Delete windows binaries
+                   (for-each delete-file
+                             (find-files "Lib/distutils/command" ".*.exe$"))
+                   (for-each delete-file
+                             (find-files "Lib/ensurepip" ".*.whl$")))))))
     (inputs
      `(,@(%boot0-inputs)
        ("expat" ,expat-sans-tests)))              ;remove OpenSSL, zlib, etc.
-    (native-inputs '())                           ;and pkg-config
+    (native-inputs                                ;and pkg-config
+     `(("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))))
     (arguments
      `(#:implicit-inputs? #f
        #:guile ,%bootstrap-guile
@@ -3224,6 +3141,7 @@ memoized as a function of '%current-system'."
                                          ('add-after unpack apply-alignment-patch _))
                                        `(modify-phases ,original-phases ,@changes))
                                       (_ phases)))
+               (delete 'remove-windows-binaries)
                (add-before 'configure 'disable-modules
                  (lambda _
                    (substitute* "setup.py"
@@ -3231,18 +3149,21 @@ memoized as a function of '%current-system'."
                      (("extensions\\.append\\(ctypes\\)") "")
                      ;; Prevent the 'ossaudiodev' extension from being
                      ;; built, since it requires Linux headers.
-                     (("'linux', ") ""))
-                   #t))
+                     (("'linux', ") ""))))
                (delete 'set-TZDIR)
                ,@(if (hurd-system?)
                      `((add-before 'build 'fix-regen
                          (lambda* (#:key inputs #:allow-other-keys)
                            (let ((libc (assoc-ref inputs "libc")))
                              (substitute* "Lib/plat-generic/regen"
-                               (("/usr/include/") (string-append libc "/include/")))
-                             #t))))
-                     '())))
-           ((#:tests? _ #f) #f))))))
+                               (("/usr/include/")
+                                (string-append libc "/include/")))))))
+                     '())
+               (replace 'install-sitecustomize.py
+                 ,(customize-site version))))
+           ((#:tests? _ #f) #f))))
+    (native-search-paths
+     (list (guix-pythonpath-search-path version)))))
 
 (define/system-dependent ld-wrapper-boot0
   ;; The first 'ld' wrapper, defined with 'define/system-dependent' because
@@ -3272,6 +3193,7 @@ memoized as a function of '%current-system'."
   (package
     (inherit glibc)
     (name "glibc-intermediate")
+    (outputs (delete "debug" (package-outputs glibc)))
     (source (bootstrap-origin (package-source glibc)))
     (arguments
      `(#:guile ,%bootstrap-guile
@@ -3289,9 +3211,9 @@ memoized as a function of '%current-system'."
             `(modify-phases ,phases
                (add-before 'configure 'pre-configure
                  (lambda* (#:key inputs #:allow-other-keys)
-                   ;; Don't clobber CPATH with the bootstrap libc.
-                   (setenv "NATIVE_CPATH" (getenv "CPATH"))
-                   (unsetenv "CPATH")
+                   ;; Don't clobber include paths with the bootstrap libc.
+                   (unsetenv "C_INCLUDE_PATH")
+                   (unsetenv "CPLUS_INCLUDE_PATH")
 
                    ;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
                    ,@(if (hurd-system?)
@@ -3301,25 +3223,13 @@ memoized as a function of '%current-system'."
                             (string-append "LDLIBS-pthread.so = "
                                            (assoc-ref %build-inputs "kernel-headers")
                                            "/lib/libihash.a\n"))))
-                       '())
-
-                   ;; 'rpcgen' needs native libc headers to be built.
-                   (substitute* "sunrpc/Makefile"
-                     (("sunrpc-CPPFLAGS =.*" all)
-                      (string-append "CPATH = $(NATIVE_CPATH)\n"
-                                     "export CPATH\n"
-                                     all "\n")))
-                   #t)))))))
+                       '()))))))))
     (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
     (native-inputs
      `(("bison" ,bison-boot0)
        ("texinfo" ,texinfo-boot0)
        ("perl" ,perl-boot0)
-       ("python" ,python-boot0)
-       ,@(if (target-powerpc?)
-           `(("powerpc64le-patch" ,@(search-patches
-                                      "glibc-ldd-powerpc.patch")))
-           '())))
+       ("python" ,python-boot0)))
     (inputs
      `( ;; The boot inputs.  That includes the bootstrap libc.  We don't want
        ;; it in $CPATH, hence the 'pre-configure' phase above.
@@ -3330,9 +3240,6 @@ memoized as a function of '%current-system'."
              `(("mig" ,mig-boot0))
              '())
 
-       ;; A native GCC is needed to build `cross-rpcgen'.
-       ("native-gcc" ,@(assoc-ref (%boot0-inputs) "gcc"))
-
        ;; Here, we use the bootstrap Bash, which is not satisfactory
        ;; because we don't want to depend on bootstrap tools.
        ("static-bash" ,@(assoc-ref (%boot0-inputs) "bash"))))))
@@ -3380,9 +3287,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                                            triplet "-" tool)
                                             tool))
                                  '("ar" "ranlib"))
-                       (for-each wrap-program '("gcc" "g++")))
-
-                     #t))))
+                       (for-each wrap-program '("gcc" "g++")))))))
     (native-inputs
      `(("binutils" ,binutils)
        ("gcc" ,gcc)
@@ -3445,16 +3350,14 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                   ;; Build only the tools.
                   (add-after 'unpack 'chdir
                     (lambda _
-                      (chdir "gettext-tools")
-                      #t))
+                      (chdir "gettext-tools")))
 
                   ;; Some test programs require pthreads, which we don't have.
                   (add-before 'configure 'no-test-programs
                     (lambda _
                       (substitute* "tests/Makefile.in"
                         (("^PROGRAMS =.*$")
-                         "PROGRAMS =\n"))
-                      #t)))))))
+                         "PROGRAMS =\n")))))))))
 
 (define glibc-final
   ;; The final glibc, which embeds the statically-linked Bash built above.
@@ -3470,10 +3373,6 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 
    ;; This time we need 'msgfmt' to install all the libc.mo files.
    (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
-                     ,@(if (target-powerpc?)
-                         `(("powerpc64le-patch" ,@(search-patches
-                                                    "glibc-ldd-powerpc.patch")))
-                         '())
                     ("gettext" ,gettext-boot0)))
 
    (propagated-inputs
@@ -3484,7 +3383,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
    ;; if 'allowed-references' were per-output.
    (arguments
     `(#:allowed-references
-      ((,gcc-boot0 "lib")
+      (,(gexp-input gcc-boot0 "lib")
        ,(kernel-headers-boot0)
        ,static-bash-for-glibc
        ,@(if (hurd-system?)
@@ -3635,8 +3534,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                            (package-full-name lib "-")
                                            char-set:letter)
                                          ,(package-name lib)))
-                             (list gmp-6.0 mpfr mpc))
-                      #t))))))))
+                             (list gmp-6.0 mpfr mpc))))))))))
 
     ;; This time we want Texinfo, so we get the manual.  Add
     ;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
@@ -3925,7 +3823,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-6))
 
 (define-public gcc-toolchain-7
-  gcc-toolchain)
+  (make-gcc-toolchain gcc-7))
 
 (define-public gcc-toolchain-8
   (make-gcc-toolchain gcc-8))
@@ -3934,7 +3832,7 @@ is the GNU Compiler Collection.")
   (make-gcc-toolchain gcc-9))
 
 (define-public gcc-toolchain-10
-  (make-gcc-toolchain gcc-10))
+  gcc-toolchain)
 
 (define-public gcc-toolchain-11
   (make-gcc-toolchain gcc-11))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index cf4ec4e644..d46b383189 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
@@ -32,6 +32,7 @@
 ;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -483,7 +484,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
 (define-public xz
   (package
    (name "xz")
-   (version "5.2.4")
+   (version "5.2.5")
    (source (origin
             (method url-fetch)
             (uri (list (string-append "http://tukaani.org/xz/xz-" version
@@ -492,7 +493,7 @@ compressed with pbzip2 can be decompressed with bzip2).")
                                       version ".tar.gz")))
             (sha256
              (base32
-              "0ibi2zsfaz6l756spjwc5rayf4ckgc9hwmy8qinppcyk4svz64mm"))))
+              "045s9agl3bpv3swlwydhgsqh7791957vmgw2plw8f1rks07r3x7n"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases
@@ -610,14 +611,14 @@ some compression ratio).")
 (define-public lzip
   (package
     (name "lzip")
-    (version "1.21")
+    (version "1.22")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://savannah/lzip/lzip-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4"))))
+               "0j59hx72258334rmkwn57ahr6s69nlrx0a5ip1jw2fbiwr12sd63"))))
     (build-system gnu-build-system)
     (home-page "https://www.nongnu.org/lzip/lzip.html")
     (synopsis "Lossless data compressor based on the LZMA algorithm")
@@ -1563,15 +1564,14 @@ or junctions, and always follows hard links.")
 (define-public zstd
   (package
     (name "zstd")
-    (version "1.4.4")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/facebook/zstd/releases/download/"
                            "v" version "/zstd-" version ".tar.gz"))
        (sha256
-        (base32 "05ckxap00qvc0j51d3ci38150cxsw82w7s9zgd5fgzspnzmp1vsr"))))
-    (replacement zstd/fixed)
+        (base32 "150y541303vnvfhd8wkbih00lfvvm98rd12yijwlbkqzg3xgp52i"))))
     (build-system gnu-build-system)
     (outputs '("out"                    ;1.2MiB executables and documentation
                "lib"                    ;1.2MiB shared library and headers
@@ -1579,6 +1579,26 @@ or junctions, and always follows hard links.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'remove-bogus-check
+           (lambda _
+             ;; lib/Makefile falsely claims that no .pc file can be created.
+             (substitute* "lib/Makefile"
+               (("error configured .*dir ")
+                "true "))
+             #t))
+         (add-after 'unpack 'patch-command-file-names
+           ;; Don't require hard requirements to be in $PATH.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (our (lambda (name) (string-append out "/bin/" name))))
+               (substitute* "programs/zstdgrep"
+                 (("(:-)(grep)" _ prefix command)
+                  (string-append prefix (which command)))
+                 (("(:-)(zstdcat)" _ prefix command)
+                  (string-append prefix (our command))))
+               (substitute* "programs/zstdless"
+                 (("zstdcat" command)
+                  (our command))))))
          (delete 'configure)            ;no configure script
          (add-after 'install 'adjust-library-locations
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1598,17 +1618,16 @@ or junctions, and always follows hard links.")
                ;; Make sure the pkg-config file refers to the right output.
                (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
                  (("^prefix=.*")
-                  (string-append "prefix=" lib "\n")))
-
-               #t))))
+                  ;; Note: The .pc file expects a trailing slash for 'prefix'.
+                  (string-append "prefix=" lib "/\n")))))))
        #:make-flags
-       ;; TODO: Integrate in next rebuild cycle.
-       (list ,(if (%current-target-system)
-                (string-append "CC=" (cc-for-target))
-                "CC=gcc")
-             (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib")
-             (string-append "INCLUDEDIR=" (assoc-ref %outputs "lib") "/include")
+       (list ,(string-append "CC=" (cc-for-target))
+             (string-append "prefix=" (assoc-ref %outputs "out"))
+             (string-append "libdir=" (assoc-ref %outputs "lib") "/lib")
+             (string-append "includedir=" (assoc-ref %outputs "lib") "/include")
+             ;; Auto-detection is over-engineered and buggy.
+             "PCLIBDIR=lib"
+             "PCINCDIR=include"
              ;; Skip auto-detection of, and creating a dependency on, the build
              ;; environment's ‘xz’ for what amounts to a dubious feature anyway.
              "HAVE_LZMA=0"
@@ -1631,17 +1650,6 @@ speed.")
                    license:public-domain ; zlibWrapper/examples/fitblk*
                    license:zlib))))      ; zlibWrapper/{gz*.c,gzguts.h}
 
-(define zstd/fixed
-  (package
-    (inherit zstd)
-    (source
-     (origin
-       (inherit (package-source zstd))
-       (patches
-        (search-patches
-         ;; From Ubuntu focal-security
-         "zstd-CVE-2021-24031_CVE-2021-24032.patch"))))))
-
 (define-public pzstd
   (package/inherit zstd
     (name "pzstd")
@@ -1754,8 +1762,32 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
                                 "unzip-attribs-overflow.patch"
                                 "unzip-overflow-on-invalid-input.patch"
                                 "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"))))
-    (replacement unzip/fixed)
+                                "unzip-overflow-long-fsize.patch"
+
+                                ;; From Fedora
+                                "unzip-alt-iconv-utf8.patch"
+                                "unzip-alt-iconv-utf8-print.patch"
+                                "unzip-fix-recmatch.patch"
+                                "unzip-case-insensitive.patch"
+                                "unzip-close.patch"
+                                "unzip-COVSCAN-fix-unterminated-string.patch"
+                                "unzip-CVE-2016-9844.patch"
+                                "unzip-CVE-2018-1000035.patch"
+                                "unzip-CVE-2018-18384.patch"
+                                "unzip-exec-shield.patch"
+                                "unzip-manpage-fix.patch"
+                                "unzip-overflow.patch"
+                                "unzip-timestamp.patch"
+                                "unzip-valgrind.patch"
+                                "unzip-x-option.patch"
+                                ;; CVE-2019-13232
+                                "unzip-zipbomb-manpage.patch"
+                                "unzip-zipbomb-part1.patch"
+                                "unzip-zipbomb-part2.patch"
+                                "unzip-zipbomb-part3.patch"
+
+                                ;; https://github.com/madler/unzip/issues/2
+                                "unzip-32bit-zipbomb-fix.patch"))))
     (build-system gnu-build-system)
     ;; no inputs; bzip2 is not supported, since not compiled with BZ_NO_STDIO
     (arguments
@@ -1791,57 +1823,6 @@ recreates the stored directory structure by default.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
-(define unzip/fixed
-  (package
-    (inherit unzip)
-    (version "6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/infozip"
-                           "/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"))
-       (sha256
-        (base32
-         "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83"))
-       (patches (search-patches "unzip-CVE-2014-8139.patch"
-                                "unzip-CVE-2014-8140.patch"
-                                "unzip-CVE-2014-8141.patch"
-                                "unzip-CVE-2014-9636.patch"
-                                "unzip-CVE-2015-7696.patch"
-                                "unzip-CVE-2015-7697.patch"
-                                "unzip-allow-greater-hostver-values.patch"
-                                "unzip-initialize-symlink-flag.patch"
-                                "unzip-remove-build-date.patch"
-                                "unzip-attribs-overflow.patch"
-                                "unzip-overflow-on-invalid-input.patch"
-                                "unzip-format-secure.patch"
-                                "unzip-overflow-long-fsize.patch"
-
-                                ;; From Fedora
-                                "unzip-alt-iconv-utf8.patch"
-                                "unzip-alt-iconv-utf8-print.patch"
-                                "unzip-fix-recmatch.patch"
-                                "unzip-case-insensitive.patch"
-                                "unzip-close.patch"
-                                "unzip-COVSCAN-fix-unterminated-string.patch"
-                                "unzip-CVE-2016-9844.patch"
-                                "unzip-CVE-2018-1000035.patch"
-                                "unzip-CVE-2018-18384.patch"
-                                "unzip-exec-shield.patch"
-                                "unzip-manpage-fix.patch"
-                                "unzip-overflow.patch"
-                                "unzip-timestamp.patch"
-                                "unzip-valgrind.patch"
-                                "unzip-x-option.patch"
-                                ;; CVE-2019-13232
-                                "unzip-zipbomb-manpage.patch"
-                                "unzip-zipbomb-part1.patch"
-                                "unzip-zipbomb-part2.patch"
-                                "unzip-zipbomb-part3.patch"
-
-                                ;; https://github.com/madler/unzip/issues/2
-                                "unzip-32bit-zipbomb-fix.patch"))))))
-
 (define-public ziptime
   (let ((commit "2a5bc9dfbf7c6a80e5f7cb4dd05b4036741478bc")
         (revision "0"))
@@ -1894,38 +1875,22 @@ timestamps in the file header with a fixed time (1 January 2008).
 (define-public zziplib
   (package
     (name "zziplib")
-    (version "0.13.69")
+    (version "0.13.72")
     (home-page "https://github.com/gdraheim/zziplib")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page)
                                   (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              (patches (search-patches "zziplib-CVE-2018-16548.patch"))
               (sha256
                (base32
-                "0fbk9k7ryas2wh2ykwkvm1pbi40i88rfvc3dydh9xyd7w2jcki92"))))
-    (replacement zziplib/fixed)
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'make-files-writable
-                    (lambda _
-                      (for-each make-file-writable
-                                (find-files "test" #:directories? #t))
-                      #t)))
-
-       ;; XXX: The default test target attempts to download external resources and
-       ;; fails without error: <https://github.com/gdraheim/zziplib/issues/53>.
-       ;; To prevent confusing log messages, just run a simple zip test that works.
-       #:test-target "check-readme"))
+                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
+    (build-system cmake-build-system)
     (inputs
      `(("zlib" ,zlib)))
     (native-inputs `(("perl" ,perl)     ; for the documentation
                      ("pkg-config" ,pkg-config)
-                     ;; for the documentation; Python 3 not supported,
-                     ;; http://forums.gentoo.org/viewtopic-t-863161-start-0.html
-                     ("python" ,python-2)
+                     ("python" ,python)
                      ("zip" ,zip))) ; to create test files
     (synopsis "Library for accessing zip files")
     (description
@@ -1934,40 +1899,6 @@ timestamps in the file header with a fixed time (1 January 2008).
     ;; files carry the Zlib license; see "docs/copying.html" for details.
     (license (list license:lgpl2.0+ license:mpl1.1))))
 
-(define-public zziplib/fixed
-  (package
-    (inherit zziplib)
-    (name "zziplib")
-    (version "0.13.72")
-    (home-page "https://github.com/gdraheim/zziplib")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page)
-                                  (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-compatibility-symlinks
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion
-               (string-append (assoc-ref outputs "out") "/lib")
-               (map (lambda (lib new-symlink)
-                      (symlink lib new-symlink))
-                    (list "libzzip.so.13" "libzzipfseeko.so.13"
-                          "libzzipmmapped.so.13" "libzzipwrap.so.13")
-                    (list "libzzip-0.so.13" "libzzipfseeko-0.so.13"
-                          "libzzipmmapped-0.so.13" "libzzipwrap-0.so.13")))
-             #t)))))
-    (native-inputs
-     `(("python" ,python)
-       ,@(alist-delete "python"
-                       (package-native-inputs zziplib))))
-    (build-system cmake-build-system)))
-
 (define-public libzip
   (package
     (name "libzip")
diff --git a/gnu/packages/connman.scm b/gnu/packages/connman.scm
index 7268af4c8b..85536f933b 100644
--- a/gnu/packages/connman.scm
+++ b/gnu/packages/connman.scm
@@ -123,7 +123,7 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/econnman-bin")))
                (wrap-program bin
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/cpio.scm b/gnu/packages/cpio.scm
index 58b2f45937..2f7a7b2363 100644
--- a/gnu/packages/cpio.scm
+++ b/gnu/packages/cpio.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +36,14 @@
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))))
+               "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga"))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                 ;; Remove superfluous declaration that trips GCC 10.
+                 (substitute* "src/global.c"
+                   (("char \\*program_name;")
+                    ""))))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/cpio/")
     (synopsis "Manage cpio and tar file archives")
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index a6a383156d..fce21f6760 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2020 André Batista <nandre@riseup.net>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
@@ -25114,10 +25115,10 @@ image together with its neighboring pixels.")
         ("rust-flate2" ,rust-flate2-1)
         ("rust-image" ,rust-image-0.20)
         ("rust-itoa" ,rust-itoa-0.4)
-        ("rust-linked-hash-map" ,rust-linked-hash-map-0.4)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
         ("rust-log" ,rust-log-0.4)
         ("rust-lzw" ,rust-lzw-0.10)
-        ("rust-nom" ,rust-nom-5)
+        ("rust-nom" ,rust-nom-6)
         ("rust-pom" ,rust-pom-3)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-time" ,rust-time-0.2))))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 180594509b..78cbf871ac 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Carl Dong <contact@carldong.me>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
@@ -153,12 +153,6 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
                                "--disable-decimal-float" ;would need libc
                                "--disable-libcilkrts"
 
-                              ,@(if (string-prefix? "powerpc64le-" target)
-                                   ;; On POWER9 (little endian) glibc needs
-                                   ;; the 128-bit long double type.
-                                   '("--with-long-double-128")
-                                   '())
-
                                ;; When target is any OS other than 'none' these
                                ;; libraries will fail if there is no libc
                                ;; present. See
@@ -243,6 +237,9 @@ target that libc."
         (append
          (origin-patches (package-source xgcc))
          (append (cond
+                  ((version>=? (package-version xgcc) "10.0")
+                   (search-patches "gcc-10-cross-environment-variables.patch"
+                                   "gcc-cross-gxx-include-dir.patch"))
                   ((version>=? (package-version xgcc) "8.0")
                    (search-patches "gcc-8-cross-environment-variables.patch"))
                   ((version>=? (package-version xgcc) "6.0")
@@ -341,15 +338,18 @@ target that libc."
            `(#:implicit-cross-inputs? #f
              ,@(package-arguments linux-headers))
          ((#:phases phases)
-          `(alist-replace
-            'build
-            (lambda _
-              (setenv "ARCH" ,(system->linux-architecture target))
-              (format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
-
-              (invoke "make" ,(system->defconfig target))
-              (invoke "make" "mrproper" "headers_check"))
-            ,phases))))
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda _
+                 (setenv "ARCH" ,(system->linux-architecture target))
+                 (format #t "`ARCH' set to `~a' (cross compiling)~%"
+                         (getenv "ARCH"))
+
+                 (invoke "make" ,(system->defconfig target))
+                 (invoke "make" "mrproper"
+                         ,@(if (version>=? (package-version linux-headers) "5.3")
+                               '("headers")
+                               '("headers_check")))))))))
       (native-inputs `(("cross-gcc" ,xgcc)
                        ("cross-binutils" ,xbinutils)
                        ,@(package-native-inputs linux-headers)))))
@@ -505,7 +505,7 @@ and the cross tool chain."
                ,@(package-arguments libc))
            ((#:configure-flags flags)
             `(cons ,(string-append "--host=" target)
-                   ,(if (hurd-triplet? target)
+                   ,(if (target-hurd? target)
                         `(cons "--disable-werror" ,flags)
                         flags)))
            ((#:phases phases)
@@ -519,7 +519,7 @@ and the cross tool chain."
                      (setenv "CROSS_LIBRARY_PATH"
                              (string-append kernel "/lib")) ; for Hurd's libihash
                      #t)))
-               ,@(if (hurd-triplet? target)
+               ,@(if (target-hurd? target)
                      '((add-after 'install 'augment-libc.so
                          (lambda* (#:key outputs #:allow-other-keys)
                            (let* ((out (assoc-ref outputs "out")))
@@ -527,35 +527,16 @@ and the cross tool chain."
                                (("/[^ ]+/lib/libc.so.0.3")
                                 (string-append out "/lib/libc.so.0.3"
                                                " libmachuser.so libhurduser.so"))))
-                           #t))
-                       ;; TODO: move to glibc in the next rebuild cycle
-                       (add-after 'unpack 'patch-libc/hurd
-                         (lambda* (#:key inputs #:allow-other-keys)
-                           (for-each
-                            (lambda (name)
-                              (let ((patch (assoc-ref inputs name)))
-                                (invoke "patch" "-p1" "--force" "-i" patch)))
-                            '("hurd-mach-print.patch"
-                              "hurd-gettyent.patch")))))
+                           #t)))
                      '())))))
 
         ;; Shadow the native "kernel-headers" because glibc's recipe expects the
         ;; "kernel-headers" input to point to the right thing.
         (propagated-inputs `(("kernel-headers" ,xheaders)))
 
-        ;; FIXME: 'static-bash' should really be an input, not a native input, but
-        ;; to do that will require building an intermediate cross libc.
-        (inputs (if (hurd-triplet? target)
-                    `(;; TODO: move to glibc in the next rebuild cycle
-                      ("hurd-mach-print.patch"
-                       ,(search-patch "glibc-hurd-mach-print.patch"))
-                      ("hurd-gettyent.patch"
-                       ,(search-patch "glibc-hurd-gettyent.patch")))
-                    '()))
-
         (native-inputs `(("cross-gcc" ,xgcc)
                          ("cross-binutils" ,xbinutils)
-                         ,@(if (hurd-triplet? target)
+                         ,@(if (target-hurd? target)
                                `(("cross-mig"
                                   ,@(assoc-ref (package-native-inputs xheaders)
                                                "cross-mig")))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index fe2cec045d..2daef82fc4 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -434,7 +434,7 @@ secure operations. ")
              (lambda _
                (invoke "./worgen" "8-12" "top1000.txt" "3-10" "top400nouns.txt"
                        "3-6" "top150adjectives.txt" "3-6")
-               (invoke "./eschalot" "-r" "^guix|^guixsd")
+               (invoke "./eschalot" "-r" "^guix|^GuixSystem")
                (invoke "./eschalot" "-r" "^gnu|^free")
                (invoke "./eschalot" "-r" "^cyber|^hack")
                (invoke "./eschalot" "-r" "^troll")))
@@ -891,7 +891,7 @@ BLAKE.")
 (define-public rhash
   (package
     (name "rhash")
-    (version "1.3.9")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
@@ -900,7 +900,7 @@ BLAKE.")
        (file-name (string-append "rhash-" version ".tar.gz"))
        (sha256
         (base32
-         "1xn9fqa6rlnhsbgami45g82dlw9i1skg2sri3ydiinwak5ph1ca2"))))
+         "15x28khy4k3sa0cfcyi13vj50d2nd7dha2p3gkq7i6z66ckq2323"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index ff3fb2f2db..b2c7b1c5d4 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -128,7 +129,7 @@ driver is known to work with these printers:
 (define-public cups-filters
   (package
     (name "cups-filters")
-    (version "1.27.4")
+    (version "1.28.9")
     (source(origin
               (method url-fetch)
               (uri
@@ -136,7 +137,7 @@ driver is known to work with these printers:
                               "cups-filters-" version ".tar.xz"))
               (sha256
                (base32
-                "110b1xhb5vfpcx0zq9kkas7pj281skx5dpnnr22idx509jfdzj8b"))
+                "1bk0x1rrb8wqbhh5c979ppgy6s2kqss8mjdlahgcjvd79wm3fs9g"))
               (modules '((guix build utils)))
               (snippet
                ;; install backends, banners and filters to cups-filters output
@@ -196,29 +197,31 @@ driver is known to work with these printers:
                         #t)))
                   (add-after 'install 'wrap-filters
                     (lambda* (#:key inputs outputs #:allow-other-keys)
-                      ;; Some filters expect to find 'gs' in $PATH.  We cannot
-                      ;; just hard-code its absolute file name in the source
+                      ;; Some filters expect to find things in $PATH.  We cannot
+                      ;; just hard-code all absolute file names in the source
                       ;; because foomatic-rip, for example, has tests like
                       ;; 'startswith(cmd, "gs")'.
                       (let ((out         (assoc-ref outputs "out"))
-                            (ghostscript (assoc-ref inputs "ghostscript")))
+                            (ghostscript (assoc-ref inputs "ghostscript"))
+                            (grep        (assoc-ref inputs "grep")))
                         (for-each (lambda (file)
                                     (wrap-program file
                                       `("PATH" ":" prefix
-                                        (,(string-append ghostscript
-                                                         "/bin")))))
+                                        (,(string-append ghostscript "/bin:"
+                                                         grep "/bin")))))
                                   (find-files (string-append
                                                out "/lib/cups/filter")))
                         #t))))))
     (native-inputs
-     `(("glib" ,glib "bin") ; for gdbus-codegen
+     `(("glib" ,glib "bin")             ; for gdbus-codegen
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("avahi"        ,avahi)
        ("fontconfig"   ,fontconfig)
        ("freetype"     ,freetype)
-       ("font-dejavu"  ,font-dejavu) ; also needed by test suite
+       ("font-dejavu"  ,font-dejavu)    ; also needed by test suite
        ("ghostscript"  ,ghostscript/cups)
+       ("grep"         ,grep)
        ("ijs"          ,ijs)
        ("dbus"         ,dbus)
        ("lcms"         ,lcms)
@@ -251,16 +254,20 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
 (define-public cups-minimal
   (package
     (name "cups-minimal")
-    (version "2.3.3")
-    (replacement cups-minimal/fixed)
+    (version "2.3.3op2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/apple/cups/releases/download/v"
-                           version "/cups-" version "-source.tar.gz"))
+       (method git-fetch)
+       ;; Version maintained by the OpenPrinting organization, NOT a fork.  The
+       ;; CUPS author tracks the current Apple CUPS sources and includes common
+       ;; changes and bug fixes for GNU/Linux.  See its README and for example
+       ;; <https://github.com/apple/cups/issues/5917#issuecomment-819465891>.
+       (uri (git-reference
+             (url "https://github.com/OpenPrinting/cups")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1vpk0b2vq830f8fvf9z8qjsm5k141i7pi8djbinpnr78pi4dj7r6"))))
+        (base32 "126d6kd3pkhmsvbcflkcpk3y30iqlkdqyvrk9aqq88vbxzjd5ia6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -273,6 +280,31 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'never-cupsAdminGetServerSettings
+           ;; Instead of querying the daemon directly, this part of CUPS assumes
+           ;; that (1) it has access to a cupsd.conf under CUPS_SERVERROOT, and
+           ;; (2) the file's contents apply to the running daemon.  (1) is false
+           ;; at least on Guix Systems resulting in extremely long delays when
+           ;; loading the Web interface's /admin page.  (2) isn't valid anywhere
+           ;; because it ignores, e.g., -c FILE.
+           ;; Upstream considers this code on ‘life support’ so just neuter it.
+	   (lambda _
+	     (substitute* "cgi-bin/admin.c"
+	       (("!cupsAdminGetServerSettings" match)
+		(string-append "0 && " match)))))
+         (add-after 'unpack 'remove-Web-UI-server-settings
+           ;; The /admin page's server configuration form is questionable for
+           ;; the same reason as cupsAdminGetServerSettings, and won't work at
+           ;; all on Guix Systems.  Remove it entirely.
+           (lambda _
+             ;; SUBSTITUTE* and a patch both have (dis)advantages.  This is
+             ;; shorter & should ensure that no translation is forgotten.
+             (substitute* (find-files "templates" "^admin\\.tmpl$")
+               ((" class=\"halves\"") "")
+               (("<FORM.* ACTION=\"/jobs.*</FORM>" match)
+                (string-append match "</P>{BROKEN? "))
+               (("</FORM>}" match)
+                (string-append match "}")))))
          (add-before 'configure 'patch-makedefs
            (lambda _
              (substitute* "Makedefs.in"
@@ -299,7 +331,7 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
     (inputs
      `(("zlib"  ,zlib)
        ("gnutls" ,gnutls)))
-    (home-page "https://www.cups.org")
+    (home-page "https://openprinting.github.io/")
     (synopsis "The Common Unix Printing System")
     (description
      "CUPS is a printing system that uses the Internet Printing Protocol
@@ -313,148 +345,128 @@ device-specific programs to convert and print many types of files.")
     ;; CUPS is Apache 2.0 with exceptions, see the NOTICE file.
     (license license:asl2.0)))
 
-(define cups-minimal/fixed
-  (package-with-extra-patches
-   cups-minimal
-   (search-patches "cups-CVE-2020-10001.patch")))
-
 (define-public cups
   (package/inherit cups-minimal
     (name "cups")
     (arguments
-     `(;; Three tests fail:
-       ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
-       ;;   Get-Jobs Operation"
-       ;; * test of number of error/warning messages, probably related to a
-       ;;   missing font.
-       #:tests? #f
-       #:configure-flags
-       '("--disable-launchd"
-         "--disable-systemd")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-makedefs
-           (lambda _
-             (substitute* "Makedefs.in"
-               (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-before 'check 'patch-tests
-           (lambda _
-             (let ((filters (assoc-ref %build-inputs "cups-filters"))
-                   (catpath (string-append
-                             (assoc-ref %build-inputs "coreutils") "/bin/"))
-                   (testdir (string-append (getcwd) "/tmp/")))
-               (mkdir testdir)
-               (substitute* "test/run-stp-tests.sh"
-                 ((" *BASE=/tmp/") (string-append "BASE=" testdir))
-
-                 ;; allow installation of filters from output dir and from
-                 ;; cups-filters
-                 (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
-                  (string-append
-                   "for dir in "
-                   (assoc-ref %outputs "out") "/lib/cups/filter "
-                   filters "/lib/cups/filter"))
+     (substitute-keyword-arguments (package-arguments cups-minimal)
+       ((#:tests? _ #t)
+        ;; Three tests fail:
+        ;; * two tests in ipp-1.1.test related to "RFC 2911 section 3.2.6:
+        ;;   Get-Jobs Operation"
+        ;; * test of number of error/warning messages, probably related to a
+        ;;   missing font.
+        #f)
+       ((#:configure-flags _ '())
+        `(list "--disable-launchd"
+               "--disable-systemd"))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'patch-tests
+             (lambda _
+               (let ((filters (assoc-ref %build-inputs "cups-filters"))
+                     (catpath (string-append
+                               (assoc-ref %build-inputs "coreutils") "/bin/"))
+                     (testdir (string-append (getcwd) "/tmp/")))
+                 (mkdir testdir)
+                 (substitute* "test/run-stp-tests.sh"
+                   ((" *BASE=/tmp/") (string-append "BASE=" testdir))
 
-                 ;; check for charsets in cups-filters output
-                 (("/usr/share/cups/charsets")
-                  (string-append filters "/share/cups/charsets"))
+                   ;; Allow installation of filters from the output directory
+                   ;; and from cups-filters.
+                   (("for dir in /usr/libexec/cups/filter /usr/lib/cups/filter")
+                    (string-append
+                     "for dir in "
+                     (assoc-ref %outputs "out") "/lib/cups/filter "
+                     filters "/lib/cups/filter"))
 
-                 ;; install additional required filters
-                 (("instfilter texttopdf texttopdf pdf")
-                  (string-append
-                   "instfilter texttopdf texttopdf pdf;"
-                   "instfilter imagetoraster imagetoraster raster;"
-                   "instfilter gstoraster gstoraster raster;"
-                   "instfilter urftopdf urftopdf pdf;"
-                   "instfilter rastertopdf rastertopdf pdf;"
-                   "instfilter pstopdf pstopdf pdf"))
+                   ;; Check for charsets in the default cups-filters output.
+                   (("/usr/share/cups/charsets")
+                    (string-append filters "/share/cups/charsets"))
 
-                 ;; specify location of lpstat binary
-                 (("description=\"`lpstat -l")
-                  "description=\"`../systemv/lpstat -l")
+                   ;; Install additional required filters.
+                   (("instfilter texttopdf texttopdf pdf")
+                    (string-append
+                     "instfilter texttopdf texttopdf pdf;"
+                     "instfilter imagetoraster imagetoraster raster;"
+                     "instfilter gstoraster gstoraster raster;"
+                     "instfilter urftopdf urftopdf pdf;"
+                     "instfilter rastertopdf rastertopdf pdf;"
+                     "instfilter pstopdf pstopdf pdf"))
 
-                 ;; patch shebangs of embedded scripts
-                 (("#!/bin/sh") (string-append "#!" (which "sh")))
+                   ;; Specify the location of the lpstat binary.
+                   (("description=\"`lpstat -l")
+                    "description=\"`../systemv/lpstat -l")
 
-                 ;; also link mime definitions from cups-filters
-                 ;; to enable the additional filters for the test suite
-                 (("ln -s \\$root/conf/mime\\.types")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
-                   "ln -s $root/conf/mime.types"))
-                 (("ln -s \\$root/conf/mime\\.convs")
-                  (string-append
-                   "ln -s " filters
-                   "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
-                   "ln -s $root/conf/mime.convs")))
+                   ;; Patch the shebangs of embedded scripts.
+                   (("#!/bin/sh") (string-append "#!" (which "sh")))
 
-               ;; fix search path for "cat"
-               (substitute* "cups/testfile.c"
-                 (("cupsFileFind\\(\"cat\", \"/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
-                 (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\"")))
-               #t)))
-         ;; Make the compressed manpages writable so that the
-         ;; reset-gzip-timestamps phase does not error out.
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz"))
-               #t)))
-         (add-after 'install 'install-cups-filters-symlinks
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (cups-filters (assoc-ref inputs "cups-filters")))
-               ;; charsets
-               (symlink
-                (string-append cups-filters "/share/cups/charsets")
-                (string-append out "/share/charsets"))
+                   ;; Also link MIME definitions from cups-filters
+                   ;; to enable the additional filters for the test suite.
+                   (("ln -s \\$root/conf/mime\\.types")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.types $BASE/share/mime; "
+                     "ln -s $root/conf/mime.types"))
+                   (("ln -s \\$root/conf/mime\\.convs")
+                    (string-append
+                     "ln -s " filters
+                     "/share/cups/mime/cupsfilters.convs $BASE/share/mime; "
+                     "ln -s $root/conf/mime.convs")))
 
-               ;; mime types, driver file, ppds
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out f)))
-                '("/share/cups/mime/cupsfilters.types"
-                  "/share/cups/mime/cupsfilters.convs"
-                  "/share/cups/drv/cupsfilters.drv"
-                  "/share/ppd"))
+                 ;; Fix the search path for the "cat" command.
+                 (substitute* "cups/testfile.c"
+                   (("cupsFileFind\\(\"cat\", \"/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
+                   (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
+                    (string-append "cupsFileFind(\"cat\", \"" catpath "\""))))))
+           (add-after 'install 'install-cups-filters-symlinks
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (cups-filters (assoc-ref inputs "cups-filters")))
+                 ;; Charsets.
+                 (symlink
+                  (string-append cups-filters "/share/cups/charsets")
+                  (string-append out "/share/charsets"))
 
-               ;; filters
-               (for-each
-                (lambda (f)
-                  (symlink f
-                           (string-append out "/lib/cups/filter" (basename f))))
-                (find-files (string-append cups-filters "/lib/cups/filter")))
+                 ;; MIME types, driver files, and PPDs.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out f)))
+                  '("/share/cups/mime/cupsfilters.types"
+                    "/share/cups/mime/cupsfilters.convs"
+                    "/share/cups/drv/cupsfilters.drv"
+                    "/share/ppd"))
 
-               ;; backends
-               (for-each
-                (lambda (f)
-                  (symlink (string-append cups-filters f)
-                           (string-append out "/lib/cups/backend/"
-                                          (basename f))))
-                '("/lib/cups/backend/parallel"
-                  "/lib/cups/backend/serial"))
+                 ;; Filters.
+                 (for-each
+                  (lambda (f)
+                    (symlink f
+                             (string-append out "/lib/cups/filter"
+                                            (basename f))))
+                  (find-files (string-append cups-filters "/lib/cups/filter")))
 
-               ;; banners
-               (let ((banners "/share/cups/banners"))
-                 (delete-file-recursively (string-append out banners))
-                 (symlink (string-append cups-filters banners)
-                          (string-append out banners)))
+                 ;; Backends.
+                 (for-each
+                  (lambda (f)
+                    (symlink (string-append cups-filters f)
+                             (string-append out "/lib/cups/backend/"
+                                            (basename f))))
+                  '("/lib/cups/backend/parallel"
+                    "/lib/cups/backend/serial"))
 
-               ;; assorted data
-               (let ((data "/share/cups/data"))
-                 (delete-file-recursively (string-append out data))
-                 (symlink (string-append cups-filters data)
-                          (string-append out data)))
+                 ;; Banners.
+                 (let ((banners "/share/cups/banners"))
+                   (delete-file-recursively (string-append out banners))
+                   (symlink (string-append cups-filters banners)
+                            (string-append out banners)))
 
-               #t))))))
+                 ;; Assorted data.
+                 (let ((data "/share/cups/data"))
+                   (delete-file-recursively (string-append out data))
+                   (symlink (string-append cups-filters data)
+                            (string-append out data))))))))))
     (inputs
      `(("avahi" ,avahi)
        ("gnutls" ,gnutls)
@@ -523,8 +535,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                     (("^dat2drvdir =.*")
                      "dat2drvdir = $(pkglibexecdir)\n")
                     (("^locatedriverdir =.*")
-                     "locatedriverdir = $(pkglibexecdir)\n"))
-                  #t))))
+                     "locatedriverdir = $(pkglibexecdir)\n"))))))
     (build-system gnu-build-system)
     (outputs (list "out" "ppd"))
     (home-page "https://developers.hp.com/hp-linux-imaging-and-printing")
@@ -613,8 +624,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                   (string-append "rulessystemdir = " out
                                  "/lib/systemd/system"))
                  (("/etc/sane.d")
-                  (string-append out "/etc/sane.d")))
-               #t)))
+                  (string-append out "/etc/sane.d"))))))
          (add-before 'configure 'fix-build-with-python-3.8
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((python (assoc-ref inputs "python")))
@@ -625,15 +635,13 @@ should only be used as part of the Guix cups-pk-helper service.")
                  (setenv "C_INCLUDE_PATH"
                          (string-append python "/include/python"
                                         (python:python-version python)
-                                        ":" (getenv "C_INCLUDE_PATH"))))
-               #t)))
+                                        ":" (getenv "C_INCLUDE_PATH")))))))
          (add-after 'install 'install-models-dat
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (models-dir (string-append out
                                                "/share/hplip/data/models")))
-               (install-file "data/models/models.dat" models-dir))
-             #t))
+               (install-file "data/models/models.dat" models-dir))))
          (add-after 'install 'wrap-binaries
            ;; Scripts in /bin are all symlinks to .py files in /share/hplip.
            ;; Symlinks are immune to the Python build system's 'WRAP phase,
@@ -644,7 +652,7 @@ should only be used as part of the Guix cups-pk-helper service.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
-                    (python (assoc-ref inputs "python")))
+                    (site (python:site-packages inputs outputs)))
                (with-directory-excursion bin
                  (for-each (lambda (file)
                              (let ((target (readlink file)))
@@ -653,19 +661,15 @@ should only be used as part of the Guix cups-pk-helper service.")
                                  (lambda _
                                    (format #t
                                            "#!~a~@
-                                           export PYTHONPATH=\"~a:~a\"~@
+                                           export GUIX_PYTHONPATH=\"~a:~a\"~@
                                            exec -a \"$0\" \"~a/~a\" \"$@\"~%"
                                            (which "bash")
-                                           (string-append
-                                            out "/lib/python"
-                                            (python:python-version python)
-                                            "/site-packages")
-                                           (getenv "PYTHONPATH")
+                                           site
+                                           (getenv "GUIX_PYTHONPATH")
                                            bin target)))
                                (chmod file #o755)))
                   (find-files "." (lambda (file stat)
-                                    (eq? 'symlink (stat:type stat)))))
-                 #t)))))))
+                                    (eq? 'symlink (stat:type stat))))))))))))
 
     ;; Note that the error messages printed by the tools in the case of
     ;; missing dependencies are often downright misleading.
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index d368c4140e..60eeb8fad1 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Dale Mellor <guix-devel-0brg6b@rdmp.org>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,7 +43,6 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libidn)
-  #:use-module (gnu packages openldap)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -53,29 +53,29 @@
 (define-public curl
   (package
    (name "curl")
-   (replacement curl-7.77.0)
-   (version "7.74.0")
+   (version "7.77.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://curl.haxx.se/download/curl-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "12w7gskrglg6qrmp822j37fmbr0icrcxv7rib1fy5xiw80n5z7cr"))
-             (patches (search-patches "curl-use-ssl-cert-env.patch"))))
+               "0jsrc97vbghvljic997r9nypc9qqddcil2lzvv032br8ahn5hr0g"))
+             (patches (search-patches "curl-use-ssl-cert-env.patch"
+                                      "curl-7.77-tls-priority-string.patch"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
    (inputs `(("gnutls" ,gnutls)
              ("libidn" ,libidn)
-             ("openldap" ,openldap)
              ("mit-krb5" ,mit-krb5)
              ("nghttp2" ,nghttp2 "lib")
              ("zlib" ,zlib)))
    (native-inputs
-     `(("perl" ,perl)
+     `(("nghttp2" ,nghttp2)
+       ("perl" ,perl)
        ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)))
+       ("python" ,python-minimal-wrapper)))
    (native-search-paths
     ;; These variables are introduced by curl-use-ssl-cert-env.patch.
     (list (search-path-specification
@@ -143,29 +143,8 @@ tunneling, and so on.")
                                   "See COPYING in the distribution."))
    (home-page "https://curl.haxx.se/")))
 
-;; This package exists mainly to bootstrap CMake.  It must not depend on
-;; anything that uses cmake-build-system.
 (define-public curl-minimal
-  (hidden-package
-   (package/inherit
-    curl
-    (name "curl-minimal")
-    (inputs (alist-delete "openldap" (package-inputs curl))))))
-
-(define-public curl-7.77.0
-  (package
-    (inherit curl)
-    (version "7.77.0")
-    (source
-     (origin
-       (inherit (package-source curl))
-       (uri (string-append "https://curl.haxx.se/download/curl-"
-                           version ".tar.xz"))
-       (patches (search-patches "curl-7.76-use-ssl-cert-env.patch"
-                                "curl-7.77-tls-priority-string.patch"))
-       (sha256
-        (base32
-         "0jsrc97vbghvljic997r9nypc9qqddcil2lzvv032br8ahn5hr0g"))))))
+  (deprecated-package "curl-minimal" curl))
 
 (define-public kurly
   (package
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 28832041ed..767e31db93 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -721,6 +721,8 @@ Language.")
               (sha256
                (base32
                 "1s3vfm73911cddjhgpcbkya6nz7ag2zygg56qqzwscn5ybv28j7b"))
+              (patches (search-patches "mariadb-CVE-2021-27928.patch"
+                                       "mariadb-cmake-compat.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -741,7 +743,6 @@ Language.")
                             (append (find-files "extra/wolfssl")
                                     (find-files "zlib")))
                   #t))))
-    (replacement mariadb/fixed)
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -977,13 +978,6 @@ Language.")
 as a drop-in replacement of MySQL.")
     (license license:gpl2)))
 
-(define mariadb/fixed
-  (package
-    (inherit mariadb)
-    (source (origin
-              (inherit (package-source mariadb))
-              (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
-
 (define-public mariadb-connector-c
   (package
     (name "mariadb-connector-c")
@@ -1038,15 +1032,14 @@ and high-availability (HA).")
 (define-public postgresql-13
   (package
     (name "postgresql")
-    (replacement postgresql-13.3)
-    (version "13.1")
+    (version "13.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "07z6zwr58dckaa97yl9ml240z83d1lhgaxw9aq49i8lsp21mqd0j"))
+                "18dliq7h2l8irffhyyhdmfwx3si515q6gds3cxdjb9n7m17lbn9w"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1065,6 +1058,12 @@ and high-availability (HA).")
                                       "src/bin/psql/command.c")
                          (("/bin/sh") (which "sh")))
                        #t))
+         (add-before 'configure 'set-socket-dir
+           (lambda _
+             (substitute* '("src/include/pg_config_manual.h")
+               (("DEFAULT_PGSOCKET_DIR[^\n]*")
+                "DEFAULT_PGSOCKET_DIR \"/var/run/postgresql\""))
+             #t))
          (add-after 'build 'build-contrib
            (lambda _
              (invoke "make" "-C" "contrib")))
@@ -1087,20 +1086,6 @@ TIMESTAMP.  It also supports storage of binary large objects, including
 pictures, sounds, or video.")
     (license (license:x11-style "file://COPYRIGHT"))))
 
-(define-public postgresql-13.3
-  (package
-    (inherit postgresql-13)
-    (name "postgresql")
-    (version "13.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ftp.postgresql.org/pub/source/v"
-                                  version "/postgresql-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "18dliq7h2l8irffhyyhdmfwx3si515q6gds3cxdjb9n7m17lbn9w"))
-              (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))))
-
 (define-public postgresql-11
   (package
     (inherit postgresql-13)
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index 577e7b1430..4973ce98af 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -296,8 +296,6 @@ equivalent succinct data structure are (most of the time) identical.")
                (base32
                 "061mkg6hc9x89zya3bw18ymxlzd8fbhjipxpva8x01lh2vp1d4f0"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (synopsis "Typed link list for C")
     (description
      "@code{tllist} is a @dfn{typed linked list} C header file only library
diff --git a/gnu/packages/dbm.scm b/gnu/packages/dbm.scm
index fcef907b27..cb62207cf7 100644
--- a/gnu/packages/dbm.scm
+++ b/gnu/packages/dbm.scm
@@ -1,9 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -46,7 +47,8 @@
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))))
+               "0ampbl2f0hb1nix195kz1syrqqxpmvnvnfvphambj7xjrl3iljg0"))
+             (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"                             ; programs, libraries, headers
                "doc"))                           ; 94 MiB of HTML docs
@@ -114,7 +116,9 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))))))
+                "0a1n5hbl7027fbz5lm0vp0zzfp1hmxnz14wx3zl9563h83br5ag0"))
+              (patch-flags '("-p0"))
+              (patches (search-patches "bdb-5.3-atomics-on-gcc-9.patch"))))))
 
 (define-public bdb-6
   (package (inherit bdb-4.8)
@@ -136,14 +140,14 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
 (define-public gdbm
   (package
     (name "gdbm")
-    (version "1.18.1")
+    (version "1.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gdbm/gdbm-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1p4ibds6z3ccy65lkmd6lm7js0kwifvl53r0fd759fjxgr917rl6"))))
+                "1g342f0xhh8xbc8p9vrr34clhxz57589k50dibhp5f9284hi5v9p"))))
     (arguments `(#:configure-flags '("--enable-libgdbm-compat"
                                      "--disable-static")))
     (build-system gnu-build-system)
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 3a29886b0e..9a4ce7067a 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -513,10 +513,10 @@ input.  Zzuf's behaviour is deterministic, making it easy to reproduce bugs.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/gameconqueror/GameConqueror.py")
                  `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH"             ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("libtool" ,libtool)
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index 8a0342d7c5..7ae41a674e 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -223,7 +223,7 @@ easy to use, login interface with a modern yet classy touch.")
            ;; Run test-suite under a dbus session.
            (lambda* (#:key inputs #:allow-other-keys)
              (wrap-program "tests/src/test-python-greeter"
-               `("PYTHONPATH"      ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH"      ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
 
              ;; Avoid printing locale warnings, which trip up the text
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index f157db9ba2..d53c06380a 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,24 +75,11 @@
              (substitute* "tests/settings_tests/tests.py"
                ((".*def test_incorrect_timezone.*" all)
                 (string-append "    @unittest.skipIf(True, 'Disabled by Guix')\n"
-                               all)))
-
-             ;; Preserve the PYTHONPATH created by Guix when running the tests.
-             (substitute* "tests/admin_scripts/tests.py"
-               (("python_path = \\[")
-                (string-append "python_path = ['"
-                               (string-join
-                                (string-split (getenv "PYTHONPATH") #\:)
-                                "','")
-                               "', ")))
-
-             #t))
+                               all)))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "tests"
-                   (setenv "PYTHONPATH"
-                           (string-append "..:" (getenv "PYTHONPATH")))
                    (invoke "python" "runtests.py"
                            ;; By default tests run in parallel, which may cause
                            ;; various race conditions.  Run sequentially for
@@ -332,23 +320,18 @@ size and quality.")
          (replace 'check
            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              (if tests?
-                 (begin
-                   (add-installed-pythonpath inputs outputs)
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" ;for pytest_django_test
-                                          (getenv "PYTHONPATH")))
-                   (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
-                   (setenv "DJANGO_SETTINGS_MODULE"
-                           "pytest_django_test.settings_sqlite_file")
-                   (invoke "pytest" "-vv" "-k"
-                           ;; FIXME: these tests fail to locate Django templates ...
-                           (string-append "not test_django_not_loaded_without_settings"
-                                          " and not test_settings"
-                                          ;; ... and this does not discover
-                                          ;; 'pytest_django_test'.
-                                          " and not test_urls_cache_is_cleared")))
-                 (format #t "test suite not run~%"))
-             #t)))))
+               (begin
+                 (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
+                 (setenv "DJANGO_SETTINGS_MODULE"
+                         "pytest_django_test.settings_sqlite_file")
+                 (invoke "python" "-m" "pytest" "-vv" "-k"
+                         ;; FIXME: these tests fail to locate Django templates ...
+                         (string-append "not test_django_not_loaded_without_settings"
+                                        " and not test_settings"
+                                        ;; ... and this does not discover
+                                        ;; 'pytest_django_test'.
+                                        " and not test_urls_cache_is_cleared")))
+               (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-django" ,python-django)
        ("python-setuptools-scm" ,python-setuptools-scm)
@@ -356,7 +339,7 @@ size and quality.")
        ;; For tests.
        ("python-pytest-xdist" ,python-pytest-xdist)))
     (propagated-inputs
-     `(("python-pytest" ,python-pytest-6)))
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://pytest-django.readthedocs.org/")
     (synopsis "Django plugin for py.test")
     (description "Pytest-django is a plugin for py.test that provides a set of
@@ -718,9 +701,6 @@ project aims to bulk update given objects using one query over Django ORM.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append "./build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "coverage" "run" "--source" "contact_form"
                      "runtests.py"))))))
     (native-inputs
@@ -779,14 +759,9 @@ entries, photos, book chapters, or anything else.")
                 (which "env")))))
          (replace 'check
            (lambda*(#:key tests? #:allow-other-keys)
-             (or
-              (not tests?)
-              (begin
-                (setenv "PYTHONPATH"
-                        (string-append (getcwd) ":"
-                                       (getenv "PYTHONPATH")))
-                (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
-                (invoke "django-admin" "test" "tests"))))))))
+             (when tests?
+               (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
+               (invoke "django-admin" "test" "tests")))))))
     (native-inputs
      `(("python-django" ,python-django)))
     (propagated-inputs
@@ -913,10 +888,8 @@ using Python multiprocessing.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append "./test_project:"
-                                                          "./build/lib:.:"
-                                                          (getenv "PYTHONPATH")))
-                      (invoke "django-admin.py" "test" "--settings=settings"))))))
+                      (invoke "python" "django-admin.py"
+                              "test" "--settings=settings"))))))
     (native-inputs
      `(("python-django" ,python-django)))
     (home-page "https://github.com/jazzband/django-sortedm2m")
@@ -942,10 +915,8 @@ the order of added relations.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append ".:"
-                                                          (getenv "PYTHONPATH")))
                       (setenv "DJANGO_SETTINGS_MODULE" "tests.test_settings")
-                      (invoke "django-admin.py" "test" "-v2"))))))
+                      (invoke "python" "django-admin.py" "test" "-v2"))))))
     (native-inputs
      `(("python-django" ,python-django)))
     (home-page "https://github.com/django-compressor/django-appconf")
@@ -977,9 +948,7 @@ name is purely coincidental.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./tests/test_project:./build/lib:"
-                                             (getenv "PYTHONPATH")))
+                      (setenv "PYTHONPATH" "./tests/test_project")
                       (setenv "DJANGO_SETTINGS_MODULE" "project.settings")
                       (invoke "pytest" "-vv"))))))
     (native-inputs
@@ -1296,15 +1265,11 @@ to ElasticSearch.")
                       ;; Do not depend on compatibility package for old
                       ;; Python versions.
                       (substitute* "requirements.txt"
-                        (("enum-compat") ""))
-                      #t))
+                        (("enum-compat") ""))))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
                           (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:.:"
-                                                   (getenv "PYTHONPATH")))
                             (setenv "DJANGO_SETTINGS_MODULE"
                                     "test_project.settings")
                             (invoke "pytest" "-vv" "--doctest-modules"
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index 1945fb6a4b..9f47dadd5d 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -28,13 +28,16 @@
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages inkscape)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages xml)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module ((guix build utils) #:select (alist-replace))
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python))
 
@@ -170,15 +173,17 @@ by no means limited to these applications.)  This package provides XML DTDs.")
 (define-public docbook-xsl
   (package
     (name "docbook-xsl")
-    (version "1.79.1")
+    (version "1.79.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/docbook/docbook-xsl/"
-                                  version "/docbook-xsl-" version ".tar.bz2"))
-              (patches (search-patches "docbook-xsl-nonrecursive-string-subst.patch"))
+              (uri (string-append "https://github.com/docbook/xslt10-stylesheets"
+                                  "/releases/download/release%2F" version
+                                  "/docbook-xsl-" version ".tar.bz2"))
+              (patches (search-patches "docbook-xsl-support-old-url.patch"
+                                       "docbook-xsl-nonrecursive-string-subst.patch"))
               (sha256
                (base32
-                "0s59lihif2fr7rznckxr2kfyrvkirv76r1zvidp9b5mj28p4apvj"))
+                "0wd33z41kdsybyx3ay21w6bdlmgpd9kyn3mr5y520lsf8km28r9i"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -186,9 +191,12 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                   #t))))
     (build-system trivial-build-system)
     (arguments
-     `(#:builder (let ((name-version (string-append ,name "-" ,version)))
+     `(#:builder (begin
                    (use-modules (guix build utils))
 
+                   (define name-version
+                     (string-append ,name "-" ,version))
+
                    (let* ((bzip2  (assoc-ref %build-inputs "bzip2"))
                           (xz     (assoc-ref %build-inputs "xz"))
                           (tar    (assoc-ref %build-inputs "tar"))
@@ -382,25 +390,24 @@ the in DocBook SGML DTDs.")
 (define-public dblatex
   (package
     (name "dblatex")
-    (version "0.3.11")
+    (version "0.3.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/dblatex/dblatex/"
-                                  "dblatex-" version "/dblatex-"
+                                  "dblatex-" version "/dblatex3-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0rp1bc2lgisigscq1i7zxfd2qdaxxxld6khbcxss4pq7fpi9fzkv"))))
+                "0yd09nypswy3q4scri1dg7dr99d7gd6r2dwx0xm81l9f4y32gs0n"))))
     (build-system python-build-system)
     ;; TODO: Add xfig/transfig for fig2dev utility
     (inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-anysize
                                         texlive-latex-appendix
+                                        texlive-latex-bookmark
                                         texlive-latex-changebar
                                         texlive-latex-colortbl
-                                        texlive-latex-eepic
-                                        texlive-latex-eso-pic
                                         texlive-latex-fancybox
                                         texlive-latex-fancyhdr
                                         texlive-latex-fancyvrb
@@ -410,26 +417,23 @@ the in DocBook SGML DTDs.")
                                         texlive-latex-jknapltx
                                         texlive-latex-listings
                                         texlive-latex-multirow
-                                        texlive-latex-oberdiek
                                         texlive-latex-overpic
                                         texlive-latex-pdfpages
+                                        texlive-latex-refcount
                                         texlive-latex-subfigure
                                         texlive-latex-titlesec
-                                        texlive-latex-url
                                         texlive-latex-wasysym
 
-                                        texlive-fonts-ec
                                         texlive-fonts-rsfs
                                         texlive-fonts-stmaryrd
 
-                                        texlive-generic-ifxetex)))
+                                        texlive-generic-iftex)))
        ("imagemagick" ,imagemagick)     ;for convert
        ("inkscape" ,inkscape)           ;for svg conversion
        ("docbook" ,docbook-xml)
        ("libxslt" ,libxslt)))           ;for xsltproc
     (arguments
-     `(#:python ,python-2               ;'print' syntax
-       ;; Using setuptools causes an invalid "package_base" path in
+     `(;; Using setuptools causes an invalid "package_base" path in
        ;; out/bin/.dblatex-real due to a missing leading '/'.  This is caused
        ;; by dblatex's setup.py stripping the root path when creating the
        ;; script.  (dblatex's setup.py still uses distutils and thus has to
@@ -473,3 +477,88 @@ DB2LaTeX.")
    (package/inherit dblatex
      (inputs (alist-replace "imagemagick" `(,imagemagick/stable)
                             (package-inputs dblatex))))))
+
+(define-public docbook-utils
+  (package
+    (name "docbook-utils")
+    (version "0.6.14")
+    (source (origin
+              (method url-fetch)
+              ;; The original sources are not accessible anymore.
+              (uri (string-append "http://deb.debian.org/debian/pool/main/"
+                                  "d/docbook-utils/docbook-utils_"
+                                  version ".orig.tar.gz"))
+              (sha256
+               (base32
+                "1scj5vgw1xz872pq54a89blcxqqm11p90yzv8a9mqq57x27apyj8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-build-system
+                    (lambda _
+                      (substitute* (find-files "." "\\.in$")
+                        ;; Do not hard-code SGML_CATALOG_FILES.
+                        ((".*SGML_CATALOG_FILES=/etc/sgml/catalog.*") "")
+                        ;; Use OpenSP and OpenJade.
+                        (("\\bjade\\b")
+                         "openjade")
+                        (("\\bnsgmls\\b")
+                         "onsgmls"))
+                      #t))
+                  (add-after 'unpack 'patch-jw.in
+                    ;; Do not override the SGML_CATALOG_FILES environment
+                    ;; variable.
+                    (lambda _
+                      (substitute* "bin/jw.in"
+                        ((".*SGML_CATALOG_FILES=`find.*")
+                         "")
+                        (("SGML_CATALOG_FILES=`echo.*")
+                         ":\n")
+                        (("SGML_CATALOG_FILES=\"\"")
+                         ":")
+                        (("\\bwhich\\b")
+                         "command -v"))
+                      #t))
+                  (add-after 'unpack 'patch-txt-backend
+                    (lambda _
+                      ;; Locate lynx, links or w3m from the PATH, not from
+                      ;; /usr/bin.
+                      (substitute* "backends/txt"
+                        (("CONVERT=/usr/bin/")
+                         "CONVERT=")
+                        (("\\[ -x /usr/bin/([^ ]+) \\]" dummy command)
+                         (string-append "command -v " command " > /dev/null")))
+                      #t)))))
+    ;; Propagated for convenience.  All these tools are used at run time to
+    ;; provide the complete functionality of the docbook-utils commands.
+    (propagated-inputs
+     `(("texlive-jadetex" ,texlive-jadetex)
+       ("docbook-sgml" ,docbook-sgml-3.1)
+       ("docbook-dsssl" ,docbook-dsssl)
+       ("openjade" ,openjade)
+       ("opensp" ,opensp)
+       ("lynx" ,lynx)
+       ("perl-sgmls" ,perl-sgmls)))
+    (home-page "https://packages.debian.org/sid/docbook-utils")
+    (synopsis "DocBook converter to other formats")
+    (description "The docbook-utils package is a collection of utilities
+intended to ease the use of SGML and XML.
+@table @command
+@item jw
+Convert a SGML DocBook file to other formats such as Hyper Text Markup
+Language (HTML), Rich Text Format (RTF), PostScript (PS), man, Portable
+Document Format (PDF), TeX, Texinfo or plain text (txt).  It can be used
+more conveniently via the following wrappers:
+@itemx docbook2dvi Convert a SGML DocBook file to the DVI format.
+@itemx docbook2html Convert a SGML DocBook file to an HTML document.
+@itemx docbook2man Convert a SGML DocBook file a man page.
+@itemx docbook2pdf Convert a SGML DocBook file to a PDF document.
+@itemx docbook2ps Convert a SGML DocBook file to a PS document.
+@itemx docbook2rtf Convert a SGML DocBook file to a RTF document.
+@itemx docbook2tex Convert a SGML DocBook file to a TeX document.
+@itemx docbook2texi Convert a SGML DocBook file to a Texinfo document.
+@itemx docbook2txt Convert a SGML DocBook file to a plain text document.
+@item sgmldiff
+Detect the differences in markup between two SGML files.
+@end table")
+    (license gpl2+)))
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index 19190f4480..4313af387e 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -185,8 +185,8 @@ markup) can be customized and extended by the user.")
 (define-public doxygen
   (package
     (name "doxygen")
-    (version "1.8.17")
-    (home-page "http://www.doxygen.nl/")
+    (version "1.9.1")
+    (home-page "https://www.doxygen.nl/")
     (source (origin
              (method url-fetch)
              (uri (list (string-append home-page "files/doxygen-"
@@ -196,9 +196,7 @@ markup) can be customized and extended by the user.")
                                        ".src.tar.gz")))
              (sha256
               (base32
-               "16dmv0gm1x8rvbm82fmjvi213q8fxqxinm75pcf595flya59ific"))
-             (patches (search-patches "doxygen-test.patch"
-                                      "doxygen-1.8.17-runtests.patch"))))
+               "1lcif1qi20gf04qyjrx7x367669g17vz2ilgi4cmamp1whdsxbk7"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -218,6 +216,12 @@ markup) can be customized and extended by the user.")
              '())
        #:test-target "tests"
        #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-bibtex-test
+                    (lambda _
+                      ;; Disable test that requires bibtex to avoid a
+                      ;; circular dependency.
+                      (for-each delete-file-recursively
+                                '("testing/012" "testing/012_cite.dox"))))
                   (add-before 'configure 'patch-sh
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (substitute* "src/portable.cpp"
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index 48f005f51a..1fcee832a3 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -325,7 +325,7 @@ sip-include-dirs = [\"" pyqt "/share/sip" "\"]")))
                   ;; rather than create ..calibre-real-real-s.  For more
                   ;; information see: https://issues.guix.gnu.org/43249.
                   (find-files "." (lambda (file stat)
-                                    (not (wrapper? file)))))))
+                                    (not (wrapped-program? file)))))))
              #t)))))
     (home-page "https://calibre-ebook.com/")
     (synopsis "E-book library management software")
@@ -514,12 +514,12 @@ following formats:
                     (libmagic-path     (string-append
                                         (assoc-ref %build-inputs "file")
                                         "/lib"))
-                    (python-path     (getenv "PYTHONPATH")))
+                    (python-path     (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/cozy")
                  `("LD_LIBRARY_PATH" ":" prefix (,libmagic-path))
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path ,pylib))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path ,pylib))))
              #t)))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
diff --git a/gnu/packages/ed.scm b/gnu/packages/ed.scm
index da4c3ddf04..accc461e9b 100644
--- a/gnu/packages/ed.scm
+++ b/gnu/packages/ed.scm
@@ -28,14 +28,14 @@
 (define-public ed
   (package
     (name "ed")
-    (version "1.16")
+    (version "1.17")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/ed/ed-"
                                  version ".tar.lz"))
              (sha256
               (base32
-               "0b4b1lwizvng9bvpcjnmpj2i80xz9xw2w8nfff27b2h4mca7mh6g"))))
+               "0m2yrkfjjraakxr98nsiakqrn351h99n706x9asgmdi57j43kpki"))))
     (build-system gnu-build-system)
     (native-inputs `(("lzip" ,lzip)))
     (arguments
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 7eabfd78b6..91ccfd8ca7 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -883,7 +883,7 @@ stored and user can review his performance in any time.")
                              `("PATH" prefix (,(string-append
                                                 (assoc-ref inputs "mpv")
                                                 "/bin")))
-                             `("PYTHONPATH" = ,site-packages)))
+                             `("GUIX_PYTHONPATH" = ,site-packages)))
                          (find-files bin ".")))
              #t)))))
     (native-inputs
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index aab912648b..2bc1d00048 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020 Mark Wielaard <mark@klomp.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
@@ -47,14 +49,14 @@
 (define-public elfutils
   (package
     (name "elfutils")
-    (version "0.182")
+    (version "0.183")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://sourceware.org/elfutils/ftp/"
                                   version "/elfutils-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n48dcadjy0wiilddzav2zaxdi30qkkfp160gw5mycyz9s8hdi7c"))
+                "1igjfia9x8h6fmh9nbl8mpz0i24my5iixrji99qmi79hilh7qqy3"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))
     (build-system gnu-build-system)
 
@@ -70,6 +72,7 @@
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
                                               "/lib")
+                               "--disable-static"
                                ;; TODO: Enable the debuginfo server.  It
                                ;; increases the closure size significantly
                                ;; and presents bootstrapping problems, so
@@ -204,22 +207,32 @@ static analysis of the ELF binaries at hand.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; This old `configure' script doesn't support
-             ;; variables passed as arguments.
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "CONFIG_SHELL" (which "bash"))
-               (invoke "./configure"
-                       (string-append "--prefix=" out)
-                       ,@(if (string=? "powerpc64le-linux"
-                                       (%current-system))
-                             '("--host=powerpc64le-unknown-linux-gnu")
-                             '())
-                       ,@(if (string=? "aarch64-linux"
-                                       (%current-system))
-                             '("--host=aarch64-unknown-linux-gnu")
-                             '()))))))))
+         ;; This old 'configure' script doesn't support cross-compilation
+         ;; well.  I.e., it fails to find the cross-compiler.  Also,
+         ;; the old `configure' script doesn't support variables passed as
+         ;; arguments.  A third problem is that config.sub is too old to
+         ;; recognise aarch64 and powerpc64le.
+         ;;
+         ;; Solve this by regenerating the configure script and letting
+         ;; autoreconf update 'config.sub'.  While 'config.sub' is updated
+         ;; anyway, update 'config.guess' as well.
+         (add-before 'bootstrap 'delete-configure
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (delete-file "configure")
+             (delete-file "config.sub")
+             (delete-file "config.guess")
+             (for-each (lambda (file)
+                         (install-file
+                          (string-append
+                           (assoc-ref (or native-inputs inputs) "automake")
+                           "/share/automake-"
+                           ,(version-major+minor (package-version automake))
+                           "/" file) "."))
+                       '("config.sub" "config.guess")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ;; For up-to-date 'config.guess' and 'config.sub'
+       ("automake" ,automake)))
     (home-page (string-append "https://web.archive.org/web/20181111033959/"
                               "http://www.mr511.de/software/english.html"))
     (synopsis "ELF object file access library")
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 381c216f69..e85b5f40ae 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -693,14 +693,12 @@ on stdout instead of using a socket as the Emacsclient does.")
                  (make-file-writable "libgit.el")
                  (emacs-substitute-variables "libgit.el"
                    ("libgit--module-file"
-                    (string-append (emacs:elpa-directory out) "/libegit2.so")))
-                 #t)))
+                    (string-append (emacs:elpa-directory out) "/libegit2.so"))))))
            (add-before 'install 'prepare-for-install
              (lambda _
-               (let ((s (string-append "../" ,name "-" ,version "-checkout")))
+               (let ((s "../source"))
                  (copy-file "libegit2.so" (string-append s "/libegit2.so"))
-                 (chdir s)
-                 #t)))
+                 (chdir s))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((install (assoc-ref emacs:%standard-phases 'install)))
@@ -2596,7 +2594,7 @@ as a library for other Emacs packages.")
      `(("perl" ,perl)))
     (inputs
      `(("ghostscript" ,ghostscript)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched)))))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts)))))
     (home-page "https://www.gnu.org/software/auctex/")
     (synopsis "Integrated environment for TeX")
     (description
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 1edbaa463a..060a253968 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -71,6 +71,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix utils)
+  #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
 (define-public emacs
@@ -266,7 +267,12 @@
        ("libpng" ,libpng)
        ("zlib" ,zlib)
 
-       ("librsvg" ,librsvg)
+       ;; librsvg is an optional dependency that pulls in rust.  Rust is not
+       ;; supported well on every architecture yet.
+       ,@(if (string-prefix? "x86_64" (or (%current-target-system)
+                                          (%current-system)))
+             `(("librsvg" ,librsvg))
+             '())
        ("libxpm" ,libxpm)
        ("libxml2" ,libxml2)
        ("libice" ,libice)
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 838ecb533a..68ec6f3254 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -2197,17 +2197,6 @@ performance, features, and ease of use.")
                     (guix build utils))
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'install-bindings-to-python-output
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; python-build-system will build the bindings and install them to
-               ;; the "out" output, so change the build-internal names of the
-               ;; outputs.
-               ;;
-               ;; TODO: remove this once #40469 lands, through the core-updates
-               ;; holding zone, on master.
-               (set-car! (assoc "out" outputs) "lib")
-               (set-car! (assoc "python" outputs) "out")
-               #t))
            (add-before 'build 'build-library
              (lambda* (#:key inputs #:allow-other-keys)
                (invoke "make"
@@ -2220,7 +2209,7 @@ performance, features, and ease of use.")
                        "UNICORN_STATIC=no"
                        (string-append
                         "PREFIX="
-                        (assoc-ref outputs "lib")))))
+                        (assoc-ref outputs "out")))))
            (add-before 'build 'prepare-bindings
              (lambda* (#:key outputs #:allow-other-keys)
                (chdir "bindings/python")
@@ -2233,7 +2222,7 @@ performance, features, and ease of use.")
                  (("_path_list = \\[.*")
                   (string-append
                    "_path_list = [\""
-                   (assoc-ref outputs "lib")
+                   (assoc-ref outputs "out")
                    ;; eat the rest of the list
                    "/lib\"] + 0*[")))
                #t))
@@ -2254,10 +2243,10 @@ performance, features, and ease of use.")
                (let* ((python-samples (find-files "." "sample_.*"))
                       (c-samples (find-files "../../samples" ".*\\.c"))
                       (python-docdir
-                        (string-append (assoc-ref outputs "out")
+                        (string-append (assoc-ref outputs "python")
                                        "/share/doc/unicorn/samples"))
                       (c-docdir
-                        (string-append (assoc-ref outputs "lib")
+                        (string-append (assoc-ref outputs "out")
                                        "/share/doc/unicorn/samples")))
                  (for-each (cut install-file <> c-docdir) c-samples)
                  (for-each (cut install-file <> python-docdir) python-samples)
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index fc932ddb28..aa74d691c7 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -526,7 +526,7 @@ featuring various improvements and bug fixes.")))
      ;; FIXME: with texlive-tiny citation references are rendered as question
      ;; marks.  During the build warnings like these are printed:
      ;; LaTeX Warning: Citation `nabors91' on page 2 undefined on input line 3.
-     `(("texlive" ,(texlive-union (list texlive-fonts-amsfonts)))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-fonts-amsfonts)))
        ("ghostscript" ,ghostscript)))
     (arguments
      `(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
@@ -948,9 +948,9 @@ Emacs).")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -1205,9 +1205,9 @@ the 'showing the effect of'-style of operation.")
                            ,(version-major+minor
                              (package-version python))
                            "/site-packages:"
-                           (getenv "PYTHONPATH"))))
+                           (getenv "GUIX_PYTHONPATH"))))
                (wrap-program file
-                 `("PYTHONPATH" ":" prefix (,path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))
                  `("PATH" ":" prefix
                    (,(string-append python "/bin:")))))
              #t)))))
@@ -2763,9 +2763,7 @@ GUI.")
                 "06qgry1pal2vampmbmc1lzlhf1qnjkd8py781r5h020v981n6y5s"))))
     (build-system gnu-build-system)
     ;; The GUI, which we elide, requires tcl and tk.
-    (native-inputs `(;; Requires bison 3.6+ but we currently only have 3.5.
-                     ;; Bison 3.6 will be available in the next core update.
-                     ("bison-3.6" ,bison-3.6)
+    (native-inputs `(("bison" ,bison)
                      ("clisp" ,clisp)
                      ("dejagnu" ,dejagnu)
                      ("flex" ,flex)
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index 3f1145b520..6fb98244f9 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,14 +31,14 @@
 (define-public file
   (package
     (name "file")
-    (version "5.38")
+    (version "5.39")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0d7s376b4xqymnrsjxi3nsv3f5v89pzfspzml2pcajdk5by2yg2r"))))
+                "1lgs2w2sgamzf27kz5h7pajz7v62554q21fbs11n4mfrfrm2hpgh"))))
    (build-system gnu-build-system)
 
    ;; When cross-compiling, this package depends upon a native install of
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 9c7393b963..b7ac19f00f 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -8,10 +8,13 @@
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +39,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages datastructures)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages freedesktop)
@@ -59,6 +63,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages tex)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -317,55 +322,65 @@ Font Format (WOFF).")
     (license license:expat)))
 
 (define-public fontconfig
-  (package
-   (name "fontconfig")
-   (version "2.13.1")
-   (source (origin
+  (hidden-package
+   (package
+     (name "fontconfig-minimal")
+     (version "2.13.93")
+     (source (origin
             (method url-fetch)
             (uri (string-append
-                   "https://www.freedesktop.org/software/fontconfig/release/fontconfig-"
-                   version ".tar.bz2"))
-            (patches (search-patches "fontconfig-hurd-path-max.patch"))
+                  "https://www.freedesktop.org/software/"
+                  "fontconfig/release/fontconfig-" version ".tar.xz"))
             (sha256 (base32
-                     "0hb700a68kk0ip51wdlnjjc682kvlrmb6q920mzajykdk0mdsmgn"))))
-   (build-system gnu-build-system)
-   ;; In Requires or Requires.private of fontconfig.pc.
-   (propagated-inputs `(("expat" ,expat)
-                        ("freetype" ,freetype)
-                        ("libuuid" ,util-linux "lib")))
-   (inputs
-    ;; We use to use 'gs-fonts' but they are not recognized by newer versions
-    ;; of Pango, causing many applications to fail to find fonts otherwise.
-    `(("font-dejavu" ,font-dejavu)))
-   (native-inputs
-    `(("gperf" ,gperf)
-      ("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-cache-dir=/var/cache/fontconfig"
-            ;; register the default fonts
-            (string-append "--with-default-fonts="
-                           (assoc-ref %build-inputs "font-dejavu")
-                           "/share/fonts")
-
-            ;; Register fonts from user and system profiles.
-            (string-append "--with-add-fonts="
-                           "~/.guix-profile/share/fonts,"
-                           "/run/current-system/profile/share/fonts")
-
-            ;; python is not actually needed
-            "PYTHON=false")
-      #:phases
-      (modify-phases %standard-phases
-        (replace 'install
-                 (lambda _
-                   ;; Don't try to create /var/cache/fontconfig.
-                   (invoke "make" "install"
-                           "fc_cachedir=$(TMPDIR)"
-                           "RUN_FC_CACHE_TEST=false"))))))
-   (synopsis "Library for configuring and customizing font access")
-   (description
-    "Fontconfig can discover new fonts when installed automatically;
+                     "1850q4k80yxma5g3yxkvyv8i5a3xqzswwml8gjy3jmywx8qqd5pa"))
+             (patches (search-patches "fontconfig-cache-ignore-mtime.patch"))))
+     (build-system gnu-build-system)
+     ;; In Requires or Requires.private of fontconfig.pc.
+     (propagated-inputs `(("expat" ,expat)
+                          ("freetype" ,freetype)
+                          ("libuuid" ,util-linux "lib")))
+     (inputs
+      ;; We use to use 'gs-fonts' but they are not recognized by newer versions
+      ;; of Pango, causing many applications to fail to find fonts otherwise.
+      `(("font-dejavu" ,font-dejavu)))
+     (native-inputs
+      `(("gperf" ,gperf)
+        ("pkg-config" ,pkg-config)
+        ("python" ,python-minimal)))    ;to avoid a cycle through tk
+     (arguments
+      `(#:configure-flags
+        (list "--disable-docs"
+              "--with-cache-dir=/var/cache/fontconfig"
+              ;; register the default fonts
+              (string-append "--with-default-fonts="
+                             (assoc-ref %build-inputs "font-dejavu")
+                             "/share/fonts")
+
+              ;; Register fonts from user and system profiles.
+              (string-append "--with-add-fonts="
+                             "~/.guix-profile/share/fonts,"
+                             "/run/current-system/profile/share/fonts"))
+        #:phases
+        (modify-phases %standard-phases
+          (add-before 'check 'skip-problematic-tests
+            (lambda _
+              ;; SOURCE_DATE_EPOCH doesn't make sense when ignoring mtime
+              (unsetenv "SOURCE_DATE_EPOCH")
+
+              (substitute* "test/run-test.sh"
+                ;; The crbug1004254 test attempts to fetch fonts from the
+                ;; network.
+                (("\\[ -x \"\\$BUILDTESTDIR\"/test-crbug1004254 \\]")
+                 "false"))))
+          (replace 'install
+            (lambda _
+              ;; Don't try to create /var/cache/fontconfig.
+              (invoke "make" "install"
+                      "fc_cachedir=$(TMPDIR)"
+                      "RUN_FC_CACHE_TEST=false"))))))
+     (synopsis "Library for configuring and customizing font access")
+     (description
+      "Fontconfig can discover new fonts when installed automatically;
 perform font name substitution, so that appropriate alternative fonts can
 be selected if fonts are missing;
 identify the set of fonts required to completely cover a set of languages;
@@ -373,10 +388,50 @@ have GUI configuration tools built as it uses an XML-based configuration file;
 efficiently and quickly find needed fonts among the set of installed fonts;
 be used in concert with the X Render Extension and FreeType to implement
 high quality, anti-aliased and subpixel rendered text on a display.")
-   ; The exact license is more X11-style than BSD-style.
-   (license (license:non-copyleft "file://COPYING"
-                       "See COPYING in the distribution."))
-   (home-page "https://www.freedesktop.org/wiki/Software/fontconfig")))
+                                        ; The exact license is more X11-style than BSD-style.
+     (license (license:non-copyleft "file://COPYING"
+                                    "See COPYING in the distribution."))
+     (home-page "https://www.freedesktop.org/wiki/Software/fontconfig"))))
+
+;;; The documentation of fontconfig is built in a separate package, as it
+;;; causes a dramatic increase in the size of the closure of fontconfig.  This
+;;; is intentionally named 'fontconfig', as it's intended as the user-facing
+;;; fontconfig package.
+(define-public fontconfig-with-documentation
+  (package
+    (inherit fontconfig)
+    (name "fontconfig")
+    (outputs (cons "doc" (package-outputs fontconfig)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments fontconfig)
+       ((#:configure-flags configure-flags)
+        `(delete "--disable-docs" ,configure-flags))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'no-pdf-doc
+             (lambda _
+               ;; Don't build documentation as PDF.
+               (substitute* "doc/Makefile.in"
+                 (("^PDF_FILES = .*")
+                  "PDF_FILES =\n"))))
+           (add-after 'install 'move-man-sections
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Move share/man/man{3,5} to the "doc" output.  Leave "man1" in
+               ;; "out" for convenience.
+               (let ((out (assoc-ref outputs "out"))
+                     (doc (assoc-ref outputs "doc")))
+                 (for-each (lambda (section)
+                             (let ((source (string-append out "/share/man/"
+                                                          section))
+                                   (target (string-append doc "/share/man/"
+                                                          section)))
+                               (copy-recursively source target)
+                               (delete-file-recursively source)))
+                           '("man3" "man5")))))))))
+    (native-inputs
+     (append (package-native-inputs fontconfig)
+             `(("docbook-utils" ,docbook-utils))))
+    (properties (alist-delete 'hidden? (package-properties fontconfig)))))
 
 (define-public t1lib
   (package
@@ -421,14 +476,14 @@ X11-system or any other graphical user interface.")
 (define-public teckit
   (package
     (name "teckit")
-    (version "2.5.9")                   ;signed by key 0xC9183BEA0288CDEE
+    (version "2.5.10")                  ; signed by key 0xC9183BEA0288CDEE
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/silnrsi/teckit/releases/"
                            "download/v" version "/teckit-" version ".tar.gz"))
        (sha256
-        (base32 "0gbxyip4wdibirdg2pvzayzyy927vxyd6dfyfiflx8zg88qzn8v8"))))
+        (base32 "12qnf8nhxyr4d5pc01s3vc6h726506957an4vvmmfz633cqi5796"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -472,17 +527,6 @@ applications should be.")
         (base32
          "01jzhwnj1c3d68dmw15jdxly0hwkmd8ja4kw755rbkykn1ly2qyx"))))
    (build-system cmake-build-system)
-   (arguments
-    `(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'adjust-test-PYTHONPATH
-                   (lambda _
-                     ;; Tell the build system not to override PYTHONPATH
-                     ;; while running the Python tests.
-                     (substitute* "Graphite.cmake"
-                       (("ENVIRONMENT PYTHONPATH=")
-                        (string-append "ENVIRONMENT PYTHONPATH="
-                                       (getenv "PYTHONPATH") ":")))
-                     #t)))))
    (native-inputs
     `(("python" ,python)
       ("python-fonttools" ,python-fonttools)))
@@ -601,14 +645,14 @@ definitions.")
 (define-public fontforge
   (package
    (name "fontforge")
-   (version "20200314")
+   (version "20201107")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "https://github.com/fontforge/fontforge/releases/download/"
                   version "/fontforge-" version ".tar.xz"))
             (sha256
-             (base32 "0qf88wd6riycq56d24brybyc93ns74s0nyyavm43zp2kfcihn6fd"))))
+             (base32 "0y3c8x1i6yf6ak9m5dhr1nldgfmg7zhnwdfd57ffs698c27vmg38"))))
    (build-system cmake-build-system)
    (native-inputs
     `(("pkg-config" ,pkg-config)))
@@ -810,8 +854,6 @@ maintain the Noto Fonts project.")
                (base32
                 "00rwh5qfayihrq0wjx8pxqw5ah6g5ym6raxvdbqb6g6rk7m2j423"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.55))
     (native-inputs
      `(("check" ,check)
        ("gcc" ,gcc-10)    ;TODO: Remove when the default compiler is > GCC 7.
@@ -869,7 +911,7 @@ generated list of fallback fonts are checked.")
       ("glib" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
       ("pkg-config" ,pkg-config)
-      ("vala" ,vala-0.50)
+      ("vala" ,vala)
       ("yelp-tools" ,yelp-tools)))
    (inputs
     `(("fonconfig" ,fontconfig)
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 24f12a045a..5c76e6b8f0 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -647,7 +647,7 @@ the freedesktop.org XDG Base Directory specification.")
              ;; logind system so that it can flicker the monitor, etc.
              ;; Just skip it until a more narrow selection can be made.
              (substitute* "src/libelogind/sd-login/test-login.c"
-               (("r = sd_pid_get_slice.*")
+               (("test_login\\(\\);")
                 "return 77;"))
              #t))
          (add-after 'unpack 'change-pid-file-path
@@ -951,38 +951,63 @@ Python.")
 (define-public wayland
   (package
     (name "wayland")
-    (version "1.18.0")
+    (version "1.19.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://wayland.freedesktop.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0k995rn96xkplrapz5k648j651wc43kq817xk1x8280h16gsfxa6"))))
-    (build-system gnu-build-system)
+                "05bd2vphyx8qwa1mhsj1zdaiv4m4v94wrlssrn0lad8d601dkk5s"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:parallel-tests? #f))
+     `(#:parallel-tests? #f
+        #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "doc"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))
+                 (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml-4.2")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
     (native-inputs
-     `(("doxygen" ,doxygen)
-       ("graphviz" ,graphviz)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)
        ("xmlto" ,xmlto)
        ("xsltproc" ,libxslt)))
     (inputs
-     `(("docbook-xml" ,docbook-xml)
-       ("docbook-xsl" ,docbook-xsl)
-       ("expat" ,expat)
-       ("libffi" ,libffi)
-       ("libxml2" ,libxml2))) ; for XML_CATALOG_FILES
+     `(("expat" ,expat)
+       ("libxml2" ,libxml2)))           ; for XML_CATALOG_FILES
+    (propagated-inputs
+     `(("libffi" ,libffi)))
     (home-page "https://wayland.freedesktop.org/")
-    (synopsis "Display server protocol")
-    (description
-     "Wayland is a protocol for a compositor to talk to its clients as well as
-a C library implementation of that protocol.  The compositor can be a standalone
-display server running on Linux kernel modesetting and evdev input devices, an X
-application, or a wayland client itself.  The clients can be traditional
-applications, X servers (rootless or fullscreen) or other display servers.")
-    (license license:x11)))
+    (synopsis "Core Wayland window system code and protocol")
+    (description "Wayland is a project to define a protocol for a compositor to
+talk to its clients as well as a library implementation of the protocol.  The
+compositor can be a standalone display server running on Linux kernel
+modesetting and evdev input devices, an X application, or a wayland client
+itself.  The clients can be traditional applications, X servers (rootless or
+fullscreen) or other display servers.")
+    (license license:expat)))
 
 (define-public wayland-protocols
   (package
@@ -1002,7 +1027,10 @@ applications, X servers (rootless or fullscreen) or other display servers.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (synopsis "Wayland protocols")
-    (description "This package contains XML definitions of the Wayland protocols.")
+    (description "Wayland-Protocols contains Wayland protocols that add
+functionality not available in the Wayland core protocol.  Such protocols either
+add completely new functionality, or extend the functionality of some other
+protocol either in Wayland core, or some other protocol in wayland-protocols.")
     (home-page "https://wayland.freedesktop.org")
     (license license:expat)))
 
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index e1593c0f82..e24b7bbed9 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1251,8 +1251,7 @@ developed mainly for Ren'py.")
      `(("python2-future" ,python2-future)
        ("python2-pygame" ,python2-pygame-sdl2)))
     (native-inputs
-     `(("gcc" ,gcc-8) ; for const variables as initializer elements
-       ("python2-cython" ,python2-cython)))
+     `(("python2-cython" ,python2-cython)))
     (home-page "https://www.renpy.org/")
     (synopsis "Ren'py python module")
     (description "This package contains the shared libraries and Python modules
@@ -1451,7 +1450,7 @@ if __name__ == \"__main__\":
                                          (assoc-ref inputs "python"))
                                         "/site-packages")))
                (wrap-program (string-append out "/bin/renpy")
-                 `("PYTHONPATH" =
+                 `("GUIX_PYTHONPATH" =
                    (,@(delete-duplicates
                        (map
                         (lambda (store-path)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 8c6b5523f1..e67b22d6b6 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2241,9 +2241,9 @@ utilizing the art assets from the @code{SuperTux} project.")
                  (lambda (p)
                    (format p "\
 #!~a
-export PYTHONPATH=~a/LIB:~a
+export GUIX_PYTHONPATH=~a/LIB:~a
 exec -a \"~a\" ~a \"$@\"\n"
-                           (which "bash") data (getenv "PYTHONPATH")
+                           (which "bash") data (getenv "GUIX_PYTHONPATH")
                            (which "python3")
                            (string-append lib "/main.py"))))
                (chmod roguebox-adventures #o555))
@@ -2317,9 +2317,9 @@ can be explored and changed freely.")
                    (lambda (p)
                      (format p
                              "#!~a~@
-                              export PYTHONPATH=~a:~a~@
+                              export GUIX_PYTHONPATH=~a:~a~@
                               exec -a \"~a\" ~a \"$@\"~%"
-                             (which "bash") data (getenv "PYTHONPATH")
+                             (which "bash") data (getenv "GUIX_PYTHONPATH")
                              (which "python3")
                              (string-append data "/run_game.py"))))
                  (chmod executable #o555))
@@ -3813,9 +3813,12 @@ Widgets, and allows users to create more.")
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f            ; TODO The test running fails to run some tests.
-       #:modules ((srfi srfi-1)
-                  (guix build cmake-build-system)
-                  (guix build utils))
+       #:imported-modules ,(cons '(guix build python-build-system)
+                                 %cmake-build-system-modules)
+       #:modules ((guix build cmake-build-system)
+                  ((guix build python-build-system) #:select (guix-pythonpath))
+                  (guix build utils)
+                  (srfi srfi-1))
        #:configure-flags
        (list
         (string-append "-DOPENALSOFT_INCLUDE_DIR="
@@ -3842,30 +3845,15 @@ Widgets, and allows users to create more.")
          (delete 'check)
          (add-after 'install 'check
            (lambda* (#:key inputs outputs tests? #:allow-other-keys)
-             (define python-version
-               (let* ((version     (last (string-split
-                                          (assoc-ref inputs "python")
-                                          #\-)))
-                      (components  (string-split version #\.))
-                      (major+minor (take components 2)))
-                 (string-join major+minor ".")))
-
              (when tests?
-               ;; Set PYTHONPATH so that python finds the installed modules.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH") ":"
-                                      (assoc-ref outputs "out")
-                                      "/lib/python"
-                                      python-version
-                                      "/site-packages"))
+               (add-installed-pythonpath inputs outputs)
                ;; The tests require an X server.
                (system "Xvfb :1 &")
                (setenv "DISPLAY" ":1")
                (setenv "XDG_RUNTIME_DIR" "/tmp")
                ;; Run tests
                (chdir ,(string-append "../" name "-" version))
-               (invoke "python3" "run_tests.py" "-a"))
-             #t)))))
+               (invoke "python3" "run_tests.py" "-a")))))))
     (inputs
      `(("sdl2" ,sdl2)
        ("sdl2-image" ,sdl2-image)
@@ -7181,7 +7169,7 @@ some graphical niceities, and numerous bug-fixes and other improvements.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("curl" ,curl-minimal)
+     `(("curl" ,curl)
        ("libvorbis" ,libvorbis)
        ("mesa" ,mesa)
        ("openal" ,openal)
@@ -10499,7 +10487,7 @@ This package is part of the KDE games module.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/kajongg")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index d8494e9c1c..6dab274be1 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -30,13 +30,13 @@
 (define-public gawk
   (package
    (name "gawk")
-   (version "5.0.1")
+   (version "5.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gawk/gawk-" version
                                 ".tar.xz"))
             (sha256
-             (base32 "15570p7g2x54asvr2fsc56sxzmm08fbk4mzpcs5n92fp9vq8cklf"))))
+             (base32 "1gc2cccqy1x1bf6rhwlmd8q7dz7gnam6nwgl38bxapv6qm5flpyg"))))
    (build-system gnu-build-system)
    (arguments
     `(#:phases (modify-phases %standard-phases
@@ -66,6 +66,16 @@
                      (substitute* "test/Makefile"
                        (("\\| more") ""))
 
+                     ;; Silence a warning from bash about not being able
+                     ;; to change to an ISO-8859-1 locale.  The test itself
+                     ;; works fine, but newer versions of bash give a
+                     ;; locale warning which mangles the test output.
+                     (substitute* "test/localenl.sh"
+                       (("for LC_ALL in")
+                        "for LC in")
+                       (("export LC_ALL\n")
+                        "export LC_ALL=$LC 2>/dev/null\n"))
+
                      ;; Adjust the shebang in that file since it is then diff'd
                      ;; against the actual test output.
                      (substitute* "test/watchpoint1.ok"
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 2fe30b1321..79994cc191 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
@@ -47,6 +47,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 regex))
@@ -80,6 +81,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          ;; Cilk has been removed from GCC 8 anyway.
          '("--disable-libcilkrts"))
 
+        ;; glibc needs the 128-bit long double type on these architectures.
+        ((or (string-prefix? "powerpc64le-" target)
+             (string-prefix? "powerpc-" target))
+         '("--with-long-double-128"))
+
         (else
          ;; TODO: Add `arm.*-gnueabi', etc.
          '())))
@@ -275,13 +281,10 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 ~a"
                                libc line))))
 
-                  ;; TODO: Make this unconditional in core-updates.
-                  ,@(if (target-powerpc?)
-                      `((when (file-exists? "gcc/config/rs6000")
-                          ;; Force powerpc libdir to be /lib and not /lib64
-                          (substitute* (find-files "gcc/config/rs6000")
-                            (("/lib64") "/lib"))))
-                      `())
+                  (when (file-exists? "gcc/config/rs6000")
+                    ;; Force powerpc libdir to be /lib and not /lib64
+                    (substitute* (find-files "gcc/config/rs6000")
+                      (("/lib64") "/lib")))
 
                   ;; Don't retain a dependency on the build-time sed.
                   (substitute* "fixincludes/fixincl.x"
@@ -330,8 +333,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                   ;; but there's nothing useful to look for here.)
                   (substitute* "gcc/config.in"
                     (("PREFIX_INCLUDE_DIR")
-                     "PREFIX_INCLUDE_DIR_isnt_necessary_here"))
-                  #t)))
+                     "PREFIX_INCLUDE_DIR_isnt_necessary_here")))))
 
             (add-after 'configure 'post-configure
               (lambda _
@@ -339,8 +341,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                 ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
                 (substitute* "Makefile"
                   (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
-                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))
-                #t)))))
+                   "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))))))
 
        (native-search-paths
         ;; Use the language-specific variables rather than 'CPATH' because they
@@ -388,15 +389,13 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k"
+                   "pa" "sh" "tilepro" "xtensa")))))
     (supported-systems %supported-systems)
     (inputs
      `(("isl" ,isl-0.11)
@@ -424,15 +423,13 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(begin
-                  (for-each
-                   (lambda (dir)
-                     (substitute* (string-append "libgcc/config/"
-                                                 dir "/linux-unwind.h")
-                       (("struct ucontext") "ucontext_t")))
-                   '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
-                     "pa" "sh" "tilepro" "xtensa"))
-                  #t))))
+               '(for-each
+                 (lambda (dir)
+                   (substitute* (string-append "libgcc/config/"
+                                               dir "/linux-unwind.h")
+                     (("struct ucontext") "ucontext_t")))
+                 '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
+                   "pa" "sh" "tilepro" "xtensa")))))
     ;; Override inherited texinfo-5 with latest version.
     (native-inputs `(("perl" ,perl)   ;for manpages
                      ("texinfo" ,texinfo)))
@@ -460,8 +457,18 @@ Go.  It also includes runtime support libraries for these languages.")
                                           ":"))
                      (format #t
                              "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
-                             (getenv "CPLUS_INCLUDE_PATH"))
-                     #t))))))))))
+                             (getenv "CPLUS_INCLUDE_PATH"))))))))))))
+
+(define gcc-canadian-cross-objdump-snippet
+  ;; Fix 'libcc1/configure' error when cross-compiling GCC.  Without that,
+  ;; 'libcc1/configure' wrongfully determines that '-rdynamic' support is
+  ;; missing because $gcc_cv_objdump is empty:
+  ;;
+  ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
+  ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
+  #~(substitute* "libcc1/configure"
+      (("\\$gcc_cv_objdump -T")
+       "$OBJDUMP_FOR_TARGET -T")))
 
 (define-public gcc-5
   ;; Note: GCC >= 5 ships with .info files but 'make install' fails to install
@@ -485,19 +492,7 @@ Go.  It also includes runtime support libraries for these languages.")
                                        "gcc-fix-texi2pod.patch"
                                        "gcc-5-hurd.patch"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Fix 'libcc1/configure' error when cross-compiling GCC.
-               ;; Without that, 'libcc1/configure' wrongfully determines that
-               ;; '-rdynamic' support is missing because $gcc_cv_objdump is
-               ;; empty:
-               ;;
-               ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
-               ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
-               '(begin
-                  (substitute* "libcc1/configure"
-                    (("\\$gcc_cv_objdump -T")
-                     "$OBJDUMP_FOR_TARGET -T"))
-                  #t))))
+              (snippet gcc-canadian-cross-objdump-snippet)))
     (inputs
      `(;; GCC5 needs <isl/band.h> which is removed in later versions.
        ("isl" ,isl-0.18)
@@ -565,7 +560,9 @@ It also includes runtime support libraries for these languages.")))
                 "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"))
               (patches (search-patches "gcc-8-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
-                                       "gcc-8-sort-libtool-find-output.patch"))))))
+                                       "gcc-8-sort-libtool-find-output.patch"))
+              (modules '((guix build utils)))
+              (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-9
   (package
@@ -580,7 +577,9 @@ It also includes runtime support libraries for these languages.")))
               "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-9-asan-fix-limits-include.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-10
   (package
@@ -594,7 +593,9 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 (define-public gcc-11
   (package
@@ -608,11 +609,13 @@ It also includes runtime support libraries for these languages.")))
              (base32
               "1pwxrjhsymv90xzh0x42cxfnmhjinf2lnrrf3hj5jq1rm2w6yjjc"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))))))
+                                     "gcc-5.0-libvtv-runpath.patch"))
+            (modules '((guix build utils)))
+            (snippet gcc-canadian-cross-objdump-snippet)))))
 
 ;; Note: When changing the default gcc version, update
 ;;       the gcc-toolchain-* definitions.
-(define-public gcc gcc-7)
+(define-public gcc gcc-10)
 
 (define-public (make-libstdc++ gcc)
   "Return a libstdc++ package based on GCC.  The primary use case is when
@@ -623,25 +626,16 @@ using compilers other than GCC."
     (arguments
      `(#:out-of-source? #t
        #:phases
-       ;; TODO: Use the target-powerpc arm for everyone.
-        ,(if (target-powerpc?)
-           `(modify-phases %standard-phases
-              ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
-              (add-before 'chdir 'fix-rs6000-libdir
-                (lambda _
-                  (when (file-exists? "gcc/config/rs6000")
-                    (substitute* (find-files "gcc/config/rs6000")
-                      (("/lib64") "/lib")))
-                  #t))
-              (add-before 'configure 'chdir
-                (lambda _
-                  (chdir "libstdc++-v3")
-                  #t)))
-           `(alist-cons-before 'configure 'chdir
-              (lambda _
-                (chdir "libstdc++-v3")
-                #t)
-              %standard-phases))
+       (modify-phases %standard-phases
+         ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
+         (add-before 'chdir 'fix-rs6000-libdir
+           (lambda _
+             (when (file-exists? "gcc/config/rs6000")
+               (substitute* (find-files "gcc/config/rs6000")
+                 (("/lib64") "/lib")))))
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "libstdc++-v3"))))
 
        #:configure-flags `("--disable-libstdcxx-pch"
                            ,(string-append "--with-gxx-include-dir="
@@ -692,16 +686,14 @@ using compilers other than GCC."
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
            (lambda _
-             (chdir "libiberty")
-             #t))
+             (chdir "libiberty")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out     (assoc-ref outputs "out"))
                     (lib     (string-append out "/lib/"))
                     (include (string-append out "/include/")))
                (install-file "libiberty.a" lib)
-               (install-file "../include/libiberty.h" include))
-             #t)))))
+               (install-file "../include/libiberty.h" include)))))))
     (inputs '())
     (outputs '("out"))
     (native-inputs '())
@@ -741,10 +733,10 @@ as the 'native-search-paths' field."
         `(modify-phases ,phases
            (add-after 'install 'remove-broken-or-conflicting-files
              (lambda* (#:key outputs #:allow-other-keys)
-               (for-each delete-file
-                         (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))))
+               (for-each
+                delete-file
+                (find-files (string-append (assoc-ref outputs "out") "/bin")
+                            ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
 
 (define* (custom-gcc-gccgo gcc name languages
                            #:optional
@@ -796,12 +788,7 @@ as the 'native-search-paths' field."
 
 (define-public gfortran
   (hidden-package
-   (custom-gcc (package
-                 (inherit gcc)
-                 ;; XXX: Remove LIBSTDC++-HEADERS from the inputs just to
-                 ;; avoid a rebuild of all the GFORTRAN dependents.
-                 ;; TODO: Remove this hack on the next rebuild cycle.
-                 (inputs (alist-delete "libstdc++" (package-inputs gcc))))
+   (custom-gcc gcc
                "gfortran" '("fortran")
                %generic-search-paths)))
 
@@ -839,8 +826,7 @@ as the 'native-search-paths' field."
              (lambda* (#:key outputs #:allow-other-keys)
                (for-each delete-file
                          (find-files (string-append (assoc-ref outputs "out") "/bin")
-                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))
+                                     ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))))))))
     (synopsis "GCC library generating machine code on-the-fly at runtime")
     (description
      "This package is part of the GNU Compiler Collection and provides an
@@ -946,7 +932,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc" '("objc")
               %objc-search-paths))
 
-(define-public gcc-objc gcc-objc-7)
+(define-public gcc-objc gcc-objc-10)
 
 (define %objc++-search-paths
   (list (search-path-specification
@@ -988,7 +974,7 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc++" '("obj-c++")
               %objc++-search-paths))
 
-(define-public gcc-objc++ gcc-objc++-7)
+(define-public gcc-objc++ gcc-objc++-10)
 
 (define (make-libstdc++-doc gcc)
   "Return a package with the libstdc++ documentation for GCC."
@@ -1013,8 +999,7 @@ provides the GNU compiler for the Go programming language."))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir
                               (lambda _
-                                (chdir "libstdc++-v3")
-                                #t))
+                                (chdir "libstdc++-v3")))
                   (add-before 'configure 'set-xsl-directory
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (let ((docbook (assoc-ref inputs "docbook-xsl")))
@@ -1023,8 +1008,7 @@ provides the GNU compiler for the Go programming language."))
                                     (("@XSL_STYLE_DIR@")
                                      (string-append
                                       docbook "/xml/xsl/"
-                                      (strip-store-file-name docbook))))
-                                  #t)))
+                                      (strip-store-file-name docbook)))))))
                   (replace 'build
                            (lambda _
                              ;; XXX: There's also a 'doc-info' target, but it
@@ -1051,7 +1035,7 @@ provides the GNU compiler for the Go programming language."))
 (define-public isl
   (package
     (name "isl")
-    (version "0.22.1")
+    (version "0.23")
     (source (origin
              (method url-fetch)
              (uri (list (string-append
@@ -1062,7 +1046,7 @@ provides the GNU compiler for the Go programming language."))
                                        name "-" version ".tar.bz2")))
              (sha256
               (base32
-               "1kf54jib0nind1pvakblnfhimmwzm0y1llz8470ag0di5vwqwrhs"))))
+               "0k91zck10zxs9sk3yrbb92y1j3w981w3fbwkfwd7kl779b0j52f5"))))
     (build-system gnu-build-system)
     (outputs '("out" "static"))
     (arguments
@@ -1081,8 +1065,7 @@ provides the GNU compiler for the Go programming language."))
                         ;; libtool looks for it in the usual locations.
                         (substitute* (string-append out "/lib/libisl.la")
                           (("^old_library=.*")
-                           "old_library=''\n"))
-                        #t))))))
+                           "old_library=''\n"))))))))
     (inputs `(("gmp" ,gmp)))
     (home-page "http://isl.gforge.inria.fr/")
     (synopsis
@@ -1208,8 +1191,7 @@ effective code.")
                                            (copy-file file
                                                       (string-append html "/"
                                                                      file)))
-                                         (find-files "." "\\.html$"))
-                               #t))))))
+                                         (find-files "." "\\.html$"))))))))
     (synopsis "Reference manual for the C programming language")
     (description
      "This is a reference manual for the C programming language, as
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 2923358d8f..e37c485761 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -42,7 +42,7 @@
     ;; Note: With libgd.org now pointing to github.com, genuine old
     ;; tarballs are no longer available.  Notably, versions 2.0.x are
     ;; missing.
-    (version "2.3.0")
+    (version "2.3.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -50,9 +50,14 @@
                    version "/libgd-" version ".tar.xz"))
              (sha256
               (base32
-               "0n5czhxzinvjvmhkf5l9fwjdx5ip69k5k7pj6zwb6zs1k9dibngc"))
-             (patches (search-patches "gd-fix-tests-on-i686.patch"
-                                      "gd-brect-bounds.patch"))))
+               "1yypywkh8vphcy4qqpf51kxpb0a3r7rjqk3fc61rpn70hiq092j7"))
+             (patches
+              (search-patches "gd-fix-tests-on-i686.patch"
+                              "gd-brect-bounds.patch"
+                              ;; Drop when
+                              ;; https://github.com/libgd/libgd/issues/691
+                              ;; is solved.
+                              "gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch"))))
     (build-system gnu-build-system)
     (arguments
       ;; As recommended by github.com/libgd/libgd/issues/278 to fix rounding
@@ -61,15 +66,14 @@
        #:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         ;; This test is known to fail on i686-linux:
+         ;; This test is known to fail on most architectures:
          ;; https://github.com/libgd/libgd/issues/359
          ;; TODO Replace this substitution with an upstream bug fix.
          (add-after 'unpack 'disable-failing-test
            (lambda _
              (substitute* "tests/gdimagegrayscale/basic.c"
                (("return gdNumFailures\\(\\)")
-                 "return 0"))
-             #t)))))
+                 "return 0")))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 8c28f82992..24b7c00dbd 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -118,6 +119,12 @@
                             mig/32-bit
                             mig)))
               '())))
+    ;; TODO: Add support for the GDB_DEBUG_FILE_DIRECTORY environment
+    ;; variable in GDB itself instead of relying on some glue code in
+    ;; the Guix-provided .gdbinit file.
+    (native-search-paths (list (search-path-specification
+                                (variable "GDB_DEBUG_FILE_DIRECTORY")
+                                (files '("lib/debug")))))
     (home-page "https://www.gnu.org/software/gdb/")
     (synopsis "The GNU debugger")
     (description
@@ -129,18 +136,18 @@ written in C, C++, Ada, Objective-C, Pascal and more.")
     (license gpl3+)))
 
 ;; This version of GDB is required by some of the Rust compilers, see
-;; <https://bugs.gnu.org/37810>.
-(define-public gdb-8.2
+;; <https://github.com/rust-lang/rust/issues/79009>.
+(define-public gdb-9.2
   (package
     (inherit gdb-10)
-    (version "8.2.1")
+    (version "9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gdb/gdb-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "00i27xqawjv282a07i73lp1l02n0a3ywzhykma75qg500wll6sha"))))
+                "0mf5fn8v937qwnal4ykn3ji1y2sxk0fa1yfqi679hxmpg6pdf31n"))))
     (inputs
      (alist-replace "guile" (list guile-2.0)
                     (package-inputs gdb-10)))))
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index 82604ee9be..a71af5bbe3 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -52,14 +52,14 @@
 (define-public gettext-minimal
   (package
     (name "gettext-minimal")
-    (version "0.20.1")
+    (version "0.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gettext/gettext-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0p3zwkk27wm2m2ccfqm57nj7vqkmfpn7ja1nf65zmhz8qqs5chb6"))))
+                "04kbg1sx0ncfrsbr85ggjslqkzzb243fcw9nyh3rrv1a22ihszf7"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ;9 MiB of HTML
@@ -238,12 +238,14 @@ from Markdown files.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-programs
-          (lambda* (#:key outputs #:allow-other-keys)
+          (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Make sure all executables in "bin" find the Perl modules
-            ;; provided by this package at runtime.
+            ;; required by this package at runtime.
             (let* ((out  (assoc-ref outputs "out"))
                    (bin  (string-append out "/bin/"))
-                   (path (string-append out "/lib/perl5/site_perl")))
+                   (Pod::Parser (assoc-ref inputs "perl-pod-parser"))
+                   (path (string-append out "/lib/perl5/site_perl:"
+                                        Pod::Parser "/lib/perl5/site_perl")))
               (for-each (lambda (file)
                           (wrap-program file
                             `("PERL5LIB" ":" prefix (,path))))
@@ -263,6 +265,13 @@ from Markdown files.")
                 (string-append (assoc-ref inputs "docbook-xml")
                                "/xml/dtd/docbook/")))
              #t))
+         (add-before 'build 'do-not-override-PERL5LIB
+           (lambda _
+             ;; Don't hard-code PERL5LIB to include just the build directory
+             ;; so that the build script finds modules from inputs.
+             (substitute* "Po4aBuilder.pm"
+               (("PERL5LIB=lib") ""))
+             (setenv "PERL5LIB" (string-append (getenv "PERL5LIB") ":lib"))))
          (add-before 'check 'disable-failing-tests
            (lambda _
              ;; FIXME: these tests require SGMLS.pm.
@@ -286,6 +295,8 @@ from Markdown files.")
        ("perl-test-pod" ,perl-test-pod)
        ("perl-yaml-tiny" ,perl-yaml-tiny)
        ("texlive" ,texlive-tiny)))
+    (inputs
+     `(("perl-pod-parser" ,perl-pod-parser)))
     (home-page "https://po4a.org/")
     (synopsis "Scripts to ease maintenance of translations")
     (description
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 03a516dc52..26a964d4d4 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -4,11 +4,12 @@
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2013, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,15 +49,14 @@
 (define-public lcms
   (package
    (name "lcms")
-   (version "2.9")
+   (version "2.12")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://sourceforge/lcms/lcms/" version
                                 "/lcms2-" version ".tar.gz"))
 
-            (patches (search-patches "lcms-CVE-2018-16435.patch"))
             (sha256 (base32
-                     "083xisy6z01zhm7p7rgk4bx9d6zlr8l20qkfv1g29ylnhgwzvij8"))))
+                     "1x8hzq8kw16lgjxmqpnqah1p3hrqqhjpcl1ymiah8434x22kjrhq"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags '("--disable-static")))
@@ -69,7 +69,7 @@
 focus on accuracy and performance.  It uses the International Color
 Consortium standard (ICC), approved as ISO 15076-1.")
    (license license:x11)
-   (home-page "http://www.littlecms.com/")
+   (home-page "https://www.littlecms.com/")
    (properties '((cpe-name . "little_cms_color_engine")))))
 
 (define-public libpaper
@@ -159,7 +159,7 @@ printing, and psresize, for adjusting page sizes.")
 (define-public ghostscript
   (package
     (name "ghostscript")
-    (version "9.52")
+    (version "9.54.0")
     (source
       (origin
         (method url-fetch)
@@ -169,10 +169,8 @@ printing, and psresize, for adjusting page sizes.")
                             "/ghostscript-" version ".tar.xz"))
         (sha256
          (base32
-          "0z1w42y2jmcpl2m1l3z0sfii6zmvzcwcgzn6bydklia6ig7jli2p"))
-        (patches (search-patches "ghostscript-freetype-compat.patch"
-                                 "ghostscript-CVE-2020-15900.patch"
-                                 "ghostscript-no-header-creationdate.patch"
+          "0fvfvv6di5s6j4sy4gaw65klm23dby39bkdjxxq4w3v0vqyb9dy2"))
+        (patches (search-patches "ghostscript-no-header-creationdate.patch"
                                  "ghostscript-no-header-id.patch"
                                  "ghostscript-no-header-uuid.patch"))
         (modules '((guix build utils)))
@@ -268,7 +266,7 @@ printing, and psresize, for adjusting page sizes.")
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)       ;needed for freetype
-       ("python" ,python-wrapper)
+       ("python" ,python-minimal-wrapper)
        ("tcl" ,tcl)
 
        ;; When cross-compiling, some of the natively-built tools require all
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 2da57ee8ee..a0490e5421 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -185,8 +185,7 @@ of a larger interface.")
                 "1w68h81kqkqnziixrx21qs0gfv2z79651h19sxn226xdb58mjgqb"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:configure-flags
+     `(#:configure-flags
        (list "-Denable-gir=false")))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -225,8 +224,7 @@ provided, as well as a framework to add new color models and data types.")
                 "1pd8xkx70k0fsi1hrzrmaify7112wjmxzk0p6bi6js89yhn7h4n1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:configure-flags
+     `(#:configure-flags
        (list "-Dintrospection=false")
        #:phases
        (modify-phases %standard-phases
@@ -304,7 +302,7 @@ buffers.")
            ;; Install 'sitecustomize.py' into gimp's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
@@ -608,7 +606,7 @@ transferring the style of an image.")
            ;; Install 'sitecustomize.py' into glimpse's python directory to
            ;; add pygobject and pygtk to pygimp's search path.
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((pythonpath (getenv "PYTHONPATH"))
+             (let* ((pythonpath (getenv "GUIX_PYTHONPATH"))
                     (out        (assoc-ref outputs "out"))
                     (sitecustomize.py
                      (string-append
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index c14e7c0d53..cc5131b28d 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -106,6 +107,7 @@ as ASCII text.")
               (uri (string-append
                     "mirror://sourceforge/freeglut/freeglut/"
                     version "/freeglut-" version ".tar.gz"))
+              (patches (search-patches "freeglut-gcc-compat.patch"))
               (sha256
                (base32
                 "0s6sk49q8ijgbsrrryb7dzqx2fa744jhx1wck5cz5jia2010w06l"))))
@@ -235,7 +237,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "20.2.4")
+    (version "20.2.6")
     (source
       (origin
         (method url-fetch)
@@ -247,7 +249,7 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "14m09bk7akj0k02lg8fhvvzbdsashlbdsgl2cw7wbqfj2mhdqwh5"))
+          "1nw5k2qrlcrp5bljy1lmyybgl525y0h44synkbbirw92qv3a6b7i"))
         (patches
          (search-patches "mesa-skip-tests.patch"))))
     (build-system meson-build-system)
@@ -270,7 +272,7 @@ also known as DXTn or DXTC) for Mesa.")
         ("libxrandr" ,libxrandr)
         ("libxvmc" ,libxvmc)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              ;; Note: update the 'clang' input of mesa-opencl when bumping this.
              `(("llvm" ,llvm-11)))
             (_
@@ -282,7 +284,7 @@ also known as DXTn or DXTC) for Mesa.")
         ("flex" ,flex)
         ("gettext" ,gettext-minimal)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
              `(("glslang" ,glslang)))
             (_
              `()))
@@ -297,36 +299,38 @@ also known as DXTn or DXTC) for Mesa.")
              ((or "armhf-linux" "aarch64-linux")
               ;; TODO: Fix svga driver for non-Intel architectures.
               '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl"))
-             ("powerpc64le-linux"
+             ((or "powerpc64le-linux" "powerpc-linux")
               '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl"))
              (_
               '("-Dgallium-drivers=iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl")))
          ;; Enable various optional features.  TODO: opencl requires libclc,
          ;; omx requires libomxil-bellagio
-         "-Dplatforms=x11,drm,surfaceless,wayland"
+         "-Dplatforms=x11,wayland"
          "-Dglx=dri"        ;Thread Local Storage, improves performance
          ;; "-Dopencl=true"
          ;; "-Domx=true"
          "-Dosmesa=gallium"
-         "-Dgallium-xa=true"
+         "-Dgallium-xa=enabled"
 
          ;; features required by wayland
-         "-Dgles2=true"
-         "-Dgbm=true"
-         "-Dshared-glapi=true"
+         "-Dgles2=enabled"
+         "-Dgbm=enabled"
+         "-Dshared-glapi=enabled"
 
          ;; Explicitly enable Vulkan on some architectures.
          ,@(match (%current-system)
              ((or "i686-linux" "x86_64-linux")
               '("-Dvulkan-drivers=intel,amd"))
-             ("powerpc64le-linux"
+             ((or "powerpc64le-linux" "powerpc-linux")
               '("-Dvulkan-drivers=amd"))
+             ("aarch64-linux"
+              '("-Dvulkan-drivers=freedreno,amd"))
              (_
               '("-Dvulkan-drivers=auto")))
 
          ;; Enable the Vulkan overlay layer on architectures using llvm.
          ,@(match (%current-system)
-             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
+             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
               '("-Dvulkan-overlay-layer=true"))
              (_
               '()))
@@ -339,10 +343,10 @@ also known as DXTn or DXTC) for Mesa.")
          ,@(match (%current-system)
              ((or "x86_64-linux" "i686-linux")
               '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
-                "-Dllvm=true"))         ; default is x86/x86_64 only
-             ("powerpc64le-linux"
+                "-Dllvm=enabled"))      ; default is x86/x86_64 only
+             ((or "powerpc64le-linux" "aarch64-linux" "powerpc-linux")
               '("-Ddri-drivers=nouveau,r200,r100"
-                "-Dllvm=true"))
+                "-Dllvm=enabled"))
              (_
               '("-Ddri-drivers=nouveau,r200,r100"))))
 
@@ -356,25 +360,39 @@ also known as DXTn or DXTC) for Mesa.")
                   (guix build meson-build-system))
        #:phases
        (modify-phases %standard-phases
-         ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
-                                                 (%current-system)))
-               ;; Disable some of the llvmpipe tests.
-               `((add-after 'unpack 'disable-failing-test
-                   (lambda _
-                     (substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
-                       (("0\\.5, ") ""))
-                     #t)))
-               '())
-         ,@(if (string-prefix? "i686" (or (%current-target-system)
-                                          (%current-system)))
-               ;; Disable new test from Mesa 19 that fails on i686.  Upstream
-               ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
-               `((add-after 'unpack 'disable-failing-test
-                   (lambda _
-                     (substitute* "src/util/tests/format/meson.build"
-                       (("'u_format_test',") ""))
-                     #t)))
-               '())
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ,@(match (%current-system)
+                 ("powerpc64le"
+                  ;; Disable some of the llvmpipe tests.
+                  `((substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
+                      (("0\\.5, ") ""))))
+                 ("powerpc"
+                  ;; There are some tests which fail specifically on powerpc.
+                  `((substitute* '(;; LLVM ERROR: Relocation type not implemented yet!
+                                   "src/gallium/drivers/llvmpipe/meson.build"
+                                   ;; This is probably a big-endian test failure.
+                                   "src/gallium/targets/osmesa/meson.build")
+                      (("if with_tests") "if not with_tests"))
+                    (substitute* "src/util/tests/format/meson.build"
+                      ;; This is definately an endian-ness test failure.
+                      (("'u_format_test', ") ""))
+                    ;; It is only this portion of the test which fails.
+                    (substitute* "src/mesa/main/tests/meson.build"
+                      ((".*mesa_formats.*") ""))))
+                 ("i686-linux"
+                  ;; Disable new test from Mesa 19 that fails on i686.  Upstream
+                  ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
+                  `((substitute* "src/util/tests/format/meson.build"
+                      (("'u_format_test',") ""))))
+                 (_
+                  '((display "No tests to disable on this architecture.\n"))))))
+         (add-after 'unpack 'fix-tests
+           (lambda _
+             ;; See <https://gitlab.freedesktop.org/mesa/mesa/-/issues/3181>.
+             (substitute* "src/compiler/glsl/glcpp/tests/084-unbalanced-parentheses.c.expected"
+              (("unexpected \\$end") "unexpected end of file"))
+             #t))
          (add-before 'configure 'fix-dlopen-libnames
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -398,22 +416,13 @@ also known as DXTn or DXTC) for Mesa.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (bin (assoc-ref outputs "bin")))
-               ,@(match (%current-system)
-                   ((or "i686-linux" "x86_64-linux" "powerpc64le-linux")
-                    ;; Install the Vulkan overlay control script to a separate
-                    ;; output to prevent a reference on Python, saving ~70 MiB
-                    ;; on the closure size.
-                    '((copy-recursively (string-append out "/bin")
-                                        (string-append bin "/bin"))
-                      (delete-file-recursively (string-append out "/bin"))))
-                   (_
-                    ;; XXX: On architectures without the Vulkan overlay layer
-                    ;; just create an empty file because outputs can not be
-                    ;; added conditionally.
-                    '((mkdir-p (string-append bin "/bin"))
-                      (call-with-output-file (string-append bin "/bin/.empty")
-                        (const #t)))))
-               #t)))
+               ;; Not all architectures have the Vulkan overlay control script.
+               (mkdir-p (string-append bin "/bin"))
+               (call-with-output-file (string-append bin "/bin/.empty")
+                 (const #t))
+               (copy-recursively (string-append out "/bin")
+                                 (string-append bin "/bin"))
+               (delete-file-recursively (string-append out "/bin")))))
          (add-after 'install 'symlinks-instead-of-hard-links
            (lambda* (#:key outputs #:allow-other-keys)
              ;; All the drivers and gallium targets create hard links upon
@@ -663,7 +672,7 @@ OpenGL graphics API.")
 (define-public libepoxy
   (package
     (name "libepoxy")
-    (version "1.5.4")
+    (version "1.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -671,7 +680,7 @@ OpenGL graphics API.")
                     version "/libepoxy-" version ".tar.xz"))
               (sha256
                (base32
-                "1ll9fach4v30dsyd47s5ial4gaiwihzr2afb77vxxzzy3mlcrlhb"))))
+                "0mh5bdgqfd8m4wj6jlvn4ac94sgfa8r6ish75ciwrhdw47dn65i6"))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -691,7 +700,8 @@ OpenGL graphics API.")
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python" ,python)))
-    (inputs
+    (propagated-inputs
+     ;; epoxy.pc: 'Requires.private: gl egl'
      `(("mesa" ,mesa)))
     (home-page "https://github.com/anholt/libepoxy/")
     (synopsis "A library for handling OpenGL function pointer management")
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 91ef45099c..7fcde85305 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -11,9 +11,12 @@
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Arthur Margerit <ruhtra.mar@gmail.com>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,16 +37,20 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libffi)
@@ -58,7 +65,6 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages selinux)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -71,6 +77,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-26)
   #:use-module ((srfi srfi-1) #:hide (zip))
 
   ;; Export variables up-front to allow circular dependency with the 'xorg'
@@ -90,7 +98,7 @@
 (define dbus
   (package
     (name "dbus")
-    (version "1.12.16")
+    (version "1.12.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -98,9 +106,8 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "107ckxaff1cv4q6kmfdi2fb1nlsv03312a7kf6lb4biglhpjv8jl"))
-              (patches (search-patches "dbus-CVE-2020-12049.patch"
-                                       "dbus-helper-search-path.patch"))))
+                "1zp5gpx61v1cpqf2zwb1cidhp9xylvw49d3zydkxqk6b1qa20xpp"))
+              (patches (search-patches "dbus-helper-search-path.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -170,264 +177,186 @@ shared NFS home directories.")
 
 (define glib
   (package
-   (name "glib")
-   (version "2.62.6")
-   (replacement glib/fixed)
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/"
-                                name "/" (string-take version 4) "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "174bsmbmcvaw69ff9g60q5sx0fn23rkhqcwqz17h5s7sprps4kqh"))
-            (patches (search-patches "glib-appinfo-watch.patch"
-                                     "glib-tests-timer.patch"))
-            (modules '((guix build utils)))
-            (snippet
-             '(begin
-                (substitute* "tests/spawn-test.c"
-                  (("/bin/sh") "sh"))
-                #t))))
-   (build-system meson-build-system)
-   (outputs '("out"           ; everything
-              "bin"))         ; glib-mkenums, gtester, etc.; depends on Python
-   (propagated-inputs
-    `(("pcre" ,pcre)  ; in the Requires.private field of glib-2.0.pc
-      ("libffi" ,libffi) ; in the Requires.private field of gobject-2.0.pc
-      ;; These are in the Requires.private field of gio-2.0.pc
-      ("util-linux" ,util-linux "lib")  ;for libmount
-      ("libselinux" ,libselinux)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("m4" ,m4) ; for installing m4 macros
-      ("dbus" ,dbus)                              ; for GDBus tests
-      ("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)
-      ("perl" ,perl)                              ; needed by GIO tests
-      ("tzdata" ,tzdata-for-tests)))                  ; for tests/gdatetime.c
-   (arguments
-    `(#:disallowed-references (,tzdata-for-tests)
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'patch-dbus-launch-path
-          (lambda* (#:key inputs #:allow-other-keys)
-            (let ((dbus (assoc-ref inputs "dbus")))
-              (substitute* "gio/gdbusaddress.c"
-                (("command_line = g_strdup_printf \\(\"dbus-launch")
-                 (string-append "command_line = g_strdup_printf (\""
-                                dbus "/bin/dbus-launch")))
-              #t)))
-        (add-after 'unpack 'patch-gio-launch-desktop
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out")))
-              ;; See also <https://gitlab.gnome.org/GNOME/glib/issues/1633>
-              ;; for another future fix.
-              (substitute* "gio/gdesktopappinfo.c"
-               (("gio-launch-desktop")
-                (string-append out "/libexec/gio-launch-desktop")))
-              #t)))
-        ;; TODO: Remove the conditional in the next core-updates cycle.
-        ;; Needed to build glib on slower ARM nodes.
-        ,@(if (string-prefix? "arm" (%current-system))
-              `((add-after 'unpack 'increase-test-timeout
-                  (lambda _
-                    (substitute* "meson.build"
-                      (("test_timeout = 60")
-                       "test_timeout = 120")
-                      (("test_timeout_slow = 120")
-                       "test_timeout_slow = 180")))))
-              '())
-        (add-before 'build 'pre-build
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            ;; For tests/gdatetime.c.
-            (setenv "TZDIR"
-                    (string-append (assoc-ref inputs "tzdata")
-                                   "/share/zoneinfo"))
-
-            ;; Some tests want write access there.
-            (setenv "HOME" (getcwd))
-            (setenv "XDG_CACHE_HOME" (getcwd))
-            #t))
-        (add-after 'unpack 'disable-failing-tests
-          (lambda _
-            (let ((disable
-                   (lambda (test-file test-paths)
-                     (define pattern+procs
-                       (map (lambda (test-path)
-                              (cons
-                               ;; XXX: only works for single line statements.
-                               (format #f "g_test_add_func.*\"~a\".*" test-path)
-                               (const "")))
-                            test-paths))
-                     (substitute test-file pattern+procs)))
-                  (failing-tests
-                   '(("glib/tests/thread.c"
-                      (;; prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64
-                       ;; as found on hydra.gnu.org, and strace(1) doesn't
-                       ;; recognize it.
-                       "/thread/thread4"))
-
-                     ;; This tries to find programs in FHS directories.
-                     ("glib/tests/utils.c"
-                      ("/utils/find-program"))
-
-                     ;; This fails because "glib/tests/echo-script" cannot be
-                     ;; found.
-                     ("glib/tests/spawn-singlethread.c"
-                      ("/gthread/spawn-script"))
-
-                     ("glib/tests/timer.c"
-                      (;; fails if compiler optimizations are enabled, which they
-                       ;; are by default.
-                       "/timer/stop"))
-
-                     ("gio/tests/gapplication.c"
-                      (;; XXX: proven to be unreliable.  See:
-                       ;;  <https://bugs.debian.org/756273>
-                       ;;  <http://bugs.gnu.org/18445>
-                       "/gapplication/quit"
-
-                       ;; XXX: fails randomly for unknown reason. See:
-                       ;;  <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00215.html>
-                       "/gapplication/local-actions"))
-
-                     ("gio/tests/contenttype.c"
-                      (;; XXX: requires shared-mime-info.
-                       "/contenttype/guess"
-                       "/contenttype/guess_svg_from_data"
-                       "/contenttype/subtype"
-                       "/contenttype/list"
-                       "/contenttype/icon"
-                       "/contenttype/symbolic-icon"
-                       "/contenttype/tree"))
-
-                     ("gio/tests/appinfo.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/appinfo/associations"))
-
-                     ("gio/tests/desktop-app-info.c"
-                      (;; XXX: requires update-desktop-database.
-                       "/desktop-app-info/delete"
-                       "/desktop-app-info/default"
-                       "/desktop-app-info/fallback"
-                       "/desktop-app-info/lastused"
-                       "/desktop-app-info/search"))
-
-                     ("gio/tests/gdbus-peer.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/codegen-peer-to-peer"))
-
-                     ("gio/tests/gdbus-address-get-session.c"
-                      (;; Requires /etc/machine-id.
-                       "/gdbus/x11-autolaunch"))
-
-                     ("gio/tests/gsocketclient-slow.c"
-                      (;; These tests tries to resolve "localhost", and fails.
-                       "/socket-client/happy-eyeballs/slow"
-                       "/socket-client/happy-eyeballs/cancellation/delayed"))
-
-                     )))
-              (for-each (lambda (x) (apply disable x)) failing-tests)
-              #t)))
-        (replace 'check
-          (lambda _
-            (setenv "MESON_TESTTHREADS"
-                    (number->string (parallel-job-count)))
-            ;; Do not run tests marked as "flaky".
-            (invoke "meson" "test" "--no-suite" "flaky")))
-        ;; TODO: meson does not permit the bindir to be outside of prefix.
-        ;; See https://github.com/mesonbuild/meson/issues/2561
-        ;; We can remove this once meson is patched.
-        (add-after 'install 'move-executables
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p bin)
-              (rename-file (string-append out "/bin")
-                           (string-append bin "/bin"))
-              ;; This one is an implementation detail of glib.
-              ;; It is wrong that that's in "/bin" in the first place,
-              ;; but that's what upstream is doing right now.
-              ;; See <https://gitlab.gnome.org/GNOME/glib/issues/1633>.
-              (mkdir (string-append out "/libexec"))
-              (rename-file (string-append bin "/bin/gio-launch-desktop")
-                           (string-append out "/libexec/gio-launch-desktop"))
-              ;; Do not refer to "bindir", which points to "${prefix}/bin".
-              ;; We don't patch "bindir" to point to "$bin/bin", because that
-              ;; would create a reference cycle between the "out" and "bin"
-              ;; outputs.
-              (substitute* (list (string-append out "/lib/pkgconfig/gio-2.0.pc")
-                                 (string-append out "/lib/pkgconfig/glib-2.0.pc"))
-                (("bindir=\\$\\{prefix\\}/bin") "")
-                (("=\\$\\{bindir\\}/") "="))
-              #t))))))
-      ;; TODO: see above for explanation.
-      ;; #:configure-flags (list (string-append "--bindir="
-      ;;                                        (assoc-ref %outputs "bin")
-      ;;                                        "/bin"))
-
-   (native-search-paths
-    ;; This variable is not really "owned" by GLib, but several related
-    ;; packages refer to it: gobject-introspection's tools use it as a search
-    ;; path for .gir files, and it's also a search path for schemas produced
-    ;; by 'glib-compile-schemas'.
-    (list (search-path-specification
-           (variable "XDG_DATA_DIRS")
-           (files '("share")))
-          ;; To load extra gio modules from glib-networking, etc.
-          (search-path-specification
-           (variable "GIO_EXTRA_MODULES")
-           (files '("lib/gio/modules")))))
-   (search-paths native-search-paths)
-   (properties '((hidden? . #t)))
-
-   (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
-   (description
-    "GLib provides data structure handling for C, portability wrappers,
-and interfaces for such runtime functionality as an event loop, threads,
-dynamic loading, and an object system.")
-   (home-page "https://developer.gnome.org/glib/")
-   (license license:lgpl2.1+)))
-
-(define glib/fixed
-  (package
-    (inherit glib)
-    (source (origin
-              (inherit (package-source glib))
-              (patches
-               (append (search-patches "glib-CVE-2021-27218.patch"
-                                       "glib-CVE-2021-27219-01.patch"
-                                       "glib-CVE-2021-27219-02.patch"
-                                       "glib-CVE-2021-27219-03.patch"
-                                       "glib-CVE-2021-27219-04.patch"
-                                       "glib-CVE-2021-27219-05.patch"
-                                       "glib-CVE-2021-27219-06.patch"
-                                       "glib-CVE-2021-27219-07.patch"
-                                       "glib-CVE-2021-27219-08.patch"
-                                       "glib-CVE-2021-27219-09.patch"
-                                       "glib-CVE-2021-27219-10.patch"
-                                       "glib-CVE-2021-27219-11.patch"
-                                       "glib-CVE-2021-27219-12.patch"
-                                       "glib-CVE-2021-27219-13.patch"
-                                       "glib-CVE-2021-27219-14.patch"
-                                       "glib-CVE-2021-27219-15.patch"
-                                       "glib-CVE-2021-27219-16.patch"
-                                       "glib-CVE-2021-27219-17.patch"
-                                       "glib-CVE-2021-27219-18.patch"
-                                       "glib-CVE-2021-28153.patch")
-                       (origin-patches (package-source glib))))))))
+    (name "glib")
+    (version "2.68.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/"
+                       name "/" (string-take version 4) "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1sh3h6b734cxhdd1qlzvhxq6rc7k73dsisap5y3s419s9xc4ywv7"))
+       (patches
+        (search-patches "glib-appinfo-watch.patch"
+                        "glib-skip-failing-test.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "tests/spawn-test.c"
+             (("/bin/sh") "sh"))
+           #t))))
+    (build-system meson-build-system)
+    (outputs '("out"                    ;libraries, locales, etc
+               "static"                 ;static libraries
+               "bin"))                  ;executables; depends on Python
+    (arguments
+     `(#:disallowed-references
+       (,tzdata-for-tests
+        ;; Verify glib-mkenums, gtester, ... use the cross-compiled
+        ;; python.
+        ,@(if (%current-target-system)
+              (map (cut gexp-input <> #:native? #t)
+                   `(,(this-package-native-input "python")
+                     ,(this-package-native-input "python-wrapper")))
+              '()))
+       #:configure-flags '("--default-library=both"
+                           "-Dman=true"
+                           "-Dselinux=disabled")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Needed to pass the test phase on slower ARM and i686 machines.
+         (add-after 'unpack 'increase-test-timeout
+           (lambda _
+             (substitute* "meson.build"
+               (("(test_timeout.*) = ([[:digit:]]+)" all first second)
+                (string-append first " = " second "0")))))
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (with-directory-excursion "glib/tests"
+               (substitute* '("unix.c" "utils.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
+             (with-directory-excursion "gio/tests"
+               (substitute* '("contenttype.c" "gdbus-address-get-session.c"
+                              "gdbus-peer.c" "appinfo.c" "desktop-app-info.c")
+                 (("[ \t]*g_test_add_func.*;") "")))
+             #t))
+         ;; Python references are not being patched in patch-phase of build,
+         ;; despite using python-wrapper as input. So we patch them manually.
+         ;;
+         ;; These python scripts are both used during build and installed,
+         ;; so at first, use a python from 'native-inputs', not 'inputs'. When
+         ;; cross-compiling, the 'patch-shebangs' phase will replace
+         ;; the native python with a python from 'inputs'.
+         (add-after 'unpack 'patch-python-references
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (substitute* '("gio/gdbus-2.0/codegen/gdbus-codegen.in"
+                            "glib/gtester-report.in"
+                            "gobject/glib-genmarshal.in"
+                            "gobject/glib-mkenums.in")
+               (("@PYTHON@")
+                (string-append (assoc-ref (or native-inputs inputs) "python")
+                               "/bin/python"
+                               ,(version-major+minor
+                                 (package-version python)))))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             ;; For tests/gdatetime.c.
+             (setenv "TZDIR"
+                     (string-append (assoc-ref (or native-inputs inputs)
+                                               "tzdata")
+                                    "/share/zoneinfo"))
+             ;; Some tests want write access there.
+             (setenv "HOME" (getcwd))
+             (setenv "XDG_CACHE_HOME" (getcwd))
+             #t))
+         (add-after 'install 'move-static-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (static (assoc-ref outputs "static")))
+               (mkdir-p (string-append static "/lib"))
+               (for-each (lambda (file)
+                           (link file (string-append static "/lib/"
+                                                     (basename file)))
+                           (delete-file file))
+                         (find-files (string-append out "/lib") "\\.a$")))))
+         ;; Meson does not permit the bindir to be outside of prefix.
+         (add-after 'install 'move-bin
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (assoc-ref outputs "bin")))
+               (mkdir-p bin)
+               (rename-file
+                (string-append out "/bin")
+                (string-append bin "/bin"))
+               ;; Do not refer to "bindir", which points to "${prefix}/bin".
+               ;; We don't patch "bindir" to point to "$bin/bin", because that
+               ;; would create a reference cycle between the "out" and "bin"
+               ;; outputs.
+               (substitute*
+                   (list
+                    (string-append out "/lib/pkgconfig/gio-2.0.pc")
+                    (string-append out "/lib/pkgconfig/glib-2.0.pc"))
+                 (("bindir=\\$\\{prefix\\}/bin") "")
+                 (("=\\$\\{bindir\\}/") "="))
+               #t))))))
+    ;; TODO: see above for explanation.
+    ;; #:configure-flags (list (string-append "--bindir="
+    ;;                                        (assoc-ref %outputs "bin")
+    ;;                                        "/bin"))
+    (native-inputs
+     `(("docbook-xsl" ,docbook-xsl)
+       ("gettext" ,gettext-minimal)
+       ("libintl" ,intltool)
+       ("m4" ,m4)                       ; for installing m4 macros
+       ("perl" ,perl)                   ; needed by GIO tests
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)               ; For 'patch-python-references
+       ("python-wrapper" ,python-wrapper)
+       ("tzdata" ,tzdata-for-tests)     ; for tests/gdatetime.c
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("bash-completion" ,bash-completion)
+       ;; "python", "python-wrapper" and "bash-minimal"
+       ;; are for the 'patch-shebangs' phase, to make
+       ;; sure the installed scripts end up with a correct shebang
+       ;; when cross-compiling.
+       ("python" ,python)
+       ("python-wrapper" ,python-wrapper)
+       ("bash-minimal" ,bash-minimal)
+       ("dbus" ,dbus)
+       ("libelf" ,libelf)))
+    (propagated-inputs
+     `(("libffi" ,libffi) ; in the Requires.private field of gobject-2.0.pc
+       ("pcre" ,pcre)   ; in the Requires.private field of glib-2.0.pc
+       ("util-linux" ,util-linux "lib") ;for libmount
+       ("zlib" ,zlib))) ; in the Requires.private field of glib-2.0.pc
+    (native-search-paths
+     ;; This variable is not really "owned" by GLib, but several related
+     ;; packages refer to it: gobject-introspection's tools use it as a search
+     ;; path for .gir files, and it's also a search path for schemas produced
+     ;; by 'glib-compile-schemas'.
+     (list
+      (search-path-specification
+       (variable "XDG_DATA_DIRS")
+       (files '("share")))
+      ;; To load extra gio modules from glib-networking, etc.
+      (search-path-specification
+       (variable "GIO_EXTRA_MODULES")
+       (files '("lib/gio/modules")))))
+    (search-paths native-search-paths)
+    (synopsis "Low-level core library for GNOME projects")
+    (description "GLib provides the core application building blocks for
+libraries and applications written in C.  It provides the core object system
+used in GNOME, the main loop implementation, and a large set of utility
+functions for strings and common data structures.")
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (license license:lgpl2.1+)))
 
 (define-public glib-with-documentation
   ;; glib's doc must be built in a separate package since it requires gtk-doc,
   ;; which in turn depends on glib.
   (package/inherit glib
-    (properties (alist-delete 'hidden? (package-properties glib)))
+    ;; (properties (alist-delete 'hidden? (package-properties glib)))
+    (properties '((hidden? . #t)))
     (outputs (cons "doc" (package-outputs glib))) ; 20 MiB of GTK-Doc reference
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)             ; for the doc
-       ("docbook-xml" ,docbook-xml)
+     `(("docbook-xml-4.2" ,docbook-xml-4.2)
+       ("docbook-xml-4.5" ,docbook-xml)
+       ("gtk-doc" ,gtk-doc)             ; for the doc
        ("libxml2" ,libxml2)
        ,@(package-native-inputs glib)))
     (arguments
@@ -436,62 +365,43 @@ dynamic loading, and an object system.")
         `(cons "-Dgtk_doc=true" ,flags))
        ((#:phases phases)
         `(modify-phases ,phases
+           (add-after 'unpack 'patch-docbook-xml
+             (lambda* (#:key inputs #:allow-other-keys)
+               (with-directory-excursion "docs"
+                 (substitute* (find-files "." "\\.xml$")
+                   (("http://www.oasis-open.org/docbook/xml/4\\.5/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.5")
+                                   "/xml/dtd/docbook/"))
+                   (("http://www.oasis-open.org/docbook/xml/4\\.2/")
+                    (string-append (assoc-ref inputs "docbook-xml-4.2")
+                                   "/xml/dtd/docbook/"))))
+               #t))
            (add-after 'install 'move-doc
              (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out"))
-                     (doc (assoc-ref outputs "doc"))
-                     (html (string-append "/share/gtk-doc")))
-                 (copy-recursively (string-append out html)
-                                   (string-append doc html))
-                 (delete-file-recursively (string-append out html))
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (assoc-ref outputs "doc"))
+                      (html (string-append "/share/gtk-doc")))
+                 (mkdir-p (string-append doc "/share"))
+                 (rename-file
+                  (string-append out html)
+                  (string-append doc html))
                  #t)))))))))
 
-;;; TODO: Merge into glib as a 'static' output on core-updates.
-(define-public glib-static
-  (hidden-package
-   (package
-     (inherit glib)
-     (name "glib-static")
-     (outputs '("out"))
-     (arguments
-      (substitute-keyword-arguments (package-arguments glib)
-        ((#:configure-flags flags ''())
-         `(cons* "--default-library=static"
-                 "-Dselinux=disabled"
-                 "-Dman=false"
-                 "-Dgtk_doc=false"
-                 "-Dinternal_pcre=false"
-                 ,flags))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (delete 'move-executables)
-            (replace 'install
-              ;; Only install the static libraries.
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (lib (string-append out "/lib")))
-                  (for-each (lambda (f)
-                              (install-file f lib))
-                            (find-files "." "\\.a$"))))))))))))
-
 (define gobject-introspection
   (package
     (name "gobject-introspection")
-    (version "1.62.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://gnome/sources/"
-                       "gobject-introspection/" (version-major+minor version)
-                       "/gobject-introspection-" version ".tar.xz"))
-       (sha256
-        (base32 "18lhglg9v6y83lhqzyifc1z0wrlawzrhzzxx0a3h1g7xaz97xvmi"))
-       (patches
-        (search-patches
-         "gobject-introspection-cc.patch"
-         "gobject-introspection-girepository.patch"
-         "gobject-introspection-absolute-shlib-path.patch"))))
+    (version "1.66.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnome/sources/"
+                   "gobject-introspection/" (version-major+minor version)
+                   "/gobject-introspection-" version ".tar.xz"))
+             (sha256
+              (base32 "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x"))
+             (patches (search-patches
+                       "gobject-introspection-cc.patch"
+                       "gobject-introspection-girepository.patch"
+                       "gobject-introspection-absolute-shlib-path.patch"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -508,11 +418,11 @@ dynamic loading, and an object system.")
     (inputs
      `(("bison" ,bison)
        ("flex" ,flex)
-       ("glib" ,glib)
        ("python" ,python-wrapper)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(;; In practice, GIR users will need libffi when using
+     `(("glib" ,glib)
+       ;; In practice, GIR users will need libffi when using
        ;; gobject-introspection.
        ("libffi" ,libffi)))
     (native-search-paths
@@ -609,7 +519,7 @@ The intltool collection can be used to do these things:
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/itstool")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (home-page "http://www.itstool.org")
     (synopsis "Tool to translate XML documents with PO files")
@@ -664,63 +574,149 @@ by GDBus included in Glib.")
 (define libsigc++
   (package
     (name "libsigc++")
-    (version "2.10.3")
+    (version "3.0.6")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/libsigc++/"
-                                 (version-major+minor version) "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "11j7j1jv4z58d9s7jvl42fnqa1dzl4idgil9r45cjv1w673dys0b"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("m4" ,m4)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/libsigc++/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1kn57b039lg20182lnchl1ys27vf34brn43f895cal8nc7sdq3mp"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("boost" ,boost)))
     (home-page "https://libsigcplusplus.github.io/libsigcplusplus/")
     (synopsis "Type-safe callback system for standard C++")
     (description
      "Libsigc++ implements a type-safe callback system for standard C++.  It
-allows you to define signals and to connect those signals to any callback
-function, either global or a member function, regardless of whether it is
-static or virtual.
+     allows you to define signals and to connect those signals to any callback
+     function, either global or a member function, regardless of whether it is
+     static or virtual.
 
-It also contains adaptor classes for connection of dissimilar callbacks and
-has an ease of use unmatched by other C++ callback libraries.")
-    (license license:lgpl2.1+)))
+     It also contains adaptor classes for connection of dissimilar callbacks and
+     has an ease of use unmatched by other C++ callback libraries.")
+    (license license:lgpl3+)))
+
+ (define-public libsigc++-2
+   (package
+    (inherit libsigc++)
+    (name "libsigc++")
+    (version "2.9.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/libsigc++/"
+                       (version-major+minor version)
+                       "/libsigc++-" version ".tar.xz"))
+       (sha256
+        (base32 "0zq963d0sss82q62fdfjs7l9iwbdch51albck18cb631ml0v7y8b"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.1\\.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))))
 
 (define glibmm
   (package
     (name "glibmm")
-    (version "2.62.0")
+    (version "2.68.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/glibmm/"
-                                 (version-major+minor version)
-                                 "/glibmm-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1ziwx6r7k7wbvg4qq1rgrv8zninapgrmhn1hs6926a3krh9ryr9n"))))
-    (build-system gnu-build-system)
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/glibmm/"
+                                  (version-major+minor version)
+                                  "/glibmm-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0xgkyhb2876mcyyib5rk3ya9aingyj68h02nl22yvkhx35rqbwy1"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'pre-build
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; This test uses /etc/fstab as an example file to read
-             ;; from; choose a better example.
-             (substitute* "tests/giomm_simple/main.cc"
-               (("/etc/fstab")
-                (string-append (getcwd)
-                               "/tests/giomm_simple/main.cc")))
-
-             ;; This test does a DNS lookup, and then expects to be able
-             ;; to open a TLS session; just skip it.
-             (substitute* "tests/giomm_tls_client/main.cc"
-               (("Gio::init.*$")
-                "return 77;\n"))
-             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")))
+             (substitute* "tests/meson.build"
+               ;; This test uses /etc/fstab as an example file to read
+               ;; from; disable it.
+               (("[ \t]*.*giomm_simple.*$") "")
+               ;; This test does a DNS lookup, and then expects to be able
+               ;; to open a TLS session; just skip it.
+               (("[ \t]*.*giomm_tls_client.*$") ""))
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("glib:bin" ,glib "bin")
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
      `(("libsigc++" ,libsigc++)
        ("glib" ,glib)))
@@ -735,7 +731,7 @@ useful for C++.")
    (package
     (inherit glibmm)
     (name "glibmm")
-    (version "2.64.2")
+    (version "2.64.5")
     (source
      (origin
        (method url-fetch)
@@ -744,10 +740,10 @@ useful for C++.")
                        (version-major+minor version)
                        "/glibmm-" version ".tar.xz"))
        (sha256
-        (base32 "1v6lp23fr2qh4zshcnm28sn29j3nzgsvcqj2nhmrnvamipjq4lm7"))))
+        (base32 "11m37sbx0i18cl17d0fkq0bik4bbzlb5n8kcl651jhci5ipci3sh"))))
      (propagated-inputs
-      `(("libsigc++" ,libsigc++)
-        ("glib" ,glib)))))
+      `(("libsigc++" ,libsigc++-2)
+        ,@(package-propagated-inputs glibmm)))))
 
 (define-public python2-pygobject-2
   (package
@@ -790,7 +786,7 @@ useful for C++.")
 (define-public python-pygobject
   (package
     (name "python-pygobject")
-    (version "3.34.0")
+    (version "3.40.1")
     (source
      (origin
        (method url-fetch)
@@ -799,7 +795,7 @@ useful for C++.")
                            "/pygobject-" version ".tar.xz"))
        (sha256
         (base32
-         "06i7ynnbvgpz0gw09zsjbvhgcp5qz4yzdifw27qjwdazg2mckql7"))
+         "0d80g5kgf2i9cginyhalvb7ibfk9g30yilqzmcsw6h6byj8xbih0"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index d8997ac538..af920c501d 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -916,7 +916,7 @@ track stocks, currencies and cryptocurrencies.")
        ("json-glib" ,json-glib)
        ("jsonrpc-glib" ,jsonrpc-glib)
        ("libgee" ,libgee)
-       ("vala" ,vala-0.50)))
+       ("vala" ,vala)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "https://github.com/benwaffle/vala-language-server")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 39102dc798..389ac9f4ff 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -144,6 +144,7 @@
   #:use-module (gnu packages lirc)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mail)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages music)
@@ -959,7 +960,7 @@ cloud integration is offered through GNOME Online Accounts.")
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
                  `("GST_PLUGIN_SYSTEM_PATH" = (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
                  `("GRL_PLUGIN_PATH" = (,(getenv "GRL_PLUGIN_PATH")))
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))))
              #t)))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -1123,8 +1124,7 @@ freedesktop.org desktop notification specification.")
                 "1x8yvjy0yg17qyhmqws8xh2k8dvzrhpwqz7j1cfwzalrb1i9c5g8"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1429,8 +1429,6 @@ and implementation of UPnP A/V profiles.")
                (base32
                 "1mlw1qgj8nkd9ll6b6h54r1gfdy3zp8a8xqz7qfyfaj85jjgbph7"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-next))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
@@ -1817,7 +1815,6 @@ either on a local, or remote machine via a number of methods.")
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
-       ("gcc" ,gcc-8) ;required for -Wcast-function-type
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -2756,7 +2753,7 @@ and how they are displayed (View).")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -3274,104 +3271,70 @@ XML/CSS rendering engine.")
               (sha256
                (base32
                 "0kbpp9ksl7977xiga37sk1gdw1r039v6zviqznl7alvvg39yp26i"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--disable-static")))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-
-       ;; For tests.
-       ("perl" ,perl)
-       ("perl-xml-parser" ,perl-xml-parser)))
-    (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)))
-    (propagated-inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)))
-    (home-page "https://www.gnome.org/projects/libgsf")
-    (synopsis "GNOME's Structured File Library")
-    (description
-     "Libgsf aims to provide an efficient extensible I/O abstraction for
-dealing with different structured file formats.")
-
-    ;; LGPLv2.1-only.
-    (license license:lgpl2.1)))
-
-(define-public librsvg
-  (package
-    (name "librsvg")
-    (version "2.40.21")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
-                                  (version-major+minor version)  "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1fljkag2gr7c4k5mn798lgf9903xslz8h51bgvl89nnay42qjqpp"))))
-    (build-system gnu-build-system)
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "bin" "doc"))
     (arguments
      `(#:configure-flags
-       (list "--disable-static"
-             "--enable-vala") ; needed for e.g. gnome-mines
+       (list
+        "--disable-static"
+        "--enable-introspection"
+        (string-append "--with-gir-dir="
+                       (assoc-ref %outputs "out")
+                       "/share/gir-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-typelib-dir="
+                       (assoc-ref %outputs "out")
+                       "/lib/girepository-"
+                       ,(version-major
+                         (package-version gobject-introspection))
+                       ".0")
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html")
+        "--with-zlib"
+        "--with-bz2")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
+         (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "gdk-pixbuf-loader/Makefile.in"
-               ;; By default the gdk-pixbuf loader is installed under
-               ;; gdk-pixbuf's prefix.  Work around that.
-               (("gdk_pixbuf_moduledir = .*$")
-                (string-append "gdk_pixbuf_moduledir = "
-                               "$(prefix)/lib/gdk-pixbuf-2.0/2.10.0/"
-                                "loaders\n"))
-               ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
-               (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
-         (add-before 'check 'remove-failing-tests
-           (lambda _
-             (with-directory-excursion "tests/fixtures/reftests"
-               (for-each delete-file
-                         '(;; This test fails on i686:
-                           "svg1.1/masking-path-04-b.svg"
-                           ;; This test fails on armhf:
-                           "svg1.1/masking-mask-01-b.svg"
-                           ;; This test fails on aarch64:
-                           "bugs/777834-empty-text-children.svg")))
+             (with-directory-excursion "doc"
+               (substitute* "gsf-docs.xml"
+                 (("http://www.oasis-open.org/docbook/xml/4.5/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("vala" ,vala)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
+     `(("docbook-xml" ,docbook-xml)
+       ("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
+       ("perl" ,perl)
+       ("perl-xml-parser" ,perl-xml-parser)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
     (inputs
-     `(;; XXX: 1.44 causes some test failures, so we stick with 1.42 for
-       ;; this ancient version of librsvg.
-       ("pango" ,pango-1.42)
-       ("libcroco" ,libcroco)
-       ("bzip2" ,bzip2)
-       ("libgsf" ,libgsf)
-       ("libxml2" ,libxml2)))
-    (propagated-inputs
-     ;; librsvg-2.0.pc refers to all of that.
-     `(("cairo" ,cairo)
+     `(("bzip2" ,bzip2)
        ("gdk-pixbuf" ,gdk-pixbuf)
-       ("glib" ,glib)))
-    (home-page "https://wiki.gnome.org/LibRsvg")
-    (synopsis "Render SVG files using Cairo")
-    (description
-     "Librsvg is a C library to render SVG files using the Cairo 2D graphics
-library.")
-    (license license:lgpl2.0+)))
+       ("zlib" ,zlib)))
+    (propagated-inputs
+     `(("glib" ,glib)
+       ("libxml2" ,libxml2)))
+    (synopsis "G Structured File Library")
+    (description "Libgsf aims to provide an efficient extensible I/O abstraction
+for dealing with different structured file formats.")
+    (home-page "https://gitlab.gnome.org/GNOME/libgsf")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Others
+      license:lgpl2.0+))))
 
-(define-public librsvg-next
+(define-public librsvg
   (package
     (name "librsvg")
-    (version "2.50.3")
+    (version "2.50.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/librsvg/"
@@ -3379,15 +3342,16 @@ library.")
                                   "librsvg-" version ".tar.xz"))
               (sha256
                (base32
-                "0n79i4wj9hm0d3bbn4xvknq5ylhqs16pvhaqr1rxspx9wfc8lad4"))
+                "0wlj5g1jgp93sj3rr6qspj282whz13ahnv8ca99d7zilq9s1aw1j"))
               (modules '((guix build utils)))
               (snippet
-               '(begin (delete-file-recursively "vendor")
-                       #t))))
+               '(begin (delete-file-recursively "vendor")))))
     (build-system cargo-build-system)
     (outputs '("out" "doc"))
     (arguments
      `(#:install-source? #f
+       ;; XXX: compiling librsvg_c_api hangs forever with 1.49.
+       #:rust ,rust-1.48
        #:modules
        ((guix build cargo-build-system)
         (guix build utils)
@@ -3447,8 +3411,7 @@ library.")
                (substitute* "rsvg-docs.xml"
                  (("http://www.oasis-open.org/docbook/xml/4.3/")
                   (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'prepare-for-build
            (lambda _
              ;; In lieu of #:make-flags
@@ -3456,8 +3419,7 @@ library.")
              ;; Something about the build environment resists building
              ;; successfully with the '--locked' flag.
              (substitute* '("Makefile.am" "Makefile.in")
-               (("--locked") ""))
-             #t))
+               (("--locked") ""))))
          (add-before 'configure 'pre-configure
            (lambda _
              (substitute* "gdk-pixbuf-loader/Makefile.in"
@@ -3469,8 +3431,7 @@ library.")
                                "loaders\n"))
                ;; Drop the 'loaders.cache' file, it's in gdk-pixbuf+svg.
                (("gdk_pixbuf_cache_file = .*$")
-                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))
-             #t))
+                "gdk_pixbuf_cache_file = $(TMPDIR)/loaders.cache\n"))))
          (add-after 'configure 'gnu-configure
            (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
              ((assoc-ref gnu:%standard-phases 'configure)
@@ -3481,14 +3442,13 @@ library.")
               (list "--disable-static"
                     "--enable-vala"
                (string-append "--with-html-dir="
-                              (assoc-ref %outputs "doc")
+                              (assoc-ref outputs "doc")
                               "/share/gtk-doc/html")))))
          (add-after 'configure 'dont-vendor-self
            (lambda* (#:key vendor-dir #:allow-other-keys)
              ;; Don't keep the whole tarball in the vendor directory
              (delete-file-recursively
-              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))
-             #t))
+              (string-append vendor-dir "/" ,name "-" ,version ".tar.xz"))))
          (replace 'build
            (assoc-ref gnu:%standard-phases 'build))
          (add-before 'check 'ignore-failing-tests
@@ -3514,8 +3474,7 @@ library.")
                (("fn multiple_input_files_not_allowed_for_png_output" all)
                 (string-append "#[ignore] " all))
                (("fn stylesheet_option_error" all)
-                (string-append "#[ignore] " all)))
-             #t))
+                (string-append "#[ignore] " all)))))
          (replace 'check
            (lambda* args
              ((assoc-ref gnu:%standard-phases 'check)
@@ -4396,61 +4355,58 @@ passwords in the GNOME keyring.")
 (define-public vala
   (package
     (name "vala")
-    (version "0.46.5")
+    (version "0.52.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/" name "/"
+              (uri (string-append "mirror://gnome/sources/vala/"
                                   (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
+                                  "vala-" version ".tar.xz"))
               (sha256
                (base32
-                "07fv895sp9wq74b20qig7hic0r4ynrr5pfaqba02r44xb794fy0s"))))
-    (build-system gnu-build-system)
+                "12y6p8wdjp01vmfhxg2cgh32xnyqq6ivblvrar9clnj6vc867qhx"))))
+    (build-system glib-or-gtk-build-system)
     (arguments
-     '(#:phases
+     '(#:configure-flags '("--enable-coverage")
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "doc/manual"
+               (substitute* '("manual.xml" "version.xml.in")
+                 (("http://www.oasis-open.org/docbook/xml/4.4/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
          (add-before 'check 'pre-check
-                     (lambda _
-                       (setenv "CC" "gcc")
-                       (substitute* "valadoc/tests/testrunner.sh"
-                         (("export PKG_CONFIG_PATH=" m)
-                          (string-append m "$PKG_CONFIG_PATH:")))
-                       ;; For missing '/etc/machine-id'.
-                       (setenv "DBUS_FATAL_WARNINGS" "0")
-                       #t)))))
+           (lambda _
+             (setenv "CC" "gcc")
+             (substitute* "valadoc/tests/libvaladoc\
+/tests-extra-environment.sh"
+               (("export PKG_CONFIG_PATH=" m)
+                (string-append m "$PKG_CONFIG_PATH:"))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("bison" ,bison)
+       ("dbus" ,dbus)                   ; for dbus tests
+       ("docbook-xml" ,docbook-xml-4.4)
+       ("docbook-xsl" ,docbook-xsl)
        ("flex" ,flex)
-       ("bison" ,bison)
-       ("xsltproc" ,libxslt)
-       ("dbus" ,dbus)                                     ; for dbus tests
-       ("gobject-introspection" ,gobject-introspection))) ; for gir tests
-    (inputs
-     `(("graphviz" ,graphviz)))
+       ("gobject-introspection" ,gobject-introspection) ; for gir tests
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib))) ; required by libvala-0.40.pc
+     `(("glib" ,glib)                   ; required by libvala-0.40.pc
+       ("libgvc" ,graphviz)))
     (home-page "https://wiki.gnome.org/Projects/Vala/")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "Vala is a programming language that aims to bring modern programming
-language features to GNOME developers without imposing any additional runtime
-requirements and without using a different ABI compared to applications and
-libraries written in C.")
+    (synopsis "Compiler using the GObject type system")
+    (description "Vala is a programming language using modern high level
+abstractions without imposing additional runtime requirements and without using
+a different ABI compared to applications and libraries written in C.  Vala uses
+the GObject type system and has additional code generation routines that make
+targeting the GNOME stack simple.")
     (license license:lgpl2.1+)))
 
-(define-public vala-0.50
-  (package
-    (inherit vala)
-    (version "0.50.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnome/sources/vala/"
-                                  (version-major+minor version) "/"
-                                  "vala-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1nnf0x6vk0a9p2y6z7jwjfvmlxh3qhj581v381r0y1sxsv35s39c"))))))
-
 (define-public vte
   (package
     (name "vte")
@@ -4646,7 +4602,7 @@ configuration storage systems.")
 (define-public json-glib
   (package
     (name "json-glib")
-    (version "1.4.4")
+    (version "1.6.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4654,23 +4610,54 @@ configuration storage systems.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0ixwyis47v5bkx6h8a1iqlw3638cxcv57ivxv4gw2gaig51my33j"))))
+                "092g2dyy1hhl0ix9kp33wcab0pg1qicnsv0cj5ms9g9qs336cgd3"))))
     (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Ddocs=true"
+        "-Dman=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "doc"
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/")))
+               (substitute* "meson.build"
+                 (("http://docbook.sourceforge.net/release/xsl/current/")
+                  (string-append (assoc-ref inputs "docbook-xsl")
+                                 "/xml/xsl/docbook-xsl-1.79.2/"))))
+             #t))
+         (add-after 'install 'move-docs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/gtk-doc")
+                (string-append doc "/share/gtk-doc"))
+               #t))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")              ;for glib-mkenums and glib-genmarshal
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")      ;for glib-mkenums and glib-genmarshal
        ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+       ("gtk-doc" ,gtk-doc)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
-     `(("glib" ,glib)))                         ;according to json-glib-1.0.pc
+     `(("glib" ,glib)))                 ;according to json-glib-1.0.pc
     (home-page "https://wiki.gnome.org/Projects/JsonGlib")
-    (synopsis "Compiler for the GObject type system")
-    (description
-     "JSON-GLib is a C library based on GLib providing serialization and
-deserialization support for the JavaScript Object Notation (JSON) format
-described by RFC 4627.  It provides parser and generator GObject classes and
-various wrappers for the complex data types employed by JSON, such as arrays
-and objects.")
+    (synopsis "Glib and GObject implementation of JSON")
+    (description "JSON-GLib is a library providing serialization and
+described by RFC 4627.  It implements a full JSON parser and generator using
+GLib and GObject, and integrates JSON with GLib data types.")
     (license license:lgpl2.1+)))
 
 (define-public libxklavier
@@ -4757,7 +4744,7 @@ library.")
 (define-public glib-networking
   (package
     (name "glib-networking")
-    (version "2.62.2")
+    (version "2.68.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/glib-networking/"
@@ -4765,23 +4752,26 @@ library.")
                                   "glib-networking-" version ".tar.xz"))
               (sha256
                (base32
-                "0i2mw75297ql72h47vyvff3hqa0kcmqybblj52fqrarb0kfbhi06"))))
+                "0vlzn8jf4sg90cm8xxr28yf66nhf8qy9dl2m4b8w1cr6mn2mw8qb"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:configure-flags '("-Dlibproxy_support=false")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)))
     (inputs
      `(("glib" ,glib)
        ("gnutls" ,gnutls)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
-    (home-page "https://www.gnome.org")
-    (synopsis "Network-related GIO modules")
-    (description
-     "This package contains various network related extensions for the GIO
-library.")
-    (license license:lgpl2.0+)))
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("libproxy" ,libproxy)))
+    (home-page "https://wiki.gnome.org/Projects/GLib")
+    (synopsis "Network extensions for GLib")
+    (description
+     "Glib-networking contains the implementations of certain GLib networking
+features that cannot be implemented directly in GLib itself because of their
+dependencies.  Currently it contains GnuTLS and OpenSSL-based implementations of
+GTlsBackend, a libproxy-based implementation of GProxyResolver,
+GLibproxyResolver, and a GNOME GProxyResolver that uses the proxy information
+from the GSettings schemas in gsettings-desktop-schemas.")
+    (license license:lgpl2.1+)))
 
 (define-public rest
   (package
@@ -4864,49 +4854,10 @@ libxml to ease remote use of the RESTful API.")
              (substitute* "tests/hsts-db-test.c"
                ((".*/hsts-db/subdomains.*") ""))
 
-             ;; Generate a self-signed certificate that has "localhost" as its
-             ;; 'dnsName'.  Failing to do that, and starting with GnuTLS
-             ;; 3.5.12, tests such as "ssl-tests" fail:
-             ;;
-             ;; ERROR:ssl-test.c:406:do_tls_interaction_test: Unexpected status 6 Unacceptable TLS certificate (expected 200 OK)
-             ;;
-             ;; 'certtool' is interactive so we have to pipe it the answers.
-             ;; Reported at <https://bugzilla.gnome.org/show_bug.cgi?id=784696>.
-             (let ((pipe (open-output-pipe "certtool --generate-self-signed \
- --load-privkey tests/test-key.pem --outfile tests/test-cert.pem")))
-               (for-each (lambda (line)
-                           (display line pipe)
-                           (newline pipe))
-                         '(""               ;Common name
-                           ""               ;UID
-                           "Guix"           ;Organizational unit name
-                           "GNU"            ;Organization name
-                           ""               ;Locality name
-                           ""               ;State or province
-                           ""               ;Country
-                           ""               ;subject's domain component (DC)
-                           ""               ;E-mail
-                           ""               ;serial number
-                           "-1"             ;expiration time
-                           "N"              ;belong to authority?
-                           "N"              ;web client certificate?
-                           "N"              ;IPsec IKE?
-                           "Y"              ;web server certificate?
-                           "localhost"      ;dnsName of subject
-                           ""               ;dnsName of subject (end)
-                           ""               ;URI of subject
-                           "127.0.0.1"      ;IP address of subject
-                           ""               ;signing?
-                           ""               ;encryption (RSA)?
-                           ""               ;data encryption?
-                           ""               ;sign OCSP requests?
-                           ""               ;sign code?
-                           ""               ;time stamping?
-                           ""               ;email protection?
-                           ""               ;URI of the CRL distribution point
-                           "y"              ;above info OK?
-                           ))
-               (close-pipe pipe))
+             ;; FIXME: ssl-test fails, starting with
+             ;; glib-networking 2.68.x.
+             (substitute* "tests/meson.build"
+               (("[ \t]*\\['ssl', true, \\[\\]\\],") ""))
              #t))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
@@ -4928,7 +4879,6 @@ libxml to ease remote use of the RESTful API.")
        ("vala" ,vala)
        ("php" ,php)
        ("curl" ,curl)
-       ("gnutls" ,gnutls)                         ;for 'certtool'
        ("httpd" ,httpd)))
     (propagated-inputs
      ;; libsoup-2.4.pc refers to all of these (except where otherwise noted)
@@ -6318,12 +6268,12 @@ which can read a large number of file formats.")
                  (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                  (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
                  (grl-plugin-path   (getenv "GRL_PLUGIN_PATH"))
-                 (python-path       (getenv "PYTHONPATH")))
+                 (python-path       (getenv "GUIX_PYTHONPATH")))
              (wrap-program (string-append out "/bin/rhythmbox")
                `("GI_TYPELIB_PATH"        ":" prefix (,gi-typelib-path))
                `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                `("GRL_PLUGIN_PATH"        ":" prefix (,grl-plugin-path))
-               `("PYTHONPATH"             ":" prefix (,python-path))))
+               `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
            #t)))))
    (propagated-inputs
     `(("dconf" ,dconf)))
@@ -6426,7 +6376,7 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
       ("libexif" ,libexif)
       ("libpeas" ,libpeas)
       ("libjpeg" ,libjpeg-turbo)
-      ("librsvg" ,librsvg-next)
+      ("librsvg" ,librsvg)
       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
       ("gtk+" ,gtk+)))
    (home-page "https://wiki.gnome.org/Apps/EyeOfGnome")
@@ -6692,7 +6642,7 @@ almost all of them.")
                            ":")))
                (wrap-program (string-append out "/bin/eolie")
                  `("LD_LIBRARY_PATH" ":" prefix (,path))
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
              #t)))))
     (native-inputs
@@ -6838,7 +6788,7 @@ principles are simplicity and standards compliance.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/d-feet")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (native-inputs
@@ -6875,10 +6825,17 @@ of running programs and invoke methods on those interfaces.")
        (sha256
         (base32 "1bdpgkzawhqmw52l6zx8czzg1ndfgcf1p44m2bxjdpqkc4afcgqc"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        "--enable-doc")))
     (native-inputs
-     `(("gettext-minimal" ,gettext-minimal)
+     `(("ducktype" ,mallard-ducktype)
+       ("gettext" ,gettext-minimal)
+       ("intltool" ,intltool)
        ("itstool" ,itstool)
-       ("xmllint" ,libxml2)))
+       ("xmllint" ,libxml2)
+       ("xsltproc" ,libxslt)))
     (synopsis "XSL stylesheets for Yelp")
     (description "Yelp-XSL is a collection of programs and data files to help
 you build, maintain, and distribute documentation.  It provides XSLT stylesheets
@@ -7297,11 +7254,11 @@ javascript engine and the GObject introspection framework.")
              (let ((out               (assoc-ref outputs "out"))
                    (gtksourceview     (assoc-ref inputs "gtksourceview"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/gedit")
                  ;; For plugins.
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))
                  ;; For language-specs.
                  `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
                                                                "/share")))))
@@ -7664,12 +7621,12 @@ Evolution (hence the name), but is now used by other packages as well.")
          (add-after 'install 'wrap-programs
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH"))
+                   (python-path (getenv "GUIX_PYTHONPATH"))
                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
               (for-each
                (lambda (prog)
                  (wrap-program prog
-                   `("PYTHONPATH"      ":" prefix (,python-path))
+                   `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
                    `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
                (list (string-append out "/bin/caribou-preferences")
                      (string-append out "/libexec/antler-keyboard"))))
@@ -8524,9 +8481,10 @@ properties, screen resolution, and other GNOME parameters.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:disallowed-references ((,glib "bin")
-                                ,inkscape ,libxslt
-                                ,ruby-sass)
+       #:disallowed-references ,(list (gexp-input glib "bin")
+                                      (gexp-input inkscape)
+                                      (gexp-input libxslt)
+                                      (gexp-input ruby-sass))
        #:configure-flags
        (list "-Dsystemd=false"
              ;; Otherwise, the RUNPATH will lack the final path component.
@@ -8575,7 +8533,7 @@ properties, screen resolution, and other GNOME parameters.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out              (assoc-ref outputs "out"))
                    (gi-typelib-path  (getenv "GI_TYPELIB_PATH"))
-                   (python-path      (getenv "PYTHONPATH")))
+                   (python-path      (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/gnome-shell")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  ;; FIXME: gnome-shell loads these libraries with unqualified
@@ -8589,7 +8547,7 @@ properties, screen resolution, and other GNOME parameters.")
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/bin/" prog)
-                    `("PYTHONPATH"      ":" prefix (,python-path))
+                    `("GUIX_PYTHONPATH"      ":" prefix (,python-path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
                 '("gnome-shell-extension-tool" "gnome-shell-perf-tool"))
                #t)))
@@ -9373,7 +9331,7 @@ specified duration and save it as a GIF encoded animated image file.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -9584,13 +9542,13 @@ desktop.  It supports multiple calendars, month, week and year view.")
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let ((out               (assoc-ref outputs "out"))
                             (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                            (python-path       (getenv "PYTHONPATH")))
+                            (python-path       (getenv "GUIX_PYTHONPATH")))
                         (wrap-program (string-append out "/bin/gnome-todo")
                           ;; XXX: gi plugins are broken.
                           ;; See https://bugzilla.gnome.org/show_bug.cgi?id=787212
                           ;; For plugins.
                           `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                          `("PYTHONPATH" ":" prefix (,python-path))))
+                          `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
                       #t)))))
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -10192,8 +10150,8 @@ accessibility infrastructure.")
                    (,(getenv "GI_TYPELIB_PATH")))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
                    (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                 `("PYTHONPATH" ":" prefix
-                   (,(getenv "PYTHONPATH")))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH")))))
              #t)))))
     (native-inputs
      `(("intltool" ,intltool)
@@ -10526,7 +10484,7 @@ apply fancy special effects and lets you share the fun with others.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -11593,7 +11551,7 @@ and toolbars.")
                                            (package-version python))
                                          "/site-packages")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,pylib))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (native-inputs
@@ -11717,7 +11675,7 @@ It uses pandoc as back-end for parsing Markdown.")
                     (pygo (string-append
                            (assoc-ref inputs "python-pygobject") site))
                     (python-wrap
-                     `("PYTHONPATH" = (,evdev ,pygo))))
+                     `("GUIX_PYTHONPATH" = (,evdev ,pygo))))
                (wrap-program (string-append out "/bin/" "ratbagctl")
                  python-wrap)
                #t))))))
@@ -12099,7 +12057,7 @@ integrated profiler via Sysprof, debugging support, and more.")
             (let ((prog (string-append (assoc-ref outputs "out")
                                        "/bin/komikku")))
               (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
               #t))))))
     (inputs
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 0eb6aff6e6..629e837cba 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -80,13 +81,14 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (ice-9 match)
   #:use-module (guix build-system meson)
   #:use-module (srfi srfi-1))
 
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.37")
+    (version "1.42")
     (source
      (origin
       (method url-fetch)
@@ -94,32 +96,48 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
+        "08syj8mlarww8mh8x3s0x6hjqbnxp2lkg3hab57qqpv1dh7yf1zw"))))
     (build-system gnu-build-system)
     (arguments
      (if (%current-target-system)
-         `(#:modules ((ice-9 match)
-                      (guix build gnu-build-system)
+         `(#:modules ((guix build gnu-build-system)
                       (guix build utils))
            #:phases
            (modify-phases %standard-phases
+             ;; If this is left out, some generated header
+             ;; files will be sprinkled with ‘\c’, which
+             ;; the compiler won't like.
+             (add-after 'unpack 'fix-gen-lock-obj.sh
+               (lambda _
+                 (substitute* "src/gen-lock-obj.sh"
+                   (("if test -n `echo -n`") "if ! test -n `echo -n`"))))
              ;; When cross-compiling, some platform specific properties cannot
              ;; be detected. Create a symlink to the appropriate platform
-             ;; file. See Cross-Compiling section at:
+             ;; file if required. Note that these platform files depend on
+             ;; both the operating system and architecture!
+             ;;
+             ;; See Cross-Compiling section at:
              ;; https://github.com/gpg/libgpg-error/blob/master/README
              (add-after 'unpack 'cross-symlinks
-               (lambda* (#:key target inputs #:allow-other-keys)
-                 (let ((triplet
-                        (match (string-take target
-                                            (string-index target #\-))
-                          ("armhf" "arm-unknown-linux-gnueabi")
-                          ("mips64el" "mips-unknown-linux-gnu")
-                          (x
-                           (string-append x "-unknown-linux-gnu")))))
-                   (symlink
-                    (string-append "lock-obj-pub." triplet ".h")
-                    "src/syscfg/lock-obj-pub.linux-gnu.h"))
-                 #t))))
+               (lambda _
+                 (define (link triplet source)
+                   (symlink (string-append "lock-obj-pub." triplet ".h")
+                            (string-append "src/syscfg/lock-obj-pub."
+                                           source ".h")))
+                 ,(let* ((target (%current-target-system))
+                         (architecture
+                          (string-take target (string-index target #\-))))
+                    (cond ((target-linux? target)
+                           (match architecture
+                             ("armhf"
+                              `(link "arm-unknown-linux-gnueabi" "linux-gnu"))
+                             ("mips64el"
+                              `(link "mips-unknown-linux-gnu" "linux-gnu"))
+                             ;; Don't always link to the "linux-gnu"
+                             ;; configuration, as this is not correct for
+                             ;; all architectures.
+                             (_ #t)))
+                          (#t #t)))))))
          '()))
     (native-inputs `(("gettext" ,gettext-minimal)))
     (home-page "https://gnupg.org")
@@ -136,14 +154,14 @@ Daemon and possibly more in the future.")
 (define-public libgcrypt
   (package
     (name "libgcrypt")
-    (version "1.8.5")
+    (version "1.8.7")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-                "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
+               "0j27jxhjay78by940d64778nxwbysxynv5mq6iq1nmlrh810zdq3"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -175,7 +193,7 @@ generation.")
 (define-public libassuan
   (package
     (name "libassuan")
-    (version "2.5.4")
+    (version "2.5.5")
     (source
      (origin
       (method url-fetch)
@@ -183,7 +201,7 @@ generation.")
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1w7vnnycq4z7gf4bk38pi4hrb8qrrzgfpz3cd7frwldxnfbfx060"))))
+        "1r1lvcp67gn5lfrj1g388sd77ca6qwnmxndirdysd71gk362z34f"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error" ,libgpg-error)
@@ -203,7 +221,7 @@ provided.")
 (define-public libksba
   (package
     (name "libksba")
-    (version "1.5.0")
+    (version "1.5.1")
     (source
      (origin
       (method url-fetch)
@@ -212,7 +230,7 @@ provided.")
             version ".tar.bz2"))
       (sha256
        (base32
-        "1fm0mf3wq9fmyi1rmc1vk2fafn6liiw2mgxml3g7ybbb44lz2jmf"))))
+        "08grggf4c7sxahna12slwhqrbgi8gbkw1f7n94irlza49rgcdx5h"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error" ,libgpg-error)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 233e3104d0..74403751a9 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -417,7 +417,7 @@ in C/C++.")
 (define-public mozjs-78
   (package
     (inherit mozjs-60)
-    (version "78.5.0")
+    (version "78.10.1")
     (source (origin
               (method url-fetch)
               ;; TODO: Switch to IceCat source once available on ftp.gnu.org.
@@ -426,7 +426,7 @@ in C/C++.")
                                   version "esr.source.tar.xz"))
               (sha256
                (base32
-                "1442yjmwz69hkfcvh8kkb60jf4c9ms0pac04nc3xw2da13v4zxai"))))
+                "0gyg2p6i1wmmfghwg13pp6fj8j8xz6c14f6bbnf4pf0f5c3la7y4"))))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
        #:modules ((guix build cargo-utils)
@@ -550,10 +550,10 @@ in C/C++.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python-3)
-       ("rust" ,rust)
-       ("cargo" ,rust "cargo")))
+       ("rust" ,rust-1.41)
+       ("cargo" ,rust-1.41 "cargo")))
     (inputs
-     `(("icu4c" ,icu4c-68)
+     `(("icu4c" ,icu4c)
        ("readline" ,readline)
        ("zlib" ,zlib)))))
 
@@ -929,8 +929,8 @@ from forcing GEXP-PROMISE."
 
        ("patch" ,(canonical-package patch))
 
-       ("rust" ,rust-1.41)
-       ("cargo" ,rust-1.41 "cargo")
+       ("rust" ,rust)
+       ("cargo" ,rust "cargo")
        ("rust-cbindgen" ,rust-cbindgen-0.14)
        ("llvm" ,llvm)
        ("clang" ,clang)
@@ -1607,7 +1607,7 @@ standards of the IceCat project.")
               (base32
                "10l042dd7b8rvla0cbiks5kjrz2b28yy7hr8sr169wlx202hxa01")))))
        ("autoconf" ,autoconf-2.13)
-       ("cargo" ,rust-1.41 "cargo")
+       ("cargo" ,rust "cargo")
        ("clang" ,clang)
        ("llvm" ,llvm)
        ("nasm" ,nasm)
@@ -1616,7 +1616,7 @@ standards of the IceCat project.")
        ("pkg-config" ,pkg-config)
        ("python" ,python)
        ("python2" ,python-2.7)
-       ("rust" ,rust-1.41)
+       ("rust" ,rust)
        ("rust-cbindgen" ,rust-cbindgen-0.14)
        ("which" ,which)
        ("yasm" ,yasm)))
diff --git a/gnu/packages/gpodder.scm b/gnu/packages/gpodder.scm
index 0aab6d3f29..245bca01a5 100644
--- a/gnu/packages/gpodder.scm
+++ b/gnu/packages/gpodder.scm
@@ -90,9 +90,6 @@
                #t)))
          (replace 'check
            (lambda _
-             ; The `unittest' target overrides the PYTHONPATH variable.
-             (substitute* "makefile"
-               (("PYTHONPATH=src/") "PYTHONPATH=${PYTHONPATH}:src/"))
              (invoke "make" "unittest")))
          ;; 'msgmerge' introduces non-determinism by resetting the
          ;; POT-Creation-Date in .po files.
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index 0eb4362858..49bc5e8254 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -281,7 +281,7 @@ such as elevation, speed, heart rate, power, temperature, and gear shifts.")
                                              ":")))
                (for-each (lambda (script)
                            (wrap-program (string-append out "/bin/" script)
-                             `("PYTHONPATH" ":" prefix (,pythonpath))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("gegps" "gpscat" "gpsfake" "gpsprof"
                            "ubxtool" "xgps" "xgpsspeed" "zerk")))
              #t)))))
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 72c96655bc..34d6434f60 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -62,16 +62,15 @@
 (define-public graphviz
   (package
     (name "graphviz")
-    (replacement graphviz/fixed)
-    (version "2.42.3")
+    (version "2.47.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://www2.graphviz.org/Packages/stable/portable_source/"
-                    "graphviz-" version ".tar.gz"))
+              (uri (string-append "https://gitlab.com/graphviz/graphviz"
+                                  "/-/package_files/9573974/download"))
+              (file-name (string-append "graphviz-" version ".tar.xz"))
               (sha256
                (base32
-                "1pbswjbx3fjdlsxcm7cmlsl5bvaa3d6gcnr0cr8x3c8pag13zbwg"))))
+                "1hff831p300n989x1gmyzh3ix43xd2mgx01qgrrqill44n7zxfza"))))
     (build-system gnu-build-system)
     (arguments
      ;; FIXME: rtest/rtest.sh is a ksh script (!).  Add ksh as an input.
@@ -127,15 +126,6 @@ software engineering, database and web design, machine learning, and in visual
 interfaces for other technical domains.")
     (license license:epl1.0)))
 
-(define-public graphviz/fixed
-  (hidden-package
-    (package
-      (inherit graphviz)
-      (source (origin
-                (inherit (package-source graphviz))
-                (patches (append (search-patches "graphviz-CVE-2020-18032.patch")
-                                 (origin-patches (package-source graphviz)))))))))
-
 ;; Older Graphviz needed for pygraphviz.  See
 ;; https://github.com/pygraphviz/pygraphviz/issues/175
 (define-public graphviz-2.38
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index d92b9aa3e4..5e9c9feabe 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;;
@@ -45,6 +45,7 @@
 
 (define-module (gnu packages gtk)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -60,6 +61,8 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -74,10 +77,14 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
@@ -89,6 +96,7 @@
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
@@ -99,86 +107,103 @@
 
 (define-public atk
   (package
-   (name "atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1jwp16r6p5z66k4b2v8zlzhyshhwlmyi27ippkrgqr8jsary7w6l"))))
-   (build-system meson-build-system)
-   (propagated-inputs `(("glib" ,glib))) ; required by atk.pc
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME accessibility toolkit")
-   (description
-    "ATK provides the set of accessibility interfaces that are implemented
+    (name "atk")
+    (version "2.36.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1217cmmykjgkkim0zr1lv5j13733m4w5vipmy4ivw0ll6rz28xpv"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t))  ; To wrap binaries and/or compile schemas
+    (propagated-inputs `(("glib" ,glib))) ; required by atk.pc
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("pkg-config" ,pkg-config)))
+    (synopsis "GNOME accessibility toolkit")
+    (description
+     "ATK provides the set of accessibility interfaces that are implemented
 by other toolkits and applications.  Using the ATK interfaces, accessibility
 tools have full access to view and control running applications.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/atk/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility")))
 
 (define-public cairo
   (package
-   (name "cairo")
-   (version "1.16.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "https://cairographics.org/releases/cairo-"
-                                version ".tar.xz"))
-            (patches (search-patches "cairo-CVE-2018-19876.patch"
-                                     "cairo-CVE-2020-35492.patch"))
-            (sha256
-             (base32
-              "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))))
-   (build-system gnu-build-system)
-   (propagated-inputs
-    `(("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("libpng" ,libpng)
-      ("libx11" ,libx11)
-      ("libxext" ,libxext)
-      ("libxrender" ,libxrender)
-      ("pixman" ,pixman)))
-   (inputs
-    `(("ghostscript" ,ghostscript)
-      ("libspectre" ,libspectre)
-      ("poppler" ,poppler)
-      ("xorgproto" ,xorgproto)
-      ("zlib" ,zlib)))
-   (native-inputs
-     `(("pkg-config" ,pkg-config)
-      ("python" ,python-wrapper)))
+    (name "cairo")
+    (version "1.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://cairographics.org/releases/cairo-"
+                       version ".tar.xz"))
+       (sha256
+        (base32 "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"))
+       (patches (search-patches
+		 "cairo-CVE-2018-19876.patch"
+		 "cairo-CVE-2020-35492.patch"))))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
-       #:configure-flags '("--enable-tee"      ;needed for GNU Icecat
-                           "--enable-xml"      ;for cairo-xml support
-                           "--disable-static")))
-   (synopsis "2D graphics library")
-   (description
-    "Cairo is a 2D graphics library with support for multiple output devices.
-Currently supported output targets include the X Window System (via both
-Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
-output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.
-
-Cairo is designed to produce consistent output on all output media while
-taking advantage of display hardware acceleration when available
-eg. through the X Render Extension).
-
-The cairo API provides operations similar to the drawing operators of
-PostScript and PDF.  Operations in cairo including stroking and filling cubic
-Bézier splines, transforming and compositing translucent images, and
-antialiased text rendering.  All drawing operations can be transformed by any
-affine transformation (scale, rotation, shear, etc.).")
-   (license license:lgpl2.1) ; or Mozilla Public License 1.1
-   (home-page "https://cairographics.org/")))
+     `(#:tests? #f ; see http://lists.gnu.org/archive/html/bug-guix/2013-06/msg00085.html
+       #:configure-flags
+       (list
+        "--disable-static"
+        ;; XXX: To be enabled.
+        ;; "--enable-gallium=yes"
+        ;; "--enable-gl=yes"
+        ;; " --enable-glesv2=yes"
+        ;; "--enable-glesv3=yes"
+        ;; "--enable-cogl=yes"
+        ;; "--enable-directfb=yes"
+        ;; "--enable-vg=yes"
+        "--enable-tee=yes"              ;needed for GNU IceCat
+        "--enable-xml=yes"              ;for cairo-xml support
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html"))))
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     `(("drm" ,libdrm)
+       ("ghostscript" ,ghostscript)
+       ("libspectre" ,libspectre)
+       ("poppler" ,poppler)))
+    (propagated-inputs
+     `( ;; ("cogl" ,cogl)
+       ;; ("directfb" ,directfb)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ;; ("gtk+" ,gtk+)
+       ("libpng" ,libpng)
+       ;; ("librsvg" ,librsvg)
+       ;; ("opengl" ,mesa)
+       ("pixman" ,pixman)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xext" ,libxext)
+       ("xrender" ,libxrender)))
+    (synopsis "Multi-platform 2D graphics library")
+    (description "Cairo is a 2D graphics library with support for multiple output
+devices.  Currently supported output targets include the X Window System (via
+both Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file
+output.  Experimental backends include OpenGL, BeOS, OS/2, and DirectFB.")
+    (home-page "https://cairographics.org/")
+    (license
+     ;; This project is dual-licensed.
+     (list
+      license:lgpl2.1+
+      license:mpl1.1))))
 
 (define-public cairo-sans-poppler
   ;; Variant used to break the dependency cycle between Poppler and Cairo.
@@ -201,15 +226,15 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public harfbuzz
   (package
    (name "harfbuzz")
-   (version "2.6.4")
+   (version "2.8.1")
    (source (origin
              (method url-fetch)
-             (uri (string-append "https://www.freedesktop.org/software/"
-                                 "harfbuzz/release/harfbuzz-"
+             (uri (string-append "https://github.com/harfbuzz/harfbuzz"
+                                 "/releases/download/" version "/harfbuzz-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "04iwq13w6zkdhljmsxrzgg4fyh04qnwfn57rgrl9kmijc7cvh4wl"))))
+               "000ki4nwi3vfy3qflkgkiyj4jhhb6xl0c8ygv6af5x2bxiizc921"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "bin")) ; 160K, only hb-view depend on cairo
@@ -253,11 +278,13 @@ affine transformation (scale, rotation, shear, etc.).")
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
-     `(#:configure-flags
-       (list
-        (string-append "--with-html-docdir="
-                       (assoc-ref %outputs "doc")
-                       "/share/doc/datrie/html"))))
+     (list #:configure-flags
+           #~(list (string-append "--with-html-docdir=" #$output:doc
+                                  "/share/doc/datrie/html"))
+
+           ;; Several tests refer to the 'test.tri' file, leading to race
+           ;; conditions when running tests in parallel.
+           #:parallel-tests? #f))
     (native-inputs
      `(("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)))
@@ -301,54 +328,61 @@ applications.")
 
 (define-public pango
   (package
-   (name "pango")
-   (version "1.44.7")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/pango/"
-                                (version-major+minor version) "/"
-                                name "-" version ".tar.xz"))
-            (patches (search-patches "pango-skip-libthai-test.patch"))
-            (sha256
-             (base32
-              "07qvxa2sk90chp1l12han6vxvy098mc37sdqcznyywyv2g6bd9b6"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases (modify-phases %standard-phases
-                 (add-after 'unpack 'disable-cantarell-tests
-                   (lambda _
-                     (substitute* "tests/meson.build"
-                       ;; XXX FIXME: These tests require "font-cantarell", but
-                       ;; adding it here would introduce a circular dependency.
-                       (("\\[ 'test-harfbuzz'.*") "")
-                       (("\\[ 'test-itemize'.*") "")
-                       (("\\[ 'test-layout'.*") ""))
-                     #t)))))
-   (propagated-inputs
-    ;; These are all in Requires or Requires.private of the '.pc' files.
-    `(("cairo" ,cairo)
-      ("fribidi" ,fribidi)
-      ("fontconfig" ,fontconfig)
-      ("freetype" ,freetype)
-      ("glib" ,glib)
-      ("harfbuzz" ,harfbuzz)
-
-      ;; Some packages, such as Openbox, expect Pango to be built with the
-      ;; optional libxft support.
-      ("libxft" ,libxft)))
-   (inputs
-    `(("zlib" ,zlib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-      ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME text and font handling library")
-   (description
-    "Pango is the core text and font handling library used in GNOME
-applications.  It has extensive support for the different writing systems
-used throughout the world.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/pango/")))
+    (name "pango")
+    (version "1.48.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/pango/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (patches (search-patches "pango-skip-libthai-test.patch"))
+              (sha256
+               (base32
+                "0ym3cvajy2asapj8xbhfpy05rak79afrhi32hiss0w900vxi72a1"))))
+    (build-system meson-build-system)
+    (arguments
+     '(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-cantarell-tests
+                    (lambda _
+                      (substitute* "tests/meson.build"
+                        ;; XXX FIXME: These tests require "font-cantarell", but
+                        ;; adding it here would introduce a circular dependency.
+                        (("\\[ 'test-layout'.*") "")
+                        (("\\[ 'test-itemize'.*") "")
+                        (("\\[ 'test-font'.*") "")
+                        (("\\[ 'test-harfbuzz'.*") ""))
+                      #t)))))
+    (propagated-inputs
+     ;; These are all in Requires or Requires.private of the '.pc' files.
+     `(("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("fribidi" ,fribidi)
+       ("glib" ,glib)
+       ("harfbuzz" ,harfbuzz)
+       ("libthai" ,libthai)
+       ;; Some packages, such as Openbox, expect Pango to be built with the
+       ;; optional libxft support.
+       ("libxft" ,libxft)
+       ("libxrender" ,libxrender)))
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("glib" ,glib "bin")             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("help2man" ,help2man)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (synopsis "Text and font handling library")
+    (description "Pango is a library for laying out and rendering of text, with
+an emphasis on internationalization.  Pango can be used anywhere that text
+layout is needed, though most of the work on Pango so far has been done in the
+context of the GTK+ widget toolkit.  Pango forms the core of text and font
+handling for GTK+-2.x.")
+    (home-page "https://pango.gnome.org/")
+    (license license:lgpl2.0+)))
 
 (define-public pango-1.42
   (package
@@ -560,64 +594,74 @@ highlighting and other features typical of a source code editor.")
 
 (define-public gdk-pixbuf
   (package
-   (name "gdk-pixbuf")
-   (version "2.40.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (patches (search-patches "gdk-pixbuf-CVE-2020-29385.patch"))
-            (sha256
-             (base32
-              "1rnlx9yfw970maxi2x6niaxmih5la11q1ilr7gzshz2kk585k0hm"))))
-   (build-system meson-build-system)
-   (arguments
-    `(#:configure-flags '("-Dinstalled_tests=false")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after
-         'unpack 'disable-failing-tests
-         (lambda _
-           (substitute* "tests/meson.build"
-             ;; XXX FIXME: This test fails on armhf machines with:
-             ;; SKIP Not enough memory to load bitmap image
-             ;; ERROR: cve-2015-4491 - too few tests run (expected 4, got 2)
-             ((".*'cve-2015-4491'.*") "")
-             ;; XXX FIXME: This test fails with:
-             ;; ERROR:pixbuf-jpeg.c:74:test_type9_rotation_exif_tag:
-             ;; assertion failed (error == NULL): Data differ
-             ;; (gdk-pixbuf-error-quark, 0)
-             ((".*'pixbuf-jpeg'.*") ""))
-           #t))
-        ;; The slow tests take longer than the specified timeout.
-        ,@(if (any (cute string=? <> (%current-system))
-                   '("armhf-linux" "aarch64-linux"))
-            '((replace 'check
-              (lambda _
-                (invoke "meson" "test" "--timeout-multiplier" "5"))))
-            '()))))
-   (propagated-inputs
-    `(;; Required by gdk-pixbuf-2.0.pc
-      ("glib" ,glib)
-      ("libpng" ,libpng)
-      ;; Used for testing and required at runtime.
-      ("shared-mime-info" ,shared-mime-info)))
-   (inputs
-    `(("libjpeg" ,libjpeg-turbo)
-      ("libtiff" ,libtiff)
-      ("libx11"  ,libx11)))
-   (native-inputs
-     `(("pkg-config" ,pkg-config)
+    (name "gdk-pixbuf")
+    (version "2.42.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0k9f9177qxaryaxprwrhqnv5p2gdq4a8i6y05gm98qa8izc5v77y"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags '("-Dinstalled_tests=false" "-Djasper=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* "meson.build"
+                 (("http://docbook.sourceforge.net/release/xsl/current/")
+                  (string-append (assoc-ref inputs "docbook-xsl")
+                                 "/xml/xsl/docbook-xsl-1.79.2/")))
+               (substitute* (find-files "." "\\.xml$")
+                 (("http://www.oasis-open.org/docbook/xml/4\\.3/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-before 'configure 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/meson.build"
+               (("\\[ 'pixbuf-fail', \\['conform', 'slow'\\], \\],")
+                ""))
+             #t))
+         ;; The slow tests take longer than the specified timeout.
+         ,@(if (any (cute string=? <> (%current-system))
+                    '("armhf-linux" "aarch64-linux"))
+               '((replace 'check
+                   (lambda _
+                     (invoke "meson" "test" "--timeout-multiplier" "5"))))
+               '()))))
+    (propagated-inputs
+     `( ;; Required by gdk-pixbuf-2.0.pc
+       ("glib" ,glib)
+       ;; Required by gdk-pixbuf-xlib-2.0.pc
+       ("libx11" ,libx11)
+       ;; Used for testing and required at runtime.
+       ("shared-mime-info" ,shared-mime-info)))
+    (inputs
+     `(("jasper" ,jasper)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng"  ,libpng)
+       ("libtiff" ,libtiff)))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
        ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")                               ; glib-mkenums, etc.
-       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc.
-   (synopsis "GNOME image loading and manipulation library")
-   (description
-    "GdkPixbuf is a library for image loading and manipulation developed
-in the GNOME project.")
-   (license license:lgpl2.0+)
-   (home-page "https://developer.gnome.org/gdk-pixbuf/")))
+       ("glib" ,glib "bin")             ; glib-mkenums, etc.
+       ("gobject-introspection" ,gobject-introspection) ; g-ir-compiler, etc.
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (synopsis "Image loading library")
+    (description "GdkPixbuf is a library that loads image data in various
+formats and stores it as linear buffers in memory.  The buffers can then be
+scaled, composited, modified, saved, or rendered.")
+    (home-page "https://wiki.gnome.org/Projects/GdkPixbuf")
+    (license license:lgpl2.1+)))
 
 ;; To build gdk-pixbuf with SVG support, we need librsvg, and librsvg depends
 ;; on gdk-pixbuf, so this new varibale.  Also, librsvg adds 90MiB to the
@@ -629,10 +673,9 @@ in the GNOME project.")
      `(("librsvg" ,librsvg)
        ,@(package-inputs gdk-pixbuf)))
     (arguments
-     '(#:configure-flags '("-Dinstalled-tests=false")
-       #:tests? #f ; tested by the gdk-pixbuf package already
-       #:phases
-       (modify-phases %standard-phases
+     (substitute-keyword-arguments (package-arguments gdk-pixbuf)
+        ((#:phases phases)
+          `(modify-phases ,phases
          (add-after 'install 'register-svg-loader
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out     (assoc-ref outputs "out"))
@@ -646,78 +689,89 @@ in the GNOME project.")
                (apply invoke
                       gdk-pixbuf-query-loaders
                       "--update-cache"
-                      loaders)))))))
-    (synopsis
-     "GNOME image loading and manipulation library, with SVG support")))
+                      loaders))))))))
+    (synopsis "Image loading library, with SVG support")))
 
 (define-public at-spi2-core
   (package
-   (name "at-spi2-core")
-   (version "2.34.0")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "1ihixwhh3c16q6253qj9gf69741rb2pi51822a4rylsfcyywsafn"))))
-   (build-system meson-build-system)
-   (outputs '("out" "doc"))
-   (arguments
-    '(#:configure-flags
-      (list "-Ddocs=true")
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'set-documentation-path
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Ensure that the cross-references point to the "doc" output.
-            (substitute* "doc/libatspi/meson.build"
-              (("docpath =.*")
-               (string-append "docpath = '" (assoc-ref outputs "doc") "/share/gtk-doc/html'\n")))
-            #t))
-        (add-before 'install 'prepare-doc-directory
-          (lambda* (#:key outputs #:allow-other-keys)
-            (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))
-            #t))
-        (add-after 'install 'move-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (doc (assoc-ref outputs "doc")))
-              (copy-recursively
-               (string-append out "/share/gtk-doc")
-               (string-append doc "/share/gtk-doc"))
-              (delete-file-recursively
-               (string-append out "/share/gtk-doc")))
-            #t))
-        (add-after 'install 'check
-          (lambda _
-            (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
-            ;; Run test-suite under a dbus session.
-            (setenv "XDG_DATA_DIRS"     ; for finding org.xfce.Xfconf.service
-                    (string-append %output "/share"))
-            ;; Don't fail on missing  '/etc/machine-id'.
-            (setenv "DBUS_FATAL_WARNINGS" "0") ;
-            (invoke "dbus-launch" "ninja" "test")))
+    (name "at-spi2-core")
+    (version "2.40.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0a9l6cfxynjn6jcp29d72i75xbkrzs1l5kmqcwmfal801b9sg5j1"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     '(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list "-Ddocs=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-documentation-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Ensure that the cross-references point to the "doc" output.
+             (substitute* "doc/libatspi/meson.build"
+               (("docpath =.*")
+                (string-append "docpath = '" (assoc-ref outputs "doc") "/share/gtk-doc/html'\n")))
+             #t))
+         (add-before 'install 'prepare-doc-directory
+           (lambda* (#:key outputs #:allow-other-keys)
+             (mkdir-p (string-append (assoc-ref outputs "doc") "/share"))
+             #t))
+         (add-after 'unpack 'patch-docbook-sgml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
+                                           "/xml/dtd/docbook")))
+               (substitute* "doc/libatspi/libatspi-docs.sgml"
+                 (("http://.*/docbookx\\.dtd")
+                  (string-append xmldoc "/docbookx.dtd")))
+               #t)))
+         (add-after 'install 'move-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (doc (assoc-ref outputs "doc")))
+               (copy-recursively
+                (string-append out "/share/gtk-doc")
+                (string-append doc "/share/gtk-doc"))
+               (delete-file-recursively
+                (string-append out "/share/gtk-doc")))
+             #t))
+         (add-after 'install 'check
+           (lambda _
+             (setenv "HOME" (getenv "TMPDIR")) ; xfconfd requires a writable HOME
+             ;; Run test-suite under a dbus session.
+             (setenv "XDG_DATA_DIRS" ; for finding org.xfce.Xfconf.service
+                     (string-append %output "/share"))
+             ;; Don't fail on missing  '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0") ;
+             (invoke "dbus-launch" "ninja" "test")))
          (delete 'check))))
-   (propagated-inputs
-    ;; atspi-2.pc refers to all these.
-    `(("dbus" ,dbus)
-      ("glib" ,glib)
-      ("libxi" ,libxi)
-      ("libxtst" ,libxtst)))
-   (native-inputs
-    `(("gettext" ,gettext-minimal)
-      ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc/stable)
-      ("glib" ,glib "bin")
-      ("pkg-config" ,pkg-config)))
-   (synopsis "Assistive Technology Service Provider Interface, core components")
-   (description
-    "The Assistive Technology Service Provider Interface, core components,
+    (propagated-inputs
+     ;; atspi-2.pc refers to all these.
+     `(("dbus" ,dbus)
+       ("glib" ,glib)
+       ("libx11" ,libx11)
+       ("libxi" ,libxi)
+       ("libxtst" ,libxtst)))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk-doc" ,gtk-doc)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (synopsis "Assistive Technology Service Provider Interface, core components")
+    (description
+     "The Assistive Technology Service Provider Interface, core components,
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility/")))
 
 ;;; A minimal variant used to prevent a cycle with Inkscape.
 (define at-spi2-core-minimal
@@ -739,199 +793,273 @@ is part of the GNOME accessibility project.")
 
 (define-public at-spi2-atk
   (package
-   (name "at-spi2-atk")
-   (version "2.34.1")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "05ncp7s5nddjinffs26mcvpbd63vk1m3cv5y530p3plgfhqgjvbp"))))
-   (build-system meson-build-system)
-   (arguments
-    '(#:phases
-      (modify-phases %standard-phases
-        (replace 'check
-                 ;; Run test-suite under a dbus session.
-                 (lambda _
-                   (setenv "DBUS_FATAL_WARNINGS" "0")
-                   (invoke "dbus-launch" "meson" "test"))))))
-   (propagated-inputs
-    ;; TODO: Replace by at-spi2-core-minimal in the next staging window, or
-    ;; when Inkscape 0.92 is upgraded to 1.0 to avoid a cycle.
-    `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
-   (inputs
-    `(("atk" ,atk)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)
-      ;; For tests.
-      ("dbus" ,dbus)
-      ("libxml2" ,libxml2)))
-   (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
-   (description
-    "The Assistive Technology Service Provider Interface
+    (name "at-spi2-atk")
+    (version "2.38.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0ks6r9sx27l80n3a7yjmkilxv48cqj183wc7cap3caw2myjhi86g"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run test-suite under a dbus session.
+           (lambda _
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             (invoke "dbus-launch" "meson" "test"))))))
+    (propagated-inputs
+     ;; TODO: Replace by at-spi2-core-minimal in the next staging window, or
+     ;; when Inkscape 0.92 is upgraded to 1.0 to avoid a cycle.
+     `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
+    (inputs
+     `(("atk" ,atk)
+       ("glib" ,glib)))
+    (native-inputs
+     `(("dbus" ,dbus)                ; For tests
+       ("gobject-introspection" ,gobject-introspection)
+       ("libxml2" ,libxml2)
+       ("pkg-config" ,pkg-config)))
+    (synopsis "Assistive Technology Service Provider Interface, ATK bindings")
+    (description
+     "The Assistive Technology Service Provider Interface
 is part of the GNOME accessibility project.")
-   (license license:lgpl2.0+)
-   (home-page "https://projects.gnome.org/accessibility/")))
+    (license license:lgpl2.1+)
+    (home-page "https://wiki.gnome.org/Accessibility/")))
 
 (define-public gtk+-2
   (package
-   (name "gtk+")
-   (version "2.24.32")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "0bjq7ja9gwcv6n5q4qkvdjjx40wsdiikksz1zqxvxsm5vlyskj5n"))
-            (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
-                                     "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
-                                     "gtk2-theme-paths.patch"))))
-   (build-system gnu-build-system)
-   (outputs '("out" "bin" "doc"))
-   (propagated-inputs
-    `(("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("pango" ,pango)))
-   (inputs
-    `(("cups" ,cups)
-      ("libxcomposite" ,libxcomposite)
-      ("libxcursor" ,libxcursor)
-      ("libxdamage" ,libxdamage)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxrandr" ,libxrandr)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("gettext" ,gettext-minimal)
-      ("glib" ,glib "bin")
-      ("gobject-introspection" ,gobject-introspection)
-      ("pkg-config" ,pkg-config)
-      ("python-wrapper" ,python-wrapper)))
-   (arguments
-    `(#:configure-flags
-      (list "--with-xinput=yes"
-            (string-append "--with-html-dir="
-                           (assoc-ref %outputs "doc")
-                           "/share/gtk-doc/html"))
-      #:phases
-      (modify-phases %standard-phases
-        (add-before 'configure 'disable-tests
-          (lambda _
-            ;; FIXME: re-enable tests requiring an X server
-            (substitute* "gtk/Makefile.in"
-              (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits ."))
-            #t))
-        (add-after 'install 'remove-cache
-          (lambda* (#:key outputs #:allow-other-keys)
-	    (for-each
+    (name "gtk+")
+    (version "2.24.33")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1nn6kks1zyvb5xikr9y2k7r9bwjy1g4b0m0s66532bclymbwfamc"))
+              (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
+                                       "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
+                                       "gtk2-theme-paths.patch"))))
+    (build-system gnu-build-system)
+    (outputs '("out" "bin" "doc"))
+    (propagated-inputs
+     `(("atk" ,atk)
+       ("cairo" ,cairo)
+       ;; SVG support is optional and requires librsvg, which pulls in rust.
+       ;; Rust is not supported well on every architecture yet.
+       ("gdk-pixbuf" ,(if (string-prefix? "x86_64" (or (%current-target-system)
+                                                       (%current-system)))
+                          gdk-pixbuf+svg
+                          gdk-pixbuf))
+       ("glib" ,glib)
+       ("pango" ,pango)))
+    (inputs
+     `(("cups" ,cups)
+       ("libx11" ,libx11)
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxext" ,libxext)
+       ("libxdamage" ,libxdamage)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("libxshmfence" ,libxshmfence)))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("intltool" ,intltool)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (arguments
+     `(#:parallel-tests? #f
+       #:configure-flags
+       (list "--with-xinput=yes"
+             (string-append "--with-html-dir="
+                            (assoc-ref %outputs "doc")
+                            "/share/gtk-doc/html"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "gtk/Makefile.in"
+               (("aliasfilescheck\\.sh") ""))
+             (substitute* "gtk/tests/recentmanager.c"
+               (("g_test_add_func \\(\"/recent-manager.*;") ""))
+             (substitute* "gtk/tests/defaultvalue.c"
+               (("return g_test_run\\(\\);") ""))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'remove-cache
+           (lambda* (#:key outputs #:allow-other-keys)
+	     (for-each
 	      delete-file
 	      (find-files (assoc-ref outputs "out") "immodules.cache"))
-            #t)))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK2_PATH")
-           (files '("lib/gtk-2.0")))))
-   (synopsis "Cross-platform toolkit for creating graphical user interfaces")
-   (description
-    "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
+             #t)))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK2_PATH")
+            (files '("lib/gtk-2.0")))))
+    (search-paths native-search-paths)
+    (synopsis "Cross-platform toolkit for creating graphical user interfaces")
+    (description
+     "GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating
 graphical user interfaces.  Offering a complete set of widgets, GTK+ is
 suitable for projects ranging from small one-off tools to complete
 application suites.")
-   (license license:lgpl2.0+)
-   (home-page "https://www.gtk.org/")))
+    (license license:lgpl2.0+)
+    (home-page "https://www.gtk.org/")))
 
 (define-public gtk+
-  (package (inherit gtk+-2)
-   (name "gtk+")
-   (version "3.24.24")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnome/sources/" name "/"
-                                (version-major+minor version)  "/"
-                                name "-" version ".tar.xz"))
-            (sha256
-             (base32
-              "12ipk1d376bai9v820qzhxba93kkh5abi6mhyqr4hwjvqmkl77fc"))
-            (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
-                                     "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
-   (propagated-inputs
-    `(("at-spi2-atk" ,at-spi2-atk)
-      ("atk" ,atk)
-      ("gdk-pixbuf" ,gdk-pixbuf+svg)
-      ("libepoxy" ,libepoxy)
-      ("libxcursor" ,libxcursor)
-      ("libxi" ,libxi)
-      ("libxinerama" ,libxinerama)
-      ("libxkbcommon" ,libxkbcommon)
-      ("libxdamage" ,libxdamage)
-      ("libxrandr" ,libxrandr)
-      ("mesa" ,mesa)
-      ("pango" ,pango)
-      ("wayland" ,wayland)
-      ("wayland-protocols" ,wayland-protocols)))
-   (inputs
-    `(("libxml2" ,libxml2)
-      ;; XXX: colord depends on mozjs (through polkit), which fails on
-      ;;      on non-intel systems now.
-      ;;("colord" ,colord)
-      ("cups" ,cups)                            ;for printing support
-      ;; XXX: rest depends on p11-kit, which fails on mips64el now.
-      ;;("rest" ,rest)
-      ("json-glib" ,json-glib)))
-   (native-inputs
-    `(("perl" ,perl)
-      ("glib" ,glib "bin")
-      ("gettext" ,gettext-minimal)
-      ("pkg-config" ,pkg-config)
-      ("gobject-introspection" ,gobject-introspection)
-      ("python-wrapper" ,python-wrapper)
-      ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
-      ;; of updating xorg-server directly on the master branch.
-      ("xorg-server" ,xorg-server-for-tests)))
-   (arguments
-    `(#:disallowed-references (,xorg-server-for-tests)
-      ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
-      ;; to "doc".
-      #:configure-flags (list (string-append "--with-html-dir="
-                                             (assoc-ref %outputs "doc")
-                                             "/share/gtk-doc/html")
-                              ;; The header file <gdk/gdkwayland.h> is required
-                              ;; by gnome-control-center
-                              "--enable-wayland-backend"
-                              ;; This is necessary to build both backends.
-                              "--enable-x11-backend"
-                              ;; This enables the HTML5 websocket backend.
-                              "--enable-broadway-backend")
-      #:phases (modify-phases %standard-phases
-        (add-before 'configure 'pre-configure
-          (lambda _
-            ;; Disable most tests, failing in the chroot with the message:
-            ;; D-Bus library appears to be incorrectly set up; failed to read
-            ;; machine uuid: Failed to open "/etc/machine-id": No such file or
-            ;; directory.
-            ;; See the manual page for dbus-uuidgen to correct this issue.
-            (substitute* "testsuite/Makefile.in"
-              (("SUBDIRS = gdk gtk a11y css reftests")
-               "SUBDIRS = gdk"))
-            #t))
-        (add-after 'install 'move-desktop-files
-          ;; Move desktop files into 'bin' to avoid cycle references.
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (bin (assoc-ref outputs "bin")))
-              (mkdir-p (string-append bin "/share"))
-              (rename-file (string-append out "/share/applications")
-                           (string-append bin "/share/applications"))
-              #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUIX_GTK3_PATH")
-           (files '("lib/gtk-3.0")))))))
+  (package
+    (inherit gtk+-2)
+    (name "gtk+")
+    (version "3.24.27")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version)  "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "09ksflq5j257bf5zn8q2nnf2flicg9qqgfy7za79z7rkf1shc77p"))
+       (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
+                                "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
+    (propagated-inputs
+     `(("atk" ,atk)
+       ("at-spi2-atk" ,at-spi2-atk)
+       ("cairo" ,cairo)
+       ("fribidi" ,fribidi)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ;; SVG support is optional and requires librsvg, which pulls in rust.
+       ;; Rust is not supported well on every architecture yet.
+       ("gdk-pixbuf" ,(if (string-prefix? "x86_64" (or (%current-target-system)
+                                                       (%current-system)))
+                          gdk-pixbuf+svg
+                          gdk-pixbuf))
+       ("glib" ,glib)
+       ("libcloudproviders" ,libcloudproviders)
+       ("libepoxy" ,libepoxy)
+       ("libx11" ,libx11)
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxdamage" ,libxdamage)
+       ("libxext" ,libxext)
+       ("libxfixes" ,libxfixes)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("mesa" ,mesa)
+       ("pango" ,pango)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)))
+    (inputs
+     `(("colord" ,colord)
+       ("cups" ,cups)
+       ("graphene" ,graphene)
+       ("harfbuzz" ,harfbuzz)
+       ("iso-codes" ,iso-codes)
+       ("json-glib" ,json-glib)
+       ("libxml2" ,libxml2)
+       ("rest" ,rest)))
+    (native-inputs
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("gettext" ,gettext-minimal)
+       ("glib" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("hicolor-icon-theme" ,hicolor-icon-theme)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
+       ("sassc" ,sassc)
+       ;; By using a special xorg-server for GTK+'s tests, we reduce the impact
+       ;; of updating xorg-server directly on the master branch.
+       ("xorg-server" ,xorg-server-for-tests)
+       ("xsltproc" ,libxslt)))
+    (arguments
+     `(#:disallowed-references (,xorg-server-for-tests)
+       ;; 47 MiB goes to "out" (24 of which is locale data!), and 26 MiB goes
+       ;; to "doc".
+       #:configure-flags (list (string-append "--with-html-dir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/gtk-doc/html")
+                               "--enable-cloudproviders"
+                               ;; The header file <gdk/gdkwayland.h> is required
+                               ;; by gnome-control-center
+                               "--enable-wayland-backend"
+                               ;; This is necessary to build both backends.
+                               "--enable-x11-backend"
+                               ;; This enables the HTML5 websocket backend.
+                               "--enable-broadway-backend")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "testsuite/gtk/Makefile.in"
+               (("builderparser cellarea check-icon-names check-cursor-names")
+                "builderparser cellarea check-cursor-names")
+               (("notify no-gtk-init object objects-finalize papersize rbtree")
+                "no-gtk-init papersize rbtree")
+               (("stylecontext templates textbuffer textiter treemodel treepath")
+                "stylecontext textbuffer textiter treemodel treepath"))
+             (substitute* "testsuite/a11y/Makefile.in"
+               (("accessibility-dump tree-performance text children derive")
+                "tree-performance text children derive"))
+             (substitute* "testsuite/reftests/Makefile.in"
+               (("TEST_PROGS = gtk-reftest")
+                "TEST_PROGS = "))
+             #t))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'move-desktop-files
+           ;; Move desktop files into 'bin' to avoid cycle references.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (assoc-ref outputs "bin")))
+               (mkdir-p (string-append bin "/share"))
+               (rename-file (string-append out "/share/applications")
+                            (string-append bin "/share/applications"))
+               #t))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_GTK3_PATH")
+            (files '("lib/gtk-3.0")))))))
 
 ;;;
 ;;; Guile bindings.
@@ -1248,23 +1376,45 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 (define-public cairomm
   (package
     (name "cairomm")
-    (version "1.12.2")
+    (version "1.16.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.cairographics.org/releases/"
-                                  name "-" version ".tar.gz"))
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
-                "16fmigxsaz85c3lgcls7biwyz8zy8c8h3jndfm54cxxas3a7zi25"))))
-    (build-system gnu-build-system)
+                "1ya4y7qa000cjawqwswbqv26y5icfkmhs5iiiil4dxgrqn91923y"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     ;; The examples lack -lcairo.
-     '(#:make-flags '("LDFLAGS=-lcairo")))
-    (native-inputs `(("pkg-config" ,pkg-config)))
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true"
+        "-Dboost-shared=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("boost" ,boost)
+       ("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("fontconfig" ,fontconfig)))
     (propagated-inputs
      `(("libsigc++" ,libsigc++)
-       ("freetype" ,freetype)
-       ("fontconfig" ,fontconfig)
        ("cairo" ,cairo)))
     (home-page "https://cairographics.org/")
     (synopsis "C++ bindings to the Cairo 2D graphics library")
@@ -1273,37 +1423,61 @@ guile-gnome-platform (GNOME developer libraries), and guile-gtksourceview.")
 library.")
     (license license:lgpl2.0+)))
 
-(define-public cairomm-1.13
+(define-public cairomm-1.14
   (package
     (inherit cairomm)
     (name "cairomm")
-    (version "1.13.1")
+    (version "1.14.2")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "https://www.cairographics.org/releases/"
-                       name "-" version ".tar.gz"))
+                       name "-" version ".tar.xz"))
        (sha256
-        (base32 "1xlfl0fm5mgv53lr8xjv2kqsk3bz67qkk6qzvbrqmbvbvvbqp9wp"))))
+        (base32 "1qwdj9xw1w651kqwh82nipbryimm1ir5n3c6q34nphsx576bj9h1"))))
     (propagated-inputs
-     `(("cairo" ,cairo)
-       ("sigc++" ,libsigc++)))))
+     `(("libsigc++" ,libsigc++-2)
+       ,@(package-propagated-inputs cairomm)))))
 
 (define-public pangomm
   (package
     (name "pangomm")
-    (version "2.42.0")
+    (version "2.48.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0mmzxp3wniaafkxr30sb22mq9x44xckb5d60h1bl99lkzxks0vfa"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y2vyp6azvhrii6rzs89kr08wg8z1p562awyr812131zqdsd83ly"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
      `(("cairo" ,cairo)
        ("cairomm" ,cairomm)
@@ -1316,11 +1490,11 @@ library.")
 library.")
     (license license:lgpl2.1+)))
 
-(define-public pangomm-2.42
+(define-public pangomm-2.46
   (package
     (inherit pangomm)
     (name "pangomm")
-    (version "2.42.1")
+    (version "2.46.0")
     (source
      (origin
        (method url-fetch)
@@ -1329,102 +1503,186 @@ library.")
                        (version-major+minor version)  "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "03zli5amizhv9bfklwfq7xyf0b5dagchx1lnz9f0v1rhk69h9gql"))))
+        (base32 "06zczkaxf5p5kjgnzrfylzi40w9a8lxpndgs7rpn12qrsq27sy6k"))))
     (propagated-inputs
-     `(("cairomm" ,cairomm-1.13)
+     `(("cairomm" ,cairomm-1.14)
        ("glibmm" ,glibmm-2.64)
        ("pango" ,pango)))))
 
 (define-public atkmm
   (package
     (name "atkmm")
-    (version "2.28.0")
+    (version "2.36.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0fnxrspxkhhbrjphqrpvl3zjm66n50s4cywrrrwkhbflgy8zqk2c"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)))
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version)  "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0wwr0663jrqx2klsasffd9wpk3kqnwisj1y3ahdkjdk5hzrsjgy9"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
+       #:configure-flags
+       (list
+        "-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)))
     (propagated-inputs
      `(("glibmm" ,glibmm) ("atk" ,atk)))
-    (home-page "https://www.gtkmm.org")
-    (synopsis "C++ interface to the ATK accessibility library")
-    (description
-     "ATKmm provides a C++ programming interface to the ATK accessibility
-toolkit.")
-    (license license:lgpl2.1+)))
+    (synopsis "C++ bindings for ATK")
+    (description "ATKmm is the C++ binding for the ATK library.")
+    (home-page "https://wiki.gnome.org/Accessibility")
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
+
+(define-public atkmm-2.28
+  (package
+    (inherit atkmm)
+    (name "atkmm")
+    (version "2.28.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1b8vycqzr3lfvk2l73f4kk74hj48081zbh9r1r2ilr3h8xh7cs0i"))))
+    (propagated-inputs
+     `(("glibmm" ,glibmm-2.64)
+       ,@(package-propagated-inputs atkmm)))))
 
 (define-public gtkmm
   (package
     (name "gtkmm")
-    (version "3.24.2")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1hxdnhavjyvbcpxhd5z17l9fj4182028s66lc0s16qqqrldhjwbd"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("glib" ,glib "bin")        ;for 'glib-compile-resources'
-                     ("xorg-server" ,xorg-server-for-tests)))
+    (version "3.24.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0hv7pviln4cpjvpz7m7ga5krcsbibqzixdcn0dwzpz0cx71p3swv"))))
+    (build-system meson-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:configure-flags '("-Dbuild-documentation=true")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             #t))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/doc")
+                (string-append doc "/share/doc"))
+               #t))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("glib:bin" ,glib "bin")
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)
+       ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
+     `(("atkmm" ,atkmm-2.28)
+       ("cairomm" ,cairomm-1.14)
+       ("glibmm" ,glibmm)
        ("gtk+" ,gtk+)
-       ("glibmm" ,glibmm)))
-    (arguments
-     `(#:disallowed-references (,xorg-server-for-tests)
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'run-xvfb
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((xorg-server (assoc-ref inputs "xorg-server")))
-                        ;; Tests such as 'object_move/test' require a running
-                        ;; X server.
-                        (system (string-append xorg-server "/bin/Xvfb :1 &"))
-                        (setenv "DISPLAY" ":1")
-                        ;; Don't fail because of the missing /etc/machine-id.
-                        (setenv "DBUS_FATAL_WARNINGS" "0")
-                        #t))))))
+       ("pangomm" ,pangomm-2.46)))
+    (synopsis "C++ Interfaces for GTK+ and GNOME")
+    (description "GTKmm is the official C++ interface for the popular GUI
+library GTK+.  Highlights include typesafe callbacks, and a comprehensive set of
+widgets that are easily extensible via inheritance.  You can create user
+interfaces either in code or with the Glade User Interface designer, using
+libglademm.  There's extensive documentation, including API reference and a
+tutorial.")
     (home-page "https://gtkmm.org/")
-    (synopsis
-     "C++ interface to the GTK+ graphical user interface library")
-    (description
-     "gtkmm is the official C++ interface for the popular GUI library GTK+.
-Highlights include typesafe callbacks, and a comprehensive set of widgets that
-are easily extensible via inheritance.  You can create user interfaces either
-in code or with the Glade User Interface designer, using libglademm.  There's
-extensive documentation, including API reference and a tutorial.")
-    (license license:lgpl2.1+)))
-
+    (license
+     (list
+      ;; Library
+      license:lgpl2.1+
+      ;; Tools
+      license:gpl2+))))
 
 (define-public gtkmm-2
-  (package (inherit gtkmm)
+  (package
+    (inherit gtkmm)
     (name "gtkmm")
     (version "2.24.5")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnome/sources/" name "/"
-                                 (version-major+minor version)  "/"
-                                 name "-" version ".tar.xz"))
-             (sha256
-              (base32
-               "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
-    (arguments '())
-    (native-inputs `(("pkg-config" ,pkg-config)))
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://gnome/sources/" name "/"
+                       (version-major+minor version)  "/"
+                       name "-" version ".tar.xz"))
+       (sha256
+        (base32 "0wkbzvsx4kgw16f6xjdc1dz7f77ldngdila4yi5lw2zrgcxsb006"))))
+    (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments gtkmm)
+       ((#:modules modules %gnu-build-system-modules)
+        `((srfi srfi-1)
+          ,@modules))
+       ((#:configure-flags flags)
+        `(fold delete
+               ,flags
+               '("-Dbuild-documentation=true")))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("m4" ,m4)
+       ("mm-common" ,mm-common)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("xsltproc" ,libxslt)
+       ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
-     `(("pangomm" ,pangomm)
-       ("cairomm" ,cairomm)
-       ("atkmm" ,atkmm)
+     `(("atkmm" ,atkmm-2.28)
+       ("cairomm" ,cairomm-1.14)
+       ("glibmm" ,glibmm-2.64)
        ("gtk+" ,gtk+-2)
-       ("glibmm" ,glibmm)))))
+       ("pangomm" ,pangomm-2.46)))))
 
 (define-public gtksourceviewmm
   (package
@@ -1461,7 +1719,7 @@ printing and other features typical of a source code editor.")
 (define-public python-pycairo
   (package
     (name "python-pycairo")
-    (version "1.19.1")
+    (version "1.20.0")
     (source
      (origin
       (method url-fetch)
@@ -1469,7 +1727,7 @@ printing and other features typical of a source code editor.")
                           version "/pycairo-" version ".tar.gz"))
       (sha256
        (base32
-        "111fav9m1iagw3nh2ws2vzkjh34r97yl7rdlpvsngsqg521k251c"))))
+        "1326aa2ybhhhrvz3n4p22z5sic25m016ddb5yq0hvbprnw6a35an"))))
     (build-system python-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1788,7 +2046,7 @@ information.")
 (define-public gtk-doc
   (package
     (name "gtk-doc")
-    (version "1.28")
+    (version "1.32")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1796,8 +2054,9 @@ information.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "05apmwibkmn1icx05l8aw241lhymcx01zvk5i499cb150bijj7li"))))
-    (build-system gnu-build-system)
+                "0z4h1dggpimygdp719l457jvqilps4qcfpk31jmj3jqpzcsg03ny"))))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "help"))
     (arguments
      `(#:parallel-tests? #f
        #:phases
@@ -1805,31 +2064,22 @@ information.")
          (add-after 'unpack 'patch-gtk-doc-scan
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "gtk-doc.xsl"
-              (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/html/chunk.xsl"))
-              (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
-               (string-append (assoc-ref inputs "docbook-xsl")
-                              "/xml/xsl/docbook-xsl-"
-                              ,(package-version docbook-xsl)
-                              "/common/en.xml")))
+               (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/html/chunk.xsl"))
+               (("http://docbook.sourceforge.net/release/xsl/current/common/en.xml")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/common/en.xml")))
              #t))
-         (add-after 'patch-gtk-doc-scan 'patch-test-out
+         (add-after 'unpack 'disable-failing-tests
            (lambda _
-             ;; sanity.sh counts the number of status lines.  Since our
-             ;; texlive regenerates the fonts every time and the font
-             ;; generator metafont outputs a lot of extra lines, this
-             ;; test would always fail.  Disable it for now.
              (substitute* "tests/Makefile.in"
-              (("empty.sh sanity.sh") "empty.sh"))
-             #t))
-         (add-before 'build 'set-HOME
-           (lambda _
-             ;; FIXME: dblatex with texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
+               (("annotations.sh bugs.sh empty.sh fail.sh gobject.sh program.sh")
+                ""))
              #t))
          (add-before 'configure 'fix-docbook
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1851,36 +2101,53 @@ information.")
              (let ((out (assoc-ref outputs "out")))
                (for-each (lambda (prog)
                            (wrap-program prog
-                             `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
                          (find-files (string-append out "/bin")))
                #t))))
        #:configure-flags
        (list (string-append "--with-xml-catalog="
                             (assoc-ref %build-inputs "docbook-xml")
-                            "/xml/dtd/docbook/catalog.xml"))))
+                            "/xml/dtd/docbook/catalog.xml")
+             (string-append "--with-help-dir="
+                            (assoc-ref %outputs "help")
+                            "/share/help"))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
        ("itstool" ,itstool)
-       ("libxml" ,libxml2)
-       ("gettext" ,gettext-minimal)
-       ("bc" ,bc)))
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)))
     (inputs
-     `(("perl" ,perl)
-       ("python" ,python)
-       ("xsltproc" ,libxslt)
+     `(("bc" ,bc)
        ("dblatex" ,dblatex)
        ("docbook-xml" ,docbook-xml-4.3)
        ("docbook-xsl" ,docbook-xsl)
-       ("source-highlight" ,source-highlight)
        ("glib" ,glib)
-       ("python-six" ,python-six)))
-    (home-page "https://www.gtk.org/gtk-doc/")
-    (synopsis "Documentation generator from C source code")
-    (description
-     "GTK-Doc generates API documentation from comments added to C code.  It is
-typically used to document the public API of GTK+ and GNOME libraries, but it
-can also be used to document application code.")
-    (license license:gpl2+)))
+       ("libxml2" ,libxml2)
+       ("libxslt" ,libxslt)
+       ("python" ,python)
+       ("python-anytree" ,python-anytree)
+       ("python-lxml" ,python-lxml)
+       ("python-parameterized" ,python-parameterized)
+       ("python-pygments" ,python-pygments)
+       ("python-unittest2" ,python-unittest2)
+       ("source-highlight" ,source-highlight)
+       ("yelp-tools" ,yelp-tools)))
+    (home-page "https://wiki.gnome.org/DocumentationProject/GtkDoc")
+    (synopsis "GTK+ DocBook Documentation Generator")
+    (description "GtkDoc is a tool used to extract API documentation from C-code
+like Doxygen, but handles documentation of GObject (including signals and
+properties) that makes it very suitable for GTK+ apps and libraries.  It uses
+docbook for intermediate files and can produce html by default and pdf/man-pages
+with some extra work.")
+    (license
+     (list
+      ;; Docs.
+      license:fdl1.1+
+      ;; Others.
+      license:gpl2+))))
 
 ;; This is a variant of the 'gtk-doc' package that is not updated often.  It
 ;; is intended to be used as a native-input at build-time only.  This allows
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 40b08168df..e451f86db0 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -3311,7 +3311,7 @@ API.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-generic-epsf)))))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-generic-epsf)))))
     (inputs
      `(("dbus-glib" ,dbus-glib)
        ("guile" ,guile-3.0)
@@ -3595,7 +3595,7 @@ feature-set, fully programmable in Guile Scheme.")
        ("vigra-c" ,vigra-c)
        ("guile" ,guile-2.2)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-booktabs
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-booktabs
                                         texlive-lm
                                         texlive-siunitx
                                         texlive-standalone
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 5de4f68093..d78c57e88c 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -112,13 +112,11 @@
                       `(("self" ,this-package))
                       '()))
 
-   (inputs `(("gawk" ,gawk)
-             ("readline" ,readline)))
+   (inputs (list gawk readline))
 
    ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
    ;; propagated.
-   (propagated-inputs `(("gmp" ,gmp)
-                        ("libltdl" ,libltdl)))
+   (propagated-inputs (list gmp libltdl))
 
    (native-search-paths
     (list (search-path-specification
@@ -180,6 +178,11 @@ without requiring the source code to be rewritten.")
 
    (arguments
     `(#:configure-flags '("--disable-static") ; saves 3 MiB
+
+      ;; Work around non-reproducible .go files as described in
+      ;; <https://bugs.gnu.org/20272>, which affects 2.0, 2.2, and 3.0 so far.
+      #:parallel-build? #f
+
       #:phases
       (modify-phases %standard-phases
         ,@(if (hurd-system?)
@@ -246,7 +249,8 @@ without requiring the source code to be rewritten.")
                 "013mydzhfswqci6xmyc1ajzd59pfbdak15i0b090nhr9bzm7dxyd"))
               (modules '((guix build utils)))
               (patches (search-patches
-                        "guile-2.2-skip-oom-test.patch"))
+                        "guile-2.2-skip-oom-test.patch"
+                        "guile-2.2-skip-so-test.patch"))
 
               ;; Remove the pre-built object files.  Instead, build everything
               ;; from source, at the expense of significantly longer build
@@ -285,21 +289,64 @@ without requiring the source code to be rewritten.")
   (package
     (inherit guile-2.2)
     (name "guile")
-    (version "3.0.2")
+    (version "3.0.7")
     (source (origin
               (inherit (package-source guile-2.2))
+              (patches '())     ; We no longer need the patches.
               (uri (string-append "mirror://gnu/guile/guile-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "12lziar4j27j9whqp2n18427q45y9ghq7gdd8lqhmj1k0lr7vi2k"))))
+                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))
+              ;; Replace the snippet because the oom-test still
+              ;; fails on some 32-bit architectures.
+              (snippet '(begin
+                          (substitute* "test-suite/standalone/Makefile.in"
+                            (("test-out-of-memory") ""))
+                          (for-each delete-file
+                                    (find-files "prebuilt" "\\.go$"))
+                          #t))))
+
+    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
+    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.
+    (propagated-inputs
+     (srfi-1:fold srfi-1:alist-delete
+                  (package-propagated-inputs guile-2.2)
+                  '("gmp" "libltdl")))
     (arguments
-     ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
-     (if (hurd-target?)
-         (substitute-keyword-arguments (package-arguments guile-2.2)
-           ((#:configure-flags flags ''())
-            `(cons "--disable-jit" ,flags)))
-         (package-arguments guile-2.2)))
+     (substitute-keyword-arguments (package-arguments guile-2.2)
+       ((#:configure-flags flags ''())
+        (let ((flags `(cons "--enable-mini-gmp" ,flags)))
+          ;; XXX: JIT-enabled Guile crashes in obscure ways on GNU/Hurd.
+          (if (hurd-target?)
+              `(cons "--disable-jit" ,flags)
+              flags)))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'check 'disable-stack-overflow-test
+             (lambda _
+               ;; This test can invoke the "OOM killer", especially when
+               ;; running on emulated hardware (QEMU).  Skip it.
+               (substitute* "test-suite/standalone/test-stack-overflow"
+                 (("!#")
+                  "!#\n(exit 77)\n"))))
+
+           ,@(if (string-prefix? "powerpc-" (%current-system))
+                 `((add-after 'unpack 'adjust-bootstrap-flags
+                     (lambda _
+                       ;; Upstream knows about suggested solution.
+                       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45214
+                       (substitute* "bootstrap/Makefile.in"
+                         (("^GUILE_OPTIMIZATIONS.*")
+                          "GUILE_OPTIMIZATIONS = -O1 -Oresolve-primitives -Ocps\n"))))
+                   (add-after 'unpack 'skip-failing-fdes-test
+                     (lambda _
+                       ;; ERROR: ((system-error "seek" "~A" ("Bad file descriptor") (9)))
+                       (substitute* "test-suite/tests/ports.test"
+                         (("fdes not closed\"" all) (string-append all "(exit 77)")))
+                       #t)))
+                 '())))))
+
     (native-search-paths
      (list (search-path-specification
             (variable "GUILE_LOAD_PATH")
@@ -310,31 +357,7 @@ without requiring the source code to be rewritten.")
                      "share/guile/site/3.0")))))))
 
 (define-public guile-3.0-latest
-  ;; TODO: Make this 'guile-3.0' on the next rebuild cycle.
-  (package
-    (inherit guile-3.0)
-    (version "3.0.7")
-    (source (origin
-              (inherit (package-source guile-3.0)) ;preserve snippet
-              (patches '())
-              (uri (string-append "mirror://gnu/guile/guile-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))))
-
-    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
-    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.  Use
-    ;; LIBGC/DISABLE-MUNMAP to work around <https://bugs.gnu.org/40525>.
-    ;; Remove libltdl, which is no longer used.
-    (propagated-inputs
-     `(("bdw-gc" ,libgc/disable-munmap)
-       ,@(srfi-1:fold srfi-1:alist-delete (package-propagated-inputs guile-3.0)
-                      '("gmp" "libltdl" "bdw-gc"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments guile-3.0)
-       ((#:configure-flags flags ''())
-        `(cons "--enable-mini-gmp" ,flags))))))
+  guile-3.0)
 
 (define-public guile-3.0/libgc-7
   ;; Using libgc-7 avoid crashes that can occur, particularly when loading
@@ -386,14 +409,14 @@ without requiring the source code to be rewritten.")
                  (delete-file "test-suite/tests/version.test")
                  #t))))))
       (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("libtool" ,libtool)
-         ("flex" ,flex)
-         ("gettext" ,gnu-gettext)
-         ("texinfo" ,texinfo)
-         ("gperf" ,gperf)
-         ,@(package-native-inputs guile-3.0)))
+       (modify-inputs (package-native-inputs guile-3.0)
+         (prepend autoconf
+                  automake
+                  libtool
+                  flex
+                  gnu-gettext
+                  texinfo
+                  gperf)))
       (synopsis "Development version of GNU Guile"))))
 
 (define* (make-guile-readline guile #:optional (name "guile-readline"))
@@ -403,7 +426,8 @@ without requiring the source code to be rewritten.")
     (source (package-source guile))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-silent-rules")
+     '(#:configure-flags '("--disable-silent-rules"
+                           "--enable-mini-gmp")   ;for Guile >= 3.0.6
        #:phases (modify-phases %standard-phases
                   (add-before 'build 'chdir
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -578,9 +602,8 @@ GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))   ;to prevent guild warnings
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-2.2)))
-    (inputs `(("guile" ,guile-2.2)))
+    (native-inputs (list pkg-config guile-2.2))
+    (inputs (list guile-2.2))
     (synopsis "JSON module for Guile")
     (description
      "Guile-JSON supports parsing and building JSON documents according to the
@@ -618,9 +641,8 @@ specification.  These are the main features:
               (sha256
                (base32
                 "0nj0684qgh6ppkbdyxqfyjwsv2qbyairxpi8fzrhsi3xnc7jn4im"))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("guile" ,guile-3.0)))
-    (inputs `(("guile" ,guile-3.0)))))
+    (native-inputs (list pkg-config guile-3.0))
+    (inputs (list guile-3.0))))
 
 (define-public guile3.0-json
   (deprecated-package "guile3.0-json" guile-json-3))
@@ -679,10 +701,8 @@ specification.  These are the main features:
                          (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
                                  (assoc-ref inputs "gdbm"))))
                       #t)))))
-    (native-inputs
-     `(("guile" ,guile-3.0)))
-    (inputs
-     `(("gdbm" ,gdbm)))
+    (native-inputs (list guile-3.0))
+    (inputs (list gdbm))
     (home-page "https://github.com/ijp/guile-gdbm")
     (synopsis "Guile bindings to the GDBM library via Guile's FFI")
     (description
@@ -713,14 +733,8 @@ Guile's foreign function interface.")
                 "1nryy9j3bk34i0alkmc9bmqsm0ayz92k1cdf752mvhyjjn8nr928"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("sqlite" ,sqlite)))
+    (native-inputs (list autoconf automake guile-3.0 pkg-config))
+    (inputs (list guile-3.0 sqlite))
     (synopsis "Access SQLite databases from Guile")
     (description
      "This package provides Guile bindings to the SQLite database system.")
@@ -760,13 +774,8 @@ Guile's foreign function interface.")
                              (doc (string-append out "/share/doc/" package)))
                         (install-file "README.md" doc)
                         #t))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0))
     (synopsis "Structured access to bytevector contents for Guile")
     (description
      "Guile bytestructures offers a system imitating the type system
@@ -803,17 +812,11 @@ type system, elevating types to first-class status.")
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ; to prevent guild warnings
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)
-       ("guile-bytestructures" ,guile-bytestructures)))
+     (list pkg-config autoconf automake texinfo guile-3.0 guile-bytestructures))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgit2" ,libgit2)))
+     (list guile-3.0 libgit2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "Guile bindings for libgit2")
     (description
      "This package provides Guile bindings to libgit2, a library to
@@ -850,16 +853,8 @@ manipulate repositories of the Git version control system.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("zlib" ,zlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 zlib))
     (synopsis "Guile bindings to zlib")
     (description
      "This package provides Guile bindings for zlib, a lossless
@@ -889,16 +884,8 @@ Guile's foreign function interface.")
     (arguments
      '(#:make-flags
        '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ,@(if (%current-target-system)
-             `(("guile" ,guile-3.0))   ;for 'guild compile' and 'guile-3.0.pc'
-             '())))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("lzlib" ,lzlib)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list guile-3.0 lzlib))
     (synopsis "Guile bindings to lzlib")
     (description
      "This package provides Guile bindings for lzlib, a C library for
@@ -924,14 +911,8 @@ pure Scheme by using Guile's foreign function interface.")
                (base32
                 "1c8l7829b5yx8wdc0mrhzjfwb6h9hb7cd8dfxcr71a7vlsi86310"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("guile" ,guile-3.0)))
-    (inputs
-     `(("zstd" ,zstd "lib")
-       ("guile" ,guile-3.0)))
+    (native-inputs (list autoconf automake pkg-config guile-3.0))
+    (inputs (list `(,zstd "lib") guile-3.0))
     (synopsis "GNU Guile bindings to the zstd compression library")
     (description
      "This package provides a GNU Guile interface to the zstd (``zstandard'')
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 59a7b55943..222ddbce65 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -51,20 +51,16 @@
             hurd-target?
             hurd-triplet?))
 
-(define (hurd-triplet? triplet)
-  (and (string-suffix? "-gnu" triplet)
-       (not (string-contains triplet "linux"))))
-
 (define (hurd-target?)
   "Return true if the cross-compilation target or the current system is
 GNU/Hurd."
-  (or (and=> (%current-target-system) hurd-triplet?)
+  (or (and=> (%current-target-system) target-hurd?)
       (and (not (%current-target-system))
-           (and=> (%current-system) hurd-triplet?))))
+           (and=> (%current-system) target-hurd?))))
 
 (define (hurd-system?)
   "Return true if the current system is the Hurd."
-  (and=> (%current-system) hurd-triplet?))
+  (and=> (%current-system) target-hurd?))
 
 (define (hurd-source-url version)
   (string-append "mirror://gnu/hurd/hurd-"
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index e6001efa7f..cdd4708d22 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -42,6 +42,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -49,18 +50,21 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages iso-codes)
   #:use-module (gnu packages logging)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages unicode)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xdisorg))
 
 (define-public ibus
   (package
     (name "ibus")
-    (version "1.5.22")
+    (version "1.5.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ibus/ibus/"
@@ -68,12 +72,14 @@
                                   version "/ibus-" version ".tar.gz"))
               (sha256
                (base32
-                "0jmy2w01phpmqnjnfnak7nvfna57mpgfnl87jwc4iai8ijjynw41"))))
+                "07s2ly75xv50bqg37mn37i9akqvcfd45k2mbplxrsqk3a2b3mwxb"))))
     (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f  ; tests fail because there's no connection to dbus
-       #:parallel-build? #f ; race condition discovered with emoji support
+     `(#:parallel-build? #f ; race condition discovered with emoji support
        #:configure-flags (list "--enable-python-library"
+                               "--enable-gtk-doc"
+                               "--enable-memconf"
                                (string-append
                                 "--with-unicode-emoji-dir="
                                 (assoc-ref %build-inputs "unicode-emoji")
@@ -88,6 +94,20 @@
                                "--enable-wayland")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; These tests require /etc/machine-id.
+             (with-directory-excursion "src/tests"
+               (substitute* '("ibus-share.c" "ibus-compose.c"
+                              "ibus-keypress.c")
+                 (("[ \t]*return g_test_run \\(\\);") "")))))
+         (add-after 'unpack 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs/reference/ibus"
+               (substitute* "ibus-docs.sgml.in"
+                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
+                  (string-append (assoc-ref inputs "docbook-xml")
+                                 "/xml/dtd/docbook/"))))))
          (add-after 'unpack 'patch-python-target-directories
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((root (string-append (assoc-ref outputs "out")
@@ -98,13 +118,11 @@
                  (("(py2?overridesdir)=.*" _ var)
                   (string-append var "=" root "/gi/overrides/"))
                  (("(pkgpython2dir=).*" _ var)
-                  (string-append var root "/ibus"))))
-             #t))
+                  (string-append var root "/ibus"))))))
          (add-before 'configure 'disable-dconf-update
            (lambda _
              (substitute* "data/dconf/Makefile.in"
-               (("dconf update") "echo dconf update"))
-             #t))
+               (("dconf update") "echo dconf update"))))
          (add-after 'unpack 'delete-generated-files
            (lambda _
              (for-each (lambda (file)
@@ -112,8 +130,7 @@
                            (when (file-exists? c)
                              (format #t "deleting ~a\n" c)
                              (delete-file c))))
-                       (find-files "." "\\.vala"))
-             #t))
+                       (find-files "." "\\.vala"))))
          (add-after 'unpack 'fix-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/ibusenginesimple.c"
@@ -122,43 +139,73 @@
                                "/share/X11/locale")))
              (substitute* "ui/gtk3/xkblayout.vala"
                (("\"(setxkbmap|xmodmap)\"" _ prog)
-                (string-append "\"" (assoc-ref inputs prog) "/bin/" prog "\"")))
-             #t))
+                (string-append "\"" (assoc-ref inputs prog) "/bin/" prog "\"")))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getcwd))
+             ;; Tests look for $XDG_RUNTIME_DIR.
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             ;; For missing '/etc/machine-id'.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests require running iBus daemon.
+             (system "./bus/ibus-daemon --daemonize")))
+         (add-after 'install 'move-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc "/share"))
+               (rename-file
+                (string-append out "/share/gtk-doc")
+                (string-append doc "/share/gtk-doc")))))
          (add-after 'wrap-program 'wrap-with-additional-paths
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure 'ibus-setup' runs with the correct PYTHONPATH and
              ;; GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/ibus-setup")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" ":" prefix
                    (,(getenv "GI_TYPELIB_PATH")
-                    ,(string-append out "/lib/girepository-1.0")))))
-             #t)))))
+                    ,(string-append out "/lib/girepository-1.0"))))))))))
     (inputs
      `(("dbus" ,dbus)
        ("dconf" ,dconf)
-       ("gconf" ,gconf)
+       ("glib" ,glib)
        ("gtk2" ,gtk+-2)
        ("gtk+" ,gtk+)
+       ("iso-codes" ,iso-codes)
        ("json-glib" ,json-glib)
        ("libnotify" ,libnotify)
        ("libx11" ,libx11)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxtst" ,libxtst)
+       ("pygobject" ,python-pygobject)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
        ("setxkbmap" ,setxkbmap)
+       ("ucd" ,ucd)
+       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("unicode-emoji" ,unicode-emoji)
        ("wayland" ,wayland)
-       ("xmodmap" ,xmodmap)
-       ("iso-codes" ,iso-codes)
-       ("pygobject2" ,python-pygobject)
-       ("python" ,python)))
+       ("xmodmap" ,xmodmap)))
     (native-inputs
-     `(("glib" ,glib "bin") ; for glib-genmarshal
+     `(("docbook-xml" ,docbook-xml-4.1.2)
+       ("glib" ,glib "bin")             ; for glib-genmarshal
        ("gettext" ,gettext-minimal)
+       ("gnome-common" ,gnome-common)
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-compiler
-       ("ucd" ,ucd)
-       ("unicode-emoji" ,unicode-emoji)
-       ("unicode-cldr-common" ,unicode-cldr-common)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("gtk-doc" ,gtk-doc)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
        ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
+       ("which" ,which)
+       ("xorg-server" ,xorg-server-for-tests)))
     (native-search-paths
      (list (search-path-specification
             (variable "IBUS_COMPONENT_PATH")
@@ -195,8 +242,8 @@ may also simplify input method development.")
              ;; PYTHONPATH and GI_TYPELIB_PATH.
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/libexec/ibus-setup-libpinyin")
-                 `("PYTHONPATH" ":" =
-                   (,(getenv "PYTHONPATH")
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(getenv "GUIX_PYTHONPATH")
                     ,(string-append (assoc-ref inputs "ibus")
                                     "/lib/girepository-1.0")
                     ,(string-append (assoc-ref outputs "out")
@@ -277,8 +324,8 @@ Chinese pinyin input methods.")
                (for-each
                 (lambda (prog)
                   (wrap-program (string-append out "/libexec/" prog)
-                    `("PYTHONPATH" ":" prefix
-                      (,(getenv "PYTHONPATH")))
+                    `("GUIX_PYTHONPATH" ":" prefix
+                      (,(getenv "GUIX_PYTHONPATH")))
                     `("GI_TYPELIB_PATH" ":" prefix
                       (,(getenv "GI_TYPELIB_PATH")
                        ,(string-append out "/lib/girepository-1.0")))))
@@ -740,7 +787,7 @@ hanja dictionary and small hangul character classification.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/libexec/ibus-setup-hangul")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                `("LD_LIBRARY_PATH" ":" prefix
                  (,(string-append (assoc-ref inputs "libhangul") "/lib")))
                `("GI_TYPELIB_PATH" ":" prefix
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 12f8393900..7397f7cab8 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
@@ -39,7 +39,7 @@
 (define-public icu4c
   (package
    (name "icu4c")
-   (version "66.1")
+   (version "69.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -48,10 +48,8 @@
                   "/icu4c-"
                   (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                   "-src.tgz"))
-            (patch-flags '("-p2"))
-            (patches (search-patches "icu4c-CVE-2020-10531.patch"))
             (sha256
-             (base32 "0bharwzc9nzkbrcf405z2nb3h7q0711z450arz0mjmdrk8hg58sj"))))
+             (base32 "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))
    (build-system gnu-build-system)
    ;; When cross-compiling, this package needs a source directory of a
    ;; native-build of itself.
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 225a5c2d10..d0fb191b7f 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Amirouche Boubekki <amirouche@hypermove.net>
 ;;; Copyright © 2014, 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016, 2017, 2018, 2020 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -26,6 +26,7 @@
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
@@ -111,8 +112,8 @@
      (origin
        (method url-fetch)
        (uri
-        (string-append "https://sourceforge.net/projects/iqa/files/"
-                       "1.1.2%20Release/iqa_1.1.2_src.tar.gz/download"))
+        (string-append "mirror://sourceforge/iqa/"
+                       version " Release" "/iqa_" version "_src.tar.gz"))
        (sha256
         (base32 "00mgwy031ammab6bwmd1whhvqv3fxy1cs1igabq0n3ag12zhjs77"))))
     (build-system gnu-build-system)
@@ -581,7 +582,7 @@ extracting icontainer icon files.")
 (define-public libtiff
   (package
    (name "libtiff")
-   (version "4.1.0")
+   (version "4.2.0")
    (source
      (origin
        (method url-fetch)
@@ -589,11 +590,10 @@ extracting icontainer icon files.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0d46bdvxdiv59lxnb0xz9ywm8arsr6xsapi5s6y6vnys2wjz6aax"))))
-   (replacement libtiff/fixed)
+         "1jrkjv0xya9radddn8idxvs2gqzp3l2b1s8knlizmn7ad3jq817b"))))
    (build-system gnu-build-system)
    (outputs '("out"
-              "doc"))                           ;1.3 MiB of HTML documentation
+              "doc"))                           ;1.8 MiB of HTML documentation
    (arguments
     ;; Instead of using --docdir, this package has its own --with-docdir.
     `(#:configure-flags
@@ -614,20 +614,6 @@ collection of tools for doing simple manipulations of TIFF images.")
                                   "See COPYRIGHT in the distribution."))
    (home-page "http://www.simplesystems.org/libtiff/")))
 
-(define-public libtiff/fixed
-  (package
-    (inherit libtiff)
-    (name "libtiff")
-    (version "4.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://download.osgeo.org/libtiff/tiff-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1jrkjv0xya9radddn8idxvs2gqzp3l2b1s8knlizmn7ad3jq817b"))))))
-
 (define-public leptonica
   (package
     (name "leptonica")
@@ -690,15 +676,15 @@ arithmetic ops.")
 (define-public jbig2dec
   (package
     (name "jbig2dec")
-    (version "0.18")
+    (version "0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ArtifexSoftware"
                                   "/ghostpdl-downloads/releases/download"
-                                  "/gs951/" name "-" version ".tar.gz"))
+                                  "/gs9533/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0pigfw2v0ppvr0lbysm69gx0zsa5q2q92yrb8af2j3im6x97f6cy"))))
+                "0dwa24kjqyg9hmm40fh048sdxfpnasz43l2rm8wlkw1qbdlpd517"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-static")
                  #:phases (modify-phases %standard-phases
@@ -716,7 +702,7 @@ arithmetic ops.")
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("python" ,python-wrapper)))     ;for tests
+       ("python" ,python-minimal-wrapper)))     ;for tests
     (synopsis "Decoder of the JBIG2 image compression format")
     (description
       "JBIG2 is designed for lossy or lossless encoding of @code{bilevel} (1-bit
@@ -809,17 +795,17 @@ images of initially unknown height.")
 (define-public openjpeg-data
   (package
     (name "openjpeg-data")
-    (version "2020.05.19")
+    (version "2020.11.30")
     (source
      (origin
        (method git-fetch)
        (uri
         (git-reference
          (url "https://github.com/uclouvain/openjpeg-data")
-         (commit "c5c4a8c")))
+         (commit "cd724fb1f93e6af41ebc68c4904f4bf2a4cd1e60")))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1jp84gbhw8q5b8mhc322ql9410hjf32w9hg10x4isfa9j59mnncb"))))
+        (base32 "1q2swh4g9r9haqs075fyk42aclqcs9q51lqqzfb57lisszminpwm"))))
     (build-system copy-build-system)
     (synopsis "Test files for OpenJPEG")
     (description "OpenJPEG-Data contains all files required to run the openjpeg
@@ -831,23 +817,47 @@ test suite, including conformance tests (following Rec. ITU-T T.803 | ISO/IEC
 (define-public openjpeg
   (package
     (name "openjpeg")
-    (version "2.3.1")
+    (version "2.4.0")
     (source
      (origin
        (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/uclouvain/openjpeg")
-         (commit
-          (string-append "v" version))))
-       (file-name
-        (git-file-name "openjpeg" version))
+       (uri (git-reference
+             (url "https://github.com/uclouvain/openjpeg")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1dn98d2dfa1lqyxxmab6rrcv52dyhjr4g7i4xf2w54fqsx14ynrb"))))
+        (base32 "143dvy5g6v6129lzvl0r8mrgva2fppkn0zl099qmi9yi9l9h7yyf"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f           ;TODO: requires a 1.1 GiB data repository
-       #:configure-flags '("-DBUILD_STATIC_LIBS=OFF")))
+     `(#:configure-flags
+       (list
+        "-DBUILD_STATIC_LIBS=OFF"
+        "-DBUILD_UNIT_TESTS=ON"
+        "-DBUILD_TESTING=ON"
+        (string-append "-DOPJ_DATA_ROOT="
+                       (assoc-ref %build-inputs "openjpeg-data")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; To be re-enabled after upstream fixes the bug,
+             ;; https://github.com/uclouvain/openjpeg/issues/1264
+             (substitute* "tests/CMakeLists.txt"
+               (("add_subdirectory\\(nonregression\\)")
+                ""))
+             ;; These tests fail on all architectures except x86_64
+             (substitute* "tests/conformance/CMakeLists.txt"
+               ;; 4, 5, 6 fail
+               (("numFileC1P0 RANGE 1 16") "numFileC1P0 RANGE 7 16")
+               ;; 2, 3, 4, 5 fail
+               (("numFileC1P1 RANGE 1 7") "numFileC1P1 1 6 7")
+               ;; 2, 3 fail
+               (("numFileJP2 RANGE 1 9") "numFileJP2 RANGE 4 9")
+               ;; All fail
+               (("subsampling.*") "")
+               (("zoo.*") "")))))))
+    (native-inputs
+     `(("openjpeg-data" ,openjpeg-data))) ; Files for test-suite
     (inputs
      `(("lcms" ,lcms)
        ("libpng" ,libpng)
@@ -1275,7 +1285,7 @@ language bindings to VIGRA.")
 (define-public libwebp
   (package
     (name "libwebp")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        ;; No tarballs are provided for >0.6.1.
@@ -1286,7 +1296,7 @@ language bindings to VIGRA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0r2yy9if0ndvpzadk39bigvsygyqnlv0xjb9w2aj6rs534mncazz"))))
+         "1rgblphsd56033w7lpkrzl7m5w0fi7wavxri1ayzlg8fhpmmqp4k"))))
     (build-system gnu-build-system)
     (inputs
      `(("freeglut" ,freeglut)
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index 46c8c4cc34..1e19ea592e 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -79,7 +79,7 @@
        ("freetype" ,freetype)
        ("popt" ,popt)
        ("potrace" ,potrace)
-       ("python" ,python-2)
+       ("python" ,python-wrapper)
        ("lcms" ,lcms)
        ("boost" ,boost)))
     (native-inputs
@@ -259,7 +259,7 @@ endif()~%~%"
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/inkscape")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
              #t)))))
     (inputs
      `(("aspell" ,aspell)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 64df5a2e24..f7840f6ca4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -42,6 +42,7 @@
   #:use-module (guix svn-download)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system maven)
@@ -1754,7 +1755,7 @@ IcedTea build harness.")
           (guix build syscalls)
           ,@%gnu-build-system-modules)
 
-         #:disallowed-references ((,icedtea-7 "jdk"))
+         #:disallowed-references ,(list (gexp-input icedtea-7 "jdk"))
 
          ,@(substitute-keyword-arguments (package-arguments icedtea-7)
              ((#:modules modules)
@@ -1910,7 +1911,8 @@ new Date();"))
        ((guix build syscalls)
         ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,icedtea-8 (,icedtea-8 "jdk"))
+       #:disallowed-references ,(list (gexp-input icedtea-8)
+                                      (gexp-input icedtea-8 "jdk"))
 
        #:phases
        (modify-phases %standard-phases
@@ -2109,7 +2111,8 @@ new Date();"))
                        (string-append "--prefix=" (assoc-ref outputs "out")))
                #t))))
        ((#:disallowed-references _ '())
-        `(,openjdk9 (,openjdk9 "jdk")))))
+        `(,(gexp-input openjdk9)
+          ,(gexp-input openjdk9 "jdk")))))
     (native-inputs
      `(("openjdk9" ,openjdk9)
        ("openjdk9:jdk" ,openjdk9 "jdk")
@@ -2140,7 +2143,8 @@ new Date();"))
      `(#:imported-modules ((guix build syscalls)
                            ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,openjdk10 (,openjdk10 "jdk"))
+       #:disallowed-references ,(list (gexp-input openjdk10)
+                                      (gexp-input openjdk10 "jdk"))
 
        #:tests? #f; requires jtreg
        ;; TODO package jtreg
diff --git a/gnu/packages/jemalloc.scm b/gnu/packages/jemalloc.scm
index c4b87b540d..96713dbe52 100644
--- a/gnu/packages/jemalloc.scm
+++ b/gnu/packages/jemalloc.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -21,6 +21,7 @@
 (define-module (gnu packages jemalloc)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
   #:use-module ((guix licenses) #:select (bsd-2))
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -52,12 +53,14 @@
              (substitute* "Makefile.in"
                (("\\$\\(srcroot\\)test/unit/pages.c \\\\") "\\"))
              #t)))
-       ,@(if (any (cute string-prefix? <> (or (%current-target-system)
-                                              (%current-system)))
-                 '("x64_64" "i686"))
-           ;; Transparent huge pages are only enabled by default on Intel processors
-           '()
-           '(#:configure-flags (list "--disable-thp")))))
+       #:configure-flags
+       '(,@(match (%current-system)
+             ((or "i686-linux" "x86_64-linux")
+              '())
+             ("powerpc-linux"
+              (list "--disable-thp" "CPPFLAGS=-maltivec"))
+             (_
+              (list "--disable-thp"))))))
     (inputs `(("perl" ,perl)))
     ;; Install the scripts to a separate output to avoid referencing Perl and
     ;; Bash in the default output, saving ~75 MiB on the closure.
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 20ed94b33b..5065f3be17 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,6 +42,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module ((guix licenses) #:prefix license:)
@@ -52,7 +54,7 @@
 (define-public mit-krb5
   (package
     (name "mit-krb5")
-    (version "1.18")
+    (version "1.19.1")
     (source (origin
               (method url-fetch)
               (uri (list
@@ -62,15 +64,17 @@
                     (string-append "https://kerberos.org/dist/krb5/"
                                    (version-major+minor version)
                                    "/krb5-" version ".tar.gz")))
-              (patches (search-patches "mit-krb5-qualify-short-hostnames.patch"
-                                       "mit-krb5-hurd.patch"))
+              (patches (search-patches "mit-krb5-hurd.patch"))
               (sha256
                (base32
-                "121c5xsy3x0i4wdkrpw62yhvji6virbh6n30ypazkp0isws3k4bk"))))
+                "02xjpsfy84l6v7vjlxzhrl6mx2zrmxz0v01w2j33bv73nxzgh5ps"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
-       ("perl" ,perl)))
+       ("perl" ,perl)
+       ("tcl" ,tcl)))                   ;required for some tests
+    (inputs
+     `(("openssl" ,openssl)))
     (arguments
      `(;; XXX: On 32-bit systems, 'kdb5_util' hangs on an fcntl/F_SETLKW call
        ;; while running the tests in 'src/tests'. Also disable tests when
@@ -94,20 +98,14 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source-directory
            (lambda _
-             (chdir "src")
-             #t))
+             (chdir "src")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
              (let ((perl (assoc-ref (or native-inputs inputs) "perl")))
                (substitute* "plugins/kdb/db2/libdb2/test/run.test"
                  (("/bin/cat") (string-append perl "/bin/perl"))
                  (("D/bin/sh") (string-append "D" (which "sh")))
-                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin"))))
-
-             ;; avoid service names since /etc/services is unavailable
-             (substitute* "tests/resolve/Makefile"
-               (("-p telnet") "-p 23"))
-             #t)))))
+                 (("bindir=/bin/.") (string-append "bindir=" perl "/bin")))))))))
     (synopsis "MIT Kerberos 5")
     (description
      "Massachusetts Institute of Technology implementation of Kerberos.
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index 2b68b87fb9..0d53e746af 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -11,11 +11,12 @@
 # <https://lists.gnu.org/archive/html/guile-devel/2016-03/msg00000.html>.
 
 unset GUILE_LOAD_COMPILED_PATH
+unset GUILE_SYSTEM_COMPILED_PATH
 main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
 exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
 !#
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 0e683570d3..0fa2b5b146 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -41,7 +41,7 @@
 (define-public libevent
   (package
     (name "libevent")
-    (version "2.1.11")
+    (version "2.1.12")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -49,12 +49,13 @@
                     version "-stable/libevent-" version "-stable.tar.gz"))
               (sha256
                (base32
-                "0g988zqm45sj1hlhhz4il5z4dpi5dl74hzjwzl4md37a09iaqnx6"))))
+                "1fq30imk8zd26x8066di3kpc5zyfc5z6frr3zll685zcx4dxxrlj"))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
      ;; This skips some of the tests which fail on armhf and aarch64.
-     '(#:configure-flags '("--disable-libevent-regress")))
+     '(#:configure-flags '("--disable-libevent-regress"
+                           "--disable-openssl")))
     (inputs
      `(("python" ,python-wrapper)))     ;for 'event_rpcgen.py'
     (native-inputs
@@ -76,7 +77,7 @@ loop.")
 (define-public libev
   (package
     (name "libev")
-    (version "4.31")
+    (version "4.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dist.schmorp.de/libev/Attic/libev-"
@@ -84,7 +85,7 @@ loop.")
                                   ".tar.gz"))
               (sha256
                (base32
-                "0nkfqv69wfyy2bpga4d53iqydycpik8jp8x6q70353hia8mmv1gd"))))
+                "1sjs4324is7fp21an4aas2z4dwsvs6z4xwrmp72vwpq1s6wbfzjh"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -102,21 +103,20 @@ limited support for fork events.")
 (define-public libuv
   (package
     (name "libuv")
-    (version "1.35.0")
+    (version "1.41.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dist.libuv.org/dist/v" version
                                   "/libuv-v" version ".tar.gz"))
               (sha256
                (base32
-                "0126mfmaw3s92dsga60sydgwjmzwg9cd36n127pydmisah17v50f"))))
+                "0vpbssrbkxzz0gizxxvz5262h9gyn2msac6d1nfavpg10wwm710i"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")
        ;; XXX: Some tests want /dev/tty, attempt to make connections, etc.
        #:tests? #f))
-    ;; TODO replace with autoconf on core-updates
-    (native-inputs `(("autoconf" ,autoconf-wrapper)
+    (native-inputs `(("autoconf" ,autoconf)
                      ("automake" ,automake)
                      ("libtool" ,libtool)
 
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index d62a1588c1..b0a66c11c5 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -2,11 +2,11 @@
 ;;; Copyright © 2012, 2013, 2014, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
-;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 John Doe <dftxbs3e@free.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -51,45 +51,15 @@
                               name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))))
+                "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj"))
+              (patches (search-patches "libffi-3.3-powerpc-fixes.patch"
+                                       "libffi-float128-powerpc64le.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Prevent the build system from passing -march and -mtune to the
        ;; compiler.  See "ax_cc_maxopt.m4" and "ax_gcc_archflag.m4".
-       #:configure-flags '("--enable-portable-binary" "--without-gcc-arch")
-
-       ;; TODO: Inline patches on next rebuild cycle.
-       ,@(if (string-prefix? "powerpc-" (or (%current-target-system)
-                                            (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())
-       ,@(if (string-prefix? "powerpc64le-" (or (%current-target-system)
-                                                (%current-system)))
-             '(#:phases (modify-phases %standard-phases
-                          (add-after 'unpack 'apply-patch2
-                            (lambda* (#:key inputs #:allow-other-keys)
-                              (let ((patch (assoc-ref inputs
-                                                      "powerpc64le-patch")))
-                                (invoke "patch" "--force" "-p1"
-                                        "-i" patch))))))
-             '())))
-    (inputs
-     (cond
-      ((string-prefix? "powerpc-" (or (%current-target-system)
-                                        (%current-system)))
-       `(("powerpc-patch" ,@(search-patches
-                             "libffi-3.3-powerpc-fixes.patch"))))
-      ((string-prefix? "powerpc64le-" (or (%current-target-system)
-                                          (%current-system)))
-       `(("powerpc64le-patch" ,@(search-patches
-                                 "libffi-float128-powerpc64le.patch"))))
-      (else '())))
+       #:configure-flags '("--enable-portable-binary"
+                           "--without-gcc-arch")))
     (outputs '("out" "debug"))
     (synopsis "Foreign function call interface library")
     (description
@@ -128,20 +98,10 @@ conversions for values passed between the two languages.")
      `(("pkg-config" ,pkg-config)
        ("python-pytest" ,python-pytest)))
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
              ;; XXX The "normal" approach of setting CC and friends does
              ;; not work here.  Is this the correct way of doing things?
              (substitute* "testing/embedding/test_basic.py"
@@ -152,8 +112,7 @@ conversions for values passed between the two languages.")
                                "linker_so='gcc -shared')")))
              (substitute* "testing/cffi0/test_ownlib.py"
                (("\"cc testownlib") "\"gcc testownlib"))
-             (invoke "py.test" "-v" "c/" "testing/")
-             #t))
+             (invoke "py.test" "-v" "c/" "testing/")))
          (add-before 'check 'patch-paths-of-dynamically-loaded-libraries
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Shared libraries should be referred by their absolute path as
@@ -176,8 +135,7 @@ conversions for values passed between the two languages.")
                   (format #f "lib_m = ['~a']" libm)))
                (substitute* "c/test_c.py"
                  (("find_and_load_library\\(['\"]{1}c['\"]{1}")
-                  (format #f "find_and_load_library('~a'" libc)))
-               #t))))))
+                  (format #f "find_and_load_library('~a'" libc)))))))))
     (home-page "https://cffi.readthedocs.io/")
     (synopsis "Foreign function interface for Python")
     (description "Foreign Function Interface for Python calling C code.")
diff --git a/gnu/packages/libidn.scm b/gnu/packages/libidn.scm
index 8731ed3f83..b2234ff126 100644
--- a/gnu/packages/libidn.scm
+++ b/gnu/packages/libidn.scm
@@ -1,10 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,14 +34,14 @@
 (define-public libidn
   (package
    (name "libidn")
-   (version "1.35")
+   (version "1.37")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/libidn/libidn-" version
                                 ".tar.gz"))
             (sha256
              (base32
-              "07pyy0afqikfq51z5kbzbj9ldbd12mri0zvx0mfv3ds6bc0g26pi"))))
+              "1hljls9rkilh04dwiwg388wk8djkac8idijrdysqq2nqbh6rg3iw"))))
    (build-system gnu-build-system)
    ;; FIXME: No Java and C# libraries are currently built.
    (arguments
@@ -59,16 +60,14 @@ Java libraries.")
 (define-public libidn2
   (package
     (name "libidn2")
-    (version "2.3.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/libidn/" name "-" version
-                                  ".tar.lz"))
+                                  ".tar.gz"))
               (sha256
                (base32
-                "14yw4w37ya6rcqa7h6p44x6711dwgq2j22xg6k79ybbf04sj88kb"))))
-    (native-inputs
-     `(("lzip" ,lzip)))
+                "0b8gsksj2g9f4iywwdma3v4jcg7i9rqvdxfmclwvbf1n72a89xla"))))
     (inputs
      `(("libunistring" ,libunistring)))
     (build-system gnu-build-system)
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
index 927a12f4cf..627447e876 100644
--- a/gnu/packages/libsigsegv.scm
+++ b/gnu/packages/libsigsegv.scm
@@ -26,14 +26,14 @@
 (define-public libsigsegv
   (package
    (name "libsigsegv")
-   (version "2.12")
+   (version "2.13")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/libsigsegv/libsigsegv-"
                   version ".tar.gz"))
             (sha256
-             (base32 "1dlhqf4igzpqayms25lkhycjq1ccavisx8cnb3y4zapbkqsszq9s"))))
+             (base32 "06c1qjiv69hjvbq06mcxdi5hzfadhy28sa83zxspqpxhfr0ywy5y"))))
    (build-system gnu-build-system)
    (home-page "https://www.gnu.org/software/libsigsegv/")
    (synopsis "Library for handling page faults")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 41902e7785..6e3b43ae66 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017, 2018, 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
-;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2019, 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
@@ -141,10 +141,10 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages rsync)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages swig)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
@@ -562,14 +562,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                      ,@(if (version>=? version "4.16")
                            `(("flex" ,flex)
                              ("bison" ,bison))
-                           '())
-                     ,@(if (version>=? version "5.3")
-                           `(("rsync" ,rsync))
                            '())))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
-                  (srfi srfi-1))
+                  (srfi srfi-1)
+                  (ice-9 match))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -580,32 +578,37 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                               (%current-system))))
                    (defconfig ,(system->defconfig
                                 (or (%current-target-system)
-                                    (%current-system)))))
+                                    (%current-system))))
+                   (make-target ,(if (version>=? version "5.3")
+                                     "headers"
+                                     "headers_check")))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
                (invoke "make" defconfig)
-               (invoke "make" "mrproper" "headers_check"))))
+               (invoke "make" "mrproper" make-target))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (invoke "make"
-                       (string-append "INSTALL_HDR_PATH=" out)
-                       "headers_install")
+
+               ;; Mimic the quiet_cmd_headers_install target to avoid a
+               ;; dependency on rsync.
+               (for-each (lambda (file)
+                           (let ((destination (string-append
+                                               out "/include/"
+                                               ;; Drop the 'usr/include' prefix.
+                                               (match (string-split file #\/)
+                                                 ((_ _ path ...)
+                                                  (string-join path "/"))))))
+                             (format #t "`~a' -> `~a'~%" file destination)
+                             (install-file file (dirname destination))))
+                         (find-files "usr/include" "\\.h$"))
 
                (mkdir (string-append out "/include/config"))
                (call-with-output-file
                    (string-append out
                                   "/include/config/kernel.release")
                  (lambda (p)
-                   (format p "~a-default~%" ,version)))
-
-               ;; Remove the '.install' and '..install.cmd' files; the
-               ;; latter contains store paths, which pulls in bootstrap
-               ;; binaries in the build environment, and prevents bit
-               ;; reproducibility for the bootstrap binaries.
-               (for-each delete-file (find-files out "\\.install"))
-
-               #t))))
+                   (format p "~a-default~%" ,version)))))))
        #:allowed-references ()
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
@@ -647,11 +650,11 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 
 ;; The following package is used in the early bootstrap, and thus must be kept
 ;; stable and with minimal build requirements.
-(define-public linux-libre-headers-5.4.20
-  (make-linux-libre-headers "5.4.20"
-                            "1qxhf6dmcwjblzx8fgn6vr10p38xw10iwh6d1y1v1mxb25y30b47"))
+(define-public linux-libre-headers-5.10.35
+  (make-linux-libre-headers "5.10.35"
+                            "0q2rnchad55d49f3rajrkazz0fcjv1irwrdb1hwjnl01fzm2gjk3"))
 
-(define-public linux-libre-headers linux-libre-headers-5.4.20)
+(define-public linux-libre-headers linux-libre-headers-5.10.35)
 
 
 ;;;
@@ -1720,7 +1723,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.35.1")
+    (version "2.36.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -1728,7 +1731,7 @@ providing the system administrator with some help in common tasks.")
                                   "util-linux-" version ".tar.xz"))
               (sha256
                (base32
-                "1yfpy6bkab4jw61mpx48gfy24yrqp4a7arvpis8csrkk53fkxpnr"))
+                "0psc0asjp1rmfx1j7468zfnk9nphlphybw2n8dcl74v8v2lnnlgp"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -1746,7 +1749,10 @@ providing the system administrator with some help in common tasks.")
                "static"))       ;2.9 MiB static .a libraries
     (arguments
      `(#:configure-flags (list "--disable-use-tty-group"
-                               "--enable-fs-paths-default=/run/current-system/profile/sbin"
+                               (string-append
+                                "--enable-fs-paths-default="
+                                "/run/setuid-programs"
+                                ":/run/current-system/profile/sbin")
                                ;; Don't try to chown root:root mount and umount
                                "--disable-makeinstall-chown"
                                "--localstatedir=/var"
@@ -1772,16 +1778,14 @@ providing the system administrator with some help in common tasks.")
                         ;; libraries below $exec_prefix when $libdir does not
                         ;; match any of the "usual" locations.  Fix that.
                         (("usrlib_execdir='\\$\\{exec_prefix\\}'\\$libdir")
-                         "usrlib_execdir=$libdir"))
-                      #t))
+                         "usrlib_execdir=$libdir"))))
                   (add-before 'build 'set-umount-file-name
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Tell 'eject' the right file name of 'umount'.
                       (let ((out (assoc-ref outputs "out")))
                         (substitute* "sys-utils/eject.c"
                           (("\"/bin/umount\"")
-                           (string-append "\"" out "/bin/umount\"")))
-                        #t)))
+                           (string-append "\"" out "/bin/umount\""))))))
                   (add-before 'check 'pre-check
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out"))
@@ -1793,23 +1797,18 @@ providing the system administrator with some help in common tasks.")
 
                         ;; The C.UTF-8 locale does not exist in our libc.
                         (substitute* "tests/ts/column/invalid-multibyte"
-                          (("C\\.UTF-8") "en_US.utf8"))
-                        #t)))
-                  ;; TODO: Remove the conditional on the next rebuild cycle.
-                  ,@(if (string-prefix? "arm" (%current-system))
-                        '((add-before 'check 'disable-setarch-test
-                            (lambda _
-                              ;; The setarch tests are unreliable in QEMU's
-                              ;; user-mode emulation, which is our primary
-                              ;; method of building ARMv7 packages.
-                              ;; <https://github.com/karelzak/util-linux/issues/601>
-                              (substitute* "tests/ts/misc/setarch"
-                                (("ts_init_subtest.*" all)
-                                 (string-append
-                                  all "\n"
-                                  "ts_skip \"setarch tests are unreliable under QEMU\"")))
-                              #t)))
-                        '())
+                          (("C\\.UTF-8") "en_US.utf8")))))
+                  (add-before 'check 'disable-setarch-test
+                    (lambda _
+                      ;; The setarch tests are unreliable in QEMU's user-mode
+                      ;; emulation, which is our primary method of building
+                      ;; ARMv7 packages.  See
+                      ;; <https://github.com/karelzak/util-linux/issues/601>.
+                      (substitute* "tests/ts/misc/setarch"
+                        (("ts_init_subtest.*" all)
+                         (string-append
+                          all "\n"
+                          "ts_skip \"setarch tests are unreliable under QEMU\"")))))
                   (add-after 'install 'move-static-libraries
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib    (assoc-ref outputs "lib"))
@@ -1828,9 +1827,7 @@ providing the system administrator with some help in common tasks.")
                           ;; files so that Libtool does the right thing when both
                           ;; the shared and static library is available.
                           (substitute* (find-files "lib" "\\.la$")
-                            (("old_library=.*") "old_library=''\n")))
-
-                        #t)))
+                            (("old_library=.*") "old_library=''\n"))))))
                   (add-after 'install 'adjust-pkg-config-files
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((lib (assoc-ref outputs "lib")))
@@ -1838,8 +1835,7 @@ providing the system administrator with some help in common tasks.")
                         ;; the pkg-config files to avoid a cyclic reference on "out".
                         (substitute* (find-files (string-append lib "/lib/pkgconfig")
                                                  "\\.pc$")
-                          (("^(exec_)?prefix=.*") "")))
-                        #t)))))
+                          (("^(exec_)?prefix=.*") ""))))))))
     (inputs `(("zlib" ,zlib)
               ("ncurses" ,ncurses)
 
@@ -2291,24 +2287,96 @@ an executed process and the signals received by that process.  It can also
 intercept and print the system calls executed by the program.")
     (license license:gpl2+)))
 
+(define-public alsa-ucm-conf
+  (package
+    (name "alsa-ucm-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "0h6kzi1cfdqyxp4pwpqh5wb89c8s9wrgix315bvamffwfxf56frc"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("ucm" "share/alsa/ucm")
+         ("ucm2" "share/alsa/ucm2"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture Use Case Manager")
+    (description
+     "This package contains Advanced Linux Sound Architecture Use Case Manager
+configuration of audio input/output names and routing for specific audio
+hardware.")
+    (license license:bsd-3)))
+
+(define-public alsa-topology-conf
+  (package
+    (name "alsa-topology-conf")
+    (version "1.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/" name "-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "01zdg6q4s6d01k39z96wi4vbhrfw1i2g4yi5dijwfk6a5vjfdq2m"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("topology" "share/alsa/topology"))))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
+    (synopsis "The Advanced Linux Sound Architecture libraries")
+    (description
+     "This package contains Advanced Linux Sound Architecture topology
+configuration files that can be used for specific audio hardware.")
+    (license license:bsd-3)))
+
 (define-public alsa-lib
   (package
     (name "alsa-lib")
     (version "1.2.4")
     (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
-                   version ".tar.bz2"))
-             (sha256
-              (base32
-               "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "1xq8d48wfy59qw4x7383j32n8j5njndw5hcgnmlg9pvclphlnmgp"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
-                                              "/lib"))))
-    (home-page "https://www.alsa-project.org/")
+                                              "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'pre-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((ucm
+                     (string-append (assoc-ref inputs "alsa-ucm-conf")))
+                    (topology
+                     (string-append (assoc-ref inputs "alsa-topology-conf")))
+                    (alsa
+                     (string-append (assoc-ref outputs "out") "/share/alsa"))
+                    (ucm-share
+                     (string-append ucm "/share/alsa/ucm"))
+                    (ucm2-share
+                     (string-append ucm "/share/alsa/ucm2"))
+                    (topology-share
+                     (string-append topology "/share/alsa/topology")))
+               (mkdir-p alsa)
+               (symlink ucm-share (string-append alsa "/ucm"))
+               (symlink ucm2-share (string-append alsa "/ucm2"))
+               (symlink topology-share (string-append alsa "/topology")))
+             #t)))))
+    (inputs
+     `(("alsa-ucm-conf" ,alsa-ucm-conf)
+       ("alsa-topology-conf" ,alsa-topology-conf)))
+    (home-page "https://www.alsa-project.org/wiki/Main_Page")
     (synopsis "The Advanced Linux Sound Architecture libraries")
     (description
      "The Advanced Linux Sound Architecture (ALSA) provides audio and
@@ -2720,10 +2788,10 @@ network hardware types (plipconfig, slattach) and advanced aspects of IP
 configuration (iptunnel, ipmaddr).")
       (license license:gpl2+))))
 
-(define-public libcap-2.31
+(define-public libcap
   (package
     (name "libcap")
-    (version "2.31")
+    (version "2.49")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2731,7 +2799,7 @@ configuration (iptunnel, ipmaddr).")
                    "libcap2/libcap-" version ".tar.xz"))
              (sha256
               (base32
-               "0ikwm0kngrqa4ci80lqnrkk17kg09q7dxrz28y0gm5qw3vj8s266"))))
+               "10g13s1kihqpvrvmfl2w8s18icqjlz8hy2vkhz3jw2256vcw92z9"))))
     (build-system gnu-build-system)
     (arguments '(#:phases
                  (modify-phases %standard-phases
@@ -2739,10 +2807,9 @@ configuration (iptunnel, ipmaddr).")
                             ;; Add $libdir to the RUNPATH of executables.
                             (lambda _
                               (substitute* "Make.Rules"
-                                (("LDFLAGS := #-g")
-                                 (string-append "LDFLAGS := -Wl,-rpath="
-                                                %output "/lib")))
-                              #t)))
+                                (("LDFLAGS \\?= #-g")
+                                 (string-append "LDFLAGS ?= -Wl,-rpath="
+                                                %output "/lib"))))))
                  #:test-target "test"
                  #:make-flags (list "lib=lib"
                                     (string-append "prefix="
@@ -2759,37 +2826,6 @@ Linux-based operating systems.")
     ;; License is BSD-3 or GPLv2, at the user's choice.
     (license license:gpl2)))
 
-;; libcap 2.31 has problems with newer kernels, so provide this newer variant.
-;; Keep the old libcap around to avoid rebuilding 'coreutils' and 'avahi'.
-;; To be merged with libcap on the next rebuild cycle.
-(define-public libcap
-  (package
-    (inherit libcap-2.31)
-    (version "2.45")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://kernel.org/linux/libs/security/linux-privs/"
-                    "libcap2/libcap-" version ".tar.xz"))
-              (sha256
-               (base32
-                "11ijmi7jik9iw6pdszc6bylhggghr8cza03bcrbhbqf0cpvkjrnn"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments libcap-2.31)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'configure
-             (lambda _
-               ;; Add $libdir to the RUNPATH of executables.
-               (substitute* "Make.Rules"
-                 (("LDFLAGS \\?= #-g")
-                  (string-append "LDFLAGS ?= -Wl,-rpath="
-                                 %output "/lib")))
-               #t))))))))
-
-(define-deprecated libcap/next libcap)
-(export libcap/next)
-
 (define-public bridge-utils
   (package
     (name "bridge-utils")
@@ -3473,7 +3509,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
 (define-public kmod
   (package
     (name "kmod")
-    (version "27")
+    (version "29")
     (source (origin
               (method url-fetch)
               (uri
@@ -3481,16 +3517,19 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
                               "kmod-" version ".tar.xz"))
               (sha256
                (base32
-                "035wzfzjx4nwidk747p8n085mgkvy531ppn16krrajx2dkqzply1"))
+                "0am54mi5rk72g5q7k6l6f36gw3r9vwgjmyna43ywcjhqmakyx00b"))
               (patches (search-patches "kmod-module-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ;; For tests.
+       ("zstd" ,zstd)))
     (inputs
      `(("xz" ,xz)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ("zstd-lib" ,zstd "lib")))
     (arguments
-     `(#:configure-flags '("--with-xz" "--with-zlib"
+     `(#:configure-flags '("--with-xz" "--with-zlib" "--with-zstd"
                            "--disable-test-modules")
        #:phases
        (modify-phases %standard-phases
@@ -5817,6 +5856,7 @@ invocations of itself.")
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
      '(#:configure-flags (list "--disable-static"
+                               "--disable-ldconfig" ;not necessary
                                "--exec-prefix=${prefix}"
                                "--with-fuse=external" ;use our own FUSE
                                "--enable-mount-helper"
@@ -8077,7 +8117,7 @@ headers.")
                 (lambda (python-executable)
                   (format #t "Wrapping: ~A.~%" python-executable)
                   (wrap-program python-executable
-                    `("PYTHONPATH" ":" prefix
+                    `("GUIX_PYTHONPATH" ":" prefix
                       (,(string-append lib
                                        "/python"
                                        ,(version-major+minor
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 382f48beb1..be34b6c416 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
@@ -441,7 +441,7 @@ an interpreter, a compiler, a debugger, and much more.")
        ("ed" ,ed)
        ("inetutils" ,inetutils)         ;for hostname(1)
        ("texinfo" ,texinfo)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo)))
        ("which" ,which)
        ("zlib" ,zlib)))
     (arguments
@@ -513,10 +513,6 @@ an interpreter, a compiler, a debugger, and much more.")
                  (("\\(deftest grent\\.[12]" all)
                   (string-append "#+nil ;disabled by Guix\n" all))))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 575c63c713..38da28150b 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -490,7 +490,7 @@ output), and Binutils.")
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
     (native-inputs
-     `(("python" ,python)
+     `(("python" ,python-wrapper)
        ("perl"   ,perl)))
     (inputs
      `(("libffi" ,libffi)))
@@ -571,11 +571,7 @@ of programming tools as well as libraries with equivalent functionality.")
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))
-    (native-inputs
-     `(;; TODO: Switch to Python 3 in the next rebuild cycle.
-       ("python" ,python-2)
-       ("perl"   ,perl)))))
+        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))))
 
 (define-public clang-runtime-11
   (clang-runtime-from-llvm
@@ -601,23 +597,23 @@ of programming tools as well as libraries with equivalent functionality.")
 (define-public llvm-10
   (package
     (inherit llvm-11)
-    (version "10.0.0")
+    (version "10.0.1")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "1pwgm6cr0xr5a0hrbqs1zvsvvjvy0yq1y47c96804wcs795s90yz"))))))
+        "1wydhbp9kyjp5y0rc627imxgkgqiv3dfirbqil9dgpnbaw5y7n65"))))))
 
 (define-public clang-runtime-10
   (clang-runtime-from-llvm
    llvm-10
-   "0x9c531k6ww21s2mkdwqx1vbdjmx6d4wmfb8gdbj0wqa796sczba"))
+   "1yjqjri753w0fzmxcyz687nvd97sbc9rsqrxzpq720na47hwh3fr"))
 
 (define-public clang-10
   (clang-from-llvm llvm-10 clang-runtime-10
-                   "08fbxa2a0kr3ni35ckppj0kyvlcyaywrhpqwcdrdy0z900mhcnw8"
+                   "091bvcny2lh32zy8f3m9viayyhb2zannrndni7325rl85cwgr6pr"
                    #:patches '("clang-10.0-libc-search-path.patch")
                    #:tools-extra
                    (origin
@@ -626,7 +622,7 @@ of programming tools as well as libraries with equivalent functionality.")
                                              (package-version llvm-10)))
                      (sha256
                       (base32
-                       "074ija5s2jsdn0k035r2dzmryjmqxdnyg4xwvaqych2bazv8rpxc")))))
+                       "06n1yp638rh24xdxv9v2df0qajxbjz4w59b7dd4ky36drwmpi4yh")))))
 
 (define-public clang-toolchain-10
   (make-clang-toolchain clang-10))
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 0ecc91294f..73dfa0b675 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -1124,8 +1124,7 @@ shell command executions.")
               "1999bgrh52124a5g4qizav3x257ff2brjr855srpm1jv1nxzbygv"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.55
-      ;; Tests are disabled for now due to an issue that affecs guix:
+    `(;; Tests are disabled for now due to an issue that affecs guix:
       ;; <https://gitlab.com/emilua/emilua/-/issues/22>
       #:configure-flags
       (list "-Denable_http=true"
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 504cabc11d..367d7495ce 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -16,7 +16,7 @@
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -217,20 +217,7 @@ classification.")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'enter-dir
-             (lambda _ (chdir "ghmm") #t))
-           (delete 'check)
-           (add-after 'install 'check
-             (assoc-ref %standard-phases 'check))
-           (add-before 'check 'fix-PYTHONPATH
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((python-version (python-version
-                                      (assoc-ref inputs "python"))))
-                 (setenv "PYTHONPATH"
-                         (string-append (getenv "PYTHONPATH")
-                                        ":" (assoc-ref outputs "out")
-                                        "/lib/python" python-version
-                                        "/site-packages")))
-               #t))
+             (lambda _ (chdir "ghmm")))
            (add-after 'enter-dir 'fix-runpath
              (lambda* (#:key outputs #:allow-other-keys)
                (substitute* "ghmmwrapper/setup.py"
@@ -241,8 +228,7 @@ classification.")
                                  line
                                  "\"-Wl,-rpath="
                                  (assoc-ref outputs "out")
-                                 "/lib\", ")))
-               #t))
+                                 "/lib\", ")))))
            (add-after 'enter-dir 'disable-broken-tests
              (lambda _
                (substitute* "tests/Makefile.am"
@@ -262,8 +248,7 @@ classification.")
                    line indent)
                   (string-append indent
                                  "@unittest.skip(\"Disabled by Guix\")\n"
-                                 line)))
-               #t)))))
+                                 line))))))))
       (inputs
        `(("python" ,python-2) ; only Python 2 is supported
          ("libxml2" ,libxml2)))
@@ -1453,7 +1438,7 @@ automatically.")
                  (let* ((server (string-append bin "/kaldi-gst-server"))
                         (client (string-append bin "/kaldi-gst-client"))
                         (worker (string-append bin "/kaldi-gst-worker"))
-                        (PYTHONPATH (getenv "PYTHONPATH"))
+                        (PYTHONPATH (getenv "GUIX_PYTHONPATH"))
                         (GST_PLUGIN_PATH (string-append
                                           (assoc-ref inputs "gst-kaldi-nnet2-online")
                                           "/lib/gstreamer-1.0:${GST_PLUGIN_PATH}"))
@@ -1462,7 +1447,7 @@ automatically.")
                                   (lambda _
                                     (format #t
                                             "#!~a
-export PYTHONPATH=~a
+export GUIX_PYTHONPATH=~a
 export GST_PLUGIN_PATH=~a
 exec ~a ~a/~a \"$@\"~%"
                                             (which "bash") PYTHONPATH GST_PLUGIN_PATH
@@ -1586,10 +1571,9 @@ Python.")
              ;; https://github.com/tensorflow/tensorflow/issues/34197
              (substitute* (find-files "tensorflow/python" ".*\\.cc$")
                (("(nullptr,)(\\ +/. tp_print)" _ _ tp_print)
-                (string-append "NULL,   " tp_print)))
-             #t))
+                (string-append "NULL,   " tp_print)))))
          (add-after 'python3.7-compatibility 'chdir
-           (lambda _ (chdir "tensorflow/contrib/cmake") #t))
+           (lambda _ (chdir "tensorflow/contrib/cmake")))
          (add-after 'chdir 'disable-downloads
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "external" "\\.cmake$")
@@ -1726,8 +1710,7 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                     "re2"))
 
              (rename-file "../build/cub/src/cub/cub-1.8.0/"
-                          "../build/cub/src/cub/cub/")
-             #t))
+                          "../build/cub/src/cub/cub/")))
          (add-after 'unpack 'fix-python-build
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (mkdir-p "protobuf-src")
@@ -1738,9 +1721,6 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                      "-C" "eigen-src" "--strip-components=1")
 
              (substitute* "tensorflow/contrib/cmake/tf_python.cmake"
-               ;; Ensure that all Python dependencies can be found at build time.
-               (("PYTHONPATH=\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/tf_python" m)
-                (string-append m ":" (getenv "PYTHONPATH")))
                ;; Take protobuf source files from our source package.
                (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/protobuf/src/protobuf/src/google")
                 (string-append (getcwd) "/protobuf-src/src/google")))
@@ -1766,15 +1746,13 @@ set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive "
                 (string-append "set_target_properties(${_AT_TARGET} PROPERTIES \
 COMPILE_FLAGS ${target_compile_flags} \
 INSTALL_RPATH_USE_LINK_PATH TRUE \
-INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))
-             #t))
+INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))))
          (add-after 'build 'build-pip-package
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "LDFLAGS"
                      (string-append "-Wl,-rpath="
                                     (assoc-ref outputs "out") "/lib"))
-             (invoke "make" "tf_python_build_pip_package")
-             #t))
+             (invoke "make" "tf_python_build_pip_package")))
          (add-after 'build-pip-package 'install-python
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -1789,8 +1767,7 @@ INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n")))
                 (string-append
                  out "/lib/python" python-version
                  "/site-packages/tensorflow/contrib/"
-                 "seq2seq/python/ops/lib_beam_search_ops.so"))
-               #t))))))
+                 "seq2seq/python/ops/lib_beam_search_ops.so"))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("protobuf:native" ,protobuf-3.6) ; protoc
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index eb7f148b7a..a5d5051370 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -40,6 +40,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Benoit Joly <benoit@benoitj.ca>
 ;;;
@@ -1317,7 +1318,7 @@ Notmuch.")
                (let* ((out (assoc-ref outputs "out"))
                       (bin (string-append out "/bin/notifymuch")))
                  (wrap-program bin
-                   `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                   `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                    `("GI_TYPELIB_PATH" ":" prefix
                      (,(getenv "GI_TYPELIB_PATH")
                       ,(string-append out "/lib/girepository-1.0")))))
@@ -2953,6 +2954,7 @@ transfer protocols.")
              (let ((out (assoc-ref outputs "out"))
                    (path (getenv "PERL5LIB")))
                (wrap-script (string-append out "/bin/sieve-connect")
+                 #:guile (search-input-file inputs "bin/guile")
                  `("PERL5LIB" ":" = (,path)))
                #t))))))
     (inputs
@@ -3487,7 +3489,6 @@ which sends emails to HyperKitty, the official Mailman3 web archiver.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
              (invoke "example_project/manage.py" "test"
                      "--settings=hyperkitty.tests.settings_test"))))))
     (propagated-inputs
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index cdcb1dcaa2..60b6f1b42e 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Mark H Weaver <mhw@netris.org>
@@ -23,6 +23,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages make-bootstrap)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix memoization)
@@ -374,10 +375,6 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                              (package-arguments binutils))
                                   ((#:configure-flags flags _ ...)
                                    flags)))
-       #:make-flags ,(match (memq #:make-flags (package-arguments binutils))
-                       ((#:make-flags flags _ ...)
-                        flags)
-                       (_ ''()))
        #:strip-flags '("--strip-all")
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'all-static
@@ -441,7 +438,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                (assoc-ref %build-inputs "kernel-headers")))))
       (inputs `(("kernel-headers"
                  ,(if (or (and (%current-target-system)
-                               (hurd-triplet? (%current-target-system)))
+                               (target-hurd? (%current-target-system)))
                           (string-suffix? "-hurd" (%current-system)))
                       gnumach-headers
                       linux-libre-headers))
@@ -705,12 +702,8 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
           ;; When `configure' checks for ltdl availability, it
           ;; doesn't try to link using libtool, and thus fails
           ;; because of a missing -ldl.  Work around that.
-
-          ;; XXX: On ARMv7, disable JIT: it causes crashes with 3.0.2,
-          ;; possibly related to <https://bugs.gnu.org/40737>.
-          (if (target-arm32?)
-              ''("LDFLAGS=-ldl" "--disable-jit")
-              ''("LDFLAGS=-ldl")))
+          ''("LDFLAGS=-ldl"
+             "--enable-mini-gmp"))
          ((#:phases phases '%standard-phases)
           `(modify-phases ,phases
 
@@ -882,25 +875,26 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (source #f)
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (let ((out (assoc-ref %outputs "out")))
-         (use-modules (guix build utils)
-                      (ice-9 match)
-                      (srfi srfi-26))
-
-         (setvbuf (current-output-port)
-                  (cond-expand (guile-2.0 _IOLBF) (else 'line)))
-         (mkdir out)
-         (chdir out)
-         (for-each (match-lambda
-                    ((name . directory)
-                     (for-each (lambda (file)
-                                 (format #t "~a -> ~a~%" file out)
-                                 (symlink file (basename file)))
-                               (find-files directory "\\.tar\\."))))
-                   %build-inputs)
-         #t)))
+     (list #:modules '((guix build utils))
+           #:builder
+           #~(begin
+               (use-modules (guix build utils)
+                            (ice-9 match)
+                            (srfi srfi-26))
+
+               (define out #$output)
+
+               (setvbuf (current-output-port)
+                        (cond-expand (guile-2.0 _IOLBF) (else 'line)))
+               (mkdir out)
+               (chdir out)
+               (for-each (match-lambda
+                           ((name . directory)
+                            (for-each (lambda (file)
+                                        (format #t "~a -> ~a~%" file out)
+                                        (symlink file (basename file)))
+                                      (find-files directory "\\.tar\\."))))
+                         %build-inputs))))
     (inputs `(("guile-tarball" ,%guile-bootstrap-tarball)
               ,@(match (or (%current-target-system) (%current-system))
                   ((or "i686-linux" "x86_64-linux")
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index caaa6da5ed..b1ecb9dd2a 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -36,6 +36,7 @@
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages less)
   #:use-module (gnu packages perl)
@@ -303,9 +304,11 @@ Linux kernel and C library interfaces employed by user-space programs.")
     (license license:gpl2+)))
 
 (define-public help2man
+  ;; TODO: Manual pages for languages not available from the implicit
+  ;; input "locales" contain the original (English) text.
   (package
     (name "help2man")
-    (version "1.47.13")
+    (version "1.48.3")
     (source
      (origin
       (method url-fetch)
@@ -313,18 +316,26 @@ Linux kernel and C library interfaces employed by user-space programs.")
                           version ".tar.xz"))
       (sha256
        (base32
-        "08q5arxz4j4pyx5q4712c2rn7p7dw7as9xg38yvmsh1c3ynvpy5p"))))
+        "1b58s40dh2lflrkgbyxg1s48p8icb5a5yzp9ch83kg9zchygyqc3"))))
     (build-system gnu-build-system)
     (arguments `(;; There's no `check' target.
-                 #:tests? #f))
+                 #:tests? #f
+                 #:phases
+                 (modify-phases %standard-phases
+                   (add-after 'unpack 'patch-help2man-with-perl-gettext
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (let ((lib (assoc-ref inputs "perl-gettext"))
+                             (fmt "use lib '~a/lib/perl5/site_perl';~%~a"))
+                         (substitute* "help2man.PL"
+                           (("^use Locale::gettext.*$" load)
+                            (format #f fmt lib load))))
+                       #t)))))
     (inputs
      `(("perl" ,perl)
-       ;; TODO: Add these optional dependencies.
-       ;; ("perl-LocaleGettext" ,perl-LocaleGettext)
-       ;; ("gettext" ,gettext-minimal)
-       ))
+       ("perl-gettext" ,perl-gettext)))
     (native-inputs
-     `(("perl" ,perl)))
+     `(("perl" ,perl)
+       ("gettext" ,gettext-minimal)))
     (home-page "https://www.gnu.org/software/help2man/")
     (synopsis "Automatically generate man pages from program --help")
     (description
diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm
index 17673c7fde..31589909bf 100644
--- a/gnu/packages/mastodon.scm
+++ b/gnu/packages/mastodon.scm
@@ -127,7 +127,7 @@ Features include:
        ("libgee" ,libgee)
        ("libhandy" ,libhandy)
        ("libsoup" ,libsoup)
-       ("vala" ,vala-0.50)
+       ("vala" ,vala)
        ("xdg-utils" ,xdg-utils)))
     (home-page "https://github.com/bleakgrey/tootle")
     (synopsis "GTK3 client for Mastodon")
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index 82b2d6e0fd..8d7c618eef 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -710,7 +710,7 @@ infamous 'Wanda the Fish'.")
 (define-public atril
   (package
     (name "atril")
-    (version "1.22.0")
+    (version "1.24.0")
     (source
      (origin
        (method url-fetch)
@@ -718,7 +718,7 @@ infamous 'Wanda the Fish'.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1xd49j4qwrlg2nh2zvspf91yk033dp8a58dy9azqg2yz4bcvywxb"))))
+         "0967gxw7h2qh2kpwl0jgv58hicz6aa92kr12mnykbpikad25s95y"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--with-openjpeg="
@@ -762,6 +762,7 @@ infamous 'Wanda the Fish'.")
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk-doc" ,gtk-doc)
+       ("texlive-bin" ,texlive-bin) ;synctex
        ("xmllint" ,libxml2)
        ("zlib" ,zlib)))
     (inputs
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 628b967eff..7f504fa52b 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
-;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Eric Brown <brown@fastmail.com>
 ;;; Copyright © 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Amin Bandali <bandali@gnu.org>
@@ -140,6 +140,7 @@
   #:use-module (gnu packages tbb)
   #:use-module (gnu packages scheme)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
@@ -339,8 +340,8 @@ programming language.")
                      (let* ((out (assoc-ref outputs "out"))
                             (bin (string-append out "/bin")))
                        (wrap-program (string-append bin "/units_cur")
-                         `("PYTHONPATH" ":" prefix
-                           ,(search-path-as-string->list (getenv "PYTHONPATH"))))
+                         `("GUIX_PYTHONPATH" ":" prefix
+                           ,(search-path-as-string->list (getenv "GUIX_PYTHONPATH"))))
                        #t))))))
    (synopsis "Conversion between thousands of scales")
    (description
@@ -489,35 +490,38 @@ precision floating point numbers.")
     (build-system gnu-build-system)
     (arguments
      (let ((system (%current-system)))
-       (cond
-        ((or (string-prefix? "aarch64" system)
-             (string-prefix? "powerpc" system))
-         ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        ((string-prefix? "i686" system)
-         ;; There are rounding issues with these tests on i686:
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
-         ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
-         '(#:phases (modify-phases %standard-phases
-                      (add-before 'check 'disable-failing-tests
-                        (lambda _
-                          (substitute* "linalg/test.c"
-                            ((".*gsl_test\\(test_LU_decomp.*") "\n")
-                            ((".*gsl_test\\(test_LUc_decomp.*") "\n")
-                            ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
-                            ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
-                          (substitute* "spmatrix/test.c"
-                            ((".*test_all.*") "\n")
-                            ((".*test_float.*") "\n")
-                            ((".*test_complex.*") "\n"))
-                          #t)))))
-        (else '()))))
+       `(#:configure-flags (list "--disable-static") ;halves package size
+         #:phases
+         (modify-phases %standard-phases
+           ,@(cond
+              ((or (string-prefix? "aarch64" system)
+                   (string-prefix? "powerpc" system))
+               ;; Some sparse matrix tests are failing on AArch64 and PowerPC:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00001.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_complex.*") "\n"))
+                     #t))))
+
+              ((string-prefix? "i686" system)
+               ;; There are rounding issues with these tests on i686:
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2016-10/msg00000.html
+               ;; https://lists.gnu.org/archive/html/bug-gsl/2020-04/msg00000.html
+               '((add-before 'check 'disable-failing-tests
+                   (lambda _
+                     (substitute* "linalg/test.c"
+                       ((".*gsl_test\\(test_LU_decomp.*") "\n")
+                       ((".*gsl_test\\(test_LUc_decomp.*") "\n")
+                       ((".*gsl_test\\(test_cholesky_decomp.*") "\n")
+                       ((".*gsl_test\\(test_COD_lssolve2.*") "\n"))
+                     (substitute* "spmatrix/test.c"
+                       ((".*test_all.*") "\n")
+                       ((".*test_float.*") "\n")
+                       ((".*test_complex.*") "\n"))
+                     #t))))
+
+              (else '()))))))
     (home-page "https://www.gnu.org/software/gsl/")
     (synopsis "Numerical library for C and C++")
     (description
@@ -2091,7 +2095,7 @@ script files.")
        ,@(package-inputs octave-cli)))
     (native-inputs
      `(("qttools" , qttools) ;for lrelease
-       ("texlive" ,(texlive-union (list texlive-epsf))) ; for texi2dvi
+       ("texlive" ,(texlive-updmap.cfg (list texlive-epsf))) ; for texi2dvi
        ,@(package-native-inputs octave-cli)))
     (arguments
      (substitute-keyword-arguments (package-arguments octave-cli)
@@ -3833,16 +3837,17 @@ parts of it.")
 (define-public openblas
   (package
     (name "openblas")
-    (version "0.3.9")
+    (version "0.3.13")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/openblas/v" version "/OpenBLAS%20"
-                           version "%20version.tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xianyi/OpenBLAS")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "14iz9xnrb9xiwgj84j94mc74gg0zn2vsy9fmsijxxma1n7dck4w3"))))
+         "14jxh0v3jfbw4mfjx4mcz4dd51lyq7pqvh9k8dg94539ypzjr2lj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -4191,6 +4196,7 @@ packages.")
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/math-atlas/Stable/"
                                   version "/atlas" version ".tar.bz2"))
+              (patches (search-patches "atlas-gfortran-compat.patch"))
               (sha256
                (base32
                 "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
@@ -4688,7 +4694,7 @@ set.")
 (define-public hypre
   (package
     (name "hypre")
-    (version "2.15.1")
+    (version "2.20.0")
     (source
      (origin
        (method git-fetch)
@@ -4697,28 +4703,55 @@ set.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lvh4ybqkriyqfg2zmic6mrg1981qv1i9vry1fdgsabn81hb71g4"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Remove use of __DATE__ and __TIME__ for reproducibility;
-           ;; substitute the release date.
-           (substitute* "src/utilities/HYPRE_utilities.h"
-             (("Date Compiled: .*$")
-              "Date Compiled: Oct 19 2018 15:23:00 +0000\"\n"))
-           #t))))
+        (base32 "14iqjwg5sv1qjn7c2cfv0xxmn9rwamjrhh9hgs8fjbywcbvrkjdi"))))
     (build-system gnu-build-system)
-    (outputs '("out"                    ; 6.1 MiB of headers and libraries
-               "doc"))                  ; 4.8 MiB of documentation
+    (outputs '("out"                    ;5.3 MiB of headers and libraries
+               "doc"))                  ;12 MiB of documentation
     (native-inputs
      `(("doc++" ,doc++)
-       ("netpbm" ,netpbm)
-       ("perl" ,perl)                   ; needed to run 'ppmquant' during tests
-       ("texlive" ,(texlive-union (list texlive-xypic
-                                        texlive-cm
-                                        texlive-latex-hyperref
-                                        texlive-bibtex)))
-       ("ghostscript" ,ghostscript)))
+       ("doxygen" ,doxygen)
+       ("python" ,python)
+       ("python-breathe" ,python-breathe)
+       ("python-sphinx" ,python-sphinx)
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                             texlive-amsfonts
+                                             texlive-bibtex
+                                             texlive-caption
+                                             texlive-cm
+                                             texlive-etoolbox
+                                             texlive-jknappen
+                                             texlive-sectsty
+                                             texlive-tex-gyre
+                                             texlive-wasy
+                                             texlive-xcolor
+                                             texlive-xypic
+                                             texlive-generic-listofitems
+                                             texlive-generic-ulem
+                                             texlive-latex-capt-of
+                                             texlive-latex-cmap
+                                             texlive-latex-colortbl
+                                             texlive-latex-etoc
+                                             texlive-latex-fancyhdr
+                                             texlive-latex-fancyvrb
+                                             texlive-latex-float
+                                             texlive-latex-fncychap
+                                             texlive-latex-framed
+                                             texlive-latex-geometry
+                                             texlive-latex-hanging
+                                             texlive-latex-hyperref
+                                             texlive-latex-multirow
+                                             texlive-latex-natbib
+                                             texlive-latex-needspace
+                                             texlive-latex-newunicodechar
+                                             texlive-latex-parskip
+                                             texlive-latex-stackengine
+                                             texlive-latex-tabulary
+                                             texlive-latex-titlesec
+                                             texlive-latex-tocloft
+                                             texlive-latex-upquote
+                                             texlive-latex-varwidth
+                                             texlive-latex-wasysym
+                                             texlive-latex-wrapfig)))))
     (inputs
      `(("blas" ,openblas)
        ("lapack" ,lapack)))
@@ -4734,12 +4767,6 @@ set.")
                            "--with-blas")
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'set-HOME
-           (lambda _
-             ;; FIXME: texlive-union does not find the built
-             ;; metafonts, so it tries to generate them in HOME.
-             (setenv "HOME" "/tmp")
-             #t))
          (add-before 'configure 'chdir-src
            (lambda _ (chdir "src")))
          (replace 'configure
@@ -4754,7 +4781,7 @@ set.")
                                           configure-flags)))))))
          (add-after 'build 'build-docs
            (lambda _
-             (invoke "make" "-Cdocs" "pdf" "html")))
+             (invoke "make" "-C" "docs")))
          (replace 'check
            (lambda _
              (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/hypre/lib"))
@@ -4765,8 +4792,7 @@ set.")
                            (when (positive? size)
                              (error (format #f "~a size ~d; error indication~%"
                                             filename size)))))
-                       (find-files "test" ".*\\.err$"))
-             #t))
+                       (find-files "test" ".*\\.err$"))))
          (add-after 'install 'install-docs
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Custom install because docs/Makefile doesn't honor ${docdir}.
@@ -4775,10 +4801,9 @@ set.")
                (with-directory-excursion "docs"
                  (for-each (lambda (base)
                              (install-file (string-append base ".pdf") docdir)
-                             (copy-recursively base docdir)) ; html docs
-                           '("HYPRE_usr_manual"
-                             "HYPRE_ref_manual")))
-               #t))))))
+                             (copy-recursively (string-append base "-html")
+                                               (string-append docdir "/" base)))
+                           '("usr-manual" "ref-manual")))))))))
     (home-page "https://computing.llnl.gov/projects\
 /hypre-scalable-linear-solvers-multigrid-methods")
     (synopsis "Library of solvers and preconditioners for linear equations")
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index c66751bc7c..75f8b1eb1e 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -56,8 +56,7 @@
                (base32
                 "0lkd9lyspvhxlfs0496gsllwinh62jk9wij6gpadvx9gwz6yavd9"))))
     (build-system gnu-build-system)
-    (native-inputs
-     `(("guile" ,guile-2.2)))
+    (native-inputs (list guile-2.2))
     (synopsis "LALR(1) Parser Generator in Guile")
     (description
      "NYACC is an LALR(1) parser generator implemented in Guile.
@@ -92,10 +91,8 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                     (("^DOCDIR =.*")
                      "DOCDIR = @prefix@/share/doc/$(PACKAGE_TARNAME)\n"))
                   #t))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (native-inputs (list pkg-config))
+    (inputs (list guile-2.2))))
 
 (define-public nyacc
   (package
@@ -116,8 +113,7 @@ extensive examples, including parsers for the Javascript and C99 languages.")
                      "GUILE_GLOBAL_SITE=\
 $prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION\n"))
                   #t))))
-    (inputs
-     `(("guile" ,guile-3.0)))
+    (inputs (list guile-3.0))
     (description
      "@acronym{NYACC, Not Yet Another Compiler Compiler} is set of Guile modules
 for generating parsers and lexical analyzers.  It provides sample parsers,
@@ -152,8 +148,7 @@ parsers to allow execution with Guile as extension languages.")))
               (sha256
                (base32
                 "065ksalfllbdrzl12dz9d9dcxrv97wqxblslngsc6kajvnvlyvpk"))))
-    (inputs
-     `(("guile" ,guile-2.2)))))
+    (inputs (list guile-2.2))))
 
 (define-public mes-0.19
   ;; Mes used for bootstrap.
@@ -169,9 +164,7 @@ parsers to allow execution with Guile as extension languages.")))
                 "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
     (build-system gnu-build-system)
     (supported-systems '("i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools-0.5.2)
-       ("nyacc" ,nyacc-0.86)))
+    (propagated-inputs (list mescc-tools-0.5.2 nyacc-0.86))
     (native-inputs
      `(("guile" ,guile-2.2)
        ,@(let ((target-system (or (%current-target-system)
@@ -212,9 +205,7 @@ Guile.")
                (base32
                 "0mnryfkl0dwbr5gxp16j5s95gw7z1vm1fqa1pxabp0aiar1hw53s"))))
     (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
-    (propagated-inputs
-     `(("mescc-tools" ,mescc-tools)
-       ("nyacc" ,nyacc-1.00.2)))
+    (propagated-inputs (list mescc-tools nyacc-1.00.2))
     (native-search-paths
      (list (search-path-specification
             (variable "C_INCLUDE_PATH")
@@ -384,7 +375,7 @@ get_machine.")
                  (base32
                   "0yyc0fcbbxi9jqa1n76x0rwspdrwmc8g09jlmsw9c35nflrhmz8q"))))
       (native-inputs
-       `(("mescc-tools" ,mescc-tools)))
+       (list mescc-tools))
       (build-system gnu-build-system)
       (arguments
        `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 769e47ea88..173119a8b1 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1087,7 +1087,7 @@ of xmpppy.")
          "share/gajim/plugins")))
       ;; Gajim needs to use the propagated inputs of its plugins.
       (search-path-specification
-       (variable "PYTHONPATH")
+       (variable "GUIX_PYTHONPATH")
        (files
         (list
          (string-append
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index b97abcafc3..f115f48d03 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -401,15 +401,15 @@ other MPD frontends.")
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out         (assoc-ref outputs "out"))
-                   (python-path (getenv "PYTHONPATH")))
+                   (python-path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/mpDris2")
-                 `("PYTHONPATH" ":" prefix (,python-path)))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path)))
                #t))))))
     (inputs
      `(("python-mpd2" ,python-mpd2)
        ("python-dbus" ,python-dbus)
        ("python-pygobject" ,python-pygobject)
-       ("python" ,python)))             ; Sets PYTHONPATH.
+       ("python" ,python)))             ; Sets GUIX_PYTHONPATH.
     ;; For bootstrapping.
     (native-inputs
      `(("autoconf" ,autoconf)
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 733e6548b9..163632769f 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -38,7 +38,7 @@
 (define-public gmp
   (package
    (name "gmp")
-   (version "6.2.0")
+   (version "6.2.1")
    (source (origin
             (method url-fetch)
             (uri
@@ -46,7 +46,7 @@
                             version ".tar.xz"))
             (sha256
              (base32
-              "09hmg8k63mbfrx1x3yy6y1yzbbq85kw5avbibhcgrg9z3ganr3i5"))
+              "1wml97fdmpcynsbw9yl77rj29qibfp652d0w3222zlfx5j8jjj7x"))
             (patches (search-patches "gmp-faulty-test.patch"))))
    (build-system gnu-build-system)
    (native-inputs `(("m4" ,m4)))
@@ -113,13 +113,13 @@ It is aimed at use in, for example, cryptography and computational algebra.")
 (define-public mpfr
   (package
    (name "mpfr")
-   (version "4.0.2")
+   (version "4.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/mpfr/mpfr-" version
                                 ".tar.xz"))
             (sha256 (base32
-                     "12m3amcavhpqygc499s3fzqlb8f2j2rr7fkqsm10xbjfc04fffqx"))))
+                     "0zwaanakrqjf84lfr5hfsdr7hncwv9wj0mchlr7cmxigfgqs760c"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
    (propagated-inputs `(("gmp" ,gmp)))            ; <mpfr.h> refers to <gmp.h>
@@ -134,14 +134,14 @@ correct rounding.")
 (define-public mpc
   (package
    (name "mpc")
-   (version "1.1.0")
+   (version "1.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/mpc/mpc-" version ".tar.gz"))
             (sha256
               (base32
-                "0biwnhjm3rx3hc0rfpvyniky4lpzsvdcwhmcn7f0h4iw2hwcb1b9"))))
+                "0n846hqfqvmsmim7qdlms0qr86f1hck19p12nq3g3z2x74n3sl0p"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
    (propagated-inputs `(("gmp" ,gmp)              ; <mpc.h> refers to both
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index f814340289..d1fb4ee291 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1473,15 +1473,6 @@ and auto-mapping slices to MIDI note numbers.")
                             "/share/fonts/opentype/"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'use-texlive-union
-           (lambda _
-             ;; FIXME: fonts are not found and have to be generated in HOME.
-             (setenv "HOME" "/tmp")
-             ;; The test for the "lh" package fails, even though it is among
-             ;; the inputs.
-             (substitute* "configure"
-               (("TEX_FIKPARM=.*") "TEX_FIKPARM=found\n"))
-             #t))
          (add-after 'unpack 'fix-path-references
            (lambda _
              (substitute* "scm/backend-library.scm"
@@ -1526,9 +1517,9 @@ and auto-mapping slices to MIDI note numbers.")
        ("gettext" ,gettext-minimal)
        ("imagemagick" ,imagemagick)
        ("netpbm" ,netpbm)               ;for pngtopnm
-       ("texlive" ,(texlive-union (list texlive-metapost
+       ("texlive" ,(texlive-updmap.cfg (list texlive-metapost
                                         texlive-generic-epsf
-                                        texlive-latex-lh
+                                        texlive-lh
                                         texlive-latex-cyrillic)))
        ("texinfo" ,texinfo)
        ("texi2html" ,texi2html-1.82)
@@ -1585,7 +1576,7 @@ Guile.")
        ("python-isort" ,python-isort)
        ("python-mypy" ,python-mypy)
        ("python-ply" ,python-ply)
-       ("python-pytest" ,python-pytest-6)
+       ("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)))
     (propagated-inputs
@@ -1946,9 +1937,9 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'solfege' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/solfege")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
      `(("python" ,python-2)
@@ -6231,7 +6222,6 @@ and as an LV2 plugin.")
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
-      #:meson ,meson-0.55
       #:configure-flags
       `("-Dtests=true"
         "-Dmanpage=true"
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index 7f85f54fbf..f9f34467c9 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2021 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -73,43 +73,21 @@ cryptographic toolkits for object-oriented languages or in applications
 themselves.")
     (license gpl2+)))
 
-(define-public nettle-3.5
+(define-public nettle
   ;; This version is not API-compatible with version 2.  In particular, lsh
   ;; cannot use it yet.  So keep it separate.
   (package (inherit nettle-2)
-    (version "3.5.1")
-    (replacement nettle-3.5/fixed)
+    (version "3.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/nettle/nettle-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "06clvkdfxhlbagn4afssylmn5vrak59dlmnvy8b2xc31hycs3k3m"))))
+                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))
     (arguments
      (substitute-keyword-arguments (package-arguments nettle-2)
        ((#:configure-flags flags)
         ;; Build "fat" binaries where the right implementation is chosen
         ;; at run time based on CPU features (starting from 3.1.)
         `(cons "--enable-fat" ,flags))))))
-
-(define nettle-3.5/fixed
-  (package-with-extra-patches
-   nettle-3.5
-   (search-patches "nettle-3.5-check-_pkcs1_sec_decrypt-msg-len.patch"
-                   "nettle-3.5-CVE-2021-3580-pt1.patch"
-                   "nettle-3.5-CVE-2021-3580-pt2.patch")))
-
-(define-public nettle-3.7
-  (package (inherit nettle-3.5)
-    (version "3.7.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/nettle/nettle-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1w5wwc3q0r97d2ifhx77cw7y8s20bm8x52is9j93p2h47yq5w7v6"))))))
-
-;;; Upgrading Nettle on master would cause 10000+ packages to be rebuilt.
-(define-public nettle nettle-3.5)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 304c8a8703..dfa91cd553 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -688,7 +688,7 @@ systems with no further dependencies.")
                (for-each
                 (lambda (program)
                   (wrap-program program
-                    `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,lib))
+                    `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,lib))
                     `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
                 (append
                  (map (lambda (prog) (string-append bin prog))
@@ -3420,7 +3420,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
       (build-system cmake-build-system)
       (inputs
        `(("argon2" ,argon2)
-         ("nettle" ,nettle-3.7)
+         ("nettle" ,nettle)
          ("readline" ,readline)
          ("jsoncpp" ,jsoncpp)
          ("openssl" ,openssl)             ;required for the DHT proxy
@@ -3670,11 +3670,8 @@ module @code{batman-adv}, for Layer 2.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (man (string-append out "/share/man")))
-               (invoke "make"
-                       (string-append "PYTHONPATH=" (getenv "PYTHONPATH"))
-                       "doc/pagekite.1")
-               (install-file "doc/pagekite.1" (string-append man "/man1"))
-               #t))))))
+               (invoke "make" "doc/pagekite.1")
+               (install-file "doc/pagekite.1" (string-append man "/man1"))))))))
     (inputs
      `(("python-six" ,python-six)
        ("python-socksipychain" ,python-socksipychain)))
diff --git a/gnu/packages/ninja.scm b/gnu/packages/ninja.scm
index 11ee472d56..4c4a2f37a7 100644
--- a/gnu/packages/ninja.scm
+++ b/gnu/packages/ninja.scm
@@ -31,7 +31,7 @@
 (define-public ninja
   (package
     (name "ninja")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -40,7 +40,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fbzl7mrcrwp527sgkc1npfl3k6bbpydpiq98xcf1a1hkrx0z5x4"))))
+                "0mspq4mvx41qri2v2zlg2y3znx5gfw6d8s3czbcfpr2218qbpz55"))))
     (build-system gnu-build-system)
     (inputs `(("python" ,python-wrapper)))
     (arguments
@@ -51,8 +51,7 @@
              (substitute* "src/subprocess-posix.cc"
                (("/bin/sh") (which "sh")))
              (substitute* "src/subprocess_test.cc"
-               (("/bin/echo") (which "echo")))
-             #t))
+               (("/bin/echo") (which "echo")))))
          (replace 'build
            (lambda _
              (invoke "./configure.py" "--bootstrap")))
@@ -67,8 +66,7 @@
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/ninja")))
                (install-file "ninja" bin)
-               (install-file "doc/manual.asciidoc" doc)
-               #t))))))
+               (install-file "doc/manual.asciidoc" doc)))))))
     (home-page "https://ninja-build.org/")
     (synopsis "Small build system")
     (description
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 0444b47071..55eddc0c91 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -3,8 +3,9 @@
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
 
 (define-module (gnu packages nss)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:)
@@ -30,13 +32,12 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages sqlite)
-  #:use-module (ice-9 match))
+  #:use-module (gnu packages sqlite))
 
 (define-public nspr
   (package
     (name "nspr")
-    (version "4.29")
+    (version "4.31")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -44,7 +45,7 @@
                    version "/src/nspr-" version ".tar.gz"))
              (sha256
               (base32
-               "10i5x637x0jqmdi47grkzgn56fg6770naa3wrhr4dmsrh3dnna12"))))
+               "1j5b2m8cjlhnnv8sq34587avaagkqvh521w4f95miwgvsn3xlaap"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
@@ -70,10 +71,12 @@ platform-neutral API for system level and libc-like functions.  It is used
 in the Mozilla clients.")
     (license license:mpl2.0)))
 
+;;; Note: When updating, also update the nss-certs package, which cannot
+;;; inherit from here.
 (define-public nss
   (package
     (name "nss")
-    (version "3.59")
+    (version "3.67")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -84,22 +87,21 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "096fs3z21r171q24ca3rq53p1389xmvqz1f2rpm7nlm8r9s82ag6"))
+                "0zyfi27lbdz1bmk9dmsivcya4phx25rzlxqcnjab69yd928rlm7n"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-3.56-pkgconfig.patch"
+                                       "nss-getcwd-nonnull.patch"
                                        "nss-increase-test-timeout.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; Delete the bundled copy of these libraries.
                   (delete-file-recursively "nss/lib/zlib")
-                  (delete-file-recursively "nss/lib/sqlite")
-                  #t))))
+                  (delete-file-recursively "nss/lib/sqlite")))))
     (build-system gnu-build-system)
     (outputs '("out" "bin"))
     (arguments
-     `(#:parallel-build? #f ; not supported
-       #:make-flags
+     `(#:make-flags
        (let* ((out (assoc-ref %outputs "out"))
               (nspr (string-append (assoc-ref %build-inputs "nspr")))
               (rpath (string-append "-Wl,-rpath=" out "/lib/nss")))
@@ -119,27 +121,27 @@ in the Mozilla clients.")
        (modify-phases %standard-phases
          (replace 'configure
            (lambda _
-             (setenv "CC" "gcc")
+             (setenv "CC" ,(cc-for-target))
              ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
-             ,@(match (%current-system)
-                 ((or "x86_64-linux" "aarch64-linux")
-                  `((setenv "USE_64" "1")))
-                 (_
-                  '()))
-             #t))
+             ,@(if (target-64bit?)
+                   `((setenv "USE_64" "1"))
+                   '())))
          (replace 'check
-           (lambda _
-             ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
-             ;; The later requires a working DNS or /etc/hosts.
-             (setenv "DOMSUF" "localdomain")
-             (setenv "USE_IP" "TRUE")
-             (setenv "IP_ADDRESS" "127.0.0.1")
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (begin
+                   ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for
+                   ;; testing.  The latter requires a working DNS or /etc/hosts.
+                   (setenv "DOMSUF" "localdomain")
+                   (setenv "USE_IP" "TRUE")
+                   (setenv "IP_ADDRESS" "127.0.0.1")
 
-             ;; The "PayPalEE.cert" certificate expires every six months,
-             ;; leading to test failures:
-             ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
-             ;; work around that, set the time to roughly the release date.
-             (invoke "faketime" "2020-11-01" "./nss/tests/all.sh")))
+                   ;; The "PayPalEE.cert" certificate expires every six months,
+                   ;; leading to test failures:
+                   ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
+                   ;; work around that, set the time to roughly the release date.
+                   (invoke "faketime" "2021-06-01" "./nss/tests/all.sh"))
+                 (format #t "test suite not run~%"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -160,21 +162,23 @@ in the Mozilla clients.")
                ;; Install other files.
                (copy-recursively "dist/public/nss" inc)
                (copy-recursively (string-append obj "/bin") bin)
-               (copy-recursively (string-append obj "/lib") lib)
-               #t))))))
+               (copy-recursively (string-append obj "/lib") lib)))))))
     (inputs
-     `(("sqlite" ,sqlite)
+     `(;; XXX: Build with SQLite 3.33 to work around
+       ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1714874
+       ("sqlite" ,sqlite-3.33)
        ("zlib" ,zlib)))
-    (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
-    (native-inputs `(("perl" ,perl)
-                     ("libfaketime" ,libfaketime))) ;for tests
+    (propagated-inputs
+     `(("nspr" ,nspr)))                 ;required by nss.pc.
+    (native-inputs
+     `(("perl" ,perl)
+       ("libfaketime" ,libfaketime)))   ;for tests
 
     ;; The NSS test suite takes around 48 hours on Loongson 3A (MIPS) when
     ;; another build is happening concurrently on the same machine.
-    (properties '((timeout . 216000)))  ; 60 hours
+    (properties '((timeout . 216000)))  ;60 hours
 
-    (home-page
-     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
+    (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
     (synopsis "Network Security Services")
     (description
      "Network Security Services (@dfn{NSS}) is a set of libraries designed to
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 727c7a08c8..fd09459f24 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -7197,8 +7197,9 @@ browsers and Node.js.")
               #t)))))
     (native-inputs
      `(("which" ,which)
-       ("texlive" ,(texlive-union (list texlive-fonts-ec texlive-preprint
-                                        texlive-latex-hyperref texlive-bibtex)))))
+       ("texlive" ,(texlive-updmap.cfg
+                    (list texlive-fonts-ec texlive-preprint
+                          texlive-latex-hyperref texlive-bibtex)))))
     (propagated-inputs
      `(("hevea" ,hevea)))
     (home-page "https://www.lri.fr/~filliatr/bibtex2html/")
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 8b3892d2f0..aa49f5fb6a 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -37,7 +37,7 @@
 (define-public libtirpc
   (package
     (name "libtirpc")
-    (version "1.2.5")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/libtirpc/libtirpc/"
@@ -45,26 +45,22 @@
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1jl6a5kkw2vrp4gb6pmvf72rqimywvwfb9f7iz2xjg4wgq63bdpk"))))
+                "05zf16ilwwkzv4cccaac32nssrj3rg444n9pskiwbgk6y359an14"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'remote-dangling-symlink
-           (lambda _
+         (add-after 'unpack 'adjust-netconfig-reference
+           (lambda* (#:key outputs #:allow-other-keys)
              (substitute* '("man/netconfig.5"
                             "man/getnetconfig.3t"
                             "man/getnetpath.3t"
                             "man/rpc.3t"
                             "src/getnetconfig.c"
                             "tirpc/netconfig.h")
-               (("/etc/netconfig") (string-append %output "/etc/netconfig")))
-
-             ;; Remove the dangling symlinks since it breaks the
-             ;; 'patch-source-shebangs' file tree traversal.
-             (delete-file "INSTALL")
-             #t)))))
+               (("/etc/netconfig") (string-append (assoc-ref outputs "out")
+                                                  "/etc/netconfig"))))))))
     (inputs `(("mit-krb5" ,mit-krb5)))
     (home-page "https://sourceforge.net/projects/libtirpc/")
     (synopsis "Transport-independent Sun/ONC RPC implementation")
@@ -78,9 +74,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
   (package/inherit libtirpc
     (name "libtirpc-hurd")
     (source (origin (inherit (package-source libtirpc))
-                    (patches (append (origin-patches (package-source libtirpc))
-                                     (search-patches "libtirpc-hurd.patch"
-                                                     "libtirpc-hurd-client.patch")))))
+                    (patches (search-patches "libtirpc-hurd.patch"))))
     (arguments
      (substitute-keyword-arguments (package-arguments libtirpc)
        ((#:configure-flags flags ''())
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 400f10600f..861568c018 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,8 +62,7 @@
 (define-public openldap
   (package
    (name "openldap")
-   (replacement openldap-2.4.57)
-   (version "2.4.50")
+   (version "2.4.57")
    (source (origin
              (method url-fetch)
              ;; See <http://www.openldap.org/software/download/> for a list of
@@ -78,7 +78,7 @@
                          "openldap-release/openldap-" version ".tgz")))
              (sha256
               (base32
-               "1f46nlfwmys110j36sifm7ah8m8f3s10c3vaiikmmigmifapvdaw"))))
+               "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))
    (build-system gnu-build-system)
    (inputs `(("bdb" ,bdb-5.3)
              ("cyrus-sasl" ,cyrus-sasl)
@@ -126,27 +126,6 @@
    (license openldap2.8)
    (home-page "https://www.openldap.org/")))
 
-(define-public openldap-2.4.57
-  (package
-    (inherit openldap)
-    (version "2.4.57")
-    (source (origin
-              (method url-fetch)
-              ;; See <http://www.openldap.org/software/download/> for a list of
-              ;; mirrors.
-              (uri (list (string-append
-                          "ftp://mirror.switch.ch/mirror/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")
-                         (string-append
-                          "https://www.openldap.org/software/download/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")
-                         (string-append
-                          "ftp://ftp.dti.ad.jp/pub/net/OpenLDAP/"
-                          "openldap-release/openldap-" version ".tgz")))
-              (sha256
-               (base32
-                "0nmlyqhc52v24b4awh914sczmvxbazgq2cnlycvb9dgcwvhlgfn7"))))))
-
 (define-public nss-pam-ldapd
   (package
     (name "nss-pam-ldapd")
@@ -250,7 +229,7 @@ servers from Python programs.")
      `(#:modules ((srfi srfi-1)
                   (guix build gnu-build-system)
                   ((guix build python-build-system)
-                   #:select (python-version))
+                   #:select (add-installed-pythonpath))
                   (guix build utils))
        #:imported-modules ((guix build python-build-system)
                            ,@%gnu-build-system-modules)
@@ -281,8 +260,8 @@ servers from Python programs.")
                (("'/usr/bin/certutil'")
                 (string-append "'" (which "certutil") "'"))
                (("'/usr/bin/c_rehash'")
-                (string-append "'" (which "perl") "', '" (which "c_rehash") "'")))
-             #t))
+                (string-append "'" (which "perl") "', '"
+                               (which "c_rehash") "'")))))
          (add-after 'unpack 'overwrite-default-locations
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -300,28 +279,21 @@ servers from Python programs.")
                (substitute* '("src/lib389/lib389/instance/setup.py"
                               "src/lib389/lib389/instance/remove.py")
                  (("etc_dirsrv_path = .*")
-                  "etc_dirsrv_path = '/etc/dirsrv/'\n"))
-               #t)))
+                  "etc_dirsrv_path = '/etc/dirsrv/'\n")))))
          (add-after 'unpack 'fix-install-location-of-python-tools
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (pythondir (string-append
-                                out "/lib/python"
-                                (python-version (assoc-ref inputs "python"))
-                                "/site-packages/")))
+             (let* ((out (assoc-ref outputs "out")))
                ;; Install directory must be on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append (getenv "PYTHONPATH")
-                                      ":" pythondir))
+               (add-installed-pythonpath inputs outputs)
                ;; Install directory must exist.
                (mkdir-p pythondir)
                (substitute* "src/lib389/setup.py"
                  (("/usr") out))
                (substitute* "Makefile.am"
                  (("setup.py install --skip-build" m)
-                  (string-append m " --prefix=" out
-                                 " --root=/ --single-version-externally-managed"))))
-             #t))
+                  (string-append
+                   m " --prefix=" out
+                   " --root=/ --single-version-externally-managed"))))))
          (add-after 'build 'build-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
              ;; Set DETERMINISTIC_BUILD to override the embedded mtime in pyc
@@ -330,27 +302,24 @@ servers from Python programs.")
              ;; Use deterministic hashes for strings, bytes, and datetime
              ;; objects.
              (setenv "PYTHONHASHSEED" "0")
-             (apply invoke "make" "lib389" make-flags)
-             #t))
+             (apply invoke "make" "lib389" make-flags)))
          (add-after 'install 'install-python-tools
            (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "lib389-install" make-flags)
-             #t))
+             (apply invoke "make" "lib389-install" make-flags)))
          (add-after 'install-python-tools 'wrap-python-tools
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (pythonpath (getenv "GUIX_PYTHONPATH")))
                (for-each (lambda (file)
                            (wrap-program (string-append out file)
-                             `("PYTHONPATH" ":" prefix (,path))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,pythonpath))))
                          '("/sbin/dsconf"
                            "/sbin/dscreate"
                            "/sbin/dsctl"
                            "/sbin/dsidm"
                            "/bin/ds-logpipe.py"
                            "/bin/ds-replcheck"
-                           "/bin/readnsstate")))
-             #t)))))
+                           "/bin/readnsstate"))))))))
     (inputs
      `(("bdb" ,bdb)
        ("cracklib" ,cracklib)
@@ -365,7 +334,7 @@ servers from Python programs.")
        ("net-snmp" ,net-snmp)
        ("nspr" ,nspr)
        ("nss" ,nss)
-       ("nss:bin" ,nss "bin") ; for certutil
+       ("nss:bin" ,nss "bin")           ; for certutil
        ("openldap" ,openldap)
        ("openssl" ,openssl)             ; #included by net-snmp
        ("pcre" ,pcre)
@@ -431,4 +400,3 @@ Other features include:
 are mapped to a special Python case-insensitive dictionary, tracking the
 changes of the dictionary to modify the entry on the server easily.")
     (license expat)))
-
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index b969391ba9..7da8b23fe1 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -460,10 +460,6 @@ random passwords that pass the checks.")
                #t)))
          (add-after 'install 'manpage
            (lambda* (#:key outputs #:allow-other-keys)
-             ;; Without this substitution, it fails with
-             ;; ImportError: No module named 'gpg'
-             (substitute* "Makefile"
-               (("PYTHONPATH=.") ""))
              (invoke "make" "assword.1")
              (install-file
               "assword.1"
diff --git a/gnu/packages/patches/atlas-gfortran-compat.patch b/gnu/packages/patches/atlas-gfortran-compat.patch
new file mode 100644
index 0000000000..5b46f5a64d
--- /dev/null
+++ b/gnu/packages/patches/atlas-gfortran-compat.patch
@@ -0,0 +1,37 @@
+Fix build with gfortran 10.
+
+Taken from Debian:
+https://salsa.debian.org/science-team/atlas/-/blob/master/debian/patches/gfortran-10.patch
+
+--- a/interfaces/blas/C/testing/c_dblat1.f
++++ b/interfaces/blas/C/testing/c_dblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. DNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. DASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(DASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. DSCALTEST ..
+                CALL DSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
+--- a/interfaces/blas/C/testing/c_sblat1.f
++++ b/interfaces/blas/C/testing/c_sblat1.f
+@@ -247,11 +247,11 @@
+             IF (ICASE.EQ.7) THEN
+ *              .. SNRM2TEST ..
+                STEMP(1) = DTRUE1(NP1)
+-               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.8) THEN
+ *              .. SASUMTEST ..
+                STEMP(1) = DTRUE3(NP1)
+-               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC)
++               CALL STEST1(SASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
+             ELSE IF (ICASE.EQ.9) THEN
+ *              .. SSCALTEST ..
+                CALL SSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
diff --git a/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
new file mode 100644
index 0000000000..56d404da15
--- /dev/null
+++ b/gnu/packages/patches/bdb-5.3-atomics-on-gcc-9.patch
@@ -0,0 +1,22 @@
+Patch borrowed from Arch Linux. Allows compiling bdb 5.3 and earlier with GCC newer than 7.
+
+--- src/dbinc/atomic.h	2013-03-12 14:07:22.000000000 -0400
++++ src/dbinc/atomic.h.change	2013-03-12 14:06:35.000000000 -0400
+@@ -144,7 +144,7 @@
+ #define	atomic_inc(env, p)	__atomic_inc(p)
+ #define	atomic_dec(env, p)	__atomic_dec(p)
+ #define	atomic_compare_exchange(env, p, o, n)	\
+-	__atomic_compare_exchange((p), (o), (n))
++	__atomic_compare_exchange_db((p), (o), (n))
+ static inline int __atomic_inc(db_atomic_t *p)
+ {
+ 	int	temp;
+@@ -176,7 +176,7 @@
+  * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
+  * which configure could be changed to use.
+  */
+-static inline int __atomic_compare_exchange(
++static inline int __atomic_compare_exchange_db(
+ 	db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval)
+ {
+ 	atomic_value_t was;
diff --git a/gnu/packages/patches/binutils-libiberty-endianness-bug.patch b/gnu/packages/patches/binutils-libiberty-endianness-bug.patch
new file mode 100644
index 0000000000..e6c82f704e
--- /dev/null
+++ b/gnu/packages/patches/binutils-libiberty-endianness-bug.patch
@@ -0,0 +1,36 @@
+This patch fixes a bug exposed when running the libiberty test suite on
+big-endian machines.
+
+Original bug report:
+https://sourceware.org/bugzilla/show_bug.cgi?id=27751
+Follow-ups:
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100177
+https://gcc.gnu.org/pipermail/gcc-patches/2021-April/568314.html
+
+---
+ libiberty/rust-demangle.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c
+index 6fd8f6a4db0..848563fa3c3 100644
+--- a/libiberty/rust-demangle.c
++++ b/libiberty/rust-demangle.c
+@@ -1253,9 +1253,12 @@ demangle_const_char (struct rust_demangler *rdm)
+   else if (value == '\n')
+     PRINT ("\\n");
+   else if (value > ' ' && value < '~')
+-    /* Rust also considers many non-ASCII codepoints to be printable, but
+-       that logic is not easily ported to C. */
+-    print_str (rdm, (char *) &value, 1);
++    {
++      /* Rust also considers many non-ASCII codepoints to be printable, but
++      that logic is not easily ported to C. */
++      char c = value;
++      print_str (rdm, &c, 1);
++    }
+   else
+     {
+       PRINT ("\\u{");
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/coreutils-gnulib-tests.patch b/gnu/packages/patches/coreutils-gnulib-tests.patch
new file mode 100644
index 0000000000..7142401202
--- /dev/null
+++ b/gnu/packages/patches/coreutils-gnulib-tests.patch
@@ -0,0 +1,45 @@
+Fix Gnulib test failures showing up on ARMv7:
+
+  https://issues.guix.gnu.org/49459
+
+This is a backport of this Gnulib commit:
+
+  commit 175e0bc72808d564074c4adcc72aeadb74adfcc6
+  Author: Paul Eggert <eggert@cs.ucla.edu>
+  Date:   Thu Aug 27 17:52:58 2020 -0700
+
+      perror, strerror_r: remove unportable tests
+
+      Problem reported by Florian Weimer in:
+      https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
+      * tests/test-perror2.c (main):
+      * tests/test-strerror_r.c (main): Omit unportable tests.
+
+diff --git a/tests/test-perror2.c b/tests/test-perror2.c
+index 1d14eda7be..c6214dd25c 100644
+--- a/gnulib-tests/test-perror2.c
++++ b/gnulib-tests/test-perror2.c
+@@ -79,9 +79,6 @@ main (void)
+     errno = -5;
+     perror ("");
+     ASSERT (!ferror (stderr));
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+diff --git a/tests/test-strerror_r.c b/tests/test-strerror_r.c
+index b11d6fd9f6..c1dbcf837b 100644
+--- a/gnulib-tests/test-strerror_r.c
++++ b/gnulib-tests/test-strerror_r.c
+@@ -165,9 +165,6 @@ main (void)
+ 
+     strerror_r (EACCES, buf, sizeof buf);
+     strerror_r (-5, buf, sizeof buf);
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
diff --git a/gnu/packages/patches/cups-CVE-2020-10001.patch b/gnu/packages/patches/cups-CVE-2020-10001.patch
deleted file mode 100644
index 1b16c7d97c..0000000000
--- a/gnu/packages/patches/cups-CVE-2020-10001.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From efbea1742bd30f842fbbfb87a473e5c84f4162f9 Mon Sep 17 00:00:00 2001
-From: Michael R Sweet <msweet@msweet.org>
-Date: Mon, 1 Feb 2021 15:02:32 -0500
-Subject: [PATCH] Fix a buffer (read) overflow in ippReadIO (CVE-2020-10001)
-
----
-
-diff --git a/cups/ipp.c b/cups/ipp.c
-index 3d529346c..adbb26fba 100644
---- a/cups/ipp.c
-+++ b/cups/ipp.c
-@@ -2866,7 +2866,8 @@ ippReadIO(void       *src,		/* I - Data source */
-   unsigned char		*buffer,	/* Data buffer */
- 			string[IPP_MAX_TEXT],
- 					/* Small string buffer */
--			*bufptr;	/* Pointer into buffer */
-+			*bufptr,	/* Pointer into buffer */
-+			*bufend;	/* End of buffer */
-   ipp_attribute_t	*attr;		/* Current attribute */
-   ipp_tag_t		tag;		/* Current tag */
-   ipp_tag_t		value_tag;	/* Current value tag */
-@@ -3441,6 +3442,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 		}
- 
-                 bufptr = buffer;
-+                bufend = buffer + n;
- 
- 	       /*
- 	        * text-with-language and name-with-language are composite
-@@ -3454,7 +3456,7 @@ ippReadIO(void       *src,		/* I - Data source */
- 
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string))
-+		if ((bufptr + 2 + n + 2) > bufend || n >= (int)sizeof(string))
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP language length overflows value."), 1);
-@@ -3481,7 +3483,7 @@ ippReadIO(void       *src,		/* I - Data source */
-                 bufptr += 2 + n;
- 		n = (bufptr[0] << 8) | bufptr[1];
- 
--		if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE))
-+		if ((bufptr + 2 + n) > bufend)
- 		{
- 		  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
- 		                _("IPP string length overflows value."), 1);
diff --git a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch b/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
deleted file mode 100644
index 24be6e31d9..0000000000
--- a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-Make libcurl respect the SSL_CERT_{DIR,FILE} variables by default. The variables
-are fetched during initialization to preserve thread-safety (curl_global_init(3)
-must be called when no other threads exist).
-
-This fixes network functionality in rust:cargo, and probably removes the need
-for other future workarounds.
-===================================================================
---- curl-7.66.0.orig/lib/easy.c	2020-01-02 15:43:11.883921171 +0100
-+++ curl-7.66.0/lib/easy.c	2020-01-02 16:18:54.691882797 +0100
-@@ -134,6 +134,9 @@
- #  pragma warning(default:4232) /* MSVC extension, dllimport identity */
- #endif
- 
-+char * Curl_ssl_cert_dir = NULL;
-+char * Curl_ssl_cert_file = NULL;
-+
- /**
-  * curl_global_init() globally initializes curl given a bitwise set of the
-  * different features of what to initialize.
-@@ -155,6 +158,9 @@
- #endif
-   }
- 
-+  Curl_ssl_cert_dir = curl_getenv("SSL_CERT_DIR");
-+  Curl_ssl_cert_file = curl_getenv("SSL_CERT_FILE");
-+
-   if(!Curl_ssl_init()) {
-     DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
-     return CURLE_FAILED_INIT;
-@@ -260,6 +266,9 @@
-   Curl_ssl_cleanup();
-   Curl_resolver_global_cleanup();
- 
-+  free(Curl_ssl_cert_dir);
-+  free(Curl_ssl_cert_file);
-+
- #ifdef WIN32
-   Curl_win32_cleanup(init_flags);
- #endif
-diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
---- curl-7.66.0.orig/lib/url.c	2020-01-02 15:43:11.883921171 +0100
-+++ curl-7.66.0/lib/url.c	2020-01-02 16:21:11.563880346 +0100
-@@ -524,6 +524,21 @@
-     if(result)
-       return result;
- #endif
-+    extern char * Curl_ssl_cert_dir;
-+    extern char * Curl_ssl_cert_file;
-+    if(Curl_ssl_cert_dir) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], Curl_ssl_cert_dir))
-+            return result;
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], Curl_ssl_cert_dir))
-+            return result;
-+    }
-+
-+    if(Curl_ssl_cert_file) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], Curl_ssl_cert_file))
-+            return result;
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], Curl_ssl_cert_file))
-+            return result;
-+    }
-   }
- 
-   set->wildcard_enabled = FALSE;
diff --git a/gnu/packages/patches/curl-use-ssl-cert-env.patch b/gnu/packages/patches/curl-use-ssl-cert-env.patch
index c8e80b4445..24be6e31d9 100644
--- a/gnu/packages/patches/curl-use-ssl-cert-env.patch
+++ b/gnu/packages/patches/curl-use-ssl-cert-env.patch
@@ -47,14 +47,14 @@ diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
 +    extern char * Curl_ssl_cert_dir;
 +    extern char * Curl_ssl_cert_file;
 +    if(Curl_ssl_cert_dir) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_ORIG], Curl_ssl_cert_dir))
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], Curl_ssl_cert_dir))
 +            return result;
 +        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], Curl_ssl_cert_dir))
 +            return result;
 +    }
 +
 +    if(Curl_ssl_cert_file) {
-+        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_ORIG], Curl_ssl_cert_file))
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], Curl_ssl_cert_file))
 +            return result;
 +        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], Curl_ssl_cert_file))
 +            return result;
diff --git a/gnu/packages/patches/dbus-CVE-2020-12049.patch b/gnu/packages/patches/dbus-CVE-2020-12049.patch
deleted file mode 100644
index 71280144a1..0000000000
--- a/gnu/packages/patches/dbus-CVE-2020-12049.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Fix CVE-2020-12049:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-12049
-https://lists.freedesktop.org/archives/ftp-release/2020-June/000753.html
-
-Taken from upstream:
-
-https://gitlab.freedesktop.org/dbus/dbus/-/commit/272d484283883fa9ff95b69d924fff6cd34842f5
-
-diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
---- a/dbus/dbus-sysdeps-unix.c
-+++ b/dbus/dbus-sysdeps-unix.c
-@@ -435,18 +435,6 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       struct cmsghdr *cm;
-       dbus_bool_t found = FALSE;
- 
--      if (m.msg_flags & MSG_CTRUNC)
--        {
--          /* Hmm, apparently the control data was truncated. The bad
--             thing is that we might have completely lost a couple of fds
--             without chance to recover them. Hence let's treat this as a
--             serious error. */
--
--          errno = ENOSPC;
--          _dbus_string_set_length (buffer, start);
--          return -1;
--        }
--
-       for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
-         if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS)
-           {
-@@ -501,6 +489,26 @@ _dbus_read_socket_with_unix_fds (DBusSocket        fd,
-       if (!found)
-         *n_fds = 0;
- 
-+      if (m.msg_flags & MSG_CTRUNC)
-+        {
-+          unsigned int i;
-+
-+          /* Hmm, apparently the control data was truncated. The bad
-+             thing is that we might have completely lost a couple of fds
-+             without chance to recover them. Hence let's treat this as a
-+             serious error. */
-+
-+          /* We still need to close whatever fds we *did* receive,
-+           * otherwise they'll never get closed. (CVE-2020-12049) */
-+          for (i = 0; i < *n_fds; i++)
-+            close (fds[i]);
-+
-+          *n_fds = 0;
-+          errno = ENOSPC;
-+          _dbus_string_set_length (buffer, start);
-+          return -1;
-+        }
-+
-       /* put length back (doesn't actually realloc) */
-       _dbus_string_set_length (buffer, start + bytes_read);
- 
diff --git a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
index 4199dd18a5..fed4b76429 100644
--- a/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
+++ b/gnu/packages/patches/docbook-xsl-nonrecursive-string-subst.patch
@@ -5,7 +5,7 @@ https://bugzilla.samba.org/show_bug.cgi?id=9515
 https://bugzilla.gnome.org/show_bug.cgi?id=736077 (for xsltproc)
 
 Patch copied from Debian:
-https://anonscm.debian.org/cgit/collab-maint/docbook-xsl.git/tree/debian/patches/765567_non-recursive_string_subst.patch
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/765567_non-recursive_string_subst.patch
 
 Description: use EXSLT "replace" function when available
  A recursive implementation  of string.subst is problematic,
@@ -15,11 +15,12 @@ Bug-Debian: https://bugs.debian.org/750593
 
 --- a/lib/lib.xsl
 +++ b/lib/lib.xsl
-@@ -10,7 +10,10 @@
+@@ -6,7 +6,11 @@
+ 
       This module implements DTD-independent functions
  
-      ******************************************************************** -->
--<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+-     ******************************************************************** --><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
++     ******************************************************************** -->
 +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 +                xmlns:str="http://exslt.org/strings"
 +                exclude-result-prefixes="str"
@@ -27,7 +28,7 @@ Bug-Debian: https://bugs.debian.org/750593
  
  <xsl:template name="dot.count">
    <!-- Returns the number of "." characters in a string -->
-@@ -56,6 +59,9 @@
+@@ -52,6 +56,9 @@
    <xsl:param name="replacement"/>
  
    <xsl:choose>
diff --git a/gnu/packages/patches/docbook-xsl-support-old-url.patch b/gnu/packages/patches/docbook-xsl-support-old-url.patch
new file mode 100644
index 0000000000..5b7dda458f
--- /dev/null
+++ b/gnu/packages/patches/docbook-xsl-support-old-url.patch
@@ -0,0 +1,17 @@
+Docbook 1.79.2 makes very few changes apart from changing the canonical URL
+to cdn.docbook.org.  This patch adds support for the previous URL to avoid
+breaking packages that still use that.
+
+Adapted from Debian:
+https://salsa.debian.org/debian/docbook-xsl/-/blob/master/debian/patches/0005-catalog.xml-Compatibility-with-1.79.1-or-earlier.patch
+
+--- a/catalog.xml
++++ b/catalog.xml
+@@ -5,4 +5,7 @@
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/current/" rewritePrefix="./"/>
+   <rewriteURI uriStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
+   <rewriteSystem systemIdStartString="http://cdn.docbook.org/release/xsl/1.79.2/" rewritePrefix="./"/>
++  <!-- Also support old URI of v1.79.1 or earlier -->
++  <rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
++  <rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
+ </catalog>
diff --git a/gnu/packages/patches/doxygen-1.8.17-runtests.patch b/gnu/packages/patches/doxygen-1.8.17-runtests.patch
deleted file mode 100644
index 0340c72448..0000000000
--- a/gnu/packages/patches/doxygen-1.8.17-runtests.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-1.8.17 was released with a broken test runner.
-
-https://github.com/doxygen/doxygen/issues/7464
-
-Taken from upstream:
-https://github.com/doxygen/doxygen/commit/cd9dee013dc749a10bbe019c350e0e62b6635795
-
-diff --git a/testing/runtests.py b/testing/runtests.py
-index a4118b865..10fe50214 100755
---- a/testing/runtests.py
-+++ b/testing/runtests.py
-@@ -3,6 +3,7 @@
- from __future__ import print_function
- import argparse, glob, itertools, re, shutil, os, sys
- import subprocess
-+import shlex
- 
- config_reg = re.compile('.*\/\/\s*(?P<name>\S+):\s*(?P<value>.*)$')
- 
-@@ -28,10 +29,10 @@ def xpopen(cmd, cmd1="",encoding='utf-8-sig', getStderr=False):
- 		return os.popen(cmd).read() # Python 2 without encoding
- 	else:
- 		if (getStderr):
--			proc = subprocess.run(cmd1,encoding=encoding,capture_output=True) # Python 3 with encoding
--			return proc.stderr
-+			proc = subprocess.Popen(shlex.split(cmd1),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			return proc.stderr.read()
- 		else:
--			proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
-+			proc = subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding=encoding) # Python 3 with encoding
- 			return proc.stdout.read()
- 
- class Tester:
-@@ -137,7 +138,7 @@ def prepare_test(self):
- 				print('GENERATE_DOCBOOK=NO', file=f)
- 			if (self.args.xhtml):
- 				print('GENERATE_HTML=YES', file=f)
--			# HTML_OUTPUT can also be set locally
-+			# HTML_OUTPUT can also have been set locally
- 			print('HTML_OUTPUT=%s/html' % self.test_out, file=f)
- 			print('HTML_FILE_EXTENSION=.xhtml', file=f)
- 			if (self.args.pdf):
-@@ -184,7 +185,7 @@ def update_test(self,testmgr):
- 					print('Non-existing file %s after \'check:\' statement' % check_file)
- 					return
- 				# convert output to canonical form
--				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file)).read()
-+				data = xpopen('%s --format --noblanks --nowarning %s' % (self.args.xmllint,check_file))
- 				if data:
- 					# strip version
- 					data = re.sub(r'xsd" version="[0-9.-]+"','xsd" version=""',data).rstrip('\n')
-@@ -326,7 +327,7 @@ def perform_test(self,testmgr):
- 			tests.append(glob.glob('%s/*.xml' % (docbook_output)))
- 			tests.append(glob.glob('%s/*/*/*.xml' % (docbook_output)))
- 			tests = ' '.join(list(itertools.chain.from_iterable(tests))).replace(self.args.outputdir +'/','').replace('\\','/')
--			exe_string = '%s --nonet --postvalid %s' % (self.args.xmllint,tests)
-+			exe_string = '%s --noout --nonet --postvalid %s' % (self.args.xmllint,tests)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,docbook_output)
-@@ -346,7 +347,11 @@ def perform_test(self,testmgr):
- 				redirx=' 2> %s/temp >nul:'%html_output
- 			else:
- 				redirx='2>%s/temp >/dev/null'%html_output
--			exe_string = '%s --path dtd --nonet --postvalid %s/*xhtml' % (self.args.xmllint,html_output)
-+			check_file = []
-+			check_file.append(glob.glob('%s/*.xhtml' % (html_output)))
-+			check_file.append(glob.glob('%s/*/*/*.xhtml' % (html_output)))
-+			check_file = ' '.join(list(itertools.chain.from_iterable(check_file))).replace(self.args.outputdir +'/','').replace('\\','/')
-+			exe_string = '%s --noout --path dtd --nonet --postvalid %s' % (self.args.xmllint,check_file)
- 			exe_string1 = exe_string
- 			exe_string += ' %s' % (redirx)
- 			exe_string += ' %s more "%s/temp"' % (separ,html_output)
diff --git a/gnu/packages/patches/doxygen-test.patch b/gnu/packages/patches/doxygen-test.patch
deleted file mode 100644
index 1c0d4eb946..0000000000
--- a/gnu/packages/patches/doxygen-test.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Modify the expected outcome of test 012 so that it passes when bibtex is
-not in the path, as we do not wish to add texlive as an input just for this
-test.
-
-diff -u -r doxygen-1.8.7.orig/testing/012/citelist.xml doxygen-1.8.7/testing/012/citelist.xml
---- doxygen-1.8.7.orig/testing/012/citelist.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/citelist.xml	2014-04-24 23:49:43.000000000 +0200
-@@ -6,38 +6,6 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>
--        <variablelist>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_Be09"/>[1]</term>
--          </varlistentry>
--          <listitem>
--            <para>P.<nonbreakablespace/>Belotti. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_5">Disjunctive cuts for non-convex MINLP</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 117<ndash/>144.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_BertholdHeinzVigerske2009"/>[2]</term>
--          </varlistentry>
--          <listitem>
--            <para>T.<nonbreakablespace/>Berthold, S.<nonbreakablespace/>Heinz, and S.<nonbreakablespace/>Vigerske. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3_15">Extending a CIP framework to solve MIQCPs</ulink>. In <ulink url="#CITEREF_LeLe12">Lee and Leyffer</ulink> <ulink url="#CITEREF_LeLe12">[4]</ulink>, pages 427<ndash/>444.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_knuth79"/>[3]</term>
--          </varlistentry>
--          <listitem>
--            <para>Donald<nonbreakablespace/>E. Knuth. <emphasis>Tex and Metafont, New Directions in Typesetting</emphasis>. American Mathematical Society and Digital Press, Stanford, 1979.</para>
--            <para/>
--          </listitem>
--          <varlistentry>
--            <term><anchor id="citelist_1CITEREF_LeLe12"/>[4]</term>
--          </varlistentry>
--          <listitem>
--            <para>Jon Lee and Sven Leyffer, editors. <ulink url="http://doi.org/10.1007/978-1-4614-1927-3"><emphasis>Mixed Integer Nonlinear Programming</emphasis></ulink>, volume 154 of <emphasis>The IMA Volumes in Mathematics and its Applications</emphasis>. Springer, 2012.</para>
--            <para/>
--          </listitem>
--        </variablelist>
--      </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
-diff -u -r doxygen-1.8.7.orig/testing/012/indexpage.xml doxygen-1.8.7/testing/012/indexpage.xml
---- doxygen-1.8.7.orig/testing/012/indexpage.xml	2014-04-24 23:43:34.000000000 +0200
-+++ doxygen-1.8.7/testing/012/indexpage.xml	2014-04-24 23:44:05.000000000 +0200
-@@ -6,8 +6,8 @@
-     <briefdescription>
-     </briefdescription>
-     <detaileddescription>
--      <para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">[3]</ref> for more info.</para>
--      <para>Other references with cross references see <ref refid="citelist_1CITEREF_Be09" kindref="member">[1]</ref> and <ref refid="citelist_1CITEREF_BertholdHeinzVigerske2009" kindref="member">[2]</ref> for more info. </para>
-+      <para>See knuth79 for more info.</para>
-+      <para>Other references with cross references see Be09 and BertholdHeinzVigerske2009 for more info. </para>
-     </detaileddescription>
-   </compounddef>
- </doxygen>
diff --git a/gnu/packages/patches/findutils-test-rwlock-threads.patch b/gnu/packages/patches/findutils-test-rwlock-threads.patch
deleted file mode 100644
index 3062577c21..0000000000
--- a/gnu/packages/patches/findutils-test-rwlock-threads.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Skip "test-rwlock1" when multithreading is disabled, which is the case
-during bootstrapping on architectures not supported by GNU Mes.
-
-Taken from upstream gnulib:
-https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=fdff8bd09a7f053381f8bdb107ab5280b7c95959
-
-diff --git a/gnulib-tests/test-rwlock1.c b/gnulib-tests/test-rwlock1.c
---- a/gnulib-tests/test-rwlock1.c
-+++ b/gnulib-tests/test-rwlock1.c
-@@ -21,6 +21,8 @@
- 
- #include <config.h>
- 
-+#if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS
-+
- #include "glthread/lock.h"
- 
- #include <errno.h>
-@@ -151,3 +153,18 @@ main ()
-       sleep (1);
-     }
- }
-+
-+#else
-+
-+/* No multithreading available.  */
-+
-+#include <stdio.h>
-+
-+int
-+main ()
-+{
-+  fputs ("Skipping test: multithreading not enabled\n", stderr);
-+  return 77;
-+}
-+
-+#endif
-
diff --git a/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
new file mode 100644
index 0000000000..b6e942ee10
--- /dev/null
+++ b/gnu/packages/patches/fontconfig-cache-ignore-mtime.patch
@@ -0,0 +1,15 @@
+Pretend that stat's mtime is broken, so that the fontconfig cache does not
+depend upon modification time to determine if a cache is stale.
+
+diff --git a/src/fcstat.c b/src/fcstat.c
+index 5a2bd7c..d603a96 100644
+--- a/src/fcstat.c
++++ b/src/fcstat.c
+@@ -431,6 +431,7 @@ FcIsFsMmapSafe (int fd)
+ FcBool
+ FcIsFsMtimeBroken (const FcChar8 *dir)
+ {
++    return FcTrue;
+     int fd = FcOpen ((const char *) dir, O_RDONLY);
+ 
+     if (fd != -1)
diff --git a/gnu/packages/patches/fontconfig-hurd-path-max.patch b/gnu/packages/patches/fontconfig-hurd-path-max.patch
deleted file mode 100644
index f804e6801f..0000000000
--- a/gnu/packages/patches/fontconfig-hurd-path-max.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Avoid usage of PATH_MAX.
-
-Taken from https://salsa.debian.org/freedesktop-team/fontconfig/-/blob/master/debian/patches/path_max.patch
-
-Index: fontconfig-2.13.1/src/fccfg.c
-===================================================================
---- fontconfig-2.13.1.orig/src/fccfg.c
-+++ fontconfig-2.13.1/src/fccfg.c
-@@ -2231,7 +2231,7 @@ FcConfigRealFilename (FcConfig		*config,
- 
-     if (n)
-     {
--	FcChar8 buf[PATH_MAX];
-+	FcChar8 buf[FC_PATH_MAX];
- 	ssize_t len;
- 
- 	if (sysroot)
diff --git a/gnu/packages/patches/freeglut-gcc-compat.patch b/gnu/packages/patches/freeglut-gcc-compat.patch
new file mode 100644
index 0000000000..126bbd89f4
--- /dev/null
+++ b/gnu/packages/patches/freeglut-gcc-compat.patch
@@ -0,0 +1,53 @@
+Fix build failure with GCC 10.
+
+Taken from upstream:
+https://github.com/dcnieho/FreeGLUT/commit/b9998bbc1e1c329f6bf69c24606a2be7a4973b8c
+
+diff --git a/src/fg_gl2.c b/src/fg_gl2.c
+--- a/src/fg_gl2.c
++++ b/src/fg_gl2.c
+@@ -27,6 +27,20 @@
+ #include "fg_internal.h"
+ #include "fg_gl2.h"
+ 
++#ifndef GL_ES_VERSION_2_0
++/* GLES2 has the corresponding entry points built-in, and these fgh-prefixed
++ * names are defined in fg_gl2.h header to reference them, for any other case,
++ * define them as function pointers here.
++ */
++FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++FGH_PFNGLBUFFERDATAPROC fghBufferData;
++FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++#endif
++
+ void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib) {
+   if (fgStructure.CurrentWindow != NULL)
+     fgStructure.CurrentWindow->Window.attribute_v_coord = attrib;
+diff --git a/src/fg_gl2.h b/src/fg_gl2.h
+--- a/src/fg_gl2.h
++++ b/src/fg_gl2.h
+@@ -67,13 +67,13 @@ typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+ typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
+ typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+ 
+-FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
+-FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
+-FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
+-FGH_PFNGLBUFFERDATAPROC fghBufferData;
+-FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
+-FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
+-FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
++extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
++extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
++extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
++extern FGH_PFNGLBUFFERDATAPROC fghBufferData;
++extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
++extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
++extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
+ 
+ #    endif
+ 
diff --git a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
deleted file mode 100644
index 1358e30633..0000000000
--- a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Do not override PYTHONPATH when calling Python code from the Haskell
-daemons.  This is necessary because the Python library dependencies are
-only available through PYTHONPATH.
-
-diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
---- a/src/Ganeti/Query/Exec.hs
-+++ b/src/Ganeti/Query/Exec.hs
-@@ -99,12 +99,10 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
-   do
-     use_debug <- isDebugMode
-     env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
--            . M.insert "PYTHONPATH" AC.pythondir
-             . M.fromList)
-            `liftM` getEnvironment
-     execPy <- P.jqueueExecutorPy
-     logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
--               ++ " with PYTHONPATH=" ++ AC.pythondir
- 
-     (master, child) <- pipeClient connectConfig
-     let (rh, wh) = clientToHandle child
-
diff --git a/gnu/packages/patches/gcc-10-cross-environment-variables.patch b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
new file mode 100644
index 0000000000..414198657d
--- /dev/null
+++ b/gnu/packages/patches/gcc-10-cross-environment-variables.patch
@@ -0,0 +1,51 @@
+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.c b/gcc/gcc.c
+--- a/gcc/gcc.c
++++ b/gcc/gcc.c
+@@ -4474,7 +4474,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.c b/gcc/incpath.c
+--- a/gcc/incpath.c
++++ b/gcc/incpath.c
+@@ -472,8 +472,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);
+ 
+@@ -484,7 +484,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
+@@ -1244,4 +1244,6 @@ void gcc_stablesort (void *, size_t, size_t,
+    of the number.  */
+ #define PRsa(n) "%" #n PRIu64 "%c"
+ 
++#define LIBRARY_PATH_ENV "CROSS_LIBRARY_PATH"
++
+ #endif /* ! GCC_SYSTEM_H */
diff --git a/gnu/packages/patches/gcc-cross-gxx-include-dir.patch b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
new file mode 100644
index 0000000000..d6c4ffddc4
--- /dev/null
+++ b/gnu/packages/patches/gcc-cross-gxx-include-dir.patch
@@ -0,0 +1,73 @@
+This patch reverts upstream commit b4d3485e4fc1d:
+
+  https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=b4d3485e4fc1d029e620a59deb54b3f4f3f6b209
+
+Otherwise, GCC ends up searching the wrong target directory for cross-headers.
+
+diff --git a/gcc/configure b/gcc/configure
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -3689,11 +3689,6 @@ esac
+ fi
+ 
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -3705,10 +3700,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 715fcba0482..88136e232df 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -204,11 +204,6 @@ no)	;;
+ *)	gcc_gxx_include_dir=$with_gxx_include_dir ;;
+ esac])
+ 
+-# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
+-# the former in the latter and, upon success, compute gcc_gxx_include_dir as
+-# relative to the sysroot.
+-gcc_gxx_include_dir_add_sysroot=0
+-
+ # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
+ if test x${gcc_gxx_include_dir} = x; then
+   if test x${enable_version_specific_runtime_libs} = xyes; then
+@@ -220,10 +215,15 @@ if test x${gcc_gxx_include_dir} = x; then
+     fi
+     gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
+   fi
+-elif test "${with_sysroot+set}" = set; then
++fi
++
++gcc_gxx_include_dir_add_sysroot=0
++if test "${with_sysroot+set}" = set; then
+   gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
+   if test "${gcc_gxx_without_sysroot}"; then
+-    gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    if test x${with_sysroot} != x/; then
++      gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
++    fi
+     gcc_gxx_include_dir_add_sysroot=1
+   fi
+ fi
diff --git a/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch
new file mode 100644
index 0000000000..6329b129d3
--- /dev/null
+++ b/gnu/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch
@@ -0,0 +1,179 @@
+From 9b31dfda73ee2d1b56b3f0dcfd3246c2faa592fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?L=C3=A9o=20Le=20Bouter?= <lle-bout@zaclys.net>
+Date: Sun, 28 Mar 2021 19:47:25 +0200
+Subject: [PATCH] Revert "fix #303: gdlib.pc: use Requires instead of Libs
+ (#537)"
+
+This reverts commit 28ecfe77c817aff8ce56422d3e4e8533a281bc76.
+---
+ CMakeLists.txt        | 12 ------------
+ config/gdlib.pc.cmake |  4 +---
+ config/gdlib.pc.in    |  4 +---
+ configure.ac          | 11 +----------
+ src/CMakeLists.txt    |  6 ------
+ 5 files changed, 3 insertions(+), 34 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57cd95d..6bd0c73 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -53,8 +53,6 @@ SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+   "Single Directory for all static libraries."
+   )
+ 
+-SET(PKG_REQUIRES_PRIVATES "")
+-
+ if (USE_EXT_GD)
+ 	message("Using GD at: ${USE_EXT_GD}")
+ 	INCLUDE_DIRECTORIES(BEFORE ${GD_INCLUDE_DIR})
+@@ -170,13 +168,11 @@ else (USE_EXT_GD)
+ 		INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS})
+ 		SET(HAVE_FT2BUILD_H 1)
+ 		SET(HAVE_LIBFREETYPE 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES freetype2)
+ 	ENDIF(FREETYPE_FOUND)
+ 
+ 	IF(ZLIB_FOUND)
+ 		INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
+ 		SET(HAVE_LIBZ 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES zlib)
+ 	ENDIF(ZLIB_FOUND)
+ 
+ 	IF(WEBP_FOUND)
+@@ -192,7 +188,6 @@ else (USE_EXT_GD)
+ 	IF(PNG_FOUND)
+ 		INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
+ 		SET(HAVE_LIBPNG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libpng)
+ 	ENDIF(PNG_FOUND)
+ 
+ 	IF(ICONV_FOUND)
+@@ -209,25 +204,21 @@ else (USE_EXT_GD)
+ 	IF(XPM_FOUND)
+ 		INCLUDE_DIRECTORIES(${XPM_INCLUDE_DIR})
+ 		SET(HAVE_LIBXPM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES xpm)
+ 	ENDIF(XPM_FOUND)
+ 
+ 	IF(JPEG_FOUND)
+ 		INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
+ 		SET(HAVE_LIBJPEG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libjpeg)
+ 	ENDIF(JPEG_FOUND)
+ 
+ 	IF(TIFF_FOUND)
+ 		INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR})
+ 		SET(HAVE_LIBTIFF 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES libtiff-4)
+ 	ENDIF(TIFF_FOUND)
+ 
+ 	IF(FONTCONFIG_FOUND)
+ 		INCLUDE_DIRECTORIES(${FONTCONFIG_INCLUDE_DIR})
+ 		SET(HAVE_LIBFONTCONFIG 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVATES fontconfig)
+ 	ELSE (FONTCONFIG_FOUND)
+ 		SET(FONTCONFIG_LIBRARY "")
+ 		SET(FONTCONFIG_INCLUDE_DIR "")
+@@ -236,11 +227,8 @@ else (USE_EXT_GD)
+ 
+ 	IF(RAQM_FOUND)
+ 		INCLUDE_DIRECTORIES(${RAQM_INCLUDE_DIR})
+-		SET(HAVE_RAQM 1)
+-		LIST(APPEND PKG_REQUIRES_PRIVAES raqm)
+ 	ENDIF(RAQM_FOUND)
+ 
+-	string(REPLACE ";" ", " PKG_REQUIRES_PRIVATES "${PKG_REQUIRES_PRIVATES}")
+ 	SET(HAVE_CONFIG_H 1)
+ 
+ 	ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+diff --git a/config/gdlib.pc.cmake b/config/gdlib.pc.cmake
+index 5fc8af4..d1a0dda 100644
+--- a/config/gdlib.pc.cmake
++++ b/config/gdlib.pc.cmake
+@@ -6,8 +6,6 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+ Name: gd
+ Description: GD graphics library
+ Version: @GDLIB_VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@
++Libs.private: @LIBGD_DEP_LIBS@
+ Libs: -L${libdir} -lgd
+diff --git a/config/gdlib.pc.in b/config/gdlib.pc.in
+index d6bc375..b980a60 100644
+--- a/config/gdlib.pc.in
++++ b/config/gdlib.pc.in
+@@ -6,8 +6,6 @@ includedir=@includedir@
+ Name: gd
+ Description: GD graphics library
+ Version: @VERSION@
+-Requires:
+-Requires.private: @PKG_REQUIRES_PRIVATES@
+ Cflags: -I${includedir}
+-Libs.private: @LIBS_PRIVATES@ @LIBICONV@
++Libs.private: @LIBS@ @LIBICONV@
+ Libs: -L${libdir} -lgd
+diff --git a/configure.ac b/configure.ac
+index 535db68..329c99c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -33,9 +33,6 @@ AC_SUBST(GDLIB_LT_CURRENT)
+ AC_SUBST(GDLIB_LT_REVISION)
+ AC_SUBST(GDLIB_LT_AGE)
+ 
+-AC_SUBST(LIBS_PRIVATES)
+-AC_SUBST(PKG_REQUIRES_PRIVATES)
+-
+ AM_INIT_AUTOMAKE([1.11 foreign dist-xz -Wall -Werror subdir-objects])
+ AC_CONFIG_HEADERS([src/config.h:src/config.hin])
+ 
+@@ -133,7 +130,6 @@ m4_define([GD_LIB_CHECK], [dnl
+   AC_MSG_RESULT([$gd_with_lib])
+ 
+   gd_found_lib=no
+-  gd_require_pkg_name=""
+   if test "$gd_with_lib" != "no"; then
+     save_CPPFLAGS=$CPPFLAGS
+     save_LDFLAGS=$LDFLAGS
+@@ -165,11 +161,6 @@ m4_define([GD_LIB_CHECK], [dnl
+       $1][_CFLAGS="$gd_lib_cflags $][$1][_CFLAGS"
+       AS_VAR_APPEND([LIBS], [" $][$1][_LIBS"])
+       AS_VAR_APPEND([CPPFLAGS], [" $][$1][_CFLAGS"])
+-      if test -z "$gd_require_pkg_name"; then
+-        AS_VAR_APPEND([LIBS_PRIVATES], [" $][$1][_LIBS"])
+-      else
+-        AS_VAR_APPEND([PKG_REQUIRES_PRIVATES], ["  $gd_require_pkg_name"])
+-      fi
+     elif test "$gd_with_lib" = "yes"; then
+       AC_MSG_ERROR([$3 requested but not found])
+     else
+@@ -189,7 +180,7 @@ dnl $4 - pkg-config module to look for
+ dnl $5 - fallback test for the feature
+ m4_define([GD_LIB_PKG_CHECK], [dnl
+   GD_LIB_CHECK([$1], [$2], [$3], [dnl
+-    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes gd_require_pkg_name="$4"], [$5])
++    PKG_CHECK_MODULES([$1], [$4], [gd_found_lib=yes], [$5])
+   ])
+ ])
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 509c422..49adbd6 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -142,12 +142,6 @@ if (BUILD_STATIC_LIBS)
+ 	target_link_libraries(${GD_LIB_STATIC} ${LIBGD_DEP_LIBS})
+ endif()
+ 
+-SET(LIBS_PRIVATES
+-	${ICONV_LIBRARIES}
+-	${LIQ_LIBRARIES}
+-	${WEBP_LIBRARIES}
+-)
+-
+ set(GD_PROGRAMS gdcmpgif)
+ 
+ if (PNG_FOUND)
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch b/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
deleted file mode 100644
index e6ac4de00b..0000000000
--- a/gnu/packages/patches/gdk-pixbuf-CVE-2020-29385.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Fix CVE-2020-29385.  Note that we omit the binary test file
-tests/test-images/fail/hang_114.gif from the following commit, to avoid
-requiring 'git' to apply the patch.
-
-
-From bdd3acbd48a575d418ba6bf1b32d7bda2fae1c81 Mon Sep 17 00:00:00 2001
-From: Robert Ancell <robert.ancell@canonical.com>
-Date: Mon, 30 Nov 2020 12:26:12 +1300
-Subject: [PATCH] gif: Fix LZW decoder accepting invalid LZW code.
-
-The code value after a reset wasn't being validated, which means we would
-accept invalid codes. This could cause an infinite loop in the decoder.
-
-Fixes CVE-2020-29385
-
-Fixes https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/164
----
- gdk-pixbuf/lzw.c                    |  13 +++++++------
- tests/test-images/fail/hang_114.gif | Bin 0 -> 5561 bytes
- 2 files changed, 7 insertions(+), 6 deletions(-)
- create mode 100644 tests/test-images/fail/hang_114.gif
-
-diff --git a/gdk-pixbuf/lzw.c b/gdk-pixbuf/lzw.c
-index 9e052a6f7..105daf2b1 100644
---- a/gdk-pixbuf/lzw.c
-+++ b/gdk-pixbuf/lzw.c
-@@ -195,19 +195,20 @@ lzw_decoder_feed (LZWDecoder *self,
-                                 if (self->last_code != self->clear_code && self->code_table_size < MAX_CODES) {
-                                         if (self->code < self->code_table_size)
-                                                 add_code (self, self->code);
--                                        else if (self->code == self->code_table_size)
-+                                        else
-                                                 add_code (self, self->last_code);
--                                        else {
--                                                /* Invalid code received - just stop here */
--                                                self->last_code = self->eoi_code;
--                                                return output_length;
--                                        }
- 
-                                         /* When table is full increase code size */
-                                         if (self->code_table_size == (1 << self->code_size) && self->code_size < LZW_CODE_MAX)
-                                                 self->code_size++;
-                                 }
- 
-+                                /* Invalid code received - just stop here */
-+                                if (self->code >= self->code_table_size) {
-+                                        self->last_code = self->eoi_code;
-+                                        return output_length;
-+                                }
-+
-                                 /* Convert codeword into indexes */
-                                 n_written += write_indexes (self, output + n_written, output_length - n_written);
-                         }
diff --git a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch b/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
deleted file mode 100644
index b6658d7c7f..0000000000
--- a/gnu/packages/patches/ghostscript-CVE-2020-15900.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2020-15900.
-
-https://cve.circl.lu/cve/CVE-2020-15900
-https://artifex.com/security-advisories/CVE-2020-15900
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b
-
-diff --git a/psi/zstring.c b/psi/zstring.c
---- a/psi/zstring.c
-+++ b/psi/zstring.c
-@@ -142,13 +142,18 @@ search_impl(i_ctx_t *i_ctx_p, bool forward)
-     return 0;
- found:
-     op->tas.type_attrs = op1->tas.type_attrs;
--    op->value.bytes = ptr;
--    r_set_size(op, size);
-+    op->value.bytes = ptr;				/* match */
-+    op->tas.rsize = size;				/* match */
-     push(2);
--    op[-1] = *op1;
--    r_set_size(op - 1, ptr - op[-1].value.bytes);
--    op1->value.bytes = ptr + size;
--    r_set_size(op1, count + (!forward ? (size - 1) : 0));
-+    op[-1] = *op1;					/* pre */
-+    op[-3].value.bytes = ptr + size;			/* post */
-+    if (forward) {
-+        op[-1].tas.rsize = ptr - op[-1].value.bytes;	/* pre */
-+        op[-3].tas.rsize = count;			/* post */
-+    } else {
-+        op[-1].tas.rsize = count;			/* pre */
-+        op[-3].tas.rsize -= count + size;		/* post */
-+    }
-     make_true(op);
-     return 0;
- }
diff --git a/gnu/packages/patches/ghostscript-freetype-compat.patch b/gnu/packages/patches/ghostscript-freetype-compat.patch
deleted file mode 100644
index cc225b5ad6..0000000000
--- a/gnu/packages/patches/ghostscript-freetype-compat.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Fix build with FreeType 2.10.3 and newer.
-
-Taken from upstream:
-https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=41ef9a0bc36b9db7115fbe9623f989bfb47bbade
-
-diff --git a/base/fapi_ft.c b/base/fapi_ft.c
---- a/base/fapi_ft.c
-+++ b/base/fapi_ft.c
-@@ -125,7 +125,7 @@ static void
- delete_inc_int_info(gs_fapi_server * a_server,
-                     FT_IncrementalRec * a_inc_int_info);
- 
--FT_CALLBACK_DEF(void *)
-+static void *
- FF_alloc(FT_Memory memory, long size)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -133,7 +133,7 @@ FF_alloc(FT_Memory memory, long size)
-     return (gs_malloc(mem, size, 1, "FF_alloc"));
- }
- 
--FT_CALLBACK_DEF(void *)
-+static void *
-     FF_realloc(FT_Memory memory, long cur_size, long new_size, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
-@@ -153,7 +153,7 @@ FT_CALLBACK_DEF(void *)
-     return (tmp);
- }
- 
--FT_CALLBACK_DEF(void)
-+static void
-     FF_free(FT_Memory memory, void *block)
- {
-     gs_memory_t *mem = (gs_memory_t *) memory->user;
diff --git a/gnu/packages/patches/glib-CVE-2021-27218.patch b/gnu/packages/patches/glib-CVE-2021-27218.patch
deleted file mode 100644
index 00fa5ebf79..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27218.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Backport of:
-
-From 0f384c88a241bbbd884487b1c40b7b75f1e638d3 Mon Sep 17 00:00:00 2001
-From: Krzesimir Nowak <qdlacz@gmail.com>
-Date: Wed, 10 Feb 2021 23:51:07 +0100
-Subject: [PATCH] gbytearray: Do not accept too large byte arrays
-
-GByteArray uses guint for storing the length of the byte array, but it
-also has a constructor (g_byte_array_new_take) that takes length as a
-gsize. gsize may be larger than guint (64 bits for gsize vs 32 bits
-for guint). It is possible to call the function with a value greater
-than G_MAXUINT, which will result in silent length truncation. This
-may happen as a result of unreffing GBytes into GByteArray, so rather
-be loud about it.
-
-(Test case tweaked by Philip Withnall.)
-
-(Backport 2.66: Add #include gstrfuncsprivate.h in the test case for
-`g_memdup2()`.)
----
- glib/garray.c      |  6 ++++++
- glib/gbytes.c      |  4 ++++
- glib/tests/bytes.c | 35 ++++++++++++++++++++++++++++++++++-
- 3 files changed, 44 insertions(+), 1 deletion(-)
-
-diff --git a/glib/garray.c b/glib/garray.c
-index 942e74c9f..fb1a42aaf 100644
---- a/glib/garray.c
-+++ b/glib/garray.c
-@@ -2013,6 +2013,10 @@ g_byte_array_new (void)
-  * Create byte array containing the data. The data will be owned by the array
-  * and will be freed with g_free(), i.e. it could be allocated using g_strdup().
-  *
-+ * Do not use it if @len is greater than %G_MAXUINT. #GByteArray
-+ * stores the length of its data in #guint, which may be shorter than
-+ * #gsize.
-+ *
-  * Since: 2.32
-  *
-  * Returns: (transfer full): a new #GByteArray
-@@ -2024,6 +2028,8 @@ g_byte_array_new_take (guint8 *data,
-   GByteArray *array;
-   GRealArray *real;
- 
-+  g_return_val_if_fail (len <= G_MAXUINT, NULL);
-+
-   array = g_byte_array_new ();
-   real = (GRealArray *)array;
-   g_assert (real->data == NULL);
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index 7b72886e5..d56abe6c3 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -519,6 +519,10 @@ g_bytes_unref_to_data (GBytes *bytes,
-  * g_bytes_new(), g_bytes_new_take() or g_byte_array_free_to_bytes(). In all
-  * other cases the data is copied.
-  *
-+ * Do not use it if @bytes contains more than %G_MAXUINT
-+ * bytes. #GByteArray stores the length of its data in #guint, which
-+ * may be shorter than #gsize, that @bytes is using.
-+ *
-  * Returns: (transfer full): a new mutable #GByteArray containing the same byte data
-  *
-  * Since: 2.32
-diff --git a/glib/tests/bytes.c b/glib/tests/bytes.c
-index 5ea5c2b35..15a6aaad6 100644
---- a/glib/tests/bytes.c
-+++ b/glib/tests/bytes.c
-@@ -10,12 +10,12 @@
-  */
- 
- #undef G_DISABLE_ASSERT
--#undef G_LOG_DOMAIN
- 
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "glib.h"
-+#include "glib/gstrfuncsprivate.h"
- 
- /* Keep in sync with glib/gbytes.c */
- struct _GBytes
-@@ -333,6 +333,38 @@ test_to_array_transferred (void)
-   g_byte_array_unref (array);
- }
- 
-+static void
-+test_to_array_transferred_oversize (void)
-+{
-+  g_test_message ("g_bytes_unref_to_array() can only take GBytes up to "
-+                  "G_MAXUINT in length; test that longer ones are rejected");
-+
-+  if (sizeof (guint) >= sizeof (gsize))
-+    {
-+      g_test_skip ("Skipping test as guint is not smaller than gsize");
-+    }
-+  else if (g_test_undefined ())
-+    {
-+      GByteArray *array = NULL;
-+      GBytes *bytes = NULL;
-+      gpointer data = g_memdup2 (NYAN, N_NYAN);
-+      gsize len = ((gsize) G_MAXUINT) + 1;
-+
-+      bytes = g_bytes_new_take (data, len);
-+      g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
-+                             "g_byte_array_new_take: assertion 'len <= G_MAXUINT' failed");
-+      array = g_bytes_unref_to_array (g_steal_pointer (&bytes));
-+      g_test_assert_expected_messages ();
-+      g_assert_null (array);
-+
-+      g_free (data);
-+    }
-+  else
-+    {
-+      g_test_skip ("Skipping test as testing undefined behaviour is disabled");
-+    }
-+}
-+
- static void
- test_to_array_two_refs (void)
- {
-@@ -410,6 +442,7 @@ main (int argc, char *argv[])
-   g_test_add_func ("/bytes/to-array/transfered", test_to_array_transferred);
-   g_test_add_func ("/bytes/to-array/two-refs", test_to_array_two_refs);
-   g_test_add_func ("/bytes/to-array/non-malloc", test_to_array_non_malloc);
-+  g_test_add_func ("/bytes/to-array/transferred/oversize", test_to_array_transferred_oversize);
-   g_test_add_func ("/bytes/null", test_null);
- 
-   return g_test_run ();
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-01.patch b/gnu/packages/patches/glib-CVE-2021-27219-01.patch
deleted file mode 100644
index 5db360d468..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-01.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-Backport of:
-
-From 5e5f75a77e399c638be66d74e5daa8caeb433e00 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:30:52 +0000
-Subject: [PATCH 01/11] gstrfuncs: Add internal g_memdup2() function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will replace the existing `g_memdup()` function for use within
-GLib. It has an unavoidable security flaw of taking its `byte_size`
-argument as a `guint` rather than as a `gsize`. Most callers will
-expect it to be a `gsize`, and may pass in large values which could
-silently be truncated, resulting in an undersize allocation compared
-to what the caller expects.
-
-This could lead to a classic buffer overflow vulnerability for many
-callers of `g_memdup()`.
-
-`g_memdup2()`, in comparison, takes its `byte_size` as a `gsize`.
-
-Spotted by Kevin Backhouse of GHSL.
-
-In GLib 2.68, `g_memdup2()` will be a new public API. In this version
-for backport to older stable releases, it’s a new `static inline` API
-in a private header, so that use of `g_memdup()` within GLib can be
-fixed without adding a new API in a stable release series.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: GHSL-2021-045
-Helps: #2319
----
- docs/reference/glib/meson.build |  1 +
- glib/gstrfuncsprivate.h         | 55 +++++++++++++++++++++++++++++++++
- glib/meson.build                |  1 +
- glib/tests/strfuncs.c           | 23 ++++++++++++++
- 4 files changed, 80 insertions(+)
- create mode 100644 glib/gstrfuncsprivate.h
-
-diff --git a/docs/reference/glib/meson.build b/docs/reference/glib/meson.build
-index bba7649f0..ee39f6d04 100644
---- a/docs/reference/glib/meson.build
-+++ b/docs/reference/glib/meson.build
-@@ -22,6 +22,7 @@ if get_option('gtk_doc')
-     'gprintfint.h',
-     'gmirroringtable.h',
-     'gscripttable.h',
-+    'gstrfuncsprivate.h',
-     'glib-mirroring-tab',
-     'gnulib',
-     'pcre',
-diff --git a/glib/gstrfuncsprivate.h b/glib/gstrfuncsprivate.h
-new file mode 100644
-index 000000000..85c88328a
---- /dev/null
-+++ b/glib/gstrfuncsprivate.h
-@@ -0,0 +1,55 @@
-+/* GLIB - Library of useful routines for C programming
-+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <glib.h>
-+#include <string.h>
-+
-+/*
-+ * g_memdup2:
-+ * @mem: (nullable): the memory to copy.
-+ * @byte_size: the number of bytes to copy.
-+ *
-+ * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
-+ * from @mem. If @mem is %NULL it returns %NULL.
-+ *
-+ * This replaces g_memdup(), which was prone to integer overflows when
-+ * converting the argument from a #gsize to a #guint.
-+ *
-+ * This static inline version is a backport of the new public API from
-+ * GLib 2.68, kept internal to GLib for backport to older stable releases.
-+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2319.
-+ *
-+ * Returns: (nullable): a pointer to the newly-allocated copy of the memory,
-+ *    or %NULL if @mem is %NULL.
-+ * Since: 2.68
-+ */
-+static inline gpointer
-+g_memdup2 (gconstpointer mem,
-+           gsize         byte_size)
-+{
-+  gpointer new_mem;
-+
-+  if (mem && byte_size != 0)
-+    {
-+      new_mem = g_malloc (byte_size);
-+      memcpy (new_mem, mem, byte_size);
-+    }
-+  else
-+    new_mem = NULL;
-+
-+  return new_mem;
-+}
-diff --git a/glib/meson.build b/glib/meson.build
-index aaf5f00f5..5a6eea397 100644
---- a/glib/meson.build
-+++ b/glib/meson.build
-@@ -268,6 +268,7 @@ glib_sources = files(
-   'gslist.c',
-   'gstdio.c',
-   'gstrfuncs.c',
-+  'gstrfuncsprivate.h',
-   'gstring.c',
-   'gstringchunk.c',
-   'gtestutils.c',
-diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c
-index e1f9619c7..d968afff9 100644
---- a/glib/tests/strfuncs.c
-+++ b/glib/tests/strfuncs.c
-@@ -32,6 +32,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- #if defined (_MSC_VER) && (_MSC_VER <= 1800)
- #define isnan(x) _isnan(x)
- 
-@@ -219,6 +221,26 @@ test_memdup (void)
-   g_free (str_dup);
- }
- 
-+/* Testing g_memdup2() function with various positive and negative cases */
-+static void
-+test_memdup2 (void)
-+{
-+  gchar *str_dup = NULL;
-+  const gchar *str = "The quick brown fox jumps over the lazy dog";
-+
-+  /* Testing negative cases */
-+  g_assert_null (g_memdup2 (NULL, 1024));
-+  g_assert_null (g_memdup2 (str, 0));
-+  g_assert_null (g_memdup2 (NULL, 0));
-+
-+  /* Testing normal usage cases */
-+  str_dup = g_memdup2 (str, strlen (str) + 1);
-+  g_assert_nonnull (str_dup);
-+  g_assert_cmpstr (str, ==, str_dup);
-+
-+  g_free (str_dup);
-+}
-+
- /* Testing g_strpcpy() function with various positive and negative cases */
- static void
- test_stpcpy (void)
-@@ -2523,6 +2545,7 @@ main (int   argc,
-   g_test_add_func ("/strfuncs/has-prefix", test_has_prefix);
-   g_test_add_func ("/strfuncs/has-suffix", test_has_suffix);
-   g_test_add_func ("/strfuncs/memdup", test_memdup);
-+  g_test_add_func ("/strfuncs/memdup2", test_memdup2);
-   g_test_add_func ("/strfuncs/stpcpy", test_stpcpy);
-   g_test_add_func ("/strfuncs/str_match_string", test_str_match_string);
-   g_test_add_func ("/strfuncs/str_tokenize_and_fold", test_str_tokenize_and_fold);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-02.patch b/gnu/packages/patches/glib-CVE-2021-27219-02.patch
deleted file mode 100644
index 431959fa8f..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-02.patch
+++ /dev/null
@@ -1,264 +0,0 @@
-Backport of:
-
-From be8834340a2d928ece82025463ae23dee2c333d0 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:37:56 +0000
-Subject: [PATCH 02/11] gio: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdbusconnection.c                 | 5 +++--
- gio/gdbusinterfaceskeleton.c          | 3 ++-
- gio/gfile.c                           | 7 ++++---
- gio/gsettingsschema.c                 | 5 +++--
- gio/gwin32registrykey.c               | 8 +++++---
- gio/tests/async-close-output-stream.c | 6 ++++--
- gio/tests/gdbus-export.c              | 5 +++--
- gio/win32/gwinhttpfile.c              | 9 +++++----
- 8 files changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
-index f1f0921d4..d56453486 100644
---- a/gio/gdbusconnection.c
-+++ b/gio/gdbusconnection.c
-@@ -110,6 +110,7 @@
- #include "gasyncinitable.h"
- #include "giostream.h"
- #include "gasyncresult.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gmarshal-internal.h"
- 
-@@ -3997,7 +3998,7 @@ _g_dbus_interface_vtable_copy (const GDBusInterfaceVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusInterfaceVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-@@ -4014,7 +4015,7 @@ _g_dbus_subtree_vtable_copy (const GDBusSubtreeVTable *vtable)
-   /* Don't waste memory by copying padding - remember to update this
-    * when changing struct _GDBusSubtreeVTable in gdbusconnection.h
-    */
--  return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
-+  return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
- }
- 
- static void
-diff --git a/gio/gdbusinterfaceskeleton.c b/gio/gdbusinterfaceskeleton.c
-index 4a06516c1..4a4b719a5 100644
---- a/gio/gdbusinterfaceskeleton.c
-+++ b/gio/gdbusinterfaceskeleton.c
-@@ -28,6 +28,7 @@
- #include "gdbusmethodinvocation.h"
- #include "gdbusconnection.h"
- #include "gmarshal-internal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtask.h"
- #include "gioerror.h"
- 
-@@ -701,7 +702,7 @@ add_connection_locked (GDBusInterfaceSkeleton *interface_,
-        * properly before building the hooked_vtable, so we create it
-        * once at the last minute.
-        */
--      interface_->priv->hooked_vtable = g_memdup (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-+      interface_->priv->hooked_vtable = g_memdup2 (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
-       interface_->priv->hooked_vtable->method_call = skeleton_intercept_handle_method_call;
-     }
- 
-diff --git a/gio/gfile.c b/gio/gfile.c
-index ba93f7c75..88b341e7d 100644
---- a/gio/gfile.c
-+++ b/gio/gfile.c
-@@ -60,6 +60,7 @@
- #include "gasyncresult.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- 
- /**
-@@ -7884,7 +7885,7 @@ measure_disk_usage_progress (gboolean reporting,
-   g_main_context_invoke_full (g_task_get_context (task),
-                               g_task_get_priority (task),
-                               measure_disk_usage_invoke_progress,
--                              g_memdup (&progress, sizeof progress),
-+                              g_memdup2 (&progress, sizeof progress),
-                               g_free);
- }
- 
-@@ -7902,7 +7903,7 @@ measure_disk_usage_thread (GTask        *task,
-                                  data->progress_callback ? measure_disk_usage_progress : NULL, task,
-                                  &result.disk_usage, &result.num_dirs, &result.num_files,
-                                  &error))
--    g_task_return_pointer (task, g_memdup (&result, sizeof result), g_free);
-+    g_task_return_pointer (task, g_memdup2 (&result, sizeof result), g_free);
-   else
-     g_task_return_error (task, error);
- }
-@@ -7926,7 +7927,7 @@ g_file_real_measure_disk_usage_async (GFile                        *file,
- 
-   task = g_task_new (file, cancellable, callback, user_data);
-   g_task_set_source_tag (task, g_file_real_measure_disk_usage_async);
--  g_task_set_task_data (task, g_memdup (&data, sizeof data), g_free);
-+  g_task_set_task_data (task, g_memdup2 (&data, sizeof data), g_free);
-   g_task_set_priority (task, io_priority);
- 
-   g_task_run_in_thread (task, measure_disk_usage_thread);
-diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
-index 3a60b8c64..dded9b1ca 100644
---- a/gio/gsettingsschema.c
-+++ b/gio/gsettingsschema.c
-@@ -20,6 +20,7 @@
- 
- #include "gsettingsschema-internal.h"
- #include "gsettings.h"
-+#include "gstrfuncsprivate.h"
- 
- #include "gvdb/gvdb-reader.h"
- #include "strinfo.c"
-@@ -1058,9 +1059,9 @@ g_settings_schema_list_children (GSettingsSchema *schema)
- 
-       if (g_str_has_suffix (key, "/"))
-         {
--          gint length = strlen (key);
-+          gsize length = strlen (key);
- 
--          strv[j] = g_memdup (key, length);
-+          strv[j] = g_memdup2 (key, length);
-           strv[j][length - 1] = '\0';
-           j++;
-         }
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index c19fede4e..619fd48af 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -28,6 +28,8 @@
- #include <ntstatus.h>
- #include <winternl.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #ifndef _WDMDDK_
- typedef enum _KEY_INFORMATION_CLASS {
-   KeyBasicInformation,
-@@ -247,7 +249,7 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_name_size = iter->value_name_size;
- 
-   if (iter->value_data != NULL)
--    new_iter->value_data = g_memdup (iter->value_data, iter->value_data_size);
-+    new_iter->value_data = g_memdup2 (iter->value_data, iter->value_data_size);
- 
-   new_iter->value_data_size = iter->value_data_size;
- 
-@@ -268,8 +270,8 @@ g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter)
-   new_iter->value_data_expanded_charsize = iter->value_data_expanded_charsize;
- 
-   if (iter->value_data_expanded_u8 != NULL)
--    new_iter->value_data_expanded_u8 = g_memdup (iter->value_data_expanded_u8,
--                                                 iter->value_data_expanded_charsize);
-+    new_iter->value_data_expanded_u8 = g_memdup2 (iter->value_data_expanded_u8,
-+                                                  iter->value_data_expanded_charsize);
- 
-   new_iter->value_data_expanded_u8_size = iter->value_data_expanded_charsize;
- 
-diff --git a/gio/tests/async-close-output-stream.c b/gio/tests/async-close-output-stream.c
-index 5f6620275..d3f97a119 100644
---- a/gio/tests/async-close-output-stream.c
-+++ b/gio/tests/async-close-output-stream.c
-@@ -24,6 +24,8 @@
- #include <stdlib.h>
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- #define DATA_TO_WRITE "Hello world\n"
- 
- typedef struct
-@@ -147,9 +149,9 @@ prepare_data (SetupData *data,
- 
-   data->expected_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (data->data_stream));
- 
--  g_assert_cmpint (data->expected_size, >, 0);
-+  g_assert_cmpuint (data->expected_size, >, 0);
- 
--  data->expected_output = g_memdup (written, (guint)data->expected_size);
-+  data->expected_output = g_memdup2 (written, data->expected_size);
- 
-   /* then recreate the streams and prepare them for the asynchronous close */
-   destroy_streams (data);
-diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c
-index 506c7458a..5513306f8 100644
---- a/gio/tests/gdbus-export.c
-+++ b/gio/tests/gdbus-export.c
-@@ -23,6 +23,7 @@
- #include <string.h>
- 
- #include "gdbus-tests.h"
-+#include "gstrfuncsprivate.h"
- 
- /* all tests rely on a shared mainloop */
- static GMainLoop *loop = NULL;
-@@ -671,7 +672,7 @@ subtree_introspect (GDBusConnection       *connection,
-       g_assert_not_reached ();
-     }
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-@@ -727,7 +728,7 @@ dynamic_subtree_introspect (GDBusConnection       *connection,
- {
-   const GDBusInterfaceInfo *interfaces[2] = { &dyna_interface_info, NULL };
- 
--  return g_memdup (interfaces, 2 * sizeof (void *));
-+  return g_memdup2 (interfaces, 2 * sizeof (void *));
- }
- 
- static const GDBusInterfaceVTable *
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index cf5eed31d..040ee8564 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -29,6 +29,7 @@
- #include "gio/gfile.h"
- #include "gio/gfileattribute.h"
- #include "gio/gfileinfo.h"
-+#include "gstrfuncsprivate.h"
- #include "gwinhttpfile.h"
- #include "gwinhttpfileinputstream.h"
- #include "gwinhttpfileoutputstream.h"
-@@ -393,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-03.patch b/gnu/packages/patches/glib-CVE-2021-27219-03.patch
deleted file mode 100644
index 99e849c43c..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-03.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From 6110caea45b235420b98cd41d845cc92238f6781 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:39:25 +0000
-Subject: [PATCH 03/11] gobject: Use g_memdup2() instead of g_memdup() in
- obvious places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()`), so that they use
-`g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gobject/gsignal.c     | 3 ++-
- gobject/gtype.c       | 9 +++++----
- gobject/gtypemodule.c | 3 ++-
- gobject/tests/param.c | 4 +++-
- 4 files changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/gobject/gsignal.c b/gobject/gsignal.c
-index 77d8f211e..41c54ab57 100644
---- a/gobject/gsignal.c
-+++ b/gobject/gsignal.c
-@@ -28,6 +28,7 @@
- #include <signal.h>
- 
- #include "gsignal.h"
-+#include "gstrfuncsprivate.h"
- #include "gtype-private.h"
- #include "gbsearcharray.h"
- #include "gvaluecollector.h"
-@@ -1730,7 +1731,7 @@ g_signal_newv (const gchar       *signal_name,
-   node->single_va_closure_is_valid = FALSE;
-   node->flags = signal_flags & G_SIGNAL_FLAGS_MASK;
-   node->n_params = n_params;
--  node->param_types = g_memdup (param_types, sizeof (GType) * n_params);
-+  node->param_types = g_memdup2 (param_types, sizeof (GType) * n_params);
-   node->return_type = return_type;
-   node->class_closure_bsa = NULL;
-   if (accumulator)
-diff --git a/gobject/gtype.c b/gobject/gtype.c
-index 7d3789400..8441b90e9 100644
---- a/gobject/gtype.c
-+++ b/gobject/gtype.c
-@@ -33,6 +33,7 @@
- 
- #include "glib-private.h"
- #include "gconstructor.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- #include <windows.h>
-@@ -1470,7 +1471,7 @@ type_add_interface_Wm (TypeNode             *node,
-   iholder->next = iface_node_get_holders_L (iface);
-   iface_node_set_holders_W (iface, iholder);
-   iholder->instance_type = NODE_TYPE (node);
--  iholder->info = info ? g_memdup (info, sizeof (*info)) : NULL;
-+  iholder->info = info ? g_memdup2 (info, sizeof (*info)) : NULL;
-   iholder->plugin = plugin;
- 
-   /* create an iface entry for this type */
-@@ -1731,7 +1732,7 @@ type_iface_retrieve_holder_info_Wm (TypeNode *iface,
-         INVALID_RECURSION ("g_type_plugin_*", iholder->plugin, NODE_NAME (iface));
-       
-       check_interface_info_I (iface, instance_type, &tmp_info);
--      iholder->info = g_memdup (&tmp_info, sizeof (tmp_info));
-+      iholder->info = g_memdup2 (&tmp_info, sizeof (tmp_info));
-     }
-   
-   return iholder;	/* we don't modify write lock upon returning NULL */
-@@ -2016,10 +2017,10 @@ type_iface_vtable_base_init_Wm (TypeNode *iface,
-       IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
-       
-       if (pentry)
--	vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
-+	vtable = g_memdup2 (pentry->vtable, iface->data->iface.vtable_size);
-     }
-   if (!vtable)
--    vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-+    vtable = g_memdup2 (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
-   entry->vtable = vtable;
-   vtable->g_type = NODE_TYPE (iface);
-   vtable->g_instance_type = NODE_TYPE (node);
-diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
-index 4ecaf8c88..20911fafd 100644
---- a/gobject/gtypemodule.c
-+++ b/gobject/gtypemodule.c
-@@ -19,6 +19,7 @@
- 
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
- #include "gtypeplugin.h"
- #include "gtypemodule.h"
- 
-@@ -436,7 +437,7 @@ g_type_module_register_type (GTypeModule     *module,
-   module_type_info->loaded = TRUE;
-   module_type_info->info = *type_info;
-   if (type_info->value_table)
--    module_type_info->info.value_table = g_memdup (type_info->value_table,
-+    module_type_info->info.value_table = g_memdup2 (type_info->value_table,
- 						   sizeof (GTypeValueTable));
- 
-   return module_type_info->type;
-diff --git a/gobject/tests/param.c b/gobject/tests/param.c
-index 758289bf8..971cff162 100644
---- a/gobject/tests/param.c
-+++ b/gobject/tests/param.c
-@@ -2,6 +2,8 @@
- #include <glib-object.h>
- #include <stdlib.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static void
- test_param_value (void)
- {
-@@ -851,7 +853,7 @@ main (int argc, char *argv[])
-             test_path = g_strdup_printf ("/param/implement/subprocess/%d-%d-%d-%d",
-                                          data.change_this_flag, data.change_this_type,
-                                          data.use_this_flag, data.use_this_type);
--            test_data = g_memdup (&data, sizeof (TestParamImplementData));
-+            test_data = g_memdup2 (&data, sizeof (TestParamImplementData));
-             g_test_add_data_func_full (test_path, test_data, test_param_implement_child, g_free);
-             g_free (test_path);
-           }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-04.patch b/gnu/packages/patches/glib-CVE-2021-27219-04.patch
deleted file mode 100644
index 3ae01f34b1..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-04.patch
+++ /dev/null
@@ -1,308 +0,0 @@
-Backport of:
-
-From 0736b7c1e7cf4232c5d7eb2b0fbfe9be81bd3baa Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:41:21 +0000
-Subject: [PATCH 04/11] glib: Use g_memdup2() instead of g_memdup() in obvious
- places
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Convert all the call sites which use `g_memdup()`’s length argument
-trivially (for example, by passing a `sizeof()` or an existing `gsize`
-variable), so that they use `g_memdup2()` instead.
-
-In almost all of these cases the use of `g_memdup()` would not have
-caused problems, but it will soon be deprecated, so best port away from
-it
-
-In particular, this fixes an overflow within `g_bytes_new()`, identified
-as GHSL-2021-045 by GHSL team member Kevin Backhouse.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Fixes: GHSL-2021-045
-Helps: #2319
----
- glib/gbytes.c               | 6 ++++--
- glib/gdir.c                 | 3 ++-
- glib/ghash.c                | 7 ++++---
- glib/giochannel.c           | 3 ++-
- glib/gslice.c               | 3 ++-
- glib/gtestutils.c           | 3 ++-
- glib/gvariant.c             | 7 ++++---
- glib/gvarianttype.c         | 3 ++-
- glib/tests/array-test.c     | 4 +++-
- glib/tests/option-context.c | 6 ++++--
- 10 files changed, 29 insertions(+), 16 deletions(-)
-
-diff --git a/glib/gbytes.c b/glib/gbytes.c
-index d56abe6c3..dee494820 100644
---- a/glib/gbytes.c
-+++ b/glib/gbytes.c
-@@ -34,6 +34,8 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- /**
-  * GBytes:
-  *
-@@ -95,7 +97,7 @@ g_bytes_new (gconstpointer data,
- {
-   g_return_val_if_fail (data != NULL || size == 0, NULL);
- 
--  return g_bytes_new_take (g_memdup (data, size), size);
-+  return g_bytes_new_take (g_memdup2 (data, size), size);
- }
- 
- /**
-@@ -499,7 +501,7 @@ g_bytes_unref_to_data (GBytes *bytes,
-        * Copy: Non g_malloc (or compatible) allocator, or static memory,
-        * so we have to copy, and then unref.
-        */
--      result = g_memdup (bytes->data, bytes->size);
-+      result = g_memdup2 (bytes->data, bytes->size);
-       *size = bytes->size;
-       g_bytes_unref (bytes);
-     }
-diff --git a/glib/gdir.c b/glib/gdir.c
-index 6b85e99c8..6747a8c6f 100644
---- a/glib/gdir.c
-+++ b/glib/gdir.c
-@@ -37,6 +37,7 @@
- #include "gconvert.h"
- #include "gfileutils.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -112,7 +113,7 @@ g_dir_open_with_errno (const gchar *path,
-     return NULL;
- #endif
- 
--  return g_memdup (&dir, sizeof dir);
-+  return g_memdup2 (&dir, sizeof dir);
- }
- 
- /**
-diff --git a/glib/ghash.c b/glib/ghash.c
-index e61b03788..26f26062b 100644
---- a/glib/ghash.c
-+++ b/glib/ghash.c
-@@ -34,6 +34,7 @@
- #include "gmacros.h"
- #include "glib-private.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gatomic.h"
- #include "gtestutils.h"
- #include "gslice.h"
-@@ -964,7 +965,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-       if (hash_table->have_big_keys)
-         {
-           if (key != value)
--            hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+            hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
-           /* Keys and values are both big now, so no need for further checks */
-           return;
-         }
-@@ -972,7 +973,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
-         {
-           if (key != value)
-             {
--              hash_table->values = g_memdup (hash_table->keys, sizeof (guint) * hash_table->size);
-+              hash_table->values = g_memdup2 (hash_table->keys, sizeof (guint) * hash_table->size);
-               is_a_set = FALSE;
-             }
-         }
-@@ -1000,7 +1001,7 @@ g_hash_table_ensure_keyval_fits (GHashTable *hash_table, gpointer key, gpointer
- 
-   /* Just split if necessary */
-   if (is_a_set && key != value)
--    hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
-+    hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
- 
- #endif
- }
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 1956e9dc6..15927c391 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -37,6 +37,7 @@
- #include "giochannel.h"
- 
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtestutils.h"
- #include "glibintl.h"
- 
-@@ -892,7 +893,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     length = strlen (line_term);
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-   channel->line_term_len = length;
- }
- 
-diff --git a/glib/gslice.c b/glib/gslice.c
-index 4c758c3be..bcdbb8853 100644
---- a/glib/gslice.c
-+++ b/glib/gslice.c
-@@ -41,6 +41,7 @@
- #include "gmain.h"
- #include "gmem.h"               /* gslice.h */
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gutils.h"
- #include "gtrashstack.h"
- #include "gtestutils.h"
-@@ -350,7 +351,7 @@ g_slice_get_config_state (GSliceConfig ckey,
-       array[i++] = allocator->contention_counters[address];
-       array[i++] = allocator_get_magazine_threshold (allocator, address);
-       *n_values = i;
--      return g_memdup (array, sizeof (array[0]) * *n_values);
-+      return g_memdup2 (array, sizeof (array[0]) * *n_values);
-     default:
-       return NULL;
-     }
-diff --git a/glib/gtestutils.c b/glib/gtestutils.c
-index dd789482f..5887ecc36 100644
---- a/glib/gtestutils.c
-+++ b/glib/gtestutils.c
-@@ -49,6 +49,7 @@
- #include "gpattern.h"
- #include "grand.h"
- #include "gstrfuncs.h"
-+#include "gstrfuncsprivate.h"
- #include "gtimer.h"
- #include "gslice.h"
- #include "gspawn.h"
-@@ -3798,7 +3799,7 @@ g_test_log_extract (GTestLogBuffer *tbuffer)
-       if (p <= tbuffer->data->str + mlength)
-         {
-           g_string_erase (tbuffer->data, 0, mlength);
--          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup (&msg, sizeof (msg)));
-+          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup2 (&msg, sizeof (msg)));
-           return TRUE;
-         }
- 
-diff --git a/glib/gvariant.c b/glib/gvariant.c
-index b61bf7278..d6f68a9ea 100644
---- a/glib/gvariant.c
-+++ b/glib/gvariant.c
-@@ -33,6 +33,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvariant
-@@ -725,7 +726,7 @@ g_variant_new_variant (GVariant *value)
-   g_variant_ref_sink (value);
- 
-   return g_variant_new_from_children (G_VARIANT_TYPE_VARIANT,
--                                      g_memdup (&value, sizeof value),
-+                                      g_memdup2 (&value, sizeof value),
-                                       1, g_variant_is_trusted (value));
- }
- 
-@@ -1229,7 +1230,7 @@ g_variant_new_fixed_array (const GVariantType  *element_type,
-       return NULL;
-     }
- 
--  data = g_memdup (elements, n_elements * element_size);
-+  data = g_memdup2 (elements, n_elements * element_size);
-   value = g_variant_new_from_data (array_type, data,
-                                    n_elements * element_size,
-                                    FALSE, g_free, data);
-@@ -1908,7 +1909,7 @@ g_variant_dup_bytestring (GVariant *value,
-   if (length)
-     *length = size;
- 
--  return g_memdup (original, size + 1);
-+  return g_memdup2 (original, size + 1);
- }
- 
- /**
-diff --git a/glib/gvarianttype.c b/glib/gvarianttype.c
-index 1a228f73b..07659ff12 100644
---- a/glib/gvarianttype.c
-+++ b/glib/gvarianttype.c
-@@ -28,6 +28,7 @@
- 
- #include <string.h>
- 
-+#include "gstrfuncsprivate.h"
- 
- /**
-  * SECTION:gvarianttype
-@@ -1181,7 +1182,7 @@ g_variant_type_new_tuple (const GVariantType * const *items,
-   g_assert (offset < sizeof buffer);
-   buffer[offset++] = ')';
- 
--  return (GVariantType *) g_memdup (buffer, offset);
-+  return (GVariantType *) g_memdup2 (buffer, offset);
- }
- 
- /**
-diff --git a/glib/tests/array-test.c b/glib/tests/array-test.c
-index 3fcf1136a..11982f822 100644
---- a/glib/tests/array-test.c
-+++ b/glib/tests/array-test.c
-@@ -29,6 +29,8 @@
- #include <string.h>
- #include "glib.h"
- 
-+#include "gstrfuncsprivate.h"
-+
- /* Test data to be passed to any function which calls g_array_new(), providing
-  * the parameters for that call. Most #GArray tests should be repeated for all
-  * possible values of #ArrayTestData. */
-@@ -1642,7 +1644,7 @@ byte_array_new_take (void)
-   GByteArray *gbarray;
-   guint8 *data;
- 
--  data = g_memdup ("woooweeewow", 11);
-+  data = g_memdup2 ("woooweeewow", 11);
-   gbarray = g_byte_array_new_take (data, 11);
-   g_assert (gbarray->data == data);
-   g_assert_cmpuint (gbarray->len, ==, 11);
-diff --git a/glib/tests/option-context.c b/glib/tests/option-context.c
-index 149d22353..88d2b80d1 100644
---- a/glib/tests/option-context.c
-+++ b/glib/tests/option-context.c
-@@ -27,6 +27,8 @@
- #include <string.h>
- #include <locale.h>
- 
-+#include "gstrfuncsprivate.h"
-+
- static GOptionEntry main_entries[] = {
-   { "main-switch", 0, 0,
-     G_OPTION_ARG_NONE, NULL,
-@@ -256,7 +258,7 @@ join_stringv (int argc, char **argv)
- static char **
- copy_stringv (char **argv, int argc)
- {
--  return g_memdup (argv, sizeof (char *) * (argc + 1));
-+  return g_memdup2 (argv, sizeof (char *) * (argc + 1));
- }
- 
- static void
-@@ -2323,7 +2325,7 @@ test_group_parse (void)
-   g_option_context_add_group (context, group);
- 
-   argv = split_string ("program --test arg1 -f arg2 --group-test arg3 --frob arg4 -z arg5", &argc);
--  orig_argv = g_memdup (argv, (argc + 1) * sizeof (char *));
-+  orig_argv = g_memdup2 (argv, (argc + 1) * sizeof (char *));
- 
-   retval = g_option_context_parse (context, &argc, &argv, &error);
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-05.patch b/gnu/packages/patches/glib-CVE-2021-27219-05.patch
deleted file mode 100644
index 62bce1b188..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-05.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 0cbad673215ec8a049b7fe2ff44b0beed31b376e Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 16:12:24 +0000
-Subject: [PATCH 05/11] gwinhttpfile: Avoid arithmetic overflow when
- calculating a size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The members of `URL_COMPONENTS` (`winhttp_file->url`) are `DWORD`s, i.e.
-32-bit unsigned integers. Adding to and multiplying them may cause them
-to overflow the unsigned integer bounds, even if the result is passed to
-`g_memdup2()` which accepts a `gsize`.
-
-Cast the `URL_COMPONENTS` members to `gsize` first to ensure that the
-arithmetic is done in terms of `gsize`s rather than unsigned integers.
-
-Spotted by Sebastian Dröge.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/win32/gwinhttpfile.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
-index 040ee8564..246ec0578 100644
---- a/gio/win32/gwinhttpfile.c
-+++ b/gio/win32/gwinhttpfile.c
-@@ -394,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile      *file,
-   child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
-   child->vfs = winhttp_file->vfs;
-   child->url = winhttp_file->url;
--  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
--  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
--  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
--  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
-+  child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, ((gsize) winhttp_file->url.dwSchemeLength + 1) * 2);
-+  child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, ((gsize) winhttp_file->url.dwHostNameLength + 1) * 2);
-+  child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, ((gsize) winhttp_file->url.dwUserNameLength + 1) * 2);
-+  child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, ((gsize) winhttp_file->url.dwPasswordLength + 1) * 2);
-   child->url.lpszUrlPath = wnew_path;
-   child->url.dwUrlPathLength = wcslen (wnew_path);
-   child->url.lpszExtraInfo = NULL;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-06.patch b/gnu/packages/patches/glib-CVE-2021-27219-06.patch
deleted file mode 100644
index 4e2435f5fd..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-06.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From f9ee2275cbc312c0b4cdbc338a4fbb76eb36fb9a Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:49:00 +0000
-Subject: [PATCH 06/11] gdatainputstream: Handle stop_chars_len internally as
- gsize
-
-Previously it was handled as a `gssize`, which meant that if the
-`stop_chars` string was longer than `G_MAXSSIZE` there would be an
-overflow.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gdatainputstream.c | 25 +++++++++++++++++--------
- 1 file changed, 17 insertions(+), 8 deletions(-)
-
-diff --git a/gio/gdatainputstream.c b/gio/gdatainputstream.c
-index 2e7750cb5..2cdcbda19 100644
---- a/gio/gdatainputstream.c
-+++ b/gio/gdatainputstream.c
-@@ -27,6 +27,7 @@
- #include "gioenumtypes.h"
- #include "gioerror.h"
- #include "glibintl.h"
-+#include "gstrfuncsprivate.h"
- 
- #include <string.h>
- 
-@@ -856,7 +857,7 @@ static gssize
- scan_for_chars (GDataInputStream *stream,
- 		gsize            *checked_out,
- 		const char       *stop_chars,
--                gssize            stop_chars_len)
-+                gsize             stop_chars_len)
- {
-   GBufferedInputStream *bstream;
-   const char *buffer;
-@@ -952,7 +953,7 @@ typedef struct
-   gsize checked;
- 
-   gchar *stop_chars;
--  gssize stop_chars_len;
-+  gsize stop_chars_len;
-   gsize length;
- } GDataInputStreamReadData;
- 
-@@ -1078,12 +1079,17 @@ g_data_input_stream_read_async (GDataInputStream    *stream,
- {
-   GDataInputStreamReadData *data;
-   GTask *task;
-+  gsize stop_chars_len_unsigned;
- 
-   data = g_slice_new0 (GDataInputStreamReadData);
--  if (stop_chars_len == -1)
--    stop_chars_len = strlen (stop_chars);
--  data->stop_chars = g_memdup (stop_chars, stop_chars_len);
--  data->stop_chars_len = stop_chars_len;
-+
-+  if (stop_chars_len < 0)
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
-+
-+  data->stop_chars = g_memdup2 (stop_chars, stop_chars_len_unsigned);
-+  data->stop_chars_len = stop_chars_len_unsigned;
-   data->last_saw_cr = FALSE;
- 
-   task = g_task_new (stream, cancellable, callback, user_data);
-@@ -1338,17 +1344,20 @@ g_data_input_stream_read_upto (GDataInputStream  *stream,
-   gssize found_pos;
-   gssize res;
-   char *data_until;
-+  gsize stop_chars_len_unsigned;
- 
-   g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);
- 
-   if (stop_chars_len < 0)
--    stop_chars_len = strlen (stop_chars);
-+    stop_chars_len_unsigned = strlen (stop_chars);
-+  else
-+    stop_chars_len_unsigned = (gsize) stop_chars_len;
- 
-   bstream = G_BUFFERED_INPUT_STREAM (stream);
- 
-   checked = 0;
- 
--  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len)) == -1)
-+  while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len_unsigned)) == -1)
-     {
-       if (g_buffered_input_stream_get_available (bstream) ==
-           g_buffered_input_stream_get_buffer_size (bstream))
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-07.patch b/gnu/packages/patches/glib-CVE-2021-27219-07.patch
deleted file mode 100644
index dad3d285f4..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-07.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-Backport of:
-
-From 2aaf593a9eb96d84fe3be740aca2810a97d95592 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:50:37 +0000
-Subject: [PATCH 07/11] gwin32: Use gsize internally in g_wcsdup()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This allows it to handle strings up to length `G_MAXSIZE` — previously
-it would overflow with such strings.
-
-Update the several copies of it identically.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gwin32appinfo.c     | 33 ++++++++++++++++++++++++++-------
- gio/gwin32registrykey.c | 34 ++++++++++++++++++++++++++--------
- 2 files changed, 52 insertions(+), 15 deletions(-)
-
-diff --git a/gio/gwin32appinfo.c b/gio/gwin32appinfo.c
-index 9f335b370..dd7a96a4a 100644
---- a/gio/gwin32appinfo.c
-+++ b/gio/gwin32appinfo.c
-@@ -464,15 +464,34 @@ static GWin32RegistryKey *applications_key;
- /* Watch this key */
- static GWin32RegistryKey *classes_root_key;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str, gssize str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- #define URL_ASSOCIATIONS L"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\"
-diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
-index 619fd48af..fbd65311a 100644
---- a/gio/gwin32registrykey.c
-+++ b/gio/gwin32registrykey.c
-@@ -127,16 +127,34 @@ typedef enum
-   G_WIN32_REGISTRY_UPDATED_PATH = 1,
- } GWin32RegistryKeyUpdateFlag;
- 
-+static gsize
-+g_utf16_len (const gunichar2 *str)
-+{
-+  gsize result;
-+
-+  for (result = 0; str[0] != 0; str++, result++)
-+    ;
-+
-+  return result;
-+}
-+
- static gunichar2 *
--g_wcsdup (const gunichar2 *str,
--          gssize           str_size)
-+g_wcsdup (const gunichar2 *str, gssize str_len)
- {
--  if (str_size == -1)
--    {
--      str_size = wcslen (str) + 1;
--      str_size *= sizeof (gunichar2);
--    }
--  return g_memdup (str, str_size);
-+  gsize str_len_unsigned;
-+  gsize str_size;
-+
-+  g_return_val_if_fail (str != NULL, NULL);
-+
-+  if (str_len < 0)
-+    str_len_unsigned = g_utf16_len (str);
-+  else
-+    str_len_unsigned = (gsize) str_len;
-+
-+  g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
-+  str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
-+
-+  return g_memdup2 (str, str_size);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-08.patch b/gnu/packages/patches/glib-CVE-2021-27219-08.patch
deleted file mode 100644
index 2c021ad317..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-08.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From ba8ca443051f93a74c0d03d62e70402036f967a5 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 13:58:32 +0000
-Subject: [PATCH 08/11] gkeyfilesettingsbackend: Handle long keys when
- converting paths
-
-Previously, the code in `convert_path()` could not handle keys longer
-than `G_MAXINT`, and would overflow if that was exceeded.
-
-Convert the code to use `gsize` and `g_memdup2()` throughout, and
-change from identifying the position of the final slash in the string
-using a signed offset `i`, to using a pointer to the character (and
-`strrchr()`). This allows the slash to be at any position in a
-`G_MAXSIZE`-long string, without sacrificing a bit of the offset for
-indicating whether a slash was found.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gkeyfilesettingsbackend.c | 21 ++++++++++-----------
- 1 file changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index cd5765afd..25b057672 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -33,6 +33,7 @@
- #include "gfilemonitor.h"
- #include "gsimplepermission.h"
- #include "gsettingsbackendinternal.h"
-+#include "gstrfuncsprivate.h"
- #include "giomodule-priv.h"
- #include "gportalsupport.h"
- 
-@@ -145,8 +146,8 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-               gchar                   **group,
-               gchar                   **basename)
- {
--  gint key_len = strlen (key);
--  gint i;
-+  gsize key_len = strlen (key);
-+  const gchar *last_slash;
- 
-   if (key_len < kfsb->prefix_len ||
-       memcmp (key, kfsb->prefix, kfsb->prefix_len) != 0)
-@@ -155,38 +156,36 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-   key_len -= kfsb->prefix_len;
-   key += kfsb->prefix_len;
- 
--  for (i = key_len; i >= 0; i--)
--    if (key[i] == '/')
--      break;
-+  last_slash = strrchr (key, '/');
- 
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
-        * a path that ghosts that group name
-        */
--      if (i == kfsb->root_group_len && memcmp (key, kfsb->root_group, i) == 0)
-+      if (last_slash != NULL && (last_slash - key) == kfsb->root_group_len && memcmp (key, kfsb->root_group, last_slash - key) == 0)
-         return FALSE;
-     }
-   else
-     {
-       /* if no root_group was given, ensure that the user gave a path */
--      if (i == -1)
-+      if (last_slash == NULL)
-         return FALSE;
-     }
- 
-   if (group)
-     {
--      if (i >= 0)
-+      if (last_slash != NULL)
-         {
--          *group = g_memdup (key, i + 1);
--          (*group)[i] = '\0';
-+          *group = g_memdup2 (key, (last_slash - key) + 1);
-+          (*group)[(last_slash - key)] = '\0';
-         }
-       else
-         *group = g_strdup (kfsb->root_group);
-     }
- 
-   if (basename)
--    *basename = g_memdup (key + i + 1, key_len - i);
-+    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-09.patch b/gnu/packages/patches/glib-CVE-2021-27219-09.patch
deleted file mode 100644
index 4de0c1b349..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-09.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 65ec7f4d6e8832c481f6e00e2eb007b9a60024ce Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:00:53 +0000
-Subject: [PATCH 09/11] gsocket: Use gsize to track native sockaddr's size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don’t use an `int`, that’s potentially too small. In practical terms,
-this is not a problem, since no socket address is going to be that big.
-
-By making these changes we can use `g_memdup2()` without warnings,
-though. Fewer warnings is good.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gsocket.c | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/gio/gsocket.c b/gio/gsocket.c
-index 66073af83..a3af149e8 100644
---- a/gio/gsocket.c
-+++ b/gio/gsocket.c
-@@ -75,6 +75,7 @@
- #include "gcredentialsprivate.h"
- #include "glibintl.h"
- #include "gioprivate.h"
-+#include "gstrfuncsprivate.h"
- 
- #ifdef G_OS_WIN32
- /* For Windows XP runtime compatibility, but use the system's if_nametoindex() if available */
-@@ -174,7 +175,7 @@ static gboolean     g_socket_datagram_based_condition_wait       (GDatagramBased
-                                                                   GError          **error);
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len);
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len);
- 
- static gssize
- g_socket_receive_message_with_timeout  (GSocket                 *socket,
-@@ -260,7 +261,7 @@ struct _GSocketPrivate
-   struct {
-     GSocketAddress *addr;
-     struct sockaddr *native;
--    gint native_len;
-+    gsize native_len;
-     guint64 last_used;
-   } recv_addr_cache[RECV_ADDR_CACHE_SIZE];
- };
-@@ -5211,14 +5212,14 @@ g_socket_send_messages_with_timeout (GSocket        *socket,
- }
- 
- static GSocketAddress *
--cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len)
- {
-   GSocketAddress *saddr;
-   gint i;
-   guint64 oldest_time = G_MAXUINT64;
-   gint oldest_index = 0;
- 
--  if (native_len <= 0)
-+  if (native_len == 0)
-     return NULL;
- 
-   saddr = NULL;
-@@ -5226,7 +5227,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-     {
-       GSocketAddress *tmp = socket->priv->recv_addr_cache[i].addr;
-       gpointer tmp_native = socket->priv->recv_addr_cache[i].native;
--      gint tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
-+      gsize tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
- 
-       if (!tmp)
-         continue;
-@@ -5256,7 +5257,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
-       g_free (socket->priv->recv_addr_cache[oldest_index].native);
-     }
- 
--  socket->priv->recv_addr_cache[oldest_index].native = g_memdup (native, native_len);
-+  socket->priv->recv_addr_cache[oldest_index].native = g_memdup2 (native, native_len);
-   socket->priv->recv_addr_cache[oldest_index].native_len = native_len;
-   socket->priv->recv_addr_cache[oldest_index].addr = g_object_ref (saddr);
-   socket->priv->recv_addr_cache[oldest_index].last_used = g_get_monotonic_time ();
-@@ -5404,6 +5405,9 @@ g_socket_receive_message_with_timeout (GSocket                 *socket,
-     /* do it */
-     while (1)
-       {
-+        /* addrlen has to be of type int because that’s how WSARecvFrom() is defined */
-+        G_STATIC_ASSERT (sizeof addr <= G_MAXINT);
-+
- 	addrlen = sizeof addr;
- 	if (address)
- 	  result = WSARecvFrom (socket->priv->fd,
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-10.patch b/gnu/packages/patches/glib-CVE-2021-27219-10.patch
deleted file mode 100644
index 36198b8eef..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-10.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 777b95a88f006d39d9fe6d3321db17e7b0d4b9a4 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:07:39 +0000
-Subject: [PATCH 10/11] gtlspassword: Forbid very long TLS passwords
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `g_tls_password_set_value_full()` (and the vfunc it
-invokes) can only accept a `gssize` length. Ensure that nul-terminated
-strings passed to `g_tls_password_set_value()` can’t exceed that length.
-Use `g_memdup2()` to avoid an overflow if they’re longer than
-`G_MAXUINT` similarly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- gio/gtlspassword.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index 1e437a7b6..dbcec41a8 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -23,6 +23,7 @@
- #include "glibintl.h"
- 
- #include "gioenumtypes.h"
-+#include "gstrfuncsprivate.h"
- #include "gtlspassword.h"
- 
- #include <string.h>
-@@ -287,9 +288,14 @@ g_tls_password_set_value (GTlsPassword  *password,
-   g_return_if_fail (G_IS_TLS_PASSWORD (password));
- 
-   if (length < 0)
--    length = strlen ((gchar *)value);
-+    {
-+      /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-+      gsize length_unsigned = strlen ((gchar *) value);
-+      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      length = (gssize) length_unsigned;
-+    }
- 
--  g_tls_password_set_value_full (password, g_memdup (value, length), length, g_free);
-+  g_tls_password_set_value_full (password, g_memdup2 (value, (gsize) length), length, g_free);
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-11.patch b/gnu/packages/patches/glib-CVE-2021-27219-11.patch
deleted file mode 100644
index 4413cb9827..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-11.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From ecdf91400e9a538695a0895b95ad7e8abcdf1749 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Thu, 4 Feb 2021 14:09:40 +0000
-Subject: [PATCH 11/11] giochannel: Forbid very long line terminator strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The public API `GIOChannel.line_term_len` is only a `guint`. Ensure that
-nul-terminated strings passed to `g_io_channel_set_line_term()` can’t
-exceed that length. Use `g_memdup2()` to avoid a warning (`g_memdup()`
-is due to be deprecated), but not to avoid a bug, since it’s also
-limited to `G_MAXUINT`.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-Helps: #2319
----
- glib/giochannel.c | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 15927c391..66c6591f0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -884,16 +884,25 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-                             const gchar	*line_term,
- 			    gint         length)
- {
-+  guint length_unsigned;
-+
-   g_return_if_fail (channel != NULL);
-   g_return_if_fail (line_term == NULL || length != 0); /* Disallow "" */
- 
-   if (line_term == NULL)
--    length = 0;
--  else if (length < 0)
--    length = strlen (line_term);
-+    length_unsigned = 0;
-+  else if (length >= 0)
-+    length_unsigned = (guint) length;
-+  else
-+    {
-+      /* FIXME: We’re constrained by line_term_len being a guint here */
-+      gsize length_size = strlen (line_term);
-+      g_return_if_fail (length_size > G_MAXUINT);
-+      length_unsigned = (guint) length_size;
-+    }
- 
-   g_free (channel->line_term);
--  channel->line_term = line_term ? g_memdup2 (line_term, length) : NULL;
-+  channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
-   channel->line_term_len = length;
- }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-12.patch b/gnu/packages/patches/glib-CVE-2021-27219-12.patch
deleted file mode 100644
index 4fdbb81750..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-12.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From f8273b9aded135fe07094faebd527e43851aaf6e Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
-Date: Sun, 7 Feb 2021 23:32:40 +0100
-Subject: [PATCH 1/5] giochannel: Fix length_size bounds check
-
-The inverted condition is an obvious error introduced by ecdf91400e9a.
-
-Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-
-(cherry picked from commit a149bf2f9030168051942124536e303af8ba6176)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 66c6591f0..0d9d5f223 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -897,7 +897,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
-     {
-       /* FIXME: We’re constrained by line_term_len being a guint here */
-       gsize length_size = strlen (line_term);
--      g_return_if_fail (length_size > G_MAXUINT);
-+      g_return_if_fail (length_size <= G_MAXUINT);
-       length_unsigned = (guint) length_size;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-13.patch b/gnu/packages/patches/glib-CVE-2021-27219-13.patch
deleted file mode 100644
index 6a287cc3a2..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-13.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From e069c50467712e6d607822afd6b6c15c2c343dff Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:34:50 +0000
-Subject: [PATCH 2/5] giochannel: Don't store negative line_term_len in
- GIOChannel struct
-
-Adding test coverage indicated that this was another bug in 0cc11f74.
-
-Fixes: 0cc11f74 "giochannel: Forbid very long line terminator strings"
-Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/2323
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 5dc8b0014c03e7491d93b90275ab442e888a9628)
----
- glib/giochannel.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/glib/giochannel.c b/glib/giochannel.c
-index 0d9d5f223..4c39b9dc0 100644
---- a/glib/giochannel.c
-+++ b/glib/giochannel.c
-@@ -903,7 +903,7 @@ g_io_channel_set_line_term (GIOChannel	*channel,
- 
-   g_free (channel->line_term);
-   channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
--  channel->line_term_len = length;
-+  channel->line_term_len = length_unsigned;
- }
- 
- /**
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-14.patch b/gnu/packages/patches/glib-CVE-2021-27219-14.patch
deleted file mode 100644
index 78de2846da..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-14.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 4506d1859a863087598c8d122740bae25b65b099 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:04:48 +0000
-Subject: [PATCH 4/5] gtlspassword: Fix inverted assertion
-
-The intention here was to assert that the length of the password fits
-in a gssize. Passwords more than half the size of virtual memory are
-probably excessive.
-
-Fixes: a8b204ff "gtlspassword: Forbid very long TLS passwords"
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit 61bb52ec42de1082bfb06ce1c737fc295bfe60b8)
----
- gio/gtlspassword.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
-index dbcec41a8..bd86a6dfe 100644
---- a/gio/gtlspassword.c
-+++ b/gio/gtlspassword.c
-@@ -291,7 +291,7 @@ g_tls_password_set_value (GTlsPassword  *password,
-     {
-       /* FIXME: g_tls_password_set_value_full() doesn’t support unsigned gsize */
-       gsize length_unsigned = strlen ((gchar *) value);
--      g_return_if_fail (length_unsigned > G_MAXSSIZE);
-+      g_return_if_fail (length_unsigned <= G_MAXSSIZE);
-       length = (gssize) length_unsigned;
-     }
- 
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-15.patch b/gnu/packages/patches/glib-CVE-2021-27219-15.patch
deleted file mode 100644
index 37ef85b4fa..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-15.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 3d1550354c3c6a8491c39881752d51cb7515f2c2 Mon Sep 17 00:00:00 2001
-From: Simon McVittie <smcv@collabora.com>
-Date: Mon, 8 Feb 2021 10:22:39 +0000
-Subject: [PATCH 5/5] tls-interaction: Add test coverage for various ways to
- set the password
-
-Signed-off-by: Simon McVittie <smcv@collabora.com>
-(cherry picked from commit df4501316ca3903072400504a5ea76498db19538)
----
- gio/tests/tls-interaction.c | 55 +++++++++++++++++++++++++++++++++++++
- 1 file changed, 55 insertions(+)
-
-diff --git a/gio/tests/tls-interaction.c b/gio/tests/tls-interaction.c
-index 4f0737d7e..5661e8e0d 100644
---- a/gio/tests/tls-interaction.c
-+++ b/gio/tests/tls-interaction.c
-@@ -174,6 +174,38 @@ test_interaction_ask_password_finish_failure (GTlsInteraction    *interaction,
- }
- 
- 
-+/* Return a copy of @str that is allocated in a silly way, to exercise
-+ * custom free-functions. The returned pointer points to a copy of @str
-+ * in a buffer of the form "BEFORE \0 str \0 AFTER". */
-+static guchar *
-+special_dup (const char *str)
-+{
-+  GString *buf = g_string_new ("BEFORE");
-+  guchar *ret;
-+
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, str);
-+  g_string_append_c (buf, '\0');
-+  g_string_append (buf, "AFTER");
-+  ret = (guchar *) g_string_free (buf, FALSE);
-+  return ret + strlen ("BEFORE") + 1;
-+}
-+
-+
-+/* Free a copy of @str that was made with special_dup(), after asserting
-+ * that it has not been corrupted. */
-+static void
-+special_free (gpointer p)
-+{
-+  gchar *s = p;
-+  gchar *buf = s - strlen ("BEFORE") - 1;
-+
-+  g_assert_cmpstr (buf, ==, "BEFORE");
-+  g_assert_cmpstr (s + strlen (s) + 1, ==, "AFTER");
-+  g_free (buf);
-+}
-+
-+
- static GTlsInteractionResult
- test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GTlsPassword       *password,
-@@ -181,6 +213,8 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-                                             GError            **error)
- {
-   TestInteraction *self;
-+  const guchar *value;
-+  gsize len;
- 
-   g_assert (TEST_IS_INTERACTION (interaction));
-   self = TEST_INTERACTION (interaction);
-@@ -192,6 +226,27 @@ test_interaction_ask_password_sync_success (GTlsInteraction    *interaction,
-   g_assert (error != NULL);
-   g_assert (*error == NULL);
- 
-+  /* Exercise different ways to set the value */
-+  g_tls_password_set_value (password, (const guchar *) "foo", 4);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "foo", 4);
-+
-+  g_tls_password_set_value (password, (const guchar *) "bar", -1);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "bar", 3);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baa"), 4, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baa", 4);
-+
-+  g_tls_password_set_value_full (password, special_dup ("baz"), -1, special_free);
-+  len = 0;
-+  value = g_tls_password_get_value (password, &len);
-+  g_assert_cmpmem (value, len, "baz", 3);
-+
-   /* Don't do this in real life. Include a null terminator for testing */
-   g_tls_password_set_value (password, (const guchar *)"the password", 13);
-   return G_TLS_INTERACTION_HANDLED;
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-16.patch b/gnu/packages/patches/glib-CVE-2021-27219-16.patch
deleted file mode 100644
index 43635e72ed..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-16.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From cb9ee701ef46c1819eed4e2a4dc181682bdfc176 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:16:39 +0000
-Subject: [PATCH 1/3] gkeyfilesettingsbackend: Fix basename handling when group
- is unset
-
-Fix an effective regression in commit
-7781a9cbd2fd0aa84bee0f4eee88470640ff6706, which happens when
-`convert_path()` is called with a `key` which contains no slashes. In
-that case, the `key` is entirely the `basename`.
-
-Prior to commit 7781a9cb, the code worked through a fluke of `i == -1`
-cancelling out with the various additions in the `g_memdup()` call, and
-effectively resulting in `g_strdup (key)`.
-
-Spotted by Guido Berhoerster.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 25b057672..861c3a661 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -185,7 +185,12 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
-     }
- 
-   if (basename)
--    *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+    {
-+      if (last_slash != NULL)
-+        *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
-+      else
-+        *basename = g_strdup (key);
-+    }
- 
-   return TRUE;
- }
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-17.patch b/gnu/packages/patches/glib-CVE-2021-27219-17.patch
deleted file mode 100644
index 3153979071..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-17.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 31e0d403ba635dbbacbfbff74295e5db02558d76 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:19:30 +0000
-Subject: [PATCH 2/3] gkeyfilesettingsbackend: Disallow empty key or group
- names
-
-These should never have been allowed; they will result in precondition
-failures from the `GKeyFile` later on in the code.
-
-A test will be added for this shortly.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/gkeyfilesettingsbackend.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
-index 861c3a661..de216e615 100644
---- a/gio/gkeyfilesettingsbackend.c
-+++ b/gio/gkeyfilesettingsbackend.c
-@@ -158,6 +158,13 @@ convert_path (GKeyfileSettingsBackend  *kfsb,
- 
-   last_slash = strrchr (key, '/');
- 
-+  /* Disallow empty group names or key names */
-+  if (key_len == 0 ||
-+      (last_slash != NULL &&
-+       (*(last_slash + 1) == '\0' ||
-+        last_slash == key)))
-+    return FALSE;
-+
-   if (kfsb->root_group)
-     {
-       /* if a root_group was specified, make sure the user hasn't given
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-27219-18.patch b/gnu/packages/patches/glib-CVE-2021-27219-18.patch
deleted file mode 100644
index c18d44ddeb..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-27219-18.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-Backport of:
-
-From 221c26685354dea2b2732df94404e8e5e77a1591 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 10 Feb 2021 21:21:36 +0000
-Subject: [PATCH 3/3] tests: Add tests for key name handling in the keyfile
- backend
-
-This tests the two recent commits.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
----
- gio/tests/gsettings.c | 171 +++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 170 insertions(+), 1 deletion(-)
-
-diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c
-index baadca8f5..afe594a23 100644
---- a/gio/tests/gsettings.c
-+++ b/gio/tests/gsettings.c
-@@ -1,3 +1,4 @@
-+#include <errno.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <libintl.h>
-@@ -1740,6 +1741,14 @@ key_changed_cb (GSettings *settings, const gchar *key, gpointer data)
-   (*b) = TRUE;
- }
- 
-+typedef struct
-+{
-+  const gchar *path;
-+  const gchar *root_group;
-+  const gchar *keyfile_group;
-+  const gchar *root_path;
-+} KeyfileTestData;
-+
- /*
-  * Test that using a keyfile works
-  */
-@@ -1834,7 +1843,11 @@ test_keyfile (Fixture       *fixture,
-   g_free (str);
- 
-   g_settings_set (settings, "farewell", "s", "cheerio");
--  
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-   /* When executing as root, changing the mode of the keyfile will have
-    * no effect on the writability of the settings.
-    */
-@@ -1866,6 +1879,149 @@ test_keyfile (Fixture       *fixture,
-   g_free (keyfile_path);
- }
- 
-+/*
-+ * Test that using a keyfile works with a schema with no path set.
-+ */
-+static void
-+test_keyfile_no_path (Fixture       *fixture,
-+                      gconstpointer  user_data)
-+{
-+  const KeyfileTestData *test_data = user_data;
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  GKeyFile *keyfile;
-+  gboolean writable;
-+  gchar *key = NULL;
-+  GError *error = NULL;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, test_data->root_path, test_data->root_group);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, test_data->path);
-+  g_object_unref (kf_backend);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_assert_true (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  writable = g_settings_is_writable (settings, "test-boolean");
-+  g_assert_true (writable);
-+  g_settings_set (settings, "test-boolean", "b", FALSE);
-+
-+  g_assert_false (g_settings_get_boolean (settings, "test-boolean"));
-+
-+  g_settings_delay (settings);
-+  g_settings_set (settings, "test-boolean", "b", TRUE);
-+  g_settings_apply (settings);
-+
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_true (g_key_file_get_boolean (keyfile, test_data->keyfile_group, "test-boolean", NULL));
-+
-+  g_key_file_free (keyfile);
-+
-+  g_settings_reset (settings, "test-boolean");
-+  g_settings_apply (settings);
-+  keyfile = g_key_file_new ();
-+  g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
-+
-+  g_assert_false (g_key_file_get_string (keyfile, test_data->keyfile_group, "test-boolean", &error));
-+  g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
-+  g_clear_error (&error);
-+
-+  /* Check that empty keys/groups are not allowed. */
-+  g_assert_false (g_settings_is_writable (settings, ""));
-+  g_assert_false (g_settings_is_writable (settings, "/"));
-+
-+  /* Keys which ghost the root group name are not allowed. This can only be
-+   * tested when the path is `/` as otherwise it acts as a prefix and prevents
-+   * any ghosting. */
-+  if (g_str_equal (test_data->path, "/"))
-+    {
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "/");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+
-+      key = g_strdup_printf ("%s/%s", test_data->root_group, "test-boolean");
-+      g_assert_false (g_settings_is_writable (settings, key));
-+      g_free (key);
-+    }
-+
-+  g_key_file_free (keyfile);
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. */
-+  g_assert_cmpint (g_chmod (keyfile_path, 0777) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_remove (store_path) == 0 ? 0 : errno, ==, 0);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys outside its root path.
-+ */
-+static void
-+test_keyfile_outside_root_path (Fixture       *fixture,
-+                                gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/tests/basic-types/", "root");
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/tests/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
-+/*
-+ * Test that a keyfile rejects writes to keys in the root if no root group is set.
-+ */
-+static void
-+test_keyfile_no_root_group (Fixture       *fixture,
-+                            gconstpointer  user_data)
-+{
-+  GSettingsBackend *kf_backend;
-+  GSettings *settings;
-+  gchar *keyfile_path = NULL, *store_path = NULL;
-+
-+  keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
-+  store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
-+  kf_backend = g_keyfile_settings_backend_new (store_path, "/", NULL);
-+  settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/");
-+  g_object_unref (kf_backend);
-+
-+  g_assert_false (g_settings_is_writable (settings, "test-boolean"));
-+  g_assert_true (g_settings_is_writable (settings, "child/test-boolean"));
-+
-+  g_object_unref (settings);
-+
-+  /* Clean up the temporary directory. The keyfile probably doesn’t exist, so
-+   * don’t error on failure. */
-+  g_remove (store_path);
-+  g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
-+  g_free (store_path);
-+  g_free (keyfile_path);
-+}
-+
- /* Test that getting child schemas works
-  */
- static void
-@@ -2844,6 +3000,14 @@ main (int argc, char *argv[])
-   gchar *override_text;
-   gchar *enums;
-   gint result;
-+  const KeyfileTestData keyfile_test_data_explicit_path = { "/tests/", "root", "tests", "/" };
-+  const KeyfileTestData keyfile_test_data_empty_path = { "/", "root", "root", "/" };
-+  const KeyfileTestData keyfile_test_data_long_path = {
-+    "/tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch/",
-+    "root",
-+    "tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch",
-+    "/"
-+  };
- 
- /* Meson build sets this */
- #ifdef TEST_LOCALE_PATH
-@@ -2967,6 +3131,11 @@ main (int argc, char *argv[])
-     }
- 
-   g_test_add ("/gsettings/keyfile", Fixture, NULL, setup, test_keyfile, teardown);
-+  g_test_add ("/gsettings/keyfile/explicit-path", Fixture, &keyfile_test_data_explicit_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/empty-path", Fixture, &keyfile_test_data_empty_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/long-path", Fixture, &keyfile_test_data_long_path, setup, test_keyfile_no_path, teardown);
-+  g_test_add ("/gsettings/keyfile/outside-root-path", Fixture, NULL, setup, test_keyfile_outside_root_path, teardown);
-+  g_test_add ("/gsettings/keyfile/no-root-group", Fixture, NULL, setup, test_keyfile_no_root_group, teardown);
-   g_test_add_func ("/gsettings/child-schema", test_child_schema);
-   g_test_add_func ("/gsettings/strinfo", test_strinfo);
-   g_test_add_func ("/gsettings/enums", test_enums);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-CVE-2021-28153.patch b/gnu/packages/patches/glib-CVE-2021-28153.patch
deleted file mode 100644
index 54443186d9..0000000000
--- a/gnu/packages/patches/glib-CVE-2021-28153.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-Backport of:
-
-From 317b3b587058a05dca95d56dac26568c5b098d33 Mon Sep 17 00:00:00 2001
-From: Philip Withnall <pwithnall@endlessos.org>
-Date: Wed, 24 Feb 2021 17:35:40 +0000
-Subject: [PATCH] glocalfileoutputstream: Fix CREATE_REPLACE_DESTINATION
- with symlinks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The `G_FILE_CREATE_REPLACE_DESTINATION` flag is equivalent to unlinking
-the destination file and re-creating it from scratch. That did
-previously work, but in the process the code would call `open(O_CREAT)`
-on the file. If the file was a dangling symlink, this would create the
-destination file (empty). That’s not an intended side-effect, and has
-security implications if the symlink is controlled by a lower-privileged
-process.
-
-Fix that by not opening the destination file if it’s a symlink, and
-adjusting the rest of the code to cope with
- - the fact that `fd == -1` is not an error iff `is_symlink` is true,
- - and that `original_stat` will contain the `lstat()` results for the
-   symlink now, rather than the `stat()` results for its target (again,
-   iff `is_symlink` is true).
-
-This means that the target of the dangling symlink is no longer created,
-which was the bug. The symlink itself continues to be replaced (as
-before) with the new file — this is the intended behaviour of
-`g_file_replace()`.
-
-The behaviour for non-symlink cases, or cases where the symlink was not
-dangling, should be unchanged.
-
-Includes a unit test.
-
-Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-
-Fixes: #2325
----
- gio/glocalfileoutputstream.c |  70 ++++++++++++++++-------
- gio/tests/file.c             | 108 +++++++++++++++++++++++++++++++++++
- 2 files changed, 158 insertions(+), 20 deletions(-)
-
-diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
-index a3dd62172..553fcbbae 100644
---- a/gio/glocalfileoutputstream.c
-+++ b/gio/glocalfileoutputstream.c
-@@ -874,16 +874,22 @@ handle_overwrite_open (const char    *filename,
-       /* Could be a symlink, or it could be a regular ELOOP error,
-        * but then the next open will fail too. */
-       is_symlink = TRUE;
--      fd = g_open (filename, open_flags, mode);
-+      if (!(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+        fd = g_open (filename, open_flags, mode);
-     }
--#else
--  fd = g_open (filename, open_flags, mode);
--  errsv = errno;
-+#else  /* if !O_NOFOLLOW */
-   /* This is racy, but we do it as soon as possible to minimize the race */
-   is_symlink = g_file_test (filename, G_FILE_TEST_IS_SYMLINK);
-+
-+  if (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION))
-+    {
-+      fd = g_open (filename, open_flags, mode);
-+      errsv = errno;
-+    }
- #endif
- 
--  if (fd == -1)
-+  if (fd == -1 &&
-+      (!is_symlink || !(flags & G_FILE_CREATE_REPLACE_DESTINATION)))
-     {
-       char *display_name = g_filename_display_name (filename);
-       g_set_error (error, G_IO_ERROR,
-@@ -893,13 +899,25 @@ handle_overwrite_open (const char    *filename,
-       g_free (display_name);
-       return -1;
-     }
--  
-+
-+  if (!is_symlink)
-+    {
- #ifdef G_OS_WIN32
--  res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
-+      res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
- #else
--  res = fstat (fd, &original_stat);
-+      res = fstat (fd, &original_stat);
- #endif
--  errsv = errno;
-+      errsv = errno;
-+    }
-+  else
-+    {
-+#ifdef G_OS_WIN32
-+      res = GLIB_PRIVATE_CALL (g_win32_lstat_utf8) (filename, &original_stat);
-+#else
-+      res = g_lstat (filename, &original_stat);
-+#endif
-+      errsv = errno;
-+    }
- 
-   if (res != 0)
-     {
-@@ -916,16 +934,27 @@ handle_overwrite_open (const char    *filename,
-   if (!S_ISREG (original_stat.st_mode))
-     {
-       if (S_ISDIR (original_stat.st_mode))
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_IS_DIRECTORY,
--                             _("Target file is a directory"));
--      else
--	g_set_error_literal (error,
--                             G_IO_ERROR,
--                             G_IO_ERROR_NOT_REGULAR_FILE,
--                             _("Target file is not a regular file"));
--      goto err_out;
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_IS_DIRECTORY,
-+                               _("Target file is a directory"));
-+          goto err_out;
-+        }
-+      else if (!is_symlink ||
-+#ifdef S_ISLNK
-+               !S_ISLNK (original_stat.st_mode)
-+#else
-+               FALSE
-+#endif
-+               )
-+        {
-+          g_set_error_literal (error,
-+                               G_IO_ERROR,
-+                               G_IO_ERROR_NOT_REGULAR_FILE,
-+                               _("Target file is not a regular file"));
-+          goto err_out;
-+        }
-     }
-   
-   if (etag != NULL)
-@@ -1006,7 +1035,8 @@ handle_overwrite_open (const char    *filename,
- 	    }
- 	}
- 
--      g_close (fd, NULL);
-+      if (fd >= 0)
-+        g_close (fd, NULL);
-       *temp_filename = tmp_filename;
-       return tmpfd;
-     }
-diff --git a/gio/tests/file.c b/gio/tests/file.c
-index efb2eaadd..bc55f3af4 100644
---- a/gio/tests/file.c
-+++ b/gio/tests/file.c
-@@ -804,6 +804,113 @@ test_replace_cancel (void)
-   g_object_unref (tmpdir);
- }
- 
-+static void
-+test_replace_symlink (void)
-+{
-+#ifdef G_OS_UNIX
-+  gchar *tmpdir_path = NULL;
-+  GFile *tmpdir = NULL, *source_file = NULL, *target_file = NULL;
-+  GFileOutputStream *stream = NULL;
-+  const gchar *new_contents = "this is a test message which should be written to source and not target";
-+  gsize n_written;
-+  GFileEnumerator *enumerator = NULL;
-+  GFileInfo *info = NULL;
-+  gchar *contents = NULL;
-+  gsize length = 0;
-+  GError *local_error = NULL;
-+
-+  g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2325");
-+  g_test_summary ("Test that G_FILE_CREATE_REPLACE_DESTINATION doesn’t follow symlinks");
-+
-+  /* Create a fresh, empty working directory. */
-+  tmpdir_path = g_dir_make_tmp ("g_file_replace_symlink_XXXXXX", &local_error);
-+  g_assert_no_error (local_error);
-+  tmpdir = g_file_new_for_path (tmpdir_path);
-+
-+  g_test_message ("Using temporary directory %s", tmpdir_path);
-+  g_free (tmpdir_path);
-+
-+  /* Create symlink `source` which points to `target`. */
-+  source_file = g_file_get_child (tmpdir, "source");
-+  target_file = g_file_get_child (tmpdir, "target");
-+  g_file_make_symbolic_link (source_file, "target", NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  /* Ensure that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Replace the `source` symlink with a regular file using
-+   * %G_FILE_CREATE_REPLACE_DESTINATION, which should replace it *without*
-+   * following the symlink */
-+  stream = g_file_replace (source_file, NULL, FALSE  /* no backup */,
-+                           G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_output_stream_write_all (G_OUTPUT_STREAM (stream), new_contents, strlen (new_contents),
-+                             &n_written, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpint (n_written, ==, strlen (new_contents));
-+
-+  g_output_stream_close (G_OUTPUT_STREAM (stream), NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&stream);
-+
-+  /* At this point, there should still only be one file: `source`. It should
-+   * now be a regular file. `target` should not exist. */
-+  enumerator = g_file_enumerate_children (tmpdir,
-+                                          G_FILE_ATTRIBUTE_STANDARD_NAME ","
-+                                          G_FILE_ATTRIBUTE_STANDARD_TYPE,
-+                                          G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_nonnull (info);
-+
-+  g_assert_cmpstr (g_file_info_get_name (info), ==, "source");
-+  g_assert_cmpint (g_file_info_get_file_type (info), ==, G_FILE_TYPE_REGULAR);
-+
-+  g_clear_object (&info);
-+
-+  info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_null (info);
-+
-+  g_file_enumerator_close (enumerator, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+  g_clear_object (&enumerator);
-+
-+  /* Double-check that `target` doesn’t exist */
-+  g_assert_false (g_file_query_exists (target_file, NULL));
-+
-+  /* Check the content of `source`. */
-+  g_file_load_contents (source_file,
-+                        NULL,
-+                        &contents,
-+                        &length,
-+                        NULL,
-+                        &local_error);
-+  g_assert_no_error (local_error);
-+  g_assert_cmpstr (contents, ==, new_contents);
-+  g_assert_cmpuint (length, ==, strlen (new_contents));
-+  g_free (contents);
-+
-+  /* Tidy up. */
-+  g_file_delete (source_file, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_file_delete (tmpdir, NULL, &local_error);
-+  g_assert_no_error (local_error);
-+
-+  g_clear_object (&target_file);
-+  g_clear_object (&source_file);
-+  g_clear_object (&tmpdir);
-+#else  /* if !G_OS_UNIX */
-+  g_test_skip ("Symlink replacement tests can only be run on Unix")
-+#endif
-+}
-+
- static void
- on_file_deleted (GObject      *object,
- 		 GAsyncResult *result,
-@@ -1754,6 +1861,7 @@ main (int argc, char *argv[])
-   g_test_add_data_func ("/file/async-create-delete/4096", GINT_TO_POINTER (4096), test_create_delete);
-   g_test_add_func ("/file/replace-load", test_replace_load);
-   g_test_add_func ("/file/replace-cancel", test_replace_cancel);
-+  g_test_add_func ("/file/replace-symlink", test_replace_symlink);
-   g_test_add_func ("/file/async-delete", test_async_delete);
- #ifdef G_OS_UNIX
-   g_test_add_func ("/file/copy-preserve-mode", test_copy_preserve_mode);
--- 
-2.30.1
-
diff --git a/gnu/packages/patches/glib-skip-failing-test.patch b/gnu/packages/patches/glib-skip-failing-test.patch
new file mode 100644
index 0000000000..c7706aaa74
--- /dev/null
+++ b/gnu/packages/patches/glib-skip-failing-test.patch
@@ -0,0 +1,27 @@
+This test timed out on powerpc-linux even after extending the
+test_timeout_slow to 1800 seconds. Previously we tried to work around
+this test by extending test_timeout_slow by 1.5 its previous value.
+
+---
+ gio/tests/meson.build | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/gio/tests/meson.build b/gio/tests/meson.build
+index a926ae0..4fdbe7a 100644
+--- a/gio/tests/meson.build
++++ b/gio/tests/meson.build
+@@ -317,10 +317,6 @@ if host_machine.system() != 'windows'
+         'extra_sources' : [extra_sources, gdbus_test_codegen_generated, gdbus_test_codegen_generated_interface_info],
+         'c_args' : ['-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32'],
+       },
+-      'gdbus-threading' : {
+-        'extra_sources' : extra_sources,
+-        'suite' : ['slow'],
+-      },
+       'gmenumodel' : {
+         'extra_sources' : extra_sources,
+         'suite' : ['slow'],
+
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/glib-tests-timer.patch b/gnu/packages/patches/glib-tests-timer.patch
deleted file mode 100644
index e37425c0c8..0000000000
--- a/gnu/packages/patches/glib-tests-timer.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-* On i686 floating-point roundoff errors could sometimes cause this check to
-  fail depending on the elapsed microseconds.  Improve rounding by adding a
-  fractional bit.
-
---- glib-2.40.0/glib/tests/timer.c	2014-03-05 08:05:42.000000000 -0600
-+++ glib-2.40.0/glib/tests/timer.c	2014-07-10 16:33:12.746862822 -0500
-@@ -35,7 +35,7 @@
-   elapsed = g_timer_elapsed (timer, &micros);
- 
-   g_assert_cmpfloat (elapsed, <, 1.0);
--  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6)) % 1000000);
-+  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6 + 0.5)) % 1000000);
- 
-   g_timer_destroy (timer);
- }
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
index 39eb47ef26..fcaf17132d 100644
--- a/gnu/packages/patches/glibc-bootstrap-system.patch
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -3,17 +3,10 @@ and popen(3) need to be tweaked to use the right shell.  For the bootstrap
 glibc, we just use whatever `sh' can be found in $PATH.  The final glibc
 instead uses the hard-coded absolute file name of `bash'.
 
---- a/sysdeps/posix/system.c
-+++ b/sysdeps/posix/system.c
-@@ -140,7 +140,7 @@ do_system (const char *line)
-   __posix_spawnattr_setflags (&spawn_attr,
- 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
- 
--  status = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
-+  status = posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
- 			  (char *const[]){ (char*) SHELL_NAME,
- 					   (char*) "-c",
- 					   (char *) line, NULL },
+In addition, status should be initialized to 0 and not -1.
+
+diff --git a/libio/iopopen.c b/libio/iopopen.c
+index ebc381ed7c..e0d3ed1bc3 100644
 --- a/libio/iopopen.c
 +++ b/libio/iopopen.c
 @@ -85,7 +85,7 @@ spawn_process (posix_spawn_file_actions_t *fa, FILE *fp, const char *command,
@@ -25,4 +18,25 @@ instead uses the hard-coded absolute file name of `bash'.
  		     (char *const[]){ (char*) "sh", (char*) "-c",
  		     (char *) command, NULL }, __environ) != 0)
      return false;
-
+diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c
+index a03f478fc7..94da6facf3 100644
+--- a/sysdeps/posix/system.c
++++ b/sysdeps/posix/system.c
+@@ -101,7 +101,7 @@ cancel_handler (void *arg)
+ static int
+ do_system (const char *line)
+ {
+-  int status = -1;
++  int status = 0;
+   int ret;
+   pid_t pid;
+   struct sigaction sa;
+@@ -145,7 +145,7 @@ do_system (const char *line)
+   __posix_spawnattr_setflags (&spawn_attr,
+ 			      POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK);
+ 
+-  ret = __posix_spawn (&pid, SHELL_PATH, 0, &spawn_attr,
++  ret = posix_spawnp (&pid, SHELL_NAME, 0, &spawn_attr,
+ 		       (char *const[]){ (char *) SHELL_NAME,
+ 					(char *) "-c",
+ 					(char *) line, NULL },
diff --git a/gnu/packages/patches/glibc-cross-objcopy.patch b/gnu/packages/patches/glibc-cross-objcopy.patch
new file mode 100644
index 0000000000..e4c693aa44
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objcopy.patch
@@ -0,0 +1,159 @@
+Use 'powerpc64le-linux-gnu-objcopy' rather than 'objcopy' when cross-compiling
+to powerpc64le-linux-gnu: <https://issues.guix.gnu.org/49417>.
+
+Patch submitted:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 13a791ffde..5b370c07a2 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+ AC_SUBST(GPROF)
+ 
+diff --git a/configure b/configure
+index fe0eda1cd5..3a08270734 100755
+--- a/configure
++++ b/configure
+@@ -654,7 +654,6 @@ MAKE
+ LD
+ AS
+ GPROF
+-OBJCOPY
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -689,6 +688,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJCOPY
+ OBJDUMP
+ READELF
+ CPP
+@@ -3054,6 +3054,98 @@ else
+   OBJDUMP="$ac_cv_prog_OBJDUMP"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJCOPY"; then
++  ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJCOPY=$ac_cv_prog_OBJCOPY
++if test -n "$OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
++$as_echo "$OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJCOPY"; then
++  ac_ct_OBJCOPY=$OBJCOPY
++  # Extract the first word of "objcopy", so it can be a program name with args.
++set dummy objcopy; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJCOPY"; then
++  ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJCOPY="objcopy"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
++if test -n "$ac_ct_OBJCOPY"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5
++$as_echo "$ac_ct_OBJCOPY" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJCOPY" = x; then
++    OBJCOPY="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJCOPY=$ac_ct_OBJCOPY
++  fi
++else
++  OBJCOPY="$ac_cv_prog_OBJCOPY"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4645,8 +4737,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJCOPY=`$CC -print-prog-name=objcopy`
+-
+ GPROF=`$CC -print-prog-name=gprof`
+ 
+ 
+diff --git a/configure.ac b/configure.ac
+index 924af12738..2148cd2ec8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,7 @@ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
++AC_CHECK_TOOL(OBJCOPY, objcopy, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-cross-objdump.patch b/gnu/packages/patches/glibc-cross-objdump.patch
new file mode 100644
index 0000000000..1660d915f7
--- /dev/null
+++ b/gnu/packages/patches/glibc-cross-objdump.patch
@@ -0,0 +1,159 @@
+Arrange so that glibc uses 'TRIPLET-objdump -f' rather than 'objdump -f'
+to determine the 'OUTPUT_FORMAT' value in libc.so when cross-compiling.
+
+Patch submitted upstream:
+  <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>.
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index c195c4db56..13a791ffde 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ AC_SUBST(AR)
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-AC_SUBST(OBJDUMP)
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ AC_SUBST(OBJCOPY)
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure b/configure
+index 9619c10991..fe0eda1cd5 100755
+--- a/configure
++++ b/configure
+@@ -655,7 +655,6 @@ LD
+ AS
+ GPROF
+ OBJCOPY
+-OBJDUMP
+ AR
+ LN_S
+ INSTALL_DATA
+@@ -690,6 +689,7 @@ sysheaders
+ ac_ct_CXX
+ CXXFLAGS
+ CXX
++OBJDUMP
+ READELF
+ CPP
+ cross_compiling
+@@ -2962,6 +2962,98 @@ else
+   READELF="$ac_cv_prog_READELF"
+ fi
+ 
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$OBJDUMP"; then
++  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJDUMP=$ac_cv_prog_OBJDUMP
++if test -n "$OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
++$as_echo "$OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJDUMP"; then
++  ac_ct_OBJDUMP=$OBJDUMP
++  # Extract the first word of "objdump", so it can be a program name with args.
++set dummy objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$ac_ct_OBJDUMP"; then
++  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_ac_ct_OBJDUMP="objdump"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
++if test -n "$ac_ct_OBJDUMP"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
++$as_echo "$ac_ct_OBJDUMP" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_ct_OBJDUMP" = x; then
++    OBJDUMP="false"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    OBJDUMP=$ac_ct_OBJDUMP
++  fi
++else
++  OBJDUMP="$ac_cv_prog_OBJDUMP"
++fi
++
+ 
+ # We need the C++ compiler only for testing.
+ ac_ext=cpp
+@@ -4553,8 +4645,6 @@ AS=`$CC -print-prog-name=as`
+ LD=`$CC -print-prog-name=ld`
+ AR=`$CC -print-prog-name=ar`
+ 
+-OBJDUMP=`$CC -print-prog-name=objdump`
+-
+ OBJCOPY=`$CC -print-prog-name=objcopy`
+ 
+ GPROF=`$CC -print-prog-name=gprof`
+diff --git a/configure.ac b/configure.ac
+index 34ecbba540..924af12738 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -52,6 +52,7 @@ fi
+ AC_SUBST(cross_compiling)
+ AC_PROG_CPP
+ AC_CHECK_TOOL(READELF, readelf, false)
++AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ 
+ # We need the C++ compiler only for testing.
+ AC_PROG_CXX
diff --git a/gnu/packages/patches/glibc-dl-cache.patch b/gnu/packages/patches/glibc-dl-cache.patch
new file mode 100644
index 0000000000..68c3a94846
--- /dev/null
+++ b/gnu/packages/patches/glibc-dl-cache.patch
@@ -0,0 +1,140 @@
+Read the shared library cache relative to $ORIGIN instead of reading
+from /etc/ld.so.cache.  Also arrange so that this cache takes
+precedence over RUNPATH.
+
+diff --git a/elf/dl-cache.c b/elf/dl-cache.c
+index 93d185e788..e0760a1f40 100644
+--- a/elf/dl-cache.c
++++ b/elf/dl-cache.c
+@@ -171,6 +171,51 @@ _dl_cache_libcmp (const char *p1, const char *p2)
+   return *p1 - *p2;
+ }
+ 
++/* Special value representing the lack of an ld.so cache.  */
++static const char ld_so_cache_lacking[] = "/ld.so cache is lacking";
++
++/* Return the per-application ld.so cache, relative to $ORIGIN, or NULL if
++   that fails for some reason.  Do not return the system-wide LD_SO_CACHE
++   since on a foreign distro it would contain invalid information.  */
++static const char *
++ld_so_cache (void)
++{
++  static const char *loader_cache;
++
++  if (loader_cache == NULL)
++    {
++      static const char store[] = @STORE_DIRECTORY@;
++      const char *origin = _dl_get_origin ();
++
++      /* Check whether ORIGIN is something like "/gnu/store/…-foo/bin".  */
++      if (strncmp (store, origin, strlen (store)) == 0
++	  && origin[sizeof store - 1] == '/')
++	{
++	  char *store_item_end = strchr (origin + sizeof store, '/');
++
++	  if (store_item_end != NULL)
++	    {
++	      static const char suffix[] = "/etc/ld.so.cache";
++	      size_t store_item_len = store_item_end - origin;
++
++	      /* Note: We can't use 'malloc' because it can be interposed.
++		 Likewise, 'strncpy' is not available.  */
++	      char *cache = alloca (strlen (origin) + sizeof suffix);
++
++	      strcpy (cache, origin);
++	      strcpy (cache + store_item_len, suffix);
++
++	      loader_cache = __strdup (cache) ?: ld_so_cache_lacking;
++	    }
++	  else
++	    loader_cache = ld_so_cache_lacking;
++	}
++      else
++	loader_cache = ld_so_cache_lacking;
++    }
++
++  return loader_cache;
++}
+ 
+ /* Look up NAME in ld.so.cache and return the file name stored there, or null
+    if none is found.  The cache is loaded if it was not already.  If loading
+@@ -190,12 +235,15 @@ _dl_load_cache_lookup (const char *name)
+ 
+   /* Print a message if the loading of libs is traced.  */
+   if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
+-    _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE);
++    _dl_debug_printf (" search cache=%s\n", ld_so_cache ());
++
++  if (__glibc_unlikely (ld_so_cache () == ld_so_cache_lacking))
++    return NULL;
+ 
+   if (cache == NULL)
+     {
+       /* Read the contents of the file.  */
+-      void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize,
++      void *file = _dl_sysdep_read_whole_file (ld_so_cache (), &cachesize,
+ 					       PROT_READ);
+ 
+       /* We can handle three different cache file formats here:
+diff --git a/elf/dl-load.c b/elf/dl-load.c
+index f3201e7c14..a69aec3428 100644
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
+@@ -2152,28 +2152,6 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 			loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded,
+ 			LA_SER_LIBPATH, &found_other_class);
+ 
+-      /* Look at the RUNPATH information for this binary.  */
+-      if (fd == -1 && loader != NULL
+-	  && cache_rpath (loader, &loader->l_runpath_dirs,
+-			  DT_RUNPATH, "RUNPATH"))
+-	fd = open_path (name, namelen, mode,
+-			&loader->l_runpath_dirs, &realname, &fb, loader,
+-			LA_SER_RUNPATH, &found_other_class);
+-
+-      if (fd == -1)
+-        {
+-          realname = _dl_sysdep_open_object (name, namelen, &fd);
+-          if (realname != NULL)
+-            {
+-              fd = open_verify (realname, fd,
+-                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
+-                                LA_SER_CONFIG, mode, &found_other_class,
+-                                false);
+-              if (fd == -1)
+-                free (realname);
+-            }
+-        }
+-
+ #ifdef USE_LDCONFIG
+       if (fd == -1
+ 	  && (__glibc_likely ((mode & __RTLD_SECURE) == 0)
+@@ -2232,6 +2210,28 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 	}
+ #endif
+ 
++      /* Look at the RUNPATH information for this binary.  */
++      if (fd == -1 && loader != NULL
++	  && cache_rpath (loader, &loader->l_runpath_dirs,
++			  DT_RUNPATH, "RUNPATH"))
++	fd = open_path (name, namelen, mode,
++			&loader->l_runpath_dirs, &realname, &fb, loader,
++			LA_SER_RUNPATH, &found_other_class);
++
++      if (fd == -1)
++        {
++          realname = _dl_sysdep_open_object (name, namelen, &fd);
++          if (realname != NULL)
++            {
++              fd = open_verify (realname, fd,
++                                &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
++                                LA_SER_CONFIG, mode, &found_other_class,
++                                false);
++              if (fd == -1)
++                free (realname);
++            }
++        }
++
+       /* Finally, try the default path.  */
+       if (fd == -1
+ 	  && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
diff --git a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
index 1c3fe427f9..e31f99a1ce 100644
--- a/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
+++ b/gnu/packages/patches/glibc-hurd-clock_gettime_monotonic.patch
@@ -24,18 +24,17 @@ Subject: [PATCH 2/2] Use realtime clock for the monotonic clock.
  4 files changed, 6 insertions(+), 5 deletions(-)
 
 diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c
-index ac3547df3c..af8681ba4e 100644
+index 6862fc8c..be1449bf 100644
 --- a/sysdeps/mach/clock_gettime.c
 +++ b/sysdeps/mach/clock_gettime.c
-@@ -25,7 +25,7 @@
- int
- __clock_gettime (clockid_t clock_id, struct timespec *ts)
- {
--  if (clock_id != CLOCK_REALTIME)
-+  if (clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_REALTIME)
-     {
-       errno = EINVAL;
-       return -1;
+@@ -32,6 +32,7 @@ __clock_gettime (clockid_t clock_id, struct timespec *ts)
+   switch (clock_id) {
+ 
+     case CLOCK_REALTIME:
++    case CLOCK_MONOTONIC:
+       {
+ 	/* __host_get_time can only fail if passed an invalid host_t.
+ 	   __mach_host_self could theoretically fail (producing an
 diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
 index 0050151332..27b3a28ab7 100644
 --- a/sysdeps/mach/hurd/bits/posix_opt.h
diff --git a/gnu/packages/patches/glibc-hurd-signal-sa-siginfo.patch b/gnu/packages/patches/glibc-hurd-signal-sa-siginfo.patch
deleted file mode 100644
index 36ea55e188..0000000000
--- a/gnu/packages/patches/glibc-hurd-signal-sa-siginfo.patch
+++ /dev/null
@@ -1,637 +0,0 @@
-This patch is needed to build e2fsprogs, util-linux.
-
-Taken from https://salsa.debian.org/glibc-team/glibc/-/blob/glibc-2.31/debian/patches/hurd-i386/tg-hurdsig-SA_SIGINFO.diff
-
-From: Jeremie Koenig <jk@jk.fr.eu.org>
-Subject: [PATCH] implement SA_SIGINFO signal handlers.
-
-    52baaca Hurd signals: Copy bits/sigaction.h
-    4232c66 Hurd signals: SA_SIGINFO support
-    1831cfe Hurd signals: Use POSIX sigcodes
-
----
- hurd/hurd/signal.h                       |    5 +
- hurd/hurdfault.c                         |    2 
- hurd/hurdinit.c                          |    2 
- hurd/hurdsig.c                           |    6 -
- sysdeps/mach/hurd/bits/sigaction.h       |   86 +++++++++++++++++++++
- sysdeps/mach/hurd/i386/bits/sigcontext.h |    4 
- sysdeps/mach/hurd/i386/exc2signal.c      |  123 +++++++++++++++++++-----------
- sysdeps/mach/hurd/i386/trampoline.c      |  125 ++++++++++++++++++++++++++++---
- sysdeps/mach/hurd/kill.c                 |    2 
- sysdeps/mach/hurd/setitimer.c            |    2 
- 10 files changed, 293 insertions(+), 64 deletions(-)
-
-Index: glibc-2.31/hurd/hurd/signal.h
-===================================================================
---- glibc-2.31.orig/hurd/hurd/signal.h
-+++ glibc-2.31/hurd/hurd/signal.h
-@@ -290,6 +290,11 @@ extern int _hurd_raise_signal (struct hu
- extern void _hurd_exception2signal (struct hurd_signal_detail *detail,
- 				    int *signo);
- 
-+/* Translate a Mach exception into a signal with a legacy sigcode.  */
-+
-+extern void _hurd_exception2signal_legacy (struct hurd_signal_detail *detail,
-+					   int *signo);
-+
- 
- /* Make the thread described by SS take the signal described by SIGNO and
-    DETAIL.  If the process is traced, this will in fact stop with a SIGNO
-Index: glibc-2.31/hurd/hurdfault.c
-===================================================================
---- glibc-2.31.orig/hurd/hurdfault.c
-+++ glibc-2.31/hurd/hurdfault.c
-@@ -70,7 +70,7 @@ _hurdsig_fault_catch_exception_raise (ma
-      codes into a signal number and subcode.  */
-   _hurd_exception2signal (&d, &signo);
- 
--  return HURD_PREEMPT_SIGNAL_P (&_hurdsig_fault_preemptor, signo, d.code)
-+  return HURD_PREEMPT_SIGNAL_P (&_hurdsig_fault_preemptor, signo, d.exc_subcode)
-     ? 0 : EGREGIOUS;
- }
- 
-Index: glibc-2.31/hurd/hurdinit.c
-===================================================================
---- glibc-2.31.orig/hurd/hurdinit.c
-+++ glibc-2.31/hurd/hurdinit.c
-@@ -177,7 +177,7 @@ _hurd_new_proc_init (char **argv,
-     /* This process is "traced", meaning it should stop on signals or exec.
-        We are all set up now to handle signals.  Stop ourselves, to inform
-        our parent (presumably a debugger) that the exec has completed.  */
--    __msg_sig_post (_hurd_msgport, SIGTRAP, 0, __mach_task_self ());
-+    __msg_sig_post (_hurd_msgport, SIGTRAP, TRAP_TRACE, __mach_task_self ());
- }
- 
- #include <shlib-compat.h>
-Index: glibc-2.31/hurd/hurdsig.c
-===================================================================
---- glibc-2.31.orig/hurd/hurdsig.c
-+++ glibc-2.31/hurd/hurdsig.c
-@@ -730,7 +730,7 @@ post_signal (struct hurd_sigstate *ss,
-       {				/* PE cannot be null.  */
- 	do
- 	  {
--	    if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->code))
-+	    if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->exc_subcode))
- 	      {
- 		if (pe->preemptor)
- 		  {
-@@ -1374,7 +1374,7 @@ _S_msg_sig_post (mach_port_t me,
-   if (err = signal_allowed (signo, refport))
-     return err;
- 
--  d.code = sigcode;
-+  d.code = d.exc_subcode = sigcode;
-   d.exc = 0;
- 
-   /* Post the signal to a global receiver thread (or mark it pending in
-@@ -1403,7 +1403,7 @@ _S_msg_sig_post_untraced (mach_port_t me
-   if (err = signal_allowed (signo, refport))
-     return err;
- 
--  d.code = sigcode;
-+  d.code = d.exc_subcode = sigcode;
-   d.exc = 0;
- 
-   /* Post the signal to the designated signal-receiving thread.  This will
-Index: glibc-2.31/sysdeps/mach/hurd/bits/sigaction.h
-===================================================================
---- /dev/null
-+++ glibc-2.31/sysdeps/mach/hurd/bits/sigaction.h
-@@ -0,0 +1,86 @@
-+/* Copyright (C) 1991-2015 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, write to the Free
-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+   02111-1307 USA.  */
-+
-+#ifndef _BITS_SIGACTION_H
-+#define _BITS_SIGACTION_H 1
-+
-+#ifndef _SIGNAL_H
-+# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
-+#endif
-+
-+/* These definitions match those used by the 4.4 BSD kernel.
-+   If the operating system has a `sigaction' system call that correctly
-+   implements the POSIX.1 behavior, there should be a system-dependent
-+   version of this file that defines `struct sigaction' and the `SA_*'
-+   constants appropriately.  */
-+
-+/* Structure describing the action to be taken when a signal arrives.  */
-+struct sigaction
-+  {
-+    /* Signal handler.  */
-+#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
-+    union
-+      {
-+	/* Used if SA_SIGINFO is not set.  */
-+	__sighandler_t sa_handler;
-+	/* Used if SA_SIGINFO is set.  */
-+	void (*sa_sigaction) (int, siginfo_t *, void *);
-+      }
-+    __sigaction_handler;
-+# define sa_handler	__sigaction_handler.sa_handler
-+# define sa_sigaction	__sigaction_handler.sa_sigaction
-+#else
-+    __sighandler_t sa_handler;
-+#endif
-+
-+    /* Additional set of signals to be blocked.  */
-+    __sigset_t sa_mask;
-+
-+    /* Special flags.  */
-+    int sa_flags;
-+  };
-+
-+/* Bits in `sa_flags'.  */
-+#if defined __USE_XOPEN_EXTENDED || defined __USE_MISC
-+# define SA_ONSTACK	0x0001	/* Take signal on signal stack.  */
-+#endif
-+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
-+# define SA_RESTART	0x0002	/* Restart syscall on signal return.  */
-+# define SA_NODEFER	0x0010	/* Don't automatically block the signal when
-+				    its handler is being executed.  */
-+# define SA_RESETHAND	0x0004	/* Reset to SIG_DFL on entry to handler.  */
-+#endif
-+#define	SA_NOCLDSTOP	0x0008	/* Don't send SIGCHLD when children stop.  */
-+#define SA_SIGINFO	0x0040	/* Signal handler with SA_SIGINFO args */
-+
-+#ifdef __USE_MISC
-+# define SA_INTERRUPT	0	/* Historical no-op ("not SA_RESTART").  */
-+
-+/* Some aliases for the SA_ constants.  */
-+# define SA_NOMASK    SA_NODEFER
-+# define SA_ONESHOT   SA_RESETHAND
-+# define SA_STACK     SA_ONSTACK
-+#endif
-+
-+
-+/* Values for the HOW argument to `sigprocmask'.  */
-+#define	SIG_BLOCK	1	/* Block signals.  */
-+#define	SIG_UNBLOCK	2	/* Unblock signals.  */
-+#define	SIG_SETMASK	3	/* Set the set of blocked signals.  */
-+
-+#endif
-Index: glibc-2.31/sysdeps/mach/hurd/i386/bits/sigcontext.h
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/i386/bits/sigcontext.h
-+++ glibc-2.31/sysdeps/mach/hurd/i386/bits/sigcontext.h
-@@ -97,6 +97,10 @@ struct sigcontext
- #define sc_ps	sc_efl
- 
- 
-+/* The deprecated sigcode values below are passed as an extra, non-portable
-+   argument to regular signal handlers.  You should use SA_SIGINFO handlers
-+   instead, which use the standard POSIX signal codes.  */
-+
- /* Codes for SIGFPE.  */
- #define FPE_INTOVF_TRAP		0x1 /* integer overflow */
- #define FPE_INTDIV_FAULT	0x2 /* integer divide by zero */
-Index: glibc-2.31/sysdeps/mach/hurd/i386/exc2signal.c
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/i386/exc2signal.c
-+++ glibc-2.31/sysdeps/mach/hurd/i386/exc2signal.c
-@@ -23,8 +23,8 @@
- /* Translate the Mach exception codes, as received in an `exception_raise' RPC,
-    into a signal number and signal subcode.  */
- 
--void
--_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo)
-+static void
-+exception2signal (struct hurd_signal_detail *detail, int *signo, int posix)
- {
-   detail->error = 0;
- 
-@@ -36,44 +36,62 @@ _hurd_exception2signal (struct hurd_sign
-       break;
- 
-     case EXC_BAD_ACCESS:
--      if (detail->exc_code == KERN_INVALID_ADDRESS
--	  || detail->exc_code == KERN_PROTECTION_FAILURE
--	  || detail->exc_code == KERN_WRITE_PROTECTION_FAILURE)
--	*signo = SIGSEGV;
--      else
--	*signo = SIGBUS;
--      detail->code = detail->exc_subcode;
-+      switch (detail->exc_code)
-+        {
-+	case KERN_INVALID_ADDRESS:
-+	case KERN_MEMORY_FAILURE:
-+	  *signo = SIGSEGV;
-+	  detail->code = posix ? SEGV_MAPERR : detail->exc_subcode;
-+	  break;
-+
-+	case KERN_PROTECTION_FAILURE:
-+	case KERN_WRITE_PROTECTION_FAILURE:
-+	  *signo = SIGSEGV;
-+	  detail->code = posix ? SEGV_ACCERR : detail->exc_subcode;
-+	  break;
-+
-+	default:
-+	  *signo = SIGBUS;
-+	  detail->code = posix ? BUS_ADRERR : detail->exc_subcode;
-+	  break;
-+	}
-       detail->error = detail->exc_code;
-       break;
- 
-     case EXC_BAD_INSTRUCTION:
-       *signo = SIGILL;
--      if (detail->exc_code == EXC_I386_INVOP)
--	detail->code = ILL_INVOPR_FAULT;
--      else if (detail->exc_code == EXC_I386_STKFLT)
--	detail->code = ILL_STACK_FAULT;
--      else
--	detail->code = 0;
-+      switch (detail->exc_code)
-+        {
-+	case EXC_I386_INVOP:
-+	  detail->code = posix ? ILL_ILLOPC : ILL_INVOPR_FAULT;
-+	  break;
-+
-+	case EXC_I386_STKFLT:
-+	  detail->code = posix ? ILL_BADSTK : ILL_STACK_FAULT;
-+	  break;
-+
-+	default:
-+	  detail->code = 0;
-+	  break;
-+	}
-       break;
- 
-     case EXC_ARITHMETIC:
-+      *signo = SIGFPE;
-       switch (detail->exc_code)
- 	{
- 	case EXC_I386_DIV:	/* integer divide by zero */
--	  *signo = SIGFPE;
--	  detail->code = FPE_INTDIV_FAULT;
-+	  detail->code = posix ? FPE_INTDIV : FPE_INTDIV_FAULT;
- 	  break;
- 
- 	case EXC_I386_INTO:	/* integer overflow */
--	  *signo = SIGFPE;
--	  detail->code = FPE_INTOVF_TRAP;
-+	  detail->code = posix ? FPE_INTOVF : FPE_INTOVF_TRAP;
- 	  break;
- 
- 	  /* These aren't anywhere documented or used in Mach 3.0.  */
- 	case EXC_I386_NOEXT:
- 	case EXC_I386_EXTOVR:
- 	default:
--	  *signo = SIGFPE;
- 	  detail->code = 0;
- 	  break;
- 
-@@ -82,51 +100,43 @@ _hurd_exception2signal (struct hurd_sign
- 	     Give an error code corresponding to the first bit set.  */
- 	  if (detail->exc_subcode & FPS_IE)
- 	    {
--	      *signo = SIGILL;
--	      detail->code = ILL_FPEOPR_FAULT;
-+	      /* NB: We used to send SIGILL here but we can't distinguish
-+		 POSIX vs. legacy with respect to what signal we send.  */
-+	      detail->code = posix ? FPE_FLTINV : 0 /*ILL_FPEOPR_FAULT*/;
- 	    }
- 	  else if (detail->exc_subcode & FPS_DE)
- 	    {
--	      *signo = SIGFPE;
--	      detail->code = FPE_FLTDNR_FAULT;
-+	      detail->code = posix ? FPE_FLTUND : FPE_FLTDNR_FAULT;
- 	    }
- 	  else if (detail->exc_subcode & FPS_ZE)
- 	    {
--	      *signo = SIGFPE;
--	      detail->code = FPE_FLTDIV_FAULT;
-+	      detail->code = posix ? FPE_FLTDIV : FPE_FLTDIV_FAULT;
- 	    }
- 	  else if (detail->exc_subcode & FPS_OE)
- 	    {
--	      *signo = SIGFPE;
--	      detail->code = FPE_FLTOVF_FAULT;
-+	      detail->code = posix ? FPE_FLTOVF : FPE_FLTOVF_FAULT;
- 	    }
- 	  else if (detail->exc_subcode & FPS_UE)
- 	    {
--	      *signo = SIGFPE;
--	      detail->code = FPE_FLTUND_FAULT;
-+	      detail->code = posix ? FPE_FLTUND : FPE_FLTUND_FAULT;
- 	    }
- 	  else if (detail->exc_subcode & FPS_PE)
- 	    {
--	      *signo = SIGFPE;
--	      detail->code = FPE_FLTINX_FAULT;
-+	      detail->code = posix ? FPE_FLTRES : FPE_FLTINX_FAULT;
- 	    }
- 	  else
- 	    {
--	      *signo = SIGFPE;
- 	      detail->code = 0;
- 	    }
- 	  break;
- 
- 	  /* These two can only be arithmetic exceptions if we
--	     are in V86 mode, which sounds like emulation to me.
--	     (See Mach 3.0 i386/trap.c.)  */
-+	     are in V86 mode.  (See Mach 3.0 i386/trap.c.)  */
- 	case EXC_I386_EMERR:
--	  *signo = SIGFPE;
--	  detail->code = FPE_EMERR_FAULT;
-+	  detail->code = posix ? 0 : FPE_EMERR_FAULT;
- 	  break;
- 	case EXC_I386_BOUND:
--	  *signo = SIGFPE;
--	  detail->code = FPE_EMBND_FAULT;
-+	  detail->code = posix ? FPE_FLTSUB : FPE_EMBND_FAULT;
- 	  break;
- 	}
-       break;
-@@ -143,7 +153,7 @@ _hurd_exception2signal (struct hurd_sign
-       if (detail->exc_code == EXC_I386_BOUND)
- 	{
- 	  *signo = SIGFPE;
--	  detail->code = FPE_SUBRNG_FAULT;
-+	  detail->code = posix ? FPE_FLTSUB : FPE_SUBRNG_FAULT;
- 	}
-       else
- 	{
-@@ -154,13 +164,34 @@ _hurd_exception2signal (struct hurd_sign
- 
-     case EXC_BREAKPOINT:
-       *signo = SIGTRAP;
--      if (detail->exc_code == EXC_I386_SGL)
--	detail->code = DBG_SINGLE_TRAP;
--      else if (detail->exc_code == EXC_I386_BPT)
--	detail->code = DBG_BRKPNT_FAULT;
--      else
--	detail->code = 0;
-+      switch (detail->exc_code)
-+        {
-+	case EXC_I386_SGL:
-+	  detail->code = posix ? TRAP_BRKPT : DBG_SINGLE_TRAP;
-+	  break;
-+
-+	case EXC_I386_BPT:
-+	  detail->code = posix ? TRAP_BRKPT : DBG_BRKPNT_FAULT;
-+	  break;
-+
-+	default:
-+	  detail->code = 0;
-+	  break;
-+	}
-       break;
-     }
- }
- libc_hidden_def (_hurd_exception2signal)
-+
-+void
-+_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo)
-+{
-+  exception2signal (detail, signo, 1);
-+}
-+
-+void
-+_hurd_exception2signal_legacy (struct hurd_signal_detail *detail, int *signo)
-+{
-+  exception2signal (detail, signo, 0);
-+}
-+
-Index: glibc-2.31/sysdeps/mach/hurd/i386/trampoline.c
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/i386/trampoline.c
-+++ glibc-2.31/sysdeps/mach/hurd/i386/trampoline.c
-@@ -19,13 +19,66 @@
- #include <hurd/signal.h>
- #include <hurd/userlink.h>
- #include <thread_state.h>
-+#include <mach/exception.h>
- #include <mach/machine/eflags.h>
- #include <assert.h>
- #include <errno.h>
- #include "hurdfault.h"
- #include <intr-msg.h>
-+#include <sys/ucontext.h>
- 
- 
-+/* Fill in a siginfo_t structure for SA_SIGINFO-enabled handlers.  */
-+static void fill_siginfo (siginfo_t *si, int signo,
-+			  const struct hurd_signal_detail *detail,
-+			  const struct machine_thread_all_state *state)
-+{
-+  si->si_signo = signo;
-+  si->si_errno = detail->error;
-+  si->si_code = detail->code;
-+
-+  /* XXX We would need a protocol change for sig_post to include
-+   * this information.  */
-+  si->si_pid = -1;
-+  si->si_uid = -1;
-+
-+  /* Address of the faulting instruction or memory access.  */
-+  if (detail->exc == EXC_BAD_ACCESS)
-+    si->si_addr = (void *) detail->exc_subcode;
-+  else
-+    si->si_addr = (void *) state->basic.eip;
-+
-+  /* XXX On SIGCHLD, this should be the exit status of the child
-+   * process.  We would need a protocol change for the proc server
-+   * to send this information along with the signal.  */
-+  si->si_status = 0;
-+
-+  si->si_band = 0;              /* SIGPOLL is not supported yet.  */
-+  si->si_value.sival_int = 0;   /* sigqueue() is not supported yet.  */
-+}
-+
-+/* Fill in a ucontext_t structure SA_SIGINFO-enabled handlers.  */
-+static void fill_ucontext (ucontext_t *uc, const struct sigcontext *sc)
-+{
-+  uc->uc_flags = 0;
-+  uc->uc_link = NULL;
-+  uc->uc_sigmask = sc->sc_mask;
-+  uc->uc_stack.ss_sp = (__ptr_t) sc->sc_esp;
-+  uc->uc_stack.ss_size = 0;
-+  uc->uc_stack.ss_flags = 0;
-+
-+  /* Registers.  */
-+  memcpy (&uc->uc_mcontext.gregs[REG_GS], &sc->sc_gs,
-+	  (REG_TRAPNO - REG_GS) * sizeof (int));
-+  uc->uc_mcontext.gregs[REG_TRAPNO] = 0;
-+  uc->uc_mcontext.gregs[REG_ERR] = 0;
-+  memcpy (&uc->uc_mcontext.gregs[REG_EIP], &sc->sc_eip,
-+	  (NGREG - REG_EIP) * sizeof (int));
-+
-+  /* XXX FPU state.  */
-+  memset (&uc->uc_mcontext.fpregs, 0, sizeof (fpregset_t));
-+}
-+
- struct sigcontext *
- _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
- 			int signo, struct hurd_signal_detail *detail,
-@@ -43,15 +96,38 @@ _hurd_setup_sighandler (struct hurd_sigs
-   struct
-     {
-       int signo;
--      long int sigcode;
--      struct sigcontext *scp;	/* Points to ctx, below.  */
-+      union
-+	{
-+	  /* Extra arguments for traditional signal handlers */
-+	  struct
-+	    {
-+	      long int sigcode;
-+	      struct sigcontext *scp;       /* Points to ctx, below.  */
-+	    } legacy;
-+
-+	  /* Extra arguments for SA_SIGINFO handlers */
-+	  struct
-+	    {
-+	      siginfo_t *siginfop;          /* Points to siginfo, below.  */
-+	      ucontext_t *uctxp;            /* Points to uctx, below.  */
-+	    } posix;
-+	};
-       void *sigreturn_addr;
-       void *sigreturn_returns_here;
-       struct sigcontext *return_scp; /* Same; arg to sigreturn.  */
-+
-+      /* NB: sigreturn assumes link is next to ctx.  */
-       struct sigcontext ctx;
-       struct hurd_userlink link;
-+      ucontext_t ucontext;
-+      siginfo_t siginfo;
-     } *stackframe;
- 
-+  /* sigaction for preemptors */
-+  static const struct sigaction legacy_sigaction = {
-+    .sa_flags = SA_RESTART
-+  };
-+
-   if (ss->context)
-     {
-       /* We have a previous sigcontext that sigreturn was about
-@@ -94,9 +170,13 @@ _hurd_setup_sighandler (struct hurd_sigs
-      the SP on sigreturn.  */
-     state->basic.uesp = state->basic.ecx;
- 
--  /* XXX what if handler != action->handler (for instance, if a signal
--   * preemptor took over) ? */
-   action = & _hurd_sigstate_actions (ss) [signo];
-+  if ( (action->sa_flags & SA_SIGINFO)
-+        && handler != (__sighandler_t) action->sa_sigaction
-+   || !(action->sa_flags & SA_SIGINFO)
-+        && handler != action->sa_handler)
-+    /* A signal preemptor took over, use legacy semantic.  */
-+    action = &legacy_sigaction;
- 
-   if ((action->sa_flags & SA_ONSTACK)
-       && !(ss->sigaltstack.ss_flags & (SS_DISABLE|SS_ONSTACK)))
-@@ -140,15 +220,9 @@ _hurd_setup_sighandler (struct hurd_sigs
- 	  = &stackframe->link.thread.next;
-       ss->active_resources = &stackframe->link;
- 
--      /* Set up the arguments for the signal handler.  */
--      stackframe->signo = signo;
--      stackframe->sigcode = detail->code;
--      stackframe->scp = stackframe->return_scp = scp = &stackframe->ctx;
--      stackframe->sigreturn_addr = &__sigreturn;
--      stackframe->sigreturn_returns_here = firewall; /* Crash on return.  */
--
-       /* Set up the sigcontext from the current state of the thread.  */
- 
-+      scp = &stackframe->ctx;
-       scp->sc_onstack = ss->sigaltstack.ss_flags & SS_ONSTACK ? 1 : 0;
- 
-       /* struct sigcontext is laid out so that starting at sc_gs mimics a
-@@ -162,6 +236,35 @@ _hurd_setup_sighandler (struct hurd_sigs
- 			      &state->fpu, &scp->sc_i386_float_state,
- 			      sizeof (state->fpu));
- 
-+      /* Set up the arguments for the signal handler.  */
-+      stackframe->signo = signo;
-+      if (action->sa_flags & SA_SIGINFO)
-+	{
-+	  stackframe->posix.siginfop = &stackframe->siginfo;
-+	  stackframe->posix.uctxp = &stackframe->ucontext;
-+	  fill_siginfo (&stackframe->siginfo, signo, detail, state);
-+	  fill_ucontext (&stackframe->ucontext, scp);
-+	}
-+      else
-+	{
-+	  if (detail->exc)
-+	    {
-+	      int nsigno;
-+	      _hurd_exception2signal_legacy (detail, &nsigno);
-+	      assert (nsigno == signo);
-+	    }
-+	  else
-+	    detail->code = 0;
-+
-+	  stackframe->legacy.sigcode = detail->code;
-+	  stackframe->legacy.scp = &stackframe->ctx;
-+	}
-+
-+      /* Set up the bottom of the stack.  */
-+      stackframe->sigreturn_addr = &__sigreturn;
-+      stackframe->sigreturn_returns_here = firewall; /* Crash on return.  */
-+      stackframe->return_scp = &stackframe->ctx;
-+
-       _hurdsig_end_catch_fault ();
- 
-       if (! ok)
-Index: glibc-2.31/sysdeps/mach/hurd/kill.c
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/kill.c
-+++ glibc-2.31/sysdeps/mach/hurd/kill.c
-@@ -64,7 +64,7 @@ __kill (pid_t pid, int sig)
- 	    {
- 	      if (msgport != MACH_PORT_NULL)
- 		/* Send a signal message to his message port.  */
--		return __msg_sig_post (msgport, sig, 0, refport);
-+		return __msg_sig_post (msgport, sig, SI_USER, refport);
- 
- 	      /* The process has no message port.  Perhaps try direct
- 		 frobnication of the task.  */
-Index: glibc-2.31/sysdeps/mach/hurd/setitimer.c
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/setitimer.c
-+++ glibc-2.31/sysdeps/mach/hurd/setitimer.c
-@@ -105,7 +105,7 @@ timer_thread (void)
- 	  __msg_sig_post_request (_hurd_msgport,
- 				  _hurd_itimer_port,
- 				  MACH_MSG_TYPE_MAKE_SEND_ONCE,
--				  SIGALRM, 0, __mach_task_self ());
-+				  SIGALRM, SI_TIMER, __mach_task_self ());
- 	  break;
- 
- 	case MACH_RCV_INTERRUPTED:
-Index: glibc-2.31/sysdeps/mach/hurd/i386/sigcontextinfo.h
-===================================================================
---- glibc-2.31.orig/sysdeps/mach/hurd/i386/sigcontextinfo.h
-+++ glibc-2.31/sysdeps/mach/hurd/i386/sigcontextinfo.h
-@@ -18,11 +18,10 @@
- #ifndef _SIGCONTEXTINFO_H
- #define _SIGCONTEXTINFO_H
- 
--#define SIGCONTEXT struct sigcontext
- static inline uintptr_t
--sigcontext_get_pc (struct sigcontext ctx)
-+sigcontext_get_pc (struct ucontext_t *ctx)
- {
--  return ctx.sc_eip;
-+  return ctx->uc_mcontext.gregs[REG_EIP];
- }
- 
- #endif
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20231.patch b/gnu/packages/patches/gnutls-CVE-2021-20231.patch
deleted file mode 100644
index 5186522eee..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20231.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 15beb4b193b2714d88107e7dffca781798684e7e Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:05 +0100
-Subject: [PATCH 1/2] key_share: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/key_share.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/lib/ext/key_share.c b/lib/ext/key_share.c
-index ab8abf8fe..a8c4bb5cf 100644
---- a/lib/ext/key_share.c
-+++ b/lib/ext/key_share.c
-@@ -664,14 +664,14 @@ key_share_send_params(gnutls_session_t session,
- {
- 	unsigned i;
- 	int ret;
--	unsigned char *lengthp;
--	unsigned int cur_length;
- 	unsigned int generated = 0;
- 	const gnutls_group_entry_st *group;
- 	const version_entry_st *ver;
- 
- 	/* this extension is only being sent on client side */
- 	if (session->security_parameters.entity == GNUTLS_CLIENT) {
-+		unsigned int length_pos;
-+
- 		ver = _gnutls_version_max(session);
- 		if (unlikely(ver == NULL || ver->key_shares == 0))
- 			return 0;
-@@ -679,16 +679,13 @@ key_share_send_params(gnutls_session_t session,
- 		if (!have_creds_for_tls13(session))
- 			return 0;
- 
--		/* write the total length later */
--		lengthp = &extdata->data[extdata->length];
-+		length_pos = extdata->length;
- 
- 		ret =
- 		    _gnutls_buffer_append_prefix(extdata, 16, 0);
- 		if (ret < 0)
- 			return gnutls_assert_val(ret);
- 
--		cur_length = extdata->length;
--
- 		if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { /* we know the group */
- 			group = get_group(session);
- 			if (unlikely(group == NULL))
-@@ -736,7 +733,8 @@ key_share_send_params(gnutls_session_t session,
- 		}
- 
- 		/* copy actual length */
--		_gnutls_write_uint16(extdata->length - cur_length, lengthp);
-+		_gnutls_write_uint16(extdata->length - length_pos - 2,
-+				     &extdata->data[length_pos]);
- 
- 	} else { /* server */
- 		ver = get_version(session);
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/gnutls-CVE-2021-20232.patch b/gnu/packages/patches/gnutls-CVE-2021-20232.patch
deleted file mode 100644
index dc3a0be690..0000000000
--- a/gnu/packages/patches/gnutls-CVE-2021-20232.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 75a937d97f4fefc6f9b08e3791f151445f551cb3 Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <ueno@gnu.org>
-Date: Fri, 29 Jan 2021 14:06:23 +0100
-Subject: [PATCH 2/2] pre_shared_key: avoid use-after-free around realloc
-
-Signed-off-by: Daiki Ueno <ueno@gnu.org>
----
- lib/ext/pre_shared_key.c | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/lib/ext/pre_shared_key.c b/lib/ext/pre_shared_key.c
-index a042c6488..380bf39ed 100644
---- a/lib/ext/pre_shared_key.c
-+++ b/lib/ext/pre_shared_key.c
-@@ -267,7 +267,7 @@ client_send_params(gnutls_session_t session,
- 	size_t spos;
- 	gnutls_datum_t username = {NULL, 0};
- 	gnutls_datum_t user_key = {NULL, 0}, rkey = {NULL, 0};
--	gnutls_datum_t client_hello;
-+	unsigned client_hello_len;
- 	unsigned next_idx;
- 	const mac_entry_st *prf_res = NULL;
- 	const mac_entry_st *prf_psk = NULL;
-@@ -428,8 +428,7 @@ client_send_params(gnutls_session_t session,
- 	assert(extdata->length >= sizeof(mbuffer_st));
- 	assert(ext_offset >= (ssize_t)sizeof(mbuffer_st));
- 	ext_offset -= sizeof(mbuffer_st);
--	client_hello.data = extdata->data+sizeof(mbuffer_st);
--	client_hello.size = extdata->length-sizeof(mbuffer_st);
-+	client_hello_len = extdata->length-sizeof(mbuffer_st);
- 
- 	next_idx = 0;
- 
-@@ -440,6 +439,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_res && rkey.size > 0) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_res,
- 					 binders_len, binders_pos,
- 					 ext_offset, &rkey, &client_hello, 1,
-@@ -474,6 +478,11 @@ client_send_params(gnutls_session_t session,
- 	}
- 
- 	if (prf_psk && user_key.size > 0 && info) {
-+		gnutls_datum_t client_hello;
-+
-+		client_hello.data = extdata->data+sizeof(mbuffer_st);
-+		client_hello.size = client_hello_len;
-+
- 		ret = compute_psk_binder(session, prf_psk,
- 					 binders_len, binders_pos,
- 					 ext_offset, &user_key, &client_hello, 0,
--- 
-2.30.2
-
diff --git a/gnu/packages/patches/graphviz-CVE-2020-18032.patch b/gnu/packages/patches/graphviz-CVE-2020-18032.patch
deleted file mode 100644
index 4cf94a9a36..0000000000
--- a/gnu/packages/patches/graphviz-CVE-2020-18032.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Fix CVE-2020-18032:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-18032
-https://gitlab.com/graphviz/graphviz/-/issues/1700
-
-Patch copied from upstream source repository:
-
-https://gitlab.com/graphviz/graphviz/-/commit/784411ca3655c80da0f6025ab20634b2a6ff696b
-
-From 784411ca3655c80da0f6025ab20634b2a6ff696b Mon Sep 17 00:00:00 2001
-From: Matthew Fernandez <matthew.fernandez@gmail.com>
-Date: Sat, 25 Jul 2020 19:31:01 -0700
-Subject: [PATCH] fix: out-of-bounds write on invalid label
-
-When the label for a node cannot be parsed (due to it being malformed), it falls
-back on the symbol name of the node itself. I.e. the default label the node
-would have had if it had no label attribute at all. However, this is applied by
-dynamically altering the node's label to "\N", a shortcut for the symbol name of
-the node. All of this is fine, however if the hand written label itself is
-shorter than the literal string "\N", not enough memory would have been
-allocated to write "\N" into the label text.
-
-Here we account for the possibility of error during label parsing, and assume
-that the label text may need to be overwritten with "\N" after the fact. Fixes
-issue #1700.
----
- lib/common/shapes.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/lib/common/shapes.c b/lib/common/shapes.c
-index 0a0635fc3..9dca9ba6e 100644
---- a/lib/common/shapes.c
-+++ b/lib/common/shapes.c
-@@ -3546,9 +3546,10 @@ static void record_init(node_t * n)
-     reclblp = ND_label(n)->text;
-     len = strlen(reclblp);
-     /* For some forgotten reason, an empty label is parsed into a space, so
--     * we need at least two bytes in textbuf.
-+     * we need at least two bytes in textbuf, as well as accounting for the
-+     * error path involving "\\N" below.
-      */
--    len = MAX(len, 1);
-+    len = MAX(MAX(len, 1), (int)strlen("\\N"));
-     textbuf = N_NEW(len + 1, char);
-     if (!(info = parse_reclbl(n, flip, TRUE, textbuf))) {
- 	agerr(AGERR, "bad label format %s\n", ND_label(n)->text);
--- 
-2.31.1
-
diff --git a/gnu/packages/patches/guile-ssh-fix-test-suite.patch b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
new file mode 100644
index 0000000000..dc10e08b0f
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-fix-test-suite.patch
@@ -0,0 +1,217 @@
+From f7942cded8b65341916a555186e2219efe174cd0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Thu, 4 Feb 2021 14:38:25 -0500
+Subject: [PATCH] tests: Fix test suite for Guile 3.0.5.
+
+The test-runner object is now reset to #f when calling the 'test-end'
+procedure.  See the commit de5d1a7f99b8e952b115237ebc29633062f99bb9 in
+Guile (srfi-64: Reset test-runner-current if done) which introduced this
+change.
+
+* tests/client-server.scm (exit-status): New variable.  Use it when calling
+exit.
+* tests/dist.scm: Likewise.
+* tests/key.scm: Likewise.
+* tests/log.scm: Likewise.
+* tests/popen.scm: Likewise.
+* tests/server-client.scm: Likewise.
+* tests/server.scm: Likewise.
+* tests/session.scm: Likewise.
+* tests/shell.scm: Likewise.
+* tests/sssh-ssshd.scm: Likewise.
+* tests/tunnel.scm: Likewise.
+---
+ tests/client-server.scm | 4 +++-
+ tests/dist.scm          | 4 +++-
+ tests/key.scm           | 3 ++-
+ tests/log.scm           | 5 ++++-
+ tests/popen.scm         | 4 +++-
+ tests/server-client.scm | 4 +++-
+ tests/server.scm        | 4 +++-
+ tests/session.scm       | 4 +++-
+ tests/shell.scm         | 3 ++-
+ tests/sssh-ssshd.scm    | 4 +++-
+ tests/tunnel.scm        | 4 +++-
+ 11 files changed, 32 insertions(+), 11 deletions(-)
+
+diff --git a/tests/client-server.scm b/tests/client-server.scm
+index 432a48c..fc46140 100644
+--- a/tests/client-server.scm
++++ b/tests/client-server.scm
+@@ -743,8 +743,10 @@
+ 
+ ;;;
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "client-server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; client-server.scm ends here.
+diff --git a/tests/dist.scm b/tests/dist.scm
+index 2a3a75f..79f9e23 100644
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -269,8 +269,10 @@ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+ ;;;
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "dist")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; dist.scm ends here.
+diff --git a/tests/key.scm b/tests/key.scm
+index be31378..e1678f4 100644
+--- a/tests/key.scm
++++ b/tests/key.scm
+@@ -170,9 +170,10 @@
+                    (eq? (get-key-type key) 'ecdsa-p256)))))))
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "key")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; key.scm ends here.
+diff --git a/tests/log.scm b/tests/log.scm
+index f547202..d528251 100644
+--- a/tests/log.scm
++++ b/tests/log.scm
+@@ -64,8 +64,11 @@
+   (get-log-verbosity))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "log")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
++
+ 
+ ;;; log.scm ends here
+diff --git a/tests/popen.scm b/tests/popen.scm
+index e063e0b..fe77108 100644
+--- a/tests/popen.scm
++++ b/tests/popen.scm
+@@ -129,8 +129,10 @@
+           (format-log/scm 'nolog "open-remote-output-pipe"  "channel: ~A" channel)
+           (output-only? channel)))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "popen")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; popen.scm ends here.
+diff --git a/tests/server-client.scm b/tests/server-client.scm
+index 920aa22..b6ed3eb 100644
+--- a/tests/server-client.scm
++++ b/tests/server-client.scm
+@@ -148,8 +148,10 @@
+          (equal? x session))))))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server-client")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server-client.scm ends here.
+diff --git a/tests/server.scm b/tests/server.scm
+index c7f8b6c..1a6daea 100644
+--- a/tests/server.scm
++++ b/tests/server.scm
+@@ -157,9 +157,11 @@
+     (server-listen server)
+     #t))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "server")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; server.scm ends here.
+ 
+diff --git a/tests/session.scm b/tests/session.scm
+index 8caa039..7310647 100644
+--- a/tests/session.scm
++++ b/tests/session.scm
+@@ -210,8 +210,10 @@
+   (let ((session (%make-session)))
+     (not (connected? session))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "session")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; session.scm ends here.
+diff --git a/tests/shell.scm b/tests/shell.scm
+index 7d613fb..e36e661 100644
+--- a/tests/shell.scm
++++ b/tests/shell.scm
+@@ -113,9 +113,10 @@
+ 
+ 
+ ;;;
++(define exit-status (test-runner-fail-count (test-runner-current)))
+ 
+ (test-end "shell")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; shell.scm ends here.
+diff --git a/tests/sssh-ssshd.scm b/tests/sssh-ssshd.scm
+index 2fe23db..edb53fc 100644
+--- a/tests/sssh-ssshd.scm
++++ b/tests/sssh-ssshd.scm
+@@ -118,8 +118,10 @@
+       result)))
+ 
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "sssh-ssshd")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; sssh-ssshd.scm ends here.
+diff --git a/tests/tunnel.scm b/tests/tunnel.scm
+index ef5a568..d6453b7 100644
+--- a/tests/tunnel.scm
++++ b/tests/tunnel.scm
+@@ -191,8 +191,10 @@
+                   (= pnum portnum)))
+            (eq? (channel-cancel-forward session "localhost" portnum) 'ok))))))))
+ 
++(define exit-status (test-runner-fail-count (test-runner-current)))
++
+ (test-end "tunnel")
+ 
+-(exit (= (test-runner-fail-count (test-runner-current)) 0))
++(exit (= 0 exit-status))
+ 
+ ;;; tunnel.scm ends here.
+-- 
+2.30.0
+
diff --git a/gnu/packages/patches/guile-ssh-read-error.patch b/gnu/packages/patches/guile-ssh-read-error.patch
new file mode 100644
index 0000000000..9cc6b048a0
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-read-error.patch
@@ -0,0 +1,18 @@
+This patch adjusts to slightly different 'read-error' in Guile 3.0.6
+compared to earlier versions:
+
+  https://github.com/artyom-poptsov/guile-ssh/issues/28
+
+--- a/tests/dist.scm
++++ b/tests/dist.scm
+@@ -183,8 +183,8 @@ Unbound variable: e"
+    rrepl-get-result))
+ 
+ (test-error-with-log/= "rrepl-get-result, unknown # object error"
+-  'node-repl-error "Reader error: scm_lreadr: #<unknown port>:1:3: \
+-Unknown # object: (#\\<): scheme@(guile-user)> \
++  'node-repl-error "Reader error: #f: #<unknown port>:1:3: \
++Unknown # object: (\"#<\"): scheme@(guile-user)> \
+ $4 = #<session #<undefined>@#<undefined>:22 (disconnected) 453fff>"
+   (call-with-input-string
+    (string-append  "scheme@(guile-user)> $4 = "
diff --git a/gnu/packages/patches/icu4c-CVE-2020-10531.patch b/gnu/packages/patches/icu4c-CVE-2020-10531.patch
deleted file mode 100644
index c2ab923bdc..0000000000
--- a/gnu/packages/patches/icu4c-CVE-2020-10531.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-Fix CVE-2020-10531:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10531
-
-Patch copied from upstream source repository (changes to the test suite
-are commented out):
-
-https://github.com/unicode-org/icu/commit/b7d08bc04a4296982fcef8b6b8a354a9e4e7afca
-
-From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001
-From: Frank Tang <ftang@chromium.org>
-Date: Sat, 1 Feb 2020 02:39:04 +0000
-Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append
-
-See #971
----
- icu4c/source/common/unistr.cpp          |  6 ++-
- icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++
- icu4c/source/test/intltest/ustrtest.h   |  1 +
- 3 files changed, 68 insertions(+), 1 deletion(-)
-
-diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp
-index 901bb3358ba..077b4d6ef20 100644
---- a/icu4c/source/common/unistr.cpp
-+++ b/icu4c/source/common/unistr.cpp
-@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
-   }
- 
-   int32_t oldLength = length();
--  int32_t newLength = oldLength + srcLength;
-+  int32_t newLength;
-+  if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
-+    setToBogus();
-+    return *this;
-+  }
- 
-   // Check for append onto ourself
-   const UChar* oldArray = getArrayStart();
-#diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp
-#index b6515ea813c..ad38bdf53a3 100644
-#--- a/icu4c/source/test/intltest/ustrtest.cpp
-#+++ b/icu4c/source/test/intltest/ustrtest.cpp
-#@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
-#     TESTCASE_AUTO(TestWCharPointers);
-#     TESTCASE_AUTO(TestNullPointers);
-#     TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
-#+    TESTCASE_AUTO(TestLargeAppend);
-#     TESTCASE_AUTO_END;
-# }
-# 
-#@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
-#     str.insert(2, sub);
-#     assertEquals("", u"abbcdcde", str);
-# }
-#+
-#+void UnicodeStringTest::TestLargeAppend() {
-#+    if(quick) return;
-#+
-#+    IcuTestErrorCode status(*this, "TestLargeAppend");
-#+    // Make a large UnicodeString
-#+    int32_t len = 0xAFFFFFF;
-#+    UnicodeString str;
-#+    char16_t *buf = str.getBuffer(len);
-#+    // A fast way to set buffer to valid Unicode.
-#+    // 4E4E is a valid unicode character
-#+    uprv_memset(buf, 0x4e, len * 2);
-#+    str.releaseBuffer(len);
-#+    UnicodeString dest;
-#+    // Append it 16 times
-#+    // 0xAFFFFFF times 16 is 0xA4FFFFF1,
-#+    // which is greater than INT32_MAX, which is 0x7FFFFFFF.
-#+    int64_t total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+    dest.remove();
-#+    total = 0;
-#+    for (int32_t i = 0; i < 16; i++) {
-#+        dest.append(str);
-#+        total += len;
-#+        if (total + len <= INT32_MAX) {
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+        } else if (total <= INT32_MAX) {
-#+            // Check that a string of exactly the maximum size works
-#+            UnicodeString str2;
-#+            int32_t remain = INT32_MAX - total;
-#+            char16_t *buf2 = str2.getBuffer(remain);
-#+            if (buf2 == nullptr) {
-#+                // if somehow memory allocation fail, return the test
-#+                return;
-#+            }
-#+            uprv_memset(buf2, 0x4e, remain * 2);
-#+            str2.releaseBuffer(remain);
-#+            dest.append(str2);
-#+            total += remain;
-#+            assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
-#+            assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
-#+            assertFalse("dest is not bogus", dest.isBogus());
-#+
-#+            // Check that a string size+1 goes bogus
-#+            str2.truncate(1);
-#+            dest.append(str2);
-#+            total++;
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        } else {
-#+            assertTrue("dest should be bogus", dest.isBogus());
-#+        }
-#+    }
-#+}
-#diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h
-#index 218befdcc68..4a356a92c7a 100644
-#--- a/icu4c/source/test/intltest/ustrtest.h
-#+++ b/icu4c/source/test/intltest/ustrtest.h
-#@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest {
-#     void TestWCharPointers();
-#     void TestNullPointers();
-#     void TestUnicodeStringInsertAppendToSelf();
-#+    void TestLargeAppend();
-# };
-# 
-# #endif
diff --git a/gnu/packages/patches/inetutils-hurd.patch b/gnu/packages/patches/inetutils-hurd.patch
deleted file mode 100644
index bd65c4feb1..0000000000
--- a/gnu/packages/patches/inetutils-hurd.patch
+++ /dev/null
@@ -1,583 +0,0 @@
-Support compiling on the Hurd.
-
-Taken from https://git.hadrons.org/cgit/debian/pkgs/inetutils.git/tree/debian/patches/0002-ifconfig-Improve-the-support-for-GNU-Hurd.patch
-
-From 9a90d9b9119906df23cb2db1503cb0f099942dd9 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Sat, 18 Jul 2015 01:12:41 +0200
-Subject: [PATCH 02/35] ifconfig: Improve the support for GNU/Hurd.
-
-Use system specific code instead of generic code.
-This provides abilities similar to other systems.
----
- ChangeLog                   |  17 +++
- ifconfig/system.c           |  10 +-
- ifconfig/system.h           |   2 +
- ifconfig/system/Makefile.am |   4 +-
- ifconfig/system/generic.c   |  14 +-
- ifconfig/system/hurd.c      | 292 ++++++++++++++++++++++++++++++++++++
- ifconfig/system/hurd.h      |  50 ++++++
- 7 files changed, 381 insertions(+), 8 deletions(-)
- create mode 100644 ifconfig/system/hurd.c
- create mode 100644 ifconfig/system/hurd.h
-
-diff --git a/ifconfig/system.c b/ifconfig/system.c
-index 30677e41..e108dc2e 100644
---- a/ifconfig/system.c
-+++ b/ifconfig/system.c
-@@ -25,10 +25,12 @@
- # include "system/solaris.c"
- #elif defined __QNX__
- # include "system/qnx.c"
--# elif defined __DragonFly__ || defined __FreeBSD__ || \
--       defined __FreeBSD_kernel__ || \
--       defined __NetBSD__ || defined __OpenBSD__
--#  include "system/bsd.c"
-+#elif defined __DragonFly__ || defined __FreeBSD__ || \
-+      defined __FreeBSD_kernel__ || \
-+      defined __NetBSD__ || defined __OpenBSD__
-+# include "system/bsd.c"
-+#elif defined __GNU__
-+# include "system/hurd.c"
- #else
- # include "system/generic.c"
- #endif
-diff --git a/ifconfig/system.h b/ifconfig/system.h
-index 8521ad95..66878d3a 100644
---- a/ifconfig/system.h
-+++ b/ifconfig/system.h
-@@ -97,6 +97,8 @@ extern struct if_nameindex* (*system_if_nameindex) (void);
-        defined __FreeBSD_kernel__ || \
-        defined __NetBSD__ || defined __OpenBSD__
- #  include "system/bsd.h"
-+# elif defined __GNU__
-+#  include "system/hurd.h"
- # else
- #  include "system/generic.h"
- # endif
-diff --git a/ifconfig/system/Makefile.am b/ifconfig/system/Makefile.am
-index 954c6774..62a9f1c4 100644
---- a/ifconfig/system/Makefile.am
-+++ b/ifconfig/system/Makefile.am
-@@ -26,8 +26,10 @@ noinst_HEADERS = \
- 	linux.h \
- 	solaris.h \
- 	qnx.h \
-+	hurd.h \
- 	bsd.c \
- 	generic.c \
- 	linux.c \
- 	solaris.c \
--	qnx.c
-+	qnx.c \
-+	hurd.c
-diff --git a/ifconfig/system/generic.c b/ifconfig/system/generic.c
-index 9a2bda55..20a78bde 100644
---- a/ifconfig/system/generic.c
-+++ b/ifconfig/system/generic.c
-@@ -22,6 +22,8 @@
- #include <config.h>
- 
- #include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
- 
- 
- /* Output format stuff.  */
-@@ -36,19 +38,25 @@ const char *system_help;
- struct argp_child system_argp_child;
- 
- int
--system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+system_parse_opt_rest (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		       int argc _GL_UNUSED_PARAMETER,
-+		       char *argv[] _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
- 
- int
--system_configure (int sfd, struct ifreq *ifr, struct system_ifconfig *ifs)
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
- {
-   return 0;
- }
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-new file mode 100644
-index 00000000..3bd19775
---- /dev/null
-+++ b/ifconfig/system/hurd.c
-@@ -0,0 +1,292 @@
-+/* hurd.c -- Code for ifconfig specific to GNU/Hurd.
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils is free software: you can redistribute it and/or modify
-+  it under the terms of the GNU General Public License as published by
-+  the Free Software Foundation, either version 3 of the License, or (at
-+  your option) any later version.
-+
-+  GNU Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Mostly written by Marcus Brinkmann.
-+   Adaptions to GNU/Hurd by Mats Erik Andersson.  */
-+
-+#include <config.h>
-+
-+#include <stdlib.h>
-+#include <sys/ioctl.h>
-+#include <net/if_arp.h>
-+#include "../ifconfig.h"
-+
-+#include <unused-parameter.h>
-+
-+
-+/* Output format stuff.  */
-+
-+const char *system_default_format = "gnu";
-+
-+
-+/* Argument parsing stuff.  */
-+
-+const char *system_help = "NAME [ADDR]\
-+ [broadcast BRDADDR] [netmask MASK]\
-+ [mtu N] [up|down] [FLAGS]";
-+
-+struct argp_child system_argp_child;
-+
-+int
-+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
-+		  char option _GL_UNUSED_PARAMETER,
-+		  char *optarg _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+int
-+system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
-+{
-+  int i = 0, mask, rev;
-+  enum {
-+    EXPECT_NOTHING,
-+    EXPECT_AF,
-+    EXPECT_BROADCAST,
-+    EXPECT_NETMASK,
-+    EXPECT_METRIC,
-+    EXPECT_MTU
-+  } expect = EXPECT_AF;
-+
-+  *ifp = parse_opt_new_ifs (argv[0]);
-+
-+  while (++i < argc)
-+    {
-+      switch (expect)
-+	{
-+	case EXPECT_BROADCAST:
-+	  parse_opt_set_brdaddr (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_NETMASK:
-+	  parse_opt_set_netmask (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_MTU:
-+	  parse_opt_set_mtu (*ifp, argv[i]);
-+	  break;
-+
-+	/* XXX: 2015-07-18, GNU/Hurd does not yet support
-+		ioctl(SIOCSIFMETRIC), but we let the code
-+		handle this standard ability anyway!
-+	 */
-+	case EXPECT_METRIC:
-+	  parse_opt_set_metric (*ifp, argv[i]);
-+	  break;
-+
-+	case EXPECT_AF:
-+	  expect = EXPECT_NOTHING;
-+	  if (!strcmp (argv[i], "inet"))
-+	    continue;
-+	  else if (!strcmp (argv[i], "inet6"))
-+	    {
-+	      error (0, 0, "%s is not a supported address family", argv[i]);
-+	      return 0;
-+	    }
-+	  break;
-+
-+	case EXPECT_NOTHING:
-+	  break;
-+	}
-+
-+      if (expect != EXPECT_NOTHING)
-+	expect = EXPECT_NOTHING;
-+      else if (!strcmp (argv[i], "broadcast"))
-+	expect = EXPECT_BROADCAST;
-+      else if (!strcmp (argv[i], "netmask"))
-+	expect = EXPECT_NETMASK;
-+      else if (!strcmp (argv[i], "metric"))
-+	expect = EXPECT_METRIC;
-+      else if (!strcmp (argv[i], "mtu"))
-+	expect = EXPECT_MTU;
-+      else if (!strcmp (argv[i], "up"))
-+	parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
-+      else if (!strcmp (argv[i], "down"))
-+	parse_opt_set_flag (*ifp, IFF_UP, 1);
-+      else if (((mask = if_nameztoflag (argv[i], &rev))
-+		& ~IU_IFF_CANTCHANGE) != 0)
-+	parse_opt_set_flag (*ifp, mask, rev);
-+      else
-+	{
-+	  if (!((*ifp)->valid & IF_VALID_ADDR))
-+	    parse_opt_set_address (*ifp, argv[i]);
-+	  else if (!((*ifp)->valid & IF_VALID_DSTADDR))
-+	    parse_opt_set_dstaddr (*ifp, argv[i]);
-+	}
-+    }
-+
-+  switch (expect)
-+    {
-+    case EXPECT_BROADCAST:
-+      error (0, 0, "option `broadcast' requires an argument");
-+      break;
-+
-+    case EXPECT_NETMASK:
-+      error (0, 0, "option `netmask' requires an argument");
-+      break;
-+
-+    case EXPECT_METRIC:
-+      error (0, 0, "option `metric' requires an argument");
-+      break;
-+
-+    case EXPECT_MTU:
-+      error (0, 0, "option `mtu' requires an argument");
-+      break;
-+
-+    case EXPECT_AF:
-+    case EXPECT_NOTHING:
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+system_configure (int sfd _GL_UNUSED_PARAMETER,
-+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
-+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
-+{
-+  return 0;
-+}
-+
-+struct if_nameindex* (*system_if_nameindex) (void) = if_nameindex;
-+
-+static void
-+print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-+		    unsigned char *data)
-+{
-+  *column += printf ("%02X:%02X:%02X:%02X:%02X:%02X",
-+		     data[0], data[1], data[2], data[3], data[4], data[5]);
-+  had_output = 1;
-+}
-+
-+struct arphrd_symbol
-+{
-+  const char *name;
-+  const char *title;
-+  int value;
-+  void (*print_hwaddr) (format_data_t form, unsigned char *data);
-+} arphrd_symbols[] =
-+  {
-+#ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
-+    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+#endif
-+#ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+#endif
-+    /* XXX: The image debian-hurd-20150424 returns the value 4
-+	    instead of expected ARPHRD_LOOPBACK.  This has been
-+	    discussed in the list debian-hurd, where I was asked
-+	    to resist the temptation of a work around!
-+     */
-+    { NULL, NULL, 0, NULL}
-+  };
-+
-+struct arphrd_symbol *
-+arphrd_findvalue (int value)
-+{
-+  struct arphrd_symbol *arp = arphrd_symbols;
-+  while (arp->name != NULL)
-+    {
-+      if (arp->value == value)
-+	break;
-+      arp++;
-+    }
-+  if (arp->name)
-+    return arp;
-+  else
-+    return NULL;
-+}
-+
-+void
-+system_fh_hwaddr_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  struct arphrd_symbol *arp;
-+
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    select_arg (form, argc, argv, 1);
-+
-+  arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+  select_arg (form, argc, argv, (arp && arp->print_hwaddr) ? 0 : 1);
-+#else
-+  select_arg (form, argc, argv, 1);
-+#endif
-+}
-+
-+void
-+system_fh_hwaddr (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp && arp->print_hwaddr)
-+	arp->print_hwaddr (form,
-+			   (unsigned char *) form->ifr->ifr_hwaddr.sa_data);
-+      else
-+	put_string (form, "(hwaddr unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-+
-+void
-+system_fh_hwtype_query (format_data_t form, int argc, char *argv[])
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) >= 0)
-+    select_arg (form, argc, argv, 0);
-+  else
-+#endif
-+    select_arg (form, argc, argv, 1);
-+}
-+
-+void
-+system_fh_hwtype (format_data_t form, int argc _GL_UNUSED_PARAMETER,
-+		  char *argv[] _GL_UNUSED_PARAMETER)
-+{
-+#ifdef SIOCGIFHWADDR
-+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
-+    error (EXIT_FAILURE, errno,
-+	   "SIOCGIFHWADDR failed for interface `%s'",
-+	   form->ifr->ifr_name);
-+  else
-+    {
-+      struct arphrd_symbol *arp;
-+
-+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
-+      if (arp)
-+	put_string (form, arp->title);
-+      else
-+	put_string (form, "(hwtype unknown)");
-+    }
-+#else
-+  *column += printf ("(not available)");
-+  had_output = 1;
-+#endif
-+}
-diff --git a/ifconfig/system/hurd.h b/ifconfig/system/hurd.h
-new file mode 100644
-index 00000000..bab14565
---- /dev/null
-+++ b/ifconfig/system/hurd.h
-@@ -0,0 +1,50 @@
-+/*
-+  Copyright (C) 2015 Free Software Foundation, Inc.
-+
-+  This file is part of GNU Inetutils.
-+
-+  GNU Inetutils is free software: you can redistribute it and/or modify
-+  it under the terms of the GNU General Public License as published by
-+  the Free Software Foundation, either version 3 of the License, or (at
-+  your option) any later version.
-+
-+  GNU Inetutils is distributed in the hope that it will be useful, but
-+  WITHOUT ANY WARRANTY; without even the implied warranty of
-+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+  General Public License for more details.
-+
-+  You should have received a copy of the GNU General Public License
-+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
-+
-+/* Written by Mats Erik Andersson.  */
-+
-+#ifndef IFCONFIG_SYSTEM_HURD_H
-+# define IFCONFIG_SYSTEM_HURD_H
-+
-+# include "../printif.h"
-+# include "../options.h"
-+
-+
-+/* Option support.  */
-+
-+struct system_ifconfig
-+{
-+  int valid;
-+};
-+
-+
-+/* Output format support.  */
-+
-+# define SYSTEM_FORMAT_HANDLER \
-+  { "hurd", fh_nothing}, \
-+  { "hwaddr?", system_fh_hwaddr_query}, \
-+  { "hwaddr", system_fh_hwaddr}, \
-+  { "hwtype?", system_fh_hwtype_query}, \
-+  { "hwtype", system_fh_hwtype},
-+
-+void system_fh_hwaddr_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwaddr (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype_query (format_data_t form, int argc, char *argv[]);
-+void system_fh_hwtype (format_data_t form, int argc, char *argv[]);
-+
-+#endif /* !IFCONFIG_SYSTEM_HURD_H */
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From 589dab9c7d3119da82837dabae34c8a3d16cbe49 Mon Sep 17 00:00:00 2001
-From: Mats Erik Andersson <gnu@gisladisker.se>
-Date: Thu, 30 Jul 2015 01:06:42 +0200
-Subject: [PATCH 07/35] ifconfig: Hardware detection in GNU/Hurd.
-
-A work-around needed to distinguish hardware type.
----
- ChangeLog              | 10 ++++++++++
- ifconfig/system/hurd.c | 19 ++++++++++++-------
- 2 files changed, 22 insertions(+), 7 deletions(-)
-
-diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
-index 3bd19775..b6261a00 100644
---- a/ifconfig/system/hurd.c
-+++ b/ifconfig/system/hurd.c
-@@ -175,6 +175,16 @@ print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
-   had_output = 1;
- }
- 
-+/* GNU/Hurd and Mach are using a mixture of BSD definitions
-+ * and GNU/Linux interface headers, which in this situation
-+ * means that sa_family_t is an unsigned char, from BSD, while
-+ * all ARPHRD_* come from GNU/Linux and are thus 16 bits wide.
-+ * We must account for this.  The following bitmask will
-+ * adapt to any future change!
-+ */
-+
-+#define _ARP_MASK ((sizeof (sa_family_t) == 1) ? 0xff : 0xffff)
-+
- struct arphrd_symbol
- {
-   const char *name;
-@@ -184,16 +194,11 @@ struct arphrd_symbol
- } arphrd_symbols[] =
-   {
- #ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
--    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
-+    { "ETHER", "Ethernet", ARPHRD_ETHER & _ARP_MASK, print_hwaddr_ether},
- #endif
- #ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
--    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
-+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK & _ARP_MASK, NULL},
- #endif
--    /* XXX: The image debian-hurd-20150424 returns the value 4
--	    instead of expected ARPHRD_LOOPBACK.  This has been
--	    discussed in the list debian-hurd, where I was asked
--	    to resist the temptation of a work around!
--     */
-     { NULL, NULL, 0, NULL}
-   };
- 
--- 
-2.23.0.rc1.170.gbd704faa3e
-
-From d379784b4461d17b2536effd1b52bae21cd28a32 Mon Sep 17 00:00:00 2001
-From: Guillem Jover <guillem@hadrons.org>
-Date: Fri, 16 Aug 2019 00:34:03 +0200
-Subject: [PATCH 35/35] telnet: Several ioctls have been disabled in the Hurd's
- glibc
-
-But not the related option macros. inetutils uses those macros to decide
-whether the ioctls are available, so it is FTBFS now. The Hurd's glibc
-is being fixed, but we'll use this for now to get the builds going.
----
- telnet/sys_bsd.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/telnet/sys_bsd.c b/telnet/sys_bsd.c
-index 662536ab..5eb35cb5 100644
---- a/telnet/sys_bsd.c
-+++ b/telnet/sys_bsd.c
-@@ -63,6 +63,7 @@
- #include <errno.h>
- #include <arpa/telnet.h>
- #include <sys/select.h>
-+#include <sys/ioctl.h>
- #include <unused-parameter.h>
- 
- #include "ring.h"
-@@ -157,7 +158,7 @@ TerminalRead (char *buf, int n)
- int
- TerminalAutoFlush (void)
- {
--#if defined LNOFLSH
-+#if defined TIOCLGET && defined LNOFLSH
-   int flush;
- 
-   ioctl (0, TIOCLGET, (char *) &flush);
-@@ -260,7 +261,9 @@ TerminalSaveState (void)
-   ioctl (0, TIOCGETP, (char *) &ottyb);
-   ioctl (0, TIOCGETC, (char *) &otc);
-   ioctl (0, TIOCGLTC, (char *) &oltc);
-+#ifdef TIOCLGET
-   ioctl (0, TIOCLGET, (char *) &olmode);
-+#endif
- 
-   ntc = otc;
-   nltc = oltc;
-@@ -755,7 +758,9 @@ TerminalNewMode (register int f)
- #endif
-     }
- #ifndef USE_TERMIO
-+#ifdef TIOCLSET
-   ioctl (tin, TIOCLSET, (char *) &lmode);
-+#endif
-   ioctl (tin, TIOCSLTC, (char *) &ltc);
-   ioctl (tin, TIOCSETC, (char *) &tc);
-   ioctl (tin, TIOCSETN, (char *) &sb);
--- 
-2.23.0.rc1.170.gbd704faa3e
-
diff --git a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch b/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
deleted file mode 100644
index e4897de1b8..0000000000
--- a/gnu/packages/patches/jsoncpp-fix-inverted-case.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-This patch fixes a bug and related test failure on platforms where 'char'
-is unsigned.
-
-Taken from upstream:
-https://github.com/open-source-parsers/jsoncpp/commit/f11611c8785082ead760494cba06196f14a06dcb
-
-diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp
-index 8e06cca2..56195dc1 100644
---- a/src/lib_json/json_writer.cpp
-+++ b/src/lib_json/json_writer.cpp
-@@ -178,8 +178,9 @@ static bool isAnyCharRequiredQuoting(char const* s, size_t n) {
- 
-   char const* const end = s + n;
-   for (char const* cur = s; cur < end; ++cur) {
--    if (*cur == '\\' || *cur == '\"' || *cur < ' ' ||
--        static_cast<unsigned char>(*cur) < 0x80)
-+    if (*cur == '\\' || *cur == '\"' ||
-+        static_cast<unsigned char>(*cur) < ' ' ||
-+        static_cast<unsigned char>(*cur) >= 0x80)
-       return true;
-   }
-   return false;
diff --git a/gnu/packages/patches/lcms-CVE-2018-16435.patch b/gnu/packages/patches/lcms-CVE-2018-16435.patch
deleted file mode 100644
index 60228e73af..0000000000
--- a/gnu/packages/patches/lcms-CVE-2018-16435.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-https://github.com/mm2/Little-CMS/commit/768f70ca405cd3159d990e962d54456773bb8cf8.patch
-
-From 768f70ca405cd3159d990e962d54456773bb8cf8 Mon Sep 17 00:00:00 2001
-From: Marti Maria <info@littlecms.com>
-Date: Wed, 15 Aug 2018 20:07:56 +0200
-Subject: [PATCH] Upgrade Visual studio 2017 15.8
-
-- Upgrade to 15.8
-- Add check on CGATS memory allocation (thanks to Quang Nguyen for
-pointing out this)
----
- Projects/VC2017/jpegicc/jpegicc.vcxproj           |  1 +
- Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj       |  2 +-
- Projects/VC2017/lcms2_static/lcms2_static.vcxproj |  2 +-
- Projects/VC2017/linkicc/linkicc.vcxproj           |  2 +-
- Projects/VC2017/psicc/psicc.vcxproj               |  2 +-
- Projects/VC2017/testbed/testbed.vcxproj           |  2 +-
- Projects/VC2017/tiffdiff/tiffdiff.vcxproj         |  2 +-
- Projects/VC2017/tifficc/tifficc.vcxproj           |  2 +-
- Projects/VC2017/transicc/transicc.vcxproj         |  1 +
- src/cmscgats.c                                    | 14 ++++++++++----
- 10 files changed, 19 insertions(+), 11 deletions(-)
-
-diff --git a/Projects/VC2017/jpegicc/jpegicc.vcxproj b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-index ab26a53..39cfd00 100644
---- a/Projects/VC2017/jpegicc/jpegicc.vcxproj
-+++ b/Projects/VC2017/jpegicc/jpegicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{62812507-F926-4968-96A9-17678460AD90}</ProjectGuid>
-     <RootNamespace>jpegicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-index 4c8aa3f..d1bf3eb 100644
---- a/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-+++ b/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}</ProjectGuid>
-     <RootNamespace>lcms2_DLL</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-index 2a9988a..9fc05ce 100644
---- a/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-+++ b/Projects/VC2017/lcms2_static/lcms2_static.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{71DEDE59-3F1E-486B-A899-4283000F76B5}</ProjectGuid>
-     <RootNamespace>lcms2_static</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/linkicc/linkicc.vcxproj b/Projects/VC2017/linkicc/linkicc.vcxproj
-index 30c2b4e..51586dd 100644
---- a/Projects/VC2017/linkicc/linkicc.vcxproj
-+++ b/Projects/VC2017/linkicc/linkicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{FBFBE1DC-DB84-4BA1-9552-B4780F457849}</ProjectGuid>
-     <RootNamespace>linkicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/psicc/psicc.vcxproj b/Projects/VC2017/psicc/psicc.vcxproj
-index 9dcf89a..8f26e12 100644
---- a/Projects/VC2017/psicc/psicc.vcxproj
-+++ b/Projects/VC2017/psicc/psicc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{EF6A8851-65FE-46F5-B9EF-14F0B671F693}</ProjectGuid>
-     <RootNamespace>psicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/testbed/testbed.vcxproj b/Projects/VC2017/testbed/testbed.vcxproj
-index 0af3762..3f6aea3 100644
---- a/Projects/VC2017/testbed/testbed.vcxproj
-+++ b/Projects/VC2017/testbed/testbed.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{928A3A2B-46EF-4279-959C-513B3652FF0E}</ProjectGuid>
-     <RootNamespace>testbed</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-index 7edfe28..3a6d837 100644
---- a/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-+++ b/Projects/VC2017/tiffdiff/tiffdiff.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{75B91835-CCD7-48BE-A606-A9C997D5DBEE}</ProjectGuid>
-     <RootNamespace>tiffdiff</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/tifficc/tifficc.vcxproj b/Projects/VC2017/tifficc/tifficc.vcxproj
-index cd9f04c..5ef954f 100644
---- a/Projects/VC2017/tifficc/tifficc.vcxproj
-+++ b/Projects/VC2017/tifficc/tifficc.vcxproj
-@@ -22,7 +22,7 @@
-     <ProjectGuid>{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}</ProjectGuid>
-     <RootNamespace>tifficc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
--    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/Projects/VC2017/transicc/transicc.vcxproj b/Projects/VC2017/transicc/transicc.vcxproj
-index d9b77c6..b3173d8 100644
---- a/Projects/VC2017/transicc/transicc.vcxproj
-+++ b/Projects/VC2017/transicc/transicc.vcxproj
-@@ -22,6 +22,7 @@
-     <ProjectGuid>{9EE22D66-C849-474C-9ED5-C3E141DAB160}</ProjectGuid>
-     <RootNamespace>transicc</RootNamespace>
-     <Keyword>Win32Proj</Keyword>
-+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
-   </PropertyGroup>
-   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-diff --git a/src/cmscgats.c b/src/cmscgats.c
-index 1a87613..8c3e96d 100644
---- a/src/cmscgats.c
-+++ b/src/cmscgats.c
-@@ -1,7 +1,7 @@
- //---------------------------------------------------------------------------------
- //
- //  Little Color Management System
--//  Copyright (c) 1998-2017 Marti Maria Saguer
-+//  Copyright (c) 1998-2018 Marti Maria Saguer
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the "Software"),
-@@ -1506,10 +1506,16 @@ void AllocateDataSet(cmsIT8* it8)
-     t-> nSamples   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS"));
-     t-> nPatches   = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS"));
- 
--    t-> Data = (char**)AllocChunk (it8, ((cmsUInt32Number) t->nSamples + 1) * ((cmsUInt32Number) t->nPatches + 1) *sizeof (char*));
--    if (t->Data == NULL) {
-+    if (t -> nSamples < 0 || t->nSamples > 0x7ffe || t->nPatches < 0 || t->nPatches > 0x7ffe)
-+    {
-+        SynError(it8, "AllocateDataSet: too much data");
-+    }
-+    else {
-+        t->Data = (char**)AllocChunk(it8, ((cmsUInt32Number)t->nSamples + 1) * ((cmsUInt32Number)t->nPatches + 1) * sizeof(char*));
-+        if (t->Data == NULL) {
- 
--        SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+            SynError(it8, "AllocateDataSet: Unable to allocate data array");
-+        }
-     }
- 
- }
diff --git a/gnu/packages/patches/libtirpc-hurd-client.patch b/gnu/packages/patches/libtirpc-hurd-client.patch
deleted file mode 100644
index 526ad262d2..0000000000
--- a/gnu/packages/patches/libtirpc-hurd-client.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Taken from https://salsa.debian.org/debian/libtirpc/-/raw/master/debian/patches/06-hurd-client-port.diff
-
-Description: Fix client code for hurd, avoiding malloc overflow
- When trying to setup a inet connection, it happens the following:
- - in libtirp, src/clnt_vc.c, clnt_vc_create gets called
- - when trying to allocate vc_fd_locks, __rpc_dtbsize() is used as size
-   for that array of fd locks
- - __rpc_dtbsize(), in src/rpc_generic.c, queries using rlimit the
-   maximum (rlim_max) number of file descriptors (RLIMIT_NOFILE):
-   - on Linux, the default is { rlim_cur = 1024, rlim_max = 4096 }
-   - on kFreeBSD, the default is { rlim_cur = 1024, rlim_max = 1024 }
-   - on Hurd, the default is { rlim_cur = 1024, rlim_max = RLIM_INFINITY }
-  meaning that on Hurd the memory allocation fails (as
-  __rpc_dtbsize() * sizeof(int) overflows and is negative)
-
- Change libtiprc so __rpc_dtbsize falls back on rlim_cur if rlim_max
- is unlimited.
-
- This patch fixes the client connection using inet sockets; local unix
- sockets are not working, for two reasons so far:
- - getpeername on them gives EOPNOTSUPP
- - SO_REUSEADDR is not implemented for them
-Author: Pino Toscano <pino@debian.org>
-
-Bug-Debian: http://bugs.debian.org/739674
-Forwarded: no
-Reviewed-By: Petter Reinholdtsen
-Last-Update: 2014-03-03
-
---- a/src/rpc_generic.c
-+++ b/src/rpc_generic.c
-@@ -107,12 +107,17 @@
- {
- 	static int tbsize;
- 	struct rlimit rl;
-+	rlim_t lim;
- 
- 	if (tbsize) {
- 		return (tbsize);
- 	}
- 	if (getrlimit(RLIMIT_NOFILE, &rl) == 0) {
--		return (tbsize = (int)rl.rlim_max);
-+		lim = rl.rlim_max;
-+		if (lim == RLIM_INFINITY) {
-+			lim = rl.rlim_cur;
-+		}
-+		return (tbsize = (int)lim);
- 	}
- 	/*
- 	 * Something wrong.  I'll try to save face by returning a
diff --git a/gnu/packages/patches/libxt-guix-search-paths.patch b/gnu/packages/patches/libxt-guix-search-paths.patch
index 5419edd1bd..61022d232a 100644
--- a/gnu/packages/patches/libxt-guix-search-paths.patch
+++ b/gnu/packages/patches/libxt-guix-search-paths.patch
@@ -1,13 +1,9 @@
 diff --git a/src/Intrinsic.c b/src/Intrinsic.c
-index c9624ec..addcdba 100644
 --- a/src/Intrinsic.c
 +++ b/src/Intrinsic.c
-@@ -1312,21 +1312,101 @@ static void FillInLangSubs(
-     } else (void) strcpy(*rest, string);
+@@ -1345,21 +1345,99 @@ FillInLangSubs(Substitution subs, XtPerDisplay pd)
  }
  
-+
-+
  /*
 - * default path used if environment variable XFILESEARCHPATH
 - * is not defined.  Also substitued for %D.
@@ -24,8 +20,9 @@ index c9624ec..addcdba 100644
 +   These values provide the default paths where Guix/GuixSD can expect
 +   to find resources for installed packages.
   */
--static const char *implementation_default_path(void)
-+static const char *guix_default_path(void)
+ static const char *
+-implementation_default_path(void)
++guix_default_path(void)
  {
 -#if defined(WIN32)
 -    static char xfilesearchpath[] = "";
@@ -115,7 +112,7 @@ index c9624ec..addcdba 100644
  }
  
  
-@@ -1354,7 +1434,7 @@ _XtString XtResolvePathname(
+@@ -1388,7 +1466,7 @@ XtResolvePathname(Display *dpy,
  {
      XtPerDisplay pd;
      static const char *defaultPath = NULL;
diff --git a/gnu/packages/patches/mariadb-cmake-compat.patch b/gnu/packages/patches/mariadb-cmake-compat.patch
new file mode 100644
index 0000000000..44b0daa186
--- /dev/null
+++ b/gnu/packages/patches/mariadb-cmake-compat.patch
@@ -0,0 +1,17 @@
+Fix if statement that triggers syntax error in CMake 3.20 and later.
+
+Taken from upstream:
+https://github.com/mariadb-corporation/mariadb-connector-c/commit/242cab8c
+
+diff --git a/libmariadb/cmake/ConnectorName.cmake b/libmariadb/cmake/ConnectorName.cmake
+--- a/libmariadb/cmake/ConnectorName.cmake
++++ b/libmariadb/cmake/ConnectorName.cmake
+@@ -22,7 +22,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
+     SET(MACHINE_NAME "x64")
+   ELSE()
+     SET(MACHINE_NAME "32")
+-  END()
++  ENDIF()
+ ENDIF()
+ 
+ SET(product_name "mysql-connector-c-${CPACK_PACKAGE_VERSION}-${PLATFORM_NAME}${CONCAT_SIGN}${MACHINE_NAME}")
\ No newline at end of file
diff --git a/gnu/packages/patches/meson-for-build-rpath.patch b/gnu/packages/patches/meson-for-build-rpath.patch
deleted file mode 100644
index ef9a73f07c..0000000000
--- a/gnu/packages/patches/meson-for-build-rpath.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-This patch removes a part of meson that clears the rpath upon installation.
-This will only be applied to a special version of meson, used for the
-meson-build-system.
-
-Original patch for Meson 0.42.0 by Peter Mikkelsen <petermikkelsen10@gmail.com>
-
---- meson-0.47.1/mesonbuild/minstall.py.old	2018-08-10 11:01:27.812327013 +0200
-+++ meson-0.47.1/mesonbuild/minstall.py	2018-08-10 11:01:51.940368505 +0200
-@@ -436,15 +436,6 @@
-                         print("Symlink creation does not work on this platform. "
-                               "Skipping all symlinking.")
-                         printed_symlink_error = True
--            if os.path.isfile(outname):
--                try:
--                    depfixer.fix_rpath(outname, install_rpath, final_path,
--                                       install_name_mappings, verbose=False)
--                except SystemExit as e:
--                    if isinstance(e.code, int) and e.code == 0:
--                        pass
--                    else:
--                        raise
- 
- def run(args):
-     parser = buildparser()
diff --git a/gnu/packages/patches/mit-krb5-hurd.patch b/gnu/packages/patches/mit-krb5-hurd.patch
index d4962b1e60..449320cea4 100644
--- a/gnu/packages/patches/mit-krb5-hurd.patch
+++ b/gnu/packages/patches/mit-krb5-hurd.patch
@@ -148,18 +148,3 @@ index 7e981d4..d83b3b6 100644
 +# define MAXPATHLEN 4096
 +#endif
  #endif /* _DB_INT_H_ */
-diff --git a/src/tests/resolve/resolve.c b/src/tests/resolve/resolve.c
-index 7339d21..38f7253 100644
---- a/src/tests/resolve/resolve.c
-+++ b/src/tests/resolve/resolve.c
-@@ -73,6 +73,10 @@ char *strchr();
- #include <netinet/in.h>
- #include <netdb.h>
- 
-+#ifndef MAXHOSTNAMELEN
-+# define MAXHOSTNAMELEN 256
-+#endif
-+
- int
- main(argc, argv)
-     int argc;
diff --git a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch b/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
deleted file mode 100644
index 491a358731..0000000000
--- a/gnu/packages/patches/mit-krb5-qualify-short-hostnames.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Fix a null pointer dereference when no DNS search path is configured.
-This showed up as a segfault while running the gsasl test suite.
-
-Taken from upstream:
-https://github.com/krb5/krb5/commit/cd82bf377e7fad2409c76bf8b241920692f34fda
-
-diff --git a/src/lib/krb5/os/dnsglue.c b/src/lib/krb5/os/dnsglue.c
-index e35ca9d76c..0cd213fdd7 100644
---- a/src/lib/krb5/os/dnsglue.c
-+++ b/src/lib/krb5/os/dnsglue.c
-@@ -91,7 +91,7 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h) struct __res_state h
- #define INIT_HANDLE(h) (memset(&h, 0, sizeof(h)), res_ninit(&h) == 0)
- #define SEARCH(h, n, c, t, a, l) res_nsearch(&h, n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(h.dnsrch[0])
-+#define PRIMARY_DOMAIN(h) ((h.dnsrch[0] == NULL) ? NULL : strdup(h.dnsrch[0]))
- #if HAVE_RES_NDESTROY
- #define DESTROY_HANDLE(h) res_ndestroy(&h)
- #else
-@@ -104,7 +104,8 @@ static int initparse(struct krb5int_dns_state *);
- #define DECLARE_HANDLE(h)
- #define INIT_HANDLE(h) (res_init() == 0)
- #define SEARCH(h, n, c, t, a, l) res_search(n, c, t, a, l)
--#define PRIMARY_DOMAIN(h) strdup(_res.defdname)
-+#define PRIMARY_DOMAIN(h) \
-+    ((_res.defdname == NULL) ? NULL : strdup(_res.defdname))
- #define DESTROY_HANDLE(h)
- 
- #endif
diff --git a/gnu/packages/patches/nss-getcwd-nonnull.patch b/gnu/packages/patches/nss-getcwd-nonnull.patch
new file mode 100644
index 0000000000..37c1b1c539
--- /dev/null
+++ b/gnu/packages/patches/nss-getcwd-nonnull.patch
@@ -0,0 +1,30 @@
+Disable -Werror=nonnull on getcwd(0, 4096) because GCC incorrectly warns that
+the second argument should be NULL with recent glibc.  See:
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96832
+https://sourceware.org/bugzilla/show_bug.cgi?id=26545
+
+diff --git a/nss/coreconf/nsinstall/nsinstall.c b/nss/coreconf/nsinstall/nsinstall.c
+--- a/nss/coreconf/nsinstall/nsinstall.c
++++ b/nss/coreconf/nsinstall/nsinstall.c
+@@ -236,14 +236,20 @@ main(int argc, char **argv)
+ 	return 0;
+ 
+     if (!cwd) {
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+ 	cwd = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+ 	if (!cwd)
+ 	    fail("could not get CWD");
+     }
+ 
+     /* make sure we can get into todir. */
+     xchdir(todir);
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wnonnull"
+     todir = GETCWD(0, PATH_MAX);
++#pragma GCC diagnostic pop
+     if (!todir)
+ 	fail("could not get CWD in todir");
+     tdlen = strlen(todir);
diff --git a/gnu/packages/patches/perl-deterministic-ordering.patch b/gnu/packages/patches/perl-deterministic-ordering.patch
deleted file mode 100644
index be63d5cde3..0000000000
--- a/gnu/packages/patches/perl-deterministic-ordering.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From <https://bugs.debian.org/801523>.
-
-From c01f602d1926b0671fd2c8d91f7e52c4e4c9fb24 Mon Sep 17 00:00:00 2001
-From: Niko Tyni <ntyni@debian.org>
-Date: Sun, 11 Oct 2015 19:27:56 +0300
-Subject: [PATCH] Sort the list of XS code files when generating RealPPPort.xs
-
-all_files_in_dir() uses readdir() ordering to make the list of
-input files. This can vary between build systems, breaking build
-reproducibility.
----
- cpan/Devel-PPPort/PPPort_xs.PL | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dist/Devel-PPPort/PPPort_xs.PL b/dist/Devel-PPPort/PPPort_xs.PL
-index 5f18940..149f2fe 100644
---- a/dist/Devel-PPPort/PPPort_xs.PL
-+++ b/dist/Devel-PPPort/PPPort_xs.PL
-@@ -38,7 +38,7 @@ END
- my $file;
- my $sec;
- 
--for $file (all_files_in_dir('parts/inc')) {
-+for $file (sort(all_files_in_dir('parts/inc'))) {
-   my $spec = parse_partspec($file);
- 
-   my $msg = 0;
--- 
-2.5.1
diff --git a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch b/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
deleted file mode 100644
index f2166aebfd..0000000000
--- a/gnu/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Work around a problem arising from the update to OpenSSL 1.0.2f, based on the
-following upstream commit:
-
-  https://github.com/noxxi/p5-io-socket-ssl/commit/6e23ee4a433f83f1065bd2467255eba5ee9b1ddd
-
-Attempting to update to IO-Socket-SSL-2.023, which includes this commit,
-caused other test failures.  See:
-
-  https://lists.gnu.org/archive/html/guix-devel/2016-01/msg01032.html
-
-Description from the upstream commit:
-
-  OpenSSL 1.0.2f changed the behavior of SSL shutdown in case the TLS connection
-  was not fully established (commit: f73c737c7ac908c5d6407c419769123392a3b0a9).
-  This somehow resulted in Net::SSLeay::shutdown returning 0 (i.e. keep trying)
-  which caused an endless loop. It will now ignore this result in case the TLS
-  connection was not yet established and consider the TLS connection closed
-  instead.
-
---- IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm.orig	2014-10-21 16:51:16.000000000 -0400
-+++ IO-Socket-SSL-2.002/lib/IO/Socket/SSL.pm	2016-01-31 15:07:14.971099894 -0500
-@@ -1213,6 +1213,11 @@
- 		    # shutdown complete
- 		    last;
- 		}
-+		if ((${*$self}{'_SSL_opened'}||0) <= 0) {
-+		    # not really open, thus don't expect shutdown to return
-+		    # something meaningful
-+		    last;
-+		}
- 
- 		# initiate or complete shutdown
- 		local $SIG{PIPE} = 'IGNORE';
diff --git a/gnu/packages/patches/perl-no-sys-dirs.patch b/gnu/packages/patches/perl-no-sys-dirs.patch
index 2269d715c7..14d634cac9 100644
--- a/gnu/packages/patches/perl-no-sys-dirs.patch
+++ b/gnu/packages/patches/perl-no-sys-dirs.patch
@@ -6,7 +6,7 @@ Patch adapted from Nixpkgs, originally by Eelco Dolstra
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
 --- perl-5.20.0-orig/Configure	2014-05-26 15:34:18.000000000 +0200
 +++ perl-5.20.0/Configure	2014-06-25 10:43:35.368285986 +0200
-@@ -106,15 +106,7 @@
+@@ -108,15 +108,7 @@
  fi
  
  : Proper PATH setting
@@ -23,8 +23,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  for p in $paths
  do
-@@ -1337,8 +1329,7 @@
- archname=''
+@@ -1435,8 +1427,7 @@
+ i_whoami=''
  : Possible local include directories to search.
  : Set locincpth to "" in a hint file to defeat local include searches.
 -locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
@@ -33,8 +33,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  :
  : no include file wanted by default
  inclwanted=''
-@@ -1349,17 +1340,12 @@
- 
+@@ -1450,17 +1441,12 @@
+ archobjs=''
  libnames=''
  : change the next line if compiling for Xenix/286 on Xenix/386
 -xlibpth='/usr/lib/386 /lib/386'
@@ -54,8 +54,8 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  
  : Private path used by Configure to find libraries.  Its value
  : is prepended to libpth. This variable takes care of special
-@@ -1391,8 +1377,6 @@
- libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
+@@ -1495,8 +1481,6 @@
+ libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
  : We probably want to search /usr/shlib before most other libraries.
  : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
 -glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
@@ -63,7 +63,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  : Do not use vfork unless overridden by a hint file.
  usevfork=false
  
-@@ -2446,7 +2430,6 @@
+@@ -2553,7 +2537,6 @@
  zip
  "
  pth=`echo $PATH | sed -e "s/$p_/ /g"`
@@ -71,7 +71,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  for file in $loclist; do
  	eval xxx=\$$file
  	case "$xxx" in
-@@ -4936,7 +4919,7 @@
+@@ -5049,7 +5033,7 @@
  : Set private lib path
  case "$plibpth" in
  '') if ./mips; then
@@ -80,7 +80,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
      fi;;
  esac
  case "$libpth" in
-@@ -8600,13 +8583,8 @@
+@@ -8877,13 +8861,8 @@
  echo " "
  case "$sysman" in
  '')
@@ -96,7 +96,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/Configure perl-5.20.0/Configure
  	;;
  esac
  if $test -d "$sysman"; then
-@@ -19900,9 +19878,10 @@
+@@ -21027,9 +21006,10 @@
  case "$full_ar" in
  '') full_ar=$ar ;;
  esac
@@ -169,7 +169,7 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/freebsd.sh perl-5.20.0/hints/
 diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/linux.sh
 --- perl-5.20.0-orig/hints/linux.sh	2014-05-26 15:34:20.000000000 +0200
 +++ perl-5.20.0/hints/linux.sh	2014-06-25 10:33:47.354883843 +0200
-@@ -150,25 +150,6 @@
+@@ -150,28 +150,6 @@
      ;;
  esac
  
@@ -188,6 +188,9 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
 -# plibpth to bypass this check.
 -if [ -x /usr/bin/gcc ] ; then
 -    gcc=/usr/bin/gcc
+-# clang also provides -print-search-dirs
+-elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then
+-    gcc=${cc:-cc}
 -else
 -    gcc=gcc
 -fi
@@ -195,7 +198,40 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  case "$plibpth" in
  '') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries |
  	cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'`
-@@ -367,33 +322,6 @@
+@@ -208,32 +186,6 @@
+   ;;
+ esac
+ 
+-case "$libc" in
+-'')
+-# If you have glibc, then report the version for ./myconfig bug reporting.
+-# (Configure doesn't need to know the specific version since it just uses
+-# gcc to load the library for all tests.)
+-# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
+-# are insufficiently precise to distinguish things like
+-# libc-2.0.6 and libc-2.0.7.
+-    for p in $plibpth
+-    do
+-        for trylib in libc.so.6 libc.so
+-        do
+-            if $test -e $p/$trylib; then
+-                libc=`ls -l $p/$trylib | awk '{print $NF}'`
+-                if $test "X$libc" != X; then
+-                    break
+-                fi
+-            fi
+-        done
+-        if $test "X$libc" != X; then
+-            break
+-        fi
+-    done
+-    ;;
+-esac
+-
+ if ${sh:-/bin/sh} -c exit; then
+   echo ''
+   echo 'You appear to have a working bash.  Good.'
+@@ -311,33 +263,6 @@
  	;;
  esac
  
@@ -229,40 +265,3 @@ diff -ru -x '*~' -x '*.rej' perl-5.20.0-orig/hints/linux.sh perl-5.20.0/hints/li
  # Linux on Synology.
  if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
      # Tested on Synology DS213 and DS413
-diff --git a/hints/linux.sh b/hints/linux.sh
-index 3f38ea0..97aed11 100644
---- a/hints/linux.sh
-+++ b/hints/linux.sh
-@@ -195,32 +195,6 @@ case "$usequadmath" in
-   ;;
- esac
- 
--case "$libc" in
--'')
--# If you have glibc, then report the version for ./myconfig bug reporting.
--# (Configure doesn't need to know the specific version since it just uses
--# gcc to load the library for all tests.)
--# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
--# are insufficiently precise to distinguish things like
--# libc-2.0.6 and libc-2.0.7.
--    for p in $plibpth
--    do
--        for trylib in libc.so.6 libc.so
--        do
--            if $test -e $p/$trylib; then
--                libc=`ls -l $p/$trylib | awk '{print $NF}'`
--                if $test "X$libc" != X; then
--                    break
--                fi
--            fi
--        done
--        if $test "X$libc" != X; then
--            break
--        fi
--    done
--    ;;
--esac
--
- if ${sh:-/bin/sh} -c exit; then
-   echo ''
-   echo 'You appear to have a working bash.  Good.'
diff --git a/gnu/packages/patches/python-2.7-no-static-lib.patch b/gnu/packages/patches/python-2.7-no-static-lib.patch
new file mode 100644
index 0000000000..02529989be
--- /dev/null
+++ b/gnu/packages/patches/python-2.7-no-static-lib.patch
@@ -0,0 +1,70 @@
+From 92e2dcace7a3c02289b314238c5f18caec659ff1 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sat, 5 Jun 2021 12:41:47 +0200
+Subject: [PATCH] No static lib.
+
+This patch is adapted from Fedora. The original patch did not apply
+because of whitespace changes.
+
+00111 #
+Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
+a libpythonMAJOR.MINOR.a (bug 550692):
+Downstream only: not appropriate for upstream
+---
+ Makefile.pre.in | 26 +-------------------------
+ 1 file changed, 1 insertion(+), 25 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 6239fc3..948f196 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -486,7 +486,7 @@ coverage-report: regen-grammar
+ 
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Modules/python.o $(LIBRARY) $(LDLIBRARY)
++$(BUILDPYTHON):	Modules/python.o $(LDLIBRARY)
+ 		$(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
+ 			Modules/python.o \
+ 			$(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+@@ -527,18 +527,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-# Build static library
+-# avoid long command lines, same as LIBRARY_OBJS
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
+-	$(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(PYTHON_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
+-	$(AR) $(ARFLAGS) $@ $(MODOBJS)
+-	$(RANLIB) $@
+-
+ libpython$(VERSION).so: $(LIBRARY_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+@@ -1216,18 +1204,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SO)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-				$(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
+-- 
+2.31.1
+
diff --git a/gnu/packages/patches/python-3-fix-tests.patch b/gnu/packages/patches/python-3-fix-tests.patch
index e13790bd41..b44e743c71 100644
--- a/gnu/packages/patches/python-3-fix-tests.patch
+++ b/gnu/packages/patches/python-3-fix-tests.patch
@@ -1,10 +1,39 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
+From f0698133e7d6c353a3e6ae0fc62e57ba558a9bc0 Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Wed, 28 Oct 2020 22:55:05 -0400
+Subject: [PATCH] Skip problematic Python 3 tests in Guix.
+
+A subset of the hunks in this patch is tracked upstream at
+https://bugs.python.org/issue38845, which was contributed by Tanguy Le
+Carrour <tanguy@bioneland.org>.
+---
+ Lib/ctypes/test/test_callbacks.py         | 3 +++
+ Lib/ctypes/test/test_find.py              | 1 +
+ Lib/ctypes/test/test_libc.py              | 3 +++
+ Lib/distutils/tests/test_archive_util.py  | 2 ++
+ Lib/distutils/tests/test_sdist.py         | 1 +
+ Lib/test/_test_multiprocessing.py         | 2 ++
+ Lib/test/test_asyncio/test_base_events.py | 2 ++
+ Lib/test/test_generators.py               | 1 +
+ Lib/test/test_pathlib.py                  | 3 +--
+ Lib/test/test_pdb.py                      | 4 ++--
+ Lib/test/test_regrtest.py                 | 2 ++
+ Lib/test/test_resource.py                 | 1 +
+ Lib/test/test_shutil.py                   | 2 ++
+ Lib/test/test_signal.py                   | 4 ++++
+ Lib/test/test_socket.py                   | 8 ++++++++
+ Lib/test/test_spwd.py                     | 6 ++----
+ Lib/test/test_tarfile.py                  | 9 ++++++---
+ Lib/test/test_threading.py                | 3 +++
+ Lib/test/test_unicodedata.py              | 1 +
+ Tools/scripts/run_tests.py                | 2 +-
+ 20 files changed, 48 insertions(+), 12 deletions(-)
 
 diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
+index d8e9c5a760..94fc5929c9 100644
 --- a/Lib/ctypes/test/test_callbacks.py
 +++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
+@@ -5,6 +5,7 @@ from test import support
  from ctypes import *
  from ctypes.test import need_symbol
  import _ctypes_test
@@ -12,7 +41,7 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
  
  class Callbacks(unittest.TestCase):
      functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
+@@ -178,6 +179,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
  
          self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
  
@@ -21,7 +50,20 @@ diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.
      def test_issue_8959_a(self):
          from ctypes.util import find_library
          libc_path = find_library("c")
+diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
+index 92ac1840ad..c8eb75dedd 100644
+--- a/Lib/ctypes/test/test_find.py
++++ b/Lib/ctypes/test/test_find.py
+@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+             self.assertNotEqual(find_library('c'), None)
+ 
++    @unittest.skipIf(True, "ldconfig is not used on Guix")
+     def test_find_library_with_ld(self):
+         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
 diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
+index 56285b5ff8..c088ab3db8 100644
 --- a/Lib/ctypes/test/test_libc.py
 +++ b/Lib/ctypes/test/test_libc.py
 @@ -2,6 +2,7 @@ import unittest
@@ -42,6 +84,7 @@ diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
          comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
          lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
 diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
+index e9aad0e40f..8bbaa51ee5 100644
 --- a/Lib/distutils/tests/test_archive_util.py
 +++ b/Lib/distutils/tests/test_archive_util.py
 @@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
@@ -61,6 +104,7 @@ diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test
          tmpdir =  self._create_files()
          base_name = os.path.join(self.mkdtemp(), 'archive')
 diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
+index 23db126959..6e2329df7d 100644
 --- a/Lib/distutils/tests/test_sdist.py
 +++ b/Lib/distutils/tests/test_sdist.py
 @@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
@@ -72,9 +116,10 @@ diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.
          # now building a sdist
          dist, cmd = self.get_cmd()
 diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
+index e47905c863..31a5a9c308 100644
 --- a/Lib/test/_test_multiprocessing.py
 +++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
+@@ -1577,6 +1577,7 @@ class _TestCondition(BaseTestCase):
          if pid is not None:
              os.kill(pid, signal.SIGINT)
  
@@ -82,10 +127,19 @@ diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.
      def test_wait_result(self):
          if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
              pid = os.getpid()
+@@ -3905,6 +3906,7 @@ class _TestSharedMemory(BaseTestCase):
+         sms.close()
+ 
+     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
+         # bpo-36368: protect SharedMemoryManager server process from
+         # KeyboardInterrupt signals.
 diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
+index 533d5cc7f5..c4f860cc3b 100644
 --- a/Lib/test/test_asyncio/test_base_events.py
 +++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
+@@ -1341,6 +1341,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
          self._test_create_connection_ip_addr(m_socket, False)
  
      @patch_socket
@@ -95,9 +149,10 @@ diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/t
          m_socket.getaddrinfo = socket.getaddrinfo
          sock = m_socket.socket.return_value
 diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
+index 3bf1522808..04bac8a7db 100644
 --- a/Lib/test/test_generators.py
 +++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
+@@ -33,6 +33,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
          else:
              return "FAILED"
  
@@ -105,30 +160,11 @@ diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
      def test_raise_and_yield_from(self):
          gen = self.generator1()
          gen.send(None)
-diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
---- a/Lib/test/test_normalization.py
-+++ b/Lib/test/test_normalization.py
-@@ -2,6 +2,7 @@ from test.support import open_urlresource
- import unittest
- 
- from http.client import HTTPException
-+from urllib.error import URLError
- import sys
- from unicodedata import normalize, unidata_version
- 
-@@ -43,6 +44,8 @@ class NormalizationTest(unittest.TestCase):
-         except PermissionError:
-             self.skipTest(f"Permission error when downloading {TESTDATAURL} "
-                           f"into the test data directory")
-+        except URLError:
-+            self.skipTest("DNS lookups are not enabled.")
-         except (OSError, HTTPException):
-             self.fail(f"Could not retrieve {TESTDATAURL}")
- 
 diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
+index 3da35710b9..5404f9193d 100644
 --- a/Lib/test/test_pathlib.py
 +++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
+@@ -2408,8 +2408,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
          self.assertEqual(given, expect)
          self.assertEqual(set(p.rglob("FILEd*")), set())
  
@@ -139,9 +175,10 @@ diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
          P = self.cls
          support.import_module('pwd')
 diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
+index 8016f81e5a..10190486b4 100644
 --- a/Lib/test/test_pdb.py
 +++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
+@@ -1219,11 +1219,11 @@ def test_pdb_issue_20766():
      > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
      -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
      (Pdb) continue
@@ -156,9 +193,10 @@ diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
  
  
 diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
+index a77638b10a..2069b349a8 100644
 --- a/Lib/test/test_regrtest.py
 +++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -811,6 +811,7 @@ class ArgsTestCase(BaseTestCase):
          output = self.run_tests('--fromfile', filename)
          self.check_executed_tests(output, tests)
  
@@ -166,7 +204,7 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
      def test_interrupted(self):
          code = TEST_INTERRUPTED
          test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
+@@ -828,6 +829,7 @@ class ArgsTestCase(BaseTestCase):
                   % (self.TESTNAME_REGEX, len(tests)))
          self.check_line(output, regex)
  
@@ -175,9 +213,10 @@ diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
          # Issue #25373: test --slowest with an interrupted test
          code = TEST_INTERRUPTED
 diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
+index e5ece5284c..5299e54507 100644
 --- a/Lib/test/test_resource.py
 +++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
+@@ -148,6 +148,7 @@ class ResourceTest(unittest.TestCase):
  
      @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
      @support.requires_linux_version(2, 6, 36)
@@ -186,37 +225,75 @@ diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
          self.assertRaises(TypeError, resource.prlimit)
          self.assertRaises(ProcessLookupError, resource.prlimit,
 diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
+index e19af64be0..1b893df6fa 100644
 --- a/Lib/test/test_shutil.py
 +++ b/Lib/test/test_shutil.py
-@@ -1143,6 +1143,7 @@ class TestShutil(unittest.TestCase):
+@@ -1427,6 +1427,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         base_name = os.path.join(tmpdir, 'archive')
          self.assertRaises(ValueError, make_archive, base_name, 'xxx')
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      def test_make_archive_owner_group(self):
          # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1171,6 +1172,7 @@ class TestShutil(unittest.TestCase):
+@@ -1455,6 +1456,7 @@ class TestArchives(BaseTest, unittest.TestCase):
+         self.assertTrue(os.path.isfile(res))
  
  
-     @support.requires_zlib
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
++    @unittest.skipIf(True, "The Guix build container has no root user")
+     @support.requires_zlib()
      @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
      def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
+diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
+index 45553a6a42..55623f01a3 100644
+--- a/Lib/test/test_signal.py
++++ b/Lib/test/test_signal.py
+@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
+         self.assertLess(len(s), signal.NSIG)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers exit via SIGINT."""
+         process = subprocess.run(
+@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
+             signal.signal(7, handler)
+ 
+     @unittest.skipUnless(sys.executable, "sys.executable required.")
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_keyboard_interrupt_exit_code(self):
+         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
+         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
+@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
+ 
+ class RaiseSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     def test_sigint(self):
+         with self.assertRaises(KeyboardInterrupt):
+             signal.raise_signal(signal.SIGINT)
+@@ -1275,6 +1278,7 @@ class RaiseSignalTest(unittest.TestCase):
+ 
+ class PidfdSignalTest(unittest.TestCase):
+ 
++    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
+     @unittest.skipUnless(
+         hasattr(signal, "pidfd_send_signal"),
+         "pidfd support not built in",
 diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
+index aefba4f397..6c89f558d5 100755
 --- a/Lib/test/test_socket.py
 +++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1009,6 +1009,8 @@ class GeneralModuleTests(unittest.TestCase):
          if not fqhn in all_host_names:
              self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
  
 +    @unittest.skipUnless(support.is_resource_enabled('network'),
 +                         'network is not enabled')
      def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
+         for addr in [socket_helper.HOSTv4, '10.0.0.1', '255.255.255.255']:
              self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1140,6 +1142,8 @@ class GeneralModuleTests(unittest.TestCase):
              self.assertWarns(DeprecationWarning, socket.ntohs, k)
              self.assertWarns(DeprecationWarning, socket.htons, k)
  
@@ -225,7 +302,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetServBy(self):
          eq = self.assertEqual
          # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1489,6 +1493,8 @@ class GeneralModuleTests(unittest.TestCase):
              raise
          self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
  
@@ -234,7 +311,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
      def testGetaddrinfo(self):
          try:
              socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
+@@ -1571,6 +1577,8 @@ class GeneralModuleTests(unittest.TestCase):
          # only IP addresses are allowed
          self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
  
@@ -244,6 +321,7 @@ diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
                           'network is not enabled')
      def test_idna(self):
 diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
+index 07793c84c8..fec672bcbe 100644
 --- a/Lib/test/test_spwd.py
 +++ b/Lib/test/test_spwd.py
 @@ -5,8 +5,7 @@ from test import support
@@ -267,9 +345,10 @@ diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
  
      def test_getspnam_exception(self):
 diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
+index 29cde91bf7..8d0f20e8bf 100644
 --- a/Lib/test/test_tarfile.py
 +++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
+@@ -2607,9 +2607,12 @@ def root_is_uid_gid_0():
          import pwd, grp
      except ImportError:
          return False
@@ -286,9 +365,10 @@ diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
      return True
  
 diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
+index c21cdf8eb7..6c9d575032 100644
 --- a/Lib/test/test_threading.py
 +++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
+@@ -1398,6 +1398,7 @@ class MiscTestCase(unittest.TestCase):
  
  
  class InterruptMainTests(unittest.TestCase):
@@ -296,7 +376,7 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_subthread(self):
          # Calling start_new_thread with a function that executes interrupt_main
          # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
+@@ -1409,6 +1410,8 @@ class InterruptMainTests(unittest.TestCase):
              t.join()
          t.join()
  
@@ -305,10 +385,23 @@ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
      def test_interrupt_main_mainthread(self):
          # Make sure that if interrupt_main is called in main thread that
          # KeyboardInterrupt is raised instantly.
+diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
+index b552d2bd17..28b1144e15 100644
+--- a/Lib/test/test_unicodedata.py
++++ b/Lib/test/test_unicodedata.py
+@@ -309,6 +309,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest):
+                 self.assertEqual(len(lines), 1,
+                                  r"\u%.4x should not be a linebreak" % i)
+ 
++@requires_resource('network')
+ class NormalizationTest(unittest.TestCase):
+     @staticmethod
+     def check_version(testfile):
 diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
+index bcfa5e943b..1f2484971b 100644
 --- a/Tools/scripts/run_tests.py
 +++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
+@@ -41,7 +41,7 @@ def main(regrtest_args):
      if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
          args.extend(['-j', '0'])  # Use all CPU cores
      if not any(is_resource_use_flag(arg) for arg in regrtest_args):
@@ -317,3 +410,6 @@ diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
      args.extend(regrtest_args)
      print(' '.join(args))
      if sys.platform == 'win32':
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/python-3-hurd-configure.patch b/gnu/packages/patches/python-3-hurd-configure.patch
new file mode 100644
index 0000000000..aa25a401c5
--- /dev/null
+++ b/gnu/packages/patches/python-3-hurd-configure.patch
@@ -0,0 +1,27 @@
+Upstream status: Not upstreamed.
+
+The build system refuses to cross-compile for unknown targets
+even though it works fine.  Add GNU/Hurd target.
+
+--- Python-3.8.5/configure.orig	2020-10-26 14:06:09.665423525 +0100
++++ Python-3.8.5/configure	2020-10-26 14:08:30.987765738 +0100
+@@ -3278,6 +3278,9 @@
+ 	*-*-vxworks*)
+ 	    ac_sys_system=VxWorks
+ 	    ;;
++	*-*-gnu)
++	    ac_sys_system=GNU
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
+@@ -3328,6 +3331,9 @@
+ 	*-*-vxworks*)
+ 		_host_cpu=$host_cpu
+ 		;;
++	*-*-gnu)
++		_host_cpu=$host_cpu
++	    ;;
+ 	*)
+ 		# for now, limit cross builds to known configurations
+ 		MACHDEP="unknown"
diff --git a/gnu/packages/patches/python-3-no-static-lib.patch b/gnu/packages/patches/python-3-no-static-lib.patch
new file mode 100644
index 0000000000..b44dbc976c
--- /dev/null
+++ b/gnu/packages/patches/python-3-no-static-lib.patch
@@ -0,0 +1,75 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: David Malcolm <dmalcolm@redhat.com>
+Date: Mon, 18 Jan 2010 17:59:07 +0000
+Subject: [PATCH] 00111: Don't try to build a libpythonMAJOR.MINOR.a
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Downstream only: not appropriate for upstream.
+
+See https://bugzilla.redhat.com/show_bug.cgi?id=556092
+
+Co-authored-by: David Malcolm <dmalcolm@redhat.com>
+Co-authored-by: Bohuslav Kabrda <bkabrda@redhat.com>
+Co-authored-by: Matej Stuchlik <mstuchli@redhat.com>
+Co-authored-by: Robert Kuska <rkuska@redhat.com>
+Co-authored-by: Charalampos Stratakis <cstratak@redhat.com>
+Co-authored-by: Miro Hrončok <miro@hroncok.cz>
+---
+ Makefile.pre.in | 21 ++-------------------
+ 1 file changed, 2 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile.pre.in b/Makefile.pre.in
+index 0c3981c132..5587422ec7 100644
+--- a/Makefile.pre.in
++++ b/Makefile.pre.in
+@@ -589,7 +589,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+ 	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
+ 
+ # Build the interpreter
+-$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++$(BUILDPYTHON):	Programs/python.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ platform: $(BUILDPYTHON) pybuilddir.txt
+@@ -637,12 +637,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+ 		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
+ 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+-
+-# Build static library
+-$(LIBRARY): $(LIBRARY_OBJS)
+-	-rm -f $@
+-	$(AR) $(ARFLAGS) $@ $(LIBRARY_OBJS)
+-
+ libpython$(LDVERSION).so: $(LIBRARY_OBJS) $(DTRACE_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \
+@@ -724,7 +718,7 @@ Makefile Modules/config.c: Makefile.pre \
+ 	@echo "The Makefile was updated, you may need to re-run make."
+ 
+ 
+-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
++Programs/_testembed: Programs/_testembed.o $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
+ 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
+ 
+ ############################################################################
+@@ -1652,17 +1646,6 @@ libainstall:	@DEF_MAKE_RULE@ python-config
+ 		else	true; \
+ 		fi; \
+ 	done
+-	@if test -d $(LIBRARY); then :; else \
+-		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
+-			if test "$(SHLIB_SUFFIX)" = .dll; then \
+-				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
+-			else \
+-				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
+-			fi; \
+-		else \
+-			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
+-		fi; \
+-	fi
+ 	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
+ 	$(INSTALL_DATA) Programs/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
diff --git a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch b/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
deleted file mode 100644
index 01f6b52865..0000000000
--- a/gnu/packages/patches/python-3.8-CVE-2021-3177.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-Fix CVE-2021-3177 for Python 3.8:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3177
-
-Patch copied from upstream source repository:
-
-https://github.com/python/cpython/commit/ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f
-
-From ece5dfd403dac211f8d3c72701fe7ba7b7aa5b5f Mon Sep 17 00:00:00 2001
-From: "Miss Islington (bot)"
- <31488909+miss-islington@users.noreply.github.com>
-Date: Mon, 18 Jan 2021 13:28:52 -0800
-Subject: [PATCH] closes bpo-42938: Replace snprintf with Python unicode
- formatting in ctypes param reprs. (GH-24248)
-
-(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0977c7)
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
-
-Co-authored-by: Benjamin Peterson <benjamin@python.org>
----
- Lib/ctypes/test/test_parameters.py            | 43 ++++++++++++++++
- .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst  |  2 +
- Modules/_ctypes/callproc.c                    | 51 +++++++------------
- 3 files changed, 64 insertions(+), 32 deletions(-)
- create mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-
-diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py
-index e4c25fd880cef..531894fdec838 100644
---- a/Lib/ctypes/test/test_parameters.py
-+++ b/Lib/ctypes/test/test_parameters.py
-@@ -201,6 +201,49 @@ def __dict__(self):
-         with self.assertRaises(ZeroDivisionError):
-             WorseStruct().__setstate__({}, b'foo')
- 
-+    def test_parameter_repr(self):
-+        from ctypes import (
-+            c_bool,
-+            c_char,
-+            c_wchar,
-+            c_byte,
-+            c_ubyte,
-+            c_short,
-+            c_ushort,
-+            c_int,
-+            c_uint,
-+            c_long,
-+            c_ulong,
-+            c_longlong,
-+            c_ulonglong,
-+            c_float,
-+            c_double,
-+            c_longdouble,
-+            c_char_p,
-+            c_wchar_p,
-+            c_void_p,
-+        )
-+        self.assertRegex(repr(c_bool.from_param(True)), r"^<cparam '\?' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_char.from_param(97)), "<cparam 'c' ('a')>")
-+        self.assertRegex(repr(c_wchar.from_param('a')), r"^<cparam 'u' at 0x[A-Fa-f0-9]+>$")
-+        self.assertEqual(repr(c_byte.from_param(98)), "<cparam 'b' (98)>")
-+        self.assertEqual(repr(c_ubyte.from_param(98)), "<cparam 'B' (98)>")
-+        self.assertEqual(repr(c_short.from_param(511)), "<cparam 'h' (511)>")
-+        self.assertEqual(repr(c_ushort.from_param(511)), "<cparam 'H' (511)>")
-+        self.assertRegex(repr(c_int.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_uint.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_long.from_param(20000)), r"^<cparam '[li]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulong.from_param(20000)), r"^<cparam '[LI]' \(20000\)>$")
-+        self.assertRegex(repr(c_longlong.from_param(20000)), r"^<cparam '[liq]' \(20000\)>$")
-+        self.assertRegex(repr(c_ulonglong.from_param(20000)), r"^<cparam '[LIQ]' \(20000\)>$")
-+        self.assertEqual(repr(c_float.from_param(1.5)), "<cparam 'f' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1.5)), "<cparam 'd' (1.5)>")
-+        self.assertEqual(repr(c_double.from_param(1e300)), "<cparam 'd' (1e+300)>")
-+        self.assertRegex(repr(c_longdouble.from_param(1.5)), r"^<cparam ('d' \(1.5\)|'g' at 0x[A-Fa-f0-9]+)>$")
-+        self.assertRegex(repr(c_char_p.from_param(b'hihi')), "^<cparam 'z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_wchar_p.from_param('hihi')), "^<cparam 'Z' \(0x[A-Fa-f0-9]+\)>$")
-+        self.assertRegex(repr(c_void_p.from_param(0x12)), r"^<cparam 'P' \(0x0*12\)>$")
-+
- ################################################################
- 
- if __name__ == '__main__':
-#diff --git a/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#new file mode 100644
-#index 0000000000000..7df65a156feab
-#--- /dev/null
-#+++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst
-#@@ -0,0 +1,2 @@
-#+Avoid static buffers when computing the repr of :class:`ctypes.c_double` and
-#+:class:`ctypes.c_longdouble` values.
-diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
-index a9b8675cd951b..de75918d49f37 100644
---- a/Modules/_ctypes/callproc.c
-+++ b/Modules/_ctypes/callproc.c
-@@ -484,58 +484,47 @@ is_literal_char(unsigned char c)
- static PyObject *
- PyCArg_repr(PyCArgObject *self)
- {
--    char buffer[256];
-     switch(self->tag) {
-     case 'b':
-     case 'B':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.b);
--        break;
-     case 'h':
-     case 'H':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.h);
--        break;
-     case 'i':
-     case 'I':
--        sprintf(buffer, "<cparam '%c' (%d)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%d)>",
-             self->tag, self->value.i);
--        break;
-     case 'l':
-     case 'L':
--        sprintf(buffer, "<cparam '%c' (%ld)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%ld)>",
-             self->tag, self->value.l);
--        break;
- 
-     case 'q':
-     case 'Q':
--        sprintf(buffer,
--#ifdef MS_WIN32
--            "<cparam '%c' (%I64d)>",
--#else
--            "<cparam '%c' (%lld)>",
--#endif
-+        return PyUnicode_FromFormat("<cparam '%c' (%lld)>",
-             self->tag, self->value.q);
--        break;
-     case 'd':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.d);
--        break;
--    case 'f':
--        sprintf(buffer, "<cparam '%c' (%f)>",
--            self->tag, self->value.f);
--        break;
--
-+    case 'f': {
-+        PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d);
-+        if (f == NULL) {
-+            return NULL;
-+        }
-+        PyObject *result = PyUnicode_FromFormat("<cparam '%c' (%R)>", self->tag, f);
-+        Py_DECREF(f);
-+        return result;
-+    }
-     case 'c':
-         if (is_literal_char((unsigned char)self->value.c)) {
--            sprintf(buffer, "<cparam '%c' ('%c')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('%c')>",
-                 self->tag, self->value.c);
-         }
-         else {
--            sprintf(buffer, "<cparam '%c' ('\\x%02x')>",
-+            return PyUnicode_FromFormat("<cparam '%c' ('\\x%02x')>",
-                 self->tag, (unsigned char)self->value.c);
-         }
--        break;
- 
- /* Hm, are these 'z' and 'Z' codes useful at all?
-    Shouldn't they be replaced by the functionality of c_string
-@@ -544,22 +533,20 @@ PyCArg_repr(PyCArgObject *self)
-     case 'z':
-     case 'Z':
-     case 'P':
--        sprintf(buffer, "<cparam '%c' (%p)>",
-+        return PyUnicode_FromFormat("<cparam '%c' (%p)>",
-             self->tag, self->value.p);
-         break;
- 
-     default:
-         if (is_literal_char((unsigned char)self->tag)) {
--            sprintf(buffer, "<cparam '%c' at %p>",
-+            return PyUnicode_FromFormat("<cparam '%c' at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
-         else {
--            sprintf(buffer, "<cparam 0x%02x at %p>",
-+            return PyUnicode_FromFormat("<cparam 0x%02x at %p>",
-                 (unsigned char)self->tag, (void *)self);
-         }
--        break;
-     }
--    return PyUnicode_FromString(buffer);
- }
- 
- static PyMemberDef PyCArgType_members[] = {
diff --git a/gnu/packages/patches/python-3.8-fix-tests.patch b/gnu/packages/patches/python-3.8-fix-tests.patch
deleted file mode 100644
index 4fbdd444c7..0000000000
--- a/gnu/packages/patches/python-3.8-fix-tests.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
---
-2.23.0
diff --git a/gnu/packages/patches/python-3.9-fix-tests.patch b/gnu/packages/patches/python-3.9-fix-tests.patch
deleted file mode 100644
index dc6b8c4cc8..0000000000
--- a/gnu/packages/patches/python-3.9-fix-tests.patch
+++ /dev/null
@@ -1,370 +0,0 @@
-See the discussion about the issues fixed here at:
-http://bugs.python.org/issue20868 .
-
-diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
---- a/Lib/ctypes/test/test_callbacks.py
-+++ b/Lib/ctypes/test/test_callbacks.py
-@@ -3,6 +3,7 @@ import unittest
- from ctypes import *
- from ctypes.test import need_symbol
- import _ctypes_test
-+import platform
-
- class Callbacks(unittest.TestCase):
-     functype = CFUNCTYPE
-@@ -176,6 +177,8 @@ class SampleCallbacksTestCase(unittest.TestCase):
-
-         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_issue_8959_a(self):
-         from ctypes.util import find_library
-         libc_path = find_library("c")
-diff --git a/Lib/ctypes/test/test_libc.py b/Lib/ctypes/test/test_libc.py
---- a/Lib/ctypes/test/test_libc.py
-+++ b/Lib/ctypes/test/test_libc.py
-@@ -2,6 +2,7 @@ import unittest
-
- from ctypes import *
- import _ctypes_test
-+import platform
-
- lib = CDLL(_ctypes_test.__file__)
-
-@@ -17,6 +18,8 @@ class LibTest(unittest.TestCase):
-         import math
-         self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
-
-+    @unittest.skipIf(platform.machine() in ['mips64'],
-+                     "This test fails on this platform")
-     def test_qsort(self):
-         comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
-         lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
-diff --git a/Lib/distutils/tests/test_archive_util.py b/Lib/distutils/tests/test_archive_util.py
---- a/Lib/distutils/tests/test_archive_util.py
-+++ b/Lib/distutils/tests/test_archive_util.py
-@@ -333,6 +333,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-         self.assertEqual(os.path.basename(res), 'archive.tar.xz')
-         self.assertEqual(self._tarinfo(res), self._created_files)
-
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -362,6 +363,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
-
-     @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_tarfile_root_owner(self):
-         tmpdir =  self._create_files()
-         base_name = os.path.join(self.mkdtemp(), 'archive')
-diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
---- a/Lib/distutils/tests/test_sdist.py
-+++ b/Lib/distutils/tests/test_sdist.py
-@@ -443,6 +443,7 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
-                      "The tar command is not found")
-     @unittest.skipIf(find_executable('gzip') is None,
-                      "The gzip command is not found")
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_distribution_owner_group(self):
-         # now building a sdist
-         dist, cmd = self.get_cmd()
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -1473,6 +1473,7 @@ class _TestCondition(BaseTestCase):
-         if pid is not None:
-             os.kill(pid, signal.SIGINT)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_wait_result(self):
-         if isinstance(self, ProcessesMixin) and sys.platform != 'win32':
-             pid = os.getpid()
-diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
---- a/Lib/test/test_asyncio/test_base_events.py
-+++ b/Lib/test/test_asyncio/test_base_events.py
-@@ -1323,6 +1323,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
-         self._test_create_connection_ip_addr(m_socket, False)
-
-     @patch_socket
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_create_connection_service_name(self, m_socket):
-         m_socket.getaddrinfo = socket.getaddrinfo
-         sock = m_socket.socket.return_value
-diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
---- a/Lib/test/test_generators.py
-+++ b/Lib/test/test_generators.py
-@@ -34,6 +34,7 @@ class SignalAndYieldFromTest(unittest.TestCase):
-         else:
-             return "FAILED"
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment')
-     def test_raise_and_yield_from(self):
-         gen = self.generator1()
-         gen.send(None)
-diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
---- a/Lib/test/test_pathlib.py
-+++ b/Lib/test/test_pathlib.py
-@@ -2134,8 +2134,7 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
-         self.assertEqual(given, expect)
-         self.assertEqual(set(p.rglob("FILEd*")), set())
-
--    @unittest.skipUnless(hasattr(pwd, 'getpwall'),
--                         'pwd module does not expose getpwall()')
-+    @unittest.skipIf(True, "Guix builder home is '/' which causes trouble for these tests")
-     def test_expanduser(self):
-         P = self.cls
-         support.import_module('pwd')
-diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
---- a/Lib/test/test_pdb.py
-+++ b/Lib/test/test_pdb.py
-@@ -1150,11 +1150,11 @@ def test_pdb_issue_20766():
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
-     -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
-     (Pdb) continue
--    pdb 1: <built-in function default_int_handler>
-+    pdb 1: Handlers.SIG_IGN
-     > <doctest test.test_pdb.test_pdb_issue_20766[0]>(5)test_function()
-     -> sess.set_trace(sys._getframe())
-     (Pdb) continue
--    pdb 2: <built-in function default_int_handler>
-+    pdb 2: Handlers.SIG_IGN
-     """
-
-
-diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
---- a/Lib/test/test_regrtest.py
-+++ b/Lib/test/test_regrtest.py
-@@ -762,6 +762,7 @@ class ArgsTestCase(BaseTestCase):
-         output = self.run_tests('--fromfile', filename)
-         self.check_executed_tests(output, tests)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_interrupted(self):
-         code = TEST_INTERRUPTED
-         test = self.create_test('sigint', code=code)
-@@ -779,6 +780,7 @@ class ArgsTestCase(BaseTestCase):
-                  % (self.TESTNAME_REGEX, len(tests)))
-         self.check_line(output, regex)
-
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build environment.')
-     def test_slowest_interrupted(self):
-         # Issue #25373: test --slowest with an interrupted test
-         code = TEST_INTERRUPTED
-diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
---- a/Lib/test/test_resource.py
-+++ b/Lib/test/test_resource.py
-@@ -145,6 +145,7 @@ class ResourceTest(unittest.TestCase):
-
-     @unittest.skipUnless(hasattr(resource, 'prlimit'), 'no prlimit')
-     @support.requires_linux_version(2, 6, 36)
-+    @unittest.skipIf(True, "Bug: the PermissionError is not raised")
-     def test_prlimit(self):
-         self.assertRaises(TypeError, resource.prlimit)
-         self.assertRaises(ProcessLookupError, resource.prlimit,
-diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
---- a/Lib/test/test_shutil.py
-+++ b/Lib/test/test_shutil.py
-@@ -1428,6 +1428,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     def test_make_archive_owner_group(self):
-         # testing make_archive with owner and group, with various combinations
-         # this works even if there's not gid/uid support
-@@ -1456,6 +1457,7 @@ class TestArchives(BaseTest, unittest.TestCase):
-
-
-     @support.requires_zlib()
-+    @unittest.skipIf(True, "getgrgid(0)[0] raises a KeyError on Guix")
-     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
-     def test_tarfile_root_owner(self):
-         root_dir, base_dir = self._create_files()
-diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
---- a/Lib/test/test_unicodedata.py
-+++ b/Lib/test/test_unicodedata.py
-@@ -320,6 +320,7 @@ class NormalizationTest(unittest.TestCase):
-         data = [int(x, 16) for x in data.split(" ")]
-         return "".join([chr(x) for x in data])
-
-+    @unittest.skipIf(True, 'Network is not available in the Guix build environment')
-     def test_normalization(self):
-         TESTDATAFILE = "NormalizationTest.txt"
-         TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
-diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
---- a/Lib/test/test_socket.py
-+++ b/Lib/test/test_socket.py
-@@ -875,6 +875,8 @@ class GeneralModuleTests(unittest.TestCase):
-         if not fqhn in all_host_names:
-             self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
-
-+    @unittest.skipUnless(support.is_resource_enabled('network'),
-+                         'network is not enabled')
-     def test_host_resolution(self):
-         for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
-             self.assertEqual(socket.gethostbyname(addr), addr)
-@@ -1004,6 +1006,8 @@ class GeneralModuleTests(unittest.TestCase):
-             self.assertWarns(DeprecationWarning, socket.ntohs, k)
-             self.assertWarns(DeprecationWarning, socket.htons, k)
-
-+    @unittest.skipUnless(os.path.exists("/etc/services"),
-+                         "getservbyname uses /etc/services, which is not in the chroot")
-     def testGetServBy(self):
-         eq = self.assertEqual
-         # Find one service that exists, then check all the related interfaces.
-@@ -1358,6 +1362,8 @@ class GeneralModuleTests(unittest.TestCase):
-             raise
-         self.assertRaises(TypeError, s.ioctl, socket.SIO_LOOPBACK_FAST_PATH, None)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     def testGetaddrinfo(self):
-         try:
-             socket.getaddrinfo('localhost', 80)
-@@ -1440,6 +1446,8 @@ class GeneralModuleTests(unittest.TestCase):
-         # only IP addresses are allowed
-         self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
-
-+    @unittest.skipUnless(os.path.exists("/etc/gai.conf"),
-+                         "getaddrinfo() will fail")
-     @unittest.skipUnless(support.is_resource_enabled('network'),
-                          'network is not enabled')
-     def test_idna(self):
-diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
---- a/Lib/test/test_spwd.py
-+++ b/Lib/test/test_spwd.py
-@@ -5,8 +5,7 @@ from test import support
- spwd = support.import_module('spwd')
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
--                     'root privileges required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdRoot(unittest.TestCase):
-
-     def test_getspall(self):
-@@ -56,8 +55,7 @@ class TestSpwdRoot(unittest.TestCase):
-             self.assertRaises(TypeError, spwd.getspnam, bytes_name)
-
-
--@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() != 0,
--                     'non-root user required')
-+@unittest.skipUnless(os.path.exists("/etc/shadow"), 'spwd tests require /etc/shadow')
- class TestSpwdNonRoot(unittest.TestCase):
-
-     def test_getspnam_exception(self):
-diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
---- a/Lib/test/test_tarfile.py
-+++ b/Lib/test/test_tarfile.py
-@@ -2509,9 +2509,12 @@ def root_is_uid_gid_0():
-         import pwd, grp
-     except ImportError:
-         return False
--    if pwd.getpwuid(0)[0] != 'root':
--        return False
--    if grp.getgrgid(0)[0] != 'root':
-+    try:
-+        if pwd.getpwuid(0)[0] != 'root':
-+            return False
-+        if grp.getgrgid(0)[0] != 'root':
-+            return False
-+    except KeyError:
-         return False
-     return True
-
-diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
---- a/Lib/test/test_threading.py
-+++ b/Lib/test/test_threading.py
-@@ -1249,6 +1249,7 @@ class MiscTestCase(unittest.TestCase):
-
-
- class InterruptMainTests(unittest.TestCase):
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_subthread(self):
-         # Calling start_new_thread with a function that executes interrupt_main
-         # should raise KeyboardInterrupt upon completion.
-@@ -1260,6 +1261,8 @@ class InterruptMainTests(unittest.TestCase):
-             t.join()
-         t.join()
-
-+
-+    @unittest.skipIf(True, 'Keyboard interrupts do not work in the Guix build container.')
-     def test_interrupt_main_mainthread(self):
-         # Make sure that if interrupt_main is called in main thread that
-         # KeyboardInterrupt is raised instantly.
-diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
---- a/Tools/scripts/run_tests.py
-+++ b/Tools/scripts/run_tests.py
-@@ -39,7 +39,7 @@ def main(regrtest_args):
-     if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
-         args.extend(['-j', '0'])  # Use all CPU cores
-     if not any(is_resource_use_flag(arg) for arg in regrtest_args):
--        args.extend(['-u', 'all,-largefile,-audio,-gui'])
-+        args.extend(['-u', 'all,-largefile,-audio,-gui,-network'])
-     args.extend(regrtest_args)
-     print(' '.join(args))
-     if sys.platform == 'win32':
-diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
-index 1474624..887f8ee 100644
---- a/Lib/test/_test_multiprocessing.py
-+++ b/Lib/test/_test_multiprocessing.py
-@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
-         sms.close()
-
-     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
-         # bpo-36368: protect SharedMemoryManager server process from
-         # KeyboardInterrupt signals.
-diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
-index d41e94b..a1c15e7 100644
---- a/Lib/test/test_signal.py
-+++ b/Lib/test/test_signal.py
-@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
-         self.assertLess(len(s), signal.NSIG)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers exit via SIGINT."""
-         process = subprocess.run(
-@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
-             signal.signal(7, handler)
-
-     @unittest.skipUnless(sys.executable, "sys.executable required.")
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_keyboard_interrupt_exit_code(self):
-         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
-         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
-@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):
-
- class RaiseSignalTest(unittest.TestCase):
-
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_sigint(self):
-         with self.assertRaises(KeyboardInterrupt):
-             signal.raise_signal(signal.SIGINT)
-@@ -1279,6 +1279,7 @@ class PidfdSignalTest(unittest.TestCase):
-         hasattr(signal, "pidfd_send_signal"),
-         "pidfd support not built in",
-     )
-+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
-     def test_pidfd_send_signal(self):
-         with self.assertRaises(OSError) as cm:
-             signal.pidfd_send_signal(0, signal.SIGINT)
-diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
-index 92ac184..49eec2c 100644
---- a/Lib/ctypes/test/test_find.py
-+++ b/Lib/ctypes/test/test_find.py
-@@ -116,6 +116,7 @@ class FindLibraryLinux(unittest.TestCase):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
-             self.assertNotEqual(find_library('c'), None)
-
-+    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
-     def test_find_library_with_ld(self):
-         with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
-              unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
diff --git a/gnu/packages/patches/python-babel-fix-parse-future-test.patch b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
new file mode 100644
index 0000000000..8a90166ec5
--- /dev/null
+++ b/gnu/packages/patches/python-babel-fix-parse-future-test.patch
@@ -0,0 +1,68 @@
+From 7bdaa28a55e8d8228d5434effa4b1473ab7b3669 Mon Sep 17 00:00:00 2001
+From: Felix Schwarz <felix.schwarz@oss.schwarz.eu>
+Date: Tue, 5 May 2020 08:05:56 +0000
+Subject: [PATCH] fix tests when using Python 3.9a6
+
+In Python 3.9a6 integer values for future flags were changed to prevent
+collision with compiler flags. We need to retrieve these at runtime so
+the test suite works with Python <= 3.8 as well as Python 3.9.
+---
+ tests/test_util.py | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/tests/test_util.py b/tests/test_util.py
+index a6a4450c..b9343aaa 100644
+--- a/tests/test_util.py
++++ b/tests/test_util.py
+@@ -11,6 +11,7 @@
+ # individuals. For the exact contribution history, see the revision
+ # history and logs, available at http://babel.edgewall.org/log/.
+ 
++import __future__
+ import unittest
+ 
+ import pytest
+@@ -20,6 +21,12 @@
+ from babel.util import parse_future_flags
+ 
+ 
++class _FF:
++    division         = __future__.division.compiler_flag
++    print_function   = __future__.print_function.compiler_flag
++    with_statement   = __future__.with_statement.compiler_flag
++    unicode_literals = __future__.unicode_literals.compiler_flag
++
+ def test_distinct():
+     assert list(util.distinct([1, 2, 1, 3, 4, 4])) == [1, 2, 3, 4]
+     assert list(util.distinct('foobar')) == ['f', 'o', 'b', 'a', 'r']
+@@ -70,25 +77,25 @@ def test_parse_encoding_non_ascii():
+ from __future__ import print_function,
+     division, with_statement,
+     unicode_literals
+-''', 0x10000 | 0x2000 | 0x8000 | 0x20000),
++''', _FF.print_function | _FF.division | _FF.with_statement | _FF.unicode_literals),
+     ('''
+ from __future__ import print_function, division
+ print('hello')
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import print_function, division, unknown,,,,,
+ print 'hello'
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import (
+     print_function,
+     division)
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+     ('''
+ from __future__ import \\
+     print_function, \\
+     division
+-''', 0x10000 | 0x2000),
++''', _FF.print_function | _FF.division),
+ ])
+ def test_parse_future(source, result):
+     fp = BytesIO(source.encode('latin-1'))
diff --git a/gnu/packages/patches/python-libxml2-python39-compat.patch b/gnu/packages/patches/python-libxml2-python39-compat.patch
new file mode 100644
index 0000000000..a707ea3434
--- /dev/null
+++ b/gnu/packages/patches/python-libxml2-python39-compat.patch
@@ -0,0 +1,94 @@
+https://gitlab.gnome.org/GNOME/libxml2/-/commit/e4fb36841800038c289997432ca547c9bfef9db1.patch
+
+From e4fb36841800038c289997432ca547c9bfef9db1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
+Date: Fri, 28 Feb 2020 12:48:14 +0100
+Subject: [PATCH] Parenthesize Py<type>_Check() in ifs
+
+In C, if expressions should be parenthesized.
+PyLong_Check, PyUnicode_Check etc. happened to expand to a parenthesized
+expression before, but that's not API to rely on.
+
+Since Python 3.9.0a4 it needs to be parenthesized explicitly.
+
+Fixes https://gitlab.gnome.org/GNOME/libxml2/issues/149
+---
+ python/libxml.c |  4 ++--
+ python/types.c  | 12 ++++++------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/python/libxml.c b/python/libxml.c
+index bc676c4e..81e709f3 100644
+--- a/python/libxml.c
++++ b/python/libxml.c
+@@ -294,7 +294,7 @@ xmlPythonFileReadRaw (void * context, char * buffer, int len) {
+ 	lenread = PyBytes_Size(ret);
+ 	data = PyBytes_AsString(ret);
+ #ifdef PyUnicode_Check
+-    } else if PyUnicode_Check (ret) {
++    } else if (PyUnicode_Check (ret)) {
+ #if PY_VERSION_HEX >= 0x03030000
+         Py_ssize_t size;
+ 	const char *tmp;
+@@ -359,7 +359,7 @@ xmlPythonFileRead (void * context, char * buffer, int len) {
+ 	lenread = PyBytes_Size(ret);
+ 	data = PyBytes_AsString(ret);
+ #ifdef PyUnicode_Check
+-    } else if PyUnicode_Check (ret) {
++    } else if (PyUnicode_Check (ret)) {
+ #if PY_VERSION_HEX >= 0x03030000
+         Py_ssize_t size;
+ 	const char *tmp;
+diff --git a/python/types.c b/python/types.c
+index c2bafeb1..ed284ec7 100644
+--- a/python/types.c
++++ b/python/types.c
+@@ -602,16 +602,16 @@ libxml_xmlXPathObjectPtrConvert(PyObject *obj)
+     if (obj == NULL) {
+         return (NULL);
+     }
+-    if PyFloat_Check (obj) {
++    if (PyFloat_Check (obj)) {
+         ret = xmlXPathNewFloat((double) PyFloat_AS_DOUBLE(obj));
+-    } else if PyLong_Check(obj) {
++    } else if (PyLong_Check(obj)) {
+ #ifdef PyLong_AS_LONG
+         ret = xmlXPathNewFloat((double) PyLong_AS_LONG(obj));
+ #else
+         ret = xmlXPathNewFloat((double) PyInt_AS_LONG(obj));
+ #endif
+ #ifdef PyBool_Check
+-    } else if PyBool_Check (obj) {
++    } else if (PyBool_Check (obj)) {
+ 
+         if (obj == Py_True) {
+           ret = xmlXPathNewBoolean(1);
+@@ -620,14 +620,14 @@ libxml_xmlXPathObjectPtrConvert(PyObject *obj)
+           ret = xmlXPathNewBoolean(0);
+         }
+ #endif
+-    } else if PyBytes_Check (obj) {
++    } else if (PyBytes_Check (obj)) {
+         xmlChar *str;
+ 
+         str = xmlStrndup((const xmlChar *) PyBytes_AS_STRING(obj),
+                          PyBytes_GET_SIZE(obj));
+         ret = xmlXPathWrapString(str);
+ #ifdef PyUnicode_Check
+-    } else if PyUnicode_Check (obj) {
++    } else if (PyUnicode_Check (obj)) {
+ #if PY_VERSION_HEX >= 0x03030000
+         xmlChar *str;
+ 	const char *tmp;
+@@ -650,7 +650,7 @@ libxml_xmlXPathObjectPtrConvert(PyObject *obj)
+ 	ret = xmlXPathWrapString(str);
+ #endif
+ #endif
+-    } else if PyList_Check (obj) {
++    } else if (PyList_Check (obj)) {
+         int i;
+         PyObject *node;
+         xmlNodePtr cur;
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/python-typing-inspect-fix.patch b/gnu/packages/patches/python-typing-inspect-fix.patch
new file mode 100644
index 0000000000..e6e28981b7
--- /dev/null
+++ b/gnu/packages/patches/python-typing-inspect-fix.patch
@@ -0,0 +1,38 @@
+From 16919e21936179e53df2f376c8b59b5fc44bd2dd Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Fri, 15 Jan 2021 09:22:52 -0500
+Subject: [PATCH] Fix for Python 3.9+.
+
+Fixes <https://github.com/ilevkivskyi/typing_inspect/issues/60>.
+
+Based on an idea in
+https://github.com/ilevkivskyi/typing_inspect/issues/60#issuecomment-683187584.
+---
+ typing_inspect.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/typing_inspect.py b/typing_inspect.py
+index 1ca68ed..31d05ee 100644
+--- a/typing_inspect.py
++++ b/typing_inspect.py
+@@ -21,7 +21,7 @@ LEGACY_TYPING = False
+ 
+ if NEW_TYPING:
+     from typing import (
+-        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, ForwardRef
++        Generic, Callable, Union, TypeVar, ClassVar, Tuple, _GenericAlias, _SpecialGenericAlias, ForwardRef
+     )
+     from typing_extensions import Literal
+ else:
+@@ -75,7 +75,7 @@ def is_generic_type(tp):
+     """
+     if NEW_TYPING:
+         return (isinstance(tp, type) and issubclass(tp, Generic) or
+-                isinstance(tp, _GenericAlias) and
++                (isinstance(tp, _GenericAlias) or isinstance(tp, _SpecialGenericAlias)) and
+                 tp.__origin__ not in (Union, tuple, ClassVar, collections.abc.Callable))
+     return (isinstance(tp, GenericMeta) and not
+             isinstance(tp, (CallableMeta, TupleMeta)))
+-- 
+2.29.2
+
diff --git a/gnu/packages/patches/rust-1.19-mrustc.patch b/gnu/packages/patches/rust-1.19-mrustc.patch
deleted file mode 100644
index 261162172e..0000000000
--- a/gnu/packages/patches/rust-1.19-mrustc.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz
-
---- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs
-+++ rustc-1.19.0-src/src/libcore/intrinsics.rs
-@@ -678,5 +678,9 @@
-     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
- 
-+    /// Obtain the length of a slice pointer
-+    #[cfg(rust_compiler="mrustc")]
-+    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
-+
-     /// Gets a static string slice containing the name of a type.
-     pub fn type_name<T: ?Sized>() -> &'static str;
-
---- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs
-+++ rustc-1.19.0-src/src/libcore/slice/mod.rs
-@@ -413,6 +413,8 @@
-     #[inline]
-     fn len(&self) -> usize {
--        unsafe {
--            mem::transmute::<&[T], Repr<T>>(self).len
--        }
-+        #[cfg(not(rust_compiler="mrustc"))]
-+        let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len };
-+        #[cfg(rust_compiler="mrustc")]
-+        let rv = unsafe { ::intrinsics::mrustc_slice_len(self) };
-+        rv
-     }
diff --git a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch b/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
deleted file mode 100644
index a2bad55117..0000000000
--- a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-GDB responds with some overly detailed lines - which makes the tests fail.
-Patch rust to accept those instead.
-See <https://github.com/rust-lang/rust/issues/54178>.
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:25:56.322513658 +0200
-@@ -19,36 +19,36 @@
- 
- // gdb-command:print eight_bytes1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}}
--// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum::Variant1(100)
-+// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant1(100)
- 
- // gdb-command:print four_bytes1
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}}
--// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum::Variant1(101)
-+// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant1(101)
- 
- // gdb-command:print two_bytes1
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}}
--// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum::Variant1(102)
-+// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant1(102)
- 
- // gdb-command:print one_byte1
- // gdbg-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}}
--// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum::Variant1(65)
-+// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant1(65)
- 
- 
- // gdb-command:print eight_bytes2
- // gdbg-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}}
--// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum::Variant2(100)
-+// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant2(100)
- 
- // gdb-command:print four_bytes2
- // gdbg-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}}
--// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum::Variant2(101)
-+// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant2(101)
- 
- // gdb-command:print two_bytes2
- // gdbg-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}}
--// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum::Variant2(102)
-+// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant2(102)
- 
- // gdb-command:print one_byte2
- // gdbg-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}}
--// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum::Variant2(65)
-+// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant2(65)
- 
- // gdb-command:continue
- 
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:27:43.353108111 +0200
-@@ -19,15 +19,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, a = 0, b = 31868, c = 31868, d = 31868, e = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_struct_style_enum::Regular::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
-+// gdbr-check:$1 = generic_struct_style_enum::Regular<u16, u32, i64>::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, a = 0, b = 286331153, c = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_struct_style_enum::Regular::Case2{a: 0, b: 286331153, c: 286331153}
-+// gdbr-check:$2 = generic_struct_style_enum::Regular<i16, u32, i64>::Case2{a: 0, b: 286331153, c: 286331153}
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, a = 0, b = 6438275382588823897}}
--// gdbr-check:$3 = generic_struct_style_enum::Regular::Case3{a: 0, b: 6438275382588823897}
-+// gdbr-check:$3 = generic_struct_style_enum::Regular<u16, i32, u64>::Case3{a: 0, b: 6438275382588823897}
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{a = -1}}
-diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs
---- orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:28:26.328546298 +0200
-@@ -21,15 +21,15 @@
- 
- // gdb-command:print case1
- // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, __0 = 0, __1 = 31868, __2 = 31868, __3 = 31868, __4 = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
--// gdbr-check:$1 = generic_tuple_style_enum::Regular::Case1(0, 31868, 31868, 31868, 31868)
-+// gdbr-check:$1 = generic_tuple_style_enum::Regular<u16, u32, u64>::Case1(0, 31868, 31868, 31868, 31868)
- 
- // gdb-command:print case2
- // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, __0 = 0, __1 = 286331153, __2 = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
--// gdbr-check:$2 = generic_tuple_style_enum::Regular::Case2(0, 286331153, 286331153)
-+// gdbr-check:$2 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case2(0, 286331153, 286331153)
- 
- // gdb-command:print case3
- // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, __0 = 0, __1 = 6438275382588823897}}
--// gdbr-check:$3 = generic_tuple_style_enum::Regular::Case3(0, 6438275382588823897)
-+// gdbr-check:$3 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case3(0, 6438275382588823897)
- 
- // gdb-command:print univariant
- // gdbg-check:$4 = {{__0 = -1}}
---- orig/rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-09-13 10:24:33.783565071 +0200
-+++ rustc-1.25.0-src/src/test/debuginfo/nil-enum.rs	2018-10-26 18:19:20.404564587 +0200
-@@ -17,11 +17,11 @@
- 
- // gdb-command:print first
- // gdbg-check:$1 = {<No data fields>}
--// gdbr-check:$1 = <error reading variable>
-+// gdbr-check:$1 = nil_enum::ANilEnum
- 
- // gdb-command:print second
- // gdbg-check:$2 = {<No data fields>}
--// gdbr-check:$2 = <error reading variable>
-+// gdbr-check:$2 = nil_enum::AnotherNilEnum
- 
- #![allow(unused_variables)]
- #![feature(omit_gdb_pretty_printer_section)]
diff --git a/gnu/packages/patches/rust-1.30-gdb-llvm.patch b/gnu/packages/patches/rust-1.30-gdb-llvm.patch
deleted file mode 100644
index e8f0acc8b4..0000000000
--- a/gnu/packages/patches/rust-1.30-gdb-llvm.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-Tweak some gdb tests which were broken during LLVM upgrades.
-This has been subsequently fixed upstream in later rustc versions,
-but still needed to bootstrap some earlier versions of the compiler.
-
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 12:49:34.055483896 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/borrowed-c-style-enum.rs	2019-02-04 13:01:10.915950356 -0800
-@@ -18,15 +18,15 @@
- 
- // gdb-command:print *the_a_ref
- // gdbg-check:$1 = TheA
--// gdbr-check:$1 = borrowed_c_style_enum::ABC::TheA
-+// gdbr-check:$1 = borrowed_c_style_enum::TheA
- 
- // gdb-command:print *the_b_ref
- // gdbg-check:$2 = TheB
--// gdbr-check:$2 = borrowed_c_style_enum::ABC::TheB
-+// gdbr-check:$2 = borrowed_c_style_enum::TheB
- 
- // gdb-command:print *the_c_ref
- // gdbg-check:$3 = TheC
--// gdbr-check:$3 = borrowed_c_style_enum::ABC::TheC
-+// gdbr-check:$3 = borrowed_c_style_enum::TheC
- 
- 
- // === LLDB TESTS ==================================================================================
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 12:49:34.051483727 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/c-style-enum-in-composite.rs	2019-02-04 13:02:00.981997525 -0800
-@@ -19,31 +19,31 @@
- 
- // gdb-command:print tuple_interior_padding
- // gdbg-check:$1 = {__0 = 0, __1 = OneHundred}
--// gdbr-check:$1 = (0, c_style_enum_in_composite::AnEnum::OneHundred)
-+// gdbr-check:$1 = (0, c_style_enum_in_composite::OneHundred)
- 
- // gdb-command:print tuple_padding_at_end
- // gdbg-check:$2 = {__0 = {__0 = 1, __1 = OneThousand}, __1 = 2}
--// gdbr-check:$2 = ((1, c_style_enum_in_composite::AnEnum::OneThousand), 2)
-+// gdbr-check:$2 = ((1, c_style_enum_in_composite::OneThousand), 2)
- 
- // gdb-command:print tuple_different_enums
- // gdbg-check:$3 = {__0 = OneThousand, __1 = MountainView, __2 = OneMillion, __3 = Vienna}
--// gdbr-check:$3 = (c_style_enum_in_composite::AnEnum::OneThousand, c_style_enum_in_composite::AnotherEnum::MountainView, c_style_enum_in_composite::AnEnum::OneMillion, c_style_enum_in_composite::AnotherEnum::Vienna)
-+// gdbr-check:$3 = (c_style_enum_in_composite::OneThousand, c_style_enum_in_composite::MountainView, c_style_enum_in_composite::OneMillion, c_style_enum_in_composite::Vienna)
- 
- // gdb-command:print padded_struct
- // gdbg-check:$4 = {a = 3, b = OneMillion, c = 4, d = Toronto, e = 5}
--// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::AnEnum::OneMillion, c: 4, d: c_style_enum_in_composite::AnotherEnum::Toronto, e: 5}
-+// gdbr-check:$4 = c_style_enum_in_composite::PaddedStruct {a: 3, b: c_style_enum_in_composite::OneMillion, c: 4, d: c_style_enum_in_composite::Toronto, e: 5}
- 
- // gdb-command:print packed_struct
- // gdbg-check:$5 = {a = 6, b = OneHundred, c = 7, d = Vienna, e = 8}
--// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::AnEnum::OneHundred, c: 7, d: c_style_enum_in_composite::AnotherEnum::Vienna, e: 8}
-+// gdbr-check:$5 = c_style_enum_in_composite::PackedStruct {a: 6, b: c_style_enum_in_composite::OneHundred, c: 7, d: c_style_enum_in_composite::Vienna, e: 8}
- 
- // gdb-command:print non_padded_struct
- // gdbg-check:$6 = {a = OneMillion, b = MountainView, c = OneThousand, d = Toronto}
--// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::AnEnum::OneMillion, b: c_style_enum_in_composite::AnotherEnum::MountainView, c: c_style_enum_in_composite::AnEnum::OneThousand, d: c_style_enum_in_composite::AnotherEnum::Toronto}
-+// gdbr-check:$6 = c_style_enum_in_composite::NonPaddedStruct {a: c_style_enum_in_composite::OneMillion, b: c_style_enum_in_composite::MountainView, c: c_style_enum_in_composite::OneThousand, d: c_style_enum_in_composite::Toronto}
- 
- // gdb-command:print struct_with_drop
- // gdbg-check:$7 = {__0 = {a = OneHundred, b = Vienna}, __1 = 9}
--// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::AnEnum::OneHundred, b: c_style_enum_in_composite::AnotherEnum::Vienna}, 9)
-+// gdbr-check:$7 = (c_style_enum_in_composite::StructWithDrop {a: c_style_enum_in_composite::OneHundred, b: c_style_enum_in_composite::Vienna}, 9)
- 
- // === LLDB TESTS ==================================================================================
- 
-diff -r -u rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs
---- rustc-1.30.1-src-orig/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 12:49:34.043483393 -0800
-+++ rustc-1.30.1-src/src/test/debuginfo/gdb-pretty-struct-and-enums-pre-gdb-7-7.rs	2019-02-04 13:02:17.954691634 -0800
-@@ -27,15 +27,15 @@
- 
- // gdb-command: print c_style_enum1
- // gdbg-check:$3 = CStyleEnumVar1
--// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar1
-+// gdbr-check:$3 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar1
- 
- // gdb-command: print c_style_enum2
- // gdbg-check:$4 = CStyleEnumVar2
--// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar2
-+// gdbr-check:$4 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar2
- 
- // gdb-command: print c_style_enum3
- // gdbg-check:$5 = CStyleEnumVar3
--// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnum::CStyleEnumVar3
-+// gdbr-check:$5 = gdb_pretty_struct_and_enums_pre_gdb_7_7::CStyleEnumVar3
- 
- #![allow(dead_code, unused_variables)]
diff --git a/gnu/packages/patches/rust-1.45-linker-locale.patch b/gnu/packages/patches/rust-1.45-linker-locale.patch
deleted file mode 100644
index 40220e8e77..0000000000
--- a/gnu/packages/patches/rust-1.45-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Patch will be included upstream in 1.47: https://github.com/rust-lang/rust/pull/74416
-diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
-index e64aafa599f..12575ac4358 100644
---- a/src/librustc_codegen_ssa/back/linker.rs
-+++ b/src/librustc_codegen_ssa/back/linker.rs
-@@ -28,7 +28,7 @@ use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor};
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-1.48-linker-locale.patch b/gnu/packages/patches/rust-1.48-linker-locale.patch
deleted file mode 100644
index d06dcbe682..0000000000
--- a/gnu/packages/patches/rust-1.48-linker-locale.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-https://github.com/rust-lang/rust/pull/74416
-diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs
-index 3df956c465e..f45fee45be4 100644
---- a/compiler/rustc_codegen_ssa/src/back/linker.rs
-+++ b/compiler/rustc_codegen_ssa/src/back/linker.rs
-@@ -28,7 +28,7 @@
- pub fn disable_localization(linker: &mut Command) {
-     // No harm in setting both env vars simultaneously.
-     // Unix-style linkers.
--    linker.env("LC_ALL", "C");
-+    linker.env("LC_ALL", "en_US.UTF-8");
-     // MSVC's `link.exe`.
-     linker.env("VSLANG", "1033");
- }
diff --git a/gnu/packages/patches/rust-bootstrap-stage0-test.patch b/gnu/packages/patches/rust-bootstrap-stage0-test.patch
deleted file mode 100644
index e8484903e5..0000000000
--- a/gnu/packages/patches/rust-bootstrap-stage0-test.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-Bootstrap tests failed with local stage0 cargo and rustc
-Backported changes from https://github.com/rust-lang/rust/pull/51977
-
-From 0834d9d771e912f51deca6c25699e44734624546 Mon Sep 17 00:00:00 2001
-From: Nikolai Merinov <nikolai.merinov@member.fsf.org>
-Date: Mon, 2 Jul 2018 01:45:35 +0500
-Subject: [PATCH] bootstrap: tests should use rustc from config.toml
-
-Tests should always use "rustc" and "cargo" from config.toml instead
-of assuming that stage0 binaries was downloaded to build directory.
----
- src/bootstrap/bootstrap.py | 2 ++
- src/bootstrap/config.rs    | 6 ++----
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
-index 487440becf..1701f7b83a 100644
---- a/src/bootstrap/bootstrap.py
-+++ b/src/bootstrap/bootstrap.py
-@@ -788,6 +788,8 @@ def bootstrap(help_triggered):
-     env["BOOTSTRAP_PARENT_ID"] = str(os.getpid())
-     env["BOOTSTRAP_PYTHON"] = sys.executable
-     env["BUILD_DIR"] = build.build_dir
-+    env["CARGO"] = build.cargo()
-+    env["RUSTC"] = build.rustc()
-     run(args, env=env, verbose=build.verbose)
- 
- 
-diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
-index 6dd6291be2..d1a0deb583 100644
---- a/src/bootstrap/config.rs
-+++ b/src/bootstrap/config.rs
-@@ -23,7 +23,6 @@ use std::cmp;
- 
- use num_cpus;
- use toml;
--use util::exe;
- use cache::{INTERNER, Interned};
- use flags::Flags;
- pub use flags::Subcommand;
-@@ -362,9 +361,8 @@ impl Config {
-         config.src = Config::path_from_python("SRC");
-         config.out = Config::path_from_python("BUILD_DIR");
- 
--        let stage0_root = config.out.join(&config.build).join("stage0/bin");
--        config.initial_rustc = stage0_root.join(exe("rustc", &config.build));
--        config.initial_cargo = stage0_root.join(exe("cargo", &config.build));
-+        config.initial_rustc = Config::path_from_python("RUSTC");
-+        config.initial_cargo = Config::path_from_python("CARGO");
- 
-         config
-     }
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/tcl-fix-cross-compilation.patch b/gnu/packages/patches/tcl-fix-cross-compilation.patch
deleted file mode 100644
index 00c36b8f27..0000000000
--- a/gnu/packages/patches/tcl-fix-cross-compilation.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From f7fa48c4c75a1e748dc5071e709c0b62ff739eaa Mon Sep 17 00:00:00 2001
-From: "jan.nijtmans" <nijtmans@users.sourceforge.net>
-Date: Mon, 9 Dec 2019 10:02:20 +0000
-Subject: [PATCH] Fix [abd4abedd2]: Failed to build tk 8.6.10 with cross
- compile
-
-Patch taken from upstream to fix cross-compilation. To be removed on next Tcl release.
-
----
- compat/strtol.c  | 2 +-
- compat/strtoul.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/compat/strtol.c b/compat/strtol.c
-index b7f69196ce2..811006a64c3 100644
---- a/compat/strtol.c
-+++ b/compat/strtol.c
-@@ -53,7 +53,7 @@ strtol(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
- 
-diff --git a/compat/strtoul.c b/compat/strtoul.c
-index e37eb05f823..15587f1da1a 100644
---- a/compat/strtoul.c
-+++ b/compat/strtoul.c
-@@ -74,7 +74,7 @@ strtoul(
-      */
- 
-     p = string;
--    while (TclIsSpaceProc(*p)) {
-+    while (isspace(UCHAR(*p))) {
- 	p += 1;
-     }
-     if (*p == '-') {
diff --git a/gnu/packages/patches/tcsh-fix-autotest.patch b/gnu/packages/patches/tcsh-fix-autotest.patch
index 200867cb9b..9f5790641b 100644
--- a/gnu/packages/patches/tcsh-fix-autotest.patch
+++ b/gnu/packages/patches/tcsh-fix-autotest.patch
@@ -63,17 +63,6 @@
  
  AT_DATA([comment2.csh],
  [[echo testing...@%:@\
---- tests/subst.at
-+++ tests/subst.at
-@@ -54,7 +54,7 @@ AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }')
- , [1
- ])
- 
--AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)/foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
-+AT_CHECK([export HOME=$(getent passwd $(id -un) | awk -F: '{ print $(NF - 1) }'); echo "echo ~$(id -un)//foo; echo \"\$HOME/foo\"" | tcsh -f | uniq dnl
- 	  | wc -l | tr -d ' \t'], , [1
- ])
- 
 --- tests/variables.at
 +++ tests/variables.at
 @@ -666,7 +666,8 @@ set listflags=(-xA $cwd/args.sh)
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.83.patch b/gnu/packages/patches/texlive-bin-poppler-0.83.patch
deleted file mode 100644
index 5e57e3efac..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.83.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-Fix build with Poppler 0.83 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.83.patch?h=packages/texlive-bin
-
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc
-@@ -723,7 +723,7 @@
- #endif
-     // initialize
-     if (!isInit) {
--        globalParams = new GlobalParams();
-+        globalParams.reset(new GlobalParams());
-         globalParams->setErrQuiet(false);
-         isInit = true;
-     }
-@@ -1108,6 +1108,5 @@
-             delete_document(p);
-         }
-         // see above for globalParams
--        delete globalParams;
-     }
- }
-diff -ru texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
---- texlive-source-orig/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-+++ texlive-source/texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc
-@@ -79,7 +79,7 @@
-         exit(1);
-     }
-     fileName = new GString(argv[1]);
--    globalParams = new GlobalParams();
-+    globalParams.reset(new GlobalParams());
-     doc = new PDFDoc(fileName);
-     if (!doc->isOk()) {
-         fprintf(stderr, "Invalid PDF file\n");
-@@ -100,7 +100,7 @@
-     if (objnum == 0) {
-         srcStream = catalogDict.dictLookup("SourceObject");
-         static char const_SourceFile[] = "SourceFile";
--        if (!srcStream.isStream(const_SourceFile)) {
-+        if (!srcStream.isDict(const_SourceFile)) {
-             fprintf(stderr, "No SourceObject found\n");
-             exit(1);
-         }
-@@ -202,5 +202,4 @@
-         fprintf(stderr, "Cross-reference table extracted to %s\n", outname);
-     fclose(outfile);
-     delete doc;
--    delete globalParams;
- }
diff --git a/gnu/packages/patches/texlive-bin-poppler-0.86.patch b/gnu/packages/patches/texlive-bin-poppler-0.86.patch
deleted file mode 100644
index b1adca657b..0000000000
--- a/gnu/packages/patches/texlive-bin-poppler-0.86.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Fix build with Poppler 0.86 and later.
-
-Taken from Arch Linux, but adjusted to patch the versioned Poppler
-files, as upstream applies it after copying them in place.
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/texlive-poppler-0.86.patch?h=packages/texlive-bin
-
---- a/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:11:35.102711802 +0000
-+++ b/texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc	2020-03-03 21:13:13.057420111 +0000
-@@ -757,7 +757,7 @@
-     if (page_name) {
-         // get page by name
-         GString name(page_name);
--        LinkDest *link = pdf_doc->doc->findDest(&name);
-+        LinkDest *link = pdf_doc->doc->findDest(&name).get();
-         if (link == 0 || !link->isOk())
-             pdftex_fail("PDF inclusion: invalid destination <%s>", page_name);
-         Ref ref = link->getPageRef();
diff --git a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch b/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
deleted file mode 100644
index 48b5eb18eb..0000000000
--- a/gnu/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Description: fix race condition allowing attackers to access destination file
- This commit addresses https://github.com/facebook/zstd/issues/2491.
- .
- Note that a downside of this solution is that it is global: `umask()` affects
- all file creation calls in the process. I believe this is safe since
- `fileio.c` functions should only ever be used in the zstd binary, and these
- are (almost) the only files ever created by zstd, and AIUI they're only
- created in a single thread. So we can get away with messing with global state.
- .
- Note that this doesn't change the permissions of files created by `dibio.c`.
- I'm not sure what those should be...
-Author: W. Felix Handte <w@felixhandte.com>
-Origin: upstream
-Bug: https://github.com/facebook/zstd/issues/2491
-Bug-Debian: https://github.com/facebook/zstd/issues/2491
-Applied-Upstream: commit:a774c5797399040af62db21d8a9b9769e005430e
-Reviewed-by: Étienne Mollier <etienne.mollier@mailoo.org>
-Last-Update: 2021-03-03
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/programs/fileio.c
-+++ b/programs/fileio.c
-@@ -606,11 +606,11 @@ FIO_openDstFile(FIO_prefs_t* const prefs
-             FIO_remove(dstFileName);
-     }   }
- 
--    {   FILE* const f = fopen( dstFileName, "wb" );
-+    {   const int old_umask = UTIL_umask(0177); /* u-x,go-rwx */
-+        FILE* const f = fopen( dstFileName, "wb" );
-+        UTIL_umask(old_umask);
-         if (f == NULL) {
-             DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
--        } else if(srcFileName != NULL && strcmp (srcFileName, stdinmark)) {
--            chmod(dstFileName, 00600);
-         }
-         return f;
-     }
---- a/programs/util.c
-+++ b/programs/util.c
-@@ -54,6 +54,15 @@ int UTIL_getFileStat(const char* infilen
-     return 1;
- }
- 
-+int UTIL_umask(int mode) {
-+#if PLATFORM_POSIX_VERSION > 0
-+    return umask(mode);
-+#else
-+    /* do nothing, fake return value */
-+    return mode;
-+#endif
-+}
-+
- int UTIL_setFileStat(const char *filename, stat_t *statbuf)
- {
-     int res = 0;
---- a/programs/util.h
-+++ b/programs/util.h
-@@ -136,6 +136,10 @@ int UTIL_isSameFile(const char* file1, c
- int UTIL_compareStr(const void *p1, const void *p2);
- int UTIL_isCompressedFile(const char* infilename, const char *extensionList[]);
- const char* UTIL_getFileExtension(const char* infilename);
-+/**
-+ * Wraps umask(). Does nothing when the platform doesn't have that concept.
-+ */
-+int UTIL_umask(int mode);
- 
- #ifndef _MSC_VER
- U32 UTIL_isFIFO(const char* infilename);
diff --git a/gnu/packages/patches/zziplib-CVE-2018-16548.patch b/gnu/packages/patches/zziplib-CVE-2018-16548.patch
deleted file mode 100644
index a17c6a9768..0000000000
--- a/gnu/packages/patches/zziplib-CVE-2018-16548.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-The following 3 patches applied to 0.13.69 in this order, combined:
-https://github.com/gdraheim/zziplib/commit/9411bde3e4a70a81ff3ffd256b71927b2d90dcbb.patch
-https://github.com/gdraheim/zziplib/commit/d2e5d5c53212e54a97ad64b793a4389193fec687.patch
-https://github.com/gdraheim/zziplib/commit/0e1dadb05c1473b9df2d7b8f298dab801778ef99.patch
-
-diff --git a/test/test.zip b/test/test.zip
-index 2c992ea..952d475 100644
-Binary files a/test/test.zip and b/test/test.zip differ
-diff --git a/zzip/zip.c b/zzip/zip.c
-index 14e2e06..f97a40a 100644
---- a/zzip/zip.c
-+++ b/zzip/zip.c
-@@ -472,9 +472,15 @@ __zzip_parse_root_directory(int fd,
-         } else
-         {
-             if (io->fd.seeks(fd, zz_rootseek + zz_offset, SEEK_SET) < 0)
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_SEEK;
-+	    }
-             if (io->fd.read(fd, &dirent, sizeof(dirent)) < __sizeof(dirent))
-+	    {
-+	    	free(hdr0);
-                 return ZZIP_DIR_READ;
-+	    }
-             d = &dirent;
-         }
- 
-@@ -574,11 +580,18 @@ __zzip_parse_root_directory(int fd,
- 
-         if (hdr_return)
-             *hdr_return = hdr0;
-+	else
-+	{
-+	    /* If it is not assigned to *hdr_return, it will never be free()'d */
-+	    free(hdr0);
-+	}
-     }                           /* else zero (sane) entries */
-+    else
-+        free(hdr0);
- #  ifndef ZZIP_ALLOW_MODULO_ENTRIES
--    return (entries != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return (entries != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  else
--    return ((entries & (unsigned)0xFFFF) != zz_entries ? ZZIP_CORRUPTED : 0);
-+    return ((entries & (unsigned)0xFFFF) != zz_entries) ? ZZIP_CORRUPTED : 0;
- #  endif
- }
- 
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index f190fec1a2..1a64ef3a94 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -348,7 +348,7 @@ you to figure out what is going on in that merge you keep avoiding.")
                  ;; as the python modules in this package in the wsgi.py file,
                  ;; as this will ensure they are available at runtime.
                  (define pythonpath
-                   (string-append (getenv "PYTHONPATH")
+                   (string-append (getenv "GUIX_PYTHONPATH")
                                   ":"
                                   (site-packages inputs outputs)))
                  (display
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 4d1b8cddfe..75dbfe997d 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -222,14 +222,14 @@ please install the @code{flyer-composer-gui} package.")))
 (define-public poppler
   (package
    (name "poppler")
-   (version "0.86.1")
+   (version "21.06.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://poppler.freedesktop.org/poppler-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0v3z4mk1rr8i0c4cfkab7pnxdbil30j4cm4w6cqlq6cfghkhlqxg"))))
+              "1d2xb57z0rpcs23mz7f53x5sz3hjql8qgvqn74d0hh6y09d9xc46"))))
    (build-system cmake-build-system)
    ;; FIXME:
    ;;  use libcurl:        no
@@ -255,12 +255,13 @@ please install the @code{flyer-composer-gui} package.")))
         ("glib" ,glib "bin")                      ; glib-mkenums, etc.
         ("gobject-introspection" ,gobject-introspection)))
    (arguments
-    `(#:tests? #f ; no test data provided with the tarball
+    `(#:tests? #f                      ;no test data provided with the tarball
       #:configure-flags
       (let* ((out (assoc-ref %outputs "out"))
              (lib (string-append out "/lib")))
         (list "-DENABLE_UNSTABLE_API_ABI_HEADERS=ON" ;to install header files
               "-DENABLE_ZLIB=ON"
+              "-DENABLE_BOOST=OFF"      ;disable Boost to save size
               (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
               (string-append "-DCMAKE_INSTALL_RPATH=" lib)))))
    (synopsis "PDF rendering library")
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 87f233a3aa..0bcefb165f 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -971,7 +971,7 @@ bit more fine-grained control over test suites.")
 (define-public perl-test-needs
   (package
     (name "perl-test-needs")
-    (version "0.002005")
+    (version "0.002006")
     (source
      (origin
        (method url-fetch)
@@ -981,7 +981,7 @@ bit more fine-grained control over test suites.")
              ".tar.gz"))
        (sha256
         (base32
-         "16gkgpmr9hvkz382iaqd3500269lk2d44fqaw3dsrvc66nc36kss"))))
+         "1rgh6gs5kbbjh27zxxxi1g6zf69k7i9v65h49prhjpkcr7qgzybp"))))
     (build-system perl-build-system)
     (home-page
      "https://metacpan.org/release/Test-Needs")
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index db10c44a20..af0c8c4801 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Raoul J.P. Bonnal <ilpuccio.febo@gmail.com>
-;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017, 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
@@ -91,18 +91,17 @@
   ;; Yeah, Perl...  It is required early in the bootstrap process by Linux.
   (package
     (name "perl")
-    (version "5.30.2")
+    (version "5.32.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/src/5.0/perl-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "128nfdxcvxfn5kq55qcfrx2851ys8hv794dcdxbyny8rm7w7vnv6"))
+               "0b7brakq9xs4vavhg391as50nbhzryc7fy5i65r81bnq3j897dh3"))
              (patches (search-patches
                        "perl-no-sys-dirs.patch"
                        "perl-autosplit-default-time.patch"
-                       "perl-deterministic-ordering.patch"
                        "perl-reproducible-build-date.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -5126,6 +5125,25 @@ vaguely inspired by John Ousterhout's Tk_ParseArgv.")
     (home-page "https://metacpan.org/release/Getopt-Tabular")
     (license (package-license perl))))
 
+(define-public perl-gettext
+  (package
+    (name "perl-gettext")
+    (version "1.07")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/P/PV/PVANDRY"
+                                  "/gettext-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05cwqjxxary11di03gg3fm6j9lbvg1dr2wpr311c1rwp8salg7ch"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/gettext")
+    (synopsis "Perl bindings for POSIX i18n gettext functions")
+    (description
+     "Locale::gettext provides an object oriented interface to the
+internationalization functions provided by the C library.")
+    (license license:perl-license)))
+
 (define-public perl-graph
   (package
     (name "perl-graph")
@@ -8645,13 +8663,39 @@ available.")
          "01xifj83dv492lxixijmg6va02rf3ydlxly0a9slmx22r6qa1drh"))))
     (build-system perl-build-system)
     (propagated-inputs
-     `(("perl-devel-symdump" ,perl-devel-symdump)))
+     `(("perl-devel-symdump" ,perl-devel-symdump)
+       ("perl-pod-parser" ,perl-pod-parser)))
     (home-page "https://metacpan.org/release/Pod-Coverage")
     (synopsis "Check for comprehensive documentation of a module")
     (description "This module provides a mechanism for determining if the pod
 for a given module is comprehensive.")
     (license (package-license perl))))
 
+(define-public perl-pod-parser
+  (package
+    (name "perl-pod-parser")
+    (version "1.63")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/M/MA/MAREKR/Pod-Parser-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1k8clxxdjag56zm6cv38c3q81gj7xphfhh98l21jynwp55hvbq6v"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Pod-Parser")
+    (synopsis "Modules for parsing/translating POD format documents")
+    (description
+     "@code{Pod::Parser} is a base class for creating POD filters and
+translators.  It handles most of the effort involved with parsing the POD
+sections from an input stream, leaving subclasses free to be concerned only
+with performing the actual translation of text.
+
+@emph{NOTE}: This module is considered legacy.  New projects should prefer
+@code{Pod::Simple} instead.")
+    (license license:perl-license)))
+
 (define-public perl-pod-simple
   (package
     (name "perl-pod-simple")
@@ -11481,7 +11525,7 @@ MYMETA.yml.")
 (define-public perl-module-build
   (package
     (name "perl-module-build")
-    (version "0.4229")
+    (version "0.4231")
     (source
      (origin
        (method url-fetch)
@@ -11489,7 +11533,7 @@ MYMETA.yml.")
                            "Module-Build-" version ".tar.gz"))
        (sha256
         (base32
-         "064c03wxia7jz0i578awj4srykj0nnigm4p5r0dv0559rnk93r0z"))))
+         "05xpn8qg814y49vrih16zfr9iiwb7pmdf57ahjnc2h0p5illq3vy"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-cpan-meta" ,perl-cpan-meta)))
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 673989e06b..e867f94f7a 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -156,13 +156,13 @@
                                               "/bin"))
                                        ":"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (for-each
                 (lambda (program)
                   (wrap-program program
                     `("PATH" ":" prefix (,path))
                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                    `("PYTHONPATH"             ":" prefix (,python-path))))
+                    `("GUIX_PYTHONPATH"             ":" prefix (,python-path))))
                 (map (lambda (name)
                        (string-append out "/bin/" name))
                      '("analyze-pv-structure"
@@ -657,10 +657,10 @@ such as Batch image processing.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/entangle")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("cmake" ,cmake)
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 4b89ddafd1..0b2c24c743 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -224,7 +224,7 @@ colors, styles, options and details.")
        ("perl" ,perl)
        ("texinfo" ,texinfo)             ;For generating documentation
        ;; For the manual and the tests.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-epsf
                                         texlive-etoolbox
                                         texlive-latex-base
@@ -306,9 +306,9 @@ colors, styles, options and details.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'xasy' runs with the correct PYTHONPATH.
              (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "PYTHONPATH")))
+                    (path (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/share/asymptote/GUI/xasy.py")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (home-page "http://asymptote.sourceforge.net")
     (synopsis "Script-based vector graphics language")
diff --git a/gnu/packages/presentation.scm b/gnu/packages/presentation.scm
index 0ad407d36c..8d24a81f9d 100644
--- a/gnu/packages/presentation.scm
+++ b/gnu/packages/presentation.scm
@@ -62,12 +62,12 @@
                      `("PATH" ":" prefix (,(dirname (which "cowsay"))
                                           ,(dirname (which "figlet"))
                                           ,(dirname (which "jp2a"))))
-                     `("PYTHONPATH" prefix
+                     `("GUIX_PYTHONPATH" prefix
                        ,(cons (string-append out "/lib/python"
                                              (python-version python)
                                              "/site-packages")
                               (search-path-as-string->list
-                                (or (getenv "PYTHONPATH") ""))))))
+                                (or (getenv "GUIX_PYTHONPATH") ""))))))
                  '("presentty" "presentty-console")))
              #t)))))
     (inputs
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index 322ce61b13..f8dff1f229 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -275,26 +275,13 @@ mechanism for serializing structured data.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'setup-test-env
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (py3sitedir
-                     (string-append out "/lib/python"
-                                    ,(version-major+minor
-                                      (package-version python))
-                                    "/site-packages")))
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH"))))
-             #t))
          (replace 'check
            (lambda _
              (invoke "pytest" "--cov-report" "term-missing" "--cov"
                      "pure_protobuf")
              (invoke "flake8" "pure_protobuf" "tests"
                      "--ignore=F541")
-             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests")
-             #t)))))
+             (invoke "isort" "-rc" "-c" "pure_protobuf" "tests"))))))
     (home-page "https://pypi.org/project/pure-protobuf/")
     (synopsis "Protobuf implementation using dataclasses")
     (description
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index ea61dd807c..fa9a111d40 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -99,10 +99,11 @@
                    (("^/usr/bin/env") "env"))
                  #t))))
     (build-system gnu-build-system)
-    (inputs
-     `(("libvorbis" ,libvorbis)
+    (propagated-inputs
+     `(("flac" ,flac)
        ("libogg" ,libogg)
-       ("flac" ,flac)))
+       ("libvorbis" ,libvorbis)
+       ("opus" ,opus)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python" ,python)))
@@ -232,6 +233,7 @@ rates.")
        ("libltdl" ,libltdl)
        ("fftwf" ,fftwf)
        ("avahi" ,avahi)
+       ("webrtc-audio-processing", webrtc-audio-processing)
 
        ;; For the optional X11 modules.
        ("libice" ,libice)
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index ace80382bb..59ee91aa9c 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -39,14 +39,14 @@
 (define-public python-wheel
   (package
     (name "python-wheel")
-    (version "0.36.2")
+    (version "0.33.6")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "wheel" version))
         (sha256
          (base32
-          "0pi4w0brz7a86ddk6pm8p6j0w6d7jgacgxm0c2dab3k5cb8yy7p1"))))
+          "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
@@ -145,7 +145,15 @@ Language (TOML) configuration files.")
                 "1d6m21lijwm04g50nwgsgj7x3vhblzw7jv05ah8psqgzk20bbch8"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f))                    ;to tests in the PyPI release
+     `(#:tests? #f                      ;to tests in the PyPI release
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "setup.cfg"
+                        ;; Drop the requirement on python-packaging, which is
+                        ;; not required.
+                        ((".*packaging.*")
+                         "")))))))
     (propagated-inputs
      `(("python-pep517", python-pep517-bootstrap)
        ("python-toml" ,python-toml)))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 2a4f50ad46..5436a878c6 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -437,7 +437,7 @@ sub-package.")
              (add-installed-pythonpath inputs outputs)
              (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest-6)
+     `(("python-pytest" ,python-pytest)
        ("python-setuptools" ,python-setuptools) ; needs setuptools >= 50.3.2
        ("python-setuptools-scm" ,python-setuptools-scm)
        ("python-setuptools-declarative-requirements"
@@ -740,9 +740,6 @@ compliance.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":"
-                                    (getenv "PYTHONPATH")))
              (invoke "pytest"))))))
     (propagated-inputs
      `(("python-isort" ,python-isort)
@@ -1311,7 +1308,7 @@ supported by the MyPy typechecker.")
        ("python-importlib-metadata" ,python-importlib-metadata)
        ("python-lxml" ,python-lxml)
        ("python-psutil" ,python-psutil)
-       ("python-pytest" ,python-pytest-6)
+       ("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-pytest-forked" ,python-pytest-forked)
        ("python-pytest-xdist" ,python-pytest-xdist)
@@ -1332,6 +1329,61 @@ any Python VM with basically no runtime overhead.")
     ;; mypyc/lib-rt/getargs.c
     (license (list license:expat license:psfl))))
 
+;;; This variant exists to break a cycle between python-pylama and python-isort.
+(define-public python-mypy-minimal
+  (hidden-package
+   (package
+     (inherit python-mypy)
+     (name "python-mypy-minimal")
+     (arguments
+      `(#:tests? #f
+        #:phases (modify-phases %standard-phases
+                   ;; XXX: Fails with: "In procedure utime: No such file or
+                   ;; directory".
+                   (delete 'ensure-no-mtimes-pre-1980))))
+     (native-inputs '()))))
+
+(define-public python-pylama
+  (package
+    (name "python-pylama")
+    (version "7.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pylama" version))
+       (sha256
+        (base32
+         "13vx7daqz2918y9s8q3v2i3xaq3ah43a9p58srqi6hqskkpm7blv"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      ;; Fails with: "ImportError: cannot import name
+                      ;; 'commented_out_code_line_numbers' from 'eradicate'".
+                      (delete-file "pylama/lint/pylama_eradicate.py")
+                      ;; Requires python-astroid, which fails to build on
+                      ;; Python 3.9+ (see:
+                      ;; https://github.com/PyCQA/astroid/issues/881).
+                      (delete-file "pylama/lint/pylama_pylint.py"))))))
+    (native-inputs
+     `(("python-py" ,python-py)
+       ("python-pytest" ,python-pytest)
+       ("python-radon" ,python-radon)))
+    (propagated-inputs
+     `(("python-mccabe" ,python-mccabe)
+       ("python-mypy", python-mypy-minimal)
+       ("python-pycodestyle" ,python-pycodestyle)
+       ("python-pydocstyle" ,python-pydocstyle)
+       ("python-pyflakes" ,python-pyflakes)))
+    (home-page "https://github.com/klen/pylama")
+    (synopsis "Code audit tool for python")
+    (description "Pylama is a code audit tool for Python and JavaScript to check
+for style, syntax and other code health metrics.  It is essentially a
+convenient wrapper above tools such as Pyflakes, pydocstyle, pycodestyle and
+McCabe, among others.")
+    (license license:lgpl3+)))
+
 (define-public python-pyannotate
   (package
     (name "python-pyannotate")
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index d9102adcc9..d3add550fe 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -591,14 +591,14 @@ message digests and key derivation functions.")
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "20.0.0")
+    (version "20.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "1i8ab5zn9i9iq2ksizp3rd42v157kacddzz88kviqw3kpp68xw4j"))))
+         "0labcbh2g0jhgisd79wx9kixmi6fip28096d1xb05fj3jmsiq8sc"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -610,7 +610,7 @@ message digests and key derivation functions.")
              ;; PyOpenSSL runs tests against a certificate with a fixed
              ;; expiry time.  To ensure successful builds in the future,
              ;; set the time to roughly the release date.
-             (invoke "faketime" "2020-12-01" "py.test" "-v" "-k"
+             (invoke "faketime" "2021-05-01" "py.test" "-v" "-k"
                      (string-append
                       ;; This test tries to look up certificates from
                       ;; the compiled-in default path in OpenSSL, which
@@ -810,31 +810,20 @@ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
            (substitute* "setup.py"
              (("\"wheel\"") ""))
            ;; Remove bundled libsodium.
-           (delete-file-recursively "src/libsodium")
-           #t))
+           (delete-file-recursively "src/libsodium")))
        (sha256
         (base32
          "01b56hxrbif3hx8l6rwz5kljrgvlbj7shmmd2rjh0hn7974a5sal"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules (,@%python-build-system-modules
-                  (guix build utils)
-                  (ice-9 ftw)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases (@ (guix build python-build-system) %standard-phases)
+     `(#:phases
+       (modify-phases %standard-phases
          (add-before 'build 'use-system-sodium
            (lambda _
-             (setenv "SODIUM_INSTALL" "system")
-             #t))
+             (setenv "SODIUM_INSTALL" "system")))
          (replace 'check
            (lambda _
-             (let ((build-directory
-                    (car (scandir "build" (cut string-prefix? "lib" <>)))))
-               (setenv "PYTHONPATH"
-                       (string-append "./build/" build-directory ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest" "-vv")))))))
+             (invoke "pytest" "-vv"))))))
     (native-inputs
      `(("python-hypothesis" ,python-hypothesis)
        ("python-pytest" ,python-pytest)))
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index ecea80444e..3ce4eb9ab2 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -193,12 +193,9 @@ API rules.")
                 (string-append "@pytest.mark.xfail\n" all)))
 
              ;; Don't test the aiohttp pytest plugin to avoid a dependency loop.
-             (delete-file "tests/test_pytest_plugin.py")
-             #t))
+             (delete-file "tests/test_pytest_plugin.py")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             (setenv "PYTHONPATH"
-                     (string-append ".:" (getenv "PYTHONPATH")))
              (if tests?
                  (invoke "pytest" "-vv"
                          ;; Disable loading the aiohttp coverage plugin
@@ -321,9 +318,6 @@ comes with a SOCKS proxy client.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
@@ -435,9 +429,6 @@ Model} (SAM) templates into AWS CloudFormation templates.")
                                   "tests/ext/aiohttp/test_client.py"))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:.:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv" "tests"))))))
     (native-inputs
      `(;; These are required for the test suite.
@@ -489,11 +480,6 @@ emit information from within their applications to the AWS X-Ray service.")
                          "test/unit/module/maintenance/test_update_documentation.py")
                         (delete-file
                          "test/unit/module/maintenance/test_update_resource_specs.py")
-                        (setenv "PYTHONPATH"
-                                (string-append "./build/lib:"
-                                               (getenv "PYTHONPATH")))
-                        (setenv "PATH" (string-append out "/bin:"
-                                                      (getenv "PATH")))
                         (invoke "python" "-m" "unittest" "discover"
                                 "-s" "test")))))))
     (native-inputs
@@ -776,9 +762,6 @@ content using a variety of algorithms.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"
                               ;; Prevent running the flake8 and black
                               ;; pytest plugins, which only tests style
@@ -1446,9 +1429,6 @@ another XPath engine to find the matching elements in an XML or HTML document.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "tests" "-vv"
                               ;; XXX: This fails with newer Pytest
                               ;; (upstream uses Pytest 3..).
@@ -2751,15 +2731,14 @@ authenticated session objects providing things like keep-alive.")
 (define-public python-urllib3
   (package
     (name "python-urllib3")
-    (version "1.26.2")
+    (version "1.26.4")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urllib3" version))
         (sha256
          (base32
-          "024yldjwjavps39yb77sc422z8fa9bn20wcqrcncjwrqjab8y60r"))))
-    (replacement python-urllib3/fixed)
+          "0dw9w9bs3hmr5dp3r3h43jyzzb1g1046ag7lj8pqf58i4kvj3c77"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))
     (propagated-inputs
@@ -2778,18 +2757,6 @@ supports url redirection and retries, and also gzip and deflate decoding.")
     (properties `((python2-variant . ,(delay python2-urllib3))))
     (license license:expat)))
 
-(define python-urllib3/fixed
-  (package
-    (inherit python-urllib3)
-    (version "1.26.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urllib3" version))
-       (sha256
-        (base32
-         "0dw9w9bs3hmr5dp3r3h43jyzzb1g1046ag7lj8pqf58i4kvj3c77"))))))
-
 ;; Some software requires an older version of urllib3, notably Docker.
 (define-public python-urllib3-1.24
   (package (inherit python-urllib3)
@@ -2951,8 +2918,6 @@ minimum of WSGI.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv" "tests"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -2985,8 +2950,6 @@ presume or force a developer to use a particular tool or library.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (propagated-inputs
      `(("python-flask-babel" ,python-flask-babel)
@@ -3760,13 +3723,9 @@ for Flask.")
                     (lambda _
                       ;; This test requires 'postcss' and 'babel' which are
                       ;; not yet available in Guix.
-                      (delete-file "tests/test_filters.py")
-                      #t))
+                      (delete-file "tests/test_filters.py")))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
      `(("python-jinja2" ,python-jinja2)
@@ -4534,7 +4493,8 @@ Python.")
        (sha256
         (base32 "0w22fapghmzk3xdasc4dn7h8sl58l08d1h5zbf72dh80drv1g9b9"))))
     (propagated-inputs
-     `(("python-unidecode" ,python-unidecode)))
+     `(("python-unidecode" ,python-unidecode)
+       ("python-text-unidecode" ,python-text-unidecode)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -4762,14 +4722,11 @@ event loop.  It is implemented in Cython and uses libuv under the hood.")
            (lambda _
              (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
              (delete-file "docs/build/texinfo/Makefile")
-             (delete-file "docs/build/texinfo/Gunicorn.texi")
-             #t))
+             (delete-file "docs/build/texinfo/Gunicorn.texi")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
                  (begin
-                   (setenv "PYTHONPATH"
-                           (string-append ".:" (getenv "PYTHONPATH")))
                    (invoke "pytest" "-vv"
                            ;; Disable the geventlet tests because eventlet uses
                            ;; dnspython, which does not work in the build
@@ -5399,7 +5356,15 @@ files.")
          (base32
           "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f))  ; Tests not included in release tarball.
+    (arguments
+     '(#:tests? #f  ; Tests not included in release tarball.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-websockets-package-name-requirement
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Python package names use dot as separator.
+             (substitute* "setup.py"
+               (("websockets/extensions") "websockets.extensions")))))))
     (home-page "https://github.com/aaugustin/websockets")
     (synopsis
      "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index d8c3fbec07..60c741ebcd 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -53,7 +53,7 @@
 ;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
@@ -668,12 +668,7 @@ implementation for the Telegram Bot API.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      ;; Extend PYTHONPATH so the built package will be found.
-                      (setenv "PYTHONPATH"
-                              (string-append (getcwd) "/build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-p" "no:logging")
-                      #t)))))
+                      (invoke "pytest" "-p" "no:logging"))))))
     (home-page "https://github.com/borntyping/python-colorlog")
     (synopsis "Log formatting with colors for python")
     (description "The @code{colorlog.ColoredFormatter} is a formatter for use
@@ -1047,15 +1042,16 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
     (version "2.9.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (pypi-uri "Babel" version))
-      (sha256
-       (base32
-        "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
+       (method url-fetch)
+       (uri (pypi-uri "Babel" version))
+       (sha256
+        (base32
+         "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-freezegun" ,python-freezegun)
-       ("python-pytest" ,python-pytest)))
+       ("python-pytest" ,python-pytest)
+       ("tzdata" ,tzdata-for-tests)))
     (propagated-inputs
      `(("python-pytz" ,python-pytz)))
     (arguments
@@ -1063,7 +1059,7 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
                   (replace 'check
                     (lambda _
                       (invoke "pytest" "-vv"))))))
-    (home-page "http://babel.pocoo.org/")
+    (home-page "https://babel.pocoo.org/")
     (synopsis
      "Tools for internationalizing Python applications")
     (description
@@ -1115,7 +1111,7 @@ and verifies that it matches the intended target hostname.")
     (build-system python-build-system)
     (native-inputs
      `(("python-coverage" ,python-coverage)
-       ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0
+       ("python-hypothesis" ,python-hypothesis)
        ("python-pre-commit" ,python-pre-commit)
        ("python-py" ,python-py)
        ("python-pytest" ,python-pytest)
@@ -1215,14 +1211,6 @@ Expressions are constructed from parsed strings or directly in Python.")
       (modify-phases %standard-phases
         (replace 'check
           (lambda _
-            ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
-            ;; on to import numpy. Somehow this works on their CI system.
-            ;; Let's just manage PYTHONPATH here instead.
-            (substitute* "runexamples.sh"
-              (("export PYTHONPATH=.*") ""))
-            (setenv "PYTHONPATH"
-                    (string-append (getcwd) ":"
-                                   (getenv "PYTHONPATH")))
             (invoke "./runexamples.sh")
             (invoke "nosetests" "-v"))))))
    (home-page "https://github.com/fhs/python-hdf4")
@@ -1795,9 +1783,6 @@ language.  It aims to be fast.")
      `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (format #t "current working dir ~s~%" (getcwd))
-                      (setenv "PYTHONPATH"
-                              (string-append ".:" (getenv "PYTHONPATH")))
                       ;; We must run the test suite module directly, as it
                       ;; fails to define the 'tempdir' variable in scope for
                       ;; the tests otherwise
@@ -2322,14 +2307,14 @@ in the current session, Python, and the OS.")
 (define-public python-six
   (package
     (name "python-six")
-    (version "1.14.0")
+    (version "1.15.0")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "six" version))
       (sha256
        (base32
-        "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
+        "0n82108wxn5giff50hd9ykjhd3zl7cndabdasi6568yvbh1rqqrh"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2467,16 +2452,18 @@ audio playback capability for Python 3 on OSX, Windows, and Linux.")
 (define-public python-simplejson
   (package
     (name "python-simplejson")
-    (version "3.17.0")
+    (version "3.17.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "simplejson" version))
       (sha256
        (base32
-        "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
+        "0hc8nqwdlll4a9cr1k9msn5kmb6kmbjirpgvhjh254nr4sgwgv3m"))))
     (build-system python-build-system)
-    (home-page "http://simplejson.readthedocs.org/en/latest/")
+    (native-inputs
+     `(("python-toml" ,python-toml)))
+    (home-page "https://simplejson.readthedocs.io/en/latest")
     (synopsis
      "Json library for Python")
     (description
@@ -3008,14 +2995,14 @@ server.")
 (define-public python-py
   (package
     (name "python-py")
-    (version "1.8.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "py" version))
        (sha256
         (base32
-         "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
+         "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: "ImportError: 'test' module incorrectly imported from
@@ -3032,18 +3019,6 @@ server.")
 code introspection, and logging.")
     (license license:expat)))
 
-(define-public python-py-next
-  (package
-    (inherit python-py)
-    (version "1.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "py" version))
-       (sha256
-        (base32
-         "0hpk0gzd4v1pcnq7zinwg5n219czi23qghcswykqskkbwly8i9lw"))))))
-
 (define-public python2-py
   (package-with-python2 python-py))
 
@@ -3238,11 +3213,9 @@ interfaces.")
                                                  "cross-libc" "libc"))))
                (substitute* "src/click/_unicodefun.py"
                  (("'locale'")
-                  (string-append "'" glibc "/bin/locale'"))))
-             #t))
+                  (string-append "'" glibc "/bin/locale'"))))))
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "pytest"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -3358,8 +3331,6 @@ compare, diff, and patch JSON and JSON-like structures in Python.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
              (invoke "trial" "jsonschema"))))))
     (native-inputs
      `(("python-setuptools_scm" ,python-setuptools-scm)
@@ -3510,9 +3481,6 @@ somewhat intelligible.")
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -3608,13 +3576,13 @@ JavaScript-like message boxes.  Types of dialog boxes include:
   (package
     (name "python-pympler")
     (home-page "https://pythonhosted.org/Pympler/")
-    (version "0.8")
+    (version "0.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Pympler" version))
               (sha256
                (base32
-                "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
+                "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -3675,7 +3643,8 @@ environments and back.")
          "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))
     (build-system python-build-system)
     (inputs
-     `(("libyaml" ,libyaml)))
+     `(("libyaml" ,libyaml)
+       ("python-cython" ,python-cython)))
     (home-page "https://pyyaml.org")
     (synopsis "YAML parser and emitter for Python")
     (description
@@ -3715,36 +3684,61 @@ e.g. filters, callbacks and errbacks can all be promises.")
 (define-public python-virtualenv
   (package
     (name "python-virtualenv")
-    (version "20.2.1")
+    (version "20.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "virtualenv" version))
        (sha256
         (base32
-         "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0"))))
+         "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest)
-       ;; NOTE: guix lint remarks that "python-setuptools should probably not
-       ;; be an input at all". However, removing the input makes the build error:
-       ;; File "setup.py", line 4, in <module>
-       ;;   raise RuntimeError("setuptools >= 41 required to build")
-       ("python-setuptools" ,python-setuptools)
        ("python-setuptools-scm" ,python-setuptools-scm)))
     (propagated-inputs
      `(("python-appdirs" ,python-appdirs)
        ("python-distlib" ,python-distlib/next)
        ("python-filelock" ,python-filelock)
-       ("python-six" ,python-six)
-       ("python-importlib-metadata" ,python-importlib-metadata)))
+       ("python-six" ,python-six)))
     (home-page "https://virtualenv.pypa.io/")
     (synopsis "Virtual Python environment builder")
     (description
      "Virtualenv is a tool to create isolated Python environments.")
     (license license:expat)))
 
+(define-public python2-virtualenv
+  (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
+    (package
+      (inherit base)
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'set-paths 'adjust-PYTHONPATH
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let* ((python (assoc-ref inputs "python"))
+                      (python-sitedir (string-append python "/lib/python2.7"
+                                                     "/site-packages")))
+                 ;; XXX: 'python2' always comes first on PYTHONPATH
+                 ;; and shadows the 'setuptools' input.  Move python2
+                 ;; last: this should be fixed in python-build-system
+                 ;; in a future rebuild cycle.
+                 (setenv "PYTHONPATH"
+                         (string-append (string-join (delete python-sitedir
+                                                             (string-split
+                                                              (getenv "PYTHONPATH")
+                                                              #\:))
+                                                     ":")
+                                        ":" python-sitedir))
+                 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
+                         (getenv "PYTHONPATH"))
+                 #t))))))
+      (propagated-inputs
+       `(("python-contextlib2" ,python2-contextlib2)
+         ,@(package-propagated-inputs base))))))
+
 (define-public python-markupsafe
   (package
     (name "python-markupsafe")
@@ -3758,21 +3752,10 @@ e.g. filters, callbacks and errbacks can all be promises.")
          "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (let ((cwd (getcwd))
-                            (libdir (find (cut string-prefix? "lib." <>)
-                                          (scandir "build"))))
-                      (setenv "PYTHONPATH"
-                              (string-append cwd "/build/" libdir ":"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv")))))))
+                      (invoke "pytest" "-vv"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/mitsuhiko/markupsafe")
@@ -3802,13 +3785,8 @@ for Python.")
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (setenv "PYTHONPATH"
-                                    (string-append "./build/lib:"
-                                                   (getenv "PYTHONPATH")))
-                            (invoke "pytest" "-vv"))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (propagated-inputs
@@ -4107,15 +4085,14 @@ text styles of documentation.")
 (define-public python-pygments
   (package
     (name "python-pygments")
-    (version "2.7.3")
+    (version "2.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Pygments" version))
        (sha256
         (base32
-         "05mps9r966r3dpqw6zrs1nlwjdf5y4960hl9m7abwb3qyfnarwyc"))))
-    (replacement python-pygments/fixed)
+         "153zyxigm879sk2n71lfv03y2pgxb7dl0dlsbwkz9aydxnkf2mi6"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Tests require sphinx, which depends on this.
@@ -4127,18 +4104,6 @@ text styles of documentation.")
     (license license:bsd-2)
     (properties `((python2-variant . ,(delay python2-pygments))))))
 
-(define python-pygments/fixed
-  (package
-    (inherit python-pygments)
-    (version "2.7.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "Pygments" version))
-       (sha256
-        (base32
-         "0dy35ry5qa8dpklk4fkj9kfpw2qb4mh5ha9866kw30wf96dx0jfz"))))))
-
 ;; Pygments 2.6 and later does not support Python 2.
 (define-public python2-pygments
   (let ((base (package-with-python2 (strip-python2-variant python-pygments))))
@@ -4819,7 +4784,14 @@ matching of file paths.")
              (substitute* "tests/test_black.py"
                (("( *)def test_python38" match indent)
                 (string-append indent "@unittest.skip(\"guix\")\n" match)))
-             #t)))))
+             #t))
+         ;; Remove blackd, because it depends on python-aiohttp and
+         ;; python-aiohttp-cors.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\\s*\"blackd=blackd:patched_main \\[d\\]\",\n") "")
+                (("\"blackd\", ") "")))))))
     (propagated-inputs
      `(("python-click" ,python-click)
        ("python-attrs" ,python-attrs)
@@ -5309,11 +5281,11 @@ color scales, and color space conversion easy.  It has support for:
        ("pkg-config" ,pkg-config)
        ("python-sphinx" ,python-sphinx)
        ("python-numpydoc" ,python-numpydoc)
-       ("texlive" ,(texlive-union (list texlive-fonts-cm-super
+       ("texlive" ,(texlive-updmap.cfg (list texlive-fonts-cm-super
                                         texlive-fonts-ec
                                         texlive-generic-ifxetex
                                         texlive-generic-pdftex
-                                        texlive-amsfonts/patched
+                                        texlive-amsfonts
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
@@ -5375,7 +5347,7 @@ color scales, and color space conversion easy.  It has support for:
                     (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
                     (pyver ,(string-append "PYVER=")))
 
-               ;; FIXME: this is needed to for texlive-union to generate
+               ;; FIXME: this is needed to for texlive-updmap.cfg to generate
                ;; fonts, which are not found.
                (setenv "HOME" "/tmp")
 
@@ -5846,7 +5818,7 @@ toolkits.")
        ("python-ipykernel" ,python-ipykernel)
        ("python-mock" ,python-mock)
        ("graphviz" ,graphviz)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         texlive-latex-enumitem
                                         texlive-latex-expdlist
@@ -5872,9 +5844,7 @@ toolkits.")
          (replace 'build
            (lambda _
              (chdir "doc")
-             (setenv "PYTHONPATH"
-                     (string-append (getenv "PYTHONPATH")
-                                    ":" (getcwd) "/../examples/units"))
+             (setenv "PYTHONPATH" "../examples/units")
              (substitute* "conf.py"
                ;; Don't use git.
                (("^SHA = check_output.*")
@@ -5909,8 +5879,7 @@ toolkits.")
                           "./matplotlib-figures")
                  (invoke "makeinfo" "--no-split"
                          "-o" "matplotlib.info" "matplotlib.texi"))
-               (install-file "build/texinfo/matplotlib.info" info))
-             #t)))))
+               (install-file "build/texinfo/matplotlib.info" info)))))))
     (home-page (package-home-page python-matplotlib))
     (synopsis "Documentation for the python-matplotlib package")
     (description (package-description python-matplotlib))
@@ -6144,24 +6113,12 @@ Python code against some of the style conventions in
          "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (begin
-                            (let ((libdir (find (cut string-prefix? "lib." <>)
-                                                (scandir "build"))))
-                              (setenv "PYTHONPATH"
-                                      (string-append "./build/" libdir ":"
-                                                     (getenv "PYTHONPATH")))
-                              (invoke "pytest" "-vv")))
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (invoke "pytest" "-vv")
+                          (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)))
@@ -6240,14 +6197,14 @@ by pycodestyle.")
 (define-public python-distlib
   (package
     (name "python-distlib")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "distlib" version ".zip"))
        (sha256
         (base32
-         "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
+         "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -7024,13 +6981,13 @@ PNG, PostScript, PDF, and SVG file output.")
 (define-public python-decorator
   (package
     (name "python-decorator")
-    (version "4.3.0")
+    (version "4.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "decorator" version))
        (sha256
-        (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
+        (base32 "1rxzhk5zwiggk45hl53zydvy70lk654kg0nc1p54090p402jz9p3"))))
     (build-system python-build-system)
     (home-page "https://pypi.org/project/decorator/")
     (synopsis "Python module to simplify usage of decorators")
@@ -7282,13 +7239,13 @@ child application and control it as if a human were typing commands.")
 (define-public python-setuptools-scm
   (package
     (name "python-setuptools-scm")
-    (version "3.4.3")
+    (version "5.0.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "setuptools_scm" version))
               (sha256
                (base32
-                "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
+                "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))
     (build-system python-build-system)
     (home-page "https://github.com/pypa/setuptools_scm/")
     (synopsis "Manage Python package versions in SCM metadata")
@@ -8162,10 +8119,10 @@ computing.")
      `(("python-sphinx" ,python-sphinx)
        ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
        ;; FIXME: It's possible that a smaller union would work just as well.
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
                                         texlive-generic-ifxetex
-                                        texlive-generic-pdftex
+                                        texlive-pdftex
                                         texlive-latex-capt-of
                                         texlive-latex-cmap
                                         texlive-latex-environ
@@ -9100,8 +9057,6 @@ Python 2 and Python 3.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
     (native-inputs
      `(("python2-pytest" ,python2-pytest)))
@@ -9256,11 +9211,10 @@ PEP 8.")
         (method url-fetch)
         (uri (pypi-uri "pyflakes" version))
         (sha256
-          (base32
-            "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
+         (base32
+          "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
     (build-system python-build-system)
-    (home-page
-      "https://github.com/pyflakes/pyflakes")
+    (home-page "https://github.com/PyCQA/pyflakes")
     (synopsis "Passive checker of Python programs")
     (description
       "Pyflakes statically checks Python source code for common errors.")
@@ -9285,21 +9239,21 @@ PEP 8.")
     (name "python-mccabe")
     (version "0.6.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "mccabe" version))
-        (sha256
-          (base32
-            "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mccabe" version))
+       (sha256
+        (base32
+         "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
     (build-system python-build-system)
     (native-inputs
-      `(("python-pytest" ,python-pytest-bootstrap)
-        ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/flintwork/mccabe")
+     `(("python-toml", python-toml)
+       ("python-pytest" ,python-pytest-bootstrap)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/PyCQA/mccabe")
     (synopsis "McCabe checker, plugin for flake8")
-    (description
-      "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
-complexity of Python source code.")
+    (description "This package provides a Flake8 plug-in to compute the McCabe
+cyclomatic complexity of Python source code.")
     (license license:expat)))
 
 (define-public python2-mccabe
@@ -9476,14 +9430,11 @@ unnecessary plus operators for explicit string literal concatenation.")
              (substitute* "setup.cfg"
                (("\\[pytest\\]")
                 "[tool:pytest]"))
-
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-v"))))))
+    (propagated-inputs
+     `(("python-flake8" ,python-flake8)))
     (native-inputs
-     `(("python-flake8" ,python-flake8)
-       ("python-mock" ,python-mock)
+     `(("python-mock" ,python-mock)
        ("python-pep8" ,python-pep8)
        ("python-pycodestyle" ,python-pycodestyle)
        ("python-pytest" ,python-pytest)))
@@ -9522,14 +9473,14 @@ files.")
 (define-public python-flake8-pyi
   (package
     (name "python-flake8-pyi")
-    (version "20.5.0")
+    (version "20.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "flake8-pyi" version))
        (sha256
         (base32
-         "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
+         "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-attrs" ,python-attrs)
@@ -9976,14 +9927,7 @@ third-party code.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v" "test")))))))
+             (invoke "pytest" "-v" "test"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (synopsis "MessagePack (de)serializer")
@@ -10626,6 +10570,7 @@ is binding LibSass.")
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))          ;circular dependency with python-aiohttp
+    (propagated-inputs `(("python-idna" ,python-idna)))
     (home-page "https://github.com/aio-libs/idna-ssl")
     (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
     (description "Patch @code{ssl.match_hostname} for Unicode(idna)
@@ -10942,7 +10887,7 @@ JSON Reference and JSON Pointer.")
         ("python-json-spec" ,python-json-spec)
         ("python-jsonschema" ,python-jsonschema)
         ("python-pylint" ,python-pylint)
-        ("python-pytest" ,python-pytest-6)
+        ("python-pytest" ,python-pytest)
         ("python-pytest-benchmark"
          ,python-pytest-benchmark)
         ("python-pytest-cache" ,python-pytest-cache)
@@ -11208,8 +11153,8 @@ time.")
        ("python-pytest" ,python-pytest)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-pytest-dependency" ,python-pytest-dependency)
-       ("texlive" ,(texlive-union (list texlive-adjustbox
-                                        texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox
+                                        texlive-amsfonts
                                         texlive-booktabs
                                         texlive-caption
                                         texlive-eurosym
@@ -11800,14 +11745,15 @@ tables.")
 (define-public python-atomicwrites
   (package
     (name "python-atomicwrites")
-    (version "1.3.0")
+    (version "1.4.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "atomicwrites" version))
              (sha256
               (base32
-               "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
+               "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
     (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;avoid circular dependency with pytest
     (synopsis "Atomic file writes in Python")
     (description "Library for atomic file writes using platform dependent tools
 for atomic file system operations.")
@@ -12381,8 +12327,6 @@ text.")
                       #t))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                          (getenv "PYTHONPATH")))
                       (invoke "pytest" "-vv" "-m" "not network"
                               ;; These tests require Docker.
                               "-k" "not test_terminate_job \
@@ -13766,31 +13710,19 @@ syntax highlighting, markdown and more to the terminal.")
 (define-public python-magic
   (package
     (name "python-magic")
-    (version "0.4.15")
+    (version "0.4.22")
+    (home-page "https://github.com/ahupp/python-magic")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-magic" version))
+       (method git-fetch)
+       (uri (git-reference (url home-page) (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
-       (file-name (string-append name "-" version "-checkout"))))
+         "0zbdjr5shijs0jayz7gycpx0kn6v2bh83dpanyajk2vmy47jvbd6"))))
     (build-system python-build-system)
     (arguments
-     ;; The tests are unreliable, so don't run them.  The tests fail
-     ;; under Python3 because they were written for Python2 and
-     ;; contain import statements that do not work in Python3.  One of
-     ;; the tests fails under Python2 because its assertions are
-     ;; overly stringent; it relies on comparing output strings which
-     ;; are brittle and can change depending on the version of
-     ;; libmagic being used and the system on which the test is
-     ;; running.  In my case, under GuixSD 0.10.0, only one test
-     ;; failed, and it seems to have failed only because the version
-     ;; of libmagic that is packaged in Guix outputs a slightly
-     ;; different (but not wrong) string than the one that the test
-     ;; expected.
-     '(#:tests? #f
-       #:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   ;; Replace a specific method call with a hard-coded
                   ;; path to the necessary libmagic.so file in the
                   ;; store.  If we don't do this, then the method call
@@ -13800,24 +13732,22 @@ syntax highlighting, markdown and more to the terminal.")
                   (add-before 'build 'hard-code-path-to-libmagic
                     (lambda* (#:key inputs #:allow-other-keys)
                       (let ((file (assoc-ref inputs "file")))
-                        (substitute* "magic.py"
-                          (("ctypes.util.find_library\\('magic'\\)")
-                           (string-append "'" file "/lib/libmagic.so'")))
-                        #t)))
-                  (add-before 'install 'disable-egg-compression
-                    (lambda _
-                      (let ((port (open-file "setup.cfg" "a")))
-                        (display "\n[easy_install]\nzip_ok = 0\n"
-                                 port)
-                        (close-port port)
-                        #t))))))
+                        (substitute* "magic/loader.py"
+                          (("ctypes\\.util\\.find_library\\('magic'\\)")
+                           (string-append "'" file "/lib/libmagic.so'"))))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      ;; The test suite mandates this variable.
+                      (setenv "LC_ALL" "en_US.UTF-8")
+                      (if tests?
+                          (invoke "python" "./test/test.py")
+                          (format #t "test suite not run~%")))))))
+    (native-inputs
+     `(("which" ,which)))
     (inputs
      ;; python-magic needs to be able to find libmagic.so.
      `(("file" ,file)))
-    (home-page
-     "https://github.com/ahupp/python-magic")
-    (synopsis
-     "File type identification using libmagic")
+    (synopsis "File type identification using libmagic")
     (description
      "This module uses ctypes to access the libmagic file type
 identification library.  It makes use of the local magic database and
@@ -14149,12 +14079,6 @@ module in Python 3.5 and later.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Upstream runs tests after installation and the package itself
-             ;; resides in a subdirectory. Extend PYTHONPATH so it will be
-             ;; found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" "tests" "README.rst"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
@@ -14317,13 +14241,6 @@ graphviz.")
                                     (string-join disabled-tests "\n")))))))
                   (replace 'check
                     (lambda _
-                      ;; Make sure the build directory is on PYTHONPATH.
-                      (setenv "PYTHONPATH"
-                              (string-append
-                               (getenv "PYTHONPATH") ":"
-                               (getcwd) "/build/"
-                               (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
                       ;; Use the build daemons configured number of workers.
                       (setenv "NWORKERS" (number->string (parallel-job-count)))
 
@@ -14381,7 +14298,14 @@ format.")
                 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f))                    ; FIXME: some tests fail
+     '(#:tests? #f                    ; FIXME: some tests fail
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove scripts, because they depend on [conch]
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "src/twisted/python/_setup.py"
+               (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
     (propagated-inputs
      `(("python-zope-interface" ,python-zope-interface)
        ("python-pyhamcrest" ,python-pyhamcrest)
@@ -14944,17 +14868,15 @@ some degree most natural languages too.")
              (delete-file "libcst/tests/test_pyre_integration.py")
              (delete-file "libcst/codemod/tests/test_codemod_cli.py")
              (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
-             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
-             #t))
+             (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
          (add-before 'check 'generate-test-data
            (lambda _
-             (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "-m" "libcst.codegen.generate" "visitors")
              (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
          (replace 'check
-           (lambda _
-             (invoke "python" "-m" "unittest")
-             #t)))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "unittest")))))))
     (native-inputs
      `(("python-black" ,python-black)
        ("python-isort" ,python-isort)))
@@ -14979,6 +14901,14 @@ feels like an AST.")
                    ;; libcst/_add_slots.py
                    license:asl2.0))))
 
+(define-public python-libcst-minimal
+  (hidden-package
+   (package
+     (inherit python-libcst)
+     (name "python-libcst-minimal")
+     (arguments '(#:tests? #f))
+     (native-inputs '()))))
+
 (define-public python-typing-inspect
   (package
     (name "python-typing-inspect")
@@ -14988,7 +14918,8 @@ feels like an AST.")
               (uri (pypi-uri "typing_inspect" version))
               (sha256
                (base32
-                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
+                "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
+              (patches (search-patches "python-typing-inspect-fix.patch"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-mypy-extensions" ,python-mypy-extensions)
@@ -15237,7 +15168,8 @@ YAML-serialized data.")
     (build-system python-build-system)
     (native-inputs
      `(("python-pytest" ,python-pytest)
-       ("python-nose" ,python-nose)))
+       ("python-nose" ,python-nose)
+       ("python-toml" ,python-toml)))
     (propagated-inputs
      `(("python-simplejson" ,python-simplejson)))
     (home-page "https://github.com/sdispater/backpack")
@@ -15627,14 +15559,9 @@ binary or text.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
+         (add-before 'check 'set-home
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/src/"
-                      ":" (getenv "PYTHONPATH")))
-             (setenv "HOME" "")
-             #t)))))
+             (setenv "HOME" ""))))))
     (native-inputs
      `(("python-coverage" ,python-coverage)
        ("python-nose" ,python-nose)))
@@ -15782,8 +15709,6 @@ discovery, monitoring and configuration.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH" (string-append "./build/lib:"
-                                                 (getenv "PYTHONPATH")))
              (invoke "pytest" "-vv"))))))
     (build-system python-build-system)
     (native-inputs
@@ -15814,27 +15739,14 @@ Python to manipulate OpenDocument 1.2 files.")
                 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (ice-9 ftw))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-cachedir
            ;; Tests require write access to $HOME by default
            (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append
-                        cwd "/build/"
-                        (find (cut string-prefix? "lib" <>)
-                              (scandir (string-append cwd "/build")))
-                        ":"
-                        (getenv "PYTHONPATH")))
-               (invoke "pytest" "-v")))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
      `(("python-hypothesis" ,python-hypothesis)
        ("python-pytest-cov" ,python-pytest-cov)
@@ -16166,10 +16078,6 @@ is used by PostgreSQL and the OpenSSH Server for example.")
              (delete-file "tests/__init__.py")))
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "py.test" "-vv" ))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -16198,16 +16106,6 @@ useful as a validator for JSON data.")
         (base32
          "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-pythonpath
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/test/"
-                      ":" (getenv "PYTHONPATH")))
-             #t)))))
     (home-page
      "https://github.com/eliben/pyelftools")
     (synopsis
@@ -16471,43 +16369,25 @@ possible on all supported Python versions.")
            "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'use-absolute-python
                     (lambda _
                       (substitute* "Cheetah/CheetahWrapper.py"
                         (("#!/usr/bin/env python")
-                         (string-append "#!" (which "python"))))
-                      #t))
+                         (string-append "#!" (which "python"))))))
                   (add-after 'unpack 'fix-tests
                     (lambda _
                       (substitute* "Cheetah/Tests/ImportHooks.py"
                         (("os.path.dirname\\(__file__\\)")
-                         (string-append "'" (getcwd) "/Cheetah/Tests'")))
-                      #t))
+                         (string-append "'" (getcwd) "/Cheetah/Tests'")))))
                   (replace 'check
                     (lambda _
-                      (let ((cwd (getcwd)))
-                        (setenv "PYTHONPATH"
-                                (string-append
-                                 cwd "/build/"
-                                 (find (cut string-prefix? "lib" <>)
-                                       (scandir (string-append cwd "/build")))
-                                 ":" (getenv "PYTHONPATH")))
-                        (setenv "PATH"
-                                (string-append (getenv "PATH")
-                                               ":" cwd "/bin"))
-                        (setenv "TMPDIR" "/tmp")
-
-                        (substitute* "Cheetah/Tests/Test.py"
-                          (("unittest.TextTestRunner\\(\\)")
-                           "unittest.TextTestRunner(verbosity=2)"))
-
-                        (invoke "python" "Cheetah/Tests/Test.py")))))))
+                      (setenv "TMPDIR" "/tmp")
+                      (substitute* "Cheetah/Tests/Test.py"
+                        (("unittest.TextTestRunner\\(\\)")
+                         "unittest.TextTestRunner(verbosity=2)"))
+
+                      (invoke "python" "Cheetah/Tests/Test.py"))))))
     (propagated-inputs
      `(("python-markdown" ,python-markdown)))    ;optional
     (home-page "https://cheetahtemplate.org/")
@@ -16603,9 +16483,6 @@ protocols written in pure Python.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              (invoke "python" "test/test_pbkdf2.py"))))))
     (propagated-inputs
      `(("python-pycrypto" ,python-pycrypto)))  ; optional
@@ -16941,7 +16818,15 @@ instead of servers and network commands.")
     ;; python-twisted depends on python-automat.  Twisted is optional, but the
     ;; tests fail if it is not available.  Also see
     ;; <https://github.com/glyph/automat/issues/71>.
-    (arguments '(#:tests? #f))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Remove script, because it depends on python-twisted.
+         (add-after 'unpack 'remove-entrypoint
+           (lambda _
+             (substitute* "setup.py"
+               (("\"automat-visualize = automat._visualize:tool\"") "")))))))
     (native-inputs
      `(("python-m2r" ,python-m2r)
        ("python-setuptools-scm" ,python-setuptools-scm)
@@ -17018,33 +16903,17 @@ and bit flag values.")
                 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (let ((cwd (getcwd)))
-                 (setenv "PYTHONPATH"
-                         (string-append
-                          cwd "/build/"
-                          (find (cut string-prefix? "lib" <>)
-                                (scandir (string-append cwd "/build")))
-                          ":"
-                          (getenv "PYTHONPATH")))
-                 (invoke "python" "-m" "pytest"))))))))
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest")))))))
     (native-inputs
      `(("python-coverage" ,python-coverage)
        ("python-hypothesis" ,python-hypothesis)
        ("python-pympler" ,python-pympler)
        ("python-pytest" ,python-pytest)
-       ("python-six" ,python-six)
-       ("python-sphinx" ,python-sphinx)
-       ("python-zope-interface" ,python-zope-interface)))
+       ("python-six" ,python-six)))
     (home-page "https://github.com/python-attrs/attrs/")
     (synopsis "Attributes without boilerplate")
     (description "@code{attrs} is a Python package with class decorators that
@@ -17059,13 +16928,6 @@ protocols.")
   (package
     (inherit python-attrs)
     (name "python-attrs-bootstrap")
-    (version "19.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "attrs" version))
-              (sha256
-               (base32
-                "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
     (native-inputs `())
     (arguments `(#:tests? #f))))
 
@@ -17171,35 +17033,34 @@ happens using the @code{logging} library.")
     (license license:gpl3+)))
 
 (define-public python-astroid
-  (package
-    (name "python-astroid")
-    (version "2.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "astroid" version))
-       (sha256
-        (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Check to see if the version pinning has been removed.
-           (substitute* "astroid/__pkginfo__.py"
-             (("==1\\.4\\.\\*") ">=1.4.0"))
-           #t))))
-    (build-system python-build-system)
-    (propagated-inputs
-     `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
-    (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
-    (home-page "https://github.com/PyCQA/astroid")
-    (synopsis "Common base representation of python source code for pylint and
+  (let ((revision "1")
+        (commit "5f67396894c79c4661e357ec8bb03aa134a51109"))
+    (package
+      (name "python-astroid")
+      (version (git-version "2.4.2" revision commit))
+      (source
+       (origin
+         ;; The current 2.4.2 release doesn't support Python 3.9.
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/PyCQA/astroid")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1ir5716wqgz39jva7x9chhjy41yi3n7fkymb8snh5giwig8kyipk"))))
+      (build-system python-build-system)
+      (propagated-inputs
+       `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
+         ("python-six" ,python-six)
+         ("python-wrapt" ,python-wrapt)))
+      (native-inputs
+       `(("python-dateutil" ,python-dateutil)
+         ("python-pytest" ,python-pytest)
+         ("python-pytest-runner" ,python-pytest-runner)))
+      (home-page "https://github.com/PyCQA/astroid")
+      (synopsis "Common base representation of python source code for pylint and
 other projects")
-    (description "@code{python-astroid} provides a common base representation
+      (description "@code{python-astroid} provides a common base representation
 of python source code for projects such as pychecker, pyreverse, pylint, etc.
 
 It provides a compatible representation which comes from the _ast module.  It
@@ -17208,8 +17069,8 @@ down the AST and building an extended ast.  The new node classes have
 additional methods and attributes for different usages.  They include some
 support for static inference and local name scopes.  Furthermore, astroid
 builds partial trees by inspecting living objects.")
-    (license license:lgpl2.1+)
-    (properties `((python2-variant . ,(delay python2-astroid))))))
+      (license license:lgpl2.1+)
+      (properties `((python2-variant . ,(delay python2-astroid)))))))
 
 (define-public python2-astroid
   (let ((base (package-with-python2
@@ -17270,23 +17131,77 @@ version, is suitable to be include as a dependency in other projects.")
 (define-public python-isort
   (package
     (name "python-isort")
-    (version "4.3.4")
+    (version "5.7.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              ;; Tests pass only from the Github sources
-              (url "https://github.com/timothycrosley/isort")
-              (commit version)))
+             ;; Tests pass only from the Github sources
+             (url "https://github.com/timothycrosley/isort")
+             (commit version)))
        (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file (find-files "." "\\.whl$")))
        (sha256
         (base32
-         "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
+         "0phq4s911mjjdyr5h5siz93jnpkqb2qgphgcfk6axncgxr8i7vi1"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; A foretaste of what our future python-build-system will need to
+         ;; do.
+         (replace 'build
+           (lambda _
+             (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (whl (car (find-files "dist" "\\.whl$"))))
+               (invoke "pip" "--no-cache-dir" "--no-input"
+                       "install" "--no-deps" "--prefix" out whl))))
+         (add-after 'install 'install-example-plugins
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Patch to use the core poetry API.
+               (substitute* '("example_isort_formatting_plugin/pyproject.toml"
+                              "example_shared_isort_profile/pyproject.toml")
+                 (("poetry>=0.12")
+                  "poetry-core>=1.0.0")
+                 (("poetry.masonry.api")
+                  "poetry.core.masonry.api"))
+               ;; Build the example plugins.
+               (for-each (lambda (source-directory)
+                           (invoke "python" "-m" "build" "--wheel"
+                                   "--no-isolation" "--outdir=dist"
+                                   source-directory))
+                         '("example_isort_formatting_plugin"
+                           "example_shared_isort_profile"))
+               ;; Install them to temporary storage, for the test.
+               (setenv "HOME" (getcwd))
+               (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
+                 (apply invoke "pip" "--no-cache-dir" "--no-input"
+                        "install"  "--user" "--no-deps" example-whls)))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "tests/unit/"
+                       "--ignore=tests/unit/test_deprecated_finders.py")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
+     `(("git" ,git-minimal)
+       ("python-black" ,python-black)
+       ("python-colorama" ,python-colorama)
+       ("python-hypothesmith" ,python-hypothesmith)
+       ("python-libcst" ,python-libcst-minimal)
+       ("python-poetry-core" ,python-poetry-core)
+       ("python-pylama" ,python-pylama)
+       ("python-pypa-build" ,python-pypa-build)
+       ("python-pytest-mock" ,python-pytest-mock)
        ("python-pytest" ,python-pytest)))
-    (home-page "https://github.com/timothycrosley/isort")
+    (home-page "https://github.com/PyCQA/isort")
     (synopsis "Python utility/library to sort python imports")
     (description "@code{python-isort} is a python utility/library to sort
 imports alphabetically, and automatically separated into sections.  It
@@ -17691,9 +17606,6 @@ of corner cases, factory_boy allows you to use objects customized for the
 current test, while only declaring the test-specific fields")
     (license license:expat)))
 
-(define-public python2-factory-boy
-  (package-with-python2 python-factory-boy))
-
 (define-public python-translate-toolkit
   (package
     (name "python-translate-toolkit")
@@ -17783,10 +17695,17 @@ information.")
    (package/inherit
     python-packaging
     (name "python-packaging-bootstrap")
+    (arguments
+      (substitute-keyword-arguments (package-arguments python-packaging)
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-after 'unpack 'fix-dependencies
+              (lambda* (#:key tests? #:allow-other-keys)
+                (substitute* "setup.py" (("\"six\"") ""))))))
+         ((#:tests? _ #f) #f)))
     (native-inputs '())
     (propagated-inputs
-     `(("python-pyparsing" ,python-pyparsing)))
-    (arguments '(#:tests? #f)))))
+     `(("python-pyparsing" ,python-pyparsing))))))
 
 (define-public python2-packaging-bootstrap
   (hidden-package
@@ -17795,7 +17714,8 @@ information.")
     (name "python2-packaging-bootstrap")
     (native-inputs '())
     (propagated-inputs
-     `(("python-pyparsing" ,python2-pyparsing)))
+     `(("python-pyparsing" ,python2-pyparsing)
+       ("python-six" ,python2-six-bootstrap)))
     (arguments
      `(#:tests? #f
        ,@(package-arguments python2-packaging))))))
@@ -17841,6 +17761,13 @@ for more filetypes can be easily added by creating plugins for them.")
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        ((".*'future'.*")
+                         "")
+                        (("colorama==0.4.1")
+                         "colorama>=0.4.1"))))
                   (replace 'check
                     (lambda _
                       (invoke "python" "radon/tests/run.py"))))))
@@ -18074,23 +18001,11 @@ applying JSON Patches according to RFC 6902.")
                 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH")))
-             (invoke "pytest" "-v")))))))
+             (invoke "pytest" "-v"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (home-page "https://rfc3986.readthedocs.io/")
@@ -18412,19 +18327,13 @@ complex datatypes to and from native Python datatypes.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'disable-prance-tests
-                    (lambda _
-                      ;; Disable validation tests since they require the
-                      ;; optional 'prance' library which is not yet in Guix.
-                      (substitute* "tests/test_ext_marshmallow_openapi.py"
-                        (("def test_openapi_tools_validate.*" all)
-                         (string-append "@pytest.mark.xfail\n" all)))))
                   (replace 'check
                     (lambda _
-                      (setenv "PYTHONPATH"
-                              (string-append "./build/lib:"
-                                             (getenv "PYTHONPATH")))
-                      (invoke "pytest" "-vv"))))))
+                      (invoke "pytest" "-vv"
+                              ;; Disable validation tests since they require
+                              ;; the optional 'prance' library which is not
+                              ;; yet in Guix.
+                              "-k" "not openapi_tools_validate"))))))
     (propagated-inputs
      `(("python-pyyaml" ,python-pyyaml)))
     (native-inputs
@@ -18459,9 +18368,6 @@ as Swagger.")
              (substitute* "Makefile"
                (("flake8 flasgger --ignore=F403")
                 "flake8 flasgger --ignore=E731,F403"))
-             (setenv "PYTHONPATH" (string-append (getcwd)
-                                                 ":"
-                                                 (getenv "PYTHONPATH")))
              (invoke "py.test"))))))
     (propagated-inputs
      `(("python-flask" ,python-flask)
@@ -18848,25 +18754,26 @@ ignoring formatting changes.")
 (define-public python-tqdm
   (package
     (name "python-tqdm")
-    (version "4.43.0")
+    (version "4.60.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "tqdm" version))
          (sha256
            (base32
-             "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
+             "1bjpy4mjg6ryp0ijvqi77vgs76l5hh3zrv3x4vmcwxrlbswvvppb"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (replace 'check
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (add-installed-pythonpath inputs outputs)
-                      ;; This invokation is taken from tox.ini.
-                      (invoke "nosetests" "--ignore-files=\"test_perf.py\""
-                              "-d" "-v" "tqdm/"))))))
+                    (lambda _
+                      (invoke "pytest" "-vv" "-k" "not perf"))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-asyncio" ,python-pytest-asyncio)
+       ("python-pytest-timeout" ,python-pytest-timeout)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-toml" ,python-toml)))
     (home-page "https://github.com/tqdm/tqdm")
     (synopsis "Fast, extensible progress meter")
     (description
@@ -18990,7 +18897,8 @@ lines are read from a single file.")
     (native-inputs
      `(("python-pbr" ,python-pbr-minimal)))
     (propagated-inputs
-      `(("python-linecache2" ,python-linecache2)))
+      `(("python-linecache2" ,python-linecache2)
+        ("python-six" ,python-six)))
     (home-page
       "https://github.com/testing-cabal/traceback2")
     (synopsis "Backports of the traceback module")
@@ -19886,7 +19794,7 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
 (define-public python-typed-ast
   (package
     (name "python-typed-ast")
-    (version "1.4.0")
+    (version "1.4.2")
     (source
      (origin
        (method git-fetch)
@@ -19894,28 +19802,15 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
              (url "https://github.com/python/typed_ast")
              (commit version)))
        (sha256
-        (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
+        (base32 "1wr6pkvvrq6rzjjw88pd5xy8fy06msam4hlxbkglvdmwh4c083l0"))
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (arguments
-     `(#:modules ((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (let ((cwd (getcwd)))
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
-             (invoke "pytest")
-             #t)))))
+             (invoke "pytest"))))))
     (native-inputs `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/python/typed_ast")
     (synopsis "Fork of Python @code{ast} modules with type comment support")
@@ -20621,8 +20516,7 @@ user-space file systems in Python.")
                (("pytest < 5") "pytest < 7"))
              ;; We don't care about a coverage report.
              (substitute* "test/requirements.txt"
-               (("coverage.*") "coverage\n"))
-             #t))
+               (("coverage.*") "coverage\n"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
@@ -20630,11 +20524,7 @@ user-space file systems in Python.")
                (delete-file "test/test_js_client.py")
                (delete-file "test/test_tsd_types.py")
                (delete-file "test/test_python_gen.py")
-               (setenv "PYTHONPATH"
-                       (string-append (getcwd) ":"
-                                      (getenv "PYTHONPATH")))
-               (invoke "pytest"))
-             #t)))))
+               (invoke "pytest")))))))
     (propagated-inputs
      `(("python-ply" ,python-ply)
        ("python-six" ,python-six)))
@@ -21384,20 +21274,11 @@ pure-Python.")
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'do-not-override-PYTHONPATH
-                    (lambda _
-                      ;; Append to PYTHONPATH instead of overriding it so
-                      ;; that dependencies from Guix can be found.
-                      (substitute* "tests/testutils.py"
-                        (("env\\['PYTHONPATH'\\] = pythonpath")
-                         "env['PYTHONPATH'] += os.pathsep + pythonpath"))
-                      #t))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
                           (invoke "pytest" "-s" "-vv")
-                          (format #t "test suite not run~%"))
-                      #t)))))
+                          (format #t "test suite not run~%")))))))
     (native-inputs
      `(;; For tests.
        ("python-psutil" ,python-psutil)
@@ -22867,8 +22748,6 @@ essential tools are located.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (invoke "python" "./tests/__main__.py"))))))
     (propagated-inputs
      `(("python-dill" ,python-dill)
@@ -24915,7 +24794,7 @@ By default it uses the open Python vulnerability database Safety DB.")
     (propagated-inputs
      `(("wheel" ,python-wheel)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts/patched
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-ec
                                         texlive-latex-hyperref
                                         texlive-latex-oberdiek
@@ -24930,8 +24809,6 @@ By default it uses the open Python vulnerability database Safety DB.")
              (substitute* "tests.py"
                (("test_basic_conversion_from_http_url")
                 "skip_test_basic_conversion_from_http_url"))
-             ;; Needed by texlive-union to generate fonts
-             (setenv "HOME" "/tmp")
              #t)))))
     (home-page "https://github.com/bebraw/pypandoc")
     (synopsis "Python wrapper for pandoc")
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index e694321e17..ef47e79632 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -31,8 +31,8 @@
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016–2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018, 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
@@ -54,12 +54,12 @@
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,67 +96,101 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xml)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26))
+  #:use-module (srfi srfi-26)
+
+  #:export (customize-site
+            guix-pythonpath-search-path))
+
+(define* (customize-site version)
+  "Generate a install-sitecustomize.py phase, using VERSION."
+  `(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+     (let* ((out (assoc-ref outputs "out"))
+            (site-packages (string-append
+                            out "/lib/python"
+                            ,(version-major+minor version)
+                            "/site-packages"))
+            (sitecustomize.py (assoc-ref (or native-inputs inputs)
+                                         "sitecustomize.py"))
+            (dest (string-append site-packages "/sitecustomize.py")))
+       (mkdir-p site-packages)
+       (copy-file sitecustomize.py dest)
+       ;; Set the correct permissions on the installed file, else the byte
+       ;; compilation phase fails with a permission denied error.
+       (chmod dest #o644))))
+
+(define (guix-pythonpath-search-path version)
+  "Generate a GUIX_PYTHONPATH search path specification, using VERSION."
+  (search-path-specification (variable "GUIX_PYTHONPATH")
+                             (files (list (string-append
+                                           "lib/python"
+                                           (version-major+minor version)
+                                           "/site-packages")))))
 
 (define-public python-2.7
   (package
     (name "python2")
-    (version "2.7.17")
+    (version "2.7.18")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.python.org/ftp/python/"
-                          version "/Python-" version ".tar.xz"))
-      (sha256
-       (base32
-        "0hds28cg226m8j8sr394nm9yc4gxhvlv109w0avsf2mxrlrz0hsd"))
-      (patches (search-patches "python-2.7-search-paths.patch"
-                               "python-2-deterministic-build-info.patch"
-                               "python-2.7-site-prefixes.patch"
-                               "python-2.7-source-date-epoch.patch"
-                               "python-2.7-adjust-tests.patch"
-                               "python-cross-compile.patch"
-                               "python-2.7-CVE-2021-3177.patch"))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          ;; Ensure the bundled copies of these libraries are not used.
-          (for-each delete-file-recursively
-                    '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
+       (method url-fetch)
+       (uri (string-append "https://www.python.org/ftp/python/"
+                           version "/Python-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0hzgxl94hnflis0d6m4szjx0b52gah7wpmcg5g00q7am6xwhwb5n"))
+       (patches (search-patches "python-2.7-search-paths.patch"
+                                "python-2-deterministic-build-info.patch"
+                                "python-2.7-site-prefixes.patch"
+                                "python-2.7-source-date-epoch.patch"
+                                "python-2.7-adjust-tests.patch"
+                                "python-cross-compile.patch"
+                                "python-2.7-CVE-2021-3177.patch"
+                                "python-2.7-no-static-lib.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Ensure the bundled copies of these libraries are not used.
+           (for-each delete-file-recursively
+                     '("Modules/_ctypes/libffi" "Modules/expat" "Modules/zlib"))
 
-          (substitute* "Modules/Setup.dist"
-            ;; Link Expat instead of embedding the bundled one.
-            (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
+           (substitute* "Modules/Setup.dist"
+             ;; Link Expat instead of embedding the bundled one.
+             (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
 
-          ;; Suboptimal to delete failing tests here, but if we delete them in
-          ;; the arguments then we need to make sure to strip out that phase
-          ;; when it gets inherited by python and python-minimal.
-          (for-each delete-file
-                    '("Lib/test/test_compileall.py"
-                      "Lib/test/test_ctypes.py" ; fails on mips64el
-                      "Lib/test/test_distutils.py"
-                      "Lib/test/test_import.py"
-                      "Lib/test/test_shutil.py"
-                      "Lib/test/test_socket.py"
-                      "Lib/test/test_subprocess.py"))
-          #t))))
+           ;; Suboptimal to delete failing tests here, but if we delete them in
+           ;; the arguments then we need to make sure to strip out that phase
+           ;; when it gets inherited by python and python-minimal.
+           (for-each delete-file
+                     '("Lib/test/test_compileall.py"
+                       "Lib/test/test_ctypes.py" ; fails on mips64el
+                       "Lib/test/test_distutils.py"
+                       "Lib/test/test_import.py"
+                       "Lib/test/test_shutil.py"
+                       "Lib/test/test_socket.py"
+                       "Lib/test/test_subprocess.py"))
+           #t))))
     (outputs '("out"
-               "tk"))                     ;tkinter; adds 50 MiB to the closure
+               "tk"                     ;tkinter; adds 50 MiB to the closure
+               "idle"))                 ;programming environment; weighs 5MB
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:configure-flags
-       (list "--enable-shared"                    ;allow embedding
-             "--with-system-expat"                ;for XML support
-             "--with-system-ffi"                  ;build ctypes
-             "--with-ensurepip=install"           ;install pip and setuptools
+       (list "--enable-shared"          ;allow embedding
+             "--with-system-expat"      ;for XML support
+             "--with-system-ffi"        ;build ctypes
+             "--with-ensurepip=install" ;install pip and setuptools
+             "--with-computed-gotos"    ;main interpreter loop optimization
+             "--with-lto"               ;increase size by 20MB, but 15% speedup
              "--enable-unicode=ucs4"
+             "--enable-optimizations"
 
              ;; Prevent the installed _sysconfigdata.py from retaining a reference
              ;; to coreutils.
@@ -170,8 +204,13 @@
                      "ac_cv_file__dev_ptmx=no"
                      "ac_cv_file__dev_ptc=no")
                    '())
+             ;; -fno-semantic-interposition reinstates some optimizations by gcc
+             ;; leading to around 15% speedup. This is the default starting from
+             ;; python 3.10.
+             "CFLAGS=-fno-semantic-interposition"
              (string-append "LDFLAGS=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib"))
+                            (assoc-ref %outputs "out") "/lib"
+                            " -fno-semantic-interposition"))
        ;; With no -j argument tests use all available cpus, so provide one.
        #:make-flags
        (list (string-append
@@ -183,12 +222,12 @@
               ;; https://github.com/python/cpython/commit/529525fb5a8fd9b96ab4021311a598c77588b918.
               " --exclude test_urllib2_localnet test_httplib"))
 
-        #:modules ((ice-9 ftw) (ice-9 match)
-                   (guix build utils) (guix build gnu-build-system))
-        #:phases
-        (modify-phases %standard-phases
-          (add-before
-           'configure 'patch-lib-shells
+       #:modules ((ice-9 ftw) (ice-9 match)
+                  (guix build utils) (guix build gnu-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+             'configure 'patch-lib-shells
            (lambda _
              ;; This variable is used in setup.py to enable cross compilation
              ;; specific switches. As it is not set properly by configure
@@ -206,38 +245,36 @@
                                     "Lib/test/test_subprocess.py"))
                (("/bin/sh") (which "sh")))
              #t))
-          ,@(if (hurd-system?)
-                `((add-before 'build 'patch-regen-for-hurd
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((libc (assoc-ref inputs "libc")))
-                        (substitute* "Lib/plat-generic/regen"
-                          (("/usr/include/") (string-append libc "/include/")))
-                        #t))))
-                '())
-          (add-before 'configure 'do-not-record-configure-flags
-            (lambda* (#:key configure-flags #:allow-other-keys)
-              ;; Remove configure flags from the installed '_sysconfigdata.py'
-              ;; and 'Makefile' so we don't end up keeping references to the
-              ;; build tools.
-              ;;
-              ;; Preserve at least '--with-system-ffi' since otherwise the
-              ;; thing tries to build libffi, fails, and we end up with a
-              ;; Python that lacks ctypes.
-              (substitute* "configure"
-                (("^CONFIG_ARGS=.*$")
-                 (format #f "CONFIG_ARGS='~a'\n"
-                         (if (member "--with-system-ffi" configure-flags)
-                             "--with-system-ffi"
-                             ""))))
-              #t))
-          (add-before
-           'check 'pre-check
+         ,@(if (hurd-system?)
+               `((add-before 'build 'patch-regen-for-hurd
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let ((libc (assoc-ref inputs "libc")))
+                       (substitute* "Lib/plat-generic/regen"
+                         (("/usr/include/") (string-append libc "/include/")))
+                       #t))))
+               '())
+         (add-before 'configure 'do-not-record-configure-flags
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             ;; Remove configure flags from the installed '_sysconfigdata.py'
+             ;; and 'Makefile' so we don't end up keeping references to the
+             ;; build tools.
+             ;;
+             ;; Preserve at least '--with-system-ffi' since otherwise the
+             ;; thing tries to build libffi, fails, and we end up with a
+             ;; Python that lacks ctypes.
+             (substitute* "configure"
+               (("^CONFIG_ARGS=.*$")
+                (format #f "CONFIG_ARGS='~a'\n"
+                        (if (member "--with-system-ffi" configure-flags)
+                            "--with-system-ffi"
+                            ""))))
+             #t))
+         (add-before 'check 'pre-check
            (lambda _
              ;; 'Lib/test/test_site.py' needs a valid $HOME
              (setenv "HOME" (getcwd))
              #t))
-          (add-after
-           'unpack 'set-source-file-times-to-1980
+         (add-after 'unpack 'set-source-file-times-to-1980
            ;; XXX One of the tests uses a ZIP library to pack up some of the
            ;; source tree, and fails with "ZIP does not support timestamps
            ;; before 1980".  Work around this by setting the file times in the
@@ -248,96 +285,128 @@
                           (utime file circa-1980 circa-1980)
                           #t))
                #t)))
-          (add-after 'install 'remove-tests
-            ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
-            ;; because these files are used by some libraries out there.
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                (match (scandir (string-append out "/lib")
-                                (lambda (name)
-                                  (string-prefix? "python" name)))
-                  ((pythonX.Y)
-                   (let ((testdir (string-append out "/lib/" pythonX.Y
-                                                 "/test")))
-                     (with-directory-excursion testdir
-                       (for-each delete-file-recursively
-                                 (scandir testdir
-                                          (match-lambda
-                                            ((or "." "..") #f)
-                                            ("support" #f)
-                                            (file
-                                             (not
-                                              (string-prefix? "test_support."
-                                                              file))))))
-                       (call-with-output-file "__init__.py" (const #t))
-                       #t)))))))
-          (add-after 'remove-tests 'rebuild-bytecode
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                ;; Disable hash randomization to ensure the generated .pycs
-                ;; are reproducible.
-                (setenv "PYTHONHASHSEED" "0")
-                (for-each
-                 (lambda (opt)
-                   (format #t "Compiling with optimization level: ~a\n"
-                           (if (null? opt) "none" (car opt)))
-                   (for-each (lambda (file)
-                               (apply invoke
-                                      `(,,(if (%current-target-system)
-                                              "python2"
-                                              '(string-append out "/bin/python"))
-                                        ,@opt
-                                        "-m" "compileall"
-                                        "-f" ; force rebuild
-                                        ;; Don't build lib2to3, because it contains Python 3 code.
-                                        "-x" "lib2to3/.*"
-                                        ,file)))
-                             (find-files out "\\.py$")))
-                 (list '() '("-O") '("-OO")))
-                #t)))
-          (add-after 'install 'move-tk-inter
-            (lambda* (#:key outputs #:allow-other-keys)
-              ;; When Tkinter support is built move it to a separate output so
-              ;; that the main output doesn't contain a reference to Tcl/Tk.
-              (let ((out (assoc-ref outputs "out"))
-                    (tk  (assoc-ref outputs "tk")))
-                (when tk
-                  (match (find-files out "tkinter.*\\.so")
-                    ((tkinter.so)
-                     ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
-                     ;; want it under TK/lib/pythonX.Y/site-packages.
-                     (let* ((len    (string-length out))
-                            (target (string-append
-                                     tk "/"
-                                     (string-drop
-                                      (dirname (dirname tkinter.so))
-                                      len)
-                                     "/site-packages")))
-                       (install-file tkinter.so target)
-                       (delete-file tkinter.so)))))
-                #t))))))
+         (add-after 'install 'remove-tests
+           ;; Remove 25 MiB of unneeded unit tests.  Keep test_support.*
+           ;; because these files are used by some libraries out there.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (match (scandir (string-append out "/lib")
+                               (lambda (name)
+                                 (string-prefix? "python" name)))
+                 ((pythonX.Y)
+                  (let ((testdir (string-append out "/lib/" pythonX.Y
+                                                "/test")))
+                    (with-directory-excursion testdir
+                      (for-each delete-file-recursively
+                                (scandir testdir
+                                         (match-lambda
+                                           ((or "." "..") #f)
+                                           ("support" #f)
+                                           (file
+                                            (not
+                                             (string-prefix? "test_support."
+                                                             file))))))
+                      (call-with-output-file "__init__.py" (const #t))))
+                  (let ((libdir (string-append out "/lib/" pythonX.Y)))
+                    (for-each
+                     (lambda (directory)
+                       (let ((dir (string-append libdir "/" directory)))
+                         (when (file-exists? dir)
+                           (delete-file-recursively dir))))
+                     '("email/test" "ctypes/test" "unittest/test" "tkinter/test"
+                       "sqlite3/test" "bsddb/test" "lib-tk/test" "lib2to3/tests"
+                       "json/tests" "distutils/tests"))))))))
+         (add-after 'remove-tests 'rebuild-bytecode
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Disable hash randomization to ensure the generated .pycs
+               ;; are reproducible.
+               (setenv "PYTHONHASHSEED" "0")
+               (for-each
+                (lambda (opt)
+                  (format #t "Compiling with optimization level: ~a\n"
+                          (if (null? opt) "none" (car opt)))
+                  (apply invoke
+                         `(,,(if (%current-target-system)
+                                 "python2"
+                                 '(string-append out "/bin/python"))
+                           ,@opt
+                           "-m" "compileall"
+                           "-f"         ; force rebuild
+                           ;; Don't build lib2to3, because it contains Python 3 code.
+                           "-x" "lib2to3/.*"
+                           ,out)))
+                ;; Python 2 has a single file extension (.pyo) for the chosen
+                ;; level of optimization, so it doesn't make sense to byte
+                ;; compile with more than one level.
+                (list '() '("-OO")))
+               #t)))
+         (add-after 'install 'move-tk-inter
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; When Tkinter support is built move it to a separate output so
+             ;; that the main output doesn't contain a reference to Tcl/Tk.
+             (let ((out (assoc-ref outputs "out"))
+                   (tk  (assoc-ref outputs "tk")))
+               (when tk
+                 (match (find-files out "tkinter.*\\.so")
+                   ((tkinter.so)
+                    ;; The .so is in OUT/lib/pythonX.Y/lib-dynload, but we
+                    ;; want it under TK/lib/pythonX.Y/site-packages.
+                    (let* ((len    (string-length out))
+                           (target (string-append
+                                    tk "/"
+                                    (string-drop
+                                     (dirname (dirname tkinter.so))
+                                     len)
+                                    "/site-packages")))
+                      (install-file tkinter.so target)
+                      (delete-file tkinter.so)))))
+               #t)))
+         (add-after 'install 'move-idle
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; when idle is built, move it to a separate output to save some
+             ;; space (5MB)
+             (let ((out (assoc-ref outputs "out"))
+                   (idle (assoc-ref outputs "idle")))
+               (when idle
+                 (for-each
+                  (lambda (file)
+                    (let ((target (string-append idle "/bin/" (basename file))))
+                      (install-file file (dirname target))
+                      (delete-file file)))
+                  (find-files (string-append out "/bin") "^idle"))
+                 (match (find-files out "^idlelib$" #:directories? #t)
+                   ((idlelib)
+                    (let* ((len (string-length out))
+                           (target (string-append idle "/"
+                                                  (string-drop idlelib len)
+                                                  "/site-packages")))
+                      (mkdir-p (dirname target))
+                      (rename-file idlelib target))))))))
+         (add-after 'install 'install-sitecustomize.py
+           ,(customize-site version)))))
     (inputs
      `(("bzip2" ,bzip2)
        ("expat" ,expat)
        ("gdbm" ,gdbm)
-       ("libffi" ,libffi)                         ; for ctypes
-       ("sqlite" ,sqlite)                         ; for sqlite extension
+       ("libffi" ,libffi)               ; for ctypes
+       ("sqlite" ,sqlite)               ; for sqlite extension
        ("openssl" ,openssl)
        ("readline" ,readline)
        ("zlib" ,zlib)
        ("tcl" ,tcl)
-       ("tk" ,tk)))                               ; for tkinter
+       ("tk" ,tk)))                     ; for tkinter
     (native-inputs
      `(("pkg-config" ,pkg-config)
+       ("sitecustomize.py" ,(local-file (search-auxiliary-file
+                                         "python/sitecustomize.py")))
        ;; When cross-compiling, a native version of Python itself is needed.
        ,@(if (%current-target-system)
              `(("python2" ,this-package)
                ("which" ,which))
              '())))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files '("lib/python2.7/site-packages")))))
+     (list (guix-pythonpath-search-path version)))
     (home-page "https://www.python.org")
     (synopsis "High-level, dynamically-typed programming language")
     (description
@@ -362,24 +431,25 @@ data types.")
     (name "python")
     (properties `((superseded . ,python-2)))))
 
-(define-public python-3.8
-  (package (inherit python-2)
+(define-public python-3.9
+  (package
+    (inherit python-2)
     (name "python")
-    (version "3.8.2")
+    (version "3.9.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
               (patches (search-patches
-                        "python-CVE-2020-26116.patch"
-                        "python-3.8-CVE-2021-3177.patch"
-                        "python-3-fix-tests.patch"
-                        "python-3.8-fix-tests.patch"
+                        "python-3-arm-alignment.patch"
                         "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
+                        "python-3-fix-tests.patch"
+                        "python-3-hurd-configure.patch"
+                        "python-3-search-paths.patch"
+                        "python-3-no-static-lib.patch"))
               (sha256
                (base32
-                "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6"))
+                "10vdf46q5ldnzkprm8pldvr5a9hrdpxjv7mpzgdw6vj3cl318nhc"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -388,17 +458,17 @@ data types.")
                   (substitute* "Modules/Setup"
                     ;; Link Expat instead of embedding the bundled one.
                     (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
+                  ;; Delete windows binaries
+                  (for-each delete-file
+                            (find-files "Lib/distutils/command" "\\.exe$"))
                   #t))))
     (arguments
      (substitute-keyword-arguments (package-arguments python-2)
        ((#:make-flags _)
         `(list (string-append
                 (format #f "TESTOPTS=-j~d" (parallel-job-count))
-                ;; test_mmap fails on low-memory systems.
-                " --exclude test_mmap"
-                ;; test_socket may hang and eventually run out of memory
-                ;; on some systems: <https://bugs.python.org/issue34587>.
-                " test_socket"
+                ;; test_mmap fails on low-memory systems
+                " --exclude test_mmap test_socket"
                 ,@(if (hurd-target?)
                       '(" test_posix"      ;multiple errors
                         " test_time"
@@ -432,35 +502,34 @@ data types.")
                         " test_write_pty")
                       '()))))
        ((#:phases phases)
-       `(modify-phases ,phases
-          ,@(if (hurd-system?)
-                `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
-                '())
-          ,@(if (hurd-target?)
-                ;; The build system refuses to cross-compile for unknown targets
-                ;; even though it works fine.  Add GNU/Hurd target.
-                ;; TODO: Make it a patch in a future rebuild cycle.
-                '((add-before 'configure 'support-hurd-cross-compile
-                    (lambda _
-                      (substitute* "configure"
-                        (("\\*-\\*-vxworks.*" all)
-                         (string-append "*-*-gnu)\nac_sys_system=GNU\n;;\n" all)))
-                      #t)))
-                '())
-          (add-before 'check 'set-TZDIR
-            (lambda* (#:key inputs native-inputs #:allow-other-keys)
-              ;; test_email requires the Olson time zone database.
-              (setenv "TZDIR"
-                      (string-append (assoc-ref
-                                      (or native-inputs inputs) "tzdata")
-                                     "/share/zoneinfo"))
-              #t))
-          ;; Unset SOURCE_DATE_EPOCH while running the test-suite and set it
-          ;; again afterwards.  See <https://bugs.python.org/issue34022>.
-          (add-before 'check 'unset-SOURCE_DATE_EPOCH
-            (lambda _ (unsetenv "SOURCE_DATE_EPOCH") #t))
-          (add-after 'check 'reset-SOURCE_DATE_EPOCH
-            (lambda _ (setenv "SOURCE_DATE_EPOCH" "1") #t))
+        `(modify-phases ,phases
+           ,@(if (hurd-system?)
+                 `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9
+                 '())
+           (add-after 'unpack 'remove-windows-binaries
+             (lambda _
+               ;; Delete .exe from embedded .whl (zip) files
+               (for-each
+                (lambda (whl)
+                  (let ((dir "whl-content"))
+                    (mkdir-p dir)
+                    (with-directory-excursion dir
+                      (let ((whl (string-append "../" whl)))
+                        (invoke "unzip" whl)
+                        (for-each delete-file
+                                  (find-files "." "\\.exe$"))
+                        (delete-file whl)
+                        (apply invoke "zip" "-X" whl
+                               (find-files "." ".*" #:directories? #t))))
+                    (delete-file-recursively dir)))
+                (find-files "Lib/ensurepip" "\\.whl$"))))
+           (add-before 'check 'set-TZDIR
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               ;; test_email requires the Olson time zone database.
+               (setenv "TZDIR"
+                       (string-append (assoc-ref
+                                       (or native-inputs inputs) "tzdata")
+                                      "/share/zoneinfo"))))
            (replace 'rebuild-bytecode
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -469,87 +538,41 @@ data types.")
                  (setenv "PYTHONHASHSEED" "0")
                  (for-each
                   (lambda (opt)
-                    (format #t "Compiling with optimization level: ~a\n"
-                            (if (null? opt) "none" (car opt)))
-                    (for-each (lambda (file)
-                                (apply invoke
-                                       `(,,(if (%current-target-system)
-                                               "python3"
-                                               '(string-append out
-                                                               "/bin/python3"))
-                                          ,@opt
-                                          "-m" "compileall"
-                                          "-f" ; force rebuild
-                                          ;; Don't build lib2to3, because it's Python 2 code.
-                                          "-x" "lib2to3/.*"
-                                          ,file)))
-                              (find-files out "\\.py$")))
-                  (list '() '("-O") '("-OO")))
-                 #t)))
-           ;; XXX: Apply patch on ARM platforms only to avoid a full rebuild.
-           ;; Remove this phase in the next rebuild cycle.
-           ,@(let ((system (or (%current-target-system)
-                               (%current-system))))
-               (if (any (cute string-prefix? <> system)
-                        '("arm" "aarch64"))
-                   '((add-after 'unpack 'apply-alignment-patch
-                       (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                        (invoke "patch" "-p1" "--force" "--input"
-                                (assoc-ref (or native-inputs inputs)
-                                           "arm-alignment.patch")))))
-                   '()))))))
+                    (format #t "Compiling with optimization level: ~a\n" opt)
+                    (lambda (file)
+                      (apply invoke
+                             `(,,(if (%current-target-system)
+                                     "python3"
+                                     '(string-append out
+                                                     "/bin/python3"))
+                               ,opt
+                               "-m" "compileall"
+                               "-f" ; force rebuild
+                               "--invalidation-mode=unchecked-hash"
+                               ;; Don't build lib2to3, because it's Python 2 code.
+                               "-x" "lib2to3/.*"
+                               ,out))))
+                  (list "none" "-O" "-OO")))))
+           (replace 'install-sitecustomize.py
+             ,(customize-site version))))))
     (native-inputs
      `(("tzdata" ,tzdata-for-tests)
-
-       ;; Disable unaligned accesses in the sha3 module on ARM as
-       ;; it causes a test failure when building 32-bit Python on a
-       ;; 64-bit kernel.  See <https://bugs.python.org/issue36515>.
-       ;; TODO: make this a regular patch in the next rebuild cycle.
-       ,@(let ((system (or (%current-target-system)
-                           (%current-system))))
-           (if (any (cute string-prefix? <> system)
-                    '("arm" "aarch64"))
-               `(("arm-alignment.patch" ,(search-patch "python-3-arm-alignment.patch")))
-               '()))
-
+       ("unzip" ,unzip)
+       ("zip" ,(@ (gnu packages compression) zip))
        ,@(if (%current-target-system)
              `(("python3" ,this-package))
              '())
        ,@(package-native-inputs python-2)))
     (native-search-paths
-     (list (search-path-specification
-            (variable "PYTHONPATH")
-            (files (list (string-append "lib/python"
-                                        (version-major+minor version)
-                                        "/site-packages"))))))))
-
-(define-public python-3.9
-  (package (inherit python-3.8)
-    (name "python-next")
-    (version "3.9.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.python.org/ftp/python/"
-                                  version "/Python-" version ".tar.xz"))
-              (patches (search-patches
-                        "python-3.9-fix-tests.patch"
-                        "python-3-deterministic-build-info.patch"
-                        "python-3-search-paths.patch"))
-              (sha256
-               (base32
-                "0z94vv5qhlwvcgc4sy9sdiqs0220s84wx3b62vslh5419z2k881w"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Delete the bundled copy of libexpat.
-                  (delete-file-recursively "Modules/expat")
-                  (substitute* "Modules/Setup"
-                    ;; Link Expat instead of embedding the bundled one.
-                    (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
-                  #t))))))
+     (list (guix-pythonpath-search-path version)
+           ;; Used to locate tzdata by the zoneinfo module introduced in
+           ;; Python 3.9.
+           (search-path-specification
+            (variable "PYTHONTZPATH")
+            (files (list "share/zoneinfo")))))))
 
 ;; Current 3.x version.
-(define-public python-3 python-3.8)
+(define-public python-3 python-3.9)
 
 ;; Current major version.
 (define-public python python-3)
@@ -623,8 +646,8 @@ for more information.")))
                   (lambda (old new)
                     (symlink (string-append python old)
                              (string-append bin "/" new)))
-                  `("python3" ,"pydoc3" ,"idle3" ,"pip3")
-                  `("python"  ,"pydoc"  ,"idle"  ,"pip"))
+                  `("python3" ,"pydoc3" ,"pip3")
+                  `("python"  ,"pydoc"  ,"pip"))
                 ;; python-config outputs search paths based upon its location,
                 ;; use a bash wrapper to avoid changing its outputs.
                 (let ((bash (string-append (assoc-ref %build-inputs "bash")
@@ -816,9 +839,6 @@ ease from the desktop to a microcontroller or embedded system.")
                                 "targetpypystandalone"))
                       ;; Build c modules and package everything, so tests work.
                       (with-directory-excursion "pypy/tool/release"
-                        (unsetenv "PYTHONPATH") ; Do not use the system’s python libs:
-                                        ; AttributeError: module 'enum' has no
-                                        ; attribute 'IntFlag'
                         (invoke "python2" "package.py"
                                 "--archive-name" "pypy-dist"
                                 "--builddir" (getcwd)))))
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index f255764b27..e518b78815 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -502,10 +502,10 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("python-pyzmq" ,python-pyzmq)
        ("python-scipy" ,python-scipy)
        ("python-sphinx" ,python-sphinx)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
-                                        texlive-latex-amsmath
-                                        ;; TODO: Add newunicodechar.
-                                        texlive-latex-graphics)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                             texlive-latex-amsmath
+                                             ;; TODO: Add newunicodechar.
+                                             texlive-latex-graphics)))
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -621,7 +621,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
             (variable "GRC_BLOCKS_PATH")
             (files '("share/gnuradio/grc/blocks")))
            (search-path-specification
-            (variable "PYTHONPATH")
+            (variable "GUIX_PYTHONPATH")
             (files (list (string-append "lib/python"
                                         (version-major+minor
                                          (package-version python))
@@ -711,7 +711,7 @@ to access different radio hardware.")
        ("doxygen" ,doxygen)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
-       ("texlive" ,(texlive-union (list texlive-amsfonts/patched
+       ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-latex-amsmath
                                         ;; TODO: Add newunicodechar.
                                         texlive-latex-graphics)))))
diff --git a/gnu/packages/readline.scm b/gnu/packages/readline.scm
index c7db9e611d..b83c96ca61 100644
--- a/gnu/packages/readline.scm
+++ b/gnu/packages/readline.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,13 +48,8 @@
   (list (readline-patch version seqno (base32 hash))
         ...))
 
-(define %patch-series-8.0
-  (patch-series
-   "8.0"
-   (1 "0sfh7wn0pr743xspnb1zndxndlv9rc0hcg14cbw5cmyg6f4ykrfq")
-   (2 "1xy8mv8xm8hsfixwp3ci9kfx3dii3y92cq27wwd0jq75y6zzxc1n")
-   (3 "1vza7sxjcsr2z295ij12nzgncdil1vb6as3mqy4m7svi1chv5pcl")
-   (4 "0k1rfx9w32lglxg564yvp0mw6jg6883p8ac2f2lxxqpf80m3vami")))
+(define %patch-series-8.1
+  '())
 
 (define %patch-series-7.0
   (patch-series
@@ -68,16 +63,16 @@
 (define-public readline
   (package
     (name "readline")
-    (version (string-append "8.0."
-                            (number->string (length %patch-series-8.0))))
+    (version (string-append "8.1."
+                            (number->string (length %patch-series-8.1))))
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/readline/readline-"
                                   (version-major+minor version) ".tar.gz"))
               (sha256
                (base32
-                "0qg4924hf4hg0r0wbx2chswsr08734536fh5iagkd3a7f4czafg3"))
-              (patches (append %patch-series-8.0
+                "00ibp0n9crbwx15k9vvckq5wsipw98b1px8pd8i34chy2gpb9kpq"))
+              (patches (append %patch-series-8.1
                                (search-patches "readline-link-ncurses.patch")))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 2ba9924bec..cfc91f73af 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -95,7 +95,7 @@
         license:gpl2+
         license:gpl3+))
 
-(define-public ruby
+(define-public ruby-2.6
   (package
     (name "ruby")
     (version "2.6.5")
@@ -153,7 +153,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.7
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.7.2")
     (source
      (origin
@@ -210,7 +210,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.5
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.5.8")
     (source
      (origin
@@ -229,7 +229,7 @@ a focus on simplicity and productivity.")
 
 (define-public ruby-2.4
   (package
-    (inherit ruby)
+    (inherit ruby-2.6)
     (version "2.4.10")
     (source
      (origin
@@ -246,6 +246,8 @@ a focus on simplicity and productivity.")
                    (delete-file-recursively "ext/fiddle/libffi-3.2.1")
                    #t))))))
 
+(define-public ruby ruby-2.7)
+
 (define-public mruby
   (package
     (name "mruby")
@@ -1296,14 +1298,6 @@ syntax to the minimum while remaining clear.")
      `(#:test-target "test:all"
        #:phases
        (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "asciidoctor.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t))
          (add-after 'extract-gemspec 'strip-version-requirements
            (lambda _
              (delete-file "Gemfile")
@@ -1502,17 +1496,7 @@ loader for the file type associated with a filename extension, and it augments
          "1dmk94z6ivhrz5hsq68vl5vgydhkz89n394rha1ymddw3rymbfcv"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "treetop.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -print0 |sort -z|cut -zc3-`"))
-             #t)))))
+     `(#:test-target "spec"))
     (native-inputs
      `(("ruby-activesupport" ,ruby-activesupport)
        ("ruby-rr" ,ruby-rr)
@@ -1735,15 +1719,6 @@ only what they care about.")
            (lambda _
              (delete-file "Gemfile")
              (delete-file "Gemfile.lock")
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "standard.gemspec"
-               (("`git ls-files -z`")
-                "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
              #t)))))
     (native-inputs
      `(("ruby-gimme" ,ruby-gimme)
@@ -1785,14 +1760,6 @@ to save time in the following ways:
            (lambda _
              (substitute* (find-files "." "\\.rb$")
                (("require.*bundler/setup.*") ""))
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (substitute* "chunky_png.gemspec"
-               (("`git ls-files`")
-                "`find . -type f -not -regex '.*\\.gem$' |sort |cut -c3-`"))
              #t)))))
     (native-inputs
      `(("bundler" ,bundler)
@@ -1914,15 +1881,6 @@ web pages.")
                  (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
                   (string-append stripped "\n")))
                #t))
-           (replace 'replace-git-ls-files
-             ;; TODO: Remove after the fix of using 'cut' to better mimic the
-             ;; git ls-files output is merged in ruby-build-system.
-             (lambda _
-               (substitute* "asciidoctor-pdf.gemspec"
-                 (("`git ls-files -z`")
-                  "`find . -type f -not -regex '.*\\.gem$' -print0 \
-|sort -z|cut -zc3-`"))
-               #t))
            ;; The tests rely on the Gem being installed, so move the check phase
            ;; after the install phase.
            (delete 'check)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 73f94a3929..64b3e5176e 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -4,13 +4,14 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
-;;; Copyright © 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
 ;;; Copyright © 2020, 2021 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -107,455 +108,274 @@
     (inherit base-rust)
     (version version)
     (source
-      (origin
-        (inherit (package-source base-rust))
-        (uri (rust-uri version))
-        (sha256 (base32 checksum))))
+     (origin
+       (inherit (package-source base-rust))
+       (uri (rust-uri version))
+       (sha256 (base32 checksum))))
     (native-inputs
      (alist-replace "cargo-bootstrap" (list base-rust "cargo")
                     (alist-replace "rustc-bootstrap" (list base-rust)
                                    (package-native-inputs base-rust))))))
 
-(define-public mrustc
-  (let ((rustc-version "1.19.0"))
-    (package
-      (name "mrustc")
-      (version "0.9")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/thepowersgang/mrustc")
-                      (commit (string-append "v" version))))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2"))))
-      (outputs '("out" "cargo"))
-      (build-system gnu-build-system)
-      (inputs
-       `(("zlib" ,zlib)))
-      (native-inputs
-       `(("bison" ,bison)
-         ("flex" ,flex)
-         ;; Required for the libstd sources.
-         ("rustc" ,(package-source rust-1.19))))
-      (arguments
-       `(#:test-target "test"
-         #:make-flags
-         (list ,(string-append "RUSTC_TARGET="
-                               (or (%current-target-system)
-                                   (nix-system->gnu-triplet-for-rust))))
-         #:phases
-         (modify-phases %standard-phases
-          (add-after 'unpack 'patch-date
-            (lambda _
-              (substitute* "Makefile"
-               (("shell date") "shell date -d @1"))
-              (substitute* "run_rustc/Makefile"
-               (("[$]Vtime ") "$V "))
-              #t))
-           (add-after 'patch-date 'unpack-target-compiler
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (invoke "tar" "xf" (assoc-ref inputs "rustc"))
-               (chdir ,(string-append "rustc-" rustc-version "-src"))
-               (invoke "patch" "-p0" ,(string-append "../rustc-" rustc-version
-                                                     "-src.patch"))
-               (chdir "..")
-               (setenv "RUSTC_VERSION" ,rustc-version)
-               (setenv "MRUSTC_TARGET_VER"
-                ,(version-major+minor rustc-version))
-               (setenv "OUTDIR_SUF" "")
-               #t))
-           (replace 'configure
-             (lambda* (#:key inputs #:allow-other-keys)
-               (setenv "CC" (string-append (assoc-ref inputs "gcc")
-                                           "/bin/gcc"))
-               (setenv "CXX" (string-append (assoc-ref inputs "gcc")
-                                            "/bin/g++"))
-               #t))
-           (add-after 'build 'build-minicargo
-             (lambda* (#:key make-flags #:allow-other-keys)
-               ;; TODO: minicargo.mk: RUSTC_VERSION=$(RUSTC_VERSION) RUSTC_CHANNEL=$(RUSTC_SRC_TY) OUTDIR_SUF=$(OUTDIR_SUF)
-               (apply invoke "make" "-f" "minicargo.mk" "LIBS" make-flags)
-               (apply invoke "make" "-C" "tools/minicargo" make-flags)))
-           ;(add-after 'check 'check-locally
-           ;  (lambda* (#:key make-flags #:allow-other-keys)
-           ;    ;; The enum test wouldn't work otherwise.
-           ;    ;; See <https://github.com/thepowersgang/mrustc/issues/137>.
-           ;    (setenv "MRUSTC_TARGET_VER" ,(version-major+minor rustc-version))
-           ;    (apply invoke "make" "local_tests" make-flags)))
-           (replace 'install
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (tools-bin (string-append out "/tools/bin"))
-                      (cargo-out (assoc-ref outputs "cargo"))
-                      (cargo-bin (string-append cargo-out "/bin"))
-                      (lib (string-append out "/lib"))
-                      (lib/rust (string-append lib "/mrust"))
-                      (gcc (assoc-ref inputs "gcc"))
-                      (run_rustc (string-append out
-                                                "/share/mrustc/run_rustc")))
-                 ;; These files are not reproducible.
-                 (for-each delete-file (find-files "output" "\\.txt$"))
-                 ;(delete-file-recursively "output/local_tests")
-                 (mkdir-p (dirname lib/rust))
-                 (copy-recursively "output" lib/rust)
-                 (mkdir-p bin)
-                 (mkdir-p tools-bin)
-                 (install-file "bin/mrustc" bin)
-                 ;; minicargo uses relative paths to resolve mrustc.
-                 (install-file "tools/bin/minicargo" tools-bin)
-                 (install-file "tools/bin/minicargo" cargo-bin)
-                 (mkdir-p run_rustc)
-                 (copy-file "run_rustc/Makefile"
-                            (string-append run_rustc "/Makefile"))
-                 #t))))))
-      (synopsis "Compiler for the Rust programming language")
-      (description "Rust is a systems programming language that provides memory
-safety and thread safety guarantees.")
-      (home-page "https://github.com/thepowersgang/mrustc")
-      ;; Dual licensed.
-      (license (list license:asl2.0 license:expat)))))
-
-(define rust-1.19
+;;; Note: mrustc's only purpose is to be able to bootstap Rust; it's designed
+;;; to be used in source form.
+(define %mrustc-source
+  (let ((name "mrustc")
+        (version "0.9"))
+    (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/thepowersgang/mrustc")
+            (commit (string-append "v" version))))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "194ny7vsks5ygiw7d8yxjmp1qwigd71ilchis6xjl6bb2sj97rd2")))))
+
+;;; Rust 1.29 is special in that it is built with mrustc, which shortens the
+;;; bootstrap path.  Note: the build is non-deterministic.
+(define-public rust-1.29
   (package
     (name "rust")
-    (version "1.19.0")
+    (version "1.29.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (rust-uri "1.19.0"))
-        (sha256 (base32 "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))
-        (modules '((guix build utils)))
-        (snippet '(begin (delete-file-recursively "src/llvm") #t))
-        (patches (search-patches "rust-1.19-mrustc.patch"))))
+     (origin
+       (method url-fetch)
+       (uri (rust-uri version))
+       (sha256 (base32 "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h"))
+       (modules '((guix build utils)))
+       (snippet '(for-each delete-file-recursively
+                           '("src/jemalloc"
+                             "src/llvm"
+                             "src/llvm-emscripten")))
+       (patches (search-patches "rust-reproducible-builds.patch"))))
     (outputs '("out" "cargo"))
-    (properties '((timeout . 72000)               ;20 hours
-                  (max-silent-time . 18000)))     ;5 hours (for armel)
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    (inputs
+     `(("libcurl" ,curl)
+       ("libssh2" ,libssh2)
+       ;; Use llvm-7, which enables rust to be built reproducibly.
+       ;; Versions newer than 7 fail to compile.
+       ("llvm" ,llvm-7)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("pkg-config" ,pkg-config)
+       ;; Required for the libstd sources.
+       ("mrustc-source" ,%mrustc-source)))
     (arguments
      `(#:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
-       #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
+       #:modules ((guix build cargo-utils)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:test-target "test"
+       ;; Rust's own .so library files are not found in any RUNPATH, but
+       ;; that doesn't seem to cause issues.
+       #:validate-runpath? #f
+       #:make-flags
+       (list ,(string-append "RUSTC_TARGET="
+                             (or (%current-target-system)
+                                 (nix-system->gnu-triplet-for-rust)))
+             ,(string-append "RUSTCSRC=../"))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'set-env
+         (add-after 'unpack 'patch-reference-to-cc
+           ;; This prevents errors like 'error: linker `cc` not found' when
+           ;; "cc" is not found on PATH.
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; Disable test for cross compilation support.
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             ;; guix llvm-3.9.1 package installs only shared libraries
-             (setenv "LLVM_LINK_SHARED" "1")
-             #t))
-         (add-after 'unpack 'patch-cargo-tomls
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "src/librustc_errors/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-term = \"0.4.4\"
-"))
-             (substitute* "src/librustc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-getopts = { path = \"../libgetopts\" }
-"))
-             (substitute* "src/librustdoc/Cargo.toml"
-               (("[[]dependencies[]]") "
-[dependencies]
-test = { path = \"../libtest\" }
-"))
-             #t))
-         (add-after 'unpack 'patch-tests
+             (let ((gcc (assoc-ref inputs "gcc")))
+               (substitute* (find-files "." "^link.rs$")
+                 (("\"cc\".as_ref")
+                  (format #f "~s.as_ref" (string-append gcc "/bin/gcc")))))))
+         (add-after 'unpack 'copy-mrustc-and-patch
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/libstd/process.rs"
-                 ;; The newline is intentional.
-                 ;; There's a line length "tidy" check in Rust which would
-                 ;; fail otherwise.
-                 (("\"/bin/sh\"") (string-append "\n\"" bash "/bin/sh\"")))
-               (substitute* "src/libstd/net/tcp.rs"
-                 ;; There is no network in build environment
-                 (("fn connect_timeout_unroutable")
-                  "#[ignore]\nfn connect_timeout_unroutable"))
-               ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-               (substitute* "src/libstd/sys/unix/process/process_common.rs"
-                (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-               #t)))
-         (add-after 'patch-tests 'patch-aarch64-test
-           (lambda* _
-             (substitute* "src/librustc_back/dynamic_lib.rs"
-               ;; This test is known to fail on aarch64 and powerpc64le:
-               ;; https://github.com/rust-lang/rust/issues/45410
-               (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-             #t))
-         (add-after 'patch-tests 'use-readelf-for-tests
-           (lambda* _
-             ;; nm doesn't recognize the file format because of the
-             ;; nonstandard sections used by the Rust compiler, but readelf
-             ;; ignores them.
-             (substitute* "src/test/run-make/atomic-lock-free/Makefile"
-               (("\tnm ")
-                "\treadelf -c "))
-             #t))
-         (add-after 'patch-tests 'remove-unsupported-tests
-           (lambda* _
-             ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-             ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-             (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-             #t))
+             (copy-recursively (assoc-ref inputs "mrustc-source") "mrustc")
+             (invoke "patch" "-p0" "-i" "mrustc/rustc-1.29.0-src.patch")))
+         (add-after 'copy-mrustc-and-patch 'patch-makefiles
+           ;; This disables building the (unbundled) LLVM.
+           (lambda* (#:key inputs parallel-build? #:allow-other-keys)
+             (let ((llvm (assoc-ref inputs "llvm"))
+                   (job-spec (format #f "-j~a"
+                                     (if parallel-build?
+                                         (number->string (parallel-job-count))
+                                         "1"))))
+               (with-directory-excursion "mrustc"
+                 (substitute* '("minicargo.mk"
+                                "run_rustc/Makefile")
+                   ;; Use the system-provided LLVM.
+                   (("LLVM_CONFIG := .*")
+                    (string-append "LLVM_CONFIG := " llvm "/bin/llvm-config\n"))
+                   (("\\$\\(LLVM_CONFIG\\): .*")
+                    "$(LLVM_CONFIG):\n")
+                   (("\\$Vcd \\$\\(RUSTCSRC\\)build && \\$\\(MAKE\\).*")
+                    "true\n"))
+                 ;; Patch date.
+                 (substitute* "Makefile"
+                   (("shell date")
+                    "shell date -d @1"))
+                 (substitute* "run_rustc/Makefile"
+                   (("[$]Vtime ")
+                    "$V ")
+                   ;; Unlock the number of parallel jobs for cargo.
+                   (("-j [[:digit:]]+ ")
+                    "")
+                   ;; Patch the shebang of a generated wrapper for rustc, and
+                   ;; make sure that \n newline escapes get interpreted
+                   ;; correctly, specifying the '-e' option of echo.
+                   (("echo '#!/bin/sh")
+                    (string-append "echo -e '#!" (which "sh"))))))))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda* _
-             (use-modules (guix build cargo-utils))
              (substitute* "src/Cargo.lock"
                (("(\"checksum .* = )\".*\"" all name)
                 (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (generate-all-checksums "src/vendor")
-             #t))
-         ;; This phase is overridden by newer versions.
+             (generate-all-checksums "src/vendor")))
          (replace 'configure
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda _
+             (setenv "CC" "gcc")
+             (setenv "CXX" "g++")
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")
+             ;; This is a workaround for
+             ;; https://github.com/thepowersgang/mrustc/issues/138.
+             (setenv "LIBSSH2_SYS_USE_PKG_CONFIG" "yes")))
+         (delete 'patch-generated-file-shebangs)
          (replace 'build
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))
-               (setenv "CFG_COMPILER_HOST_TRIPLE"
-                ,(nix-system->gnu-triplet (%current-system)))
-               (setenv "CFG_RELEASE" "")
-               (setenv "CFG_RELEASE_CHANNEL" "stable")
-               (setenv "CFG_LIBDIR_RELATIVE" "lib")
-               (setenv "CFG_VERSION" "1.19.0-stable-mrustc")
-               (setenv "MRUSTC_TARGET_VER" ,(version-major+minor version))
-               ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.
-               (mkdir-p "output")
-               ;; mrustc 0.9 doesn't check the search paths for crates anymore.
-               (copy-recursively (string-append rustc-bootstrap "/lib/mrust")
-                                 "output")
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/rustc" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/rustc-build"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               (setenv "CFG_COMPILER_HOST_TRIPLE" #f)
-               (setenv "CFG_RELEASE" #f)
-               (setenv "CFG_RELEASE_CHANNEL" #f)
-               (setenv "CFG_VERSION" #f)
-               (setenv "CFG_PREFIX" #f)
-               (setenv "CFG_LIBDIR_RELATIVE" #f)
-               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
-                       "src/tools/cargo" "--vendor-dir" "src/vendor"
-                       "--output-dir" "output/cargo-build"
-                       "-L" "output/"
-                       "-L" (string-append rustc-bootstrap "/lib/mrust")
-                       "-j" "1")
-               ;; Now use the newly-built rustc to build the libraries.
-               ;; One day that could be replaced by:
-               ;; (invoke "output/cargo-build/cargo" "build"
-               ;;         "--manifest-path" "src/bootstrap/Cargo.toml"
-               ;;         "--verbose") ; "--locked" "--frozen"
-               ;; but right now, Cargo has problems with libstd's circular
-               ;; dependencies.
-               (mkdir-p "output/target-libs")
-               (for-each (match-lambda
-                          ((name . flags)
-                            (write name)
-                            (newline)
-                            (apply invoke
-                                   "output/rustc-build/rustc"
-                                   "-C" (string-append "linker="
-                                                       (getenv "CC"))
-                                   ;; Required for libterm.
-                                   "-Z" "force-unstable-if-unmarked"
-                                   "-L" "output/target-libs"
-                                   (string-append "src/" name "/lib.rs")
-                                   "-o"
-                                   (string-append "output/target-libs/"
-                                                  (car (string-split name #\/))
-                                                  ".rlib")
-                                   flags)))
-                         '(("libcore")
-                           ("libstd_unicode")
-                           ("liballoc")
-                           ("libcollections")
-                           ("librand")
-                           ("liblibc/src" "--cfg" "stdbuild")
-                           ("libunwind" "-l" "gcc_s")
-                           ("libcompiler_builtins")
-                           ("liballoc_system")
-                           ("libpanic_unwind")
-                           ;; Uses "cc" to link.
-                           ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread")
-                           ("libarena")
-
-                           ;; Test dependencies:
-
-                           ("libgetopts")
-                           ("libterm")
-                           ("libtest")))
-               #t)))
-         ;; This phase is overridden by newer versions.
-         (replace 'check
-           (const #t))
-         ;; This phase is overridden by newer versions.
+           (lambda* (#:key make-flags parallel-build? #:allow-other-keys)
+             (let* ((job-count (if parallel-build?
+                                   (parallel-job-count)
+                                   1))
+                    (job-spec (string-append "-j" (number->string job-count)))
+                    (make-flags* (cons job-spec make-flags)))
+               ;; Adapted from:
+               ;; https://github.com/dtolnay/bootstrap/blob/master/build.sh.
+               (chdir "mrustc")
+               (setenv "MINICARGO_FLAGS" job-spec)
+               (setenv "CARGO_BUILD_JOBS" (number->string job-count))
+               (display "Building rustc...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/rustc"
+                      make-flags*)
+               (display "Building cargo...\n")
+               (apply invoke "make" "-f" "minicargo.mk" "output/cargo"
+                      make-flags*)
+               (display "Rebuilding stdlib with rustc...\n")
+               (with-directory-excursion "run_rustc"
+                 (apply invoke "make" "RUST_SRC=../../src/" make-flags*)))))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (target-system ,(or (%current-target-system)
-                                        (nix-system->gnu-triplet
-                                         (%current-system))))
-                    (out-libs (string-append out "/lib/rustlib/"
-                                             target-system "/lib")))
-                                        ;(setenv "CFG_PREFIX" out)
-               (mkdir-p out-libs)
-               (copy-recursively "output/target-libs" out-libs)
-               (install-file "output/rustc-build/rustc"
-                             (string-append out "/bin"))
-               (install-file "output/rustc-build/rustdoc"
-                             (string-append out "/bin"))
-               (install-file "output/cargo-build/cargo"
-                             (string-append (assoc-ref outputs "cargo")
-                                            "/bin")))
-             #t)))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("bison" ,bison) ; For the tests
-       ("cmake" ,cmake-minimal)
-       ("flex" ,flex) ; For the tests
-       ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.
-       ;; See <https://bugs.gnu.org/37810>.  Use it on all Rusts for simplicity.
-       ("gdb" ,gdb-8.2) ; For the tests
-       ("procps" ,procps) ; For the tests
-       ("python-2" ,python-2)
-       ("rustc-bootstrap" ,mrustc)
-       ("cargo-bootstrap" ,mrustc "cargo")
-       ("pkg-config" ,pkg-config) ; For "cargo"
-       ("which" ,which)))
-    (inputs
-     `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)
-       ("openssl" ,openssl-1.0)
-       ("libssh2" ,libssh2) ; For "cargo"
-       ("libcurl" ,curl)))  ; For "cargo"
-
-    ;; rustc invokes gcc, so we need to set its search paths accordingly.
-    ;; Note: duplicate its value here to cope with circular dependencies among
-    ;; modules (see <https://bugs.gnu.org/31392>).
-    (native-search-paths
-     (list (search-path-specification
-            (variable "C_INCLUDE_PATH")
-            (files '("include")))
-           (search-path-specification
-            (variable "CPLUS_INCLUDE_PATH")
-            (files '("include/c++" "include")))
-           (search-path-specification
-            (variable "LIBRARY_PATH")
-            (files '("lib" "lib64")))))
-
-    (supported-systems
-     (delete "i686-linux"               ; fails to build, see #35519
-             %supported-systems))
+                    (cargo (assoc-ref outputs "cargo"))
+                    (bin (string-append out "/bin"))
+                    (rustc (string-append bin "/rustc"))
+                    (cargo-bin (string-append cargo "/bin"))
+                    (lib (string-append out "/lib"))
+                    (gnu-triplet ,(or (%current-target-system)
+                                      (nix-system->gnu-triplet-for-rust)))
+                    (system-lib-prefix (string-append lib "/rustlib/"
+                                                      gnu-triplet "/lib")))
+               (mkdir-p (dirname rustc))
+               (copy-file "run_rustc/output/prefix/bin/rustc_binary" rustc)
+               (wrap-program rustc
+                 `("LD_LIBRARY_PATH" = (,system-lib-prefix)))
+               (mkdir-p lib)
+               (copy-recursively "run_rustc/output/prefix/lib" lib)
+               (install-file "run_rustc/output/prefix/bin/cargo" cargo-bin)))))))
     (synopsis "Compiler for the Rust programming language")
     (description "Rust is a systems programming language that provides memory
 safety and thread safety guarantees.")
-    (home-page "https://www.rust-lang.org")
+    (home-page "https://github.com/thepowersgang/mrustc")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-1.20
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.19 "1.20.0"
-          "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      #t))
-          (patches '())))
-      (native-inputs
-       `(;; The tests fail with newer versions of GNU Make.
-         ("make" ,gnu-make-4.2)
-         ,@(package-native-inputs base-rust)))
-      (outputs '("out" "doc" "cargo"))
-      ;; Since rust-1.19 is local, it's quite probable that Hydra
-      ;; will build rust-1.19 only as a dependency of rust-1.20.
-      ;; But then Hydra will use the wrong properties, the ones here,
-      ;; for rust-1.19.  Therefore, we copied the properties of
-      ;; rust-1.19 here.
-      (properties '((timeout . 72000)               ;20 hours
-                    (max-silent-time . 18000)))     ;5 hours (for armel)
-      (arguments
-       (substitute-keyword-arguments (package-arguments rust-1.19)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-cargo-tests
-               (lambda _
-                 (substitute* "src/tools/cargo/tests/build.rs"
-                  (("/usr/bin/env") (which "env"))
-                  ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                  (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/death.rs"
-                  ;; This is stuck when built in container.
-                  (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; These tests pull in a dependency on "git", which changes
-                 ;; too frequently take part in the Rust toolchain.
-                 (substitute* "src/tools/cargo/tests/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'ignore-glibc-2.27-incompatible-test
-               ;; https://github.com/rust-lang/rust/issues/47863
-               (lambda _
-                 (substitute* "src/test/run-pass/out-of-stack.rs"
-                   (("// ignore-android") "// ignore-test\n// ignore-android"))
-                 #t))
-             (replace 'configure
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let* ((out (assoc-ref outputs "out"))
-                        (doc (assoc-ref outputs "doc"))
-                        (gcc (assoc-ref inputs "gcc"))
-                        (gdb (assoc-ref inputs "gdb"))
-                        (binutils (assoc-ref inputs "binutils"))
-                        (python (assoc-ref inputs "python-2"))
-                        (rustc (assoc-ref inputs "rustc-bootstrap"))
-                        (cargo (assoc-ref inputs "cargo-bootstrap"))
-                        (llvm (assoc-ref inputs "llvm"))
-                        (jemalloc (assoc-ref inputs "jemalloc")))
-                   (call-with-output-file "config.toml"
-                     (lambda (port)
-                       (display (string-append "
+(define-public rust-1.30
+  (package
+    (name "rust")
+    (version "1.30.1")
+    (source (origin
+              (inherit (package-source rust-1.29))
+              (uri (rust-uri version))
+              (sha256
+               (base32 "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn"))
+              (snippet '(for-each delete-file-recursively
+                                  '("src/jemalloc"
+                                    "src/llvm"
+                                    "src/llvm-emscripten"
+                                    "src/tools/clang"
+                                    "src/tools/lldb")))))
+    (outputs '("out" "cargo"))
+    (properties '((timeout . 72000)           ;20 hours
+                  (max-silent-time . 18000))) ;5 hours (for armel)
+    (build-system gnu-build-system)
+    (arguments
+     ;; Only the final Rust is tested, not the intermediate bootstrap ones,
+     ;; for performance and simplicity.
+     `(#:tests? #f
+       #:imported-modules ,%cargo-utils-modules ;for `generate-all-checksums'
+       #:modules ((guix build utils)
+                  (guix build gnu-build-system)
+                  (ice-9 match)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'set-env
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "SHELL" (which "sh"))
+             (setenv "CONFIG_SHELL" (which "sh"))
+             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
+             ;; The Guix LLVM package installs only shared libraries.
+             (setenv "LLVM_LINK_SHARED" "1")))
+         (add-after 'unpack 'neuter-tidy
+           ;; We often need to patch tests with various Guix-specific paths.
+           ;; This often increases the line length and makes tidy, rustc's
+           ;; style checker, complain.  We could insert additional newlines or
+           ;; add an "// ignore-tidy-linelength" comment, but as an ignore
+           ;; comment must be used, both approaches are fragile due to
+           ;; upstream formatting changes.  As such, disable running the
+           ;; linter during tests, since it's intended for rustc developers
+           ;; anyway.
+           (lambda _
+             (substitute* "src/bootstrap/builder.rs"
+               ((".*::Tidy,.*")
+                ""))))
+         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
+           (lambda* _
+             (use-modules (guix build cargo-utils))
+             (substitute* "src/Cargo.lock"
+               (("(\"checksum .* = )\".*\"" all name)
+                (string-append name "\"" ,%cargo-reference-hash "\"")))
+             (generate-all-checksums "src/vendor")))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (gcc (assoc-ref inputs "gcc"))
+                    (python (assoc-ref inputs "python"))
+                    (binutils (assoc-ref inputs "binutils"))
+                    (rustc (assoc-ref inputs "rustc-bootstrap"))
+                    (cargo (assoc-ref inputs "cargo-bootstrap"))
+                    (llvm (assoc-ref inputs "llvm"))
+                    (jemalloc (assoc-ref inputs "jemalloc")))
+               (call-with-output-file "config.toml"
+                 (lambda (port)
+                   (display (string-append "
 [llvm]
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
-docs = true
-python = \"" python "/bin/python2" "\"
-gdb = \"" gdb "/bin/gdb" "\"
+docs = false
+python = \"" python "/bin/python" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
-docdir = \"" doc "/share/doc/rust" "\"
 sysconfdir = \"etc\"
 [rust]
 default-linker = \"" gcc "/bin/gcc" "\"
 channel = \"stable\"
 rpath = true
-" ;; There are 2 failed codegen tests:
-;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
-;; These tests require a patched LLVM
-"codegen-tests = false
 [target." ,(nix-system->gnu-triplet-for-rust) "]
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
@@ -563,473 +383,110 @@ cxx = \"" gcc "/bin/g++" "\"
 ar = \"" binutils "/bin/ar" "\"
 jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
-") port)))
-                   #t)))
-             (add-after 'configure 'provide-cc
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (symlink (string-append (assoc-ref inputs "gcc") "/bin/gcc")
-                          "/tmp/cc")
-                 (setenv "PATH" (string-append "/tmp:" (getenv "PATH")))
-                 #t))
-             (add-after 'provide-cc 'configure-archiver
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (substitute* "src/build_helper/lib.rs"
-                  ;; Make sure "ar" is always used as the archiver.
-                  (("\"musl\"") "\"\"")
-                  ;; Then substitute "ar" by our name.
-                  (("\"ar\"") (string-append "\""
-                               (assoc-ref inputs "binutils")
-                               "/bin/ar\"")))
-                 #t))
-             (delete 'patch-cargo-tomls)
-             (add-before 'build 'reset-timestamps-after-changes
-               (lambda* _
-                 (for-each
-                  (lambda (filename)
-                    ;; Rust 1.20.0 treats timestamp 0 as "file doesn't exist".
-                    ;; Therefore, use timestamp 1.
-                    (utime filename 1 1 1 1))
-                  (find-files "." #:directories? #t))
-                 #t))
-             (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")))
-             (replace 'check
-               (lambda* _
-                 ;; Disable parallel execution to prevent EAGAIN errors when
-                 ;; running tests.
-                 (invoke "./x.py" "-j1" "test" "-vv")
-                 (invoke "./x.py" "-j1" "test" "src/tools/cargo")
-                 #t))
-             (replace 'install
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (invoke "./x.py" "install")
-                 (substitute* "config.toml"
-                   ;; replace prefix to specific output
-                   (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
-                 (invoke "./x.py" "install" "cargo")))
-             (add-after 'install 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   #t)))
-             (add-after 'install 'wrap-rustc
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out"))
-                       (libc (assoc-ref inputs "libc"))
-                       (ld-wrapper (assoc-ref inputs "ld-wrapper")))
-                   ;; Let gcc find ld and libc startup files.
-                   (wrap-program (string-append out "/bin/rustc")
-                     `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
-                     `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib"))))
-                   #t))))))))))
-
-(define-public rust-1.21
-  (let ((base-rust (rust-bootstrapped-package rust-1.20 "1.21.0"
-                    "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'configure 'remove-ar
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; Remove because toml complains about "unknown field".
-                 (substitute* "config.toml"
-                  (("^ar =.*") "\n"))
-                 #t)))))))))
-
-(define-public rust-1.22
-  (let ((base-rust (rust-bootstrapped-package rust-1.21 "1.22.1"
-                    "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'remove-flaky-test
-               (lambda _
-                 ;; See <https://github.com/rust-lang/rust/issues/43402>.
-                 (when (file-exists? "src/test/run-make/issue-26092")
-                   (delete-file-recursively "src/test/run-make/issue-26092"))
-                 #t)))))))))
-
-(define-public rust-1.23
-  (let ((base-rust (rust-bootstrapped-package rust-1.22 "1.23.0"
-                    "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'configure-archiver)
-             (delete 'remove-ar)
-             (add-after 'unpack 'dont-build-native
-               (lambda _
-                 ;; XXX: Revisit this when we use gcc 6.
-                 (substitute* "src/binaryen/CMakeLists.txt"
-                  (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
-                 #t)))))))))
-
-(define-public rust-1.24
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.23 "1.24.1"
-          "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'use-readelf-for-tests)
-             (replace 'patch-aarch64-test
-               (lambda* _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 #t)))))))))
-
-;;; Rust 1.25 release support work with llvm 6--but build with llvm 6 is
-;;; not determenistic due to <https://github.com/rust-lang/rust/issues/50556>.
-;;; Keep using llvm 3.9.1 until builds become determenistic
-(define-public rust-1.25
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.24 "1.25.0"
-          "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      #t))
-          (patches (search-patches
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-index-update
-               (lambda _
-                 (substitute* "src/tools/cargo/tests/generate-lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))
-             (replace 'patch-aarch64-test
-               (lambda _
-                 (substitute* "src/librustc_metadata/dynamic_lib.rs"
-                   ;; This test is known to fail on aarch64 and powerpc64le:
-                   ;; https://github.com/rust-lang/rust/issues/45410
-                   (("fn test_loading_cosine") "#[ignore]\nfn test_loading_cosine"))
-                 ;; This test fails on aarch64 with llvm@6.0:
-                 ;; https://github.com/rust-lang/rust/issues/49807
-                 ;; other possible solution:
-                 ;; https://github.com/rust-lang/rust/pull/47688
-                 (delete-file "src/test/debuginfo/by-value-self-argument-in-trait-impl.rs")
-                 #t))
-             (delete 'ignore-glibc-2.27-incompatible-test))))))))
-
-(define-public rust-1.26
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.25 "1.26.2"
-          "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches
-                     "rust-coresimd-doctest.patch"
-                     "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
-      (inputs
-       (alist-replace "openssl" (list openssl)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; binaryen was replaced with LLD project from LLVM
-             (delete 'dont-build-native)
-             (replace 'check
-               (lambda* _
-                 ;; Enable parallel execution.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo"))))
-             (replace 'remove-unsupported-tests
-               (lambda* _
-                 ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
-                 ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
-                 (delete-file-recursively "src/test/run-make-fulldeps/linker-output-non-utf8")
-                 #t))
-             (replace 'patch-cargo-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/build.rs"
-                   (("/usr/bin/env") (which "env"))
-                   ;; Guix llvm is compiled without asmjs-unknown-emscripten.
-                   (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-                 (substitute* "src/tools/cargo/tests/testsuite/death.rs"
-                   ;; This is stuck when built in container.
-                   (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-                 ;; Prints test output in the wrong order when built on
-                 ;; i686-linux.
-                 (substitute* "src/tools/cargo/tests/testsuite/test.rs"
-                   (("fn cargo_test_env") "#[ignore]\nfn cargo_test_env"))
-
-                 ;; Avoid dependency on "git".
-                 (substitute* "src/tools/cargo/tests/testsuite/new.rs"
-                   (("fn author_prefers_cargo") "#[ignore]\nfn author_prefers_cargo")
-                   (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
-                   (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel
-               (lambda* _
-                 ;; This test failed to work on "nightly" channel builds
-                 ;; https://github.com/rust-lang/cargo/issues/5648
-                 (substitute* "src/tools/cargo/tests/testsuite/resolve.rs"
-                   (("fn test_resolving_minimum_version_with_transitive_deps")
-                    "#[ignore]\nfn test_resolving_minimum_version_with_transitive_deps"))
-                 #t))
-             (replace 'patch-cargo-index-update
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/generate_lockfile.rs"
-                   ;; This test wants to update the crate index.
-                   (("fn no_index_update") "#[ignore]\nfn no_index_update"))
-                 #t))))))
-      (supported-systems
-       (delete "aarch64-linux"          ; fails to build, see #47019
-               (package-supported-systems base-rust))))))
-
-(define-public rust-1.27
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.26 "1.27.2"
-          "0pg1s37bhx9zqbynxyydq5j6q7kij9vxkcv8maz0m25prm88r0cs")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'install 'mkdir-prefix-paths
-               (lambda* (#:key outputs #:allow-other-keys)
-                 ;; As result of https://github.com/rust-lang/rust/issues/36989
-                 ;; `prefix' directory should exist before `install' call
-                 (mkdir-p (assoc-ref outputs "out"))
-                 (mkdir-p (assoc-ref outputs "cargo"))
-                 #t))
-             (add-after 'patch-cargo-tests 'disable-thinlto-test
-               (lambda* _
-                 ;; thinlto required llvm 6.0 for work
-                 (substitute* "src/tools/cargo/tests/testsuite/path.rs"
-                   (("fn thin_lto_works") "#[ignore]\nfn thin_lto_works"))
-                 #t)))))))))
-
-(define-public rust-1.28
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.27 "1.28.0"
-          "11k4rn77bca2rikykkk9fmprrgjswd4x4kaq7fia08vgkir82nhx")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-coresimd-doctest.patch"
-                                   "rust-bootstrap-stage0-test.patch"
-                                   "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch"))))
-      (inputs
-       ;; Use LLVM 6.0
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'configure 'enable-codegen-tests
-               ;; Codegen tests should pass with llvm 6, so enable them.
-               (lambda* _
-                 (substitute* "config.toml"
-                   (("codegen-tests = false") ""))
-                 #t))
-             (add-after 'patch-tests 'disable-amd64-avx-test
-               ;; That test would fail on x86_64 machines without avx.
-               (lambda* _
-                 (substitute* "src/test/run-pass/issue-44056.rs"
-                   (("only-x86_64") "ignore-test"))
-                 #t))
-             ;; This is no longer needed as of 1.28
-             (delete 'disable-cargo-test-for-nightly-channel)
-             ;; The thinlto test should pass with llvm 6.
-             (delete 'disable-thinlto-test))))))))
-
-(define-public rust-1.29
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.28 "1.29.2"
-          "1jb787080z754caa2w3w1amsygs4qlzj9rs1vy64firfmabfg22h")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.25-accept-more-detailed-gdb-lines.patch"
-                                   "rust-reproducible-builds.patch")))))))
-
-(define-public rust-1.30
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.29 "1.30.1"
-          "0aavdc1lqv0cjzbqwl5n59yd0bqdlhn0zas61ljf38yrvc18k8rn")))
-    (package
-      (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/jemalloc")
-                      (delete-file-recursively "src/llvm")
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/tools/clang")
-                      (delete-file-recursively "src/tools/lldb")
-                      #t))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-cargo-tests 'patch-cargo-env-shebang
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((coreutils (assoc-ref inputs "coreutils")))
-                   (substitute* "src/tools/cargo/tests/testsuite/fix.rs"
-                     ;; Cargo has a test which explicitly sets a
-                     ;; RUSTC_WRAPPER environment variable which points
-                     ;; to /usr/bin/env. Since it's not a shebang, it
-                     ;; needs to be manually patched
-                     (("\"/usr/bin/env\"")
-                      (string-append "\"" coreutils "/bin/env\"")))
-                   #t)))
-             (add-after 'patch-cargo-env-shebang 'ignore-cargo-package-tests
-               (lambda* _
-                 (substitute* "src/tools/cargo/tests/testsuite/package.rs"
-                   ;; These tests largely check that cargo outputs warning/error
-                   ;; messages as expected. It seems that cargo outputs an
-                   ;; absolute path to something in the store instead of the
-                   ;; expected relative path (e.g. `[..]`) so we'll ignore
-                   ;; these for now
-                   (("fn include") "#[ignore]\nfn include")
-                   (("fn exclude") "#[ignore]\nfn exclude"))
-                   #t))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
-               (lambda _
-                 (substitute* "src/test/ui/run-pass/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                  #t)))))))))
-
-(define (patch-command-exec-tests-phase test-path)
-  "The command-exec.rs test moves around between releases.  We need to apply
-a Guix-specific patch to it for each release.  This function generates the phase
-that applies said patch, parametrized by the test-path.  This is done this way
-because the phase is more complex than the equivalents for other tests that
-move around."
- `(lambda* (#:key inputs #:allow-other-keys)
-    (let ((coreutils (assoc-ref inputs "coreutils")))
-      (substitute* ,test-path
-        ;; This test suite includes some tests that the stdlib's
-        ;; `Command` execution properly handles situations where
-        ;; the environment or PATH variable are empty, but this
-        ;; fails since we don't have `echo` available in the usual
-        ;; Linux directories.
-        ;; NB: the leading space is so we don't fail a tidy check
-        ;; for trailing whitespace, and the newlines are to ensure
-        ;; we don't exceed the 100 chars tidy check as well
-        ((" Command::new\\(\"echo\"\\)")
-         (string-append "\nCommand::new(\"" coreutils "/bin/echo\")\n")))
-      #t)))
+") port))))))
+         (replace 'build
+           (lambda* (#:key parallel-build? #:allow-other-keys)
+             (let ((job-spec (string-append
+                              "-j" (if parallel-build?
+                                       (number->string (parallel-job-count))
+                                       "1"))))
+               (invoke "./x.py" job-spec "build")
+               (invoke "./x.py" job-spec "build" "src/tools/cargo"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (cargo-out (assoc-ref outputs "cargo")))
+               (mkdir-p out)
+               (invoke "./x.py" "install")
+               (substitute* "config.toml"
+                 ;; Adjust the prefix to the 'cargo' output.
+                 (("prefix = \"[^\"]*\"")
+                  (format #f "prefix = ~s" cargo-out)))
+               (mkdir-p cargo-out)
+               (invoke "./x.py" "install" "cargo"))))
+         (add-after 'install 'delete-install-logs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (for-each (lambda (f)
+                         (false-if-exception (delete-file f)))
+                       (append-map (lambda (output)
+                                     (find-files (string-append
+                                                  output "/lib/rustlib")
+                                                 "(^install.log$|^manifest-)"))
+                                   (map cdr outputs)))))
+         (add-after 'install 'wrap-rustc
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (libc (assoc-ref inputs "libc"))
+                   (ld-wrapper (assoc-ref inputs "ld-wrapper")))
+               ;; Let gcc find ld and libc startup files.
+               (wrap-program (string-append out "/bin/rustc")
+                 `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
+                 `("LIBRARY_PATH" ":"
+                   suffix (,(string-append libc "/lib"))))))))))
+    (native-inputs
+     `(("cmake" ,cmake-minimal)
+       ("pkg-config" ,pkg-config)       ; For "cargo"
+       ("python" ,python-wrapper)
+       ("rustc-bootstrap" ,rust-1.29)
+       ("cargo-bootstrap" ,rust-1.29 "cargo")
+       ("which" ,which)))
+    (inputs
+     `(("jemalloc" ,jemalloc-4.5.0)
+       ("llvm" ,llvm-7)
+       ("openssl" ,openssl)
+       ("libssh2" ,libssh2)             ; For "cargo"
+       ("libcurl" ,curl)))              ; For "cargo"
+    ;; rustc invokes gcc, so we need to set its search paths accordingly.
+    ;; Note: duplicate its value here to cope with circular dependencies among
+    ;; modules (see <https://bugs.gnu.org/31392>).
+    (native-search-paths
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include/c++" "include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib" "lib64")))))
+    (supported-systems
+     (delete "i686-linux"  ; fails to build, see bug #35519
+             %supported-systems))
+    (synopsis "Compiler for the Rust progamming language")
+    (description "Rust is a systems programming language that provides memory
+safety and thread safety guarantees.")
+    (home-page "https://www.rust-lang.org")
+    ;; Dual licensed.
+    (license (list license:asl2.0 license:expat))))
 
 (define-public rust-1.31
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.30 "1.31.1"
-          "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'patch-tests 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/run-pass/command-exec.rs"))
-             ;; The test has been moved elsewhere.
-             (replace 'disable-amd64-avx-test
-               (lambda _
-                 (substitute* "src/test/ui/issues/issue-44056.rs"
-                  (("only-x86_64") "ignore-test"))
-                 #t))
-             (add-after 'patch-tests 'patch-process-docs-rev-cmd
-               (lambda* _
-                 ;; Disable some doc tests which depend on the "rev" command
-                 ;; https://github.com/rust-lang/rust/pull/58746
-                 (substitute* "src/libstd/process.rs"
-                   (("```rust") "```rust,no_run"))
-                 #t)))))))))
+  (rust-bootstrapped-package
+   rust-1.30 "1.31.1" "0sk84ff0cklybcp0jbbxcw7lk7mrm6kb6km5nzd6m64dy0igrlli"))
 
 (define-public rust-1.32
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.31 "1.32.0"
-          "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.31 "1.32.0"
+                    "0ji2l9xv53y27xy72qagggvq47gayr5lcv2jwvmfirx029vlqnac")))
     (package
       (inherit base-rust)
       (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin (delete-file-recursively "src/llvm")
-                           (delete-file-recursively "src/llvm-emscripten")
-                           (delete-file-recursively "src/tools/clang")
-                           (delete-file-recursively "src/tools/lldb")
-                           (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                           #t))
-          (patches (search-patches "rust-reproducible-builds.patch"))
+       (origin
+         (inherit (package-source base-rust))
+         (snippet '(for-each delete-file-recursively
+                             '("src/llvm"
+                               "src/llvm-emscripten"
+                               "src/tools/clang"
+                               "src/tools/lldb"
+                               "vendor/jemalloc-sys/jemalloc")))
           ;; the vendor directory has moved to the root of
           ;; the tarball, so we have to strip an extra prefix
-          (patch-flags '("-p2"))))
-      (inputs
-       ;; Downgrade to LLVM 6, all LTO tests appear to fail with LLVM 7.0.1
-       (alist-replace "llvm" (list llvm-6)
-                      (package-inputs base-rust)))
+         (patch-flags '("-p2"))))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ;; The test suite fails due to LLVM 7, required for the build to be
+         ;; reproducible.
+         ((#:tests? _ #t)
+          #f)
          ((#:phases phases)
           `(modify-phases ,phases
              ;; Cargo.lock and the vendor/ directory have been moved to the
@@ -1040,9 +497,8 @@ move around."
                  (substitute* "Cargo.lock"
                    (("(\"checksum .* = )\".*\"" all name)
                     (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t))
-             (add-after 'enable-codegen-tests 'override-jemalloc
+                 (generate-all-checksums "vendor")))
+             (add-after 'configure 'override-jemalloc
                (lambda* (#:key inputs #:allow-other-keys)
                  ;; The compiler is no longer directly built against jemalloc,
                  ;; but rather via the jemalloc-sys crate (which vendors the
@@ -1052,96 +508,59 @@ move around."
                  (substitute* "config.toml"
                    (("^jemalloc =.*$") "")
                    (("[[]rust[]]") "\n[rust]\njemalloc=true\n"))
-                 (setenv "JEMALLOC_OVERRIDE" (string-append (assoc-ref inputs "jemalloc")
-                                                            "/lib/libjemalloc_pic.a"))
-                 #t))
-             ;; Remove no longer relevant steps
-             (delete 'remove-flaky-test)
-             (delete 'patch-aarch64-test))))))))
+                 (setenv "JEMALLOC_OVERRIDE"
+                         (string-append (assoc-ref inputs "jemalloc")
+                                        "/lib/libjemalloc_pic.a")))))))))))
 
 (define-public rust-1.33
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.32 "1.33.0"
-           "152x91mg7bz4ygligwjb05fgm1blwy2i70s2j03zc9jiwvbsh0as")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.32 "1.33.0"
+                    "152x91mg7bz4ygligwjb05fgm1blwy2i70s2j03zc9jiwvbsh0as")))
     (package
       (inherit base-rust)
       (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches '())
-          (patch-flags '("-p1"))))
+       (origin
+         (inherit (package-source base-rust))
+         (patches '())
+         (patch-flags '("-p1"))))
       (inputs
-       ;; Upgrade to jemalloc@5.1.0
-       (alist-replace "jemalloc" (list jemalloc)
-                      (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'ignore-cargo-package-tests)
-             (add-after 'configure 'configure-test-threads
-               ;; Several rustc and cargo tests will fail if run on one core
-               ;; https://github.com/rust-lang/rust/issues/59122
-               ;; https://github.com/rust-lang/cargo/issues/6746
-               ;; https://github.com/rust-lang/rust/issues/58907
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (setenv "RUST_TEST_THREADS" "2")
-                 #t)))))))))
+       ;; Upgrade jemalloc.
+       (alist-replace "jemalloc" (list jemalloc) (package-inputs base-rust))))))
 
 (define-public rust-1.34
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.33 "1.34.1"
-           "19s09k7y5j6g3y4d2rk6kg9pvq6ml94c49w6b72dmq8p9lk8bixh")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.33 "1.34.1"
+                    "19s09k7y5j6g3y4d2rk6kg9pvq6ml94c49w6b72dmq8p9lk8bixh")))
     (package
       (inherit base-rust)
       (source
-        (origin
-          (inherit (package-source base-rust))
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-emscripten")
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t)))))))
+       (origin
+         (inherit (package-source base-rust))
+         (snippet '(for-each delete-file-recursively
+                             '("src/llvm-emscripten"
+                               "src/llvm-project"
+                               "vendor/jemalloc-sys/jemalloc"))))))))
 
 (define-public rust-1.35
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.34 "1.35.0"
-           "0bbizy6b7002v1rdhrxrf5gijclbyizdhkglhp81ib3bf5x66kas")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.34 "1.35.0"
+                    "0bbizy6b7002v1rdhrxrf5gijclbyizdhkglhp81ib3bf5x66kas")))
     (package
       (inherit base-rust)
-      (inputs
-       (alist-replace "llvm" (list llvm-8)
-                      (package-inputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
           `(modify-phases ,phases
-             ;; The tidy test includes a pass which ensures large binaries
-             ;; don't accidentally get checked into the rust git repo.
-             ;; Unfortunately the test assumes that git is always available,
-             ;; so we'll comment out the invocation of this pass.
-             (add-after 'configure 'disable-tidy-bins-check
-               (lambda* _
-                 (substitute* "src/tools/tidy/src/main.rs"
-                   (("bins::check") "//bins::check"))
-                 #t)))))))))
+             (delete 'disable-codegen-tests))))))))
 
 (define-public rust-1.36
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.35 "1.36.0"
-           "06xv2p6zq03lidr0yaf029ii8wnjjqa894nkmrm6s0rx47by9i04")))
-    (package
-      (inherit base-rust)
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'patch-process-docs-rev-cmd))))))))
+  (rust-bootstrapped-package
+   rust-1.35 "1.36.0" "06xv2p6zq03lidr0yaf029ii8wnjjqa894nkmrm6s0rx47by9i04"))
 
 (define-public rust-1.37
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.36 "1.37.0"
-           "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.36 "1.37.0"
+                    "1hrqprybhkhs6d9b5pjskfnc5z9v2l2gync7nb39qjb5s0h703hj")))
     (package
       (inherit base-rust)
       (arguments
@@ -1152,36 +571,16 @@ move around."
                (lambda _
                  (let ((cargo-home (string-append (getcwd) "/.cargo")))
                    (mkdir-p cargo-home)
-                   (setenv "CARGO_HOME" cargo-home)
-                   #t))))))))))
+                   (setenv "CARGO_HOME" cargo-home)))))))))))
 
 (define-public rust-1.38
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.37 "1.38.0"
-           "101dlpsfkq67p0hbwx4acqq6n90dj4bbprndizpgh1kigk566hk4")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-9)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'patch-command-exec-tests
-               ,(patch-command-exec-tests-phase
-                  "src/test/ui/command-exec.rs"))
-             (add-after 'patch-tests 'patch-command-uid-gid-test
-               (lambda _
-                 (substitute* "src/test/ui/command-uid-gid.rs"
-                   (("/bin/sh") (which "sh"))
-                   (("ignore-sgx") "ignore-sgx\n// ignore-tidy-linelength"))
-                 #t)))))))))
+  (rust-bootstrapped-package
+    rust-1.37 "1.38.0" "101dlpsfkq67p0hbwx4acqq6n90dj4bbprndizpgh1kigk566hk4"))
 
 (define-public rust-1.39
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.38 "1.39.0"
-           "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.38 "1.39.0"
+                    "0mwkc1bnil2cfyf6nglpvbn2y0zfbv44zfhsd5qg4c9rm6vgd8dl")))
     (package
       (inherit base-rust)
       (arguments
@@ -1195,136 +594,85 @@ move around."
                  (substitute* "Cargo.lock"
                    (("(checksum = )\".*\"" all name)
                     (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
+                 (generate-all-checksums "vendor"))))))))))
 
 (define-public rust-1.40
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.39 "1.40.0"
-           "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.39 "1.40.0"
+                    "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx")))
     (package
       (inherit base-rust)
       (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; llvm-emscripten is no longer bundled, as that codegen backend
-          ;; got removed.
-          (snippet '(begin
-                      (delete-file-recursively "src/llvm-project")
-                      (delete-file-recursively "vendor/jemalloc-sys/jemalloc")
-                      #t))))
-      (arguments
-       ;; Rust 1.40 does not ship rustc-internal libraries by default
-       ;; (see rustc-dev-split). This means that librustc_driver.so is no
-       ;; longer available in lib/rustlib/$target/lib, which is the directory
-       ;; included in the runpath of librustc_codegen_llvm-llvm.so.
-       ;; This is detected by our validate-runpath phase as an error, but it
-       ;; is harmless as the codegen backend is loaded by librustc_driver.so
-       ;; itself, which must at that point have been already loaded.
-       ;; As such, we skip validating the runpath for Rust 1.40.
-       ;; Rust 1.41 stopped putting the codegen backend in a separate library,
-       ;; which makes this workaround only necessary for this release.
-       (cons* #:validate-runpath? #f
-         (substitute-keyword-arguments (package-arguments base-rust)
-           ((#:phases phases)
-            `(modify-phases ,phases
-               ;; We often need to patch tests with various Guix-specific paths.
-               ;; This often increases the line length and makes tidy, rustc's
-               ;; style checker, complain. We could insert additional newlines
-               ;; or add an "// ignore-tidy-linelength" comment, but as an
-               ;; ignore comment must be used, both approaches are fragile due
-               ;; to upstream formatting changes. As such, disable running the
-               ;; linter during tests, since it's intended for rustc developers
-               ;; anyway.
-               ;;
-               ;; TODO(rebuild-rust): This phase could be added earlier to
-               ;; simplify a significant amount of code, but it would require
-               ;; rebuilding the entire rusty universe.
-               (add-after 'patch-tests 'neuter-tidy
-                 (lambda _
-                   (substitute* "src/bootstrap/builder.rs"
-                     (("^.*::Tidy,") ""))
-                   #t))
-               ;; TODO(rebuild-rust): Adapt the find-files approach for
-               ;; earlier testsuite patches.
-               (replace 'patch-command-uid-gid-test
-                 (lambda _
-                   (match (find-files "src/test" "command-uid-gid\\.rs")
-                     ((file)
-                      (substitute* file
-                        (("/bin/sh") (which "sh")))))
-                   #t))
-               (replace 'patch-command-exec-tests
-                 ,(patch-command-exec-tests-phase
-                    '(match (find-files "src/test" "command-exec\\.rs")
-                       ((file) file))))
-               ;; The test got removed in commit 000fe63b6fc57b09828930cacbab20c2ee6e6d15
-               ;; "Remove painful test that is not pulling its weight"
-               (delete 'remove-unsupported-tests)))))))))
+       (origin
+         (inherit (package-source base-rust))
+         ;; llvm-emscripten is no longer bundled, as that codegen backend
+         ;; got removed.
+         (snippet '(for-each delete-file-recursively
+                             '("src/llvm-project"
+                               "vendor/jemalloc-sys/jemalloc")))))
+       ;; Rust 1.40 does not ship rustc-internal libraries by default (see
+       ;; rustc-dev-split). This means that librustc_driver.so is no longer
+       ;; available in lib/rustlib/$target/lib, which is the directory
+       ;; included in the runpath of librustc_codegen_llvm-llvm.so.  This is
+       ;; detected by our validate-runpath phase as an error, but it is
+       ;; harmless as the codegen backend is loaded by librustc_driver.so
+       ;; itself, which must at that point have been already loaded.  As such,
+       ;; we skip validating the runpath for Rust 1.40.  Rust 1.41 stopped
+       ;; putting the codegen backend in a separate library, which makes this
+       ;; workaround only necessary for this release.
+      (arguments (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:validate-runpath? _ #f)
+          #f))))))
 
 (define-public rust-1.41
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.40 "1.41.1"
-           "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.40 "1.41.1"
+                    "0ws5x0fxv57fyllsa6025h3q6j9v3m8nb3syl4x0hgkddq0kvj9q")))
     (package
       (inherit base-rust)
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:validate-runpath? _) #t))))))
+         ((#:validate-runpath? _ #t)
+          #t))))))
 
 (define-public rust-1.42
-  (rust-bootstrapped-package rust-1.41 "1.42.0"
-    "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
+  (rust-bootstrapped-package
+   rust-1.41 "1.42.0" "0x9lxs82may6c0iln0b908cxyn1cv7h03n5cmbx3j1bas4qzks6j"))
 
 (define-public rust-1.43
-  (rust-bootstrapped-package rust-1.42 "1.43.0"
-    "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
+  (rust-bootstrapped-package
+   rust-1.42 "1.43.0" "18akhk0wz1my6y9vhardriy2ysc482z0fnjdcgs9gy59kmnarxkm"))
 
+;; This version needs llvm >= 8.0 and NOT 11
 (define-public rust-1.44
-  (rust-bootstrapped-package rust-1.43 "1.44.1"
-    "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky"))
+  (let ((base-rust  (rust-bootstrapped-package
+                      rust-1.43 "1.44.1"
+                      "0ww4z2v3gxgn3zddqzwqya1gln04p91ykbrflnpdbmcd575n8bky")))
+    (package
+      (inherit base-rust)
+      (inputs
+       (alist-replace "llvm" (list llvm-10) (package-inputs base-rust))))))
 
 (define-public rust-1.45
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.44 "1.45.2"
-           "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.44 "1.45.2"
+                    "0273a1g3f59plyi1n0azf21qjzwml1yqdnj5z472crz37qggr8xp")))
     (package
       (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          (patches (search-patches "rust-1.45-linker-locale.patch"))))
-      (inputs
-        (alist-replace "llvm" (list llvm-10)
-                       (package-inputs base-rust)))
       (arguments
-        (substitute-keyword-arguments (package-arguments base-rust)
-          ((#:phases phases)
-           `(modify-phases ,phases
-              ;; These tests make sure that the parser behaves properly when
-              ;; a source file starts with a shebang. Unfortunately,
-              ;; the patch-shebangs phase changes the meaning of these edge-cases.
-              ;; We skip the test since it's drastically unlikely Guix's packaging
-              ;; will introduce a bug here.
-              (add-after 'patch-tests 'skip-shebang-tests
-                (lambda _
-                  (with-directory-excursion "src/test/ui/parser/shebang"
-                    (delete-file "shebang-doc-comment.rs")
-                    (delete-file "sneaky-attrib.rs")
-                    #t)))
-              ;; This test case synchronizes itself by starting a localhost TCP
-              ;; server. This doesn't work as networking is not available.
-              (add-after 'patch-tests 'skip-networking-test
-                (lambda _
-                  (substitute* "src/tools/cargo/tests/testsuite/freshness.rs"
-                    (("fn linking_interrupted" all)
-                     (string-append "#[ignore] " all)))
-                 #t)))))))))
+       (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'set-linker-locale-to-utf8
+               (lambda _
+                 (substitute* (find-files "." "^linker.rs$")
+                   (("linker.env\\(\"LC_ALL\", \"C\"\\);")
+                    "linker.env(\"LC_ALL\", \"en_US.UTF-8\");")))))))))))
 
 (define-public rust-1.46
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.45 "1.46.0"
-           "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid")))
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.45 "1.46.0"
+                    "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid")))
     (package
       (inherit base-rust)
       (outputs (cons "rustfmt" (package-outputs base-rust)))
@@ -1333,128 +681,161 @@ move around."
          ((#:phases phases)
           `(modify-phases ,phases
              (replace 'build
-               (lambda* _
-                 (invoke "./x.py" "build")
-                 (invoke "./x.py" "build" "src/tools/cargo")
-                 (invoke "./x.py" "build" "src/tools/rustfmt")))
+               ;; Phase overridden to also build rustfmt.
+               (lambda* (#:key parallel-build? #:allow-other-keys)
+                 (let ((job-spec (string-append
+                                  "-j" (if parallel-build?
+                                           (number->string (parallel-job-count))
+                                           "1"))))
+                   (invoke "./x.py" job-spec "build")
+                   (invoke "./x.py" job-spec "build" "src/tools/cargo")
+                   (invoke "./x.py" job-spec "build" "src/tools/rustfmt"))))
              (replace 'check
-               (lambda* _
-                 ;; Test rustfmt.
-                 (let ((parallel-job-spec
-                        (string-append "-j" (number->string
-                                             (min 4
-                                                  (parallel-job-count))))))
-                   (invoke "./x.py" parallel-job-spec "test" "-vv")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/cargo")
-                   (invoke "./x.py" parallel-job-spec "test"
-                           "src/tools/rustfmt"))))
+               ;; Phase overridden to also test rustfmt.
+               (lambda* (#:key tests? parallel-build? #:allow-other-keys)
+                 (when tests?
+                   (let ((job-spec (string-append
+                                    "-j" (if parallel-build?
+                                             (number->string (parallel-job-count))
+                                             "1"))))
+                     (invoke "./x.py" job-spec "test" "-vv")
+                     (invoke "./x.py" job-spec "test" "src/tools/cargo")
+                     (invoke "./x.py" job-spec "test" "src/tools/rustfmt")))))
              (replace 'install
+               ;; Phase overridden to also install rustfmt.
                (lambda* (#:key outputs #:allow-other-keys)
                  (invoke "./x.py" "install")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'cargo' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                    (format #f "prefix = ~s" (assoc-ref outputs "cargo"))))
                  (invoke "./x.py" "install" "cargo")
                  (substitute* "config.toml"
-                   ;; replace prefix to specific output
+                   ;; Adjust the prefix to the 'rustfmt' output.
                    (("prefix = \"[^\"]*\"")
-                    (string-append "prefix = \"" (assoc-ref outputs "rustfmt") "\"")))
-                 (invoke "./x.py" "install" "rustfmt")))
-             (replace 'delete-install-logs
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (define (delete-manifest-file out-path file)
-                   (delete-file (string-append out-path "/lib/rustlib/" file)))
-
-                 (let ((out (assoc-ref outputs "out"))
-                       (cargo-out (assoc-ref outputs "cargo"))
-                       (rustfmt-out (assoc-ref outputs "rustfmt")))
-                   (for-each
-                     (lambda (file) (delete-manifest-file out file))
-                     '("install.log"
-                       "manifest-rust-docs"
-                       ,(string-append "manifest-rust-std-"
-                                       (nix-system->gnu-triplet-for-rust))
-                       "manifest-rustc"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file cargo-out file))
-                     '("install.log"
-                       "manifest-cargo"))
-                   (for-each
-                     (lambda (file) (delete-manifest-file rustfmt-out file))
-                     '("install.log"
-                       "manifest-rustfmt-preview"))
-                   #t))))))))))
+                    (format #f "prefix = ~s" (assoc-ref outputs "rustfmt"))))
+                 (invoke "./x.py" "install" "rustfmt"))))))))))
 
 (define-public rust-1.47
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.46 "1.47.0"
-          "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i")))
-    (package
-      (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-11)
-                       (package-inputs base-rust)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base-rust)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             ;; The source code got rearranged: libstd is now in the newly created library folder.
-             (replace 'patch-tests
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((bash (assoc-ref inputs "bash")))
-                   (substitute* "library/std/src/process.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
-                   ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00222.html>
-                   (substitute* "library/std/src/sys/unix/process/process_common.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
-    #[ignore]
-    fn test_process_mask"))
-                   #t)))
-             (delete 'patch-cargo-checksums)
-             (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-               ;; Generate checksums after patching generated files (in
-               ;; particular, vendor/jemalloc/rep/Makefile).
-               (lambda* _
-                 (use-modules (guix build cargo-utils))
-                 (substitute* "Cargo.lock"
-                   (("(checksum = )\".*\"" all name)
-                    (string-append name "\"" ,%cargo-reference-hash "\"")))
-                 (generate-all-checksums "vendor")
-                 #t)))))))))
+  (rust-bootstrapped-package
+    rust-1.46 "1.47.0" "07fqd2vp7cf1ka3hr207dnnz93ymxml4935vp74g4is79h3dz19i"))
 
 (define-public rust-1.48
-  (let ((base-rust
-         (rust-bootstrapped-package rust-1.47 "1.48.0"
-           "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf")))
+  (rust-bootstrapped-package
+   rust-1.47 "1.48.0" "0fz4gbb5hp5qalrl9lcl8yw4kk7ai7wx511jb28nypbxninkwxhf"))
+
+(define-public rust-1.49
+  (let ((base-rust (rust-bootstrapped-package
+                    rust-1.48 "1.49.0"
+                    "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm")))
     (package
       (inherit base-rust)
-      (source
-        (origin
-          (inherit (package-source base-rust))
-          ;; New patch required due to the second part of the source code rearrangement:
-          ;; the relevant source code is now in the compiler directory.
-          (patches (search-patches "rust-1.48-linker-locale.patch"))))
+      (outputs (cons "doc" (package-outputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:tests? _ #f)
+          #t)
          ((#:phases phases)
           `(modify-phases ,phases
-             ;; Some tests got split out into separate files.
-             (replace 'patch-tests
+             (add-after 'unpack 'relax-gdb-auto-load-safe-path
+               ;; Allow GDB to load binaries from any location, otherwise the
+               ;; gdbinfo tests fail.  This is only useful when testing with a
+               ;; GDB version newer than 8.2.
+               (lambda _
+                 (setenv "HOME" (getcwd))
+                 (with-output-to-file (string-append (getenv "HOME") "/.gdbinit")
+                   (lambda _
+                     (format #t "set auto-load safe-path /~%")))
+                 ;; Do not launch gdb with '-nx' which causes it to not execute
+                 ;; any init file.
+                 (substitute* "src/tools/compiletest/src/runtest.rs"
+                   (("\"-nx\".as_ref\\(\\), ")
+                    ""))))
+             (add-after 'unpack 'patch-cargo-env-shebang
+               (lambda _
+                 (substitute* '("src/tools/cargo/tests/testsuite/build.rs"
+                                "src/tools/cargo/tests/testsuite/fix.rs")
+                   ;; The cargo *_wrapper tests set RUSTC.*WRAPPER environment
+                   ;; variable which points to /usr/bin/env.  Since it's not a
+                   ;; shebang, it needs to be manually patched.
+                   (("/usr/bin/env")
+                    (which "env")))))
+             (add-after 'unpack 'disable-tests-requiring-git
+               (lambda _
+                 (substitute* "src/tools/cargo/tests/testsuite/new.rs"
+                   (("fn author_prefers_cargo")
+                    "#[ignore]\nfn author_prefers_cargo")
+                   (("fn finds_author_git")
+                    "#[ignore]\nfn finds_author_git")
+                   (("fn finds_local_author_git")
+                    "#[ignore]\nfn finds_local_author_git"))))
+             (add-after 'unpack 'patch-command-exec-tests
+               ;; This test suite includes some tests that the stdlib's
+               ;; `Command` execution properly handles in situations where
+               ;; the environment or PATH variable are empty, but this fails
+               ;; since we don't have `echo` available at its usual FHS
+               ;; location.
+               (lambda _
+                 (substitute* (match (find-files "." "^command-exec.rs$")
+                                ((file) file))
+                   (("Command::new\\(\"echo\"\\)")
+                    (format #f "Command::new(~s)" (which "echo"))))))
+             (add-after 'unpack 'patch-command-uid-gid-test
+               (lambda _
+                 (substitute* (match (find-files "." "^command-uid-gid.rs$")
+                                ((file) file))
+                   (("/bin/sh")
+                    (which "sh")))))
+             (add-after 'unpack 'skip-shebang-tests
+               ;; This test make sure that the parser behaves properly when a
+               ;; source file starts with a shebang. Unfortunately, the
+               ;; patch-shebangs phase changes the meaning of these edge-cases.
+               ;; We skip the test since it's drastically unlikely Guix's
+               ;; packaging will introduce a bug here.
+               (lambda _
+                 (delete-file "src/test/ui/parser/shebang/sneaky-attrib.rs")))
+             (add-after 'unpack 'patch-process-tests
                (lambda* (#:key inputs #:allow-other-keys)
                  (let ((bash (assoc-ref inputs "bash")))
                    (substitute* "library/std/src/process/tests.rs"
-                     (("\"/bin/sh\"") (string-append "\"" bash "/bin/sh\"")))
+                     (("\"/bin/sh\"")
+                      (string-append "\"" bash "/bin/sh\"")))
                    (substitute* "library/std/src/sys/unix/process/process_common/tests.rs"
-                     (("fn test_process_mask") "#[allow(unused_attributes)]
+                     (("fn test_process_mask")
+                      "#[allow(unused_attributes)]
     #[ignore]
-    fn test_process_mask"))
-                   #t))))))))))
-
-(define-public rust-1.49
-  (rust-bootstrapped-package rust-1.48 "1.49.0"
-    "0yf7kll517398dgqsr7m3gldzj0iwsp3ggzxrayckpqzvylfy2mm"))
+    fn test_process_mask")))))
+             (add-after 'unpack 'disable-interrupt-tests
+               (lambda _
+                 ;; This test hangs in the build container; disable it.
+                 (substitute* (match (find-files "." "^freshness.rs$")
+                                ((file) file))
+                   (("fn linking_interrupted")
+                    "#[ignore]\nfn linking_interrupted"))
+                 ;; Likewise for the ctrl_c_kills_everyone test.
+                 (substitute* (match (find-files "." "^death.rs$")
+                                ((file) file))
+                   (("fn ctrl_c_kills_everyone")
+                    "#[ignore]\nfn ctrl_c_kills_everyone"))))
+             (add-after 'configure 'enable-docs
+               (lambda _
+                 (substitute* "config.toml"
+                   (("docs = false")
+                    "docs = true"))))
+             (add-after 'configure 'add-gdb-to-config
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((gdb (assoc-ref inputs "gdb")))
+                   (substitute* "config.toml"
+                     (("^python =.*" all)
+                      (string-append all
+                                     "gdb = \"" gdb "/bin/gdb\"\n"))))))))))
+      ;; Add test inputs.
+      (native-inputs (cons*
+                      ;; The tests fail when using GDB 10 (see:
+                      ;; https://github.com/rust-lang/rust/issues/79009).
+                      `("gdb" ,gdb-9.2)
+                      `("procps" ,procps)
+                      (package-native-inputs base-rust))))))
 
 (define-public rust-1.50
   (rust-bootstrapped-package rust-1.49 "1.50.0"
@@ -1474,5 +855,8 @@ move around."
         (alist-replace "llvm" (list llvm-12)
                        (package-inputs base-rust))))))
 
-;; TODO(staging): Bump this variable to the latest packaged rust.
-(define-public rust rust-1.45)
+;;; Note: Only the latest versions of Rust are supported and tested.  The
+;;; intermediate rusts are built for bootstrapping purposes and should not
+;;; be relied upon.  This is to ease maintenance and reduce the time
+;;; required to build the full Rust bootstrap chain.
+(define-public rust rust-1.49)
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index fa17b9d566..f04aeb86a4 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -126,10 +126,6 @@
                (("\\./configure")
                 (string-append (which "sh") " configure")))
              #t))
-         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
-         ;; them in HOME, so it needs to be writeable.
-         (add-before 'build 'set-HOME
-           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key system outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -177,7 +173,7 @@
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
-       ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
+       ("texlive" ,(texlive-updmap.cfg (list texlive-tex-texinfo)))
        ("texinfo" ,texinfo)
        ("m4" ,m4)))
     (inputs
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 4426d9d562..af40bd73f9 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -139,7 +139,7 @@ controlling terminal and attach to it later.")
                    (select (string-append out "/bin/byobu-select-session")))
               (wrap-program config
                 `("BYOBU_PYTHON" = (,python))
-                `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
               (wrap-program select
                 `("BYOBU_PYTHON" = (,python)))
               #t))))))
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 128bd95af8..f2afe763c5 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -115,7 +115,7 @@ joystick, and graphics hardware.")
 (define-public sdl2
   (package (inherit sdl)
     (name "sdl2")
-    (version "2.0.12")
+    (version "2.0.14")
     (source (origin
              (method url-fetch)
              (uri
@@ -123,7 +123,7 @@ joystick, and graphics hardware.")
                              version ".tar.gz"))
              (sha256
               (base32
-               "0qy8wbqvfkb5ps8kxgaaf2zzpkjqbsw712hlp74znbn0jpv6i4il"))))
+               "1g1jahknv5r4yhh1xq5sf0md20ybdw1zh1i15lry26sq39bmn8fq"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index f8c9661df1..4bd1fe585d 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
+;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Sergey Trofimov <sarg@sarg.org.ru>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -224,14 +225,14 @@ with a PKCS #11 Cryptographic Token Interface.")
 (define-public pcsc-lite
   (package
     (name "pcsc-lite")
-    (version "1.9.0")
+    (version "1.9.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pcsclite.apdu.fr/files/"
                                   "pcsc-lite-" version ".tar.bz2"))
               (sha256
                (base32
-                "1y9f9zipnrmgiw0mxrvcgky8vfrcmg6zh40gbln5a93i2c1x8j01"))))
+                "0fk8bvjpcci43iq2jzlvkml8bzjxclhxlg291ykk7a3ng2dpii3k"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers"
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 4c2228871f..41b8fdcbe1 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,47 +48,40 @@
 (define-public libsepol
   (package
     (name "libsepol")
-    (version "3.0")
-    (source (let ((release "20191204"))
-              (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/SELinuxProject/selinux")
-                      (commit release)))
-                (file-name (string-append "selinux-" release "-checkout"))
-                (sha256
-                 (base32
-                  "05rpzm72cgprd0ccr6lvx9hm8j8b5nkqi4avshlsyg7s3sdlcxjs")))))
+    (version "3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/SELinuxProject/selinux")
+                     (commit version)))
+              (file-name (git-file-name "selinux" version))
+              (sha256
+               (base32
+                "03p3lmvrvkcvsmiczsjzhyfgxlxdkdyq0p8igv3s3hdak5n92jjn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; tests require checkpolicy, which requires libsepol
        #:test-target "test"
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "SHLIBDIR=" out "/lib")
                (string-append "MAN3DIR=" out "/share/man/man3")
                (string-append "MAN5DIR=" out "/share/man/man5")
                (string-append "MAN8DIR=" out "/share/man/man8")
                (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'portability
            (lambda _
              (substitute* "src/ibpkeys.c"
                (("#include \"ibpkey_internal.h\"" line)
                 (string-append line "\n#include <inttypes.h>\n"))
-               (("%#lx") "%#\" PRIx64 \""))
-             #t)))))
+               (("%#lx") "%#\" PRIx64 \"")))))))
     (native-inputs
      `(("flex" ,flex)))
     (home-page "https://selinuxproject.org/")
@@ -106,23 +100,18 @@ boolean settings).")
     (arguments
      `(#:tests? #f ; there is no check target
        #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (target ,(%current-target-system)))
+       (let ((out (assoc-ref %outputs "out")))
          (list (string-append "PREFIX=" out)
                (string-append "LIBSEPOLA="
                               (assoc-ref %build-inputs "libsepol")
                               "/lib/libsepol.a")
-               (string-append "CC="
-                              (if target
-                                  (string-append (assoc-ref %build-inputs "cross-gcc")
-                                                 "/bin/" target "-gcc")
-                                  "gcc"))))
+               (string-append "CC=" ,(cc-for-target))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t)))))
+           (lambda _ (chdir ,name))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -159,7 +148,7 @@ module into a binary representation.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -209,13 +198,12 @@ the core SELinux management utilities.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))
+             (lambda _ (chdir ,name)))
            (add-before 'install 'adjust-semanage-conf-location
              (lambda _
                (substitute* "src/Makefile"
                  (("DEFAULT_SEMANAGE_CONF_LOCATION=/etc")
-                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))
-               #t))
+                  "DEFAULT_SEMANAGE_CONF_LOCATION=$(PREFIX)/etc"))))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
                (apply invoke "make" "pywrap" make-flags)))
@@ -256,7 +244,7 @@ binary policies.")
         `(modify-phases ,phases
            (delete 'portability)
            (replace 'enter-dir
-             (lambda _ (chdir ,name) #t))))))
+             (lambda _ (chdir ,name)))))))
     (inputs
      `(("libsepol" ,libsepol)))
     (native-inputs
@@ -279,7 +267,7 @@ binary policies.")
             `(modify-phases ,phases
                (delete 'portability)
                (replace 'enter-dir
-                 (lambda _ (chdir "python/sepolgen") #t))
+                 (lambda _ (chdir "python/sepolgen")))
                ;; By default all Python files would be installed to
                ;; $out/gnu/store/...-python-.../, so we override the
                ;; PACKAGEDIR to fix this.
@@ -301,8 +289,7 @@ binary policies.")
                                         (assoc-ref inputs "python"))
                                        "/site-packages/sepolgen")))
                      (substitute* "src/share/Makefile"
-                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out"))))
-                   #t)))))))
+                       (("\\$\\(DESTDIR\\)") (assoc-ref outputs "out")))))))))))
     (inputs
      `(("python" ,python-wrapper)))
     (native-inputs '())
@@ -379,7 +366,7 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
      `(#:test-target "test"
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
-         (list "CC=gcc"
+         (list (string-append "CC=" ,(cc-for-target))
                (string-append "PREFIX=" out)
                (string-append "LOCALEDIR=" out "/share/locale")
                (string-append "BASHCOMPLETIONDIR=" out
@@ -401,9 +388,8 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (delete 'portability)
          (add-after 'unpack 'enter-dir
-           (lambda _ (chdir ,name) #t))
+           (lambda _ (chdir ,name)))
          (add-after 'enter-dir 'ignore-/usr-tests
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Rewrite lookup paths for header files.
@@ -413,8 +399,7 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
                (("/usr(/include/security/pam_appl.h)" _ file)
                 (string-append (assoc-ref inputs "pam") file))
                (("/usr(/include/libaudit.h)" _ file)
-                (string-append (assoc-ref inputs "audit") file)))
-             #t)))))
+                (string-append (assoc-ref inputs "audit") file))))))))
     (inputs
      `(("audit" ,audit)
        ("pam" ,linux-pam)
diff --git a/gnu/packages/sequoia.scm b/gnu/packages/sequoia.scm
index 2c68f43e36..719a9d2ef4 100644
--- a/gnu/packages/sequoia.scm
+++ b/gnu/packages/sequoia.scm
@@ -70,7 +70,7 @@
        ("sqlite" ,sqlite)))
     (arguments
      `(#:tests? #f ;; building the tests requires 9.7GB total
-       #:rust ,rust-1.46
+       #:rust ,rust
        #:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-backtrace" ,rust-backtrace-0.3)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 8f292ae408..95c7dcee63 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -359,16 +360,15 @@ that implements both the msgpack and msgpack-rpc specifications.")
 (define-public jsoncpp
   (package
     (name "jsoncpp")
-    (version "1.9.2")
+    (version "1.9.4")
     (home-page "https://github.com/open-source-parsers/jsoncpp")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page) (commit version)))
               (file-name (git-file-name name version))
-              (patches (search-patches "jsoncpp-fix-inverted-case.patch"))
               (sha256
                (base32
-                "037d1b1qdmn3rksmn1j71j26bv4hkjv7sn7da261k853xb5899sg"))))
+                "0qnx5y6c90fphl9mj9d20j2dfgy6s5yr5l0xnzid0vh71zrp6jwv"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index f080d71c40..44a77e1de5 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -391,7 +392,7 @@ written by Paul Haahr and Byron Rakitzis.")
 (define-public tcsh
   (package
     (name "tcsh")
-    (version "6.22.02")
+    (version "6.22.03")
     (source (origin
               (method url-fetch)
               ;; Old tarballs are moved to old/.
@@ -401,7 +402,7 @@ written by Paul Haahr and Byron Rakitzis.")
                                         "old/tcsh-" version ".tar.gz")))
               (sha256
                (base32
-                "0nw8prz1n0lmr82wnpyhrzmki630afn7p9cfgr3vl00vr9c72a7d"))
+                "1dv24bsp6faayinvwds092ylk9sb6894rl9ddm87y31a7mjzsb5y"))
               (patches (search-patches "tcsh-fix-autotest.patch"))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
@@ -426,6 +427,16 @@ written by Paul Haahr and Byron Rakitzis.")
               ;; Take care of pwd
               (substitute* '("tests/commands.at" "tests/variables.at")
                 (("/bin/pwd") (which "pwd")))
+              (substitute* "Makefile"
+                ;; Likewise for /usr/bin/env.
+                (("/usr/bin/env") "env")
+                ;; Don't reset the environment (PATH, etc).
+                (("\\$\\(ENVCMD\\) -") "$(ENVCMD)"))
+              ;; This test does not expect the home directory from
+              ;; /etc/passwd to be '/'.
+              (substitute* "tests/subst.at"
+                (("\\$\\(id -un\\)/foo")
+                 "$(id -un)//foo"))
               ;; The .at files create shell scripts without shebangs. Erk.
               (substitute* "tests/commands.at"
                 (("./output.sh") "/bin/sh output.sh"))
@@ -957,8 +968,7 @@ files and text.")
         (base32 "1wj054rzv88ys4ask4zp7crrw0dxrck8svlj3i16qqd8x5dnyhqs"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:rust ,rust-1.47
-       #:tests? #false                  ;missing files
+     `(#:tests? #false                  ;missing files
        #:features '("extra")
        #:cargo-inputs
        (("rust-clap" ,rust-clap-2)
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index 14e91c89c3..26e26b351e 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -268,16 +269,13 @@ problems for efficient solution on parallel systems.")
          (replace 'check
            (lambda _
              (setenv "HOME" "/tmp")
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; Disable parallel tests to avoid race condition.  See
                ;; https://github.com/pytest-dev/pytest-cov/issues/237.
                (substitute* "runtests.sh"
                  (("for p in 1 4 8 16; do")
                   "for p in 1; do"))
-               (invoke "./runtests.sh"))
-             #t)))))
+               (invoke "./runtests.sh")))))))
     (home-page "https://bitbucket.org/fenics-project/dijitso/")
     (synopsis "Distributed just-in-time building of shared libraries")
     (description
@@ -313,11 +311,7 @@ the complexity of that interface.  Parallel support depends on the
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
-             (with-directory-excursion "test"
-               (invoke "py.test"))
-             #t)))))
+             (invoke "py.test" "test"))))))
     (home-page "https://bitbucket.org/fenics-project/ufl/")
     (synopsis "Unified language for form-compilers")
     (description "The Unified Form Language (UFL) is a domain specific
@@ -351,8 +345,6 @@ UFL is part of the FEniCS Project.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: three FIAT test modules are known to fail
                ;; with recent versions of pytest (>= 4).  These are
@@ -362,8 +354,7 @@ UFL is part of the FEniCS Project.")
                (invoke "py.test" "unit/"
                        "--ignore=unit/test_fiat.py"
                        "--ignore=unit/test_quadrature.py"
-                       "--ignore=unit/test_reference_element.py"))
-             #t)))))
+                       "--ignore=unit/test_reference_element.py")))))))
     (home-page "https://bitbucket.org/fenics-project/fiat/")
     (synopsis "Tabulation of finite element function spaces")
     (description
@@ -403,8 +394,6 @@ FIAT is part of the FEniCS Project.")
          (replace 'check
            (lambda _
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) ":" (getenv "PYTHONPATH")))
              (with-directory-excursion "test"
                ;; FIXME: the tests in subdirectory
                ;; 'unit/ufc/finite_element' require the ffc_factory
@@ -629,8 +618,7 @@ user interface to the FEniCS core components and external libraries.")
              ;; Define paths to store locations.
              (setenv "PYBIND11_DIR" (assoc-ref %build-inputs "pybind11"))
              ;; Move to python sub-directory.
-             (chdir "python")
-             #t))
+             (chdir "python")))
          (add-after 'build 'mpi-setup
            ,%openmpi-setup)
          (add-before 'check 'pre-check
@@ -672,14 +660,8 @@ user interface to the FEniCS core components and external libraries.")
                  "d for d in demos if d[0].stem not in "
                  "excludeList]\n")))
              (setenv "HOME" (getcwd))
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getcwd) "/build/lib.linux-x86_64-"
-                      ,(version-major+minor (package-version python)) ":"
-                      (getenv "PYTHONPATH")))
              ;; Restrict OpenBLAS to MPI-only in preference to MPI+OpenMP.
-             (setenv "OPENBLAS_NUM_THREADS" "1")
-             #t))
+             (setenv "OPENBLAS_NUM_THREADS" "1")))
          (replace 'check
            (lambda _
              (with-directory-excursion "test"
@@ -691,8 +673,7 @@ user interface to the FEniCS core components and external libraries.")
                                        (min 3 (parallel-job-count)))
                        "python" "-B" "-m"
                        "pytest" "unit" "--ignore"
-                       "unit/nls/test_PETScSNES_solver.py"))
-             #t))
+                       "unit/nls/test_PETScSNES_solver.py"))))
          (add-after 'install 'install-demo-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((demos (string-append
@@ -706,8 +687,7 @@ user interface to the FEniCS core components and external libraries.")
                                (unless (equal? "." dir)
                                  (mkdir-p tgt-dir)
                                  (install-file file tgt-dir))))
-                           (find-files "." ".*\\.(py|gz|xdmf)$"))))
-             #t)))))
+                           (find-files "." ".*\\.(py|gz|xdmf)$")))))))))
     (home-page "https://fenicsproject.org/")
     (synopsis "High-level environment for solving differential equations")
     (description
diff --git a/gnu/packages/solidity.scm b/gnu/packages/solidity.scm
new file mode 100644
index 0000000000..26167ee659
--- /dev/null
+++ b/gnu/packages/solidity.scm
@@ -0,0 +1,92 @@
+;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages solidity)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public solidity
+  (let ((commit "3f05b770bdbf60eca866382049ea191dd701409a"))
+    (package
+      (name "solidity")
+      (version "0.7.4")
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/ethereum/solidity")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1mswhjymiwnd3n7h3sjvjx5x8223yih0yvfcr0zpqr4aizpfx5z8"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'create-commit_hash.txt
+             (lambda _
+               (with-output-to-file "commit_hash.txt"
+                 (lambda _
+                   (display
+                    (substring ,commit 0 8))))))
+           (delete 'configure)
+           (delete 'install)
+           (replace 'build
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Unbundle jsoncpp
+               (delete-file "./cmake/jsoncpp.cmake")
+               (substitute* "CMakeLists.txt"
+                 (("include\\(jsoncpp\\)") ""))
+               ;; Bug list is always sorted since we only build releases
+               (substitute* "./test/cmdlineTests.sh"
+                 (("\"\\$REPO_ROOT\"/scripts/update_bugs_by_version\\.py") ""))
+               (substitute* "./scripts/build.sh"
+                 (("sudo\\ make\\ install") "make install")
+                 (("cmake\\ ..")
+                  (string-append "cmake .. -DCMAKE_INSTALL_PREFIX="
+                                 (assoc-ref outputs "out"))))
+               (setenv "CIRCLECI" "1")
+               (invoke "./scripts/build.sh")
+               #t))
+           (replace 'check
+             (lambda _
+               (invoke "./scripts/tests.sh")
+               #t)))))
+      (inputs
+       `(("boost-static" ,boost-static)
+         ("jsoncpp" ,jsoncpp)
+         ("z3" ,z3)))
+      (native-inputs
+       `(("python" ,python)
+         ("tput" ,ncurses)
+         ("xargs" ,findutils)))
+      (home-page "https://solidity.readthedocs.io")
+      (synopsis "Contract-Oriented Programming Language")
+      (description
+       "Solidity is a statically-typed curly-braces programming language
+designed for developing smart contracts that run on the Ethereum Virtual
+Machine.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 6f1656eb82..2e55c067aa 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -56,14 +56,14 @@
 (define-public python-sphinx
   (package
     (name "python-sphinx")
-    (version "3.3.1")
+    (version "4.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Sphinx" version))
        (sha256
         (base32
-         "0023vc2i29pjxmvdqbz1wdbi7gbj56y1br1b2z8h8wa44li5k38y"))))
+         "0k0bfjw4f76k2yyz8k2rl3s66ig2mn7y13m8dzqbgckifmvh8lfg"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 7fce241aca..76670463d7 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -252,6 +252,14 @@ which allows users to view a desktop computing environment.")
         '("--enable-lz4"
           "--enable-automated-tests")
 
+        #:phases
+        (modify-phases %standard-phases
+          ;; XXX: Otherwise the server listen tests fails with
+          ;;   Failed to create /homeless-shelter/.config/glib-2.0/settings
+          (add-before 'check 'set-XDG_CONFIG_HOME
+            (lambda _
+              (setenv "XDG_CONFIG_HOME" "/tmp"))))
+
         ;; Several tests appear to be opening the same sockets concurrently.
         #:parallel-tests? #f))
     (synopsis "Server implementation of the SPICE protocol")
@@ -342,9 +350,7 @@ resolution scaling on graphical console window resize.")
                 "0azj3rqr2smg0lai24xrn3zr628xmjfrzcggay877zrr64ybj1c0"))))
     (build-system meson-build-system)
     (arguments
-     '(#:tests? #f                      ; TODO Tests require gnutls built with
-                                        ; p11-kit
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
diff --git a/gnu/packages/sqlite.scm b/gnu/packages/sqlite.scm
index a48d724488..56e53eeae4 100644
--- a/gnu/packages/sqlite.scm
+++ b/gnu/packages/sqlite.scm
@@ -1,12 +1,12 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
 ;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -45,34 +45,32 @@
 ;;; This module has been separated from (gnu packages databases) to reduce the
 ;;; number of module references for core packages.
 
+(define (sqlite-uri version year)
+  (let ((numeric-version
+         (match (string-split version #\.)
+           ((first-digit other-digits ...)
+            (string-append first-digit
+                           (string-pad-right
+                            (string-concatenate
+                             (map (cut string-pad <> 2 #\0)
+                                  other-digits))
+                            6 #\0))))))
+    (string-append "https://sqlite.org/" (number->string year)
+                   "/sqlite-autoconf-" numeric-version ".tar.gz")))
+
 (define-public sqlite
   (package
    (name "sqlite")
-   (version "3.31.1")
+   (version "3.35.5")
    (source (origin
             (method url-fetch)
-            (uri (let ((numeric-version
-                        (match (string-split version #\.)
-                          ((first-digit other-digits ...)
-                           (string-append first-digit
-                                          (string-pad-right
-                                           (string-concatenate
-                                            (map (cut string-pad <> 2 #\0)
-                                                 other-digits))
-                                           6 #\0))))))
-                   (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                  numeric-version ".tar.gz")))
+            (uri (sqlite-uri version 2021))
+            (patches (search-patches "sqlite-hurd.patch"))
             (sha256
              (base32
-              "1bj936svd8i5g25xd1bj52hj4zca01fgl3sqkj86z9q5pkz4wa32"))))
-   (replacement sqlite/fixed)
+              "1c3d5q9zc93pfpbl7p5212pqfvls2ciy34ksxlbfbhqrqfjp4azm"))))
    (build-system gnu-build-system)
    (inputs `(("readline" ,readline)))
-   (native-inputs (if (hurd-target?)
-                      ;; TODO move into origin on the next rebuild cycle.
-                      `(("hurd-locking-mode.patch"
-                         ,@(search-patches "sqlite-hurd.patch")))
-                      '()))
    (outputs '("out" "static"))
    (arguments
     `(#:configure-flags
@@ -80,25 +78,13 @@
       ;; -DSQLITE_ENABLE_UNLOCK_NOTIFY and -DSQLITE_ENABLE_DBSTAT_VTAB
       ;; to CFLAGS.  GNU Icecat will refuse to use the system SQLite
       ;; unless these options are enabled.
-      (list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE "
+      (list (string-append "CFLAGS=-O2 -g -DSQLITE_SECURE_DELETE "
                            "-DSQLITE_ENABLE_FTS3 "
                            "-DSQLITE_ENABLE_UNLOCK_NOTIFY "
                            "-DSQLITE_ENABLE_DBSTAT_VTAB "
                            ;; Column metadata is required by GNU Jami and Qt, et.al.
                            "-DSQLITE_ENABLE_COLUMN_METADATA"))
       #:phases (modify-phases %standard-phases
-                 ;; TODO: remove in the next rebuild cycle
-                 ,@(if (hurd-target?)
-                       `((add-after 'unpack 'patch-sqlite/hurd
-                           (lambda* (#:key inputs native-inputs
-                                     #:allow-other-keys)
-                             (let ((patch (assoc-ref
-                                           (if ,(%current-target-system)
-                                               native-inputs
-                                               inputs)
-                                           "hurd-locking-mode.patch")))
-                               (invoke "patch" "-p1" "--force" "-i" patch)))))
-                       '())
                  (add-after 'install 'move-static-library
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let* ((out    (assoc-ref outputs "out"))
@@ -123,26 +109,16 @@ widely deployed SQL database engine in the world.  The source code for SQLite
 is in the public domain.")
    (license license:public-domain)))
 
-(define-public sqlite/fixed
+(define-public sqlite-3.33
   (package
     (inherit sqlite)
-    (version "3.32.3")
+    (version "3.33.0")
     (source (origin
               (method url-fetch)
-              (uri (let ((numeric-version
-                          (match (string-split version #\.)
-                            ((first-digit other-digits ...)
-                             (string-append first-digit
-                                            (string-pad-right
-                                             (string-concatenate
-                                              (map (cut string-pad <> 2 #\0)
-                                                   other-digits))
-                                             6 #\0))))))
-                     (string-append "https://sqlite.org/2020/sqlite-autoconf-"
-                                    numeric-version ".tar.gz")))
+              (uri (sqlite-uri version 2020))
               (sha256
                (base32
-                "0rlbaq177gcgk5dswd3akbhv2nvvzljrbhgy18hklbhw7h90f5d3"))))))
+                "05dvdfaxd552gj5p7k0i72sfam7lykaw1g2pfn52jnppqx42qshh"))))))
 
 ;; Column metadata support was added to the regular 'sqlite' package with
 ;; commit fad5b1a6d8d9c36bea5785ae4fbc1beb37e644d7.
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 7429d4e956..7723390c16 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -313,11 +313,12 @@ Additionally, various channel-specific options can be negotiated.")
               (uri (git-reference
                     (url home-page)
                     (commit (string-append "v" version))))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1xpxkvgj7wgcl450djkcrmrf957mcy2f36hfs5g6kpla1gax2d1g"))
-              (modules '((guix build utils)))))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"
+                                       "guile-ssh-read-error.patch"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -383,6 +384,9 @@ libssh library.")
   (package
     (inherit guile-ssh)
     (name "guile2.0-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
      `(("guile" ,guile-2.0) ;needed when cross-compiling.
        ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
@@ -393,6 +397,9 @@ libssh library.")
   (package
     (inherit guile-ssh)
     (name "guile2.2-ssh")
+    (source (origin
+              (inherit (package-source guile-ssh))
+              (patches (search-patches "guile-ssh-fix-test-suite.patch"))))
     (native-inputs
      `(("guile" ,guile-2.2) ;needed when cross-compiling.
        ,@(alist-delete "guile" (package-native-inputs guile-ssh))))
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index e096ec217c..5b203d998d 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com>
 ;;; Copyright © 2020 Tim Howes <timhowes@lavabit.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -338,10 +339,10 @@ as.POSIXct(if (\"\" != Sys.getenv(\"SOURCE_DATE_EPOCH\")) {\
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo) ; for building HTML manuals
-       ("texlive" ,(texlive-union (list texlive-ae
+       ("texlive" ,(texlive-updmap.cfg (list texlive-ae
                                         texlive-inconsolata
                                         texlive-fonts-ec
-                                        texlive-amsfonts/patched
+                                        texlive-amsfonts
                                         texlive-latex-base
                                         texlive-latex-fancyvrb
                                         texlive-latex-graphics
@@ -5733,25 +5734,15 @@ to any arbitrary string.  In this case, it is up to you to set valid values.")
           "1cysswxr5glrdblyl2zsmywcj7xhxn3wmyihxinrz9gm8gmaacax"))))
     (build-system python-build-system)
     (arguments
-     '(#:modules ((ice-9 ftw)
-                  (srfi srfi-1)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
          (replace 'check
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((cwd (getcwd)))
-               (setenv "TZ" "UTC")
-               (setenv "PYTHONPATH"
-                       (string-append cwd "/build/"
-                                      (find (cut string-prefix? "lib" <>)
-                                            (scandir (string-append cwd "/build")))
-                                      ":"
-                                      (getenv "PYTHONPATH"))))
+               (setenv "TZ" "UTC"))
              ;; test_vector_complex has issues when run in our environment.
-             (invoke "pytest" "-v" "rpy2/tests/" "-k" "not test_vector_complex"))))))
+             (invoke "pytest" "-v" "rpy2/tests/"
+                     "-k" "not test_vector_complex"))))))
     (propagated-inputs
      `(("python-cffi" ,python-cffi)
        ("python-six" ,python-six)
diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm
index d53327df75..4c2fa21a78 100644
--- a/gnu/packages/storage.scm
+++ b/gnu/packages/storage.scm
@@ -168,10 +168,7 @@
                                     "/site-packages")))
                ;; The Python install scripts refuses to function if
                ;; the install directory is not on PYTHONPATH.
-               (setenv "PYTHONPATH"
-                       (string-append py3sitedir ":"
-                                      (getenv "PYTHONPATH")))
-               #t)))
+               (setenv "PYTHONPATH" py3sitedir))))
          (add-after 'install 'wrap-python-scripts
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -190,7 +187,7 @@
                                  (sitedir prettytable))))
                (for-each (lambda (executable)
                            (wrap-program (string-append out "/bin/" executable)
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
+                             `("GUIX_PYTHONPATH" ":" prefix (,PYTHONPATH))))
                          scripts)
                #t))))))
     (outputs
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index 86c1407da9..b14bcd6401 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
@@ -35,7 +35,7 @@
 (define-public swig
   (package
     (name "swig")
-    (version "4.0.1")
+    (version "4.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/" name "/" name "/"
@@ -43,18 +43,8 @@
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
-               "1ac7g0gd8ndwv3ybqn5vjgqxa7090bby4db164a7mn9ssp8b803s"))))
+               "1z06m5zv87mha6hvys1iay810ghc1jngilfby1ms2n4d1mryjfym"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'workaround-gcc-bug
-           (lambda _
-             ;; XXX: Don't add the -isystem flag, or GCCs #include_next
-             ;; won't be able to find <stdlib.h>.
-             (substitute* "configure"
-               (("-isystem ") "-I"))
-             #t)))))
     (native-inputs `(("boost" ,boost)
                      ("pcre" ,pcre "bin")       ;for 'pcre-config'
                      ;; The following are for tests and examples:
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index f3690a1a29..cda7569dfa 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -375,10 +375,10 @@ file system, and many more features.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out               (assoc-ref outputs "out"))
                    (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
-                   (python-path       (getenv "PYTHONPATH")))
+                   (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/liferea")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("autoconf" ,autoconf)
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index 7d24e00764..db2a6d9f54 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -211,11 +211,11 @@ a task.")
              (let* ((out               (assoc-ref outputs "out"))
                     (gi-typelib-path   (getenv "GI_TYPELIB_PATH"))
                     (gst-plugin-path   (getenv "GST_PLUGIN_SYSTEM_PATH"))
-                    (python-path       (getenv "PYTHONPATH")))
+                    (python-path       (getenv "GUIX_PYTHONPATH")))
                (wrap-program (string-append out "/bin/blanket")
                  `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
-                 `("PYTHONPATH" ":" prefix (,python-path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,python-path))))
              #t)))))
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 55a95792cb..5fccfa5da9 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -44,20 +44,19 @@
 (define-public tcl
   (package
     (name "tcl")
-    (version "8.6.10")
+    (version "8.6.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/tcl/Tcl/"
                                   version "/tcl" version "-src.tar.gz"))
               (sha256
                (base32
-                "1vc7imilx6kcb5319r7hnrp4jn5pqb41an3vr3azhgcfcgvdp5ji"))
-              (patches (search-patches "tcl-fix-cross-compilation.patch"))))
+                "0n4211j80mxr6ql0xx52rig8r885rcbminfpjdb2qrw6hmk8c14c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    (lambda _ (chdir "unix") #t))
+                    (lambda _ (chdir "unix")))
                  (add-after 'install 'install-private-headers
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Private headers are needed by Expect.
@@ -68,8 +67,7 @@
                        ;; Programs such as Ghostscript rely on it.
                        (with-directory-excursion bin
                          (symlink (car (find-files "." "tclsh"))
-                                  "tclsh"))
-                       #t))))
+                                  "tclsh"))))))
 
        ;; By default, man pages are put in PREFIX/man, but we want them in
        ;; PREFIX/share/man.  The 'validate-documentation-location' phase is
@@ -197,7 +195,7 @@ X11 GUIs.")
 (define-public tk
   (package
     (name "tk")
-    (version "8.6.10")
+    (version "8.6.11.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/tcl/Tcl/"
@@ -205,38 +203,31 @@ X11 GUIs.")
                                  version "-src.tar.gz"))
              (sha256
               (base32
-               "11p3ycqbr5116vpaxv6fl6md6gcav1ffspgr8wrlc2lxhn543pv3"))
+               "1gh9k7l76qg9l0sb78ijw9xz4xl1af47aqbdifb6mjpf3cbsnv00"))
              (patches (search-patches "tk-find-library.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-before
-                   'configure 'pre-configure
-                   (lambda _
-                     (chdir "unix")
-                     #t))
-                  (add-after
-                   'install 'create-wish-symlink
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let ((out (assoc-ref outputs "out")))
-                       (symlink (string-append out "/bin/wish"
-                                               ,(version-major+minor
+                  (add-before 'configure 'pre-configure
+                    (lambda _ (chdir "unix")))
+                  (add-after 'install 'create-wish-symlink
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (symlink (string-append out "/bin/wish"
+                                                ,(version-major+minor
                                                   (package-version tk)))
-                                (string-append out "/bin/wish")))
-                     #t))
-                  (add-after
-                   'install 'add-fontconfig-flag
-                   (lambda* (#:key inputs outputs #:allow-other-keys)
-                     ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
-                     ;; 'tkConfig.sh'.
-                     (let ((out        (assoc-ref outputs "out"))
-                           (fontconfig (assoc-ref inputs "fontconfig")))
-                       (substitute* (find-files out
-                                                "^(tkConfig\\.sh|tk\\.pc)$")
-                         (("-lfontconfig")
-                          (string-append "-L" fontconfig
-                                         "/lib -lfontconfig")))
-                       #t))))
+                                 (string-append out "/bin/wish")))))
+                  (add-after 'install 'add-fontconfig-flag
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; Add the missing -L flag for Fontconfig in 'tk.pc' and
+                      ;; 'tkConfig.sh'.
+                      (let ((out        (assoc-ref outputs "out"))
+                            (fontconfig (assoc-ref inputs "fontconfig")))
+                        (substitute* (find-files out
+                                                 "^(tkConfig\\.sh|tk\\.pc)$")
+                          (("-lfontconfig")
+                           (string-append "-L" fontconfig
+                                          "/lib -lfontconfig")))))))
 
        #:configure-flags
        (list (string-append "--with-tcl="
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 9377e5622b..735373dfa7 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -714,8 +714,7 @@ eye-candy, customizable, and reasonably lightweight.")
                 "0rm7w29wf3gipf69qf7s42qw8857z74gsigrpz9g6vvd1x58f03m"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.55
-       ;; Using a "release" build is recommended both for performance, and
+     `(;; Using a "release" build is recommended both for performance, and
        ;; also to address a GCC 10 issue when doing PGO builds.
        #:build-type "release"
        ;; Enable LTO as recommended by INSTALL.md.
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index b404ca8ff1..0bb102e878 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -39,6 +39,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -122,7 +123,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                           (string-append doc "/doc")))
                        '())
                  (mkdir-p out)
-                 (copy-recursively (assoc-ref inputs "source") out)
+                 (copy-recursively "." out)
                  ,@(if with-documentation?
                        '((delete-file-recursively (string-append out "/doc")))
                        '())
@@ -151,7 +152,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                               "-checkout"))
     (sha256
      (base32
-      "0lk7shx768sxvgr85y8bnmmnj8x4bbkgpxrz3z8jp8avi33prw83"))))
+      "1gdyc8nmvp5jqlc429rmfzfl0cqqsdayc70y1hxwz025pv9jn960"))))
 
 (define (texlive-hyphen-package name code locations hash)
   "Return a TeX Live hyphenation package with the given NAME, using source
@@ -224,111 +225,100 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
 (define texlive-extra-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-extra.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2020/texlive-20200406-extra.tar.xz")
     (sha256 (base32
-             "13ncf2an4nlqv18lki6y2p6pcsgs1i54zqkhfwprax5j53bk70j8"))))
+             "0kx6r2ncnqpmhs0jhjk4ypq99czcvql9l9n0npcgqzrv4qmzsg94"))))
 
 (define texlive-texmf-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-texmf.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2020/texlive-20200406-texmf.tar.xz")
     (sha256 (base32
-             "00n4qh9fj8v9zzy3y488hpfq1g3dnnh72y4yjsaikfcqpi59gv62"))))
+             "15ashyxm3j78wjik1pp7vwi1wg07xjgh9zv0vkhqim6g7rc7xa8a"))))
 
 (define-public texlive-bin
   (package
-   (name "texlive-bin")
-   (version "20190410")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "ftp://tug.org/historic/systems/texlive/2019/"
-                          "texlive-" version "-source.tar.xz"))
-      (sha256
-       (base32
-        "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj"))
-      (patches
-       (let ((arch-patch
-              (lambda (name revision hash)
-                (origin
-                  (method url-fetch)
-                  (uri (string-append "https://git.archlinux.org/svntogit/packages.git"
-                                      "/plain/trunk/" name "?h=packages/texlive-bin"
-                                      "&id=" revision))
-                  (file-name (string-append "texlive-bin-" name))
-                  (sha256 (base32 hash)))))
-             (arch-revision "49d7fe25e5ea63f136ebc20270c1d8fc9b00041c"))
-         (list
-          (arch-patch "pdftex-poppler0.76.patch" arch-revision
-                      "03vc88dz37mjjyaspzv0fik2fp5gp8qv82114869akd1dhszbaax")
-          (search-patch "texlive-bin-poppler-0.83.patch")
-          (arch-patch "texlive-poppler-0.84.patch" arch-revision
-                      "1ia6cr99krk4ipx4hdi2qdb98bh2h26mckjlpxdzrjnfhlnghksa")
-          (search-patch "texlive-bin-poppler-0.86.patch"))))
-      (modules '((guix build utils)
-                 (ice-9 ftw)))
-      (snippet
-       '(begin
-          (with-directory-excursion "libs"
-            (let ((preserved-directories '("." ".." "lua53" "luajit")))
-              ;; Delete bundled software, except Lua which cannot easily be
-              ;; used as an external dependency.
-              (for-each delete-file-recursively
-                        (scandir "."
-                                 (lambda (file)
-                                   (and (not (member file preserved-directories))
-                                        (eq? 'directory (stat:type (stat file)))))))))
-          ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
-          #t))))
-   (build-system gnu-build-system)
-   (inputs
-    `(("texlive-extra-src" ,texlive-extra-src)
-      ("texlive-scripts"
-       ,(origin
-          (method svn-fetch)
-          (uri (svn-reference
-                (url (string-append "svn://www.tug.org/texlive/tags/"
-                                    %texlive-tag "/Master/texmf-dist/"
-                                    "/scripts/texlive"))
-                (revision %texlive-revision)))
-          (file-name (string-append "texlive-scripts-"
-                                    (number->string %texlive-revision)
-                                    "-checkout"))
-          (sha256
-           (base32
-            "1cj04svl8bpfwjr4gqfcc04rmklz3aggrxvgj7q5bxrh7c7g18xh"))))
-      ("cairo" ,cairo)
-      ("fontconfig" ,fontconfig)
-      ("fontforge" ,fontforge)
-      ("freetype" ,freetype)
-      ("gd" ,gd)
-      ("gmp" ,gmp)
-      ("ghostscript" ,ghostscript)
-      ("graphite2" ,graphite2)
-      ("harfbuzz" ,harfbuzz)
-      ("icu4c" ,icu4c)
-      ("libpaper" ,libpaper)
-      ("libpng" ,libpng)
-      ("libxaw" ,libxaw)
-      ("libxt" ,libxt)
-      ("mpfr" ,mpfr)
-      ("perl" ,perl)
-      ("pixman" ,pixman)
-      ("poppler" ,poppler)
-      ("potrace" ,potrace)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
-      ("ruby" ,ruby)
-      ("tcsh" ,tcsh)
-      ("teckit" ,teckit)
-      ("zlib" ,zlib)
-      ("zziplib" ,zziplib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:out-of-source? #t
-      #:configure-flags
+    (name "texlive-bin")
+    (version "20200406")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://tug.org/historic/systems/texlive/2020/"
+                           "texlive-" version "-source.tar.xz"))
+       (sha256
+        (base32
+         "0y4h4j2qg714srhvf1hvn165w7sanr1j2vzrsgc23kxvrc43sbz3"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        '(begin
+           (with-directory-excursion "libs"
+             (let ((preserved-directories '("." ".." "lua53" "luajit")))
+               ;; Delete bundled software, except Lua which cannot easily be
+               ;; used as an external dependency.
+               (for-each delete-file-recursively
+                         (scandir "."
+                                  (lambda (file)
+                                    (and (not (member file preserved-directories))
+                                         (eq? 'directory (stat:type (stat file)))))))))
+           ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
+           #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("texlive-extra-src" ,texlive-extra-src)
+       ("config" ,config)
+       ("texlive-scripts"
+        ,(origin
+           (method svn-fetch)
+           (uri (svn-reference
+                 (url (string-append "svn://www.tug.org/texlive/tags/"
+                                     %texlive-tag "/Master/texmf-dist/"
+                                     "/scripts/texlive"))
+                 (revision %texlive-revision)))
+           (file-name (string-append "texlive-scripts-"
+                                     (number->string %texlive-revision)
+                                     "-checkout"))
+           (sha256
+            (base32
+             "0p3ff839q4kv3zj4xxc76fqcjcjinv8xf7ix0zgwl7yhy5p3sm80"))))
+       ("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("fontforge" ,fontforge)
+       ("freetype" ,freetype)
+       ("gd" ,gd)
+       ("gmp" ,gmp)
+       ("ghostscript" ,ghostscript)
+       ("graphite2" ,graphite2)
+       ("harfbuzz" ,harfbuzz)
+       ("icu4c" ,icu4c)
+       ("libpaper" ,libpaper)
+       ("libpng" ,libpng)
+       ("libxaw" ,libxaw)
+       ("libxt" ,libxt)
+       ("mpfr" ,mpfr)
+       ("perl" ,perl)
+       ("pixman" ,pixman)
+       ("poppler" ,poppler)
+       ("potrace" ,potrace)
+       ("python" ,python)
+       ("ruby" ,ruby)
+       ("tcsh" ,tcsh)
+       ("teckit" ,teckit)
+       ("zlib" ,zlib)
+       ("zziplib" ,zziplib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:out-of-source? #t
+       #:configure-flags
        '("--disable-static"
          "--disable-native-texlive-build"
+         "--enable-shared"
          "--with-system-cairo"
          "--with-system-freetype2"
          "--with-system-gd"
@@ -351,6 +341,7 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
          ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
                                                  (%current-system)))
                '("--disable-luajittex"
+                 "--disable-luajithbtex"
                  "--disable-mfluajit")
                '()))
 
@@ -363,102 +354,185 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                            (string-prefix? "mips64" s)
                            (string-prefix? "powerpc64le" s))))
 
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'configure-ghostscript-executable
-          ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
-          ;; and the "gs" ghostscript executable on Unix. It detects Unix by
-          ;; checking for the existence of the /usr/bin directory. Since
-          ;; Guix System does not have /usr/bin, it is also detected as Windows.
-          (lambda* (#:key inputs #:allow-other-keys)
-            (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
-              (("gswin32c") "gs"))
-            (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
-              (("\"gs\"")
-               (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
-            #t))
-        (add-after 'unpack 'use-code-for-new-poppler
-          (lambda _
-            (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftoepdf.cc")
-            (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftosrc.cc")
-            #t))
-        (add-after 'unpack 'patch-dvisvgm-build-files
-          (lambda _
-            ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
-            ;; the appropriate linker flags are not added.
-            (substitute* "texk/dvisvgm/configure"
-              (("^have_libgs=yes" all)
-               (string-append all "\nHAVE_LIBGS=1")))
-            #t))
-        (add-after 'unpack 'disable-failing-test
-          (lambda _
-            ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
-            ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
-            (substitute* "texk/web2c/omegafonts/check.test"
-              (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
-               "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
-            #t))
-        (add-after 'install 'postint
-          (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-            (let* ((out (assoc-ref outputs "out"))
-                   (share (string-append out "/share"))
-                   (texlive-extra (assoc-ref inputs "texlive-extra-src"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-              (substitute* (string-append share "/texmf-dist/web2c/texmf.cnf")
-                ;; Don't truncate lines.
-                (("^error_line = .*$") "error_line = 254\n")
-                (("^half_error_line = .*$") "half_error_line = 238\n")
-                (("^max_print_line = .*$") "max_print_line = 1000\n"))
-              ;; Create symbolic links for the latex variants and their
-              ;; man pages.
-              (with-directory-excursion (string-append out "/bin/")
-                (for-each symlink
-                          '("pdftex" "pdftex"   "xetex"   "luatex")
-                          '("latex"  "pdflatex" "xelatex" "lualatex")))
-              (with-directory-excursion (string-append share "/man/man1/")
-                (symlink "luatex.1" "lualatex.1"))
-              ;; Unpack texlive-extra and install tlpkg.
-              (mkdir "texlive-extra")
-              (with-directory-excursion "texlive-extra"
-                (apply unpack (list #:source texlive-extra))
-                (apply patch-source-shebangs (list #:source texlive-extra))
-                (invoke "mv" "tlpkg" share))
-              (let ((scripts (string-append share "/texmf-dist/scripts/texlive/")))
-                (mkdir-p scripts)
-                (copy-recursively (assoc-ref inputs "texlive-scripts") scripts)
-                ;; Make sure that fmtutil can find its Perl modules.
-                (substitute* (string-append scripts "fmtutil.pl")
-                  (("\\$TEXMFROOT/") (string-append share "/"))))
-
-              ;; texlua shebangs are not patched by the patch-source-shebangs
-              ;; phase because the texlua executable does not exist at that
-              ;; time.
-              (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
-              (with-directory-excursion out
-                (patch-source-shebangs))))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "TEXMF")
-           (files '("share/texmf-dist"))
-           (separator #f))
-          (search-path-specification
-           (variable "TEXMFCNF")
-           (files '("share/texmf-dist/web2c"))
-           (separator #f))))
-   (synopsis "TeX Live, a package of the TeX typesetting system")
-   (description
-    "TeX Live provides a comprehensive TeX document production system.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'configure-ghostscript-executable
+           ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
+           ;; and the "gs" ghostscript executable on Unix. It detects Unix by
+           ;; checking for the existence of the /usr/bin directory. Since
+           ;; Guix System does not have /usr/bin, it is also detected as Windows.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
+               (("gswin32c") "gs"))
+             (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
+               (("\"gs\"")
+                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
+             #t))
+         (add-after 'unpack 'use-code-for-new-poppler
+           (lambda _
+             (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.86.0.cc"
+                        "texk/web2c/pdftexdir/pdftoepdf.cc")
+             (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.83.0.cc"
+                        "texk/web2c/pdftexdir/pdftosrc.cc")
+             #t))
+         (add-after 'unpack 'patch-dvisvgm-build-files
+           (lambda _
+             ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
+             ;; the appropriate linker flags are not added.
+             (substitute* "texk/dvisvgm/configure"
+               (("^have_libgs=yes" all)
+                (string-append all "\nHAVE_LIBGS=1")))
+             #t))
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
+             ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
+             (substitute* "texk/web2c/omegafonts/check.test"
+               (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
+                "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
+             #t))
+         (add-after 'unpack 'unpack-texlive-extra
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-extra")
+             (with-directory-excursion "texlive-extra"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-extra-src"))))))
+         (add-after 'unpack-texlive-extra 'unpack-texlive-scripts
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-scripts")
+             (with-directory-excursion "texlive-scripts"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-scripts"))))))
+         (add-after 'unpack-texlive-scripts 'patch-scripts
+           (lambda _
+             (let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
+                                     (find-files "texk/texlive/linked_scripts"
+                                                 "\\.sh$")
+                                     (find-files "texlive-scripts" "\\.sh$")))
+                    (commands '("awk" "basename" "cat" "grep" "mkdir" "rm"
+                                "sed" "sort" "uname"))
+                    (command-regexp (format #f "\\b(~a)\\b"
+                                            (string-join commands "|")))
+                    (iso-8859-1-encoded-scripts
+                     '("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh"
+                       "texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh")))
+
+               (define (substitute-commands scripts)
+                 (substitute* scripts
+                   ((command-regexp dummy command)
+                    (which command))))
+
+               (substitute-commands (lset-difference string= scripts
+                                                     iso-8859-1-encoded-scripts))
+
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute-commands iso-8859-1-encoded-scripts))
+
+               #t)))
+         (add-after 'check 'customize-texmf.cnf
+           ;; The default texmf.cnf is provided by this package, texlive-bin.
+           ;; Every variable of interest is set relatively to the GUIX_TEXMF
+           ;; environment variable defined via a search path specification
+           ;; further below.  The configuration file is patched after the test
+           ;; suite has run, as it relies on the default configuration to find
+           ;; its paths (and the GUIX_TEXMF variable isn't set yet).
+           (lambda _
+             ;; The current directory is build/ because of the out-of-tree
+             ;; build.
+             (let* ((source    (first (scandir ".." (cut string-suffix?
+                                                         "source" <>))))
+                    (texmf.cnf (string-append "../" source
+                                              "/texk/kpathsea/texmf.cnf")))
+               (substitute* texmf.cnf
+                 (("^TEXMFROOT = .*")
+                  "TEXMFROOT = {$GUIX_TEXMF}/..\n")
+                 (("^TEXMF = .*")
+                  "TEXMF = {$GUIX_TEXMF}\n")
+                 (("^%TEXMFCNF = .*")
+                  "TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
+                 ;; Don't truncate lines.
+                 (("^error_line = .*$") "error_line = 254\n")
+                 (("^half_error_line = .*$") "half_error_line = 238\n")
+                 (("^max_print_line = .*$") "max_print_line = 1000\n")))
+             #t))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+             (let* ((out (assoc-ref outputs "out"))
+                    (patch-source-shebangs (assoc-ref %standard-phases
+                                                      'patch-source-shebangs))
+                    (share (string-append out "/share"))
+                    (scripts (string-append share
+                                            "/texmf-dist/scripts/texlive"))
+                    (source (string-append
+                             "../" (first (scandir ".." (cut string-suffix?
+                                                             "source" <>)))))
+                    (tl-extra-root (string-append source "/texlive-extra"))
+                    (tl-extra-dir (first
+                                   (scandir tl-extra-root
+                                            (negate
+                                             (cut member <> '("." ".."))))))
+                    (tlpkg-src (string-append tl-extra-root "/" tl-extra-dir
+                                              "/tlpkg"))
+                    (config.guess (string-append (assoc-ref inputs "config")
+                                                 "/bin/config.guess")))
+
+               ;; Create symbolic links for the latex variants and their
+               ;; man pages.
+               (with-directory-excursion (string-append out "/bin/")
+                 (for-each symlink
+                           '("pdftex" "pdftex"   "xetex"   "luatex")
+                           '("latex"  "pdflatex" "xelatex" "lualatex")))
+               (with-directory-excursion (string-append share "/man/man1/")
+                 (symlink "luatex.1" "lualatex.1"))
+
+               ;; Install tlpkg.
+               (copy-recursively tlpkg-src (string-append share "/tlpkg"))
+
+               ;; Install texlive-scripts.
+               (copy-recursively (string-append
+                                  source "/texlive-scripts/source/")
+                                 scripts)
+
+               ;; Make sure that fmtutil can find its Perl modules.
+               (substitute* (string-append scripts "/fmtutil.pl")
+                 (("\\$TEXMFROOT/")
+                  (string-append share "/")))
+
+               ;; Likewise for updmap.pl.
+               (substitute* (string-append scripts "/updmap.pl")
+                 (("\\$TEXMFROOT/tlpkg")
+                  (string-append share "/tlpkg")))
+
+               ;; Likewise for the tlmgr.
+               (substitute* (string-append scripts "/tlmgr.pl")
+                 ((".*\\$::installerdir = \\$Master.*" all)
+                  (format #f "  $Master = ~s;~%~a" share all)))
+
+               ;; Install the config.guess script, required by tlmgr.
+               (with-directory-excursion share
+                 (mkdir-p "tlpkg/installer/")
+                 (symlink config.guess "tlpkg/installer/config.guess"))
+
+               ;; texlua shebangs are not patched by the patch-source-shebangs
+               ;; phase because the texlua executable does not exist at that
+               ;; time.
+               (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
+               (with-directory-excursion out
+                 (patch-source-shebangs))))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_TEXMF")
+            (files '("share/texmf-dist")))))
+    (synopsis "TeX Live, a package of the TeX typesetting system")
+    (description
+     "TeX Live provides a comprehensive TeX document production system.
 It includes all the major TeX-related programs, macro packages, and fonts
 that are free software, including support for many languages around the
 world.
 
 This package contains the binaries.")
-   (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
-   (home-page "https://www.tug.org/texlive/")))
+    (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
+    (home-page "https://www.tug.org/texlive/")))
 
 (define-public texlive-libkpathsea
   (package/inherit texlive-bin
@@ -500,7 +574,7 @@ executables.  It is maintained as a part of TeX Live.")))
               "texlive-docstrip"
               (list "/tex/latex/base/docstrip.tex")
               (base32
-               "1f9sx1lp7v34zwm186msf03q2h28rrg0lh65z59zc0cvqffs6dvb")
+               "1vyn0vskxqmq58fbq4r4pknbzpxpyw30nmlmsncnialrmrwqm7k5")
               #:trivial? #t))
     (home-page "https://www.ctan.org/texlive")
     (synopsis "Utility to strip documentation from TeX files.")
@@ -515,7 +589,7 @@ documentation from TeX files.  It is part of the LaTeX base.")
               (list "/tex/generic/unicode-data/"
                     "/doc/generic/unicode-data/")
               (base32
-               "0zy4v9y667cka5fi4dnc6x500907812y7pcaf63s5qxi8l7khxxy")
+               "1mxb55ml92zd00w0zbr0dkscnxdgpxamfabl0izhk3cpz81n9g92")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/unicode-data")
     (synopsis "Unicode data and loaders for TeX")
@@ -548,7 +622,7 @@ out to date by @code{unicode-letters.tex}. ")
                     "/tex/generic/hyphen/hypht1.tex"
                     "/tex/generic/hyphen/zerohyph.tex")
               (base32
-               "0f19nml4hdx9lh7accqdk1b9ismwfm2523l5zsc4kb4arysgcakz")
+               "1vakayd82a4ga0b80mxypbibw2vrf2a8p4v6bim7s97zh8b9mzk3")
               #:trivial? #t))
     (home-page "https://tug.org/texlive/")
     (synopsis "Core hyphenation support files")
@@ -569,7 +643,7 @@ default versions of those), etc.")
                     "/fonts/enc/dvips/base/"
                     "/tex/generic/dvips/")
               (base32
-               "1qr7h0ahycmz5wmpv54glfss9jqdmmyymj6kim626d1c8v9bmg86")
+               "0rns1hpjy4fmsskmkwx197j8qbgdmyj0j9214sq9vhpa6nv7czm3")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/dvips")
     (synopsis "DVI to PostScript drivers")
@@ -597,21 +671,22 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
 (define-public texlive-generic-tex-ini-files
   (deprecated-package "texlive-generic-tex-ini-files" texlive-tex-ini-files))
 
-(define-public texlive-metafont-base
+(define-public texlive-metafont
   (package
-    (name "texlive-metafont-base")
+    (name "texlive-metafont")
     (version (number->string %texlive-revision))
     (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
+              (method svn-multi-fetch)
+              (uri (svn-multi-reference
                     (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/metafont"))
+                                        %texlive-tag "/Master/texmf-dist"))
+                    (locations '("/metafont/"
+                                 "/fonts/source/public/modes/"))
                     (revision %texlive-revision)))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yl4n8cn5xqk2nc22zgzq6ymd7bhm6xx1mz3azip7i3ki4bhb5q5"))))
+                "1r1v3zm600nrl3iskx130fjwj1qib82n02dlca446zb53x0hg6gr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -620,14 +695,17 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((cwd (getcwd)))
+             (let* ((cwd (getcwd))
+                    (mf (string-append cwd "/metafont"))
+                    (modes (string-append cwd "/fonts/source/public/modes")))
                (setenv "MFINPUTS"
-                       (string-append cwd "/base:"
-                                      cwd "/misc:"
-                                      cwd "/roex:"
-                                      cwd "/feynmf:"
-                                      cwd "/mfpic:"
-                                      cwd "/config")))
+                       (string-append modes ":"
+                                      mf "/base:"
+                                      mf "/misc:"
+                                      mf "/roex:"
+                                      mf "/feynmf:"
+                                      mf "/mfpic:"
+                                      mf "/config")))
              (mkdir "build")
              (with-directory-excursion "build"
                (invoke "inimf" "mf.mf"))))
@@ -635,12 +713,14 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
                     (base (string-append out "/share/texmf-dist/web2c"))
-                    (mf   (string-append out "/share/texmf-dist/metafont/base")))
+                    (mf   (string-append out "/share/texmf-dist/metafont/")))
                (mkdir-p base)
                (mkdir-p mf)
                (install-file "build/mf.base" base)
-               (copy-recursively "base" mf)
-               #t))))))
+               (with-directory-excursion "metafont"
+                 (for-each (lambda (where)
+                             (copy-recursively where (string-append mf where)))
+                           (list "base" "misc" "config")))))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)))
     (home-page "https://www.ctan.org/pkg/metafont")
@@ -649,6 +729,9 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
 build fonts using the Metafont system.")
     (license license:knuth)))
 
+(define-public texlive-metafont-base
+  (deprecated-package "texlive-metafont-base" texlive-metafont))
+
 (define-public texlive-fontinst
   (let ((template (simple-texlive-package
                    "texlive-fontinst"
@@ -673,11 +756,9 @@ build fonts using the Metafont system.")
                          "/tex/fontinst/latinetx/"
                          "/tex/fontinst/latinmtx/"
                          "/tex/fontinst/mathmtx/"
-                         "/tex/fontinst/smblmtx/"
-
-                         "/scripts/texlive/fontinst.sh")
+                         "/tex/fontinst/smblmtx/")
                    (base32
-                    "0lprwib7n2ygfxvrw675vhif7ghyip2x6k70kqs9syp8lqxiizf8")
+                    "195jsijrpv828pqy99gm13j31nsc8bsa58zlbln2r0h5j9l44b5g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -749,7 +830,7 @@ typesetting in these fonts.")
               (list "/doc/fonts/fontname/fontname.texi"
                     "/fonts/map/fontname/")
               (base32
-               "0h5im5rnhycrrkd6z10f17m2caa8lv594wf482b68qjmnxfrqnxj")
+               "009qvjpw48lajp0gxpvdk10n5qw3q41cpq05ycns67mxwkcaywq6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fontname")
     (synopsis "Scheme for naming fonts in TeX")
@@ -780,7 +861,7 @@ documents.")
           `(modify-phases ,phases
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -824,7 +905,7 @@ documents.")
                    #t)))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)))
+         ("texlive-metafont" ,texlive-metafont)))
       (home-page "https://www.ctan.org/pkg/cm")
       (synopsis "Computer Modern fonts for TeX")
       (description "This package provides the Computer Modern fonts by Donald
@@ -889,7 +970,7 @@ originals.")
                     "/tex4ht/ht-fonts/alias/adobe/courier/"
                     "/tex4ht/ht-fonts/unicode/adobe/courier/")
               (base32
-               "1hfgisdi7mjf5156ax6d6zsbiq42zkmp1x5lg17rgzf61k6d6z1y")
+               "03vz7zd7gayry9h4pq81s2bqqn2kmxf9yyzs0vap0w9rkf99rrci")
               #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
@@ -898,6 +979,45 @@ font from Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
+(define-public texlive-tex-gyre
+  (package
+    (inherit (simple-texlive-package
+              "texlive-tex-gyre"
+              '("/doc/fonts/tex-gyre/GUST-FONT-LICENSE.txt"
+                "/fonts/afm/public/tex-gyre/"
+                "/fonts/enc/dvips/tex-gyre/"
+                "/fonts/map/dvips/tex-gyre/"
+                "/fonts/opentype/public/tex-gyre/"
+                "/fonts/tfm/public/tex-gyre/"
+                "/fonts/type1/public/tex-gyre/"
+                "/tex/latex/tex-gyre/")
+              (base32
+               "1ldnlmclghm3gnyv02r8a6cqybygz2ifq07mhykhf43h1pw3aq7k")
+              #:trivial? #t))
+    (home-page "https://ctan.org/pkg/tex-gyre")
+    (synopsis "TeX fonts extending URW fonts")
+    (description
+     "The TeX-GYRE bundle consist of multiple font families:
+@itemize @bullet
+@item Adventor, based on the URW Gothic L family of fonts;
+@item Bonum, based on the URW Bookman L family;
+@item Chorus, based on URW Chancery L Medium Italic;
+@item Cursor, based on URW Nimbus Mono L;
+@item Heros, based on URW Nimbus Sans L;
+@item Pagella, based on URW Palladio L;
+@item Schola, based on the URW Century Schoolbook L family;
+@item Termes, based on the URW Nimbus Roman No9 L family of fonts.
+@end itemize
+
+The constituent standard faces of each family have been greatly extended
+(though Chorus omits Greek support and has no small-caps family).  Each
+family is available in Adobe Type 1 and Open Type formats, and LaTeX
+support (for use with a variety of encodings) is provided.")
+    ;; The GUST font license (GFL) is legally identical to the LaTeX Project
+    ;; Public License (LPPL), version 1.3c or later, but comes with an
+    ;; additional but not legally binding clause.
+    (license license:lppl1.3c+)))
+
 (define-public texlive-lm
   (package
     (inherit (simple-texlive-package
@@ -927,73 +1047,69 @@ Computers & Typesetting series.")
 (define-public texlive-fonts-lm
   (deprecated-package "texlive-fonts-lm" texlive-lm))
 
-(define-public texlive-fonts-knuth-lib
-  (package
-    (name "texlive-fonts-knuth-lib")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/fonts/source/public/knuth-lib"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0in9aqyi8jkyf9d16z0li50z5fpwj1iwgwm83gmvwqcf7chfs04y"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
-       #:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
-               ;; Tell mf where to find mf.base
-               (setenv "MFBASES"
-                       (string-append mf "/share/texmf-dist/web2c"))
-               ;; Tell mf where to look for source files
-               (setenv "MFINPUTS"
-                       (string-append (getcwd) ":"
-                                      mf "/share/texmf-dist/metafont/base")))
-             (mkdir "build")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" font)
-                         (invoke "mf" "-progname=mf"
-                                 "-output-directory=build"
-                                 (string-append "\\"
-                                                "mode:=ljfour; "
-                                                "mag:=1; "
-                                                "batchmode; "
-                                                "input " font)))
-                       (find-files "." "(manfnt|logo.+)\\.mf$"))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (tfm (string-append
-                          out "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
-                    (mf  (string-append
-                          out "/share/texmf-dist/fonts/source/public/knuth-lib")))
-               (for-each (cut install-file <> tfm)
-                         (find-files "build" "\\.*"))
-               (for-each (cut install-file <> mf)
-                         (find-files "." "\\.mf"))
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)))
-    (home-page "https://www.ctan.org/pkg/knuth-lib")
-    (synopsis "Small library of METAFONT sources")
-    (description "This is a collection of core TeX and METAFONT macro files
+(define-public texlive-knuth-lib
+  (let ((template (simple-texlive-package
+                   "texlive-knuth-lib"
+                   (list "/fonts/source/public/knuth-lib/"
+                         "/tex/generic/knuth-lib/"
+                         "/tex/plain/knuth-lib/")
+                   (base32
+                    "0lizrhdr4pirhh4ry44znddksd7akkxli2i6sddm5rzqljiqdy3v")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (srfi srfi-26)))
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let ((mf (assoc-ref inputs "texlive-metafont")))
+                     ;; Tell mf where to find mf.base
+                     (setenv "MFBASES"
+                             (string-append mf "/share/texmf-dist/web2c"))
+                     ;; Tell mf where to look for source files
+                     (setenv "MFINPUTS"
+                             (string-append (getcwd) ":"
+                                            mf "/share/texmf-dist/metafont/base")))
+                   (mkdir "build")
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "batchmode; "
+                                                      "input " font)))
+                             (find-files "." "(manfnt|logo.+)\\.mf$")))
+                 #t))
+             (add-after 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let* ((out (assoc-ref outputs "out"))
+                          (tfm (string-append
+                                out "/share/texmf-dist/fonts/tfm/public/knuth-lib")))
+                     (for-each (cut install-file <> tfm)
+                               (find-files "build" "\\.tfm"))
+                     #t))))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont" ,texlive-metafont)))
+      (home-page "https://www.ctan.org/pkg/knuth-lib")
+      (synopsis "Small library of METAFONT sources")
+      (description "This is a collection of core TeX and METAFONT macro files
 from Donald Knuth, including the plain format, plain base, and the MF logo
 fonts.")
-    (license license:knuth)))
+      (license license:knuth))))
+
+(define-public texlive-fonts-knuth-lib
+  (deprecated-package "texlive-fonts-knuth-lib" texlive-knuth-lib))
 
 (define-public texlive-fonts-latex
   (package
@@ -1022,7 +1138,7 @@ fonts.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -1061,7 +1177,7 @@ fonts.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/latex-fonts")
     (synopsis "Collection of fonts used in LaTeX distributions")
@@ -1071,27 +1187,81 @@ class), line and circle fonts (for use in the picture environment) and LaTeX
 symbol fonts.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-mflogo
-  (package
-    (name "texlive-latex-mflogo")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "mflogo"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "15i2ib6nvhf31g1b92c6njf7n0g29znlq7hbfp9ii7qabhcwwvrj"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/mflogo"))
-    (home-page "http://www.ctan.org/pkg/mflogo")
-    (synopsis "LaTeX support for Metafont logo fonts")
-    (description
-     "This package provides LaTeX and font definition files to access the
+(define-public texlive-mflogo
+  (let ((template (simple-texlive-package
+                   "texlive-mflogo"
+                   (list "/doc/latex/mflogo/"
+                         "/source/latex/mflogo/"
+                         "/fonts/source/public/mflogo/logosl8.mf")
+                   (base32
+                    "1vb4mg7fh4k54g7nqwiw3qm4iir8whpfnspis76l4sddzar1amh7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build texlive-build-system)
+            (guix build utils)
+            (srfi srfi-1)
+            (srfi srfi-26)))
+         ((#:tex-directory _ #t)
+          "latex/mflogo")
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/mflogo") #t))
+             (add-after 'build 'build-font-metrics
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((root "../../..")
+                       (mf (assoc-ref inputs "texlive-metafont"))
+                       (kl (assoc-ref inputs "texlive-knuth-lib")))
+                   ;; Tell mf where to find mf.base
+                   (setenv "MFBASES"
+                           (string-append mf "/share/texmf-dist/web2c"))
+                   ;; Tell mf where to look for source files
+                   (setenv "MFINPUTS"
+                           (string-append root ":"
+                                          mf "/share/texmf-dist/metafont/base:"
+                                          kl "/share/texmf-dist/fonts/source/public/knuth-lib:"
+                                          root "/fonts/source/public/mflogo/"))
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "scrollmode; "
+                                                      "input " (basename font))))
+                             (find-files (string-append root
+                                                        "/fonts/source/public/mflogo/")
+                                         "\\.mf$")))
+                 #t))
+             (add-before 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (tfm (string-append
+                              out "/share/texmf-dist/fonts/tfm/public/mflogo")))
+                   (for-each (lambda (file)
+                               (install-file file tfm)
+                               (delete-file file))
+                             (find-files "build" "\\.tfm"))
+                   #t)))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont" ,texlive-metafont)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)))
+      (home-page "http://www.ctan.org/pkg/mflogo")
+      (synopsis "LaTeX support for Metafont logo fonts")
+      (description
+       "This package provides LaTeX and font definition files to access the
 Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
 logos in LaTeX documents.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-public texlive-latex-mflogo
+  (deprecated-package "texlive-latex-mflogo" texlive-mflogo))
 
 (define-public texlive-mflogo-font
   (package
@@ -1147,171 +1317,11 @@ Taco Hoekwater.")
           `(modify-phases ,phases
              (add-before 'build 'build-fonts
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
-                 (let ((build (string-append (getcwd) "/build-fonts")))
-                   (mkdir-p build)
-                   (with-directory-excursion "fonts/source/public/amsfonts"
-                     (for-each (lambda (font)
-                                 (format #t "building font ~a\n" (basename font ".mf"))
-                                 (with-directory-excursion (dirname font)
-                                   (invoke "mf" "-progname=mf"
-                                           (string-append "-output-directory=" build)
-                                           (string-append "\\"
-                                                          "mode:=ljfour; "
-                                                          "mag:=1; "
-                                                          "nonstopmode; "
-                                                          "input "
-                                                          (getcwd) "/"
-                                                          (basename font ".mf")))))
-                               (find-files "." "[0-9]+\\.mf$"))))
-
-                 ;; There are no metafont sources for the Euler fonts, so we
-                 ;; convert the afm files instead.
-                 (let ((build (string-append (getcwd) "/build-fonts/euler")))
-                   (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
-                     (for-each (lambda (font)
-                                 (format #t "converting afm font ~a\n" (basename font ".afm"))
-                                 (invoke "afm2tfm" font
-                                         (string-append build "/"
-                                                        (basename font ".tfm"))))
-                               (find-files "." "\\.afm$")))
+                 ;; Allow self fonts sources and other resources to be
+                 ;; discovered.
+                 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF")
+                                                     ":" (getcwd)))
 
-                   ;; Frustratingly, not all fonts can be created this way.  To
-                   ;; generate eufm8.tfm, for example, we first scale down
-                   ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
-                   ;; the pl file.
-                   (setenv "TEXINPUTS"
-                           (string-append build "//:"
-                                          (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
-                   (with-directory-excursion build
-                     (for-each (match-lambda
-                                 (((target-base target-size)
-                                   (source-base source-size))
-                                  (let ((factor (number->string
-                                                 (truncate/ (* 1000 target-size)
-                                                            source-size))))
-                                    (invoke "tex"
-                                            "-interaction=scrollmode"
-                                            (string-append "\\input fontinst.sty "
-                                                           "\\transformfont{" target-base "}"
-                                                           "{\\scalefont{" factor "}"
-                                                           "{\\fromafm{" source-base "}}} "
-                                                           "\\bye")))
-                                  (invoke "pltotf"
-                                          (string-append target-base ".pl")
-                                          (string-append target-base ".tfm"))
-                                  (delete-file (string-append target-base ".pl"))))
-
-                               '((("eufm8" 8) ("eufm10" 10))
-
-                                 (("eufb6" 6) ("eufb7" 7))
-                                 (("eufb8" 8) ("eufb10" 10))
-                                 (("eufb9" 9) ("eufb10" 10))
-
-                                 (("eufm6" 6) ("eufb7" 7))
-                                 (("eufm9" 9) ("eufb10" 10))
-
-                                 (("eurb6" 6) ("eurb7" 7))
-                                 (("eurb8" 8) ("eurb10" 10))
-                                 (("eurb9" 9) ("eurb10" 10))
-
-                                 (("eurm6" 6) ("eurm7" 7))
-                                 (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
-             (add-after 'install 'install-generated-fonts
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (copy-recursively "build-fonts"
-                                   (string-append
-                                    (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
-      (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
-      (home-page "https://www.ctan.org/pkg/amsfonts")
-      (synopsis "TeX fonts from the American Mathematical Society")
-      (description
-       "This package provides an extended set of fonts for use in mathematics,
-including: extra mathematical symbols; blackboard bold letters (uppercase
-only); fraktur letters; subscript sizes of bold math italic and bold Greek
-letters; subscript sizes of large symbols such as sum and product; added sizes
-of the Computer Modern small caps font; cyrillic fonts (from the University of
-Washington); Euler mathematical fonts.  All fonts are provided as Adobe Type 1
-files, and all except the Euler fonts are provided as Metafont source.  The
-distribution also includes the canonical Type 1 versions of the Computer
-Modern family of fonts.  The Euler fonts are supported by separate packages;
-details can be found in the documentation.")
-      (license license:silofl1.1))))
-
-;; XXX: we can only change texlive-amsfonts on the core-updates branch.  This
-;; patched version generates only tfm files for fonts provided by the source
-;; files of this package, not variants of the fonts provided by texlive-cm.
-(define-public texlive-amsfonts/patched
-  (let ((template (simple-texlive-package
-                   "texlive-amsfonts"
-                   (list "/source/latex/amsfonts/"
-                         "/fonts/source/public/amsfonts/"
-                         "/fonts/type1/public/amsfonts/"
-                         "/fonts/afm/public/amsfonts/"
-                         "/fonts/map/dvips/amsfonts/"
-                         "/tex/plain/amsfonts/"
-                         "/doc/fonts/amsfonts/")
-                   (base32
-                    "15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
-    (package
-      (inherit template)
-      (arguments
-       (substitute-keyword-arguments (package-arguments template)
-         ((#:build-targets _ #t)
-          '(list "amsfonts.ins"))
-         ((#:tex-directory _ #t)
-          "latex/amsfonts")
-         ((#:modules modules '())
-          `((guix build texlive-build-system)
-            (guix build utils)
-            (ice-9 match)
-            (srfi srfi-1)
-            (srfi srfi-26)))
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'build 'build-fonts
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
                  (let ((build (string-append (getcwd) "/build-fonts")))
                    (mkdir-p build)
                    (with-directory-excursion "fonts/source/public/amsfonts"
@@ -1333,7 +1343,7 @@ details can be found in the documentation.")
                  ;; convert the afm files instead.
                  (let ((build (string-append (getcwd) "/build-fonts/euler")))
                    (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
+                   (with-directory-excursion "fonts/afm/public/amsfonts/euler"
                      (for-each (lambda (font)
                                  (format #t "converting afm font ~a\n" (basename font ".afm"))
                                  (invoke "afm2tfm" font
@@ -1347,10 +1357,9 @@ details can be found in the documentation.")
                    ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
                    ;; the pl file.
                    (setenv "TEXINPUTS"
-                           (string-append build "//:"
+                           (string-append ":" build "//:"
                                           (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
+                                          (getcwd) "/source/latex/amsfonts//:"))
                    (with-directory-excursion build
                      (for-each (match-lambda
                                  (((target-base target-size)
@@ -1385,19 +1394,16 @@ details can be found in the documentation.")
 
                                  (("eurm6" 6) ("eurm7" 7))
                                  (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
+                                 (("eurm9" 9) ("eurm10" 10))))))))
              (add-after 'install 'install-generated-fonts
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (copy-recursively "build-fonts"
                                    (string-append
                                     (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
+       `(("texlive-updmap.cfg" ,(texlive-updmap.cfg
+                                 (list texlive-fontinst)))))
       (home-page "https://www.ctan.org/pkg/amsfonts")
       (synopsis "TeX fonts from the American Mathematical Society")
       (description
@@ -1461,7 +1467,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
              ;; Build tfm font.
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -1487,7 +1493,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
                  #t))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)
+         ("texlive-metafont" ,texlive-metafont)
          ("texlive-cm" ,texlive-cm)))
       (home-page "https://www.ctan.org/pkg/etex")
       (synopsis "Extended version of TeX")
@@ -1505,7 +1511,7 @@ incorporates the e-TeX extensions.")
               "texlive-tex-plain"
               (list "/tex/plain/")
               (base32
-               "1m4qpaszwfv7j8a85rlwl7rs4iv5nlj67c1vvn6ysly72h9gjydb")
+               "1qryji08shim7fwjfcm0rcb0m5pwagjv1ahpr3xkfg8mkj160nrg")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
@@ -1612,11 +1618,9 @@ language.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-bulgarian" "bg"
-              (list "/doc/generic/hyph-utf8/bg/azbukaExtended.pdf"
-                    "/doc/generic/hyph-utf8/bg/azbukaExtended.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
               (base32
-               "0ngrgw2rmipxss76rgfk62x9nnsgwmaxxna2jqxxhybai3q39mx5")))
+               "0m254y71j3qrb71klvfalfmic3kjy31l85b9cgpdm5yznlsq3i8d")))
     (synopsis "Hyphenation patterns for Bulgarian")
     (description "The package provides hyphenation patterns for the Bulgarian
 language in T2A and UTF-8 encodings.")
@@ -1640,9 +1644,10 @@ T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-chinese" "zh-latn-pinyin"
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
+              '("/tex/generic/hyph-utf8/patterns/ptex/hyph-zh-latn-pinyin.ec.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
               (base32
-               "1j68mry2zy91m1kbzwhin5q2jajf6xh48npdds8wvp1sqmzih2a3")))
+               "1hhh30hcjymm2igpllly04cavsfmd6xrjkd9zax6b2wdxn3ka4pm")))
     (synopsis "Hyphenation patterns for unaccented Chinese pinyin")
     (description "The package provides hyphenation patterns for unaccented
 Chinese pinyin T1/EC and UTF-8 encodings.")
@@ -1881,10 +1886,10 @@ in monotonic and polytonic spelling in LGR and UTF-8 encodings.")
     (inherit (texlive-hyphen-package
               "texlive-hyphen-hungarian" "hu"
               (list "/doc/generic/huhyphen/"
-                    "/doc/generic/hyph-utf8/hu/"
+                    "/doc/generic/hyph-utf8/languages/hu/"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-hu.tex")
               (base32
-               "1j1b8kksg9r8nmjyjvvz8fr3hgcrjj6jlybf9p06nwrrwm2r8j8f")))
+               "006d2290lcsqzh9ljansbaj9k52s17zgkw0kpsspn5l7a8n00zcl")))
     (synopsis "Hyphenation patterns for Hungarian")
     (description "This package provides hyphenation patterns for Hungarian in
 T1/EC and UTF-8 encodings.")
@@ -1996,11 +2001,12 @@ Europe, in T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-latin" '("la-x-classic" "la-x-liturgic" "la")
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-la-x-classic.ec.tex")
               (base32
-               "0rxg8a4s5cpj8vlkz5a74a036axda5jqgvr3f9aj2cc2x9f2f3w9")))
+               "119rf6sk1f639ky6zr9njn21nsxzgfmjci94y26745qs8w08ilkl")))
     (synopsis "Liturgical Latin hyphenation patterns")
     (description "This package provides hyphenation patterns for Latin in
 T1/EC and UTF-8 encodings, mainly in modern spelling (u when u is needed and v
@@ -2042,6 +2048,18 @@ L7X and UTF-8 encodings.")
     ;; the hyph-utf8 package we choose the LPPL license.
     (license license:lppl)))
 
+(define-public texlive-hyphen-macedonian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-macedonian" "mk"
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-mk.tex")
+              (base32
+               "01w4cv8jm9q2gijys7cd7s6lfycdpgw9m26yxicc14ywbpi4ij3i")))
+    (synopsis "Macedonian hyphenation patterns")
+    (description "This package provides hypenation patterns for Macedonian.")
+    ;; XXX: License just says 'GPL'.  Assume GPL2 since the file predates GPL3.
+    (license license:gpl2+)))
+
 (define-public texlive-hyphen-mongolian
   (package
     (inherit (texlive-hyphen-package
@@ -2180,10 +2198,10 @@ T2A and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-sanskrit" "sa"
-              (list "/doc/generic/hyph-utf8/sa/hyphenmin.txt"
+              (list "/doc/generic/hyph-utf8/languages/sa/hyphenmin.txt"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex")
               (base32
-               "0gi2qk0wf388h9n25gzhv0cdz67ph83wal8h3iz2sqnpdjsw8kpc")))
+               "1bkzj8swj4lbswf1vr4pb1jg6dixzs7p8h8zm8s8as52h442aida")))
     (synopsis "Sanskrit hyphenation patterns")
     (description "This package provides hyphenation patterns for Sanskrit and
 Prakrit in longdesc transliteration, and in Devanagari, Bengali, Kannada,
@@ -2241,7 +2259,7 @@ T1/EC and UTF-8 encodings.")
               "texlive-hyphen-spanish" "es"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-es.tex")
               (base32
-               "1h3yg9vcq0lf7hxv0ahkqmyg269dxjs8m2mz8sgz5l1fxmvahvaj")))
+               "05lbvjkj304xxghyihk8js0kmg97ddlgijld3bp81bc28h4cav0v")))
     (synopsis "Hyphenation patterns for Spanish")
     (description "The package provides hyphenation patterns for Spanish in
 T1/EC and UTF-8 encodings.")
@@ -2361,7 +2379,7 @@ T1/EC and UTF-8 encodings.")
                     "/doc/generic/hyph-utf8/img/miktex-languages.png"
                     "/doc/generic/hyph-utf8/img/texlive-collection.png")
               (base32
-               "1bar5mc808ch20anhqrdxcwiych359qsvr7mggxpg2l2kq5xdyq0")))
+               "1v6f59r1fcp7pk7ddskqdzl7hzbszsxd04mfd3xznv8fc73iv72l")))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -2397,7 +2415,7 @@ T1/EC and UTF-8 encodings.")
              (setenv "TFMFONTS"
                      (string-append (assoc-ref inputs "texlive-cm")
                                     "/share/texmf-dist/fonts/tfm/public/cm:"
-                                    (assoc-ref inputs "texlive-fonts-knuth-lib")
+                                    (assoc-ref inputs "texlive-knuth-lib")
                                     "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
              ;; ...and find all tex files in this environment.
              (setenv "TEXINPUTS"
@@ -2451,7 +2469,7 @@ T1/EC and UTF-8 encodings.")
        ;; for a working "tex".
        ("texlive-tex-plain" ,texlive-tex-plain)
        ("texlive-cm" ,texlive-cm)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+       ("texlive-knuth-lib" ,texlive-knuth-lib)
        ("texlive-hyphen-base" ,texlive-hyphen-base)))
     (home-page "https://ctan.org/pkg/hyph-utf8")
     (synopsis "Hyphenation patterns expressed in UTF-8")
@@ -2601,7 +2619,7 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
                     "/web2c/tcvn-t5.tcx"
                     "/web2c/viscii-t5.tcx")
               (base32
-               "191i8n3g46p53bb9dkx2ggwpzy7skgg0pbklsrpx8x4ayd86wcaf")
+               "1prvxq211hqfss1bhiykazqfcy298lsz3x8lbmbyrh9c8grnj4ip")
               #:trivial? #t))
     (home-page "https://www.tug.org/texlive/")
     (synopsis "Files related to the path searching library for TeX")
@@ -2617,7 +2635,7 @@ mechanism.  This package provides supporting files.")
               "texlive-latexconfig"
               (list "/tex/latex/latexconfig/")
               (base32
-               "1wa7yhdpnz1nyidwgli68fyr33jn951bnniqrih5lj98k09rqc3h")
+               "10ynmd8b9b9l1wl1mva23yz4zir53p6r5z31s39wmxz19pj12qvx")
               #:trivial? #t))
     (home-page "https://www.tug.org/")
     (synopsis "Configuration files for LaTeX-related formats")
@@ -2643,7 +2661,7 @@ formats.")
                          "/tex/latex/base/testpage.tex"
                          "/tex/latex/base/texsys.cfg")
                    (base32
-                    "0m0gjb4hbsf2iqkkx3px4f28r2scjvsjv4zb2whkbnb44apyw1f0")
+                    "11bcjmn0n7sv7g6r8v6nxl4x1pw0famqmq0v0pbjyz04akhvfvry")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -2677,7 +2695,7 @@ formats.")
                                '(("texlive-etex" . "/etex")
                                  ("texlive-cm" . "/cm")
                                  ("texlive-fonts-latex" . "/latex-fonts")
-                                 ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                                 ("texlive-knuth-lib" . "/knuth-lib")))
                           ":"))
                  (let ((cwd (getcwd)))
                    (setenv "TEXINPUTS"
@@ -2704,12 +2722,14 @@ formats.")
                  (let ((disabled-formats
                         '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
                           "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                          "platex-dev eptex" "uplatex-dev euptex"
                           "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
-                          "luacsplain luatex"
+                          "luacsplain luatex" "optex luatex"
+                          ;; LuaJIT is not ported to powerpc64le* yet.
                           ,@(if (string-prefix? "powerpc64le"
                                                 (or (%current-target-system)
                                                     (%current-system)))
-                              '("luajittex") '())
+                              '("luajittex" "luajithbtex" "mfluajit") '())
                           "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
                           "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
                           "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
@@ -2724,7 +2744,10 @@ formats.")
                    (make-file-writable "web2c/fmtutil.cnf")
                    (substitute* "web2c/fmtutil.cnf"
                      (((string-append "^(" (string-join disabled-formats "|") ")") m)
-                      (string-append "#! " m))))
+                      (string-append "#! " m))
+                     (("translate-file=cp227")
+                      (format #f "translate-file=~a/share/texmf-dist/web2c/cp227"
+                              (assoc-ref inputs "texlive-kpathsea")))))
                  (invoke "fmtutil-sys" "--all"
                          "--fmtdir=web2c"
                          (string-append "--cnffile=web2c/fmtutil.cnf"))
@@ -2760,7 +2783,7 @@ formats.")
          ("texlive-kpathsea" ,texlive-kpathsea)
          ("texlive-cm" ,texlive-cm)
          ("texlive-fonts-latex" ,texlive-fonts-latex)
-         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)
          ("texlive-luatexconfig"
           ,(texlive-origin
             "texlive-luatexconfig" (number->string %texlive-revision)
@@ -2768,7 +2791,7 @@ formats.")
                   "/tex/generic/config/luatexiniconfig.tex"
                   "/web2c/texmfcnf.lua")
             (base32
-             "1gi87wy12r8w8fhx9ajcid382dmqzf6b9070b5nndvbbjrvhwf23")))))
+             "0pk0ckwd5p58nqmhlajhbgxynym25jmhv48xm5ns540r996k0g2r")))))
       (propagated-inputs
        `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
          ("texlive-etex" ,texlive-etex)
@@ -2810,6 +2833,7 @@ formats.")
          ("texlive-hyphen-latin" ,texlive-hyphen-latin)
          ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
          ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
+         ("texlive-hyphen-macedonian" ,texlive-hyphen-macedonian)
          ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
          ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
          ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
@@ -2845,6 +2869,60 @@ with the required packages, constitutes what every LaTeX distribution should
 contain.")
       (license license:lppl1.3c+))))
 
+(define-public texlive-latex-atveryend
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-atveryend"
+              '("/doc/latex/atveryend/README.md"
+                "/tex/latex/atveryend/")
+              (base32
+               "1gz5ssxjlqa53a8blsmdk2qjahzc910ldh26xjxfxgqnqb03rqx7")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atveryend")
+    (synopsis "Hooks at the very end of a document")
+    (description
+     "This LaTeX packages provides two hooks for @code{\\end@{document@}}
+that are executed after the hook of @code{\\AtEndDocument}:
+@code{\\AfterLastShipout} can be used for code that is to be executed right
+after the last @code{\\clearpage} before the @file{.aux} file is closed.
+@code{\\AtVeryEndDocument} is used for code after closing and final reading
+of the @file{.aux} file.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-auxhook
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-auxhook"
+              '("/doc/latex/auxhook/README.md"
+                "/tex/latex/auxhook/")
+              (base32
+               "1xh445shr00rh43nnz03xh8k2mdrxgsr03lllqpgvwhm6yzsydkf")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/auxhook")
+    (synopsis "Hooks for auxiliary files")
+    (description
+     "This package provides hooks for adding code at the beginning of
+@file{.aux} files.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-epstopdf-pkg
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-epstopdf-pkg"
+              '("/doc/latex/epstopdf-pkg/"
+                "/tex/latex/epstopdf-pkg/")
+              (base32
+               "0zl6jiyp2cvvyqx3lwxdkcvvnkqgbwj4issq07cagf61gljq6fns")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/epstopdf-pkg")
+    (synopsis "Call @command{epstopdf} \"on the fly\"")
+    (description
+     "The package adds support for EPS files in the @code{graphicx} package
+when running under pdfTeX.  If an EPS graphic is detected, the package
+spawns a process to convert the EPS to PDF, using the script
+@command{epstopdf}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-filecontents
   (package
     (name "texlive-latex-filecontents")
@@ -2855,7 +2933,7 @@ contain.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1h78zw0vhldx478zs4v86ajg7vpkysd1kg3npc480qqls3q6ba40"))))
+                "1cmfigg5jx3hmdyh4gv8kwxi7dg076ldkxmr46s05xvhzjig1z9x"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/filecontents"))
     (home-page "https://www.ctan.org/pkg/filecontents")
@@ -2870,31 +2948,6 @@ overwrite existing files and letting you use @code{filecontents} /
 @code{filecontents*} anywhere.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-ifxetex
-  (package
-    (name "texlive-generic-ifxetex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "generic" "ifxetex"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0w2xj7n0szavj329kds09q626szkc378p3w0sk022q0ln4ksz86d"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/ifxetex"
-       #:tex-format "xelatex"))
-    (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
-    (home-page "https://www.ctan.org/pkg/ifxetex")
-    (synopsis "Am I running under XeTeX?")
-    (description
-     "This is a simple package which provides an @code{\\ifxetex} conditional,
-so that other code can determine that it is running under XeTeX.  The package
-requires the e-TeX extensions to the TeX primitive set.")
-    (license license:lppl1.3c+)))
-
 (define-public texlive-epsf
   (package
     (inherit (simple-texlive-package
@@ -2925,7 +2978,7 @@ users, via its Plain TeX version.)")
               (list "/doc/latex/fancyvrb/README"
                     "/tex/latex/fancyvrb/")
               (base32
-               "1dwkcradz9nwpjwmv1sjzn77lvw25ypr0rrgmf1kd8pd2mw7dxcn")
+               "005ylzlysmvy21rwkbnrf0hnp5bmsjsj11hydg1d9dnq9ffv2s1h")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fancyvrb")
     (synopsis "Sophisticated verbatim text")
@@ -2945,8 +2998,10 @@ verbatim source).")
               (list "/doc/latex/graphics-def/README.md"
                     "/tex/latex/graphics-def/")
               (base32
-               "0zrbn9cwfnnrrl3b2zsd74ldksp9jwpvjh7z93ild1m75crpb39a")
+               "125lm2m9813p29yl7am21kgqdpigyqvrjarg73jpaczifbbbqklf")
               #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-latex-epstopdf-pkg" ,texlive-latex-epstopdf-pkg)))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "Color and graphics option files")
     (description
@@ -2982,7 +3037,7 @@ set default \"driver\" options for the color and graphics packages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0nlfhn55ax89rcvpkrl9570671b62kcr4c9l5ch3w5zw9vmi00dz"))))
+                "0asln498brkd1miyhc7029fjx7gcj6vbbas5aan6w289ac4yz54h"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/graphics"))
     (propagated-inputs
@@ -2997,6 +3052,22 @@ documents.  It comprises the packages color, graphics, graphicx, trig, epsfig,
 keyval, and lscape.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-latex-hycolor
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hycolor"
+              (list "/doc/latex/hycolor/README.md"
+                    "/tex/latex/hycolor/")
+              (base32
+               "026lfb4l7b3q8g6zc68siqandhb1x98cbycn7njknqva6s99aiqn")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Color for hyperref and bookmark")
+    (description
+     "This package provides the code for the @code{color} option that is
+used by @code{hyperref} and @code{bookmark}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-xcolor
   (let ((template (simple-texlive-package
                    "texlive-xcolor"
@@ -3037,29 +3108,120 @@ tables.")
 (define-public texlive-latex-xcolor
   (deprecated-package "texlive-latex-xcolor" texlive-xcolor))
 
-(define-public texlive-latex-hyperref
-  (package
-    (name "texlive-latex-hyperref")
-    (version "6.84a2")
-    ;; The sources in the TeX Live SVN repository do not contain hluatex.dtx,
-    ;; so we fetch the release from GitHub.
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ho-tex/hyperref/"
-                                  "archive/release-" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1d3rmjgzh0025a1dza55zb6nzzlgd1y9snwx45wq1c1vf42m79h2"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/hyperref"))
-    (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek) ; for ltxcmds.sty
-       ("texlive-latex-url" ,texlive-latex-url)))
-    (home-page "https://www.ctan.org/pkg/hyperref")
-    (synopsis "Extensive support for hypertext in LaTeX")
-    (description
-     "The @code{hyperref} package is used to handle cross-referencing commands
+(define-public texlive-xmltex
+  (let ((template (simple-texlive-package
+                   "texlive-xmltex"
+                   (list
+                    "/doc/otherformats/xmltex/"
+                    "/tex/xmltex/")
+                   (base32
+                    "023gv9axq05vwqz50fnkig24dzahwlc4raks2s8xc4pzrv2dv1zy"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "tex/xmltex/base")
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-before 'install 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "tex" "\\.(ini|tex)$"))
+                 (invoke "fmtutil-sys" "--byfmt" "xmltex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfxmltex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/xmltex"))
+                   (symlink pdftex (string-append out "/bin/pdfxmltex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; The following fonts are propagated as a texlive-updmap.cfg as the font
+       ;; maps need to be recreated for the fonts to be usable.  They are
+       ;; required by xmltex through mlnames.sty and unicode.sty.
+       `(("texlive" ,(texlive-updmap.cfg
+                      (list
+                       texlive-amsfonts
+                       texlive-babel
+                       texlive-courier
+                       texlive-helvetic
+                       texlive-hyperref
+                       texlive-symbol
+                       texlive-tipa
+                       texlive-times
+                       texlive-zapfding
+                       ;; The following fonts, while not required, are used if
+                       ;; available:
+                       texlive-stmaryrd
+                       texlive-wasy)))))
+      (native-inputs
+       `(("texlive-tex-ini-files" ,texlive-tex-ini-files)))
+      (home-page "https://www.ctan.org/pkg/xmltex/")
+      (synopsis "Support for parsing XML documents")
+      (description "The package provides an implementation of a parser for
+documents matching the XML 1.0 and XML Namespace Recommendations.  Element and
+attribute names, as well as character data, may use any characters allowed in
+XML, using UTF-8 or a suitable 8-bit encoding.")
+      (license license:lppl1.0+))))        ;per xmltex/base/readme.txt
+
+(define-public texlive-hyperref
+  (let ((template (simple-texlive-package
+                   "texlive-hyperref"
+                   (list "/doc/latex/hyperref/"
+                         "/source/latex/hyperref/"
+                         ;; These files are not generated from the sources
+                         "/tex/latex/hyperref/minitoc-hyper.sty"
+                         "/tex/latex/hyperref/ntheorem-hyper.sty"
+                         "/tex/latex/hyperref/xr-hyper.sty")
+                   (base32
+                    "1d9myrrwf9zr62j5vp9q4drxs7rj4b06wq04imrnzban5s4gaq6v"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/hyperref")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/hyperref") #t))))))
+      (propagated-inputs
+       `(("texlive-generic-atbegshi" ,texlive-generic-atbegshi)
+         ("texlive-generic-bitset" ,texlive-generic-bitset)
+         ("texlive-generic-etexcmds" ,texlive-generic-etexcmds)
+         ("texlive-generic-gettitlestring" ,texlive-generic-gettitlestring)
+         ("texlive-generic-iftex" ,texlive-generic-iftex)
+         ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+         ("texlive-generic-intcalc" ,texlive-generic-intcalc)
+         ("texlive-generic-kvdefinekeys" ,texlive-generic-kvdefinekeys)
+         ("texlive-generic-kvsetkeys" ,texlive-generic-kvsetkeys)
+         ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)
+         ("texlive-generic-pdfescape" ,texlive-generic-pdfescape)
+         ("texlive-latex-auxhook" ,texlive-latex-auxhook)
+         ("texlive-latex-atveryend" ,texlive-latex-atveryend)
+         ("texlive-latex-hycolor" ,texlive-latex-hycolor)
+         ("texlive-latex-kvoptions" ,texlive-latex-kvoptions)
+         ("texlive-latex-letltxmacro" ,texlive-latex-letltxmacro)
+         ("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)
+         ("texlive-latex-refcount" ,texlive-latex-refcount)
+         ("texlive-latex-rerunfilecheck" ,texlive-latex-rerunfilecheck)
+         ("texlive-latex-url" ,texlive-latex-url)))
+      (home-page "https://www.ctan.org/pkg/hyperref")
+      (synopsis "Extensive support for hypertext in LaTeX")
+      (description
+       "The @code{hyperref} package is used to handle cross-referencing commands
 in LaTeX to produce hypertext links in the document.  The package provides
 backends for the @code{\\special} set defined for HyperTeX DVI processors; for
 embedded @code{pdfmark} commands for processing by Acrobat
@@ -3067,11 +3229,14 @@ Distiller (@code{dvips} and Y&Y's @code{dvipsone}); for Y&Y's @code{dviwindo};
 for PDF control within pdfTeX and @code{dvipdfm}; for TeX4ht; and for VTeX's
 pdf and HTML backends.  The package is distributed with the @code{backref} and
 @code{nameref} packages, which make use of the facilities of @code{hyperref}.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
 
-(define-public texlive-latex-oberdiek
+(define-public texlive-latex-hyperref
+  (deprecated-package "texlive-latex-hyperref" texlive-hyperref))
+
+(define-public texlive-oberdiek
   (package
-    (name "texlive-latex-oberdiek")
+    (name "texlive-oberdiek")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -3079,7 +3244,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0pi2d6gsddcs9wprdbar46s91kdc5fxl1m79g7xrbccsx8s9xbml"))))
+                "1ff6yjchdmn7lyllfrnxygjr2ipkrjbb1rs5iyryn47rc3r8mpmk"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/oberdiek"
@@ -3093,7 +3258,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
                (("ifpdf.ins") "ifpdf.dtx"))
              #t)))))
     (propagated-inputs
-     `(("texlive-generic-ifxetex" ,texlive-generic-ifxetex)))
+     `(("texlive-generic-iftex" ,texlive-generic-iftex)))
     (home-page "https://www.ctan.org/pkg/oberdiek")
     (synopsis "Bundle of packages submitted by Heiko Oberdiek")
     (description
@@ -3102,6 +3267,31 @@ better accessibility support for PDF files; extensible chemists reaction
 arrows; record information about document class(es) used; and many more.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-oberdiek
+  (deprecated-package "texlive-latex-oberdiek" texlive-oberdiek))
+
+(define-public texlive-latex-rerunfilecheck
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-rerunfilecheck"
+              '("/doc/latex/rerunfilecheck/"
+                "/tex/latex/rerunfilecheck/")
+              (base32
+               "1myz0d5bxhxvl4220ikywh921qld8n324kk9kscqbc5iw4063g56")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-uniquecounter" ,texlive-generic-uniquecounter)
+       ("texlive-latex-atveryend" ,texlive-latex-atveryend)
+       ("texlive-latex-kvoptions" ,texlive-latex-kvoptions)
+       ("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)))
+    (home-page "https://www.ctan.org/pkg/rerunfilecheck")
+    (synopsis "Checksum based rerun checks on auxiliary files")
+    (description
+     "This package provides additional rerun warnings if some auxiliary
+files have changed.  It is based on MD5 checksum, provided by pdfTeX.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-tools
   (package
     (name "texlive-latex-tools")
@@ -3112,11 +3302,23 @@ arrows; record information about document class(es) used; and many more.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1wqvn4z0s92h5iqzrvxw7hinzp95avjk9v8lnqbqr4kz6nv4xb9l"))))
+                "1p92bg1wdlg28m7xbdipx8rxavvpbmsx8zy845bk2rdqhc9gbhkl"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/tools"
-       #:build-targets '("tools.ins")))
+       #:build-targets '("tools.ins")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'provide-array-2016-10-06.sty
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; XXX: array.sty does:
+                      ;;  "DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}"
+                      ;; ...which causes some users (hypre) to look for that
+                      ;; file specifically.  Provide it.
+                      (with-directory-excursion (string-append
+                                                 (assoc-ref outputs "out")
+                                                 "/share/texmf-dist/tex"
+                                                 "/latex/tools")
+                        (symlink "array.sty" "array-2016-10-06.sty")))))))
     (home-page "https://www.ctan.org/pkg/latex-tools")
     (synopsis "LaTeX standard tools bundle")
     (description
@@ -3181,7 +3383,7 @@ Live distribution.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s77z2cbv841l45qrpf0s8qhzfa4wi689lg7zkw88qg18nzvy0ly"))))
+                "0w82d5a4d3rc950ms6ymj4mpw5ndz6qs5x53szcfgzgjxsns9l4w"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/l3kernel"))
@@ -3205,7 +3407,7 @@ that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1cv4fk9pabh7mkxhfsdmh4k8xpmzg1psgcsvd11c869m7n3a629h"))))
+                "15m3ly55gj8hk5xrkpw5bkj0ddwkk4v7qxa6sl3rkymdka1xl3cc"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/l3packages"
@@ -3250,58 +3452,84 @@ programming tools and kernel sup­port.  Packages provided in this release are:
 @end enumerate\n")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-fontspec
-  (package
-    (name "texlive-latex-fontspec")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "fontspec"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1223cw029n6zff7pqpwbsq1x8v3w63smczkmnybqxkw5h2za8gbz"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/fontspec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-default-fontspec.cfg
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-output-to-file
-                 (string-append (assoc-ref outputs "out")
-                                "/share/texmf-dist/tex/latex/fontspec/fontspec.cfg")
-               (lambda _
-                 (display "\
-%%% FONTSPEC.CFG %%%
-%
-% This configuration file sets up TeX Ligatures by default for all fonts loaded
-% with `\\setmainfont` and `\\setsansfont`.
-%
-% In addition, `\\setmonofont` has default features to enforce \"monospace\"
-% settings with regard to space stretchability and shrinkability.
-
-\\defaultfontfeatures
- [\\rmfamily,\\sffamily]
- {Ligatures=TeX}
-
-\\defaultfontfeatures
- [\\ttfamily]
- {WordSpace={1,0,0},
-  HyphenChar=None,
-  PunctuationSpace=WordSpace}
-")))
-             #t)))))
-    (propagated-inputs
-     `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
-    (home-page "https://www.ctan.org/pkg/fontspec")
-    (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
-    (description
-     "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
+(define-public texlive-fontspec
+  (let ((template (simple-texlive-package
+                   "texlive-fontspec"
+                   (list "/doc/latex/fontspec/"
+                         "/source/latex/fontspec/"
+                         "/tex/latex/fontspec/fontspec.cfg")
+                   (base32
+                    "06rms8dw1j67v3rgv6xmfykdmgbxi5rp78yxc782cy1sw07blgsg"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/fontspec")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/fontspec/") #t))))))
+      (propagated-inputs
+       `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
+      (home-page "https://www.ctan.org/pkg/fontspec")
+      (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+      (description
+       "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
 automatic and unified interface to feature-rich AAT and OpenType fonts through
 the NFSS in LaTeX running on XeTeX or LuaTeX engines.  The package requires
 the l3kernel and xparse bundles from the LaTeX 3 development team.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-public texlive-latex-fontspec
+  (deprecated-package "texlive-latex-fontspec" texlive-fontspec))
+
+(define-public texlive-l3build
+  (let ((template (simple-texlive-package
+                   "texlive-l3build"
+                   (list "/doc/latex/l3build/"
+                         "/doc/man/man1/l3build.1"
+                         "/scripts/l3build/"
+                         "/tex/latex/l3build/"
+                         ;; TODO: The dtx file builds only the documentation.
+                         ;; We avoid this for a simpler package definition,
+                         ;; but it may be possible to exclude
+                         ;; /doc/latex/l3build and the man page in the future.
+                         "/source/latex/l3build/")
+                   (base32
+                    "0hqb0f5rpj3mfmxfyn8cgxrm1j5ij466a9y23s0xxpmv11ma5i0i")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'install 'patch-shebangs-again
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 ;; XXX: Since the 'patch-shebangs' phase cannot change the
+                 ;; original source files patch the shebangs again here.
+                 (let* ((coreutils (assoc-ref inputs "coreutils"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (path (list (string-append coreutils "/bin")
+                                    (string-append texlive-bin "/bin"))))
+                   (for-each (lambda (file)
+                               (format #t "~a~%" file)
+                               (patch-shebang file path))
+                             (find-files (assoc-ref outputs "out")))
+                   #t)))))))
+      (inputs
+       `(("coreutils" ,coreutils)
+         ("texlive-bin" ,texlive-bin)))
+      (home-page "https://github.com/latex3/luaotfload")
+      (synopsis "Testing and building system for LaTeX")
+      (description
+       "The l3build module is designed to support the development of
+high-quality LaTeX code by providing: a unit testing system, automated
+typesetting of code sources, and a reliable packaging system for CTAN
+releases.  The bundle consists of a Lua script to run the tasks and a
+@code{.tex} file which provides the testing environment.")
+      (license license:lppl1.3c+))))
 
 ;; The SVN directory contains little more than a dtx file that generates three
 ;; of the many lua files that should be installed as part of this package.
@@ -3341,97 +3569,38 @@ this bundle for use independent of ConTeXt.")
     ;; GPL version 2 only
     (license license:gpl2)))
 
-(define-public texlive-luatex-luaotfload
-  (package
-    (name "texlive-luatex-luaotfload")
-    (version "2.8-fix-2")
-    ;; The release tarball does not contain all source files.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lualatex/luaotfload")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0l5l7iq3dxcxl65qaghcpjg27yd9iw1sxa8pnd7xlvlm09dhfdnf"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist")
-             "all")
-       #:parallel-build? #f ; not supported
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "doc/Makefile"
-               (("rst2man") "rst2man.py")
-               ;; Don't build the PDF.  This requires more of LaTeX.
-               (("\\$\\(DOCPDF\\)") ""))
-
-             (substitute* "Makefile"
-               ;; We don't build the PDF, so don't attempt to install it.
-               (("cp \\$\\(RESOURCES\\) \\$\\(DOCPDF\\)")
-                "cp $(RESOURCES)")
-               (("= \\$\\(DOCPDF\\)") "= ")
-               ;; Fix name of fontloader file
-               (("^LOADER.*= \\$\\(BUILDDIR\\)/fontloader-\\$\\(shell date \\+%F\\).lua")
-                "LOADER = $(BUILDDIR)/fontloader.lua"))
-
-             (mkdir "build")
-
-             ;; Don't download this file.
-             (copy-file (assoc-ref inputs "glyphlist")
-                        "build/glyphlist.txt")
-
-             ;; Don't use git
-             (let ((notes
-                    `((committer . "Philipp Gesang <phg@phi-gamma.net>")
-                      (description . ,version)
-                      (loader . "fontloader.lua")
-                      (revision . "ad480924393fffa2896156e1a32c22f5c61120dd")
-                      (timestamp . "2019-01-01 00:00:00 +0000"))))
-               (substitute* "scripts/mkstatus"
-                 (("local notes.*=.*")
-                  (string-append "local notes = {"
-                                 (string-join
-                                  (map (lambda (entry)
-                                         (format "[\"~a\"]=\"~a\","
-                                                 (symbol->string (car entry))
-                                                 (cdr entry)))
-                                       notes))
-                                 "}"))))
-             #t)))))
-    (native-inputs
-     `(("zip" ,zip)
-       ("unzip" ,unzip)
-       ("graphviz" ,graphviz)
-       ("lualatex" ,(texlive-union (list texlive-luatex-lualibs
-                                         texlive-context-base)))
-       ("python-docutils" ,python-docutils)
-       ("glyphlist"
-        ,(origin
-           (method url-fetch)
-           (uri (string-append "https://raw.githubusercontent.com/adobe-type-tools/"
-                               "agl-aglfn/b2a04cb906f9257cc06a2fe0ad4b3d663bc02136/"
-                               "glyphlist.txt"))
-           (sha256
-            (base32 "1s6svfw23rqzdvflv8frgd4xrwvrmsj8szwzqgcd39dp9rpjafjp"))))))
-    (propagated-inputs
-     `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
-    (home-page "https://github.com/lualatex/luaotfload")
-    (synopsis "OpenType font loader for LuaTeX")
-    (description
-     "Luaotfload is an adaptation of the ConTeXt font loading system for the
+;; TODO: We should be able to build this from the sources on Github with
+;; texlive-l3build, but I haven't been able to get it to work.
+(define-public texlive-luaotfload
+  (let ((template (simple-texlive-package
+                   "texlive-luaotfload"
+                   (list "/doc/luatex/luaotfload/"
+                         "/doc/man/man1/luaotfload-tool.1"
+                         "/doc/man/man5/luaotfload.conf.5"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.lua"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.tex"
+                         "/scripts/luaotfload/luaotfload-tool.lua"
+                         "/tex/luatex/luaotfload/")
+                   (base32
+                    "0a07m8gckkhzj30rjglj4abpx6pqhl9bx4vq2ak29k0wa3s9rm76")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (propagated-inputs
+       `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
+      (home-page "https://github.com/lualatex/luaotfload")
+      (synopsis "OpenType font loader for LuaTeX")
+      (description
+       "Luaotfload is an adaptation of the ConTeXt font loading system for the
 Plain and LaTeX formats.  It allows OpenType fonts to be loaded with font
 features accessible using an extended font request syntax while providing
 compatibilitywith XeTeX.  By indexing metadata in a database it facilitates
 loading fonts by their proper names instead of file names.")
-    ;; GPL version 2 only
-    (license license:gpl2)))
+      ;; GPL version 2 only
+      (license license:gpl2))))
+
+(define-public texlive-luatex-luaotfload
+  (deprecated-package "texlive-luatex-luaotfload" texlive-luaotfload))
 
 (define-public texlive-latex-amsmath
   (package
@@ -3443,7 +3612,7 @@ loading fonts by their proper names instead of file names.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0qgk2332dacsxn1z95qzp35gbs7wrzl1ipjdhnmk1r897msm4sf5"))))
+                "1jx4sd35iwcr5qpvnirshp4rdffqq09k6sbmhwxi8kkir4x5hkmc"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/amsmath"))
     (home-page "https://www.ctan.org/pkg/amsmath")
@@ -3462,64 +3631,86 @@ mathematics, and @code{ntheoremntheorem}, for specifying theorem (and similar)
 definitions.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-amscls
-  (package
-    (name "texlive-latex-amscls")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "amscls"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0c2j9xh4qpi0x1vvcxdjxq6say0zhyr569fryi5cmhp8bclh4kca"))))
-    (build-system texlive-build-system)
-    (arguments
-     `(#:tex-directory "latex/amscls"))
-    (home-page "https://www.ctan.org/pkg/amscls")
-    (synopsis "AMS document classes for LaTeX")
-    (description
-     "This bundle contains three AMS classes: @code{amsartamsart} (for writing
+(define-public texlive-amscls
+  (let ((template (simple-texlive-package
+                   "texlive-amscls"
+                   (list "/doc/latex/amscls/"
+                         "/source/latex/amscls/"
+                         "/bibtex/bst/amscls/")
+                   (base32
+                    "1mv96i5372257zaciv06n1wwa7v09q0fa9pbq9kck826a0syidvs"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/amscls")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/amscls/") #t))))))
+      (home-page "https://www.ctan.org/pkg/amscls")
+      (synopsis "AMS document classes for LaTeX")
+      (description
+       "This bundle contains three AMS classes: @code{amsartamsart} (for writing
 articles for the AMS), @code{amsbookamsbook} (for books) and
 @code{amsprocamsproc} (for proceedings), together with some supporting
 material.  The material is made available as part of the AMS-LaTeX
 distribution.")
-    (license license:lppl1.3c+)))
+      (license license:lppl1.3c+))))
 
-(define-public texlive-latex-babel
-  (package
-    (name "texlive-latex-babel")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "babel"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1rwqq841i1rxywymzwkw0cw2yhgvxwjx5mgygfasvypwrwll6f6s"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/babel"
-       #:phases
-       (modify-phases %standard-phases
-         ;; This package tries to produce babel.aux twice but refuses to
-         ;; overwrite the first one.
-         (add-before 'build 'fix-ins
-           (lambda _
-             (substitute* "babel.ins"
-               (("askonceonly") "askforoverwritefalse"))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/babel")
-    (synopsis "Multilingual support for Plain TeX or LaTeX")
-    (description
-     "The package manages culturally-determined typographical (and other)
+(define-public texlive-latex-amscls
+  (deprecated-package "texlive-latex-amscls" texlive-amscls))
+
+(define-public texlive-babel
+  (let ((template (simple-texlive-package
+                   "texlive-babel"
+                   (list "/doc/latex/babel/"
+                         "/source/latex/babel/"
+                         "/makeindex/babel/")
+                   (base32
+                    "0xjj4h48vdb9ydyg13c5jyfi4vm39117c8jv2gjrvjw89h0djbp1"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/babel")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/babel/") #t))
+             ;; This package tries to produce babel.aux twice but refuses to
+             ;; overwrite the first one.
+             (add-before 'build 'fix-ins
+               (lambda _
+                 (substitute* "babel.ins"
+                   (("askonceonly") "askforoverwritefalse"))
+                 #t))
+             (add-after 'install 'install-locales
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((locale-directory
+                        (string-append (assoc-ref outputs "out")
+                                       "/share/texmf-dist/tex/generic/babel/locale/")))
+                   (mkdir-p locale-directory)
+                   (invoke "unzip" "locale.zip" "-d"
+                           locale-directory))))))))
+      (native-inputs
+       `(("unzip" ,unzip)))
+      (home-page "https://www.ctan.org/pkg/babel")
+      (synopsis "Multilingual support for Plain TeX or LaTeX")
+      (description
+       "The package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages.  A document may
 select a single language to be supported, or it may select several, in which
 case the document may switch from one language to another in a variety of
 ways.  Babel uses contributed configuration files that provide the detail of
 what has to be done for each language.  Users of XeTeX are advised to use the
 polyglossia package rather than Babel.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-public texlive-latex-babel
+  (deprecated-package "texlive-latex-babel" texlive-babel))
 
 (define-public texlive-generic-babel-english
   (package
@@ -3614,30 +3805,133 @@ T2* and X2 encodings. These encodings cover (between them) pretty much every
 language that is written in a Cyrillic alphabet.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-psnfss
-  (package
-    (name "texlive-latex-psnfss")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "psnfss"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1920dcq8613yzprasbg80fh4fcjcidvvl54wkx438nimyxcri7qz"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/psnfss"))
-    (home-page "https://www.ctan.org/pkg/psnfss")
-    (synopsis "Font support for common PostScript fonts")
-    (description
-     "The PSNFSS collection includes a set of files that provide a complete
+(define-public texlive-psnfss
+  (let ((template (simple-texlive-package
+                   "texlive-psnfss"
+                   (list "/doc/latex/psnfss/"
+                         "/source/latex/psnfss/"
+                         "/fonts/map/dvips/psnfss/"
+
+                         ;; Only the .sty files are generated from the sources.
+                         "/tex/latex/psnfss/8rbch.fd"
+                         "/tex/latex/psnfss/8rpag.fd"
+                         "/tex/latex/psnfss/8rpbk.fd"
+                         "/tex/latex/psnfss/8rpcr.fd"
+                         "/tex/latex/psnfss/8rphv.fd"
+                         "/tex/latex/psnfss/8rpnc.fd"
+                         "/tex/latex/psnfss/8rppl.fd"
+                         "/tex/latex/psnfss/8rptm.fd"
+                         "/tex/latex/psnfss/8rput.fd"
+                         "/tex/latex/psnfss/8rpzc.fd"
+                         "/tex/latex/psnfss/omlbch.fd"
+                         "/tex/latex/psnfss/omlpag.fd"
+                         "/tex/latex/psnfss/omlpbk.fd"
+                         "/tex/latex/psnfss/omlpcr.fd"
+                         "/tex/latex/psnfss/omlphv.fd"
+                         "/tex/latex/psnfss/omlpnc.fd"
+                         "/tex/latex/psnfss/omlppl.fd"
+                         "/tex/latex/psnfss/omlptm.fd"
+                         "/tex/latex/psnfss/omlptmcm.fd"
+                         "/tex/latex/psnfss/omlput.fd"
+                         "/tex/latex/psnfss/omlpzc.fd"
+                         "/tex/latex/psnfss/omlzplm.fd"
+                         "/tex/latex/psnfss/omlzpple.fd"
+                         "/tex/latex/psnfss/omlztmcm.fd"
+                         "/tex/latex/psnfss/omsbch.fd"
+                         "/tex/latex/psnfss/omspag.fd"
+                         "/tex/latex/psnfss/omspbk.fd"
+                         "/tex/latex/psnfss/omspcr.fd"
+                         "/tex/latex/psnfss/omsphv.fd"
+                         "/tex/latex/psnfss/omspnc.fd"
+                         "/tex/latex/psnfss/omsppl.fd"
+                         "/tex/latex/psnfss/omsptm.fd"
+                         "/tex/latex/psnfss/omsput.fd"
+                         "/tex/latex/psnfss/omspzc.fd"
+                         "/tex/latex/psnfss/omspzccm.fd"
+                         "/tex/latex/psnfss/omszplm.fd"
+                         "/tex/latex/psnfss/omszpple.fd"
+                         "/tex/latex/psnfss/omsztmcm.fd"
+                         "/tex/latex/psnfss/omxpsycm.fd"
+                         "/tex/latex/psnfss/omxzplm.fd"
+                         "/tex/latex/psnfss/omxzpple.fd"
+                         "/tex/latex/psnfss/omxztmcm.fd"
+                         "/tex/latex/psnfss/ot1bch.fd"
+                         "/tex/latex/psnfss/ot1pag.fd"
+                         "/tex/latex/psnfss/ot1pbk.fd"
+                         "/tex/latex/psnfss/ot1pcr.fd"
+                         "/tex/latex/psnfss/ot1phv.fd"
+                         "/tex/latex/psnfss/ot1pnc.fd"
+                         "/tex/latex/psnfss/ot1ppl.fd"
+                         "/tex/latex/psnfss/ot1pplj.fd"
+                         "/tex/latex/psnfss/ot1pplx.fd"
+                         "/tex/latex/psnfss/ot1ptm.fd"
+                         "/tex/latex/psnfss/ot1ptmcm.fd"
+                         "/tex/latex/psnfss/ot1put.fd"
+                         "/tex/latex/psnfss/ot1pzc.fd"
+                         "/tex/latex/psnfss/ot1zplm.fd"
+                         "/tex/latex/psnfss/ot1zpple.fd"
+                         "/tex/latex/psnfss/ot1ztmcm.fd"
+                         "/tex/latex/psnfss/t1bch.fd"
+                         "/tex/latex/psnfss/t1pag.fd"
+                         "/tex/latex/psnfss/t1pbk.fd"
+                         "/tex/latex/psnfss/t1pcr.fd"
+                         "/tex/latex/psnfss/t1phv.fd"
+                         "/tex/latex/psnfss/t1pnc.fd"
+                         "/tex/latex/psnfss/t1ppl.fd"
+                         "/tex/latex/psnfss/t1pplj.fd"
+                         "/tex/latex/psnfss/t1pplx.fd"
+                         "/tex/latex/psnfss/t1ptm.fd"
+                         "/tex/latex/psnfss/t1put.fd"
+                         "/tex/latex/psnfss/t1pzc.fd"
+                         "/tex/latex/psnfss/ts1bch.fd"
+                         "/tex/latex/psnfss/ts1pag.fd"
+                         "/tex/latex/psnfss/ts1pbk.fd"
+                         "/tex/latex/psnfss/ts1pcr.fd"
+                         "/tex/latex/psnfss/ts1phv.fd"
+                         "/tex/latex/psnfss/ts1pnc.fd"
+                         "/tex/latex/psnfss/ts1ppl.fd"
+                         "/tex/latex/psnfss/ts1pplj.fd"
+                         "/tex/latex/psnfss/ts1pplx.fd"
+                         "/tex/latex/psnfss/ts1ptm.fd"
+                         "/tex/latex/psnfss/ts1put.fd"
+                         "/tex/latex/psnfss/ts1pzc.fd"
+                         "/tex/latex/psnfss/ufplm.fd"
+                         "/tex/latex/psnfss/ufplmbb.fd"
+                         "/tex/latex/psnfss/upsy.fd"
+                         "/tex/latex/psnfss/upzd.fd")
+                   (base32
+                    "1ql4gidwf5m5gwcwwmx7vj60lj4xygw02pm5mzin49nlwsa1vbnv"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/psnfss")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/psnfss") #t))))))
+      (native-inputs
+       `(("texlive-cm" ,texlive-cm)))
+      (home-page "https://www.ctan.org/pkg/psnfss")
+      (synopsis "Font support for common PostScript fonts")
+      (description
+       "The PSNFSS collection includes a set of files that provide a complete
 working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
-    (license license:lppl1.2+)))
+PostScript fonts.  The base set of text fonts covered by PSNFSS includes the
+AvantGarde, Bookman, Courier, Helvetica, New Century Schoolbook, Palatino,
+Symbol, Times Roman and Zapf Dingbats fonts.  In addition, the fonts Bitstream
+Charter and Adobe Utopia are covered.  Separate packages are provided to load
+each font for use as the main text font.  The package @code{helvet} allows
+Helvetica to be loaded with its size scaled to something more appropriate for
+use as a Sans-Serif font to match Times, while @code{pifont} provides the
+means to select single glyphs from symbol fonts.  The bundle as a whole is
+part of the LaTeX required set of packages.")
+      (license license:lppl1.2+))))
+
+(define-public texlive-latex-psnfss
+  (deprecated-package "texlive-latex-psnfss" texlive-psnfss))
 
 ;; For user profiles
 (define-public texlive-base
@@ -3646,17 +3940,19 @@ packages.")
                 texlive-dvips
                 texlive-fontname
                 texlive-cm
+                texlive-cm-super ; to avoid bitmap fonts
                 texlive-fonts-latex
-                texlive-metafont-base
+                texlive-metafont
                 texlive-latex-base
+                texlive-kpathsea       ;for mktex.opt
                 ;; LaTeX packages from the "required" set.
                 texlive-latex-amsmath
-                texlive-latex-amscls
-                texlive-latex-babel
+                texlive-amscls
+                texlive-babel
                 texlive-generic-babel-english
                 texlive-latex-cyrillic
                 texlive-latex-graphics
-                texlive-latex-psnfss
+                texlive-psnfss
                 texlive-latex-tools
                 texlive-tetex)))
     (package
@@ -3684,144 +3980,86 @@ It includes little more than the required set of LaTeX packages.")
                      '()
                      default-packages)))))
 
-(define-public texlive-default-updmap.cfg
-  (origin
-    (method url-fetch)
-    (uri (string-append "https://tug.org/svn/texlive/tags/"
-                        %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                        "?revision=" (number->string %texlive-revision)))
-    (file-name (string-append "updmap.cfg-"
-                              (number->string %texlive-revision)))
-    (sha256
-     (base32
-      "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))
-
-;; For use in package definitions only
-(define-public texlive-union
+;;; TODO: Add a TeX Live profile hook computing fonts maps (and others?)
+;;; configuration from the packages in the profile, similar to what's done
+;;; below.
+(define-public texlive-updmap.cfg
   (lambda* (#:optional (packages '()))
-    "Return 'texlive-union' package which is a union of PACKAGES and the
-standard LaTeX packages."
+    "Return a 'texlive-updmap.cfg' package which contains the fonts map
+configuration of a base set of packages plus PACKAGES."
     (let ((default-packages (match (package-propagated-inputs texlive-base)
                               (((labels packages) ...) packages))))
-      (package (inherit texlive-base)
-        (name "texlive-union")
-        (build-system trivial-build-system)
+      (package
+        (version (number->string %texlive-revision))
+        (source (origin
+                  (method url-fetch)
+                  (uri (string-append "https://tug.org/svn/texlive/tags/"
+                                      %texlive-tag
+                                      "/Master/texmf-dist/web2c/updmap.cfg"
+                                      "?revision=" version))
+                  (file-name "updmap.cfg")
+                  (sha256
+                   (base32
+                    "1q3l7yx5sng080ibfb8z3rdah0hhq170j6xw8z1w8i4w9m37lp94"))))
+        (name "texlive-updmap.cfg")
+        (build-system copy-build-system)
         (arguments
-         '(#:modules ((guix build union)
+         '(#:modules ((guix build copy-build-system)
                       (guix build utils)
-                      (guix build texlive-build-system)
-                      (guix build gnu-build-system)
-                      (guix build gremlin)
-                      (guix elf))
-           #:builder
-           (begin
-             (use-modules (ice-9 match)
-                          (ice-9 popen)
-                          (srfi srfi-26)
-                          (guix build union)
-                          (guix build utils)
-                          (guix build texlive-build-system))
-             (let* ((out       (assoc-ref %outputs "out"))
-                    (texmf.cnf (string-append out "/share/texmf-dist/web2c/texmf.cnf")))
-               ;; Build a modifiable union of all inputs (but exclude bash and
-               ;; the updmap.cfg file)
-               (match (filter (match-lambda
-                                ((name . _)
-                                 (not (member name '("bash"
-                                                     "coreutils"
-                                                     "sed"
-                                                     "updmap.cfg")))))
-                              %build-inputs)
-                 (((names . directories) ...)
-                  (union-build (assoc-ref %outputs "out")
-                               directories
-                               #:create-all-directories? #t
-                               #:log-port (%make-void-port "w"))))
-
-               ;; The configuration file "texmf.cnf" is provided by the
-               ;; "texlive-bin" package.  We take it and override only the
-               ;; setting for TEXMFROOT and TEXMF.  This file won't be consulted
-               ;; by default, though, so we still need to set TEXMFCNF.
-               (substitute* texmf.cnf
-                 (("^TEXMFROOT = .*")
-                  (string-append "TEXMFROOT = " out "/share\n"))
-                 (("^TEXMF = .*")
-                  "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-               (setenv "PATH" (string-append
-                               (assoc-ref %build-inputs "bash") "/bin:"
-                               (assoc-ref %build-inputs "coreutils") "/bin:"
-                               (assoc-ref %build-inputs "sed") "/bin:"
-                               (string-append out "/bin")))
-               (for-each
-                (cut wrap-program <>
-                     `("TEXMFCNF" ":" suffix (,(dirname texmf.cnf)))
-                     `("TEXMF"    ":" suffix (,(string-append out "/share/texmf-dist"))))
-                (find-files (string-append out "/bin") ".*"))
-
-               ;; Remove invalid maps from config file.
-               (let ((web2c (string-append out "/share/texmf-config/web2c/"))
-                     (maproot (string-append out "/share/texmf-dist/fonts/map/")))
-                 (mkdir-p web2c)
-                 (copy-file
-                  (assoc-ref %build-inputs "updmap.cfg")
-                  (string-append web2c "updmap.cfg"))
-                 (make-file-writable (string-append web2c "updmap.cfg"))
+                      (ice-9 popen)
+                      (ice-9 textual-ports))
+           #:install-plan '(("updmap.cfg" "share/texmf-config/web2c/")
+                            ("map" "share/texmf-dist/fonts/map"))
+           #:phases
+           (modify-phases %standard-phases
+             (add-before 'install 'regenerate-updmap.cfg
+               (lambda _
+                 (make-file-writable "updmap.cfg")
 
+                 ;; Disable unavailable map files.
                  (let* ((port (open-pipe* OPEN_WRITE "updmap-sys"
                                           "--syncwithtrees"
                                           "--nohash"
-                                          (string-append "--cnffile=" web2c "updmap.cfg"))))
+                                          "--cnffile" "updmap.cfg")))
                    (display "Y\n" port)
                    (when (not (zero? (status:exit-val (close-pipe port))))
                      (error "failed to filter updmap.cfg")))
+
+                 ;; Set TEXMFSYSVAR to a sane and writable value; updmap fails
+                 ;; if it cannot create its log file there.
+                 (setenv "TEXMFSYSVAR" (getcwd))
+
                  ;; Generate maps.
                  (invoke "updmap-sys"
-                         (string-append "--cnffile=" web2c "updmap.cfg")
-                         (string-append "--dvipdfmxoutputdir="
-                                        maproot "dvipdfmx/updmap/")
-                         (string-append "--dvipsoutputdir="
-                                        maproot "dvips/updmap/")
-                         (string-append "--pdftexoutputdir="
-                                        maproot "pdftex/updmap/"))
-                 ;; Having this file breaks all file lookups later.
-                 (delete-file (string-append out "/share/texmf-dist/ls-R")))
-               #t))))
-        (inputs
-         `(("bash" ,bash)
-           ,@(map (lambda (package)
-                    (list (package-name package) package))
-                  (append default-packages packages))))
-        (native-inputs
-         `(("coreutils" ,coreutils)
-           ("sed" ,sed)
-           ("updmap.cfg"
-            ,(origin
-               (method url-fetch)
-               (uri (string-append "https://tug.org/svn/texlive/tags/"
-                                   %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                                   "?revision=" (number->string %texlive-revision)))
-               (file-name (string-append "updmap.cfg-"
-                                         (number->string %texlive-revision)))
-               (sha256
-                (base32
-                 "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))))
+                         "--cnffile"           "updmap.cfg"
+                         "--dvipdfmxoutputdir" "map/dvipdfmx/updmap/"
+                         "--dvipsoutputdir"    "map/dvips/updmap/"
+                         "--pdftexoutputdir"   "map/pdftex/updmap/"))))))
+        (propagated-inputs (map (lambda (package)
+                                  (list (package-name package) package))
+                                (append default-packages packages)))
         (home-page (package-home-page texlive-bin))
-        (synopsis "Union of TeX Live packages")
-        (description "This package provides a subset of the TeX Live
-distribution.")
-        (license (fold (lambda (package result)
-                         (match (package-license package)
-                           ((lst ...)
-                            (append lst result))
-                           ((? license:license? license)
-                            (cons license result))))
-                       '()
-                       (append default-packages packages)))))))
+        (synopsis "TeX Live fonts map configuration")
+        (description "This package contains the fonts map configuration file
+generated for the base TeX Live packages as well as, optionally, user-provided
+ones.")
+        (license (delete-duplicates
+                  (fold (lambda (package result)
+                          (match (package-license package)
+                            ((lst ...)
+                             (append lst result))
+                            ((? license:license? license)
+                             (cons license result))))
+                        '()
+                        (append default-packages packages))))))))
+
+;;; Deprecated.
+(define texlive-union texlive-updmap.cfg)
 
 ;; For use in package definitions only
 (define-public texlive-tiny
   (package
-    (inherit (texlive-union))
+    (inherit (texlive-updmap.cfg))
     (name "texlive-tiny")
     (description "This is a very limited subset of the TeX Live distribution.
 It includes little more than the required set of LaTeX packages.")))
@@ -3838,7 +4076,7 @@ It includes little more than the required set of LaTeX packages.")))
                     "/fonts/type1/public/tipa/"
                     "/tex/latex/tipa/")
               (base32
-               "1h53dscv8z6fsa0ax5dys3x11b2f1g60l22hpdf7c88cvdhcs8sn")
+               "0cqzf8vb10b8jw99m9gflskxa4c3rpiznxglix6chl5lai5sgw44")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tipa")
     (synopsis "Fonts and macros for IPA phonetics characters")
@@ -3981,7 +4219,7 @@ package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1zyl2pcz2x529gzj5m93a1s4ipymdabf7qdjl3l1673pizd4hfyv"))))
+                "0alshj9d2cdssqfawhyqmgsvqysmn7dgfk8bc59ni1bii3ydm2zm"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/draftwatermark"))
     (home-page "https://www.ctan.org/pkg/draftwatermark")
@@ -4045,6 +4283,37 @@ for a variety of alignment purposes, as is evidenced by the examples in
 also provided.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-etoc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-etoc"
+              '("/doc/latex/etoc/README.md"
+                "/doc/latex/etoc/etoc.pdf"
+                "/tex/latex/etoc/")
+              (base32
+               "0i4fgqzqajirjyih6gbx890l17y648mdfqm09v3iz4af0dz4mbdy")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/etoc")
+    (synopsis "Completely customisable TOCs")
+    (description
+     "This package gives the user complete control of how the entries of
+the table of contents should be constituted from the name, number, and page
+number of each sectioning unit.  The layout is controlled by the definition
+of ‘line styles’ for each sectioning level used in the document.
+
+The package provides its own custom line styles (which may be used as
+examples), and continues to support the standard formatting inherited from
+the LaTeX document classes, but the package can also allow the user to
+delegate the details to packages dealing with list making environments (such
+as enumitem).  The package’s default global style typesets tables of contents
+in a multi-column format, with either a standard heading, or a ruled title
+(optionally with a frame around the table).
+
+The @code{\\tableofcontents} command may be used arbitrarily many times in
+the same document, while @code{\\localtableofcontents} provides a ‘local’
+table of contents.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-expdlist
   (package
     (name "texlive-latex-expdlist")
@@ -4102,6 +4371,22 @@ but non-expandable ones.")
 (define-public texlive-latex-filemod
   (deprecated-package "texlive-latex-filemod" texlive-filemod))
 
+(define-public texlive-latex-hanging
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hanging"
+              '("/tex/latex/hanging/")
+              (base32
+               "0s86yaxyfv9zxf4svwg9s13by9vrw38apfg0hsfchsimsdd6gsbb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/hanging")
+    (synopsis "Typeset hanging paragraphs")
+    (description
+     "The @code{hanging} package facilitates the typesetting of hanging
+paragraphs.  The package also enables typesetting with hanging punctuation,
+by making punctuation characters active.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-ifplatform
   (package
     (name "texlive-latex-ifplatform")
@@ -4151,6 +4436,42 @@ that are compatible with @code{natbib}: @code{plainnat}, @code{unsrtnat},
 designed from the start to be compatible with @code{natbib}.")
     (license license:lppl)))
 
+(define-public texlive-latex-newunicodechar
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-newunicodechar"
+              '("/doc/latex/newunicodechar/" "/tex/latex/newunicodechar/")
+              (base32
+               "0pwx3ylhvk5hxjnalas00grrbwla79j424i27hrm0zgflq7wsbrj")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/newunicodechar")
+    (synopsis "Definitions of the meaning of Unicode characters")
+    (description
+     "This package provides a friendly interface for defining the meaning of
+Unicode characters.  The document should be processed by (pdf)LaTeX with the
+Unicode option of @code{inputenc} or @code{inputenx}, or by XeLaTeX/LuaLaTeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-pdftexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-pdftexcmds"
+              '("/doc/latex/pdftexcmds/"
+                "/tex/latex/pdftexcmds/")
+              (base32
+               "0kqav8jri789698wxwr2ww8ssn74fvw3agrv677nz5qyq5zmix8h")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-iftex" ,texlive-generic-iftex)
+       ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)))
+    (home-page "https://www.ctan.org/pkg/pdftexcmds")
+    (synopsis "LuaTeX support for pdfTeX utility functions")
+    (description
+     "This package makes a number of utility functions from pdfTeX
+available for luaTeX by reimplementing them using Lua.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-psfrag
   (package
     (name "texlive-latex-psfrag")
@@ -4191,7 +4512,7 @@ rotated.")
        ("texlive-latex-graphics" ,texlive-latex-graphics)
        ("texlive-latex-ifplatform" ,texlive-latex-ifplatform)
        ("texlive-latex-l3kernel" ,texlive-latex-l3kernel) ; for expl3
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
+       ("texlive-oberdiek" ,texlive-oberdiek)
        ("texlive-latex-psfrag" ,texlive-latex-psfrag)
        ("texlive-latex-tools" ,texlive-latex-tools) ; for shellesc
        ("texlive-latex-trimspaces" ,texlive-latex-trimspaces)
@@ -4208,6 +4529,25 @@ re-processing.")
 (define-public texlive-latex-pstool
   (deprecated-package "texlive-latex-pstool" texlive-pstool))
 
+(define-public texlive-latex-refcount
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-refcount"
+              (list "/doc/latex/refcount/"
+                    "/tex/latex/refcount/")
+              (base32
+               "0pkmqj2qihndlv3ks33xzqw91q46jx79r3aygj68d8dflyddi583")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/refcount")
+    (synopsis "Counter operations with label references")
+    (description
+     "This package provides the @code{\\setcounterref} and
+@code{\\addtocounterref} commands which use the section (or other) number
+from the reference as the value to put into the counter.  It also provides
+@code{\\setcounterpageref} and @code{\\addtocounterpageref} that do the
+corresponding thing with the page reference of the label.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-seminar
   (package
     (inherit (simple-texlive-package
@@ -4231,6 +4571,40 @@ recent classes such as powerdot or beamer, both of which are tuned to
 (define-public texlive-latex-seminar
   (deprecated-package "texlive-latex-seminar" texlive-seminar))
 
+(define-public texlive-latex-stackengine
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-stackengine"
+              (list "/doc/latex/stackengine/"
+                    "/tex/latex/stackengine/")
+              (base32
+               "1rbw3dmb6kl3wlnpxacr8cmp2ivac1kpnb33k7r5s3lp1q59ck38")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/stackengine")
+    (synopsis "Customised stacking of objects")
+    (description
+     "The package provides a versatile way to stack objects vertically in a
+variety of customizable ways.  A number of useful macros are provided, all
+of which make use of the @code{stackengine} core.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-latex-tocloft
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-tocloft"
+              '("/doc/latex/tocloft/" "/tex/latex/tocloft/")
+              (base32
+               "0mg3hpzq7wpm6mnnvb0rp3wby56zyxkyai8d2h3f4vk93zrc6awk")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/tocloft")
+    (synopsis "Control table of contents")
+    (description
+     "This package provides control over the typography of the
+@dfn{Table of Contents}, @dfn{List of Figures} and @dfn{List of Tables},
+and the ability to create new ‘List of ...’. The ToC @code{\\parskip} may
+be changed. ")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-trimspaces
   (package
     (name "texlive-latex-trimspaces")
@@ -4329,7 +4703,7 @@ hyperlink to the target of the DOI.")
               (list "/doc/latex/etoolbox/"
                     "/tex/latex/etoolbox/")
               (base32
-               "1cc1vw1ach55g4ff4x30by8k1mg01w199ccxvn72f5khlnnxial0")
+               "1w9mycfa0lx9whjzfybx58608phcrfk33w3igy566qv23a1z9rzc")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/etoolbox")
     (synopsis "e-TeX tools for LaTeX")
@@ -4504,11 +4878,11 @@ BibLaTeX, and is considered experimental.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0a8f38c2ds1flxcr0apdpyaaz3k6fyalz6dkbrmcv9srjc40mh3n"))))
+                "0a9nrmiwksnpa6iaapirqid974ai56qgin2n4h9mggy9v8gp7r71"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/geometry"))
     (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek))) ;for ifpdf
+     `(("texlive-oberdiek" ,texlive-oberdiek))) ;for ifpdf
     (home-page "https://www.ctan.org/pkg/geometry")
     (synopsis "Flexible and complete interface to document dimensions")
     (description
@@ -4555,7 +4929,7 @@ array environments; verbatim handling; and syntax diagrams.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0na7v4hsyx5s67cpjj2dbnq8j67k8lln6b19hmj631gfs27slss1"))))
+                "0c3hrki9pmhz4iall0436wrlrg6qkb1fsdfhz9hv7ysxryr2gihj"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/polyglossia"))
     (home-page "https://www.ctan.org/pkg/polyglossia")
@@ -4575,7 +4949,7 @@ and XeLaTeX; it relies on the @code{fontspec} package, version 2.0 at least.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "14b2bc7cqz4ckxxycim9sw6jkrr1pahivm1rdbpz5k6hl967w1s3"))))
+                "19fd0bqxjkzc16bza3w20pnsc90gbhbllm244b3h6sink4dlnn54"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/supertabular"))
     (home-page "https://www.ctan.org/pkg/supertabular")
@@ -4601,7 +4975,7 @@ situations where longtable has problems.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16jy02m089m7n6v9vbfi4xjgngc1fnvsmmppk8axfwzbhdky3c9c"))))
+                "1ngzgiy8wd3b9gnbx802x90xa179xxm7vf5jhfdkpgrfxwlycfby"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4695,7 +5069,7 @@ considered obsolete; alternatives are the @code{typearea} package from the
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0rxfpr8vq3brwx5rc7qn91ixlp9zva4zrms8a579fqa1g5yva7vg"))))
+                "1gc2brr2rs495w7qi6spdva1xrza94x7a36dncjdkghnsq8r92h4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/appendix"))
     (home-page "https://www.ctan.org/pkg/appendix")
@@ -4708,6 +5082,23 @@ environment is provided which can be used instead of the @code{\\appendix}
 command.")
     (license license:lppl)))
 
+(define-public texlive-latex-bookmark
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-bookmark"
+              (list "/doc/latex/bookmark/"
+                    "/tex/latex/bookmark/")
+              (base32
+               "1vl1rrydh5jh78llp4i5r1hvznghm9gddwcnfnzwlgp9z67gybh1")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/bookmark")
+    (synopsis "Bookmark (outline) organization for hyperref")
+    (description
+     "This package implements a new bookmark (outline) organization for the
+@code{hyperref} package.  Bookmark properties such as style and color.  Other
+action types are available (URI, GoToR, Named).")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-changebar
   (package
     (name "texlive-latex-changebar")
@@ -4775,7 +5166,7 @@ copy-and-paste functions work properly.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16vd99p01a0y30xr5yf1z2j5da9x8gy21vb30wk08jh31zffbaqj"))))
+                "1qa0mh0fy9hcvfsmprv6q50q0qzdjjfbxi3axap26z6zg3qj68bc"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/colortbl"))
     (home-page "https://www.ctan.org/pkg/colortbl")
@@ -4902,6 +5293,24 @@ the same place.  The package also has a range of techniques for labelling
 footnotes with symbols rather than numbers.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-letltxmacro
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-letltxmacro"
+              (list "/doc/latex/letltxmacro/"
+                    "/tex/latex/letltxmacro/")
+              (base32
+               "0yy1m1jiyxq2pssp0pidaa2swx6lyxw3zwpm2r8m0v2r3lvsyyxx")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/letltxmacro")
+    (synopsis "Let assignment for macros")
+    (description
+     "TeX’s @code{\\let} assignment does not work for LaTeX macros with
+optional arguments, or for macros that are defined as robust macros by
+@code{\\DeclareRobustCommand}.  This package defines @code{\\LetLtxMacro}
+that also takes care of the involved internal macros.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-listings
   (package
     (name "texlive-latex-listings")
@@ -4912,7 +5321,7 @@ footnotes with symbols rather than numbers.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1fbrhqj22vzakn30j71fc41l8nliqbv1dmxm0zlwi2qjjbq6fwav"))))
+                "082zri3gp8s6p2difhk1pbix2vzmvsf6fmld2z78v35xwk3fiya0"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/listings"
@@ -4965,6 +5374,25 @@ transliterate semitic languages; patches to make (La)TeX formulae embeddable
 in SGML; use maths minus in text as appropriate; simple Young tableaux.")
     (license license:gpl2)))
 
+(define-public texlive-latex-kvoptions
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-kvoptions"
+              (list "/doc/latex/kvoptions/"
+                    "/tex/latex/kvoptions/")
+              (base32
+               "04v733njj6ynf1prj5rxljqbjq925jyycdprc78n7g01knn13wgr")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-kvsetkeys" ,texlive-generic-kvsetkeys)
+       ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)))
+    (home-page "https://www.ctan.org/pkg/kvoptions")
+    (synopsis "Key/value format for package options")
+    (description
+     "This package provides facilities for using key-value format in
+package options.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-fonts-ec
   (package
     (name "texlive-fonts-ec")
@@ -4992,7 +5420,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5027,7 +5455,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/ec")
     (synopsis "Computer modern fonts in T1 and TS1 encodings")
@@ -5085,7 +5513,7 @@ via the CM-super, Latin Modern and (in a restricted way) CM-LGC font sets.")
                     "/fonts/type1/public/inconsolata/"
                     "/tex/latex/inconsolata/")
               (base32
-               "1a77w26m4c4j0202s1qkikz7ha6cxlv8zxhzi9s3l0x1l2pl7cr2")
+               "19lvma52vk7x8d7j4s9ymjwm3w2k08860fh6dkzn76scgpdm4wlb")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/inconsolata")
     (synopsis "Monospaced font with support files for use with TeX")
@@ -5209,7 +5637,7 @@ Adobe's basic set.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5244,7 +5672,7 @@ Adobe's basic set.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/rsfs")
     (synopsis "Ralph Smith's Formal Script font")
@@ -5329,7 +5757,7 @@ splines, and filled circles and ellipses.  The package uses @code{tpic}
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vm9xp67hzif0pqab4r3ialf0cyhi0fa4p8kxgp1ymcf85pqip14"))))
+                "1j8svflnx9w897mdavyf1f0n256wh4bbclrhv5vx7b501gmlbp7d"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5361,7 +5789,7 @@ in the form @code{key=value} are available, for example:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "07vbcp6avdwldr870cwf65av2s9lfyzcpp8gpld53yw6lcxgaipj"))))
+                "1bfpl8mr4h3p46649wb7pdkc3l44r8fqbv89abb3jj0zh8c10928"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/multirow"))
     (home-page "https://www.ctan.org/pkg/multirow")
@@ -5386,7 +5814,7 @@ entry at the \"natural\" width of its text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1pr6ym3ad7x14ng7gmhsmywh3685d2cnm5qgyrqbigng2r6fcc1k"))))
+                "1ygsr0rsdabj61zask3346xrwiphz5i6f1nfb9k4d3234psh09kb"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5422,7 +5850,7 @@ positions; a grid for orientation is available.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0j1fhm1m9k6rz80lmch3x44g20y9nm4abaaf8czb0q8hzwlx5aq5"))))
+                "12kdsrr55lp0s4xl279gh6mi9gw909vmd96p10dvhbazgxn3ccxs"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5452,7 +5880,7 @@ designed class) helps alleviate this untidiness.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s4izcah7im67889qz4d26pcfpasmm35sj1rw4ragkkdk3rlbbbd"))))
+                "1r1g9lb6bqjrahqmdkazsnifcyxgkp8r33za2h60h50jfvrab66f"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/pdfpages"))
     (home-page "https://www.ctan.org/pkg/pdfpages")
@@ -5466,38 +5894,48 @@ package supports pdfTeX (pdfLaTeX) and VTeX.  With VTeX it is even possible to
 use this package to insert PostScript files, in addition to PDF files.")
     (license license:lppl1.3+)))
 
-(define-public texlive-fonts-stmaryrd
-  (package
-    (name "texlive-fonts-stmaryrd")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "fonts" "stmaryrd"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "08pn4ca3vl6qm9l3wm5h5iyjsrg411kkm1yana329xwg2j14s9n6"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/stmaryrd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-ins
-           (lambda _
-             (substitute* "stmaryrd.ins"
-               (("^%% LaTeX2e.*") "\\input docstrip\n")
-               (("fontdef\\}\\}" line)
-                (string-append line "\n\\endbatchfile")))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/stmaryrd")
-    (synopsis "St Mary Road symbols for theoretical computer science")
-    (description
-     "The fonts were originally distributed as Metafont sources only, but
+(define-public texlive-stmaryrd
+  (let ((template (simple-texlive-package
+                   "texlive-stmaryrd"
+                   (list "/fonts/afm/public/stmaryrd/"
+                         "/fonts/map/dvips/stmaryrd/"
+                         "/fonts/source/public/stmaryrd/"
+                         "/fonts/tfm/public/stmaryrd/"
+                         "/fonts/type1/public/stmaryrd/"
+                         "/source/fonts/stmaryrd/"
+                         "/doc/fonts/stmaryrd/")
+                   (base32
+                    "0yn0yl6x1z9ab5gb56lhvkqabd2agz3ggxifwxkiysrj5780j29z"))))
+    (package
+      (inherit template)
+      (arguments (substitute-keyword-arguments (package-arguments template)
+                   ((#:tex-directory _ #t)
+                    "latex/stmaryrd")
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (add-after 'unpack 'chdir
+                         (lambda _
+                           (chdir "source/fonts/stmaryrd")
+                           #t))
+                       (add-after 'chdir 'patch-ins
+                         (lambda _
+                           (substitute* "stmaryrd.ins"
+                             (("^%% LaTeX2e.*") "\\input docstrip\n")
+                             (("fontdef\\}\\}" line)
+                              (string-append line "\n\\endbatchfile")))
+                           #t))))))
+      (home-page "https://www.ctan.org/pkg/stmaryrd")
+      (synopsis "St Mary Road symbols for theoretical computer science")
+      (description
+       "The fonts were originally distributed as Metafont sources only, but
 Adobe Type 1 versions are also now available.  Macro support is provided for
 use under LaTeX; the package supports the @code{only} option (provided by the
 @code{somedefs} package) to restrict what is loaded, for those who don't need
 the whole font.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-public texlive-fonts-stmaryrd
+  (deprecated-package "texlive-fonts-stmaryrd" texlive-stmaryrd))
 
 (define-public texlive-latex-subfigure
   (package
@@ -5673,12 +6111,10 @@ of ink traps which typify the Kurier font.")
               "texlive-jknappen"
               (list "/fonts/source/jknappen/"
                     "/fonts/tfm/jknappen/"
-                    "/fonts/source/jknappen/"
-                    "/fonts/tfm/jknappen/"
                     "/tex4ht/ht-fonts/alias/jknappen/"
                     "/tex4ht/ht-fonts/unicode/jknappen/")
               (base32
-               "1v5wk5il41bddzr81h5636h3cjz0w1qann5g9garsb7qfch9fhws")
+               "0xvy3c845jc7iw1h9rcm1r2yvm1ni1sm9r9k9j2cfc82xy43rwij")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/jknappen")
     (synopsis "Miscellaneous packages by Jörg Knappen")
@@ -5717,6 +6153,90 @@ Simple Young tableaux.
 @end table")
     (license license:gpl2)))                    ;per the 00readme_txt file.
 
+(define-public texlive-jadetex
+  (let ((template (simple-texlive-package
+                   "texlive-jadetex"
+                   (list "/doc/man/man1/jadetex.1"
+                         "/doc/man/man1/jadetex.man1.pdf"
+                         "/doc/man/man1/pdfjadetex.1"
+                         "/doc/man/man1/pdfjadetex.man1.pdf"
+                         "/source/jadetex/base/"
+                         ;; The following files are not generated from
+                         ;; sources.
+                         "/tex/jadetex/base/jadetex.ini"
+                         "/tex/jadetex/base/pdfjadetex.ini"
+                         "/tex/jadetex/base/uentities.sty")
+                   (base32
+                    "03chyc3vjqgxcj985gy4k0bd0lf1n4a6sgbhc7k84jparjk3hx4i"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "jadetex/base")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'unify-source-directory
+               (lambda _
+                 (chdir "source/jadetex/base")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "../../../tex/jadetex/base"))
+                 #t))
+             (add-after 'build 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (symlink f (basename f)))
+                           (find-files "build"))
+                 (invoke "fmtutil-sys" "--byfmt" "jadetex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfjadetex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/jadetex"))
+                   (symlink pdftex (string-append out "/bin/pdfjadetex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; Propagate the texlive-updmap.cfg input used by xmltex, which provides the
+       ;; required fonts for its use.
+       `(("texlive-xmltex" ,texlive-xmltex)
+         ("texlive-kpathsea" ,texlive-kpathsea))) ;for fmtutil.cnf template
+      (native-inputs
+       `(("texlive-cm" ,texlive-cm)     ;for cmex10 and others
+         ("texlive-fonts-latex" ,texlive-fonts-latex) ;for lasy6
+         ;; The t1cmr.fd file of texlive-latex-base refers to the ecrm font,
+         ;; provided by the jknappen package collection.
+         ("texlive-jknappen" ,texlive-jknappen)
+         ("texlive-generic-ulem" ,texlive-generic-ulem)
+         ("texlive-hyperref" ,texlive-hyperref)
+         ("texlive-latex-colortbl" ,texlive-latex-colortbl)
+         ("texlive-latex-fancyhdr" ,texlive-latex-fancyhdr)
+         ("texlive-latex-graphics" ,texlive-latex-graphics) ;for color.sty
+         ("texlive-latex-tools" ,texlive-latex-tools)       ;for array.sty
+         ("texlive-marvosym" ,texlive-marvosym)
+         ("texlive-tex-ini-files" ,texlive-tex-ini-files))) ;for pdftexconfig
+      (home-page "https://www.ctan.org/pkg/jadetex/")
+      (synopsis "TeX macros to produce TeX output using OpenJade")
+      (description "JadeTeX is a companion package to the OpenJade DSSSL
+processor.  OpenJade applies a DSSSL stylesheet to an SGML or XML document.
+The output of this process can be in a number of forms, including a set of
+high level LaTeX macros.  It is the task of the JadeTeX package to transform
+these macros into DVI/PostScript (using the @command{jadetex} command) or
+Portable Document Format (PDF) form (using the @command{pdfjadetex}
+command).")
+      ;; The license text is found at the header of the jadetex.dtx file.
+      (license license:expat))))
+
 (define-public texlive-libertine
   (package
     (inherit (simple-texlive-package
@@ -5732,7 +6252,7 @@ Simple Young tableaux.
 
                     "/tex/latex/libertine/")
               (base32
-               "1v2vimpfi0b08sd79dadrck7wkpa0bphiakwyvhjc3ygq9k5bp8k")
+               "1d5r80isyvs2v3i8pzlhsn7ns6bn8ldkbs82g25widraixlhg6yg")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/libertine")
     (synopsis "Use Linux Libertine and Biolinum fonts with LaTeX")
@@ -5790,7 +6310,7 @@ LGR.  The package doesn't (currently) support mathematics.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "04nmkhqx6jxcxx9a30zbcd5smxi5fd0cbp132bki7fnvhspnhg21"))))
+                "1kw7dvxvdfbf31zw0n8r0g5xak3vcdf25n33fqw93j59zpc5nvbl"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5841,23 +6361,32 @@ now contains a package @code{fix-cm},f which performs the task of
 @code{ec} fonts.")
     (license license:lppl)))
 
-(define-public texlive-latex-lh
-  (package
-    (name "texlive-latex-lh")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "lh"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "00gdiwh3sfhh1iimjhpja7lm7k4vzqzql2irgwnpz94qvh25zwi5"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/lh"))
-    (home-page "https://www.ctan.org/pkg/lh")
-    (synopsis "Cyrillic fonts that support LaTeX standard encodings")
-    (description
-     "The LH fonts address the problem of the wide variety of alphabets that
+(define-public texlive-lh
+  (let ((template (simple-texlive-package
+                   "texlive-lh"
+                   (list "/doc/fonts/lh/"
+                         "/source/fonts/lh/"
+                         "/source/latex/lh/"
+                         "/fonts/source/lh/"
+                         "/tex/plain/lh/")
+                   (base32
+                    "0vw75i52asi5sssp8k9r8dy4ihvqbvmbsl3dini3ls8cky15lz37"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/lh")
+         ((#:build-targets _ '())
+          ''("nfssfox.ins" "lcyfonts.ins" "ot2fonts.ins" "t2ccfonts.ins"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/lh") #t))))))
+      (home-page "https://www.ctan.org/pkg/lh")
+      (synopsis "Cyrillic fonts that support LaTeX standard encodings")
+      (description
+       "The LH fonts address the problem of the wide variety of alphabets that
 are written with Cyrillic-style characters.  The fonts are the original basis
 of the set of T2* and X2 encodings that are now used when LaTeX users need to
 write in Cyrillic languages.  Macro support in standard LaTeX encodings is
@@ -5866,7 +6395,10 @@ offers support for other (more traditional) encodings.  The fonts, in the
 standard T2* and X2 encodings are available in Adobe Type 1 format, in the
 CM-Super family of fonts.  The package also offers its own LaTeX support for
 OT2 encoded fonts, CM bright shaped fonts and Concrete shaped fonts.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-public texlive-latex-lh
+  (deprecated-package "texlive-latex-lh" texlive-lh))
 
 (define-public texlive-marvosym
   (package
@@ -5908,7 +6440,7 @@ the derived Type 1 font, together with support files for TeX (LaTeX).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1xyd57c8z1xi0kbqpbad61flcazz68i9ssxrag0gjvci3irxi8xh"))))
+                "01ghqyaxxkfscs9jjgnx65hmvqllfzgxc0r5vwpqs7y1h97y6cgc"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5937,7 +6469,7 @@ than the bitmaps Metafont creates.")
               (uri (texlive-ref "latex" "acmart"))
               (sha256
                (base32
-                "18rl67p2zhngskisnhv78mksv8q8q658l6igkswzswldixmkpphq"))
+                "1avk9wl7hmgxvv8axd134wl6l8khvw7chw568nc8q70xwiwcqcpk"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acmart"))
@@ -5991,7 +6523,7 @@ get a narrower “natural” width.")
                     "/tex/plain/wasy/"
                     "/doc/fonts/wasy/")
               (base32
-               "10dxbqgv42niybj65hj6y47x8lsl83m48rgw2v2s50k05wbghwbm")
+               "1swzxgld3lndi5q0q6zkwbw06ndh13fvp04as7zpwyhh646s0hbx")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/wasy")
     (synopsis "Waldi symbol fonts")
@@ -6000,9 +6532,9 @@ in the Metafont and Adobe Type 1 formats.  Support under LaTeX is provided by
 the @code{wasysym} package.")
     (license license:public-domain)))
 
-(define-public texlive-latex-wasysym
+(define-public texlive-wasysym
   (package
-    (name "texlive-latex-wasysym")
+    (name "texlive-wasysym")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -6010,7 +6542,7 @@ the @code{wasysym} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1sgwbfwjjf70g54hh93gsd9jp9nm67w6n74x9d72a56n07jbk5hv"))))
+                "0zxcf0pfqf439cfwl0r5dd93b0v4pbiih36n2pwshdlvnmy0nr50"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/wasysym"))
     (home-page "https://www.ctan.org/pkg/wasysym")
@@ -6022,6 +6554,9 @@ male and female symbols and astronomical symbols, as well as the complete
 implements an easy to use interface for these symbols.")
     (license license:lppl)))
 
+(define-public texlive-latex-wasysym
+  (deprecated-package "texlive-latex-wasysym" texlive-wasysym))
+
 (define-public texlive-latex-wrapfig
   (package
     (name "texlive-latex-wrapfig")
@@ -6106,7 +6641,7 @@ package of that name now exists.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1hpsk4yp08qvbl43kqiv0hhwxv3gcqqxcpahyv6ch2b38pbj4bh6"))))
+                "1mcp0x3snhx9phhfxqwn6d12b84vi049ljd1l11ianp3i4kad6ls"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/preview"
@@ -6138,7 +6673,7 @@ files.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0jmasg40bk53zdd2jc8nc18jvdai3p2wmamy7hwli8gls4nf25qp"))))
+                "0dl3dliz0vwds3804s1kxaj0ghd721v2c6hws9ghx0bjky09yxbx"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acronym"))
     (home-page "https://www.ctan.org/pkg/acronym")
@@ -6151,49 +6686,24 @@ requires the suffix package, which in turn requires that it runs under
 e-TeX.")
     (license license:lppl1.3+)))
 
-(define-public texlive-generic-pdftex
+(define-public texlive-pdftex
   (package
-    (name "texlive-generic-pdftex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/tex/generic/pdftex"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0k68zmqzs4qvrqxdwsrawbjb14hxqjfamq649azvai0jjxdpkljd"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/pdftex"))
-               (target-map (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/fonts/map/pdftex")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           (mkdir-p target-map)
-           (copy-recursively (assoc-ref %build-inputs "pdftex-map") target-map)
-           #t))))
-    (native-inputs
-     `(("pdftex-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/pdftex"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-" version "-checkout"))
-           (sha256
-            (base32
-             "03rfif2631pgd8g1ar4xblcdh078kky7fvw3kfsj5a47rxxgicp2"))))))
+    (inherit (simple-texlive-package
+              "texlive-pdftex"
+              (list "/doc/pdftex/"
+                    "/doc/man/man1/pdfetex.1"
+                    "/doc/man/man1/pdftex.1"
+
+                    "/fonts/map/dvips/dummy-space/dummy-space.map"
+                    "/fonts/tfm/public/pdftex/dummy-space.tfm"
+                    "/fonts/type1/public/pdftex/dummy-space.pfb"
+                    "/scripts/simpdftex/simpdftex"
+
+                    "/tex/generic/config/pdftex-dvi.tex"
+                    "/tex/generic/pdftex/")
+              (base32
+               "181krzhxs61s62fr6gz7x08c57rbgc2b8i2pr7r8hr6f706ywp26")
+              #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/pdftex")
     (synopsis "TeX extension for direct creation of PDF")
     (description
@@ -6201,17 +6711,20 @@ e-TeX.")
 directly generate PDF documents instead of DVI.")
     (license license:gpl2+)))
 
+(define-public texlive-generic-pdftex
+  (deprecated-package "texlive-generic-pdftex" texlive-pdftex))
+
 (define texlive-texmf
   (package
    (name "texlive-texmf")
-   (version "20190410")
+   (version "20200406")
    (source texlive-texmf-src)
    (build-system gnu-build-system)
    (inputs
     `(("texlive-bin" ,texlive-bin)
       ("lua" ,lua)
       ("perl" ,perl)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
+      ("python" ,python)
       ("ruby" ,ruby)
       ("tcsh" ,tcsh)))
    (arguments
@@ -6281,10 +6794,10 @@ This package contains the complete tree of texmf-dist data.")
 (define-public texlive
   (package
    (name "texlive")
-   (version "20190410")
+   (version "20200406")
    (source #f)
    (build-system trivial-build-system)
-   (inputs `(("bash" ,bash) ; for wrap-program
+   (inputs `(("bash" ,bash-minimal)     ;for wrap-program
              ("texlive-bin" ,texlive-bin)
              ("texlive-texmf" ,texlive-texmf)))
    (native-search-paths
@@ -6576,12 +7089,12 @@ develop documents with LaTeX, in a single application.")
              (delete-file "book.pdf")
              #t)))))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
                                         texlive-fonts-adobe-palatino
                                         texlive-fonts-adobe-zapfding
-                                        texlive-fonts-knuth-lib
+                                        texlive-knuth-lib
                                         texlive-fonts-mflogo-font
-                                        texlive-generic-pdftex)))
+                                        texlive-pdftex)))
        ("automake" ,automake)))
     (home-page "https://www.gnu.org/software/teximpatient/")
     (synopsis "Book on TeX, plain TeX and Eplain")
@@ -6646,7 +7159,7 @@ and Karl Berry.")
        ("qtsvg" ,qtsvg)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("texlive" ,(texlive-union (list texlive-fonts-ec)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-fonts-ec)))))
     (native-inputs
      `(("python" ,python)
        ("pkg-config" ,pkg-config)))
@@ -6673,7 +7186,7 @@ required: automatic sectioning and pagination, spell checking and so forth.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s86v2b6b1vky1svmmn8pn0l2gz3v280mvjbr2d9l2sjyarlgz9w"))))
+                "0ganz4r78zmvq0s3w9d59pc2qh9pv0akv21f57yc3d5yyb520p6x"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6713,7 +7226,7 @@ specification.  It replaces the now obsolete @code{movie15} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yhp51w8yr10c10pc9196q7hlw80brzqinnqbjw81d0sf2p0llc5"))))
+                "0x7v3ih7k9hqfcnya0wchks63b67yngi21a6343vlwzdqn84mbyp"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6754,7 +7267,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0m4wx3yjb5al1qsv995z8fii8xxy96mcfihbnlx43lpgayiwz35s"))))
+                "07zqxynjh3qnnb4fxx5bhw4r21dbsrhanrq38ag62acr876l7agm"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/ms"
@@ -6877,7 +7390,7 @@ is preferred in many parts of the world, as distinct from that which is used in
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1rzdniqq9zk39w8ch8ylx3ywh2mj87s4ivchrsk2b8nx06jyn797"))))
+         "161ka7sckiakcr1fgydxpc580sr16vp4sp3avjl2v9jn1pd2pwp0"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6914,7 +7427,7 @@ striking out (line through words) and crossing out (/// over words).")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dscrgwyr71vgx35mzb316xl669arzagfgq50fdv3nxga63959b3"))))
+         "1hxivv4iq4ji1rz34fdx3hf9i0dj3a8336w1pa87jyavbl07n5g7"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("texlive-latex-pgf-generic"
@@ -6928,7 +7441,7 @@ striking out (line through words) and crossing out (/// over words).")
            (file-name (string-append "texlive-latex-pgf-generic" version "-checkout"))
            (sha256
             (base32
-             "0hk5x2j15n4pps279cmkbjl1dvhasq3mbhna5xdvp2qgh635ahks"))))))
+             "1gh1vm8hkfgz1kw1cdws9hbw9llzw6n7w0v7z763am5amd3cyhhm"))))))
     (propagated-inputs
      `(("texlive-latex-xcolor" ,texlive-latex-xcolor)))
     (arguments
@@ -6972,7 +7485,7 @@ produce either PostScript or PDF output.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vz9zg7s5w52xr323zgglzprfrvba2zvyzf6b8vrdf4wdghlpv4z"))))
+                "18bfdfhdfc7nxr29wvcmp08wgq6f3fc7yysg1sgzgsqrffr1viwa"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7017,6 +7530,165 @@ refers to the version of scrbook, scrreprt, scrartcl, scrlttr2 and
 typearea (which are the main parts of the bundle).")
     (license license:lppl1.3+)))
 
+(define-public texlive-generic-atbegshi
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-atbegshi"
+              '("/doc/latex/atbegshi/"
+                "/tex/generic/atbegshi/")
+              (base32
+               "184fr5kd3wl44ix63lwb3ll7dhiikkyw1czbnzrl4am4rx0zh4d8")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atbegshi")
+    (synopsis "Execute commands at @code{\\shipout} time")
+    (description
+     "This package is a modern reimplementation of package @code{everyshi},
+providing various commands to be executed before a @code{\\shipout} command.
+It makes use of e-TeX’s facilities if they are available.  The package may
+be used either with LaTeX or with plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bigintcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bigintcalc"
+              '("/doc/latex/bigintcalc/README.md"
+                "/tex/generic/bigintcalc/")
+              (base32
+               "19grk4p1dh566hgpzhnjyjnrw57hpjijcpr7ci401n9jszcc1xkz")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)))
+    (home-page "https://www.ctan.org/pkg/bigintcalc")
+    (synopsis "Integer calculations on very large numbers")
+    (description
+     "This package provides expandable arithmetic operations with big
+integers that can exceed TeX's number limits.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bitset
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bitset"
+              '("/doc/latex/bitset/README.md"
+                "/tex/generic/bitset/")
+              (base32
+               "0inj6qpzizvsbxdfsaijnl4iq976kyrnchnm3gc1kc2w389zrn1l")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-intcalc" ,texlive-generic-intcalc)
+       ("texlive-generic-bigintcalc" ,texlive-generic-bigintcalc)))
+    (home-page "https://www.ctan.org/pkg/bitset")
+    (synopsis "Handle bit-vector datatype")
+    (description
+     "This package defines and implements the data type bit set, a vector
+of bits.  The size of the vector may grow dynamically.  Individual bits
+can be manipulated.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-etexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-etexcmds"
+              '("/doc/latex/etexcmds/README.md"
+                "/tex/generic/etexcmds/")
+              (base32
+               "11y6pnlq13bp0ybi7c82g8ds8085zv1zaslgqv3dzhgi3dklpc0c")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-iftex" ,texlive-generic-iftex)))
+    (home-page "https://www.ctan.org/pkg/etexcmds")
+    (synopsis "Avoid name clashes with e-TeX commands")
+    (description
+     "New primitive commands are introduced in e-TeX; sometimes the names
+collide with existing macros.  This package solves the name clashes by
+adding a prefix to e-TeX’s commands.  For example, ε-TeX’s
+@code{\\unexpanded} is provided as @code{\\etex@@unexpanded}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-gettitlestring
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-gettitlestring"
+              '("/doc/latex/gettitlestring/"
+                "/tex/generic/gettitlestring/")
+              (base32
+               "1p4hg9mac03rzvj9dw0ws3zdh55fy1ns954f912algw9f2aq4xgp")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/gettitlestring")
+    (synopsis "Clean up title references")
+    (description
+     "This package provides commands for cleaning up the title string
+(such as removing @code{\\label} commands) for packages that typeset such
+strings.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-infwarerr
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-infwarerr"
+              '("/tex/generic/infwarerr/")
+              (base32
+               "19nlrbfmqbkjrrx9x75s9nd6crg1lzimb2fr3hfblaivj6lx8p4r")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/infwarerr")
+    (synopsis "Information/warning/error macros")
+    (description
+     "This package provides a complete set of macros for information,
+warning and error messages.  Under LaTeX, the commands are wrappers for
+the corresponding LaTeX commands; under Plain TeX they are available as
+complete implementations.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-intcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-intcalc"
+              '("/tex/generic/intcalc/")
+              (base32
+               "0llrnayqwdqxi91yh7panbbiljina3bynv2hxhi6sssaw3pyd92l")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/intcalc")
+    (synopsis "Expandable arithmetic operations with integers")
+    (description
+     "This package provides expandable arithmetic operations with integers,
+using the e-TeX extension @code{\\numexpr} if it is available.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvdefinekeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvdefinekeys"
+              '("/tex/generic/kvdefinekeys/")
+              (base32
+               "12nn74skhwiszbdhawqds31caz6d59a5pjmwar0r8lmk4f1jr3xh")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvdefinekeys")
+    (synopsis "Define keys for use in the @code{kvsetkeys} package")
+    (description
+     "This package provides the @code{\\kv@@define@@key} (analogous to
+keyval’s @code{\\define@@key}, to define keys for use by @code{kvsetkeys}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvsetkeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvsetkeys"
+              '("/tex/generic/kvsetkeys/")
+              (base32
+               "149vpmv4vms269dzq4sghlngg380sasvxnb3sx9rfs7d9j0finvi")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvsetkeys")
+    (synopsis "Key value parser with default handler support")
+    (description
+     "This package provides @code{\\kvsetkeys}, a variant of @code{\\setkeys}
+from the @code{keyval} package.  Users can specify a handler that deals with
+unknown options.  Active commas and equal signs may be used, and only one
+level of curly braces are removed from the values.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-generic-listofitems
   (package
     (name "texlive-generic-listofitems")
@@ -7031,7 +7703,7 @@ typearea (which are the main parts of the bundle).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1x4wnpca97rnbvvg6wjmbkxxvnfva274q9ahzx746b435q93z3i1"))))
+                "1wnbnfrhi6hgqa78jsw6hljzi03i5x99mlr5n2419hgws52hk67y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7051,6 +7723,58 @@ the parsing character has been selected by the user, and to access any of
 these items with a simple syntax.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-generic-ltxcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-ltxcmds"
+              '("/tex/generic/ltxcmds/")
+              (base32
+               "0mdzy76sbc3pmas5zqxn35w9xcg4v7j4p31jcjm9f4hzm27y974a")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ltxcmds")
+    (synopsis "LaTeX kernel commands extracted for general use")
+    (description
+     "This package exports some utility macros from the LaTeX kernel into
+a separate namespace and also makes them available for other formats such
+as plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-pdfescape
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-pdfescape"
+              '("/tex/generic/pdfescape/")
+              (base32
+               "1vbdjmm9bi9ngzz2z1b8jnf6nzf9xsaj5pvyswg13y4dr00mnz6n")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/pdfescape")
+    (synopsis "pdfTeX's escape features for plain TeX")
+    (description
+     "This package implements pdfTeX's escape features (@code{\\pdfescapehex},
+@code{\\pdfunescapehex}, @code{\\pdfescapename}, @code{\\pdfescapestring})
+using TeX or e-TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-uniquecounter
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-uniquecounter"
+              '("/doc/latex/uniquecounter/"
+                "/tex/generic/uniquecounter/")
+              (base32
+               "1bjh8vwiqlkmjqndnh4xp116524x4m3hdcyq2s231jiqy8il8dcc")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-bigintcalc" ,texlive-generic-bigintcalc)
+       ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)))
+    (home-page "https://www.ctan.org/pkg/uniquecounter")
+    (synopsis "Unlimited unique counter")
+    (description
+     "This package provides a kind of counter that provides unique number
+values.  Several counters can be created with different names.  The numeric
+values are not limited.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-readarray
   (package
     (name "texlive-latex-readarray")
@@ -7220,7 +7944,7 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1wijqq605cbhn2bdaryby3xpkwmnk9ixcrjn5zwlfrxbgfblzfmz"))))
+         "056q9sg3bn8j70laspwdvh7fr3635l7vv3762h6rq79a58g3bya4"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7279,7 +8003,7 @@ Support for use with LaTeX is available in @code{freenfss}, part of
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0d7d74giz5knvj4rj6mbzd6c05mwg9jrxab86jxdqbc3jy7cl4kz"))))
+                "145klhcf1i1n9rldjxccd3gkjxwp3i36601xlhch8kyf64rrgybk"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7298,6 +8022,52 @@ supports advanced interactive documents.  See the ConTeXt garden for a wealth
 of support information.")
     (license license:gpl2+)))
 
+(define-public texlive-context
+  (package
+    (inherit (simple-texlive-package
+              "texlive-context"
+              (list "/doc/context/"
+                    ;; XXX Omitting /doc/man/man1/*.pdf
+                    "/bibtex/bst/context/mkii/"
+                    "/context/data/"
+
+                    "/fonts/afm/hoekwater/context/contnav.afm"
+                    "/fonts/cid/fontforge/Adobe-CNS1-4.cidmap"
+                    "/fonts/cid/fontforge/Adobe-GB1-4.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Identity-0.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan1-5.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan1-6.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan2-0.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Korea1-2.cidmap"
+                    "/fonts/enc/dvips/context/"
+                    "/fonts/map/dvips/context/"
+                    "/fonts/map/luatex/context/"
+                    "/fonts/map/pdftex/context/"
+                    "/fonts/misc/xetex/fontmapping/context/"
+                    "/fonts/tfm/hoekwater/context/contnav.tfm"
+                    "/fonts/type1/hoekwater/context/"
+
+                    "/metapost/context/"
+                    "/scripts/context/"
+                    "/tex/context/"
+
+                    "/tex/generic/context/luatex/"
+                    "/tex/generic/context/ppchtex/"
+                    "/tex/latex/context/")
+              (base32
+               "0krbxj0cjyy9b6xv5xx670rh8y3pxbqziljjj80qbdwixk1lf01q")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/context")
+    (synopsis "ConTeXt macro package")
+    (description "ConTeXt is a full featured, parameter driven macro package,
+which fully supports advanced interactive documents.  See the ConTeXt garden
+for a wealth of support information.")
+    ;; The GPL applies to all code; alternatively, the LaTeX license may be used.
+    ;; The CC-BY-SA license applies to all documentation.
+    (license (list license:lppl1.3c+
+                   license:gpl2+
+                   license:cc-by-sa4.0))))
+
 (define-public texlive-beamer
   (package
     (inherit (simple-texlive-package
@@ -7305,11 +8075,11 @@ of support information.")
               (list "/doc/latex/beamer/"
                     "/tex/latex/beamer/")
               (base32
-               "1fqzbkmw2kfxihab8j4dadc3v68xap6v2ghpp2064fna47xlwy1c")
+               "1yw9ixmjc0h1nqxsvd8lvibdggcysx25001pzzixg1b00l2jf242")
               #:trivial? #t))
     (propagated-inputs
      `(("texlive-latex-hyperref" ,texlive-latex-hyperref)
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
+       ("texlive-oberdiek" ,texlive-oberdiek)
        ("texlive-latex-etoolbox" ,texlive-latex-etoolbox)
        ("texlive-latex-pgf" ,texlive-latex-pgf)))
     (home-page "https://www.ctan.org/pkg/beamer")
@@ -7353,58 +8123,45 @@ the metadata is stored in an XML file, and this XML stream is then embedded in
 the file to which it applies.")
     (license license:gpl3+)))
 
-(define-public texlive-latex-pdfx
-  (package
-    (name "texlive-latex-pdfx")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "pdfx"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "18294h0cr05fs424m3x6aq24z5hf5zmiflalkj4kvpmsyyqqsj74"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/pdfx"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-encoding
-           (lambda _
-             (substitute* "pdfx.dtx"
-               (("    .+umaczy") "umaczy"))
-             #t))
-         (add-before 'install 'install-tex-files
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/pdfx")))
-               (mkdir-p target)
-               (copy-recursively (assoc-ref inputs "texlive-tex-pdfx") target)
-               ;; Install the generated version in the "install" phase.
-               (delete-file (string-append target "/pdfx.sty"))
-               #t))))))
-    (propagated-inputs
-     `(("texlive-generic-pdftex" ,texlive-generic-pdftex)))
-    (native-inputs
-     `(("texlive-tex-pdfx"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/pdfx"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "texlive-tex-latex-pdfx-" version "-checkout"))
-           (sha256
-            (base32
-             "171ffvpkj2fab4ljcxv3l6l5c8ga8zavdhmhfq07id8zyyr619ip"))))))
-    (home-page "https://www.ctan.org/pkg/pdfx")
-    (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
-    (description
-     "This package helps LaTeX users to create PDF/X, PDF/A and other
+(define-public texlive-pdfx
+  (let ((template (simple-texlive-package
+                   "texlive-pdfx"
+                   (list "/doc/latex/pdfx/"
+                         "/source/latex/pdfx/"
+                         "/tex/latex/pdfx/")
+                   (base32
+                    "1z4j4d92k2fjmf8jfap4zn7ij97d9rz2jcs9aslcac07ag4x5bdp"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/pdfx")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-generated-file
+               (lambda _
+                 ;; Generate this file from sources
+                 (delete-file "tex/latex/pdfx/pdfx.sty")
+                 #t))
+             (add-after 'delete-generated-file 'chdir
+               (lambda _ (chdir "source/latex/pdfx") #t))
+             (add-after 'chdir 'fix-encoding
+               (lambda _
+                 (substitute* "pdfx.dtx"
+                   (("    .+umaczy") "umaczy"))
+                 #t))))))
+      (propagated-inputs
+       `(("texlive-pdftex" ,texlive-pdftex)))
+      (home-page "https://www.ctan.org/pkg/pdfx")
+      (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
+      (description
+       "This package helps LaTeX users to create PDF/X, PDF/A and other
 standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
-    (license license:lppl1.2+)))
+      (license license:lppl1.2+))))
+
+(define-public texlive-latex-pdfx
+  (deprecated-package "texlive-latex-pdfx" texlive-pdfx))
 
 (define-public texlive-ydoc
   (let ((template (simple-texlive-package
@@ -7428,21 +8185,11 @@ standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ydoc") #t))
              (add-after 'copy-files 'move-files
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((share (string-append (assoc-ref outputs "out")
-                                              "/share/texmf-dist"))
-                        (target (string-append share "/tex/generic/ydoc"))
-                        (doc (string-append (assoc-ref outputs "doc")
-                                            "/share/texmf-dist/doc") ))
-                   (mkdir-p target)
-                   (for-each
-                    (lambda (file)
-                      (rename-file (string-append share "/tex/latex/ydoc/" file)
-                                   (string-append target "/" file)))
-                    '("ydocincl.tex" "ydocstrip.tex"))
-                   (mkdir-p doc)
-                   (rename-file (string-append share "/doc") doc)
-                   #t)))))))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((source (assoc-ref inputs "source"))
+                       (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc")))
+                   (copy-recursively (string-append source "/doc")  doc))))))))
       (home-page "http://www.ctan.org/pkg/ydoc")
       (synopsis "Macros for documentation of LaTeX classes and packages")
       (description "The package provides macros and environments to document
@@ -7462,7 +8209,7 @@ change.")
                          "/tex/generic/pstricks/"
                          "/tex/latex/pstricks/")
                    (base32
-                    "0sdxdd0qi4sccw9il7d4s7jivs24pq99cdzfnrf0gkqjb1y8s7cl")
+                    "0sdq0ij83vg154205n1cps9yirr45240dfcly4bms2cqc789bk5a")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7508,7 +8255,7 @@ of the old package @code{pst-char}.")
                    "texlive-marginnote"
                    (list "/source/latex/marginnote/marginnote.dtx")
                    (base32
-                    "1vj1k8xm11gjdfj60as42d8lsv3dbzrm5dlgqcfk89d9dzm3k39j"))))
+                    "152bwxhnssj40rr72r6cfirvqbnc0h7xnagfrbz58v2xck53qhg1"))))
     (package
       (inherit template)
       (home-page "http://www.ctan.org/pkg/marginnote")
@@ -7529,13 +8276,13 @@ may be used instead of @code{\\marginpar} at almost every place where
 frames made with the @code{framed} package.")
       (license license:lppl1.3c+))))
 
-(define-public texlive-iftex
+(define-public texlive-generic-iftex
   (let ((template (simple-texlive-package
-                   "texlive-iftex"
+                   "texlive-generic-iftex"
                    (list "/doc/generic/iftex/"
-                         "/tex/generic/iftex/iftex.sty")
+                         "/tex/generic/iftex/")
                    (base32
-                    "089zvw31gby150n1k0zdk2c0q97pgbqs46phxydaqil64b55nnl7")
+                    "147xa5kl4kjs05nj8v3kd7dpr5xkz3xp3gdvjih32ccd7527f5vp")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7549,13 +8296,19 @@ package also provides the @code{\\RequirePDFTeX}, @code{\\RequireXeTeX}, and
 LuaTeX (respectively) is not the engine in use.")
       (license license:lppl1.3+))))
 
+(define-public texlive-iftex
+  (deprecated-package "texlive-iftex" texlive-generic-iftex))
+
+(define-public texlive-generic-ifxetex
+  (deprecated-package "texlive-generic-ifxetex" texlive-generic-iftex))
+
 (define-public texlive-tools
   (let ((template (simple-texlive-package
                    "texlive-tools"
                    (list "/doc/latex/tools/"
                          "/source/latex/tools/")
                    (base32
-                    "1ivhij7171wvrgcjn4wah84wxwpd21d0chh3zxab4pj067c8d0mh"))))
+                    "1860bll28mr8nhbdfx073mj87vgg3gpc62v8bk9q0kq8pg0wsx1a"))))
     (package
       (inherit template)
       (arguments
@@ -7643,7 +8396,7 @@ are part of the LaTeX required tools distribution, comprising the packages:
        ("texlive-xcolor" ,texlive-xcolor)
        ("texlive-latex-footmisc" ,texlive-latex-footmisc)
        ("texlive-latex-listings" ,texlive-latex-listings)
-       ("texlive-iftex" ,texlive-iftex)
+       ("texlive-generic-iftex" ,texlive-generic-iftex)
        ("texlive-pstricks" ,texlive-pstricks)
        ("texlive-pst-text" ,texlive-pst-text)
        ("texlive-tools" ,texlive-tools)
@@ -7698,7 +8451,7 @@ The behaviour in standalone mode may adjusted using a configuration file
              (list "/source/latex/siunitx/siunitx.dtx"
                    "/doc/latex/siunitx/README.md")
              (base32
-              "11kf6znkgw7y5qmw75qk6px6pqf57bwr53q0673zaiyq20lif96c")))
+              "05kl7yid2npp2gbfshnv2xd08w81fkh5h2n5wd9xcpbhlqjzx9sj")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/siunitx"
@@ -7738,7 +8491,7 @@ package to handle all of the possible unit-related needs of LaTeX users.")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dqid48vgh25wmw8xzmx6x3pfgz1y9f0r8aza1yxq2mjny5yf68x"))))
+         "1mycxzl761p2zzmva8xsjbxbvrxx3vhi5p160mh9kiqwhrs5biz5"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/booktabs"))
     (home-page "http://www.ctan.org/pkg/booktabs")
@@ -7756,7 +8509,7 @@ to what constitutes a good table in this context.  The package offers
                    (list "/doc/latex/csquotes/"
                          "/tex/latex/csquotes/")
                    (base32
-                    "088gvi60d7sdl6fgg68fbz30fnpqc3yrpkx80sfw7vwgar3wm3av")
+                    "1k7riymar0xx41n03p6yscrsjr2mzmzzkqihh2yv4lixd1nd7l8j")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7814,7 +8567,7 @@ XML file.
                    (list "/doc/latex/biblatex/"
                          "/tex/latex/biblatex/")
                    (base32
-                    "11kzvny50iklzkamr0rqd5x532q8rxny1xhmf96jl8mzj1d2zmay")
+                    "0bq15ynx84v3ppz5ar1k321k1ck85x2p0irgxgzjh1lna9h6w7v0")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7892,7 +8645,7 @@ included in the @code{units} bundle.")
                    (list "/doc/latex/microtype/"
                          "/tex/latex/microtype/")
                    (base32
-                    "0xmjpzbj4nqmnl5m7xx1bshdk2c8n57rmbvn0j479ypj4wdlq9iy")
+                    "1yig4i0alqrb1a6hhhlh5y0y4dzpznh698j0cb9632m2cd3aghwz")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7917,7 +8670,7 @@ the bundle.")
                    (list "/doc/latex/caption/"
                          "/tex/latex/caption/")
                    (base32
-                    "09gmh8yjj9f5zak8r18g87w9p5jn7flnvmlhxmvdq6992mbdc6hg")
+                    "11wnakgbqbpqvc6rr1j0s7qw5jvkhf3miizax4l73i87a90gxk6b")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8094,7 +8847,7 @@ a repackaging, for use with TeX, of the Bitstream Vera family.")
                     "/fonts/vf/public/fourier/"
                     "/tex/latex/fourier/")
               (base32
-               "1vs2xdx6f6hd01zlslx3y93g3dsa7k3yhqpnhgkizgjmz0r9ipz1")
+               "04d575nd4yvl58g9dfab9mrjxiv4792bdkz4bjvlkx6x257vlfzn")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fourier")
     (synopsis "Utopia fonts for LaTeX documents")
@@ -8183,7 +8936,7 @@ footnote style author/affiliation input in the @command{\\author} command,
               (list "/doc/latex/mweights/"
                     "/tex/latex/mweights/")
               (base32
-               "1k2xclk54q3xgn48hji23q52nivkzgwf0s30bmm6k83f7v57qv8h")
+               "12493g3yz06mhiybnphqbp49fjzy36clzw63b74mkfhsg1pq7h1b")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/mweights")
     (synopsis "Support for multiple-weight font packages")
@@ -8209,7 +8962,7 @@ or if it differs from the weight desired for another font family.  The
                     "/fonts/vf/impallari/cabin/"
                     "/tex/latex/cabin/")
               (base32
-               "0dfq9gqch80iyvp58spmpmqfc9h61sjvnddm81ba0af1p8ag8sfg")
+               "0878gc4aqs9168kfb1j3js7rrxvf9lrxwfqzc9cag1cjy60nqljy")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/cabin")
     (synopsis "Humanist Sans Serif font with LaTeX support")
@@ -8240,7 +8993,7 @@ use with [pdf]LaTeX.")
                     "/fonts/vf/public/newtx/"
                     "/tex/latex/newtx/")
               (base32
-               "0rqjj33m6xkhrjzjhf24kxdg61az5sqsbcl0m7xqkf4akqybn22d")
+               "0fa90qz8px369yk0x1nhmq4901rvnclx06ijb4ir57f2324rrg8d")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/newtx")
     (synopsis "Repackaging of the TX fonts with improved metrics")
@@ -8268,7 +9021,7 @@ mathematics package that matches Libertine text quite well.")
                     "/fonts/vf/public/xcharter/"
                     "/tex/latex/xcharter/")
               (base32
-               "0krm4h53lw7h9jbmv5nc89fm4x7i8l574aig1l4mw8w3ziknwmi7")
+               "1qlid98lg0wcdq6hpk9kl2cl139pxcw6y8x8mfah2j95wq1i64lm")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/xcharter")
     (synopsis "Extension of the Bitstream Charter fonts")
@@ -8586,7 +9339,7 @@ provided box macros are @code{\\lapbox}, @code{\\marginbox},
                    (list "/doc/latex/tcolorbox/"
                          "/tex/latex/tcolorbox/")
                    (base32
-                    "172lcnk6964alsga5w6kcvjhpjjcw1g9df73k8pyhl5lf4fmxa29")
+                    "1swhagdj0a39ssifp29a36ldrjqmx8w92dqsgsjpal6lhksvzn2w")
                    #:trivial? #true)))
     (package
       (inherit template)
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index a2fe989f1a..f9c40b3450 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Pierre-Moana Levesque <pierre.moana.levesque@gmail.com>
-;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
@@ -59,21 +59,18 @@
      ;; with the native compiler, the environment is reset. This leads to
      ;; multiple environment variables missing. Do not reset the environment
      ;; to prevent that.
-     (if (%current-target-system)
-         '(#:phases
-           (modify-phases %standard-phases
-             (add-before 'configure 'fix-cross-configure
-               (lambda _
-                 (substitute* "configure"
-                   (("env -i")
-                    "env "))
-                 #t))))
-         '()))
+     `(#:phases
+       (if ,(%current-target-system)
+            (modify-phases %standard-phases
+              (add-before 'configure 'fix-cross-configure
+                (lambda _
+                  (substitute* "configure"
+                    (("env -i")
+                     "env "))
+                  #t)))
+            %standard-phases)))
     (inputs `(("ncurses" ,ncurses)
-              ;; TODO: remove `if' in the next rebuild cycle.
-              ,@(if (%current-target-system)
-                    `(("perl" ,perl))
-                    '())))
+              ("perl" ,perl)))
     ;; When cross-compiling, texinfo will build some of its own binaries with
     ;; the native compiler. This means ncurses is needed both in both inputs
     ;; and native-inputs.
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 11332fab0b..de3953c8d9 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -769,7 +769,8 @@ environment with Markdown markup.")
                (let ((bin (string-append out "/bin"))
                      (executable (string-append share "/bin/manuskript")))
                  (wrap-program executable
-                   (list "PYTHONPATH" 'prefix (list (getenv "PYTHONPATH"))))
+                   (list "GUIX_PYTHONPATH" 'prefix
+                         (list (getenv "GUIX_PYTHONPATH"))))
                  (mkdir-p bin)
                  (with-directory-excursion bin
                    (symlink (string-append share "/bin/manuskript")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index c1e8b46a84..58876a408f 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -15,8 +15,10 @@
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -40,6 +42,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system perl)
@@ -61,6 +64,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -76,7 +80,7 @@
 (define-public libtasn1
   (package
     (name "libtasn1")
-    (version "4.16.0")
+    (version "4.17.0")
     (source
      (origin
       (method url-fetch)
@@ -84,7 +88,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "179jskl7dmfp1rd2khkzmlibzgki4wi6hvmmwfv7q49r728b03qf"))))
+        "19a53i1ajs4dd8nnlr2i6gbzvla84ay71g3y1phvh8krx8f5brzc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
@@ -167,8 +171,7 @@ living in the same process.")
 (define-public gnutls
   (package
     (name "gnutls")
-    (version "3.6.15")
-    (replacement gnutls-3.6.16)
+    (version "3.7.2")
     (source (origin
               (method url-fetch)
               ;; Note: Releases are no longer on ftp.gnu.org since the
@@ -177,20 +180,20 @@ living in the same process.")
                                   (version-major+minor version)
                                   "/gnutls-" version ".tar.xz"))
               (patches (search-patches "gnutls-skip-trust-store-test.patch"
-                                       "gnutls-cross.patch"
-                                       "gnutls-CVE-2021-20231.patch"
-                                       "gnutls-CVE-2021-20232.patch"))
+                                       "gnutls-cross.patch"))
               (sha256
                (base32
-                "0n0m93ymzd0q9hbknxc2ycanz49sqlkyyf73g9fk7n787llc7a0f"))))
+                "0li7mwjnm64mbxhacz0rpf6i9qd83f53fvbrx96alpqqk9d6qvk4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? ,(not (or (%current-target-system)
                           (hurd-target?)))
-       ;; Ensure we don't keep a reference to net-tools.
-       #:disallowed-references ,(if (hurd-target?) '() (list net-tools))
+       ;; Ensure we don't keep a reference to the tools used for testing.
+       #:disallowed-references ,(if (hurd-target?)
+                                    '()
+                                    (list net-tools iproute socat))
        #:configure-flags
-       (list
+       (cons*
              ;; GnuTLS doesn't consult any environment variables to specify
              ;; the location of the system-wide trust store.  Instead it has a
              ;; configure-time option.  Unless specified, its configure script
@@ -211,13 +214,25 @@ living in the same process.")
              (string-append "--with-guile-extension-dir="
                             "$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions")
 
-             ;; FIXME: Temporarily disable p11-kit support since it is not
-             ;; working on mips64el.
-             "--without-p11-kit")
+             (let ((system ,(or (%current-target-system)
+                                (%current-system))))
+               (if (string-prefix? "mips64el" system)
+                   (list
+                    ;; FIXME: Temporarily disable p11-kit support since it is
+                    ;; not working on mips64el.
+                    "--without-p11-kit")
+                   '())))
 
        #:phases (modify-phases %standard-phases
-                  (add-after
-                   'install 'move-doc
+                  ;; fastopen.sh fails to connect to the server in the builder
+                  ;; environment (see:
+                  ;; https://gitlab.com/gnutls/gnutls/-/issues/1095).
+                  (add-after 'unpack 'disable-failing-tests
+                    (lambda _
+                      (substitute* "tests/fastopen.sh"
+                        (("^unset RETCODE")
+                         "exit 77\n")))) ;skip
+                  (add-after 'install 'move-doc
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Copy the 4.1 MiB of section 3 man pages to "doc".
                      (let* ((out    (assoc-ref outputs "out"))
@@ -226,8 +241,7 @@ living in the same process.")
                             (oldman (string-append out "/share/man/man3")))
                        (mkdir-p mandir)
                        (copy-recursively oldman mandir)
-                       (delete-file-recursively oldman)
-                       #t))))))
+                       (delete-file-recursively oldman)))))))
     (outputs '("out"                              ;4.4 MiB
                "debug"
                "doc"))                            ;4.1 MiB of man pages
@@ -237,10 +251,14 @@ living in the same process.")
              '())
        ,@(if (hurd-target?)
              '()
-             `(("net-tools" ,net-tools)))
+             `(("net-tools" ,net-tools)
+               ("iproute" ,iproute)               ;for 'ss'
+               ("socat" ,socat)))                 ;several tests rely on it
        ("pkg-config" ,pkg-config)
+       ("texinfo" ,texinfo)
        ("which" ,which)
-       ,@(if (hurd-target?) '()
+       ,@(if (hurd-target?)
+             '()
              `(("datefudge" ,datefudge)))         ;tests rely on 'datefudge'
        ("util-linux" ,util-linux)))               ;one test needs 'setsid'
     (inputs
@@ -250,7 +268,12 @@ living in the same process.")
      `(("libtasn1" ,libtasn1)
        ("libidn2" ,libidn2)
        ("nettle" ,nettle)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ,@(let ((system (or (%current-target-system)
+                           (%current-system))))
+           (if (string-prefix? "mips64el" system)
+               '()
+               `(("p11-kit" ,p11-kit))))))
     (home-page "https://www.gnu.org/software/gnutls/")
     (synopsis "Transport layer security library")
     (description
@@ -262,68 +285,6 @@ required structures.")
     (properties '((ftp-server . "ftp.gnutls.org")
                   (ftp-directory . "/gcrypt/gnutls")))))
 
-;; Replacement package to fix CVE-2021-20305.
-(define gnutls-3.6.16
-  (package
-    (inherit gnutls)
-    (version "3.6.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnupg/gnutls/v"
-                                  (version-major+minor version)
-                                  "/gnutls-" version ".tar.xz"))
-              (patches (search-patches "gnutls-skip-trust-store-test.patch"
-                                       "gnutls-cross.patch"))
-              (sha256
-               (base32
-                "1czk511pslz367shf32f2jvvkp7y1323bcv88c2qng98mj0v6y8v"))))
-    (arguments
-     (if (%current-target-system)
-         (substitute-keyword-arguments (package-arguments gnutls)
-           ((#:phases phases '%standard-phases)
-            `(modify-phases ,phases
-               (add-before 'configure 'build-eccdata-headers
-                 (lambda* (#:key configure-flags #:allow-other-keys)
-                   ;; Build the 'ecc/eccdata' program using the native
-                   ;; compiler, not the cross-compiler as happens by default,
-                   ;; and use it to build lib/nettle/ecc/ecc-*.h.  In GnuTLS
-                   ;; 3.6.15, this was not necessary because the tarball
-                   ;; contained pre-generated lib/nettle/ecc/ecc-*.h files as
-                   ;; well as 'ecc/eccdata.stamp'.
-                   (let ((jobs  (number->string (parallel-job-count)))
-                         (patch (assoc-ref %standard-phases
-                                           'patch-generated-file-shebangs)))
-                     (mkdir "+native-build")
-                     (with-directory-excursion "+native-build"
-                       ;; Build natively, with the native compiler, GMP, etc.
-                       (invoke "../configure"
-                               (string-append "SHELL=" (which "sh"))
-                               (string-append "CONFIG_SHELL=" (which "sh"))
-                               "NETTLE_CFLAGS=   " "NETTLE_LIBS=   "
-                               "HOGWEED_CFLAGS=   " "HOGWEED_LIBS=   "
-                               "LIBTASN1_CFLAGS=   " "LIBTASN1_LIBS=   "
-                               "ac_cv_func_nettle_rsa_sec_decrypt=yes"
-                               "--without-p11-kit" "--disable-guile")
-                       (patch)
-                       (invoke "make" "-C" "gl" "-j" jobs)
-                       (invoke "make" "-C" "lib/nettle" "V=1" "-j" jobs))
-
-                     ;; Copy the files we obtained during native build.
-                     (for-each (lambda (file)
-                                 (install-file file "lib/nettle/ecc"))
-                               (find-files
-                                "+native-build/lib/nettle/ecc"
-                                "^(eccdata\\.stamp|ecc-.*\\.h)$"))))))))
-         (package-arguments gnutls)))
-    (native-inputs
-     (if (%current-target-system)
-         `(("libtasn1" ,libtasn1)                 ;for 'ecc/eccdata'
-           ("libidn2" ,libidn2)
-           ("nettle" ,nettle)
-           ("zlib" ,zlib)
-           ,@(package-native-inputs gnutls))
-         (package-native-inputs gnutls)))))
-
 (define-public gnutls/guile-2.0
   ;; GnuTLS for Guile 2.0.
   (package/inherit gnutls
@@ -351,148 +312,34 @@ required structures.")
 (define-public guile3.0-gnutls
   (deprecated-package "guile3.0-gnutls" gnutls))
 
-(define-public openssl
-  (package
-   (name "openssl")
-   (version "1.1.1j")
-   (replacement openssl-1.1.1k)
-   (source (origin
-             (method url-fetch)
-             (uri (list (string-append "https://www.openssl.org/source/openssl-"
-                                       version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/"
-                                       "openssl-" version ".tar.gz")
-                        (string-append "ftp://ftp.openssl.org/source/old/"
-                                       (string-trim-right version char-set:letter)
-                                       "/openssl-" version ".tar.gz")))
-             (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
-             (sha256
-              (base32
-               "1gw17520vh13izy1xf5q0a2fqgcayymjjj5bk0dlkxndfnszrwma"))))
-   (build-system gnu-build-system)
-   (outputs '("out"
-              "doc"         ;6.8 MiB of man3 pages and full HTML documentation
-              "static"))    ;6.4 MiB of .a files
-   (native-inputs `(("perl" ,perl)))
-   (arguments
-    `(#:parallel-tests? #f
-      #:test-target "test"
-
-      ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
-      ;; so we explicitly disallow it here.
-      #:disallowed-references ,(list (canonical-package perl))
-      #:phases
-      (modify-phases %standard-phases
-       ,@(if (%current-target-system)
-           '((add-before
-               'configure 'set-cross-compile
-               (lambda* (#:key target outputs #:allow-other-keys)
-                 (setenv "CROSS_COMPILE" (string-append target "-"))
-                 (setenv "CONFIGURE_TARGET_ARCH"
-                         (cond
-                           ((string-prefix? "i586" target)
-                            "hurd-x86")
-                           ((string-prefix? "i686" target)
-                            "linux-x86")
-                           ((string-prefix? "x86_64" target)
-                            "linux-x86_64")
-                           ((string-prefix? "mips64el" target)
-                            "linux-mips64")
-                           ((string-prefix? "arm" target)
-                            "linux-armv4")
-                           ((string-prefix? "aarch64" target)
-                            "linux-aarch64")
-                           ((string-prefix? "powerpc64le" target)
-                            "linux-ppc64le")
-                           ((string-prefix? "powerpc64" target)
-                            "linux-ppc64")
-                           ((string-prefix? "powerpc" target)
-                            "linux-ppc")))
-                 #t)))
-           '())
-        (replace 'configure
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (lib (string-append out "/lib")))
-              ;; It's not a shebang so patch-source-shebangs misses it.
-              (substitute* "config"
-                (("/usr/bin/env")
-                 (string-append (assoc-ref %build-inputs "coreutils")
-                                "/bin/env")))
-              (invoke ,@(if (%current-target-system)
-                          '("./Configure")
-                          '("./config"))
-                      "shared"       ;build shared libraries
-                      "--libdir=lib"
-
-                      ;; The default for this catch-all directory is
-                      ;; PREFIX/ssl.  Change that to something more
-                      ;; conventional.
-                      (string-append "--openssldir=" out
-                                     "/share/openssl-"
-                                     ,(package-version this-package))
+(define (target->openssl-target target)
+  "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling
+OpenSSL for TARGET."
+  ;; Keep this code outside the build code,
+  ;; such that new targets can be added
+  ;; without causing rebuilds for other targets.
+  (cond ((string-prefix? "i586" target)
+         "hurd-x86")
+        ((string-prefix? "i686" target)
+         "linux-x86")
+        ((string-prefix? "x86_64" target)
+         "linux-x86_64")
+        ((string-prefix? "mips64el" target)
+         "linux-mips64")
+        ((string-prefix? "arm" target)
+         "linux-armv4")
+        ((string-prefix? "aarch64" target)
+         "linux-aarch64")
+        ((string-prefix? "powerpc64le" target)
+         "linux-ppc64le")
+        ((string-prefix? "powerpc64" target)
+         "linux-ppc64")
+        ((string-prefix? "powerpc" target)
+         "linux-ppc")))
 
-                      (string-append "--prefix=" out)
-                      (string-append "-Wl,-rpath," lib)
-                      ,@(if (%current-target-system)
-                          '((getenv "CONFIGURE_TARGET_ARCH"))
-                          '())))))
-        (add-after 'install 'move-static-libraries
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Move static libraries to the "static" output.
-            (let* ((out    (assoc-ref outputs "out"))
-                   (lib    (string-append out "/lib"))
-                   (static (assoc-ref outputs "static"))
-                   (slib   (string-append static "/lib")))
-              (for-each (lambda (file)
-                          (install-file file slib)
-                          (delete-file file))
-                        (find-files lib "\\.a$"))
-              #t)))
-        (add-after 'install 'move-extra-documentation
-          (lambda* (#:key outputs #:allow-other-keys)
-               ;; Move man3 pages and full HTML documentation to "doc".
-               (let* ((out    (assoc-ref outputs "out"))
-                      (man3   (string-append out "/share/man/man3"))
-                      (html (string-append out "/share/doc/openssl"))
-                      (doc    (assoc-ref outputs "doc"))
-                      (man-target (string-append doc "/share/man/man3"))
-                      (html-target (string-append doc "/share/doc/openssl")))
-                 (copy-recursively man3 man-target)
-                 (delete-file-recursively man3)
-                 (copy-recursively html html-target)
-                 (delete-file-recursively html)
-                 #t)))
-        (add-after
-         'install 'remove-miscellany
-         (lambda* (#:key outputs #:allow-other-keys)
-           ;; The 'misc' directory contains random undocumented shell and Perl
-           ;; scripts.  Remove them to avoid retaining a reference on Perl.
-           (let ((out (assoc-ref outputs "out")))
-             (delete-file-recursively (string-append out "/share/openssl-"
-                                                     ,(package-version this-package)
-                                                     "/misc"))
-             #t))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "SSL_CERT_DIR")
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs")))
-          (search-path-specification
-           (variable "SSL_CERT_FILE")
-           (file-type 'regular)
-           (separator #f)                        ;single entry
-           (files '("etc/ssl/certs/ca-certificates.crt")))))
-   (synopsis "SSL/TLS implementation")
-   (description
-    "OpenSSL is an implementation of SSL/TLS.")
-   (license license:openssl)
-   (home-page "https://www.openssl.org/")))
-
-;; Replacement package to fix CVE-2021-3449 and CVE-2021-3450.
-(define openssl-1.1.1k
+(define-public openssl
   (package
-    (inherit openssl)
+    (name "openssl")
     (version "1.1.1k")
     (source (origin
               (method url-fetch)
@@ -506,7 +353,109 @@ required structures.")
               (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
               (sha256
                (base32
-                "1rdfzcrxy9y38wqdw5942vmdax9hjhgrprzxm42csal7p5shhal9"))))))
+                "1rdfzcrxy9y38wqdw5942vmdax9hjhgrprzxm42csal7p5shhal9"))))
+    (build-system gnu-build-system)
+    (outputs '("out"
+               "doc"         ;6.8 MiB of man3 pages and full HTML documentation
+               "static"))    ;6.4 MiB of .a files
+    (native-inputs `(("perl" ,perl)))
+    (arguments
+     `(#:parallel-tests? #f
+       #:test-target "test"
+
+       ;; Changes to OpenSSL sometimes cause Perl to "sneak in" to the closure,
+       ;; so we explicitly disallow it here.
+       #:disallowed-references ,(list (canonical-package perl))
+       #:phases
+       ,#~
+       (modify-phases %standard-phases
+         #$@(if (%current-target-system)
+                #~((add-before
+                       'configure 'set-cross-compile
+                     (lambda* (#:key target #:allow-other-keys)
+                       (setenv "CROSS_COMPILE" (string-append target "-"))
+                       (setenv "CONFIGURE_TARGET_ARCH"
+                               #$(target->openssl-target
+                                  (%current-target-system))))))
+                #~())
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (let* ((out #$output)
+                    (lib (string-append out "/lib")))
+               ;; It's not a shebang so patch-source-shebangs misses it.
+               (substitute* "config"
+                 (("/usr/bin/env")
+                  (string-append (assoc-ref %build-inputs "coreutils")
+                                 "/bin/env")))
+               (apply
+                invoke #$@(if (%current-target-system)
+                              #~("./Configure")
+                              #~("./config"))
+                "shared"    ;build shared libraries
+                "--libdir=lib"
+
+                ;; The default for this catch-all directory is
+                ;; PREFIX/ssl.  Change that to something more
+                ;; conventional.
+                (string-append "--openssldir=" out
+                               "/share/openssl-"
+                               #$(package-version this-package))
+
+                (string-append "--prefix=" out)
+                (string-append "-Wl,-rpath," lib)
+                #$@(if (%current-target-system)
+                       #~((getenv "CONFIGURE_TARGET_ARCH"))
+                       #~())
+                configure-flags)
+               ;; Output the configure variables.
+               (invoke "perl" "configdata.pm" "--dump"))))
+         (add-after 'install 'move-static-libraries
+           (lambda _
+             ;; Move static libraries to the "static" output.
+             (let* ((out    #$output)
+                    (lib    (string-append out "/lib"))
+                    (static #$output:static)
+                    (slib   (string-append static "/lib")))
+               (for-each (lambda (file)
+                           (install-file file slib)
+                           (delete-file file))
+                         (find-files lib "\\.a$")))))
+         (add-after 'install 'move-extra-documentation
+           (lambda _
+             ;; Move man pages and full HTML documentation to "doc".
+             (let* ((out    #$output)
+                    (man    (string-append out "/share/man"))
+                    (html   (string-append out "/share/doc/openssl"))
+                    (doc    #$output:doc)
+                    (man-target (string-append doc "/share/man"))
+                    (html-target (string-append doc "/share/doc/openssl")))
+               (mkdir-p (dirname man-target))
+               (mkdir-p (dirname html-target))
+               (rename-file man man-target)
+               (rename-file html html-target))))
+         (add-after
+             'install 'remove-miscellany
+           (lambda _
+             ;; The 'misc' directory contains random undocumented shell and Perl
+             ;; scripts.  Remove them to avoid retaining a reference on Perl.
+             (delete-file-recursively (string-append #$output "/share/openssl-"
+                                                     #$(package-version this-package)
+                                                     "/misc")))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "SSL_CERT_DIR")
+            (separator #f)                        ;single entry
+            (files '("etc/ssl/certs")))
+           (search-path-specification
+            (variable "SSL_CERT_FILE")
+            (file-type 'regular)
+            (separator #f)                        ;single entry
+            (files '("etc/ssl/certs/ca-certificates.crt")))))
+    (synopsis "SSL/TLS implementation")
+    (description
+     "OpenSSL is an implementation of SSL/TLS.")
+    (license license:openssl)
+    (home-page "https://www.openssl.org/")))
 
 (define-public openssl-1.0
   (package
@@ -535,7 +484,7 @@ required structures.")
        ;; Parallel build is not supported in 1.0.x.
        ((#:parallel-build? _ #f) #f)
        ((#:phases phases)
-        `(modify-phases ,phases
+       #~(modify-phases #$phases
            (add-before 'patch-source-shebangs 'patch-tests
              (lambda* (#:key inputs native-inputs #:allow-other-keys)
                (let ((bash (assoc-ref (or native-inputs inputs) "bash")))
@@ -558,9 +507,9 @@ required structures.")
 	     ;; Override this phase because OpenSSL 1.0 does not understand -rpath.
 	     (lambda* (#:key outputs #:allow-other-keys)
 	       (let ((out (assoc-ref outputs "out")))
-		 (invoke ,@(if (%current-target-system)
-			       '("./Configure")
-			       '("./config"))
+		 (invoke #$@(if (%current-target-system)
+			        #~("./Configure")
+			        #~("./config"))
 			 "shared"                 ;build shared libraries
 			 "--libdir=lib"
 
@@ -568,12 +517,12 @@ required structures.")
 			 ;; PREFIX/ssl.  Change that to something more
 			 ;; conventional.
 			 (string-append "--openssldir=" out
-					"/share/openssl-" ,version)
+					"/share/openssl-" #$version)
 
 			 (string-append "--prefix=" out)
-			 ,@(if (%current-target-system)
-			       '((getenv "CONFIGURE_TARGET_ARCH"))
-			       '())))))
+			 #$@(if (%current-target-system)
+			        '((getenv "CONFIGURE_TARGET_ARCH"))
+			        '())))))
         (delete 'move-extra-documentation)
         (add-after 'install 'move-man3-pages
           (lambda* (#:key outputs #:allow-other-keys)
@@ -598,7 +547,7 @@ required structures.")
                ;; scripts.  Remove them to avoid retaining a reference on Perl.
                (let ((out (assoc-ref outputs "out")))
                  (delete-file-recursively (string-append out "/share/openssl-"
-                                                         ,version "/misc"))
+                                                         #$version "/misc"))
                  #t)))))))))
 
 (define-public libressl
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 09040e106d..c9ede9e25b 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -168,10 +168,6 @@ windows.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             ;; Extend PYTHONPATH so the built package will be found.
-             (setenv "PYTHONPATH"
-                     (string-append (getcwd) "/build/lib:"
-                                    (getenv "PYTHONPATH")))
              ;; Fix <https://github.com/tmux-python/libtmux/issues/265>.
              (setenv "LANG" "en_US.utf8")
              ;; Skip tests that I suspect fail because of a change
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 4036bd461b..e90142b6a7 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -35,7 +35,7 @@
     (name "valgrind")
     ;; Note: check "guix refresh -l -e '(@ (gnu packages valgrind) valgrind)'"
     ;; when updating this package to find which branch it should go to.
-    (version "3.16.1")
+    (version "3.17.0")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -44,7 +44,7 @@
                                         "/valgrind-" version ".tar.bz2")))
               (sha256
                (base32
-                "1jik19rcd34ip8a5c9nv5wfj8k8maqb8cyclr4xhznq2gcpkl7y9"))
+                "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
               (patches (search-patches "valgrind-enable-arm.patch"))))
     (build-system gnu-build-system)
     (outputs '("doc"                              ;16 MB
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 7c1dbe8b26..3691336d3f 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -672,12 +672,12 @@ logs to GNU ChangeLog format.")
                    (git (assoc-ref inputs "git")))
                (wrap-program (string-append out "/bin/gl")
                  `("PATH" ":" prefix (,(string-append git "/bin")))
-                 `("PYTHONPATH" ":" =
+                 `("GUIX_PYTHONPATH" ":" =
                    (,(string-append out "/lib/python"
                                     ,(version-major+minor
                                       (package-version python))
                                     "/site-packages:")
-                    ,(getenv "PYTHONPATH"))))
+                    ,(getenv "GUIX_PYTHONPATH"))))
                #t))))))
     (native-inputs
      `(("git-for-tests" ,git-minimal)))
@@ -978,7 +978,7 @@ collaboration using typical untrusted file hosts or services.")
               (lambda (file)
                 (wrap-program (string-append (assoc-ref outputs "out")
                                              "/lib/cgit/filters/" file)
-                  `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                  `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))
               '("syntax-highlighting.py"
                 "html-converters/md2html"))
              #t)))))
@@ -2505,7 +2505,7 @@ by rclone usable with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.11")
+    (version "2.14")
     (source
      (origin
        (method url-fetch)
@@ -2513,7 +2513,7 @@ by rclone usable with git-annex.")
               "https://www.fossil-scm.org/index.html/uv/"
               "fossil-src-" version ".tar.gz"))
        (sha256
-        (base32 "0c9nzx42wxfmym9vf1pnbdb1c7gp7a7zqky60izxsph7w2xh8nix"))
+        (base32 "1fazl117ph5z7xg7h6w7i32sf7rsa67499rg2llsxn3d34hckl5q"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -2716,7 +2716,7 @@ directory full of HOWTOs.")
              (lambda* (#:key outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
                                             "/bin/git-when-merged")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
                #t)))))
       (inputs
        `(("git" ,git)
@@ -2761,7 +2761,7 @@ how information about the merge is displayed.")
            (lambda* (#:key outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
                                           "/bin/git-imerge")
-               `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
+               `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))))
              #t)))))
     (inputs
      `(("git" ,git)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index f19bdc7ef6..3f7d34ef59 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -205,10 +205,14 @@
     (arguments
      `(#:configure-flags
        (list
-        "--enable-libv4l2"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-libv4l2"
         "--enable-libmpeg2"
         "--enable-libmpeg2convert"
-        "--enable-v4l"
+        ;; XXX: Broken API.
+        ;; Undeclared variables 'sys_nerr' and 'sys_errlist'.
+        ;; "--enable-v4l"
         ;;; XXX: Not available.
         ;"--enable-bktr"
         ;"--enable-sunau"
@@ -270,7 +274,7 @@
        ("lzo" ,lzo)
        ("mjepgtools" ,mjpegtools)
        ("sdl" ,sdl)
-       ("v4l-utils" ,v4l-utils)
+       ;; ("v4l-utils" ,v4l-utils)
        ("x11" ,libx11)
        ("x264" ,libx264)
        ("xaw" ,libxaw)
@@ -4266,7 +4270,7 @@ tools for styling them, including a built-in real-time video preview.")
               (let ((prog (string-append (assoc-ref outputs "out")
                                          "/bin/pitivi")))
                 (wrap-program prog
-                  `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                  `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                   `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))
                   ;; We've only added inputs for what Pitivi deems either
                   ;; necessary or optional.  Let the user's packages take
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 1bbcb46b99..136b0c45b7 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -333,8 +333,7 @@ exec smbd $@")))
                      ("perl" ,perl)
                      ("flex" ,flex)
                      ("bison" ,bison)
-                     ;; Using meson 0.57.1 enables reproducible QEMU builds.
-                     ("meson" ,meson-next)
+                     ("meson" ,meson)
                      ("ninja" ,ninja)
                      ("pkg-config" ,pkg-config)
                      ("python-wrapper" ,python-wrapper)
@@ -342,7 +341,7 @@ exec smbd $@")))
                      ("texinfo" ,texinfo)
                      ;; The following static libraries are required to build
                      ;; the static output of QEMU.
-                     ("glib-static" ,glib-static)
+                     ("glib:static" ,glib "static")
                      ("pcre:static" ,pcre "static")
                      ("zlib:static" ,zlib "static")))
     (home-page "https://www.qemu.org")
@@ -448,8 +447,7 @@ server and embedded PowerPC, and S390 guests.")
                                        "ganeti-drbd-compat.patch"
                                        "ganeti-os-disk-size.patch"
                                        "ganeti-haskell-pythondir.patch"
-                                       "ganeti-disable-version-symlinks.patch"
-                                       "ganeti-preserve-PYTHONPATH.patch"))))
+                                       "ganeti-disable-version-symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:imported-modules (,@%gnu-build-system-modules
@@ -457,7 +455,6 @@ server and embedded PowerPC, and S390 guests.")
                            (guix build python-build-system))
        #:modules (,@%gnu-build-system-modules
                   ((guix build haskell-build-system) #:prefix haskell:)
-                  ((guix build python-build-system) #:select (python-version))
                   (ice-9 rdelim))
 
        ;; The default test target includes a lot of checks that are only really
@@ -504,8 +501,7 @@ server and embedded PowerPC, and S390 guests.")
              (unless (file-exists? "vcs-version")
                (call-with-output-file "vcs-version"
                  (lambda (port)
-                   (format port "v~a~%" ,version))))
-             #t))
+                   (format port "v~a~%" ,version))))))
          (add-after 'unpack 'patch-absolute-file-names
            (lambda _
              (substitute* '("lib/utils/process.py"
@@ -531,8 +527,7 @@ server and embedded PowerPC, and S390 guests.")
                (("ndisc6") (which "ndisc6"))
                (("fping") (which "fping"))
                (("grep") (which "grep"))
-               (("ip addr") (string-append (which "ip") " addr")))
-             #t))
+               (("ip addr") (string-append (which "ip") " addr")))))
          (add-after 'unpack 'override-builtin-PATH
            (lambda _
              ;; Ganeti runs OS install scripts and similar with a built-in
@@ -540,8 +535,7 @@ server and embedded PowerPC, and S390 guests.")
              (substitute* "src/Ganeti/Constants.hs"
                (("/sbin:/bin:/usr/sbin:/usr/bin")
                 "/run/setuid-programs:/run/current-system/profile/sbin:\
-/run/current-system/profile/bin"))
-             #t))
+/run/current-system/profile/bin"))))
          (add-after 'bootstrap 'patch-sphinx-version-detection
            (lambda _
              ;; The build system runs 'sphinx-build --version' to verify that
@@ -549,8 +543,8 @@ server and embedded PowerPC, and S390 guests.")
              ;; .sphinx-build-real executable name created by the Sphinx wrapper.
              (substitute* "configure"
                (("\\$SPHINX --version 2>&1")
-                "$SPHINX --version 2>&1 | sed 's/.sphinx-build-real/sphinx-build/g'"))
-             #t))
+                "$SPHINX --version 2>&1 \
+| sed 's/.sphinx-build-real/sphinx-build/g'"))))
 
          ;; The build system invokes Cabal and GHC, which do not work with
          ;; GHC_PACKAGE_PATH: <https://github.com/haskell/cabal/issues/3728>.
@@ -564,13 +558,11 @@ server and embedded PowerPC, and S390 guests.")
                (("\\$\\(CABAL\\)")
                 "$(CABAL) --package-db=../package.conf.d")
                (("\\$\\(GHC\\)")
-                "$(GHC) -package-db=../package.conf.d"))
-             #t))
+                "$(GHC) -package-db=../package.conf.d"))))
          (add-after 'configure 'make-ghc-use-shared-libraries
            (lambda _
              (substitute* "Makefile"
-               (("HFLAGS =") "HFLAGS = -dynamic -fPIC"))
-             #t))
+               (("HFLAGS =") "HFLAGS = -dynamic -fPIC"))))
          (add-after 'configure 'fix-installation-directories
            (lambda _
              (substitute* "Makefile"
@@ -580,8 +572,7 @@ server and embedded PowerPC, and S390 guests.")
                ;; Similarly, do not attempt to install the sample ifup scripts
                ;; to /etc/ganeti.
                (("\\$\\(DESTDIR\\)\\$\\(ifupdir\\)")
-                "$(DESTDIR)${prefix}$(ifupdir)"))
-             #t))
+                "$(DESTDIR)${prefix}$(ifupdir)"))))
          (add-before 'build 'adjust-tests
            (lambda _
              ;; Disable tests that can not run.  Do it early to prevent
@@ -600,37 +591,16 @@ server and embedded PowerPC, and S390 guests.")
                 "")
                ;; This test requires networking.
                (("test/py/import-export_unittest\\.bash")
-                ""))
-
-             ;; Many of the Makefile targets reset PYTHONPATH before running
-             ;; the Python interpreter, which does not work very well for us.
-             (substitute* "Makefile"
-               (("PYTHONPATH=")
-                (string-append "PYTHONPATH=" (getenv "PYTHONPATH") ":")))
-             #t))
+                ""))))
          (add-after 'build 'build-bash-completions
            (lambda _
-             (let ((orig-pythonpath (getenv "PYTHONPATH")))
-               (setenv "PYTHONPATH" (string-append ".:" orig-pythonpath))
-               (invoke "./autotools/build-bash-completion")
-               (setenv "PYTHONPATH" orig-pythonpath)
-               #t)))
+             (invoke "python" "-m" "./autotools/build-bash-completion")))
          (add-before 'check 'pre-check
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Set TZDIR so that time zones are found.
              (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
                                             "/share/zoneinfo"))
 
-             ;; This test checks whether PYTHONPATH is untouched, and extends
-             ;; it to include test directories if so.  Add an else branch for
-             ;; our modified PYTHONPATH, in order to prevent a confusing test
-             ;; failure where expired certificates are not cleaned because
-             ;; check-cert-expired is silently crashing.
-             (substitute* "test/py/ganeti-cleaner_unittest.bash"
-               (("then export PYTHONPATH=(.*)" all testpath)
-                (string-append all "else export PYTHONPATH="
-                               (getenv "PYTHONPATH") ":" testpath "\n")))
-
              (substitute* "test/py/ganeti.utils.process_unittest.py"
                ;; This test attempts to run an executable with
                ;; RunCmd(..., reset_env=True), which fails because the default
@@ -652,8 +622,7 @@ server and embedded PowerPC, and S390 guests.")
                (for-each (lambda (file)
                            (symlink "../../src/htools" file))
                          '("hspace" "hscan" "hinfo" "hbal" "hroller"
-                           "hcheck" "hail" "hsqueeze")))
-             #t))
+                           "hcheck" "hail" "hsqueeze")))))
          (add-after 'install 'install-bash-completions
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -682,21 +651,15 @@ server and embedded PowerPC, and S390 guests.")
                                       (cons (basename (car (reverse (string-split
                                                                      line #\ ))))
                                             progs))
-                                (loop (read-line port) progs))))))))
-               #t)))
-         ;; Wrap all executables with PYTHONPATH.  We can't borrow the phase
-         ;; from python-build-system because we also need to wrap the scripts
-         ;; in $out/lib/ganeti such as "node-daemon-setup".
+                                (loop (read-line port) progs)))))))))))
+         ;; Wrap all executables with GUIX_PYTHONPATH.  We can't borrow
+         ;; the phase from python-build-system because we also need to wrap
+         ;; the scripts in $out/lib/ganeti such as "node-daemon-setup".
          (add-after 'install 'wrap
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (sbin (string-append out "/sbin"))
-                    (lib (string-append out "/lib"))
-                    (python (assoc-ref inputs "python"))
-                    (major+minor (python-version python))
-                    (PYTHONPATH (string-append lib "/python" major+minor
-                                               "/site-packages:"
-                                               (getenv "PYTHONPATH"))))
+                    (lib (string-append out "/lib")))
                (define (shell-script? file)
                  (call-with-ascii-input-file file
                    (lambda (port)
@@ -717,11 +680,11 @@ server and embedded PowerPC, and S390 guests.")
 
                (for-each (lambda (file)
                            (wrap-program file
-                             `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
+                             `("GUIX_PYTHONPATH" ":" prefix
+                               (,(getenv "GUIX_PYTHONPATH")))))
                          (filter wrap?
                                  (append (find-files (string-append lib "/ganeti"))
-                                         (find-files sbin))))
-               #t))))))
+                                         (find-files sbin))))))))))
     (native-inputs
      `(("haskell" ,ghc)
        ("cabal" ,cabal-install)
@@ -1101,7 +1064,6 @@ It started as a side project of LXC but can be used by any run-time.")
              (string-append "-Dinstall_prefix=" (assoc-ref %outputs "out"))
              "--sysconfdir=/etc"
              "--localstatedir=/var")
-       #:meson ,meson-0.55
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-directory-confusion
@@ -1434,9 +1396,9 @@ domains, their live performance and resource utilization statistics.")
                                          (string-take (string-take-right
                                                        (assoc-ref inputs "python") 5) 3)
                                          "/site-packages:"
-                                         (getenv "PYTHONPATH"))))
+                                         (or (getenv "GUIX_PYTHONPATH") ""))))
                (wrap-program (string-append out "/bin/crit")
-                 `("PYTHONPATH" ":" prefix (,path))))
+                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
              #t)))))
     (inputs
      `(("protobuf" ,protobuf)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 330a3271b4..25f61e2eab 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -531,10 +531,12 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
              ;; Wrap scripts with paths to their common hard dependencies.
              ;; Optional dependencies will need to be installed by the user.
              (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
+               (let ((out (assoc-ref outputs "out"))
+                     (guile (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (script)
                     (wrap-script (string-append out "/etc/vpnc/" script)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (name)
                                 (let ((input (assoc-ref inputs name)))
@@ -663,6 +665,7 @@ and probably others.")
                                        (assoc-ref inputs "qtwebengine")
                                        "/lib/qt5/libexec/QtWebEngineProcess")))
                (wrap-program bin
+                 #:sh (search-input-file inputs "bin/bash")
                  `("QTWEBENGINEPROCESS_PATH" = (,qt-process-path)))
                #t))))))
     (inputs
@@ -776,6 +779,7 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
              (let ((entrypoint (string-append (assoc-ref outputs "out")
                                               "/bin/.protonvpn-real")))
                (wrap-program entrypoint
+                            #:sh (search-input-file inputs "bin/bash")
                             `("PATH" ":" prefix
                               ,(map (lambda (name)
                                       (let ((input (assoc-ref inputs name)))
@@ -1061,6 +1065,7 @@ WireGuard was added to Linux 5.6.")
                    (coreutils (string-append (assoc-ref inputs "coreutils")
                                              "/bin")))
                (wrap-program (string-append out "/bin/wg-quick")
+                 #:sh (search-input-file inputs "bin/bash")
                  `("PATH" ":" prefix ,(append inputs-sbin
                                               (list coreutils))))
                #t))))))
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
index 934a6d9e38..a14ca02e84 100644
--- a/gnu/packages/w3m.scm
+++ b/gnu/packages/w3m.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -40,7 +42,7 @@
 (define-public w3m
   (package
     (name "w3m")
-    (version "0.5.3+git20200502")
+    (version "0.5.3+git20210102")
     (source (origin
               (method git-fetch)
               ;; Debian's fork of w3m is the only one that is still maintained.
@@ -50,21 +52,22 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0yyfhwcwy1dvdbirj6zqwk4gl8z9npfavs0k7ipcg5fd16vnx7mi"))))
+                "0amq1wfjp5mhqjmvrc0yhxjlx1335p78d7ap8iykfjn5h8yhmrg5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f  ; no check target
        ;; Use $EDITOR instead of a hard-coded value.
-       #:configure-flags '("--with-editor=")
+       #:configure-flags (list "--with-editor="
+                               "--with-imagelib=imlib2")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'fix-perl
            (lambda _ (substitute* '("scripts/w3mmail.cgi.in"
                                     "scripts/dirlist.cgi.in")
-                       (("@PERL@") (which "perl")))
-             #t)))))
+                       (("@PERL@") (which "perl"))))))))
     (inputs
      `(("gdk-pixbuf" ,gdk-pixbuf)
+       ("imlib2" ,imlib2)
        ("libgc" ,libgc)
        ("libx11" ,libx11)
        ("ncurses" ,ncurses)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 2cc8619b19..60417e1892 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -47,6 +47,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
@@ -971,7 +972,7 @@ libraries for working with JNLP applets.")
 (define-public jansson
   (package
     (name "jansson")
-    (version "2.12")
+    (version "2.13.1")
     (source (origin
              (method url-fetch)
              (uri
@@ -979,7 +980,7 @@ libraries for working with JNLP applets.")
                              version ".tar.bz2"))
              (sha256
               (base32
-               "1lp1mv8pjp5yziws66cy0dhpcam4bbjqhffk13v4vgdybp674pb4"))))
+               "1g8h18vh8gyxlwfmvdivdp1siad26ywj5zr4j4avgdyjg7wa147f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static")))
@@ -3851,16 +3852,14 @@ and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
 (define-public perl-io-socket-ssl
   (package
     (name "perl-io-socket-ssl")
-    (version "2.066")
+    (version "2.068")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SU/SULLR/"
                                   "IO-Socket-SSL-" version ".tar.gz"))
               (sha256
                (base32
-                "1kgbws7dwp2hh16qid7169dfkhmcwg7dz9ffbm6k0id5h53hciqd"))
-              (patches (search-patches
-                        "perl-io-socket-ssl-openssl-1.0.2f-fix.patch"))))
+                "1ycgzg1l7p07y5wc0vzgnj122vm51p5aqpi4s56pp0piaq0gq824"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-net-ssleay" ,perl-net-ssleay)
@@ -4480,14 +4479,14 @@ applications.")
 (define-public perl-uri
   (package
     (name "perl-uri")
-    (version "1.76")
+    (version "5.05")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://cpan/authors/id/O/OA/OALDERS/"
                                  "URI-" version ".tar.gz"))
              (sha256
               (base32
-               "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
+               "1v3r3ck67w272kzfgm1nd3wb41av1hlnza56vkxxj1i7s3917hd5"))))
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
@@ -6604,9 +6603,8 @@ Instagram and YouTube.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (add-installed-pythonpath inputs outputs)
                (invoke "py.test" "tests")))))))
     (home-page "https://linkchecker.github.io/linkchecker/")
     (synopsis "Check websites for broken links")
@@ -7609,7 +7607,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 (define-public nghttp2
   (package
     (name "nghttp2")
-    (version "1.41.0")
+    (version "1.43.0")
     (source
      (origin
        (method url-fetch)
@@ -7618,7 +7616,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
                            "nghttp2-" version ".tar.xz"))
        (sha256
         (base32
-         "1hk77vngjmvvzb5y1gi1aqwf6qywrc7yak08zvzb7x81qs6mphmb"))))
+         "03vbl80rxjpzzvgxb53kah9r0dd2dw9i4im4bilrzlmfz2k4zmgp"))))
     (build-system gnu-build-system)
     (outputs (list "out"
                    "lib"))              ; only libnghttp2
@@ -7627,6 +7625,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 
        ;; Required by tests.
        ("cunit" ,cunit)
+       ("python" ,python)
        ("tzdata" ,tzdata-for-tests)))
     (inputs
      ;; Required to build the tools (i.e. without ‘--enable-lib-only’).
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 8891170e10..58b3330293 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -45,7 +45,7 @@
 (define-public wget
   (package
     (name "wget")
-    (version "1.20.3")
+    (version "1.21.1")
     (source
      (origin
       (method url-fetch)
@@ -53,7 +53,7 @@
                           version ".tar.lz"))
       (sha256
        (base32
-        "1frajd86ds8vz2hprq30wq8ya89z9dcxnwm8nwk12bbc47l7qq39"))))
+        "1bchzkacjsc5c0x01ngaana9fs5j12wfw1c8qxps1yp68x9vx6yv"))))
     (build-system gnu-build-system)
     (inputs
      `(("gnutls" ,gnutls)
diff --git a/gnu/packages/wicd.scm b/gnu/packages/wicd.scm
index fec39ad530..073d440479 100644
--- a/gnu/packages/wicd.scm
+++ b/gnu/packages/wicd.scm
@@ -123,7 +123,10 @@
                        "--no-install-kde"
                        "--no-install-gnome-shell-extensions"
 
-                       "--distro=guixsd"
+                       ;; Don't pass --distro= despite setup.py's complaints.
+                       ;; Guix isn't recognised, and if it ever would be we'd
+                       ;; rather ask upstream to follow standards instead.
+
                        "--wicdgroup=netdev"
                        "--loggroup=root"
                        "--logperms=0640"
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 920a7cbb3e..51034cac4b 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -923,9 +923,7 @@ experience.")
                (base32
                 "1xaz13iry3fdjhqk9xzg29kbv7hqj8dzzqxr5mhrj8f2m013jdc3"))))
     (build-system meson-build-system)
-    (arguments
-     `( #:meson ,meson-0.55
-        #:build-type "release"))
+    (arguments `(#:build-type "release"))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("wayland-protocols" ,wayland-protocols)
@@ -1427,7 +1425,7 @@ functionality to display information about the most commonly used services.")
 (define-public wlroots
   (package
     (name "wlroots")
-    (version "0.12.0")
+    (version "0.13.0")
     (source
      (origin
        (method git-fetch)
@@ -1436,11 +1434,10 @@ functionality to display information about the most commonly used services.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01j38lmgs2c6fq68v8b75pkilia2wsgzgp46ivfbi9hhx47kgcfn"))))
+        (base32 "01plhbnsp5yg18arz0v8fr0pr9l4w4pdzwkg9px486qdvb3s1vgy"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dlogind-provider=elogind")
-       #:meson ,meson-0.55
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'hardcode-paths
@@ -1475,7 +1472,7 @@ modules for building a Wayland compositor.")
 (define-public sway
   (package
     (name "sway")
-    (version "1.5.1")
+    (version "1.6")
     (source
      (origin
        (method git-fetch)
@@ -1484,7 +1481,7 @@ modules for building a Wayland compositor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xsa3h8zhf29p0mi90baxpr76jkd9pd1gr97ky8cnjbcs4isj9j0"))))
+        (base32 "0vnplva11yafhbijrk68wy7pw0psn9jm0caaymswq1s951xsn1c8"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -1630,8 +1627,7 @@ modules for building a Wayland compositor.")
               ("spdlog" ,spdlog)
               ("wayland" ,wayland)))
     (native-inputs
-     `(("gcc" ,gcc-8)                   ; for #include <filesystem>
-       ("glib:bin" ,glib "bin")
+     `(("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)
        ("scdoc" ,scdoc)
        ("wayland-protocols" ,wayland-protocols)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 22f29c93be..11e815bd72 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -32,7 +32,7 @@
 ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 David Wilson <david@daviwil.com>
 ;;; Copyright © 2020 Ivan Vilata i Balaguer <ivan@selidor.net>
-;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Damien Cassou <damien@cassou.me>
 ;;; Copyright © 2020 John Soo <jsoo1@asu.edu>
 ;;; Copyright © 2020 Boris A. Dekshteyn <boris.dekshteyn@gmail.com>
@@ -43,6 +43,7 @@
 ;;; Copyright © 2020 James Smith <jsubuntuxp@disroot.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Renzo Poddighe <renzo@poddighe.nl>
@@ -420,14 +421,14 @@ avoiding password prompts when X11 forwarding has already been setup.")
 (define-public libxkbcommon
   (package
     (name "libxkbcommon")
-    (version "1.0.3")
+    (version "1.3.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0lmwglj16anhpaq0h830xsl1ivknv75i4lir9bk88aq73s2jy852"))))
+               "0ysynzzgzd9jdrh1321r4bgw8wd5zljrlyn5y1a31g39xacf02bv"))))
     (build-system meson-build-system)
     (inputs
      `(("libx11" ,libx11)
@@ -603,7 +604,7 @@ following the mouse.")
 (define-public pixman
   (package
     (name "pixman")
-    (version "0.38.4")
+    (version "0.40.0")
     (source
      (origin
        (method url-fetch)
@@ -612,13 +613,17 @@ following the mouse.")
          "https://www.cairographics.org/releases/pixman-"
          version ".tar.gz"))
        (sha256
-        (base32 "1ryxzdf048x7wsx4dlvrr1p00gzwfs7lybnhgc7ygbj0dvyxcrns"))
+        (base32 "1z13n96m7x91j25qq9wlkxsbq04wfwjhw66ir17frna06zn0s83d"))
        (patches
         (search-patches
          "pixman-CVE-2016-5296.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     `(#:configure-flags
+       (list
+        "--disable-static"
+        "--enable-timers"
+        "--enable-gnuplot")))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
@@ -629,12 +634,12 @@ following the mouse.")
 manipulation, providing features such as image compositing and trapezoid
 rasterisation.")
     (home-page "http://www.pixman.org/")
-    (license license:x11)))
+    (license license:expat)))
 
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.103")
+    (version "2.4.104")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -642,7 +647,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "08h2nnf4w96b4ql7485mvjgbbsb8rwc0qa93fdm1cq34pbyszq1z"))))
+                "1jqvx9c23hgwhq109zqj6vg3ng40pcvh3r1k2fn1a424qasxhsnn"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -1383,15 +1388,12 @@ the X.Org X Server version 1.7 and later (X11R7.5 or later).")
          (add-after 'split-outputs 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((gtk (assoc-ref outputs "gtk"))
-                    (python-version
-                     (@ (guix build python-build-system) python-version))
-                    (python (assoc-ref inputs "python"))
-                    (sitedir (string-append gtk "/lib/python"
-                                            (python-version python)
-                                            "/site-packages")))
+                    (site-packages (@ (guix build python-build-system)
+                                      site-packages))
+                    (site (site-packages inputs outputs)))
                (wrap-program (string-append gtk "/bin/redshift-gtk")
-                 `("PYTHONPATH" ":" prefix
-                   (,(string-append sitedir ":" (getenv "PYTHONPATH"))))
+                 `("GUIX_PYTHONPATH" ":" prefix
+                   (,(string-append site ":" (getenv "GUIX_PYTHONPATH"))))
                  `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
                #t))))))
     (outputs '("out" "gtk"))
@@ -2620,10 +2622,12 @@ tools to complement clipnotify.")
                       (gawk              (assoc-ref inputs "gawk"))
                       (util-linux        (assoc-ref inputs "util-linux"))
                       (xdotool           (assoc-ref inputs "xdotool"))
-                      (xsel              (assoc-ref inputs "xsel")))
+                      (xsel              (assoc-ref inputs "xsel"))
+                      (guile             (search-input-file inputs "bin/guile")))
                  (for-each
                   (lambda (prog)
                     (wrap-script (string-append out "/bin/" prog)
+                      #:guile guile
                       `("PATH" ":" prefix
                         ,(map (lambda (dir)
                                 (string-append dir "/bin"))
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 0d005628e8..814b567cce 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -254,7 +254,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (wrap-program (string-append out "/bin/catfish")
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                 `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")))
                  `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))
        #:tests? #f))
     (native-inputs
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index fbbcbd6e61..0bc744734e 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -50,14 +51,14 @@
 (define-public libogg
   (package
    (name "libogg")
-   (version "1.3.4")
+   (version "1.3.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://downloads.xiph.org/releases/ogg/libogg-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1zlk33vxvxr0l9lhkbhkdwvylw96d2n0fnd3d8dl031hph9bqqy1"))))
+              "01b7050bghdvbxvw0gzv588fn4a27zh42ljpwzm4vrf8dziipnf4"))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags '("--disable-static")))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index e2d5ca8176..f07f9b91b1 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
@@ -121,8 +121,7 @@ the entire document.")
 (define-public expat
   (package
     (name "expat")
-    (version "2.2.9")
-    (replacement expat-2.4.1)
+    (version "2.4.1")
     (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
               (origin
                 (method url-fetch)
@@ -134,10 +133,22 @@ the entire document.")
                             "/expat-" version ".tar.xz")))
                 (sha256
                  (base32
-                  "1960mmgbb4cm64n1p0nz3hrs1pw03hkrfcw8prmnn4622mdrd9hy")))))
+                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'move-static-library
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out    (assoc-ref outputs "out"))
+                            (static (assoc-ref outputs "static")))
+                        (mkdir-p (string-append static "/lib"))
+                        (link (string-append out "/lib/libexpat.a")
+                              (string-append static "/lib/libexpat.a"))
+                        (delete-file (string-append out "/lib/libexpat.a"))
+                        (substitute* (string-append out "/lib/libexpat.la")
+                          (("old_library=.*")
+                           "old_library=''"))))))))
+    (outputs '("out" "static"))
     (home-page "https://libexpat.github.io/")
     (synopsis "Stream-oriented XML parser library written in C")
     (description
@@ -146,24 +157,6 @@ stream-oriented parser in which an application registers handlers for
 things the parser might find in the XML document (like start tags).")
     (license license:expat)))
 
-;; Replacement package to fix CVE-2013-0340.
-(define expat-2.4.1
-  (package
-    (inherit expat)
-    (version "2.4.1")
-    (source (let ((dot->underscore (lambda (c) (if (char=? #\. c) #\_ c))))
-              (origin
-                (method url-fetch)
-                (uri (list (string-append "mirror://sourceforge/expat/expat/"
-                                          version "/expat-" version ".tar.xz")
-                           (string-append
-                            "https://github.com/libexpat/libexpat/releases/download/R_"
-                            (string-map dot->underscore version)
-                            "/expat-" version ".tar.xz")))
-                (sha256
-                 (base32
-                  "0spvyb9d3hijs4ys3x64cfmilsynl8kv6clfahv8d4lvp86js0yg")))))))
-
 (define-public libebml
   (package
     (name "libebml")
@@ -200,24 +193,30 @@ hierarchical form with variable field lengths.")
               (base32
                "07xynh8hcxb2yb1fs051xrgszjvj37wnxvxgsj10rzmqzy9y3zma"))))
     (build-system gnu-build-system)
-    (outputs '("out" "static"))
+    (outputs '("out" "static" "doc"))
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-after 'install 'move-static-libs
+                  (add-after 'install 'use-other-outputs
                     (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((src (string-append (assoc-ref outputs "out") "/lib"))
+                      (let ((src (assoc-ref outputs "out"))
+                            (doc (string-append (assoc-ref outputs "doc") "/share"))
                             (dst (string-append (assoc-ref outputs "static")
                                                 "/lib")))
+                        (mkdir-p doc)
                         (mkdir-p dst)
+                        (for-each (lambda (dir)
+                                    (rename-file (string-append src "/share/" dir)
+                                                 (string-append doc "/" dir)))
+                                  '("doc" "gtk-doc"))
                         (for-each (lambda (ar)
                                     (rename-file ar (string-append dst "/"
                                                                    (basename ar))))
-                                  (find-files src "\\.a$"))
+                                  (find-files (string-append src "/lib") "\\.a$"))
 
                         ;; Remove reference to the static library from the .la
                         ;; file such that Libtool does the right thing when both
                         ;; the shared and static variants are available.
-                        (substitute* (string-append src "/libxml2.la")
+                        (substitute* (string-append src "/lib/libxml2.la")
                           (("^old_library='libxml2.a'") "old_library=''"))
                         #t))))))
     (home-page "http://www.xmlsoft.org/")
@@ -374,8 +373,10 @@ It uses libxml2 to access the XML files.")
     (name "python-libxml2")
     (source (origin
               (inherit (package-source libxml2))
-              (patches (cons (search-patch "python-libxml2-utf8.patch")
-                             (origin-patches (package-source libxml2))))))
+              (patches
+                (append (search-patches "python-libxml2-python39-compat.patch"
+                                        "python-libxml2-utf8.patch")
+                        (origin-patches (package-source libxml2))))))
     (build-system python-build-system)
     (outputs '("out"))
     (arguments
@@ -2568,15 +2569,18 @@ The central program included in this package is @code{onsgmls}, which replaces
 (define-public python-elementpath
   (package
     (name "python-elementpath")
-    (version "1.4.0")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "elementpath" version))
        (sha256
         (base32
-         "15h7d41v48q31hzjay7qzixdv531hnga3h35hksk7x52pgqcrkz7"))))
+         "1kxx573ywqfh6j6aih2i6hhsya6kz79qq4bgz6yskwk6b18jyr8z"))))
     (build-system python-build-system)
+    ;; The test suite is not run, to avoid a dependency cycle with
+    ;; python-xmlschema.
+    (arguments `(#:tests? #f))
     (home-page
      "https://github.com/sissaschool/elementpath")
     (synopsis
@@ -2593,13 +2597,13 @@ because lxml.etree already has its own implementation of XPath 1.0.")
 (define-public python-lxml
   (package
     (name "python-lxml")
-    (version "4.4.2")
+    (version "4.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "lxml" version))
        (sha256
-        (base32 "01nvb5j8vs9nk4z5s3250b1m22b4d08kffa36if3g1mdygdrvxpg"))))
+        (base32 "0s14r1w2x9sdlcsw8mxiqgw4rz5zs5lpqpxrfyn4a1mkndqqbdrr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2622,7 +2626,7 @@ libxml2 and libxslt.")
 (define-public python-xmlschema
   (package
     (name "python-xmlschema")
-    (version "1.1.2")
+    (version "1.2.5")
     (source (origin
               ;; Unit tests are not distributed with the PyPI archive.
               (method git-fetch)
@@ -2632,21 +2636,20 @@ libxml2 and libxslt.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03bz5mp45y4shmlc1gxq1h69vjx60z1acg9cy4kq7fczgx8qg9jw"))))
+                "0rsa75x86gdjalvy4riq7613szb616hff80crx006chyppzdkxmq"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key tests? #:allow-other-keys)
              (if tests?
-                 (begin
-                   (setenv "PYTHONPATH"
-                           (string-append "./build/lib:"
-                                          (getenv "PYTHONPATH")))
-                   (invoke "python" "-m" "unittest" "-v"))
-                 (format #t "test suite not run~%"))
-             #t)))))
+                 ;; Disable test_export_remote__issue_187, which is known to
+                 ;; fail (see:
+                 ;; https://github.com/sissaschool/xmlschema/issues/206).
+                 (invoke "python" "-m" "unittest" "-v"
+                         "-k" "not test_export_remote__issue_187")
+                 (format #t "test suite not run~%")))))))
     (native-inputs
      `(("python-lxml" ,python-lxml)))   ;for tests
     (propagated-inputs
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 6a7849f8c6..9978480e4b 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Cyrill Schenkel <cyrill.schenkel@gmail.com>
-;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
@@ -29,6 +29,7 @@
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -225,14 +226,14 @@ which can be read by any architecture.")
 (define-public xorgproto
   (package
     (name "xorgproto")
-    (version "2019.2")
+    (version "2021.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/proto/"
                                   "xorgproto-" version ".tar.bz2"))
               (sha256
                (base32
-                "13kvir8dz9dvzhvyfndpff1z7k8h14s7kkl7mbl427andhax1v26"))))
+                "1gwz8lhvczjinndrq2jb0swfvhk7p65rprkwiqwlp132041mfl8g"))))
     (build-system gnu-build-system)
     (propagated-inputs
      ;; To get util-macros in (almost?) all package inputs.
@@ -1474,7 +1475,7 @@ treat it as part of their software base when porting.")
 (define-public libxres
   (package
     (name "libxres")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -1484,7 +1485,7 @@ treat it as part of their software base when porting.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1m0jr0lbz9ixpp9ihk68349q0i7ry2379lnfzdy4mrl86ijc2xgz"))))
+            "049b7dk6hx47161hg47ryjrm6pwsp27r5pby05b0wqb1pcggprmn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -1906,7 +1907,7 @@ management to participate in an X11R6 session.")
 (define-public util-macros
   (package
     (name "util-macros")
-    (version "1.19.2")
+    (version "1.19.3")
     (source
       (origin
         (method url-fetch)
@@ -1916,7 +1917,7 @@ management to participate in an X11R6 session.")
                ".tar.bz2"))
         (sha256
           (base32
-            "04p7ydqxgq37jklnfj18b70zsifiz4h50wvrk94i2112mmv37r6p"))))
+            "0w8ryfqylprz37zj9grl4jzdsqq67ibfwq5raj7vm1i7kmp2x08g"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
@@ -2149,8 +2150,15 @@ emulate a TI-30 or an HP-10C.")
                "https://xcb.freedesktop.org/dist/xcb-proto-"
                version ".tar.xz"))
         (sha256
-          (base32
-           "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))))
+         (base32
+          "01d62r286yfc3rpz714nqdgkl0wk9j0wqkd4ylas1d7r4vmkqshq"))
+        (modules '((guix build utils)))
+        (snippet
+         '(begin
+            ;; fractions.gcd has been deprecated since python-3.5.
+            (substitute* "xcbgen/align.py"
+              (("from fractions import gcd") "from math import gcd"))
+            #t))))
     (build-system gnu-build-system)
     (native-inputs
       `(("pkg-config" ,pkg-config) ("python" ,python-minimal-wrapper)))
@@ -3912,7 +3920,7 @@ alternative implementations like XRandR or TwinView.")
 (define xkbcomp-intermediate            ;used as input for xkeyboard-config
   (package
     (name "xkbcomp-intermediate")
-    (version "1.4.4")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
@@ -3920,7 +3928,7 @@ alternative implementations like XRandR or TwinView.")
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0zpjkbap9160pdd6jpgb5f0yg5281w0rkkx1l0i7g887lq1ydk2r"))))
+         "0pmhshqinwqh5rip670l3szjpywky67hv232ql6gvdj489n0hlb8"))))
     (build-system gnu-build-system)
     (inputs
      `(("xorgproto" ,xorgproto)
@@ -4049,7 +4057,7 @@ extension to the X11 protocol.  It includes:
 (define-public xkeyboard-config
   (package
     (name "xkeyboard-config")
-    (version "2.31")
+    (version "2.33")
     (source
       (origin
         (method url-fetch)
@@ -4059,7 +4067,7 @@ extension to the X11 protocol.  It includes:
               ".tar.bz2"))
         (sha256
           (base32
-            "18xddaxh83zm698syh50w983jg6b7b8zgv0dfaf7ha485hgihi6s"))))
+            "1g6kn7l0mixw50kgn7d97gwv1990c5rczr2x776q3xywss8dfzv5"))))
     (build-system gnu-build-system)
     (inputs
       `(("libx11" ,libx11)
@@ -4763,9 +4771,13 @@ cannot be adequately worked around on the client side of the wire.")
           (base32
             "0azqxllcsfxc3ilhz6kwc6x7m8wc477p59ir9p0yrsldx766zbar"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 40% of the total
     (arguments
      `(#:configure-flags
        (list "--disable-static"
+             (string-append "--mandir="
+                            (assoc-ref %outputs "doc")
+                            "/share/man")
              ;; Disable zero malloc check that fails when cross-compiling.
              ,@(if (%current-target-system)
                    '("--disable-malloc0returnsnull")
@@ -5089,7 +5101,7 @@ an X Window System display.")
 (define-public libxfixes
   (package
     (name "libxfixes")
-    (version "5.0.3")
+    (version "6.0.0")
     (source
       (origin
         (method url-fetch)
@@ -5099,7 +5111,7 @@ an X Window System display.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1miana3y4hwdqdparsccmygqr3ic3hs5jrqfzp70hvi2zwxd676y"))))
+            "0k2v4i4r24y3kdr5ici1qqhp69djnja919xfqp54c2rylm6s5hd7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -5178,8 +5190,12 @@ new API's in libXft, or the legacy API's in libX11.")
           (base32
             "0q8hz3slga3w3ch8wp0k7ay9ilhz315qnab0w1y2x9w3cf7hv8rn"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))             ;man pages represent 28% of the total
     (arguments
-     '(#:configure-flags '("--disable-static")))
+     '(#:configure-flags (list "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man"))))
     (propagated-inputs
       `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)
@@ -5300,6 +5316,7 @@ protocol.")
           (base32
            "0d2chjgyn5lr9sfhacfvqgnj9l9faz11vn322a06jd6lk3dxcpm5"))))
     (build-system gnu-build-system)
+    (outputs '("out" "doc"))                      ;5.5 MiB of man pages
     (propagated-inputs
       `(("libpthread-stubs" ,libpthread-stubs)
         ("libxau" ,libxau)
@@ -5311,8 +5328,11 @@ protocol.")
       `(("pkg-config" ,pkg-config)
         ("python" ,python-minimal-wrapper)))
     (arguments
-     `(#:configure-flags '("--enable-xkb"
-                           "--disable-static")))
+     `(#:configure-flags (list "--enable-xkb"
+                               "--disable-static"
+                               (string-append "--mandir="
+                                              (assoc-ref %outputs "doc")
+                                              "/share/man"))))
     (home-page "https://xcb.freedesktop.org/")
     (synopsis "The X C Binding (XCB) library")
     (description
@@ -5414,13 +5434,11 @@ over Xlib, including:
              ;; The default is to use "uname -srm", which captures the kernel
              ;; version and makes builds non-reproducible.
              "--with-os-name=GNU"
-
-             "--with-os-vendor=GuixSD"    ;not strictly needed, but looks nice
-
+             "--with-os-vendor=Guix"    ; not strictly needed, but looks nice
 
              ;; For the log file, etc.
              "--localstatedir=/var"
-             ;; For sddm
+             ;; For sddm.
              "--enable-kdrive"
              "--enable-xephyr")
 
@@ -5513,18 +5531,15 @@ draggable titlebars and borders.")
 (define-public libx11
   (package
     (name "libx11")
-    (version "1.6.10")
+    (version "1.7.2")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libX11-"
-               version
-               ".tar.bz2"))
+        (uri (string-append "mirror://xorg/individual/lib/libX11-"
+                            version ".tar.bz2"))
         (sha256
           (base32
-            "09k2pqmqbn2m1bpgl7jfxyqxaaxsnzbnp2bp8ycmqldqi5ln4j5g"))))
-    (replacement libx11/fixed)
+            "0v7aj8q3rlchdyfwdna7n7vgpyzyir391dlv5rwy9fxagbikbyhw"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ;8 MiB of man pages + XML
@@ -5552,18 +5567,6 @@ draggable titlebars and borders.")
     (description "Xorg Core X11 protocol client library.")
     (license license:x11)))
 
-(define-public libx11/fixed
-  (package
-    (inherit libx11)
-    (version "1.7.1A")
-    (source
-      (origin
-        (method url-fetch)
-        (uri "mirror://xorg/individual/lib/libX11-1.7.1.tar.bz2")
-        (sha256
-          (base32
-            "0isxad59hvdwggbxqqjjjg3zmih9xiq4d9mdsnqbyb2nmbg46kp6"))))))
-
 ;; packages of height 5 in the propagated-inputs tree
 
 (define-public libxcursor
@@ -5607,7 +5610,7 @@ draggable titlebars and borders.")
 (define-public libxt
   (package
     (name "libxt")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method url-fetch)
@@ -5617,7 +5620,7 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-           "0cbqlyssr8aia88c8i7z59z9d0kp3p2hp6683xhz9ndyv8qza7dk"))
+           "0q1x7842r8rcn2m0q4q9f69h4qa097fyizs8brzx5ns62s7w1737"))
         (patches (search-patches "libxt-guix-search-paths.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
@@ -5649,7 +5652,7 @@ draggable titlebars and borders.")
 (define-public libxaw
   (package
     (name "libxaw")
-    (version "1.0.13")
+    (version "1.0.14")
     (source
       (origin
         (method url-fetch)
@@ -5659,7 +5662,7 @@ draggable titlebars and borders.")
                ".tar.bz2"))
         (sha256
           (base32
-            "1kdhxplwrn43d9jp3v54llp05kwx210lrsdvqb6944jp29rhdy4f"))))
+            "13kg59r3086383g1dyhnwxanhp2frssh9062mrgn34nzlf7gkbkn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))