summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-01-17 10:07:35 -0500
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-01-17 11:47:09 -0500
commit276f40fdc349d2ad62582b23ea55e061b689cfc0 (patch)
tree8052d91aee78cf0d4317b41ec52134fde48fa5fb
parentb2f6b6f6b9df6bcc24794238e7e97357470af95d (diff)
parent6ba510d76d6847065be725e958718002f3b13c7a (diff)
downloadguix-276f40fdc349d2ad62582b23ea55e061b689cfc0.tar.gz
Merge branch 'version-1.4.0'
With resolved conflicts in:
	gnu/packages/gnome.scm
	gnu/packages/openstack.scm
	gnu/packages/python-xyz.scm
-rw-r--r--gnu/local.mk7
-rw-r--r--gnu/packages/admin.scm57
-rw-r--r--gnu/packages/autotools.scm69
-rw-r--r--gnu/packages/aux-files/python/sanity-check.py2
-rw-r--r--gnu/packages/aux-files/python/sitecustomize.py22
-rw-r--r--gnu/packages/avahi.scm63
-rw-r--r--gnu/packages/base.scm33
-rw-r--r--gnu/packages/bioinformatics.scm178
-rw-r--r--gnu/packages/build-tools.scm48
-rw-r--r--gnu/packages/check.scm103
-rw-r--r--gnu/packages/cmake.scm4
-rw-r--r--gnu/packages/compression.scm26
-rw-r--r--gnu/packages/crates-graphics.scm30
-rw-r--r--gnu/packages/crates-io.scm202
-rw-r--r--gnu/packages/cups.scm9
-rw-r--r--gnu/packages/emacs-xyz.scm2
-rw-r--r--gnu/packages/emacs.scm11
-rw-r--r--gnu/packages/freedesktop.scm13
-rw-r--r--gnu/packages/games.scm1
-rw-r--r--gnu/packages/geo.scm3
-rw-r--r--gnu/packages/gettext.scm7
-rw-r--r--gnu/packages/gl.scm12
-rw-r--r--gnu/packages/glib.scm61
-rw-r--r--gnu/packages/gnome.scm169
-rw-r--r--gnu/packages/gnupg.scm45
-rw-r--r--gnu/packages/gnuzilla.scm10
-rw-r--r--gnu/packages/golang.scm35
-rw-r--r--gnu/packages/graph.scm135
-rw-r--r--gnu/packages/gtk.scm36
-rw-r--r--gnu/packages/ipfs.scm11
-rw-r--r--gnu/packages/kerberos.scm55
-rw-r--r--gnu/packages/linux.scm106
-rw-r--r--gnu/packages/llvm.scm5
-rw-r--r--gnu/packages/machine-learning.scm9
-rw-r--r--gnu/packages/man.scm4
-rw-r--r--gnu/packages/music.scm27
-rw-r--r--gnu/packages/networking.scm14
-rw-r--r--gnu/packages/nss.scm4
-rw-r--r--gnu/packages/openstack.scm4
-rw-r--r--gnu/packages/package-management.scm3
-rw-r--r--gnu/packages/patches/binutils-CVE-2021-45078.patch257
-rw-r--r--gnu/packages/patches/gtk-introspection-test.patch22
-rw-r--r--gnu/packages/patches/libtool-skip-tests2.patch8
-rw-r--r--gnu/packages/patches/shadow-hurd-pctrl.patch16
-rw-r--r--gnu/packages/pciutils.scm7
-rw-r--r--gnu/packages/pdf.scm3
-rw-r--r--gnu/packages/phabricator.scm8
-rw-r--r--gnu/packages/photo.scm1
-rw-r--r--gnu/packages/python-build.scm90
-rw-r--r--gnu/packages/python-compression.scm33
-rw-r--r--gnu/packages/python-science.scm29
-rw-r--r--gnu/packages/python-web.scm40
-rw-r--r--gnu/packages/python-xyz.scm742
-rw-r--r--gnu/packages/python.scm4
-rw-r--r--gnu/packages/rust.scm48
-rw-r--r--gnu/packages/samba.scm141
-rw-r--r--gnu/packages/shells.scm1
-rw-r--r--gnu/packages/syncthing.scm9
-rw-r--r--gnu/packages/syndication.scm2
-rw-r--r--gnu/packages/tbb.scm10
-rw-r--r--gnu/packages/tex.scm299
-rw-r--r--gnu/packages/version-control.scm9
-rw-r--r--gnu/packages/video.scm35
-rw-r--r--gnu/packages/virtualization.scm2
-rw-r--r--gnu/packages/webkit.scm15
-rw-r--r--gnu/packages/xdisorg.scm2
-rw-r--r--gnu/packages/xorg.scm22
-rw-r--r--guix/build/gnu-build-system.scm2
-rw-r--r--guix/build/utils.scm8
-rw-r--r--guix/lint.scm4
-rw-r--r--tests/build-utils.scm57
71 files changed, 1940 insertions, 1621 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 8163176950..7e044d4a2b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -910,6 +910,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/binutils-mingw-w64-timestamp.patch	\
   %D%/packages/patches/binutils-mingw-w64-deterministic.patch	\
+  %D%/packages/patches/binutils-CVE-2021-45078.patch		\
   %D%/packages/patches/bpftrace-disable-bfd-disasm.patch	\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/bubblewrap-fix-locale-in-tests.patch	\
@@ -1240,8 +1241,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/gtk2-theme-paths.patch			\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
-  %D%/packages/patches/gtk-doc-respect-xml-catalog.patch	 \
-  %D%/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch    \
+  %D%/packages/patches/gtk-doc-respect-xml-catalog.patch	\
+  %D%/packages/patches/gtk-introspection-test.patch		\
+  %D%/packages/patches/gtk4-respect-GUIX_GTK4_PATH.patch    	\
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
   %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
   %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
@@ -1804,7 +1806,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/serf-python3.patch			\
   %D%/packages/patches/shakespeare-spl-fix-grammar.patch		\
   %D%/packages/patches/sharutils-CVE-2018-1000097.patch		\
-  %D%/packages/patches/shadow-hurd-pctrl.patch			\
   %D%/packages/patches/shishi-fix-libgcrypt-detection.patch	\
   %D%/packages/patches/slim-session.patch			\
   %D%/packages/patches/slim-config.patch			\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index c2e656db1a..197ccef895 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -805,16 +805,15 @@ hostname.")
 (define-public shadow
   (package
     (name "shadow")
-    (version "4.8.1")
+    (version "4.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/shadow-maint/shadow/releases/"
-                    "download/" version "/shadow-" version ".tar.xz"))
-              (patches (search-patches "shadow-hurd-pctrl.patch"))
+                    "download/v" version "/shadow-" version ".tar.xz"))
               (sha256
                (base32
-                "0qmfq50sdhz6xilgxvinblll8j2iqfl7hwk45bq744y4plq4dbd3"))))
+                "0i4iijbshnwnsrskxzrh18xgmzff0hdpsnnkmyc2gdn1x4n1zv7y"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Assume System V `setpgrp (void)', which is the default on GNU
@@ -825,9 +824,16 @@ hostname.")
              '("--with-libpam"))
           "shadow_cv_logdir=/var/log"
           "ac_cv_func_setpgrp_void=yes")
-
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-linking-to-pam
+           (lambda _
+             ;; There's a build system problem in 4.9 that causes link
+             ;; failures with the pam libraries (see:
+             ;; https://github.com/shadow-maint/shadow/issues/407).
+             (substitute* "libsubid/Makefile.in"
+               (("\\$\\(LIBTCB\\)" all)
+                (string-append all " $(LIBPAM)")))))
          ,@(if (%current-target-system)
                '((add-before 'configure 'set-runtime-shell
                    (lambda* (#:key inputs #:allow-other-keys)
@@ -848,8 +854,7 @@ hostname.")
                                          "libc"))))
                (substitute* "lib/nscd.c"
                  (("/usr/sbin/nscd")
-                  (string-append libc "/sbin/nscd")))
-               #t)))
+                  (string-append libc "/sbin/nscd"))))))
          (add-after 'install 'remove-groups
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Remove `groups', which is already provided by Coreutils.
@@ -857,9 +862,7 @@ hostname.")
                     (bin (string-append out "/bin"))
                     (man (string-append out "/share/man")))
                (delete-file (string-append bin "/groups"))
-               (for-each delete-file (find-files man "^groups\\."))
-               #t))))))
-
+               (for-each delete-file (find-files man "^groups\\."))))))))
     (inputs
      `(,@(if (hurd-target?)
            '()
@@ -1206,8 +1209,7 @@ connection alive.")
                  (("^RELEASETYPE=.*")
                   (format #f "RELEASETYPE=~a\n" ,bind-release-type))
                  (("^RELEASEVER=.*")
-                  (format #f "RELEASEVER=~a\n" ,bind-release-version)))
-               #t))
+                  (format #f "RELEASEVER=~a\n" ,bind-release-version)))))
            ,@(if (%current-target-system)
                  '((add-before 'configure 'fix-bind-cross-compilation
                      (lambda _
@@ -1216,8 +1218,7 @@ connection alive.")
                           "--host=$host_alias"))
                        ;; BIND needs a native compiler because the DHCP
                        ;; build system uses the built 'gen' executable.
-                       (setenv "BUILD_CC" "gcc")
-                       #t)))
+                       (setenv "BUILD_CC" "gcc"))))
                  '())
            (add-after 'configure 'post-configure
              (lambda* (#:key outputs #:allow-other-keys)
@@ -1255,11 +1256,7 @@ connection alive.")
                            "--owner=root:0"
                            "--group=root:0")))))
            (add-after 'install 'post-install
-             ;; TODO(core-updates): native-inputs isn't required anymore.
-             (lambda* (#:key ,@(if (%current-target-system)
-                                   '(native-inputs)
-                                   '())
-                       inputs outputs #:allow-other-keys)
+             (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Install the dhclient script for GNU/Linux and make sure
                ;; if finds all the programs it needs.
                (let* ((out       (assoc-ref outputs "out"))
@@ -1282,31 +1279,13 @@ connection alive.")
                      ,(map (lambda (dir)
                              (string-append dir "/bin:"
                                             dir "/sbin"))
-                           (list inetutils net-tools coreutils sed))))
-                 ;; TODO(core-updates): should not be required anymore,
-                 ;; once <https://issues.guix.gnu.org/49290> has been merged.
-                 ,@(if (%current-target-system)
-                       '((for-each
-                          (lambda (file)
-                            (substitute* file
-                              (((assoc-ref native-inputs "bash"))
-                               (assoc-ref inputs "bash"))))
-                          (list (string-append libexec
-                                               "/dhclient-script")
-                                (string-append libexec
-                                               "/.dhclient-script-real"))))
-                       '())
-                 #t))))))
+                           (list inetutils net-tools coreutils sed))))))))))
 
       (native-inputs
        (list perl file))
 
       (inputs `(("inetutils" ,inetutils)
-                ;; TODO(core-updates): simply make this unconditional
-                ,@(if (%current-target-system)
-                      ;; for wrap-program
-                      `(("bash" ,(canonical-package bash-minimal)))
-                      '())
+                ("bash" ,(canonical-package bash-minimal)) ;for wrap-program
                 ,@(if (hurd-target?) '()
                       `(("net-tools" ,net-tools)
                         ("iproute" ,iproute)))
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index a8bf36a966..1eea731233 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -68,29 +68,38 @@
      `(;; XXX: testsuite: 209 and 279 failed.  The latter is an impurity.  It
        ;; should use our own "cpp" instead of "/lib/cpp".
        #:tests? #f
-       ,@(if (%current-target-system)
-             `(#:phases
-               (modify-phases %standard-phases
-                 (add-after 'install 'patch-non-shebang-references
-                   (lambda* (#:key build inputs outputs #:allow-other-keys)
-                     ;; `patch-shebangs' patches shebangs only, and the Perl
-                     ;; scripts use a re-exec feature that references the
-                     ;; build hosts' perl.  Also, BASH and M4 store references
-                     ;; hide in the scripts.
-                     (let ((bash (assoc-ref inputs "bash"))
-                           (m4 (assoc-ref inputs "m4"))
-                           (perl (assoc-ref inputs "perl"))
-                           (out  (assoc-ref outputs "out"))
-                           (store-directory (%store-directory)))
-                      (substitute* (find-files (string-append out "/bin"))
-                        (((string-append store-directory "/[^/]*-bash-[^/]*"))
-                         bash)
-                        (((string-append store-directory "/[^/]*-m4-[^/]*"))
-                         m4)
-                        (((string-append store-directory "/[^/]*-perl-[^/]*"))
-                         perl))
-                      #t)))))
-             '())))
+       #:phases
+       (modify-phases %standard-phases
+         ,@(if (%current-target-system)
+               '((add-after 'install 'patch-non-shebang-references
+                    (lambda* (#:key build inputs outputs #:allow-other-keys)
+                      ;; `patch-shebangs' patches shebangs only, and the Perl
+                      ;; scripts use a re-exec feature that references the
+                      ;; build hosts' perl.  Also, BASH and M4 store references
+                      ;; hide in the scripts.
+                      (let ((bash (assoc-ref inputs "bash"))
+                            (m4 (assoc-ref inputs "m4"))
+                            (perl (assoc-ref inputs "perl"))
+                            (out  (assoc-ref outputs "out"))
+                            (store-directory (%store-directory)))
+                        (substitute* (find-files (string-append out "/bin"))
+                          (((string-append store-directory "/[^/]*-bash-[^/]*"))
+                           bash)
+                          (((string-append store-directory "/[^/]*-m4-[^/]*"))
+                           m4)
+                          (((string-append store-directory "/[^/]*-perl-[^/]*"))
+                           perl))))))
+               '())
+         (add-after 'install 'unpatch-shebangs
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Scripts that "autoconf -i" installs (config.guess,
+             ;; config.sub, and install-sh) must use a regular shebang
+             ;; rather than a reference to the store.  Restore it.
+             (let* ((out (assoc-ref outputs "out"))
+                    (build-aux (string-append
+                                out "/share/autoconf/build-aux")))
+               (substitute* (find-files build-aux)
+                 (("^#!.*/bin/sh") "#!/bin/sh"))))))))
     (home-page "https://www.gnu.org/software/autoconf/")
     (synopsis "Create source code configuration scripts")
     (description
@@ -130,19 +139,7 @@ know anything about Autoconf or M4.")
                                                (executable-file? file)))
                                  (find-files "bin"
                                              (lambda (file stat)
-                                               (executable-file? file)))))
-               #t))
-           (add-after 'install 'unpatch-shebangs
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Scripts that "autoconf -i" installs (config.guess,
-               ;; config.sub, and install-sh) must use a regular shebang
-               ;; rather than a reference to the store.  Restore it.
-               ;; TODO: Move this phase to 'autoconf-2.69'.
-               (let* ((out (assoc-ref outputs "out"))
-                      (build-aux (string-append
-                                  out "/share/autoconf/build-aux")))
-                 (substitute* (find-files build-aux)
-                   (("^#!.*/bin/sh") "#!/bin/sh")))))))))))
+                                               (executable-file? file)))))))))))))
 
 (define-public autoconf autoconf-2.69)
 
diff --git a/gnu/packages/aux-files/python/sanity-check.py b/gnu/packages/aux-files/python/sanity-check.py
index a84f8f03c0..182133bb3d 100644
--- a/gnu/packages/aux-files/python/sanity-check.py
+++ b/gnu/packages/aux-files/python/sanity-check.py
@@ -44,7 +44,7 @@ for dist in ws:
         pkg_resources.require(req)
         print('OK')
     except Exception as e:
-        print('ERROR:', req, e)
+        print('ERROR:', req, repr(e))
         ret = 1
         continue
 
diff --git a/gnu/packages/aux-files/python/sitecustomize.py b/gnu/packages/aux-files/python/sitecustomize.py
index 71e328b9ac..e2348e0356 100644
--- a/gnu/packages/aux-files/python/sitecustomize.py
+++ b/gnu/packages/aux-files/python/sitecustomize.py
@@ -18,6 +18,7 @@
 # along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 import os
+import site
 import sys
 
 # Commentary:
@@ -47,9 +48,18 @@ 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.  This way, the user can override the libraries provided
-# by Python itself.
-sys_path_absolute = [os.path.realpath(p) for p in sys.path]
-index = sys_path_absolute.index(python_site)
-sys.path[index:index] = matching_sites
+if matching_sites:
+    # Deduplicate the entries, append them to sys.path, and handle any
+    # .pth files they contain.
+    for s in matching_sites:
+        site.addsitedir(s)
+
+    # Move the entries that were appended to sys.path in front of
+    # Python's own site-packages directory.  This enables Guix
+    # packages to override Python's bundled packages, such as 'pip'.
+    python_site_index = sys.path.index(python_site)
+    new_site_start_index = sys.path.index(matching_sites[0])
+    if python_site_index < new_site_start_index:
+        sys.path = (sys.path[:python_site_index]
+                    + sys.path[new_site_start_index:]
+                    + sys.path[python_site_index:new_site_start_index])
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
index 7dcaa17a76..65d3ede131 100644
--- a/gnu/packages/avahi.scm
+++ b/gnu/packages/avahi.scm
@@ -43,22 +43,21 @@
     (version "0.8")
     (home-page "https://avahi.org")
     (source (origin
-             (method url-fetch)
-             (uri (string-append home-page "/download/avahi-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "1npdixwxxn3s9q1f365x9n9rc5xgfz39hxf23faqvlrklgbhj0q6"))
-             (patches (search-patches "avahi-localstatedir.patch"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 ;; Fix version constraint in the avahi-libevent pkg-config file.
-                 ;; This can be removed for Avahi versions > 0.8.
-                 (substitute* "avahi-libevent.pc.in"
-                   (("libevent-2\\.1\\.5")
-                    "libevent >= 2.1.5"))
-                 #t))))
+              (method url-fetch)
+              (uri (string-append home-page "/download/avahi-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1npdixwxxn3s9q1f365x9n9rc5xgfz39hxf23faqvlrklgbhj0q6"))
+              (patches (search-patches "avahi-localstatedir.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Fix version constraint in the avahi-libevent pkg-config file.
+                  ;; This can be removed for Avahi versions > 0.8.
+                  (substitute* "avahi-libevent.pc.in"
+                    (("libevent-2\\.1\\.5")
+                     "libevent >= 2.1.5"))))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-distro=none"
@@ -75,26 +74,20 @@
                            ,@(if (%current-target-system)
                                  '("ac_cv_prog_have_pkg_config=yes")
                                  '()))
-       ;; TODO(core-updates): Make this unconditional.
-       ,@(if (%current-target-system)
-             `(#:modules ((srfi srfi-26)
-                          (guix build utils)
-                          (guix build gnu-build-system))
-               #:phases
-               ,#~(modify-phases %standard-phases
-                    (add-after 'patch-shebangs 'patch-more-shebangs
-                      (lambda* (#:key inputs #:allow-other-keys)
-                        (define path
-                          `(,(dirname (search-input-file inputs "bin/sh"))))
-                        (for-each
-                         (cut patch-shebang <> path)
-                         (find-files (string-append #$output "/etc/avahi")))))))
-             '())))
+       #:modules ((srfi srfi-26)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:phases
+       ,#~(modify-phases %standard-phases
+            (add-after 'patch-shebangs 'patch-more-shebangs
+              (lambda* (#:key inputs #:allow-other-keys)
+                (define path
+                  `(,(dirname (search-input-file inputs "bin/sh"))))
+                (for-each
+                 (cut patch-shebang <> path)
+                 (find-files (string-append #$output "/etc/avahi"))))))))
     (inputs
-     ;; TODO(core-updates): Make this input unconditional.
-     `(,@(if (%current-target-system)
-             `(("bash-minimal" ,bash-minimal))
-             '())
+     `(("bash-minimal" ,bash-minimal)
        ("dbus" ,dbus)
        ("expat" ,expat)
        ("gdbm" ,gdbm)
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 8e21176081..0e49b6044c 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -521,10 +521,12 @@ change.  GNU make offers many powerful extensions over the standard utility.")
       (sha256
        (base32 "1m3b2rdfv1dmdpd0bzg1hy7i8a2qng53szc6livyi3nh6101mz37"))
       (patches (search-patches "binutils-loongson-workaround.patch"
-                               "binutils-2.37-file-descriptor-leak.patch"))))
+                               "binutils-2.37-file-descriptor-leak.patch"
+                               "binutils-CVE-2021-45078.patch"))))
    (build-system gnu-build-system)
    (arguments
-    `(#:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
+    `(#:out-of-source? #t   ;recommended in the README
+      #:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
                           ;; on GCC when bootstrapping.
                           "LDFLAGS=-static-libgcc"
 
@@ -543,7 +545,13 @@ 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")))
+                          "--enable-deterministic-archives"
+
+                          "--enable-64-bit-bfd"
+                          "--enable-compressed-debug-sections=all"
+                          "--enable-lto"
+                          "--enable-separate-code"
+                          "--enable-threads")))
 
    (synopsis "Binary utilities: bfd gas gprof ld")
    (description
@@ -556,23 +564,6 @@ included.")
    (license gpl3+)
    (home-page "https://www.gnu.org/software/binutils/")))
 
-;;; TODO: Merge into binutils on the next world rebuild.
-(define-public binutils-next
-  (package/inherit binutils
-    (name "binutils-next")
-    (version "2.37")
-    (arguments
-     (substitute-keyword-arguments (package-arguments binutils)
-       ((#:out-of-source? _ #f)         ;recommended in the README
-        #t)
-       ((#:configure-flags flags)
-        `(cons* "--enable-64-bit-bfd"
-                "--enable-compressed-debug-sections=all"
-                "--enable-lto"
-                "--enable-separate-code"
-                "--enable-threads"
-                ,flags))))))
-
 ;; 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.
@@ -594,7 +585,7 @@ included.")
    (properties '())))
 
 (define-public binutils-gold
-  (package/inherit binutils-next
+  (package/inherit binutils
     (name "binutils-gold")
     (arguments
      (substitute-keyword-arguments (package-arguments binutils)
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 9986a4a563..6caeec80f7 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -373,7 +373,7 @@ single executable called @code{bam}.")
 (define-public bcftools
   (package
     (name "bcftools")
-    (version "1.12")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/samtools/bcftools/"
@@ -381,12 +381,11 @@ single executable called @code{bam}.")
                                   version "/bcftools-" version ".tar.bz2"))
               (sha256
                (base32
-                "1x94l1hy2pi3lbz0sxlbw0g6q5z5apcrhrlcwda94ns9n4r6a3ks"))
+                "1jqrma16fx8kpvb3c0462dg0asvmiv5yi8myqmc5ddgwi6p8ivxp"))
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Delete bundled htslib.
-                          (delete-file-recursively "htslib-1.12")
-                          #t))))
+                          (delete-file-recursively "htslib-1.14")))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -397,8 +396,7 @@ single executable called @code{bam}.")
          (add-before 'check 'patch-tests
            (lambda _
              (substitute* "test/test.pl"
-               (("/bin/bash") (which "bash")))
-             #t)))))
+               (("/bin/bash") (which "bash"))))))))
     (native-inputs
      (list htslib perl))
     (inputs
@@ -412,9 +410,25 @@ transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
     ;; The sources are dual MIT/GPL, but becomes GPL-only when USE_GPL=1.
     (license (list license:gpl3+ license:expat))))
 
+(define-public bcftools-1.12
+  (package/inherit bcftools
+    (version "1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/samtools/bcftools/"
+                                  "releases/download/"
+                                  version "/bcftools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1x94l1hy2pi3lbz0sxlbw0g6q5z5apcrhrlcwda94ns9n4r6a3ks"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          ;; Delete bundled htslib.
+                          (delete-file-recursively "htslib-1.12")))))
+    (native-inputs (list htslib-1.12 perl))))
+
 (define-public bcftools-1.10
-  (package (inherit bcftools)
-    (name "bcftools")
+  (package/inherit bcftools
     (version "1.10")
     (source (origin
               (method url-fetch)
@@ -427,11 +441,8 @@ transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Delete bundled htslib.
-                          (delete-file-recursively "htslib-1.10")
-                          #t))))
-    (build-system gnu-build-system)
-    (native-inputs
-     (list htslib-1.10 perl))))
+                          (delete-file-recursively "htslib-1.10")))))
+    (native-inputs (list htslib-1.10 perl))))
 
 (define-public bedops
   (package
@@ -1064,13 +1075,7 @@ Python.")
                (("^(.+)def test_from_hdf5_issue_731" m indent)
                 (string-append indent
                                "@npt.dec.skipif(True, msg='Guix')\n"
-                               m)))))
-
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (file) (chmod file #o644))
-                         (find-files out "\\.gz"))))))))
+                               m))))))))
     (propagated-inputs
      (list python-anndata
            python-numpy
@@ -2316,7 +2321,7 @@ has several key features:
 (define-public python-pysam
   (package
     (name "python-pysam")
-    (version "0.16.0.1")
+    (version "0.18.0")
     (source (origin
               (method git-fetch)
               ;; Test data is missing on PyPi.
@@ -2326,11 +2331,10 @@ has several key features:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "168bwwm8c2k22m7paip8q0yajyl7xdxgnik0bgjl7rhqg0majz0f"))
+                "042ca27r6634xg2ixgvq1079cp714wmm6ml7bwc1snn0wxxzywfg"))
               (modules '((guix build utils)))
               (snippet '(begin
-                          ;; Drop bundled htslib. TODO: Also remove samtools
-                          ;; and bcftools.
+                          ;; FIXME: Unbundle samtools and bcftools.
                           (delete-file-recursively "htslib")))))
     (build-system python-build-system)
     (arguments
@@ -2347,35 +2351,24 @@ has several key features:
              (setenv "CFLAGS" "-D_CURSES_LIB=1")))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
-             ;; FIXME: These tests fail with "AttributeError: 'array.array'
-             ;; object has no attribute 'tostring'".
-             (delete-file "tests/AlignmentFile_test.py")
              (when tests?
                ;; Step out of source dir so python does not import from CWD.
                (with-directory-excursion "tests"
                  (setenv "HOME" "/tmp")
                  (invoke "make" "-C" "pysam_data")
                  (invoke "make" "-C" "cbcf_data")
-                 (invoke "pytest" "-k"
-                         (string-append
-                           ;; requires network access.
-                           "not FileHTTP"
-                           ;; bug in test suite with samtools update
-                           ;; https://github.com/pysam-developers/pysam/issues/961
-                           " and not TestHeaderBAM"
-                           " and not TestHeaderCRAM"
-                           " and not test_text_processing")))))))))
+                 ;; The FileHTTP test requires network access.
+                 (invoke "pytest" "-k" "not FileHTTP"))))))))
     (propagated-inputs
-     (list htslib-1.10))    ; Included from installed header files.
+     (list htslib))                    ; Included from installed header files.
     (inputs
      (list ncurses curl zlib))
     (native-inputs
      (list python-cython
            python-pytest
            ;; Dependencies below are are for tests only.
-           samtools-1.10
-           bcftools-1.10
-           python-nose))
+           samtools
+           bcftools))
     (home-page "https://github.com/pysam-developers/pysam")
     (synopsis "Python bindings to the SAMtools C API")
     (description
@@ -2584,13 +2577,6 @@ databases.")
      `(#:tests? #false
        #:phases
        (modify-phases %standard-phases
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$")))))
          (add-after 'unpack 'use-python3-for-cython
            (lambda _
              (substitute* "setup.py"
@@ -4786,7 +4772,7 @@ performance.")
 (define-public htslib
   (package
     (name "htslib")
-    (version "1.12")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4794,7 +4780,7 @@ performance.")
                     version "/htslib-" version ".tar.bz2"))
               (sha256
                (base32
-                "1jplnvizgr0fyyvvmkfmnsywrrpqhid3760vw15bllz98qdi9012"))))
+                "0pwk8yhhvb85mi1d2qhwsb4samc3rmbcrq7b1s0jz0glaa7in8pd"))))
     (build-system gnu-build-system)
     ;; Let htslib translate "gs://" and "s3://" to regular https links with
     ;; "--enable-gcs" and "--enable-s3". For these options to work, we also
@@ -4820,9 +4806,20 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
     ;; the rest is released under the Expat license
     (license (list license:expat license:bsd-3))))
 
+(define-public htslib-1.12
+  (package/inherit htslib
+    (version "1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1jplnvizgr0fyyvvmkfmnsywrrpqhid3760vw15bllz98qdi9012"))))))
+
 (define-public htslib-1.10
-  (package (inherit htslib)
-    (name "htslib")
+  (package/inherit htslib
     (version "1.10")
     (source (origin
               (method url-fetch)
@@ -4834,8 +4831,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
                 "0wm9ay7qgypj3mwx9zl1mrpnr36298b1aj5vx69l4k7bzbclvr3s"))))))
 
 (define-public htslib-1.9
-  (package (inherit htslib)
-    (name "htslib")
+  (package/inherit htslib
     (version "1.9")
     (source (origin
               (method url-fetch)
@@ -4848,8 +4844,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
 
 ;; This package should be removed once no packages rely upon it.
 (define htslib-1.3
-  (package
-    (inherit htslib)
+  (package/inherit htslib
     (version "1.3.1")
     (source (origin
               (method url-fetch)
@@ -4861,8 +4856,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
                 "1rja282fwdc25ql6izkhdyh8ppw8x2fs0w0js78zgkmqjlikmma9"))))))
 
 (define htslib-for-samtools-1.2
-  (package
-    (inherit htslib)
+  (package/inherit htslib
     (version "1.2.1")
     (source (origin
               (method url-fetch)
@@ -6148,7 +6142,7 @@ to the user's query of interest.")
 (define-public samtools
   (package
     (name "samtools")
-    (version "1.12")
+    (version "1.14")
     (source
      (origin
        (method url-fetch)
@@ -6157,40 +6151,21 @@ to the user's query of interest.")
                        version "/samtools-" version ".tar.bz2"))
        (sha256
         (base32
-         "1jrdj2idpma5ja9cg0rr73b565vdbr9wyy6zig54bidicc2pg8vd"))
+         "0x3xdda78ac5vx66b3jdsv9sfhyz4npl4znl1zbaf3lbm6xdlhck"))
        (modules '((guix build utils)))
        (snippet '(begin
                    ;; Delete bundled htslib.
-                   (delete-file-recursively "htslib-1.12")
-                   #t))))
+                   (delete-file-recursively "htslib-1.14")))))
     (build-system gnu-build-system)
     (arguments
-     `(#:modules ((ice-9 ftw)
-                  (ice-9 regex)
-                  (guix build gnu-build-system)
-                  (guix build utils))
-       #:configure-flags (list "--with-ncurses")
+     `(#:configure-flags (list "--with-ncurses")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-tests
            (lambda _
              (substitute* "test/test.pl"
                ;; The test script calls out to /bin/bash
-               (("/bin/bash") (which "bash")))
-             #t))
-         (add-after 'install 'install-library
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
-               (install-file "libbam.a" lib)
-               #t)))
-         (add-after 'install 'install-headers
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((include (string-append (assoc-ref outputs "out")
-                                           "/include/samtools/")))
-               (for-each (lambda (file)
-                           (install-file file include))
-                         (scandir "." (lambda (name) (string-match "\\.h$" name))))
-               #t))))))
+               (("/bin/bash") (which "bash"))))))))
     (native-inputs (list pkg-config))
     (inputs
      (list htslib ncurses perl python zlib))
@@ -6203,6 +6178,47 @@ variant calling (in conjunction with bcftools), and a simple alignment
 viewer.")
     (license license:expat)))
 
+(define-public samtools-1.12
+  (package/inherit samtools
+    (version "1.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/samtools/samtools/"
+                       version "/samtools-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1jrdj2idpma5ja9cg0rr73b565vdbr9wyy6zig54bidicc2pg8vd"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   ;; Delete bundled htslib.
+                   (delete-file-recursively "htslib-1.12")))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments samtools)
+       ((#:modules _ #f)
+        '((ice-9 ftw)
+          (ice-9 regex)
+          (guix build gnu-build-system)
+          (guix build utils)))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'install 'install-library
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+                 (install-file "libbam.a" lib))))
+           (add-after 'install 'install-headers
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((include (string-append (assoc-ref outputs "out")
+                                             "/include/samtools/")))
+                 (for-each (lambda (file)
+                             (install-file file include))
+                           (scandir "." (lambda (name)
+                                          (string-match "\\.h$" name)))))))))))
+    (native-inputs (list pkg-config))
+    (inputs
+     (list htslib-1.12 ncurses perl python zlib))))
+
 (define-public samtools-1.10
   (package (inherit samtools)
     (name "samtools")
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 9d3fd5171e..437b0d3550 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.60.0")
+    (version "0.60.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -272,7 +272,7 @@ files and generates build instructions for the Ninja build system.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0irdn7hx5a182jbvq2kmdwd1v7mljzh5fm27pg4xk879hnv6h388"))
+                "13mrrizg4vl6n5k7fz6amyafnn3i097dcarr552qc0ca6nlmzjl7"))
               (patches (search-patches
                         "meson-allow-dirs-outside-of-prefix.patch"))))
     (build-system python-build-system)
@@ -283,38 +283,6 @@ files and generates build instructions for the Ninja build system.")
        #:phases (modify-phases %standard-phases
                   ;; Meson calls the various executables in out/bin through the
                   ;; Python interpreter, so we cannot use the shell wrapper.
-                  (delete 'wrap))))
-    (inputs (list ninja))
-
-    ;; XXX: Python is propagated just to 'GUIX_PYTHONPATH' is set (!).
-    ;; MESON-WRAPPED below fixes that by wrapping the 'meson' executable.
-    ;; TODO: Make MESON-WRAPPED the new MESON on the next core update cycle.
-    (propagated-inputs (list python))
-
-    (home-page "https://mesonbuild.com/")
-    (properties '((hidden? . #t)))
-    (synopsis "Build system designed to be fast and user-friendly")
-    (description
-     "The Meson build system is focused on user-friendliness and speed.
-It can compile code written in C, C++, Fortran, Java, Rust, and other
-languages.  Meson provides features comparable to those of the
-Autoconf/Automake/make combo.  Build specifications, also known as @dfn{Meson
-files}, are written in a custom domain-specific language (@dfn{DSL}) that
-resembles Python.")
-    (license license:asl2.0)))
-
-(define-public meson-wrapped
-  (package/inherit meson
-    (propagated-inputs '())                       ;don't propagate Python
-    (inputs (modify-inputs (package-inputs meson)
-              (prepend python-wrapper)))
-    (arguments
-     `(;; 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
-                  ;; Python interpreter, so we cannot use the shell wrapper.
                   (replace 'wrap
                     (lambda* (#:key outputs inputs #:allow-other-keys)
                       (let ((python-version
@@ -327,7 +295,17 @@ import sys
 sys.path.insert(0, '~a/lib/python~a/site-packages')
 # EASY-INSTALL-ENTRY-SCRIPT"
                                    output python-version)))))))))
-    (properties '())))
+    (inputs (list python-wrapper ninja))
+    (home-page "https://mesonbuild.com/")
+    (synopsis "Build system designed to be fast and user-friendly")
+    (description
+     "The Meson build system is focused on user-friendliness and speed.
+It can compile code written in C, C++, Fortran, Java, Rust, and other
+languages.  Meson provides features comparable to those of the
+Autoconf/Automake/make combo.  Build specifications, also known as @dfn{Meson
+files}, are written in a custom domain-specific language (@dfn{DSL}) that
+resembles Python.")
+    (license license:asl2.0)))
 
 ;;; This older Meson variant is kept for now for gtkmm and others that may
 ;;; have problems with 0.60.
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 0a90a3b167..d380b8fa80 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -79,6 +79,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
@@ -845,6 +846,7 @@ available via the @code{unittest.mock} module.")
          ("python2-funcsigs" ,python2-funcsigs)
          ,@(package-propagated-inputs base))))))
 
+;;; This package is unmaintained (see the note at the top of doc/index.rst).
 (define-public python-nose
   (package
     (name "python-nose")
@@ -858,15 +860,26 @@ available via the @code{unittest.mock} module.")
             "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; FIXME: test suite fails
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'invoke-2to3
+                    (lambda _
+                      (invoke "2to3" "-w" "."))))))
     (home-page "http://readthedocs.org/docs/nose/")
     (synopsis "Python testing library")
     (description
      "Nose extends the unittest library to make testing easier.")
-    (license license:lgpl2.0+)))
+    (license license:lgpl2.0+)
+    (properties `((python2-variant . ,(delay python2-nose))))))
 
 (define-public python2-nose
-  (package-with-python2 python-nose))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-nose))))
+    (package/inherit base
+      (arguments (substitute-keyword-arguments (package-arguments base)
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (delete 'invoke-2to3))))))))
 
 (define-public python-nose2
   (package
@@ -1410,14 +1423,14 @@ result back.")
 (define-public python-pytest-timeout
   (package
     (name "python-pytest-timeout")
-    (version "1.4.2")
+    (version "2.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-timeout" version))
        (sha256
         (base32
-         "0xnsigs0kmpq1za0d4i522sp3f71x5bgpdh3ski0rs74yqy13cr0"))))
+         "04l1cd2qyp3fbccw95a8nqg682r647v7yil8807dgs7xv9a8pyg6"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -1853,7 +1866,7 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
 (define-public python-testpath
   (package
     (name "python-testpath")
-    (version "0.4.4")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -1863,35 +1876,33 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1fwv4d3p54xx1x942s104irr35lszvv6jnr4nn1scsfvc0m1qmbk"))))
+         "08r1c6bhvj8pcdvzkqv1950k36a6q3v81fd2p1yqdq3c07mcwgif"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ; this package does not even have a setup.py
-       #:modules ((guix build python-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             ;; A ZIP archive should be generated, but it fails with "ZIP does
-             ;; not support timestamps before 1980".  Luckily,
-             ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
-             ;; 1980.
-             (setenv "SOURCE_DATE_EPOCH" "315532800")
-             (invoke "flit" "build")))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (wheel)
-                           (format #true wheel)
-                           (invoke "python" "-m" "pip" "install"
-                                   wheel (string-append "--prefix=" out)))
-                         (find-files "dist" "\\.whl$"))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              (substitute* "pyproject.toml"
+                (("flit_core >=3.2.0,<3.3")
+                 "flit_core >=3.2.0"))))
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
     (native-inputs
-     (list python-flit))
-    (home-page "https://github.com/takluyver/testpath")
+     (list python-pypa-build python-flit-core python-pytest))
+    (home-page "https://github.com/jupyter/testpath")
     (synopsis "Test utilities for code working with files and commands")
     (description
      "Testpath is a collection of utilities for Python code working with files
@@ -2244,7 +2255,7 @@ statements in the module it tests.")
 (define-public python-pylint
   (package
     (name "python-pylint")
-    (version "2.9.6")
+    (version "2.12.2")
     (source
      (origin
        (method git-fetch)
@@ -2253,15 +2264,31 @@ statements in the module it tests.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15yw69v1cj6zkndk60c2g0dgl0khh8bfm1lrwhjffpdjfc7nkc9a"))))
+        (base32 "0spmy7j1vvh55shzgma80q61y0d1cj45dcgslb4g5w3y602miq5i"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; The unused but collected 'primer'-related test files require
+               ;; the extraneous 'git' Python module; remove them.
+               (delete-file "tests/primer/test_primer_external.py")
+               (delete-file "tests/testutils/test_package_to_lint.py")
+               (setenv "HOME" "/tmp")
+               (invoke "pytest" "-k" "test_functional")))))))
     (native-inputs
-     (list python-pytest python-pytest-benchmark python-pytest-runner))
+     (list python-pytest))
     (propagated-inputs
-     (list python-astroid python-isort python-mccabe python-toml))
+     (list python-astroid
+           python-isort
+           python-mccabe
+           python-platformdirs
+           python-toml
+           python-typing-extensions))
     (home-page "https://github.com/PyCQA/pylint")
-    (synopsis "Python source code analyzer which looks for coding standard
-errors")
+    (synopsis "Advanced Python code static checker")
     (description "Pylint is a Python source code analyzer which looks
 for programming errors, helps enforcing a coding standard and sniffs
 for some code smells (as defined in Martin Fowler's Refactoring book).
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 36f8dcf8ff..4207f14310 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -150,7 +150,7 @@ using the CMake build system.")
 (define-public cmake-bootstrap
   (package
     (name "cmake-bootstrap")
-    (version "3.21.3")
+    (version "3.21.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://cmake.org/files/v"
@@ -158,7 +158,7 @@ using the CMake build system.")
                                   "/cmake-" version ".tar.gz"))
               (sha256
                (base32
-                "0kvrhgbrvm0lv7jshzd4nsvp3d5q1jkgal2d5kj4w4v58bghckfi"))
+                "0y2rk316j9m1iqimgwah0z1ii3ggli65dw6hdn4ckx0mqaahlmyr"))
               (patches (search-patches "cmake-curl-certificates.patch"))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 2989d2abaf..8185a6157e 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1394,6 +1394,32 @@ handles the 7z format which features very high compression ratios.")
 functionality in a C++ iostream.")
     (license license:lgpl2.1+)))
 
+(define-public zopfli
+  (package
+    (name "zopfli")
+    (version "1.0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/google/zopfli")
+                    (commit (string-append name "-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0dr8n4j5nj2h9n208jns56wglw59gg4qm3s7c6y3hs75d0nnkhm4"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test suite
+       #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
+    (home-page "https://github.com/google/zopfli")
+    (synopsis "Very good, but slow, deflate or zlib compression")
+    (description "Zopfli Compression Algorithm is a compression library
+programmed in C to perform very good, but slow, deflate or zlib compression.
+ZopfliCompress supports the deflate, gzip and zlib output formats.  This
+library can only compress, not decompress; existing zlib or deflate libraries
+can decompress the data.")
+    (license license:asl2.0)))
+
 (define-public zpaq
   (package
     (name "zpaq")
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index b3319e4ac1..2658f1b20a 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -192,10 +192,10 @@ text or blue underlined text, on ANSI terminals.")
          "1xif1bh938qpfc3d0f9xgidibpm65xix11w9gszwqnia00q7rb13"))))
     (arguments `())))
 
-(define-public rust-aom-sys-0.2
+(define-public rust-aom-sys-0.3
   (package
     (name "rust-aom-sys")
-    (version "0.2.1")
+    (version "0.3.0")
     (source
       (origin
         (method url-fetch)
@@ -204,7 +204,7 @@ text or blue underlined text, on ANSI terminals.")
           (string-append name "-" version ".tar.gz"))
         (sha256
           (base32
-            "03a0xhaafjn0hlpcf9ba73hv557m0jqnmj9wl57wzrcnka96zvgj"))))
+            "0dhikfl7l5nacspajbllbhhysad3vl845cpfplqgm5mf67nmx9w8"))))
     (build-system cargo-build-system)
     (arguments
       `(#:cargo-inputs
@@ -219,30 +219,6 @@ text or blue underlined text, on ANSI terminals.")
     (description "This package provides FFI bindings to aom.")
     (license license:expat)))
 
-(define-public rust-aom-sys-0.1
-  (package
-    (inherit rust-aom-sys-0.2)
-    (name "rust-aom-sys")
-    (version "0.1.4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "aom-sys" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1bqcpkycv1d67r6jcl9npfbw6rkl829rdq9w6vlpb0rjqxp0xzsn"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-bindgen" ,rust-bindgen-0.53)
-        ("rust-metadeps" ,rust-metadeps-1))))
-    (native-inputs
-     (list pkg-config))
-    (inputs
-     (list libaom clang llvm))))
-
 (define-public rust-ascii-canvas-2
   (package
     (name "rust-ascii-canvas")
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 9281bc25de..7cd13ea8c8 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -4463,29 +4463,31 @@ iteratively in Rust.")
 in Rust.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-av-metrics-0.6
+(define-public rust-av-metrics-0.7
   (package
     (name "rust-av-metrics")
-    (version "0.6.2")
+    (version "0.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "av-metrics" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1g4k2q3226246jad3jl8pny7aphq8i03x4qyilzj4zgp27350hsz"))))
+        (base32 "1y1q61lhahljxh1l2brp8v795qf6g7gr4h4vdmq43g5z5pq2dw50"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-crossbeam" ,rust-crossbeam-0.8)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-lab" ,rust-lab-0.8)
+        ("rust-lab" ,rust-lab-0.11)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-thiserror" ,rust-thiserror-1)
-        ("rust-v-frame" ,rust-v-frame-0.2))))
+        ("rust-v-frame" ,rust-v-frame-0.2))
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-y4m" ,rust-y4m-0.7))))
     (home-page "https://github.com/rust-av/av-metrics")
     (synopsis "Collection of algorithms for measuring audio/video metrics")
     (description
@@ -6129,40 +6131,17 @@ types.")
 (define-public rust-bitflags-1
   (package
     (name "rust-bitflags")
-    (version "1.2.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bitflags" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg"))))
-    (build-system cargo-build-system)
-    (home-page "https://github.com/bitflags/bitflags")
-    (synopsis "Macro to generate structures which behave like bitflags")
-    (description "This package provides a macro to generate structures which
-behave like a set of bitflags.")
-    (license (list license:asl2.0
-                   license:expat))))
-
-;; TODO: Absorb this package into rust-bitflags-1 in core-updates with the
-;; newer version of rust so we don't have to track down all dependants of this
-;; package to ensure a compatible version of rust.
-(define-public rust-bitflags-1.3
-  (package
-    (inherit rust-bitflags-1)
-    (name "rust-bitflags")
     (version "1.3.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bitflags" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32 "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bitflags" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"))))
+    (build-system cargo-build-system)
     (arguments
-     `(#:tests? #f      ; Tests require rust-1.46 or newer.
+     `(#:tests? #f                      ; Tests require rust-1.46 or newer.
        #:cargo-inputs
        (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
         ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))
@@ -6172,7 +6151,13 @@ behave like a set of bitflags.")
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-trybuild" ,rust-trybuild-1)
-        ("rust-walkdir" ,rust-walkdir-2))))))
+        ("rust-walkdir" ,rust-walkdir-2))))
+    (home-page "https://github.com/bitflags/bitflags")
+    (synopsis "Macro to generate structures which behave like bitflags")
+    (description "This package provides a macro to generate structures which
+behave like a set of bitflags.")
+    (license (list license:asl2.0
+                   license:expat))))
 
 (define-public rust-bitflags-0.9
   (package
@@ -10337,6 +10322,54 @@ diagnostics easy and relatively painless for everyone!")
     (description "This package provides colorful panic backtraces.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-concolor-query
+  (package
+    (name "rust-concolor-query")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-query" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1isbqpyiwblp0rglnaqzai5hav23095s82mwgi09v3xcck4rq5dd"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Rust library to query low level terminal capabilities")
+    (description "@code{concolor-query} can be used to query a terminal
+capabilities, for example to find out about its colored console abilities.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-concolor-control
+  (package
+    (name "rust-concolor-control")
+    (version "0.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "concolor-control" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1nplakbdb9sbd3h62d9zkan0xm1w0c7cbl3rk0iqgn405yf1213i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f          ;see https://github.com/rust-cli/concolor/issues/4
+       #:cargo-inputs
+       (("rust-atty" ,rust-atty-0.2)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-concolor-query" ,rust-concolor-query))))
+    (home-page "https://github.com/rust-cli/concolor")
+    (synopsis "Rust library for managing terminal styling")
+    (description "@code{concolor-control} is a terminal styling library that
+can be used to:
+@itemize
+@item Detect interactive @samp{stdout} or @samp{stderr}
+@item Detect terminal capabilities via @samp{TERM}
+@item Support @url{https://bixense.com/clicolors/, CLICOLOR} and
+@url{https://no-color.org/, NO_COLOR}.
+@end itemize")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-color-quant-1
   (package
     (name "rust-color-quant")
@@ -27165,10 +27198,10 @@ currently supports parsing (fully conformant parser), formatting and comparing
 language tags.")
     (license license:expat)))
 
-(define-public rust-lab-0.8
+(define-public rust-lab-0.11
   (package
     (name "rust-lab")
-    (version "0.8.1")
+    (version "0.11.0")
     (source
       (origin
         (method url-fetch)
@@ -27177,15 +27210,15 @@ language tags.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1ysnbviwi35mq6xyz9c59mpgigyfp4s4y2mispxzrms4vk83bx15"))))
+          "13ymsn5cwl5i9pmp5mfmbap7q688dcp9a17q82crkvb784yifdmz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
-       (("rust-approx" ,rust-approx-0.3)
+       (("rust-approx" ,rust-approx-0.5)
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
-        ("rust-rand" ,rust-rand-0.5))))
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7)
+        ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/TooManyBees/lab")
     (synopsis "Convert RGB to CIE-LAB for Rust")
     (description
@@ -27195,7 +27228,7 @@ space, and comparing differences in color.")
 
 (define-public rust-lab-0.7
   (package
-    (inherit rust-lab-0.8)
+    (inherit rust-lab-0.11)
     (name "rust-lab")
     (version "0.7.2")
     (source
@@ -27217,18 +27250,18 @@ space, and comparing differences in color.")
 
 (define-public rust-lab-0.4
   (package
-    (inherit rust-lab-0.8)
+    (inherit rust-lab-0.7)
     (name "rust-lab")
     (version "0.4.4")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "lab" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "0h4ig5bvzmwlzd74zj7b4sh7kzi3c6mjjnw7yjz8ijxvr4mrcr1s"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lab" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0h4ig5bvzmwlzd74zj7b4sh7kzi3c6mjjnw7yjz8ijxvr4mrcr1s"))))
     (arguments
      `(#:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.3))))))
@@ -46210,22 +46243,24 @@ require unstable language features.")
      "small helper to generate version information for git packages")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-rustc-version-0.3
+(define-public rust-rustc-version-0.4
   (package
     (name "rust-rustc-version")
-    (version "0.3.3")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rustc_version" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1vjmw7xcdri0spsf24mkpwpph853wrbqppihhw061i2igh4f5pzh"))))
+        (base32 "0rpk9rcdk405xhbmgclsh4pai0svn49x35aggl4nhbkd4a2zb85z"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-semver" ,rust-semver-0.11))))
+       (("rust-semver" ,rust-semver-1))
+       #:cargo-development-inputs
+       (("rust-doc-comment" ,rust-doc-comment-0.3))))
     (home-page "https://github.com/djc/rustc-version-rs")
     (synopsis "Library for querying the version of an installed rustc compiler")
     (description
@@ -46233,6 +46268,22 @@ require unstable language features.")
 rustc compiler.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rustc-version-0.3
+  (package/inherit rust-rustc-version-0.4
+    (name "rust-rustc-version")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustc_version" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1vjmw7xcdri0spsf24mkpwpph853wrbqppihhw061i2igh4f5pzh"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-semver" ,rust-semver-0.11))))))
+
 (define-public rust-rustc-version-0.2
   (package
     (inherit rust-rustc-version-0.3)
@@ -54715,6 +54766,30 @@ processors, disks, components and networks.")
     (description "Send log messages to syslog.")
     (license license:expat)))
 
+(define-public rust-cfg-expr-0.8
+  (package
+    (name "rust-cfg-expr")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cfg-expr" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03lgv8psc2qrr93hxgdfmfwbj1crpzghxd7qh6w2nz0l4qryh4ml"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-smallvec" ,rust-smallvec-1)
+        ("rust-target-lexicon" ,rust-target-lexicon-0.12))
+       #:cargo-development-inputs
+       (("rust-difference" ,rust-difference-2))))
+    (home-page "https://github.com/EmbarkStudios/cfg-expr")
+    (synopsis "Parser and evaluator for Rust @samp{cfg} expressions")
+    (description "This package provides a parser and evaluator for Rust
+@samp{cfg} expressions.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-system-deps-3
   (package
     (name "rust-system-deps")
@@ -62273,22 +62348,23 @@ first byte.")
 (define-public rust-v-frame-0.2
   (package
     (name "rust-v-frame")
-    (version "0.2.1")
+    (version "0.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "v_frame" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ia1j0j1v5zp9bp91imbnbxnv937x3xfpc06nyj96yjfk8zbmxhp"))))
+        (base32 "1ay6p0arqg8cnyzv6iiad77plvjkxnmlmyvgz2qcpadv7y5942n7"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-hawktracer" ,rust-rust-hawktracer-0.7)
         ("rust-noop-proc-macro" ,rust-noop-proc-macro-0.3)
         ("rust-num-derive" ,rust-num-derive-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2))))
     (home-page "https://github.com/xiph/rav1e")
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 6342f85404..da113ac168 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -309,15 +309,6 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
                (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
                (("/bin/sh") (which "sh")))
              #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-before 'build 'patch-tests
            (lambda _
              (substitute* "tools/ippeveprinter.c"
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 77ee7a4477..fc221a2678 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -21291,7 +21291,7 @@ maps the thread tree.")
            "1lf30q6r8nz5cjzclbb9bbymsk2y75nskvb55hnjdv93gr3j0sik"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       (list gnupg-2.2.32))
+       (list gnupg))
       (home-page "https://elpa.gnu.org/packages/pinentry.html")
       (synopsis "GnuPG Pinentry server implementation")
       (description
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 12046f0d39..bfb3f9790e 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -245,16 +245,7 @@
                             ;; environment variables from emacs.
                             ;; Likewise, we don't need to patch helper binaries
                             ;; like etags, ctags or ebrowse.
-                            "^emacs(-[0-9]+(\\.[0-9]+)*)?$"))
-               #t)))
-         (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-           ;; The 'reset-gzip-timestamps phase will throw a permission error
-           ;; if gzip files aren't writable then.  This phase is needed when
-           ;; building from a git checkout.
-           (lambda _
-             (for-each make-file-writable
-                       (find-files %output ".*\\.t?gz$"))
-             #t)))))
+                            "^emacs(-[0-9]+(\\.[0-9]+)*)?$"))))))))
     (inputs
      `(("gnutls" ,gnutls)
        ("ncurses" ,ncurses)
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 9312c9a1bc..818d9966dd 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -354,8 +354,7 @@ tests.")
         (base32 "0vnf0pk516fwwh41v96c29l2i7h1pnwhivlkbf53kkx1q35g7lb3"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          ;; AppInfo not available inside build environment.
@@ -623,10 +622,6 @@ the freedesktop.org XDG Base Directory specification.")
              ;; existing in the build environment.
              (invoke "sed" "/src\\/test\\/test-user-util.c/,+2s/^/#/g"
                      "-i" "src/test/meson.build")
-             ;; FIXME: This one times out for unknown reasons.
-             (invoke "sed"
-                     "/src\\/libelogind\\/sd-event\\/test-event.c/,+2s/^/#/g"
-                     "-i" "src/test/meson.build")
              ;; This test tries to copy some bytes from /usr/lib/os-release,
              ;; which does not exist in the build container.  Choose something
              ;; more likely to be available.
@@ -1002,6 +997,7 @@ Python.")
        ("dot" ,graphviz)
        ("doxygen" ,doxygen)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("xmlto" ,xmlto)
        ("xsltproc" ,libxslt)
        ,@(if (%current-target-system)
@@ -1038,7 +1034,7 @@ fullscreen) or other display servers.")
     (inputs
      (list wayland))
     (native-inputs
-     (list pkg-config))
+     (list pkg-config python))
     (synopsis "Wayland protocols")
     (description "Wayland-Protocols contains Wayland protocols that add
 functionality not available in the Wayland core protocol.  Such protocols either
@@ -1379,8 +1375,7 @@ message bus.")
         (base32 "16wwd633jak9ajyr1f1h047rmd09fhf3kzjz6g5xjsz0lwcj8azz"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59 ;see https://github.com/mesonbuild/meson/issues/6470
-       #:tests? #f ; XXX: tests require DocBook 4.1.2
+     `(#:tests? #f ; XXX: tests require DocBook 4.1.2
        #:configure-flags
        '("--localstatedir=/var"
          "-Dsystemdsystemunitdir=/tmp/empty"
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 725838ca1f..dab1d797e0 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1757,7 +1757,6 @@ destroying an ancient book using a special wand.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 2e253e081a..8da4989bf1 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -229,8 +229,7 @@ topology functions.")
                 "037xmkmcmcw87vb1c1s3y225m8757k331cvk1m8cshf6mx61p0l1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index d5fd197922..d606acf798 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -259,13 +259,6 @@ from Markdown files.")
                             `("PERL5LIB" ":" prefix (,path))))
                         (find-files bin "\\.*$"))
               #t)))
-         (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out")
-                                                  "/share/man")
-                                   ".*\\.gz$"))
-             #t))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* (find-files "." ".*\\.xml(-good)?")
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 6dd90eaf93..fa49679870 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -12,7 +12,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, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
@@ -227,7 +227,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "21.2.5")
+    (version "21.3.2")
     (source
       (origin
         (method url-fetch)
@@ -239,7 +239,7 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "1fxcdf4qs4vmyjcns7jv62w4jy3gr383ar5b7mr77nb0nxgmhjcf"))
+          "1g96y59bw10ml8h4jl259g41jdmf5ww3jbwqpz1sprq7hgxvmrz2"))
         (patches
          (search-patches "mesa-skip-tests.patch"))))
     (build-system meson-build-system)
@@ -352,6 +352,12 @@ also known as DXTn or DXTC) for Mesa.")
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-failing-test
            (lambda _
+             ;; Disable the intel vulkan (anv_state_pool) tests, as they may
+             ;; fail in a nondeterministic fashion (see:
+             ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/5446).
+             (substitute* "src/intel/vulkan/meson.build"
+               (("if with_tests")
+                "if false"))
              ,@(match (%current-system)
                  ("powerpc64le-linux"
                   ;; Disable some of the llvmpipe tests.
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 1bd1d6c138..30e5433776 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -179,7 +179,7 @@ shared NFS home directories.")
 (define glib
   (package
     (name "glib")
-    (version "2.70.0")
+    (version "2.70.2")
     (source
      (origin
        (method url-fetch)
@@ -188,7 +188,7 @@ shared NFS home directories.")
                        name "/" (string-take version 4) "/"
                        name "-" version ".tar.xz"))
        (sha256
-        (base32 "0hh7hk02fkm1bn48k4z8f3kgv9qbni5z22gizd567fn527w7s390"))
+        (base32 "0vw08p4jllavp9qmlqg1yl1zanmy53yid46wipas6gfdhnf4al85"))
        (patches
         (search-patches "glib-appinfo-watch.patch"
                         "glib-skip-failing-test.patch"))
@@ -212,12 +212,11 @@ shared NFS home directories.")
                    `(,(this-package-native-input "python")
                      ,(this-package-native-input "python-wrapper")))
               '()))
-       #:configure-flags (list "--default-library=both"
-                               "-Dman=false"
-                               "-Dselinux=disabled"
-                               (string-append "--bindir="
-                                              (assoc-ref %outputs "bin")
-                                              "/bin"))
+       #:configure-flags ,#~(list "--default-library=both"
+                                  "-Dman=false"
+                                  "-Dselinux=disabled"
+                                  (string-append "--bindir="
+                                                 #$output:bin "/bin"))
        #:phases
        (modify-phases %standard-phases
          ;; Needed to pass the test phase on slower ARM and i686 machines.
@@ -365,8 +364,8 @@ functions for strings and common data structures.")
     (arguments
      (substitute-keyword-arguments (package-arguments glib)
        ((#:configure-flags flags ''())
-        `(cons "-Dgtk_doc=true"
-               (delete "-Dman=false" ,flags)))
+        #~(cons "-Dgtk_doc=true"
+                (delete "-Dman=false" #$flags)))
        ((#:phases phases)
         `(modify-phases ,phases
            (add-after 'unpack 'patch-docbook-xml
@@ -467,8 +466,7 @@ be used when cross-compiling."
            (lambda _
              (substitute* "tools/g-ir-tool-template.in"
                (("#!@PYTHON_CMD@")
-                (string-append "#!" (which "python3"))))
-             #t))
+                (string-append "#!" (which "python3"))))))
          #$@(if (%current-target-system)
                ;; Meson gives python extensions an incorrect name, see
                ;; <https://github.com/mesonbuild/meson/issues/7049>.
@@ -482,12 +480,8 @@ be used when cross-compiling."
     (native-inputs
      `(("glib" ,glib "bin")
        ("pkg-config" ,pkg-config)
-       ;; TODO(core-updates): Unconditionally place "flex" and "bison"
-       ;; in 'native-inputs'.
-       ,@(if (%current-target-system)
-             `(("bison" ,bison)
-               ("flex" ,flex))
-             '())))
+       ("bison" ,bison)
+       ("flex" ,flex)))
     (inputs
      `(,@(if (%current-target-system)
              `(("python" ,python))
@@ -753,7 +747,7 @@ by GDBus included in Glib.")
 (define glibmm
   (package
     (name "glibmm")
-    (version "2.68.0")
+    (version "2.70.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/glibmm/"
@@ -761,13 +755,12 @@ by GDBus included in Glib.")
                                   "/glibmm-" version ".tar.xz"))
               (sha256
                (base32
-                "0xgkyhb2876mcyyib5rk3ya9aingyj68h02nl22yvkhx35rqbwy1"))))
+                "085mzpphz71sh5wh71ppikwnxsgn4pk3s4bzz6ingj6wxn5gs240"))))
     (build-system meson-build-system)
     (outputs '("out" "doc"))
     (arguments
      `(#:configure-flags
-       (list
-        "-Dbuild-documentation=true")
+       (list "-Dbuild-documentation=true")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-failing-tests
@@ -778,8 +771,7 @@ by GDBus included in Glib.")
                (("[ \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))
+               (("[ \t]*.*giomm_tls_client.*$") ""))))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -787,17 +779,16 @@ by GDBus included in Glib.")
                (mkdir-p (string-append doc "/share"))
                (rename-file
                 (string-append out "/share/doc")
-                (string-append doc "/share/doc"))
-               #t))))))
+                (string-append doc "/share/doc"))))))))
     (native-inputs
-     `(("dot" ,graphviz)
-       ("doxygen" ,doxygen)
-       ("glib:bin" ,glib "bin")
-       ("m4" ,m4)
-       ("mm-common" ,mm-common)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("xsltproc" ,libxslt)))
+     (list graphviz
+           doxygen
+           `(,glib "bin")
+           m4
+           mm-common
+           perl
+           pkg-config
+           libxslt))
     (propagated-inputs
      (list libsigc++ glib))
     (home-page "https://gtkmm.org/")
@@ -823,7 +814,7 @@ useful for C++.")
         (base32 "11m37sbx0i18cl17d0fkq0bik4bbzlb5n8kcl651jhci5ipci3sh"))))
      (propagated-inputs
       (modify-inputs (package-propagated-inputs glibmm)
-        (prepend libsigc++-2)))))
+        (replace "libsigc++" libsigc++-2)))))
 
 (define-public python2-pygobject-2
   (package
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index d8d34c89ed..591356f72f 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -888,8 +888,7 @@ tomorrow, the rest of the week and for special occasions.")
          "1bzi79plw6ji6qlckhxnwfnswy6jpnhzmmyanml2i2xg73hp6bg0"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list "-Ddogtail=false"     ; Not available
              ;; Required for RUNPATH validation.
@@ -960,8 +959,7 @@ cloud integration is offered through GNOME Online Accounts.")
          "0lcdal4qdhclr8961p57xf010y92l6wwmkw86lyi9wy224z6gjr0"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-gnome-music
@@ -1496,8 +1494,7 @@ extraction, and lookup for applications on the desktop.")
               "06q3p4f8g9zr7a4mw3qr556mi0dg9qzrj8n46ybdz93fxs26aaj1"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-      #:configure-flags '(;; Enable camera support for user selfie.
+    `(#:configure-flags '(;; Enable camera support for user selfie.
                           "-Dcheese=auto"
                           "-Dsystemd=false")
       #:phases (modify-phases %standard-phases
@@ -1562,8 +1559,7 @@ tour of all gnome components and allows the user to set them up.")
               "04r9ck9v4i0d31grbli1d4slw2d6dcsfkpaybkwbzi7wnj72l30x"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-      #:glib-or-gtk? #t
+    `(#:glib-or-gtk? #t
       #:configure-flags
        `("-Dsystemduserunitdir=/tmp/empty"
          ;; Enable nautilus extension for file sharing.
@@ -2042,8 +2038,7 @@ to other formats.")
          "0z2xa4w921bzpzj6gv88pvbrijcnnwni6jxynwz0ybaravyzaqha"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases (modify-phases %standard-phases
                   (add-after 'install 'wrap
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -2279,8 +2274,7 @@ and keep up to date translations of documentation.")
                 "1rr1ypb89p51b6428yqvczmpmylwjfnhnkgx78hzm3vxm3m15lff"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:configure-flags '("-Dlogind=libelogind")
+     `(#:configure-flags '("-Dlogind=libelogind")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -2329,8 +2323,7 @@ and keep up to date translations of documentation.")
                 "0hpyi0sz3gcqqs9lkwyk8b6hr39m3n27432x98kxr436jj37dk6j"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-post-install-script
            (lambda _
@@ -2599,8 +2592,7 @@ forgotten when the session ends.")
                 "0xrwls1bhvny8vvd7mfjy9p26zjch0pd6x6j9jn9g2ka6xwyrxqg"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:build-type "release"
        #:configure-flags
        '("-Dnautilus=false"
@@ -2675,25 +2667,24 @@ on the GNOME Desktop with a single simple application.")
          "1v9jagk679m01nji0acirynxinziv036618c7xc49l4nwmr9ja3p"))))
     (build-system meson-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'patch-schemas
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((theme (assoc-ref inputs "gnome-backgrounds")))
-                        (substitute* (find-files "schemas"
-                                                 "\\.gschema\\.xml\\.in$")
-                          ;; Provide the correct file name of the default
-                          ;; GNOME background, 'adwaita-timed.xml'.
-                          (("@datadir@/backgrounds/gnome")
-                           (string-append theme "/share/backgrounds/gnome"))
-                          ;; Do not reference fonts, that may not exist.
-                          (("'Source Code Pro 10'") "'Monospace 11'"))))))))
-    (inputs
-     (list glib gnome-backgrounds))
-    (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")             ; glib-compile-schemas, etc.
-       ("gobject-introspection" ,gobject-introspection)
-       ("pkg-config" ,pkg-config)))
+                      (substitute* (find-files "schemas"
+                                               "\\.gschema\\.xml\\.in$")
+                        ;; Provide the correct file name of the default
+                        ;; GNOME background, 'adwaita-timed.xml'.
+                        (("@datadir@/backgrounds/gnome")
+                         (search-input-directory inputs
+                                                 "/share/backgrounds/gnome"))
+                        ;; Do not reference fonts, that may not exist.
+                        (("'Source Code Pro 10'") "'Monospace 11'")))))))
+    (inputs (list glib gnome-backgrounds))
+    (native-inputs (list gettext-minimal
+                         `(,glib "bin") ;glib-compile-schemas, etc.
+                         gobject-introspection
+                         pkg-config
+                         python))  ;for build-aux/meson/post-install.py
     (home-page "https://launchpad.net/gsettings-desktop-schemas")
     (synopsis "GNOME settings for various desktop components")
     (description "Gsettings-desktop-schemas contains a collection of GSettings
@@ -3193,8 +3184,7 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
                         "glade-test-widget-null-icon.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
@@ -3238,6 +3228,7 @@ current/manpages/docbook.xsl")
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)
        ("glib:bin" ,glib "bin")
+       ("python" ,python)
        ("python-pygobject" ,python-pygobject)
        ("gobject-introspection" ,gobject-introspection)
 
@@ -4620,6 +4611,7 @@ and RDP protocols.")
        ("glib:bin" ,glib "bin")
        ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)))
     (arguments
      `(#:glib-or-gtk? #t
@@ -5098,7 +5090,6 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -5180,7 +5171,6 @@ once.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -5542,6 +5532,7 @@ service via the system message bus.")
      `(("glib:bin" ,glib "bin") ; for glib-mkenums
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)
        ("intltool" ,intltool)
        ("python-pygobject" ,python-pygobject)))
@@ -5578,8 +5569,7 @@ services for numerous locations.")
        (patches (search-patches "gnome-settings-daemon-gc.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list (string-append "-Dudev_dir="
                             (assoc-ref %outputs "out") "/lib/udev")
@@ -5752,7 +5742,6 @@ both a traditional UI or a modern UI with a GtkHeaderBar.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -6283,8 +6272,7 @@ discovery protocols.")
            grilo-plugins
            vala))
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
 
        ;; Disable automatic GStreamer plugin installation via PackageKit and
        ;; all that.
@@ -6438,8 +6426,7 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
             (patches (search-patches "eog-update-libportal-usage.patch"))))
    (build-system meson-build-system)
    (arguments
-    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-      #:configure-flags
+    `(#:configure-flags
       ;; Otherwise, the RUNPATH will lack the final 'eog' path component.
       (list (string-append "-Dc_link_args=-Wl,-rpath="
                            (assoc-ref %outputs "out") "/lib/eog"))
@@ -6570,8 +6557,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
                 "1hlxl6368h6nyqp1888szxs9hnpcw98k3h23dgqi29xd38klzsmj"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list "-Dsystemduserunitdir=no"
              "-Dtmpfilesdir=no"
@@ -6650,7 +6636,7 @@ DAV, and others.")
                    "-Dvapi=false")
                  '()))))
     (native-inputs
-     (list gobject-introspection pkg-config vala))
+     (list gobject-introspection pkg-config python vala))
     (propagated-inputs
      ;; Both of these are required by gusb.pc.
      (list glib libusb))
@@ -6690,13 +6676,13 @@ USB transfers with your high-level application or system daemon.")
     (build-system meson-build-system)
     ;; TODO: Fix icons in home screen, About dialogue, and scan menu.
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t))
+     `(#:glib-or-gtk? #t))
     (native-inputs
      (list gettext-minimal
            itstool
            `(,glib "bin")               ; glib-compile-schemas, etc.
            pkg-config
+           python
            vala
            libxml2))
     (inputs
@@ -6790,7 +6776,7 @@ a secret password store, an adblocker, and a modern UI.")
 (define-public epiphany
   (package
     (name "epiphany")
-    (version "40.3")
+    (version "41.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/epiphany/"
@@ -6804,7 +6790,6 @@ a secret password store, an adblocker, and a modern UI.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -7162,6 +7147,7 @@ share them with others via social networking and more.")
            intltool
            itstool
            pkg-config
+           python
            `(,gtk+ "bin") ; gtk-update-icon-cache
            `(,glib "bin")))
     ;; TODO: Add libnautilus.
@@ -7194,8 +7180,7 @@ such as gzip tarballs.")
                (base32
                 "02z0xr6sv9ibl7awbw9j4y05hf4jk1zgvsbbmh7n27hhjvsvc8pl"))))
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-gnome-session
@@ -7262,7 +7247,10 @@ configuration program to choose applications starting on login.")
                     (("☭") ""))))))
     (build-system meson-build-system)
     (arguments
-     '(#:configure-flags '("-Dinstalled_tests=false")
+     ;; Use meson-0.59, otherwise we'd get "ERROR: "install_dir" must be
+     ;; specified when installing a target".
+     `(#:meson ,meson-0.59
+       #:configure-flags '("-Dinstalled_tests=false")
        #:phases
        (modify-phases %standard-phases
          (add-before 'check 'pre-check
@@ -7308,8 +7296,7 @@ javascript engine and the GObject introspection framework.")
                 "149ngl9qw6h59546lir1pa7hvw23ppsnqlj9mfqphmmn5jl99qsm"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        ;; Otherwise, the RUNPATH will lack the final path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -7550,6 +7537,7 @@ to display dialog boxes from the commandline and shell scripts.")
        ("adwaita-icon-theme" ,adwaita-icon-theme)
        ("libxcursor" ,libxcursor)       ;for XCURSOR_PATH
        ("pipewire" ,pipewire-0.3)
+       ("python" ,python)
        ("python-dbus" ,python-dbus)
        ("python-dbusmock" ,python-dbusmock)
        ("tini" ,tini)))                 ;acting as init (zombie reaper)
@@ -7862,6 +7850,13 @@ users.")
           (string-append "-Ddhclient=" dhclient)))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-dlopen-call-to-libjansson.so
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/libnm-glib-aux/nm-json-aux.c"
+               (("(handle = dlopen\\()soname" _ head)
+                (string-append
+                 head "\"" (search-input-file inputs
+                                              "lib/libjansson.so") "\"")))))
          (add-before 'configure 'pre-configure
            (lambda _
              ;; These tests try to test aspects of network-manager's
@@ -7880,12 +7875,7 @@ users.")
                ((".*test-link-linux.*") "")
                ((".*test-lldp.*") "")
                ((".*test-route-linux.*") "")
-               ((".*test-tc-linux.*") ""))
-             ;; FIXME: The jansson check fails (see:
-             ;; https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/837
-             (substitute* "src/libnm-core-impl/tests/test-setting.c"
-               (("g_assert\\(nm_json_vt\\(\\)\\);")
-                "return TRUE;"))))
+               ((".*test-tc-linux.*") ""))))
          (add-after 'unpack 'patch-docbook-xml
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
@@ -8158,8 +8148,7 @@ Cisco's AnyConnect SSL VPN.")
                 "1gj6lqqi613j2m49v9i82lqg1rv7kwwc8z4nxjcwpaa0ins803f7"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        '("-Dappindicator=yes")))
     (native-inputs
@@ -8513,7 +8502,6 @@ usage and information about running processes.")
                (base32
                 "1a9ynlwwkb3wpg293ym517vmrkk63y809mmcv9a21k5yr199x53c"))))
     (build-system meson-build-system)
-    (arguments `(#:meson ,meson-0.59))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
        ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
@@ -8549,8 +8537,7 @@ devices using the GNOME desktop.")
                 "0rr4d5m2a72vrb31jgyx49dp0s2pwgyxsrk4hyw5ym66wq63c3v1"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags
        (list "-Dcheese=false"
              (string-append "-Dgnome_session_libexecdir="
@@ -8662,8 +8649,7 @@ properties, screen resolution, and other GNOME parameters.")
                 "0ragmcln210zvzhc2br33yprbkj9drjzd7inp5sdxra0a7l73yaj"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:disallowed-references ,(list (gexp-input glib "bin")
                                       (gexp-input libxslt)
                                       (gexp-input ruby-sass))
@@ -8940,6 +8926,7 @@ easy, safe, and automatic.")
        ("intltool" ,intltool)
        ("dbus" ,dbus)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("vala" ,vala)))
     (inputs
      `(("dbus" ,dbus)
@@ -9200,6 +9187,7 @@ files.")
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("gtk+-bin" ,gtk+ "bin") ; for gtk-update-icon-cache
        ("itstool" ,itstool)
@@ -9220,7 +9208,7 @@ is complete it provides a graphical representation of each selected folder.")
 (define-public gnome-backgrounds
   (package
     (name "gnome-backgrounds")
-    (version "40.1")
+    (version "41.0")
     (source
      (origin
        (method url-fetch)
@@ -9229,10 +9217,9 @@ is complete it provides a graphical representation of each selected folder.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "03m7ldfk00cly9igrq0qizq1y0f45vijmm23f1dl5kh1lc6qmpv0"))))
+         "0i9id5z72dqddh94648zylyf41amqq5lhny8sbyg1v8v4q6sr88x"))))
     (build-system meson-build-system)
-    (native-inputs
-     `(("gettext" ,gettext-minimal)))
+    (native-inputs (list gettext-minimal))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-backgrounds")
     (synopsis "Background images for the GNOME desktop")
     (description
@@ -9268,14 +9255,14 @@ can add your own files to the collection.")
            ;; Don't create 'icon-theme.cache'.
            (lambda _
              (substitute* "build-aux/postinstall.py"
-               (("gtk-update-icon-cache") "true"))
-             #t)))))
+               (("gtk-update-icon-cache") "true")))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
        ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
        ("intltool" ,intltool)
        ("appstream-glib" ,appstream-glib)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)))
     (inputs
      (list gtk+ libcanberra libhandy libx11 libxext))
     (home-page "https://gitlab.gnome.org/GNOME/gnome-screenshot")
@@ -9308,8 +9295,6 @@ beautifying border effects.")
        ("vala" ,vala)))
     (inputs
      (list dconf gtk+ libxml2))
-    (arguments
-     `(#:meson ,meson-0.59))
     (home-page "https://gitlab.gnome.org/GNOME/dconf-editor")
     (synopsis "Graphical editor for GNOME's dconf configuration system")
     (description
@@ -9406,8 +9391,7 @@ associations for GNOME.")
           libgweather
           libhandy))
    (arguments
-    `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-      #:glib-or-gtk? #t
+    `(#:glib-or-gtk? #t
       #:phases
       ,#~(modify-phases %standard-phases
            (add-after 'unpack 'fix-service-file
@@ -9769,7 +9753,6 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        ;; gnome-calendar has to be installed before the tests can be run
        ;; https://bugzilla.gnome.org/show_bug.cgi?id=788224
        #:tests? #f
@@ -9909,7 +9892,6 @@ existing databases over the internet.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59
        #:configure-flags '("-Dlocalstatedir=/tmp"
                            "-Dsysconfdir=/tmp")
        #:imported-modules ((guix build python-build-system)
@@ -10166,7 +10148,8 @@ handling the startup notification side.")
        ("gtk+:bin" ,gtk+ "bin") ; for gtk-update-icon-cache
        ("itstool" ,itstool)
        ("vala" ,vala)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)))
     (inputs
      `(("glib" ,glib)
        ("gtksourceview" ,gtksourceview)
@@ -10697,8 +10680,7 @@ photo-booth-like software, such as Cheese.")
                 "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8"))
               (patches (search-patches "cheese-vala-update.patch"))))
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        ;; Tests require GDK.
        #:tests? #f
        #:phases
@@ -11114,11 +11096,6 @@ functionality.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-
-       ;; See
-       ;; <https://github.com/mesonbuild/meson/issues/9492#issuecomment-973117289>.
-       #:meson ,meson-0.59
-
        #:configure-flags
        ;; Ensure the RUNPATH contains all installed library locations.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -11354,8 +11331,7 @@ higher level porcelain stuff.")
                 "0npg4kqpwl992fgjd2cn3fh84aiwpdp9kd8z7rw2xaj2iazsm914"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-post-install-partially
@@ -11615,8 +11591,7 @@ environment.")
                 "001h9gppn79gnj7dl61jl9gas5wmbjdx0v8xwsx7v4xsv2hwz91g"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -11679,8 +11654,7 @@ integrate seamlessly with the GNOME desktop.")
         (search-patches "gnome-boxes-add-guix-logo.patch"))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59         ;positional arguments error with meson 0.60
-       #:glib-or-gtk? #t
+     `(#:glib-or-gtk? #t
        #:configure-flags (list "-Drdp=false"
                                (string-append "-Dc_link_args=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
@@ -12594,8 +12568,7 @@ your data.")
     (propagated-inputs
      (list gtksourceview)) ; required for source view
     (arguments
-     `(#:meson ,meson-0.59
-       #:build-type "release"
+     `(#:build-type "release"
        #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index f0333befa5..cde7427d07 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -279,15 +279,19 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.30")
+    ;; Note: The 2.2.X releases are Long Term Support (LTS), so stick to it
+    ;; for our stable 'gnupg'.
+    ;; Note2: 2.2.33 currently suffers from regressions, so do not update to it
+    ;; (see: https://dev.gnupg.org/T5742).
+    (version "2.2.32")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
+              (uri (string-append "ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (patches (search-patches "gnupg-default-pinentry.patch"))
               (sha256
                (base32
-                "1111ry31gaxv76miqsy6l0kwxwlx8sz0jk41jhyrjwx649p6sqyc"))))
+                "0506gv54z10c96z5821z9p0ksibk1pfilsmag39ffqrcz0sinmxj"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
@@ -347,21 +351,6 @@ libskba (working with X.509 certificates and CMS data).")
     (properties '((ftp-server . "ftp.gnupg.org")
                   (ftp-directory . "/gcrypt/gnupg")))))
 
-;; This package fixes <https://issues.guix.gnu.org/52483>, "GnuPG 2.2.30 cannot
-;; do symmetric encryption"
-(define-public gnupg-2.2.32
-  (package
-    (inherit gnupg)
-    (version "2.2.32")
-    (source (origin
-              (inherit (package-source gnupg))
-              (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
-                                  ".tar.bz2"))
-              (patches (search-patches "gnupg-default-pinentry.patch"))
-              (sha256
-               (base32
-                "0506gv54z10c96z5821z9p0ksibk1pfilsmag39ffqrcz0sinmxj"))))))
-
 (define-public gnupg-1
   (package (inherit gnupg)
     (version "1.4.23")
@@ -382,8 +371,7 @@ libskba (working with X.509 certificates and CMS data).")
          (add-after 'unpack 'patch-check-sh
            (lambda _
              (substitute* "checks/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             #t)))))))
+               (("/bin/sh") (which "sh"))))))))))
 
 (define-public gpgme
   (package
@@ -433,14 +421,9 @@ and every application benefits from this.")
                         "lang/cpp/src/libgpgmepp.la")
                (symlink (string-append gpgme "/lib/libgpgme.la")
                         "src/libgpgme.la"))
-             (chdir "lang/qt")
-             #t)))))
+             (chdir "lang/qt"))))))
     (native-inputs
-     ;; Use GnuPG 2.2.32.  With 2.2.30, 'testSymmetricEncryptDecrypt' in
-     ;; t-encrypt.cpp fails because 'gpg' wrongfully ask for a passphrase do
-     ;; decrypt the cypher text.
      (modify-inputs (package-native-inputs gpgme)
-       (replace "gnupg" gnupg-2.2.32)
        (prepend pkg-config)))
     (inputs
      (modify-inputs (package-inputs gpgme)
@@ -593,14 +576,14 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
 (define-public python-gnupg
   (package
     (name "python-gnupg")
-    (version "0.4.7")
+    (version "0.4.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-gnupg" version))
        (sha256
         (base32
-         "1isazrg2h126xg3vvk4wrhx8k8yfsg5sxybvfa99phj235mzaq90"))))
+         "1mq7hljy3bjkxdvh3qx2bv4y0b66l9pmc6i06ys75y7dbjpf2kdn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -615,8 +598,7 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
                (setenv "USERNAME" "guixbuilder")
                ;; The doctests are extremely slow and sometimes time out,
                ;; so we disable them.
-               (invoke "python"
-                       "test_gnupg.py" "--no-doctests")))))))
+               (invoke "python" "test_gnupg.py" "--no-doctests")))))))
     (native-inputs
      (list gnupg))
     (home-page "https://pythonhosted.org/python-gnupg/index.html")
@@ -626,9 +608,6 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
 and signature functionality from Python programs.")
     (license license:bsd-3)))
 
-(define-public python2-gnupg
-  (package-with-python2 python-gnupg))
-
 (define-public perl-gnupg-interface
   (package
     (name "perl-gnupg-interface")
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index f5d8d054cd..cda41041f6 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -369,10 +369,7 @@ in C/C++.")
      `(#:tests? #f ; FIXME: all tests pass, but then the check phase fails anyway.
        #:test-target "check-jstests"
        #:configure-flags
-       ;; TODO(core-updates): unconditionally use 'quasiquote
-       ,#~(#$(if (%current-target-system)
-                 #~quasiquote
-                 #~quote)
+       ,#~(quasiquote
            ("--enable-ctypes"
             "--enable-optimize"
             "--enable-pie"
@@ -466,7 +463,10 @@ in C/C++.")
          "--enable-hardening"
          "--enable-optimize"
          "--enable-release"
-         "--enable-rust-simd"
+         ;; FIXME: rust-simd is disabled otherwise the build fails with
+         ;; "error: `[u32; 64]` is forbidden as the type of a const generic
+         ;; parameter".
+         "--disable-rust-simd"
          "--enable-readline"
          "--enable-shared-js"
          "--with-system-icu"
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index db95ef1309..e808d8ebf6 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -2451,16 +2451,7 @@ Go programming language.")
          #:phases
          (modify-phases %standard-phases
            ;; Source-only package
-           (delete 'build)
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                      (string-append (assoc-ref outputs "out")
-                                     "/src/golang.org/x/crypto/ed25519/testdata")
-                      ".*\\.gz$"))
-               #t)))))
+           (delete 'build))))
       (propagated-inputs
        (list go-golang-org-x-sys))
       (synopsis "Supplementary cryptographic libraries in Go")
@@ -3738,17 +3729,7 @@ SysVinit, and more.")
        (list go-golang-org-x-sys go-github-com-sirupsen-logrus
              go-golang-org-x-crypto))
       (arguments
-       '(#:import-path "github.com/docker/distribution"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                     (assoc-ref outputs "out")
-                     ".*\\.gz$"))
-               #t)))))
+       '(#:import-path "github.com/docker/distribution"))
       (home-page
        "https://github.com/docker/distribution")
       (synopsis "This package is a Docker toolset to pack, ship, store, and
@@ -5571,17 +5552,7 @@ non-UTF-friendly sources.")
            "0il2nnxp2cqiy73m49215dnf9in3vd25ji8qxbmq87c5qy7i1q9d"))))
       (build-system go-build-system)
       (arguments
-       `(#:import-path "github.com/gdamore/tcell"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-files-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               ;; Make sure .gz files are writable so that the
-               ;; 'reset-gzip-timestamps' phase can do its work.
-               (let ((out (assoc-ref outputs "out")))
-                 (for-each make-file-writable
-                           (find-files out "\\.gz$"))
-                 #t))))))
+       `(#:import-path "github.com/gdamore/tcell"))
       (inputs
        (list go-github.com-mattn-go-runewidth go-golang-org-colorful
              go-golang-org-x-text go-github-com-gdamore-encoding))
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index c48301ca35..8810617795 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlos@gmx.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Alexandre Hannud Abdo <abdo@member.fsf.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
 
 (define-module (gnu packages graph)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils)
@@ -60,31 +62,81 @@
   #:use-module (gnu packages time)
   #:use-module (gnu packages xml))
 
+(define-public plfit
+  (package
+    (name "plfit")
+    (version "0.9.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ntamas/plfit")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03x5jbvg8vwr92682swy58ljxrhqwmga1xzd0cpfbfmda41gm2fb"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")))
+    (home-page "https://github.com/ntamas/plfit")
+    (synopsis "Tool for fitting power-law distributions to empirical data")
+    (description "The @command{plfit} command fits power-law distributions to
+empirical (discrete or continuous) data, according to the method of Clauset,
+Shalizi and Newman (@cite{Clauset A, Shalizi CR and Newman MEJ: Power-law
+distributions in empirical data.  SIAM Review 51, 661-703 (2009)}).")
+    (license license:gpl2+)))
+
 (define-public igraph
   (package
     (name "igraph")
-    (version "0.8.4")
+    (version "0.9.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/igraph/igraph/releases/"
                            "download/" version "/igraph-" version ".tar.gz"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   ;; Fully unbundle igraph (see:
+                   ;; https://github.com/igraph/igraph/issues/1897).
+                   (delete-file-recursively "vendor")
+                   (substitute* "CMakeLists.txt"
+                     (("add_subdirectory\\(vendor\\).*")
+                      ""))
+                   (substitute* "src/CMakeLists.txt"
+                     ;; Remove bundling related variables.
+                     ((".*_IS_VENDORED.*") "")
+                     ;; Remove link/install directives to bundled plfit.
+                     (("plfit") "")
+                     ;; Patch in support to find plfit from the system.
+                     (("# Link igraph statically to some.*" all)
+                      (string-append "\
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(PLFIT REQUIRED libplfit IMPORTED_TARGET)
+target_link_libraries(igraph PUBLIC PkgConfig::PLFIT)\n"
+                                     all)))
+                   (substitute* (find-files "." "(\\.h|\\.c)$")
+                     ;; Adjust includes for the newer plfit used.
+                     (("plfit/error.h")
+                      "plfit/plfit_error.h")
+                     ;; And the newer SuiteSparse.
+                     (("cs/cs.h")
+                      "cs.h"))))
        (sha256
-        (base32 "127q6q40kbmvd62yhbz6dlfk370qiq98s1iscyagpgbpjwb4xvyf"))))
-    (build-system gnu-build-system)
+        (base32 "0ym1jnj6rqrrjad0dk7jsrm9351zdd0654brbn38gqp1j9wgdqy4"))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--disable-static"
-             "--with-external-glpk"
-             "--with-external-blas"
-             "--with-external-lapack")))
+     '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON")))
+    (native-inputs (list pkg-config))
     (inputs
-     (list gmp
+     (list arpack-ng
+           gmp
            glpk
            libxml2
            lapack
            openblas
-           zlib))
+           plfit
+           suitesparse))
     (home-page "https://igraph.org")
     (synopsis "Network analysis and visualization")
     (description
@@ -95,36 +147,46 @@ more.")
     (license license:gpl2+)))
 
 (define-public python-igraph
-  (package (inherit igraph)
+  (package/inherit igraph
     (name "python-igraph")
-    (version "0.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "python-igraph" version))
-       (sha256
-        (base32 "0wkxrs28qdvnrz7d4jzcf2bh6v2yqzx3wyfziihfgsi2gn6n60a6"))))
+    (version "0.9.8")
+    (source (origin
+              (method git-fetch)
+              ;; The PyPI archive lacks tests.
+              (uri (git-reference
+                    (url "https://github.com/igraph/python-igraph")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0nwwfqvj4gp91b9j67zq4l58srr4r8qfqh90ygx17zyrybkx7ns6"))))
     (build-system python-build-system)
     (arguments
-     '(#:configure-flags
-       (list "--use-pkg-config")
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (invoke "python" "./setup.py" "build" "--use-pkg-config")))
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-v"))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'specify-libigraph-location
+            (lambda _
+              (let ((igraph #$(this-package-input "igraph")))
+                (substitute* "setup.py"
+                  (("(LIBIGRAPH_FALLBACK_INCLUDE_DIRS = ).*" _ var)
+                   (string-append
+                    var (format #f "[~s]~%" (string-append igraph
+                                                           "/include/igraph"))))
+                  (("(LIBIGRAPH_FALLBACK_LIBRARY_DIRS = ).*" _ var)
+                   (string-append
+                    var (format #f "[~s]~%" (string-append igraph "/lib"))))))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-v")))))))
     (inputs
      (list igraph))
     (propagated-inputs
      (list python-texttable))
     (native-inputs
-     (list pkg-config python-pytest))
-    (home-page "https://pypi.org/project/python-igraph/")
+     (list python-pytest))
+    (home-page "https://igraph.org/python/")
     (synopsis "Python bindings for the igraph network analysis library")))
 
 (define-public r-rbiofabric
@@ -181,14 +243,7 @@ lines.")
                (invoke "pytest" "-x" "plotly/tests/test_io")
                ;; FIXME: Add optional dependencies and enable their tests.
                ;; (invoke "pytest" "-x" "plotly/tests/test_optional")
-               (invoke "pytest" "_plotly_utils/tests"))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each (lambda (file) (chmod file #o644))
-                 (find-files out "\\.gz"))
-               #t))))))
+               (invoke "pytest" "_plotly_utils/tests")))))))
     (native-inputs
      (list python-ipywidgets python-pytest python-xarray))
     (propagated-inputs
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index a5b804d848..ced9d621aa 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -188,10 +188,7 @@ tools have full access to view and control running applications.")
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
-     ;; TODO(core-updates): make this unconditional
-     `(,@(if (%current-target-system)
-             `(("bash-minimal" ,bash-minimal)) ; for glib-or-gtk-wrap
-             '())
+     `(("bash-minimal" ,bash-minimal)
        ("drm" ,libdrm)
        ("ghostscript" ,ghostscript)
        ("libspectre" ,libspectre)
@@ -1062,7 +1059,7 @@ application suites.")
 (define-public gtk
   (package
     (name "gtk")
-    (version "4.2.1")
+    (version "4.4.1")
     (source
      (origin
        (method url-fetch)
@@ -1070,9 +1067,10 @@ application suites.")
                            (version-major+minor version)  "/"
                            name "-" version ".tar.xz"))
        (sha256
-        (base32 "1rh9fd5axf79pmd93hb2fmmflic5swcvqvq6vqghlgz4bmvnjc82"))
+        (base32 "1x6xlc063nqp7cg6py4kq1kpw9pkq49ifk5kki0brc667ncdmahg"))
        (patches
-        (search-patches "gtk4-respect-GUIX_GTK4_PATH.patch"))))
+        (search-patches "gtk4-respect-GUIX_GTK4_PATH.patch"
+                        "gtk-introspection-test.patch"))))
     (build-system meson-build-system)
     (outputs '("out" "bin" "doc"))
     (arguments
@@ -1125,7 +1123,7 @@ application suites.")
            (lambda _
              (setenv "XDG_CACHE_HOME" (getcwd))))
          (add-before 'check 'pre-check
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Tests require a running X server.
              (system "Xvfb :1 +extension GLX &")
              (setenv "DISPLAY" ":1")
@@ -1134,7 +1132,10 @@ application suites.")
              ;; Tests look for those variables.
              (setenv "XDG_RUNTIME_DIR" (getcwd))
              ;; For missing '/etc/machine-id'.
-             (setenv "DBUS_FATAL_WARNINGS" "0")))
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             ;; Required for the calendar test.
+             (setenv "TZDIR" (search-input-directory inputs
+                                                     "share/zoneinfo"))))
          (add-after 'install 'move-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1169,10 +1170,12 @@ application suites.")
        ("gettext-minimal" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection) ;for building introspection data
+       ("graphene" ,graphene)
        ("gtk-doc" ,gtk-doc)             ;for building documentation
        ("intltool" ,intltool)
        ("libxslt" ,libxslt)             ;for building man-pages
        ("pkg-config" ,pkg-config)
+       ("python-pygobject" ,python-pygobject)
        ;; These python modules are required for building documentation.
        ("python-jinja2" ,python-jinja2)
        ("python-markdown" ,python-markdown)
@@ -1181,6 +1184,7 @@ application suites.")
        ("python-toml" ,python-toml)
        ("python-typogrify" ,python-typogrify)
        ("sassc" ,sassc)                 ;for building themes
+       ("tzdata" ,tzdata-for-tests)
        ("vala" ,vala)
        ("xorg-server-for-tests" ,xorg-server-for-tests)))
     (inputs
@@ -1633,6 +1637,7 @@ library.")
        ("mm-common" ,mm-common)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      (list cairo cairomm glibmm pango))
@@ -1688,8 +1693,7 @@ library.")
                (mkdir-p (string-append doc "/share"))
                (rename-file
                 (string-append out "/share/doc")
-                (string-append doc "/share/doc"))
-               #t))))))
+                (string-append doc "/share/doc"))))))))
     (native-inputs
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)
@@ -1697,6 +1701,7 @@ library.")
        ("mm-common" ,mm-common)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("xsltproc" ,libxslt)))
     (propagated-inputs
      (list glibmm atk))
@@ -1726,7 +1731,7 @@ library.")
         (base32 "1b8vycqzr3lfvk2l73f4kk74hj48081zbh9r1r2ilr3h8xh7cs0i"))))
     (propagated-inputs
      (modify-inputs (package-propagated-inputs atkmm)
-       (prepend glibmm-2.64)))))
+       (replace "glibmm" glibmm-2.64)))))
 
 (define-public gtkmm
   (package
@@ -1776,6 +1781,7 @@ library.")
        ("mm-common" ,mm-common)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
+       ("python" ,python)
        ("xsltproc" ,libxslt)
        ("xorg-server" ,xorg-server-for-tests)))
     (propagated-inputs
@@ -1809,12 +1815,6 @@ tutorial.")
                        name "-" version ".tar.xz"))
        (sha256
         (base32 "1ri2msp3cmzi6r65ghwb8gfavfaxv0axpwi3q60nm7v8hvg36qw5"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments gtkmm)
-       ;; Use meson 0.59 to workaround a new issue with meson 0.60 (see:
-       ;; https://github.com/mesonbuild/meson/issues/9350#issuecomment-953799600).
-       ((#:meson _ #f)
-        meson-0.59)))
     (propagated-inputs
      `(("atkmm-2.28" ,atkmm-2.28)
        ("cairomm-1.14" ,cairomm-1.14)
diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
index 7e9a49a31b..ccc36007b4 100644
--- a/gnu/packages/ipfs.scm
+++ b/gnu/packages/ipfs.scm
@@ -230,16 +230,7 @@ written in Go.")
     (build-system go-build-system)
     (arguments
      `(#:unpack-path "github.com/ipfs/go-ipfs"
-       #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"
-       #:phases (modify-phases %standard-phases
-                  (add-before 'reset-gzip-timestamps 'make-files-writable
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      ;; Make sure .gz files are writable so that the
-                      ;; 'reset-gzip-timestamps' phase can do its work.
-                      (let ((out (assoc-ref outputs "out")))
-                        (for-each make-file-writable
-                                  (find-files out "\\.gz$"))
-                        #t))))))
+       #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"))
     (native-inputs
      (list python-minimal-wrapper zsh))
     (home-page "https://ipfs.io")
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 717d43190c..dec09ca791 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -216,40 +216,27 @@ After installation, the system administrator should generate keys using
                   #~()))
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'pre-configure
-                    ;; TODO(core-updates): Unconditionally use the
-                    ;; %current-target-system branch.
-                    (,(if (%current-target-system)
-                          'lambda*
-                          'lambda)
-                     ,(if (%current-target-system)
-                          '(#:key inputs #:allow-other-keys)
-                          '_)
-                     ,@(if (%current-target-system)
-                           `((substitute* "configure"
-                               ;; The e2fsprogs input is included for libcom_err,
-                               ;; let's use it even if cross-compiling.
-                               (("test \"\\$\\{krb_cv_com_err\\}\" = \"yes\"")
-                                ":")
-                               ;; Our 'compile_et' is not in --with-cross-tools,
-                               ;; which confuses heimdal.
-                               (("ac_cv_prog_COMPILE_ET=\\$\\{with_cross_tools\\}compile_et")
-                                "ac_cv_PROG_COMPILE_ET=compile_et")))
-                           '())
-                     ,@(if (%current-target-system)
-                           '((substitute* '("appl/afsutil/pagsh.c" "appl/su/su.c")
-                               (("/bin/sh")
-                                (search-input-file inputs "bin/sh"))
-                               ;; Use the cross-compiled bash instead of the
-                               ;; native bash (XXX shouldn't _PATH_BSHELL point
-                               ;; to a cross-compiled bash?).
-                               (("_PATH_BSHELL")
-                                (string-append
-                                 "\"" (search-input-file inputs "bin/sh") "\"")))
-                             (substitute* '("tools/Makefile.in")
-                               (("/bin/sh") (which "sh"))))
-                           '((substitute* '("appl/afsutil/pagsh.c"
-                                            "tools/Makefile.in")
-                               (("/bin/sh") (which "sh")))))))
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "configure"
+                        ;; The e2fsprogs input is included for libcom_err,
+                        ;; let's use it even if cross-compiling.
+                        (("test \"\\$\\{krb_cv_com_err\\}\" = \"yes\"")
+                         ":")
+                        ;; Our 'compile_et' is not in --with-cross-tools,
+                        ;; which confuses heimdal.
+                        (("ac_cv_prog_COMPILE_ET=\\$\\{with_cross_tools\\}compile_et")
+                         "ac_cv_PROG_COMPILE_ET=compile_et"))
+                      (substitute* '("appl/afsutil/pagsh.c" "appl/su/su.c")
+                        (("/bin/sh")
+                         (search-input-file inputs "bin/sh"))
+                        ;; Use the cross-compiled bash instead of the
+                        ;; native bash (XXX shouldn't _PATH_BSHELL point
+                        ;; to a cross-compiled bash?).
+                        (("_PATH_BSHELL")
+                         (string-append
+                          "\"" (search-input-file inputs "bin/sh") "\"")))
+                      (substitute* '("tools/Makefile.in")
+                        (("/bin/sh") (which "sh")))))
                   (add-before 'check 'pre-check
                     (lambda _
                       ;; For 'getxxyyy-test'.
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c3ea49fd6a..5f471beaaf 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1815,7 +1815,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.37.1")
+    (version "2.37.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -1823,7 +1823,7 @@ providing the system administrator with some help in common tasks.")
                                   "util-linux-" version ".tar.xz"))
               (sha256
                (base32
-                "0xkb7vw2040zi4m0sbhs5qn5l8nrq4xsf4sdxf3cy9mpachd8jwf"))
+                "1ng9517c37mdp858425a4zyybma7dh7jrpd6z1z61yz7mb0n81va"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -2903,42 +2903,33 @@ configuration (iptunnel, ipmaddr).")
 (define-public libcap
   (package
     (name "libcap")
-    (version "2.51")
+    (version "2.62")
     (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "mirror://kernel.org/linux/libs/security/linux-privs/"
-                   "libcap2/libcap-" version ".tar.xz"))
-             (sha256
-              (base32
-               "1ych13qc1mvzv8iscbims5b317vxcmy5ffpmfy98zk7bgamz62b6"))))
-    (build-system gnu-build-system)
-    (arguments `(#:phases
-                 ,#~(modify-phases %standard-phases
-                      (replace 'configure
-                        ;; Add $libdir to the RUNPATH of executables.
-                        (lambda _
-                          (substitute* "Make.Rules"
-                            (("LDFLAGS \\?= #-g")
-                             (string-append "LDFLAGS ?= -Wl,-rpath="
-                                            ;; TODO(core-updates): Use #$output
-                                            ;; unconditionally.
-                                            #$(if (%current-target-system)
-                                                  #~#$output
-                                                  '%output)
-                                            "/lib"))))))
-                 #:test-target "test"
-                 #:make-flags
-                 (list "lib=lib"
-                       (string-append "prefix=" (assoc-ref %outputs "out"))
-                       "RAISE_SETFCAP=no"
-                       ;; Tell the makefile to use TARGET-gcc and friends
-                       ;; when cross-compiling.
-                       ,@(if (%current-target-system)
-                             `(,(string-append "CROSS_COMPILE="
-                                               (%current-target-system) "-")
-                               "BUILD_CC=gcc")
-                             '()))))
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://kernel.org/linux/libs/security/linux-privs/"
+                    "libcap2/libcap-" version ".tar.xz"))
+              (sha256
+               (base32
+                "18l3pngsbaahdjzz01rmzrjgcqny4zld685fkq96mq5yr6m5n30r"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))
+           #:test-target "test"
+           #:make-flags
+           #~(list "lib=lib"
+                   (string-append "prefix=" #$output)
+                   (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
+                   "RAISE_SETFCAP=no"
+                   ;; Tell the makefile to use TARGET-gcc and friends
+                   ;; when cross-compiling.
+                   #$@(if (%current-target-system)
+                          `((list (string-append "CROSS_COMPILE="
+                                                 ,(%current-target-system) "-")
+                                  "BUILD_CC=gcc"))
+                          '()))))
     (native-inputs (list perl))
     (supported-systems (delete "i586-gnu" %supported-systems))
     (home-page "https://sites.google.com/site/fullycapable/")
@@ -3776,7 +3767,7 @@ to the in-kernel OOM killer.")
   ;; The post-systemd fork, maintained by Gentoo.
   (package
     (name "eudev")
-    (version "3.2.9")
+    (version "3.2.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url "https://github.com/gentoo/eudev")
@@ -3784,36 +3775,19 @@ to the in-kernel OOM killer.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1g9z3d33m0i3hmbhm0wxpvkzf6ac7xj1drwcfrhzlfhhi63sg9h7"))
+                "0dzaqwjnl55f69ird57wb6skahc6l7zs1slsrzqqfhww33icp6av"))
               (patches (search-patches "eudev-rules-directory.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'make-source-writable
-           (lambda _
-             ;; XXX: Git checkouts are read-only, but this package needs to
-             ;; modify some of its files.
-             (for-each make-file-writable (find-files "."))
-             #t))
          (add-before 'bootstrap 'patch-file-names
            (lambda* (#:key inputs native-inputs #:allow-other-keys)
             (substitute* "man/make.sh"
               (("/usr/bin/xsltproc")
                (string-append (assoc-ref
                                (or native-inputs inputs) "xsltproc")
-                               "/bin/xsltproc")))
-            #t))
-         (add-before 'configure 'patch-bindir-in-btrfs-rules
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; The "@bindir@" substitution incorrectly expands to a literal
-             ;; "${exec_prefix}" (see <https://bugs.gnu.org/39926>).  Work
-             ;; around it.
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* "rules/64-btrfs.rules.in"
-                 (("@bindir@")
-                  (string-append out "/bin")))
-               #t)))
+                               "/bin/xsltproc")))))
          (add-after 'install 'move-static-library
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3827,8 +3801,7 @@ to the in-kernel OOM killer.")
                ;; such that Libtool looks for it in the usual places.
                (substitute* (string-append out "/lib/libudev.la")
                  (("old_library=.*")
-                  "old_library=''\n"))
-               #t)))
+                  "old_library=''\n")))))
          (add-after 'install 'build-hwdb
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Build OUT/etc/udev/hwdb.bin.  This allows 'lsusb' and
@@ -7386,11 +7359,8 @@ available in the kernel Linux.")
                   (add-before 'install 'fix-makefile
                     (lambda* (#:key outputs #:allow-other-keys)
                       (substitute* "Makefile"
-                        (("\\$\\(BUILDROOT\\)/usr") (assoc-ref outputs "out")))
-                      ;; Make the compressed manpages writable so that the
-                      ;; reset-gzip-timestamps phase does not error out.
-                      (substitute* "Makefile"
-                        (("-m 444") "-m 644")))))))
+                        (("\\$\\(BUILDROOT\\)/usr")
+                         (assoc-ref outputs "out"))))))))
     (inputs (list perl))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "http://www.etallen.com/cpuid.html")
@@ -8323,7 +8293,7 @@ tools for managing PipeWire.")
 (define-public ell
   (package
     (name "ell")
-    (version "0.41")
+    (version "0.46")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8332,7 +8302,7 @@ tools for managing PipeWire.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14scs8vqpcf2810gvabsplg9yzh9y4sz47407bjy6vd604z3w8ah"))))
+                "15hwqicmll23cbrj13h3wd4lgrby416ap7l6w0434jsza4s4yv82"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -8378,8 +8348,8 @@ platforms, it is not limited to resource-constrained systems.")
     ;; This variant of binutils is used for the 64 bit support needed to
     ;; assemble the `purgatory/arch/i386/compat_x86_64.S' program on i686-linux.
     (native-inputs (list (make-ld-wrapper "ld-wrapper"
-                                          #:binutils binutils-next)
-                         binutils-next))
+                                          #:binutils binutils)
+                         binutils))
     (home-page "https://projects.horms.net/projects/kexec/")
     (synopsis "Tools for booting directly into different kernels")
     (description "This package provides the @code{kexec} program and ancillary
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index e708c02884..83f57ec28e 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -578,11 +578,8 @@ output), and Binutils.")
     (propagated-inputs
      (list zlib))                 ;to use output from llvm-config
     (arguments
-     ;; TODO(core-updates): Unconditionally use quasiquote
      `(#:configure-flags
-       ,#~(#$(if (%current-target-system)
-                 #~quasiquote
-                 #~quote)
+       ,#~(quasiquote
            ;; These options are required for cross-compiling LLVM according to
            ;; https://llvm.org/docs/HowToCrossCompileLLVM.html.
            (#$@(if (%current-target-system)
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index e5dbba21dd..4f30ab6f9c 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -1108,14 +1108,7 @@ computing environments.")
 
                (invoke "pytest" "sklearn" "-m" "not network"
                        ;; This test tries to access the internet.
-                       "-k" "not test_load_boston_alternative"))))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))))))))
+                       "-k" "not test_load_boston_alternative")))))))
     (inputs
      (list openblas))
     (native-inputs
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index c6d8b8881d..a434c70576 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -319,7 +319,7 @@ Linux kernel and C library interfaces employed by user-space programs.")
   ;; input "locales" contain the original (English) text.
   (package
     (name "help2man")
-    (version "1.48.3")
+    (version "1.48.5")
     (source
      (origin
       (method url-fetch)
@@ -327,7 +327,7 @@ Linux kernel and C library interfaces employed by user-space programs.")
                           version ".tar.xz"))
       (sha256
        (base32
-        "1b58s40dh2lflrkgbyxg1s48p8icb5a5yzp9ch83kg9zchygyqc3"))))
+        "1gl24n9am3ivhql1gs9lffb415irg758fhxyk4ryssiflk5f8fb7"))))
     (build-system gnu-build-system)
     (arguments `(;; There's no `check' target.
                  #:tests? #f
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 8de79fd9fa..43b1059304 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -2161,15 +2161,7 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "jalv.select.cpp"
                (("echo \\$PATH.*tr ':'.*xargs ls")
-                (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin")))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out")
-                                                  "/share/man")
-                                   ".*\\.gz$"))
-             #t)))))
+                (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin"))))))))
     (inputs
      (list lilv lv2 jalv gtkmm-2))
     (native-inputs
@@ -4747,16 +4739,7 @@ are a C compiler and glib.  Full API documentation and examples are included.")
                       (assoc-ref outputs "out") "/lib/lmms"
                       ":"
                       (assoc-ref outputs "out") "/lib/lmms/ladspa"
-                      "\""))
-             #t))
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (map (lambda (file)
-                    (make-file-writable file))
-                  (find-files (string-append (assoc-ref outputs "out")
-                                             "/share/man")
-                              ".*\\.gz$"))
-             #t)))))
+                      "\"")))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qttools" ,qttools)
@@ -6280,12 +6263,6 @@ MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
              (substitute* "Makefile"
                (("/usr") ""))
              #t))
-         (add-before 'reset-gzip-timestamps 'make-gz-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (for-each make-file-writable
-                       (find-files (string-append (assoc-ref outputs "out"))
-                                   ".*\\.gz$"))
-             #t))
          (delete 'configure))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 805df42abb..26f4be421a 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -2248,13 +2248,9 @@ sockets in Perl.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           ;; TODO(core-updates): Make this unconditional.
-           ,(if (%current-target-system)
-                '(lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "ctest" "-E" "url-test")))
-                '(lambda _
-                   (invoke "ctest" "-E" "url-test")))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ctest" "-E" "url-test")))))))
     (synopsis "Library providing automatic proxy configuration management")
     (description "Libproxy handles the details of HTTP/HTTPS proxy
 configuration for applications across all scenarios.  Applications using
@@ -3529,7 +3525,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
 (define-public iwd
   (package
     (name "iwd")
-    (version "1.15")
+    (version "1.20")
     (source (origin
               ;; FIXME: We're using the bootstrapped sources because
               ;; otherwise using an external ell library is impossible.
@@ -3539,7 +3535,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
                                   "/wireless/iwd-" version ".tar.xz"))
               (sha256
                (base32
-                "0ngng9a9ra5w0mp2813yy2ihfibyx10ns6v5icdcp99db608xax7"))))
+                "03q5scahyg86h4bdxqxm32shyssgpmfp5b3183j01ig7mg6f4lbx"))))
     (build-system gnu-build-system)
     (inputs
      (list dbus ell readline))
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index bb449352a6..aae8886095 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -112,7 +112,7 @@ in the Mozilla clients.")
     (name "nss")
     ;; Also update and test the nss-certs package, which duplicates version and
     ;; source to avoid a top-level variable reference & module cycle.
-    (version "3.71")
+    (version "3.72")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -123,7 +123,7 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "0ly2l3dv6z5hlxs72h5x6796ni3x1bq60saavaf42ddgv4ax7b4r"))
+                "0bnh683nij6s0gvjcgwhyw5d3yx9fpm42pxj5bm97r0ky6ghm9kf"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-3.56-pkgconfig.patch"
                                        "nss-getcwd-nonnull.patch"
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index e1ffc0ff23..1b0f278605 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -269,9 +269,9 @@ to docs.openstack.org and developer.openstack.org.")
      ;; when building the package. Skip the tests for now.
      `(#:tests? #f))
     (propagated-inputs
-     (list python-stestr))
+     (list python-babel python-stestr python-testrepository python-testtools))
     (native-inputs
-     (list python-pbr python-testtools python-babel python-testrepository))
+     (list python-pbr))
     (home-page "https://www.openstack.org/")
     (synopsis "Testr wrapper to provide functionality for OpenStack projects")
     (description
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index ba5736f851..8891690daa 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1836,8 +1836,7 @@ cp -r /tmp/locale/*/en_US.*")))
       ("python-pyparsing" ,python-pyparsing)
       ("socat" ,socat)
       ("which" ,which)))
-   (propagated-inputs (list glib-networking gnupg-2.2.32
-                            gsettings-desktop-schemas))
+   (propagated-inputs (list glib-networking gnupg gsettings-desktop-schemas))
    (inputs
     `(("appstream-glib" ,appstream-glib)
       ("bubblewrap" ,bubblewrap)
diff --git a/gnu/packages/patches/binutils-CVE-2021-45078.patch b/gnu/packages/patches/binutils-CVE-2021-45078.patch
new file mode 100644
index 0000000000..fca692bdb5
--- /dev/null
+++ b/gnu/packages/patches/binutils-CVE-2021-45078.patch
@@ -0,0 +1,257 @@
+Fix CVE-2021-45078 (incomplete fix for CVE-2018-12699):
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45078
+https://sourceware.org/bugzilla/show_bug.cgi?id=28694
+
+Patch copied from upstream source repository:
+
+https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=161e87d12167b1e36193385485c1f6ce92f74f02
+
+From 161e87d12167b1e36193385485c1f6ce92f74f02 Mon Sep 17 00:00:00 2001
+From: Alan Modra <amodra@gmail.com>
+Date: Wed, 15 Dec 2021 11:48:42 +1030
+Subject: [PATCH] PR28694, Out-of-bounds write in stab_xcoff_builtin_type
+
+	PR 28694
+	* stabs.c (stab_xcoff_builtin_type): Make typenum unsigned.
+	Negate typenum earlier, simplifying bounds checking.  Correct
+	off-by-one indexing.  Adjust switch cases.
+---
+ binutils/stabs.c | 87 ++++++++++++++++++++++++------------------------
+ 1 file changed, 43 insertions(+), 44 deletions(-)
+
+diff --git a/binutils/stabs.c b/binutils/stabs.c
+index 274bfb0e7fa..83ee3ea5fa4 100644
+--- a/binutils/stabs.c
++++ b/binutils/stabs.c
+@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *, struct stab_handle *, const int *);
+ static bool stab_record_type
+   (void *, struct stab_handle *, const int *, debug_type);
+ static debug_type stab_xcoff_builtin_type
+-  (void *, struct stab_handle *, int);
++  (void *, struct stab_handle *, unsigned int);
+ static debug_type stab_find_tagged_type
+   (void *, struct stab_handle *, const char *, int, enum debug_type_kind);
+ static debug_type *stab_demangle_argtypes
+@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
+ 
+ static debug_type
+ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+-			 int typenum)
++			 unsigned int typenum)
+ {
+   debug_type rettype;
+   const char *name;
+ 
+-  if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
++  typenum = -typenum - 1;
++  if (typenum >= XCOFF_TYPE_COUNT)
+     {
+-      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
++      fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
+       return DEBUG_TYPE_NULL;
+     }
+-  if (info->xcoff_types[-typenum] != NULL)
+-    return info->xcoff_types[-typenum];
++  if (info->xcoff_types[typenum] != NULL)
++    return info->xcoff_types[typenum];
+ 
+-  switch (-typenum)
++  switch (typenum)
+     {
+-    case 1:
++    case 0:
+       /* The size of this and all the other types are fixed, defined
+ 	 by the debugging format.  */
+       name = "int";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 2:
++    case 1:
+       name = "char";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 3:
++    case 2:
+       name = "short";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 4:
++    case 3:
+       name = "long";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 5:
++    case 4:
+       name = "unsigned char";
+       rettype = debug_make_int_type (dhandle, 1, true);
+       break;
+-    case 6:
++    case 5:
+       name = "signed char";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 7:
++    case 6:
+       name = "unsigned short";
+       rettype = debug_make_int_type (dhandle, 2, true);
+       break;
+-    case 8:
++    case 7:
+       name = "unsigned int";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 9:
++    case 8:
+       name = "unsigned";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 10:
++    case 9:
+       name = "unsigned long";
+       rettype = debug_make_int_type (dhandle, 4, true);
+       break;
+-    case 11:
++    case 10:
+       name = "void";
+       rettype = debug_make_void_type (dhandle);
+       break;
+-    case 12:
++    case 11:
+       /* IEEE single precision (32 bit).  */
+       name = "float";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 13:
++    case 12:
+       /* IEEE double precision (64 bit).  */
+       name = "double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 14:
++    case 13:
+       /* This is an IEEE double on the RS/6000, and different machines
+ 	 with different sizes for "long double" should use different
+ 	 negative type numbers.  See stabs.texinfo.  */
+       name = "long double";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 15:
++    case 14:
+       name = "integer";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 16:
++    case 15:
+       name = "boolean";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 17:
++    case 16:
+       name = "short real";
+       rettype = debug_make_float_type (dhandle, 4);
+       break;
+-    case 18:
++    case 17:
+       name = "real";
+       rettype = debug_make_float_type (dhandle, 8);
+       break;
+-    case 19:
++    case 18:
+       /* FIXME */
+       name = "stringptr";
+       rettype = NULL;
+       break;
+-    case 20:
++    case 19:
+       /* FIXME */
+       name = "character";
+       rettype = debug_make_int_type (dhandle, 1, true);
+       break;
+-    case 21:
++    case 20:
+       name = "logical*1";
+       rettype = debug_make_bool_type (dhandle, 1);
+       break;
+-    case 22:
++    case 21:
+       name = "logical*2";
+       rettype = debug_make_bool_type (dhandle, 2);
+       break;
+-    case 23:
++    case 22:
+       name = "logical*4";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 24:
++    case 23:
+       name = "logical";
+       rettype = debug_make_bool_type (dhandle, 4);
+       break;
+-    case 25:
++    case 24:
+       /* Complex type consisting of two IEEE single precision values.  */
+       name = "complex";
+       rettype = debug_make_complex_type (dhandle, 8);
+       break;
+-    case 26:
++    case 25:
+       /* Complex type consisting of two IEEE double precision values.  */
+       name = "double complex";
+       rettype = debug_make_complex_type (dhandle, 16);
+       break;
+-    case 27:
++    case 26:
+       name = "integer*1";
+       rettype = debug_make_int_type (dhandle, 1, false);
+       break;
+-    case 28:
++    case 27:
+       name = "integer*2";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 29:
++    case 28:
+       name = "integer*4";
+       rettype = debug_make_int_type (dhandle, 4, false);
+       break;
+-    case 30:
++    case 29:
+       /* FIXME */
+       name = "wchar";
+       rettype = debug_make_int_type (dhandle, 2, false);
+       break;
+-    case 31:
++    case 30:
+       name = "long long";
+       rettype = debug_make_int_type (dhandle, 8, false);
+       break;
+-    case 32:
++    case 31:
+       name = "unsigned long long";
+       rettype = debug_make_int_type (dhandle, 8, true);
+       break;
+-    case 33:
++    case 32:
+       name = "logical*8";
+       rettype = debug_make_bool_type (dhandle, 8);
+       break;
+-    case 34:
++    case 33:
+       name = "integer*8";
+       rettype = debug_make_int_type (dhandle, 8, false);
+       break;
+@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
+     }
+ 
+   rettype = debug_name_type (dhandle, name, rettype);
+-
+-  info->xcoff_types[-typenum] = rettype;
+-
++  info->xcoff_types[typenum] = rettype;
+   return rettype;
+ }
+ 
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/gtk-introspection-test.patch b/gnu/packages/patches/gtk-introspection-test.patch
new file mode 100644
index 0000000000..570ea806a9
--- /dev/null
+++ b/gnu/packages/patches/gtk-introspection-test.patch
@@ -0,0 +1,22 @@
+# Extend rather than stomp environment variables.
+# Upstream status: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4268
+diff --git a/testsuite/introspection/meson.build b/testsuite/introspection/meson.build
+index 6202fb7446..b59191eb0f 100644
+--- a/testsuite/introspection/meson.build
++++ b/testsuite/introspection/meson.build
+@@ -1,9 +1,10 @@
++env = environment()
++env.prepend('GI_TYPELIB_PATH',
++    join_paths(project_build_root, 'gtk'),
++    gi_dep.get_pkgconfig_variable('typelibdir'))
++env.prepend('LD_PRELOAD', join_paths(project_build_root, 'gtk', 'libgtk-4.so'))
+ 
+ test('api',
+      find_program('api.py', dirs: meson.current_source_dir()),
+      suite: ['introspection'],
+-     env: [
+-       'GI_TYPELIB_PATH=@0@/gtk:@1@'.format(project_build_root,
+-          gi_dep.get_pkgconfig_variable('typelibdir')),
+-       'LD_PRELOAD=@0@/gtk/libgtk-4.so'.format(project_build_root),
+-     ])
++     env: env)
diff --git a/gnu/packages/patches/libtool-skip-tests2.patch b/gnu/packages/patches/libtool-skip-tests2.patch
index c9d61e3b41..3f86191b4f 100644
--- a/gnu/packages/patches/libtool-skip-tests2.patch
+++ b/gnu/packages/patches/libtool-skip-tests2.patch
@@ -1,4 +1,4 @@
-Skip the nopic test on ARM and MIPS systems.
+Skip the nopic test on ARM, MIPS and RISC-V systems.
 
 --- libtool-2.4.6/tests/demo.at.orig	2015-01-16 13:52:04.000000000 -0500
 +++ libtool-2.4.6/tests/demo.at	2015-02-16 10:48:51.435851966 -0500
@@ -7,7 +7,7 @@ Skip the nopic test on ARM and MIPS systems.
  
  AT_CHECK([case $host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
@@ -18,7 +18,7 @@ Skip the nopic test on ARM and MIPS systems.
  { set +x
  $as_echo "$at_srcdir/demo.at:535: case \$host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
@@ -27,7 +27,7 @@ Skip the nopic test on ARM and MIPS systems.
  at_fn_check_prepare_notrace 'a `...` command substitution' "demo.at:535"
  ( $at_check_trace; case $host in
 -hppa*|x86_64*|s390*)
-+hppa*|x86_64*|s390*|arm*|mips*)
++hppa*|x86_64*|s390*|arm*|mips*|riscv*)
    # These hosts cannot use non-PIC shared libs
    exit 77 ;;
  *-solaris*|*-sunos*)
diff --git a/gnu/packages/patches/shadow-hurd-pctrl.patch b/gnu/packages/patches/shadow-hurd-pctrl.patch
deleted file mode 100644
index 2e376e19a9..0000000000
--- a/gnu/packages/patches/shadow-hurd-pctrl.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Avoid including sys/prctl.h on the Hurd.
-
-Upstream status: Not submitted.
-
---- shadow-4.8.1/libmisc/idmapping.c.orig	2020-03-07 16:32:05.000000000 -0500
-+++ shadow-4.8.1/libmisc/idmapping.c	2020-03-07 16:32:27.000000000 -0500
-@@ -36,8 +36,8 @@
- #include <stdio.h>
- #include "prototypes.h"
- #include "idmapping.h"
--#include <sys/prctl.h>
- #if HAVE_SYS_CAPABILITY_H
-+#include <sys/prctl.h>
- #include <sys/capability.h>
- #endif
- 
diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm
index 47275a8ff0..b6b1e3ad85 100644
--- a/gnu/packages/pciutils.scm
+++ b/gnu/packages/pciutils.scm
@@ -87,8 +87,7 @@
 
                (("^IDSDIR=.*$")
                 ;; Installation directory of 'pci.ids.gz'.
-                "IDSDIR = $(SHAREDIR)/hwdata\n"))
-             #t))
+                "IDSDIR = $(SHAREDIR)/hwdata\n"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the commands, library, and .pc files.
@@ -111,9 +110,7 @@
     (native-inputs
      (list which pkg-config))
     (inputs
-     `(,@(if (member (or (%current-target-system)
-                         (%current-system))
-                     (package-supported-systems kmod))
+     `(,@(if (not (hurd-target?))
              `(("kmod" ,kmod))
              '())
        ,@(if (hurd-target?)
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index de4ad2582a..d4e97e1d82 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -632,8 +632,7 @@ by using the poppler rendering engine.")
             (files '("lib/zathura")))))
     (build-system meson-build-system)
     (arguments
-     `(#:meson ,meson-0.59
-       #:phases (modify-phases %standard-phases
+     `(#:phases (modify-phases %standard-phases
                   (add-before 'check 'start-xserver
                     ;; Tests require a running X server.
                     (lambda* (#:key inputs #:allow-other-keys)
diff --git a/gnu/packages/phabricator.scm b/gnu/packages/phabricator.scm
index b0d5a04a24..df9b369506 100644
--- a/gnu/packages/phabricator.scm
+++ b/gnu/packages/phabricator.scm
@@ -62,13 +62,7 @@
                    `("PATH" ":" prefix
                      (,@(map (lambda (i)
                                (string-append (assoc-ref %build-inputs i) "/bin"))
-                             '("php" "git" "mercurial" "subversion"))))))
-               #t))
-           (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
-             (lambda _
-               (for-each make-file-writable
-                         (find-files %output ".*\\.t?gz$"))
-               #t)))))
+                             '("php" "git" "mercurial" "subversion")))))))))))
       (inputs
        (list php git mercurial subversion))
       (home-page "https://github.com/phacility/arcanist")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 913e1070f7..a05fd166b8 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -622,7 +622,6 @@ such as Batch image processing.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
-       #:meson ,meson-0.59                     ;fails to build with Meson 0.60
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index 1db5a6b335..2abb781f76 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -26,6 +26,7 @@
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages))
@@ -41,14 +42,14 @@
 (define-public python-wheel
   (package
     (name "python-wheel")
-    (version "0.33.6")
+    (version "0.37.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "wheel" version))
         (sha256
          (base32
-          "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
+          "1bbga5i49rj1cwi4sjpkvfhl1f8vl9lfky2lblsy768nk4wp5vz2"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
@@ -92,6 +93,38 @@ installed with a newer @code{pip} or with wheel's own command line utility.")
 Language (TOML) configuration files.")
     (license license:expat)))
 
+(define-public python-tomli-w
+  (package
+    (name "python-tomli-w")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "tomli_w" version))
+       (sha256
+        (base32 "1fg13bfq5qy1ym4x77815nhxh1xpfs0drhn9r9464cz00m1l6qzl"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;to avoid extra dependencies
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs (list python-pypa-build python-flit-core))
+    (home-page "https://github.com/hukkin/tomli-w")
+    (synopsis "Minimal TOML writer")
+    (description "Tomli-W is a Python library for writing TOML.  It is a
+write-only counterpart to Tomli, which is a read-only TOML parser.")
+    (license license:expat)))
+
 (define-public python-pytoml
   (package
     (name "python-pytoml")
@@ -138,13 +171,13 @@ Python file, so it can be easily copied into your project.")
 (define-public python-tomli
   (package
     (name "python-tomli")
-    (version "1.2.2")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tomli" version))
        (sha256
-        (base32 "1vjg44narb7hdiazdmbv8bfv7pi6phnq7nxm6aphx0iqxcah1kn6"))))
+        (base32 "1q8lrh9ypa6zpgbc5f7z23p7phzblp4vpxdrpfr1wajhb17w74n2"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f                      ;disabled to avoid extra dependencies
@@ -163,7 +196,7 @@ Python file, so it can be easily copied into your project.")
                (invoke "pip" "--no-cache-dir" "--no-input"
                        "install" "--no-deps" "--prefix" out whl)))))))
     (native-inputs
-     `(("python-flit-core" ,python-flit-core)
+     `(("python-flit-core-bootstrap" ,python-flit-core-bootstrap)
        ("python-pypa-build" ,python-pypa-build)
        ("python-six", python-six-bootstrap)))
     (home-page "https://github.com/hukkin/tomli")
@@ -199,13 +232,13 @@ Python file, so it can be easily copied into your project.")
 (define-public python-pyparsing
   (package
     (name "python-pyparsing")
-    (version "2.4.7")
+    (version "3.0.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyparsing" version))
        (sha256
-        (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))
+        (base32 "109b9r802wb472hgmxclljprh5cid0w3p6mk9alba7pg2c0frgfr"))))
     (build-system python-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -234,8 +267,10 @@ Python file, so it can be easily copied into your project.")
 executing simple grammars, vs. the traditional lex/yacc approach, or the use
 of regular expressions.  The pyparsing module provides a library of classes
 that client code uses to construct the grammar directly in Python code.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pyparsing))))))
 
+;;; This is the last release compatible with Python 2.
 (define-public python-pyparsing-2.4.7
   (package
     (inherit python-pyparsing)
@@ -248,22 +283,19 @@ that client code uses to construct the grammar directly in Python code.")
         (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
 
 (define-public python2-pyparsing
-  (package-with-python2 python-pyparsing))
+  (package-with-python2 (strip-python2-variant python-pyparsing-2.4.7)))
 
 (define-public python-packaging-bootstrap
   (package
     (name "python-packaging-bootstrap")
-    (version "20.0")
+    (version "21.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "packaging" version))
-       ;; XXX: The URL in the patch file is wrong, it should be
-       ;; <https://github.com/pypa/packaging/pull/256>.
-       (patches (search-patches "python-packaging-test-arch.patch"))
        (sha256
         (base32
-         "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
+         "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))         ;disabled to avoid extra dependencies
     (propagated-inputs
@@ -280,7 +312,19 @@ information.")
     (license (list license:asl2.0 license:bsd-2))))
 
 (define-public python2-packaging-bootstrap
-  (package-with-python2 python-packaging-bootstrap))
+  (let ((base (package-with-python2 python-packaging-bootstrap)))
+    (package/inherit base
+      (version "20.0")                  ;last version with Python 2 support
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "packaging" version))
+         ;; XXX: The URL in the patch file is wrong, it should be
+         ;; <https://github.com/pypa/packaging/pull/256>.
+         (patches (search-patches "python-packaging-test-arch.patch"))
+         (sha256
+          (base32
+           "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy")))))))
 
 ;;; The name 'python-pypa-build' is chosen rather than 'python-build' to avoid
 ;;; a name clash with python-build from (guix build-system python).
@@ -336,16 +380,17 @@ a light weight, fully compliant, self-contained package allowing PEP 517
 compatible build front-ends to build Poetry managed projects.")
     (license license:expat)))
 
-(define-public python-flit-core
+;;; This package exists to bootstrap python-tomli.
+(define-public python-flit-core-bootstrap
   (package
-    (name "python-flit-core")
-    (version "3.4.0")
+    (name "python-flit-core-bootstrap")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "flit" version))
        (sha256
-        (base32 "10vjqnybvjdqdbmyc0asbhhvq51yjnnj00645yiq9849gnr8h0ir"))))
+        (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-toml))
@@ -376,3 +421,10 @@ compatible build front-ends to build Poetry managed projects.")
 backend for packages using Flit.  The only public interface is the API
 specified by PEP 517, @code{flit_core.buildapi}.")
     (license license:bsd-3)))
+
+(define-public python-flit-core
+  (package/inherit python-flit-core-bootstrap
+    (name "python-flit-core")
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs python-flit-core-bootstrap)
+       (replace "python-toml" python-tomli)))))
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index afb2caf13b..e7f008e112 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -28,6 +28,7 @@
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
@@ -416,6 +417,38 @@ wrapper.  It provides a backport of the @code{Path} object.")
     (native-inputs
      `(("python-setuptools-scm" ,python2-setuptools-scm))))))
 
+(define-public python-zopfli
+  (package
+    (name "python-zopfli")
+    (version "0.1.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "zopfli" version ".zip"))
+       (sha256
+        (base32 "0yqdwvlpbvhhri0qmzag076ddi0sv43qjlk17l0siylfib03rpkq"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'use-system-zopfli
+                     (lambda _
+                       (setenv "USE_SYSTEM_ZOPFLI" "1")))
+                   (add-before 'build 'set-version
+                     (lambda _
+                       (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (invoke "python" "tests/tests.py" "-v")))))))
+    (native-inputs (list unzip python-setuptools-scm))
+    (inputs (list zopfli))
+    (home-page "https://github.com/fonttools/py-zopfli")
+    (synopsis "Python bindings for Zopfli")
+    (description "@code{pyzopfli} is a straight forward wrapper around the
+@code{ZlibCompress} method of the the @code{zopfli} library.")
+    (license license:asl2.0)))
+
 (define-public python-zstandard
   (package
     (name "python-zstandard")
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 1ecd4fbc7a..1cfc8e5869 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016-2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
@@ -330,13 +330,13 @@ of the SGP4 satellite tracking algorithm.")
 (define-public python-pandas
   (package
     (name "python-pandas")
-    (version "1.3.4")
+    (version "1.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pandas" version))
        (sha256
-        (base32 "1z3gm521wpm3j13rwhlb4f2x0645zvxkgxij37i3imdpy39iiam2"))))
+        (base32 "1wd92ra8xcjgigbypid53gvby89myg68ica6r8hdw4hhvvsqahhy"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -373,23 +373,23 @@ of the SGP4 satellite tracking algorithm.")
                    (invoke "pytest" "-vv" "pandas" "--skip-slow"
                            "--skip-network"
                            "-k"
-                           ;; These tets access the internet:
-                           ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
-                           ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
-                           ;; TODO: the excel tests fail for unknown reasons
-                           (string-append "not test_wrong_url"
-                                          " and not test_excelwriter_fspath"
-                                          " and not test_ExcelWriter_dispatch"
-                                          ;; TODO: Missing input
-                                          " and not TestS3"
-                                          " and not s3"))))))))))
+                           (string-append
+                            ;; These test access the internet (see:
+                            ;; https://github.com/pandas-dev/pandas/issues/45085).:
+                            ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[lxml]
+                            ;; pandas/tests/io/xml/test_xml.py::test_wrong_url[etree]
+                            "not test_wrong_url"
+                            ;; TODO: Missing input
+                            " and not TestS3"
+                            " and not s3"))))))))))
     (propagated-inputs
      (list python-jinja2
            python-numpy
            python-openpyxl
            python-pytz
            python-dateutil
-           python-xlrd))
+           python-xlrd
+           python-xlsxwriter))
     (inputs
      (list which xclip xsel))
     (native-inputs
@@ -397,7 +397,6 @@ of the SGP4 satellite tracking algorithm.")
            python-beautifulsoup4
            python-lxml
            python-html5lib
-           python-nose
            python-pytest
            python-pytest-mock
            ;; Needed to test clipboard support.
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 708528983c..997b98e2a9 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -689,7 +689,7 @@ other HTTP libraries.")
      '(#:tests? #f))
     (propagated-inputs
      (list python-colorama python-pygments python-requests
-           python-requests-toolbelt-0.9.1))
+           python-requests-toolbelt))
     (home-page "https://httpie.io")
     (synopsis "cURL-like tool for humans")
     (description
@@ -2667,14 +2667,23 @@ portions of your testing code.")
 (define-public python-requests-toolbelt
   (package
     (name "python-requests-toolbelt")
-    (version "0.8.0")
+    (version "0.9.1")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "requests-toolbelt" version))
              (sha256
               (base32
-               "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
+               "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'delete-problematic-tests
+                    (lambda _
+                      ;; Fails because of expired certificate.
+                      (delete-file "tests/test_x509_adapter.py")
+                      ;; Fails due to networking (socket.gaierror: [Errno -2]
+                      ;; Name or service not known).
+                      (delete-file "tests/test_multipart_encoder.py"))))))
     (native-inputs
      (list python-betamax python-mock python-pytest))
     (propagated-inputs
@@ -2682,26 +2691,9 @@ portions of your testing code.")
     (synopsis "Extensions to python-requests")
     (description "This is a toolbelt of useful classes and functions to be used
 with python-requests.")
-    (home-page "https://github.com/sigmavirus24/requests-toolbelt")
+    (home-page "https://github.com/requests/toolbelt/")
     (license license:asl2.0)))
 
-(define-public python2-requests-toolbelt
-  (package-with-python2 python-requests-toolbelt))
-
-(define-public python-requests-toolbelt-0.9.1
-  (package
-    (inherit python-requests-toolbelt)
-    (version "0.9.1")
-    (source (origin
-             (method url-fetch)
-             (uri (pypi-uri "requests-toolbelt" version))
-             (sha256
-              (base32
-               "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
-    (arguments
-     `(;; FIXME: Some tests require network access.
-       #:tests? #f))))
-
 (define-public python-requests-ftp
   (package
     (name "python-requests-ftp")
@@ -3223,7 +3215,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
 (define-public python-cachecontrol
   (package
     (name "python-cachecontrol")
-    (version "0.12.5")
+    (version "0.12.10")
     (source
      (origin
        (method git-fetch)
@@ -3234,7 +3226,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
+         "0fviacb13h72l5c77p35lgr6kvlidfdb9xsicg3v6lblmp9cn2ws"))))
     (build-system python-build-system)
     (arguments
      ;; Versions > 0.11.6 depend on CherryPy for testing.
@@ -5960,7 +5952,7 @@ Encoding for HTTP.")
      (list python-js2py
            python-polling2
            python-requests
-           python-requests-toolbelt-0.9.1
+           python-requests-toolbelt
            python-responses
            python-pyparsing-2.4.7))
     (native-inputs
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 80ce58400a..42670f34c3 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -2400,7 +2400,7 @@ of @code{xmlfile}.")
 (define-public python-openpyxl
   (package
     (name "python-openpyxl")
-    (version "3.0.5")
+    (version "3.0.9")
     (source
      (origin
        ;; We use the upstream repository, as the tests are not included in the
@@ -2411,7 +2411,7 @@ of @code{xmlfile}.")
              (changeset version)))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "0s6fgwwkcfz1bnrp5gjd4g2lcbl4a76147ylkrmkbabi2nf4xlli"))))
+        (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -6333,17 +6333,19 @@ comparison.
 (define-public python-matplotlib
   (package
     (name "python-matplotlib")
-    (version "3.4.3")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "matplotlib" version))
        (sha256
-        (base32 "06032j0ccjxldx4z9kf97qps2g36mfgvy1nap3b9n75kzmnm4kzw"))))
+        (base32 "076f8qi265x8jy89c03r3vv5h4is4ir5mawwrrrpp96314783sdj"))))
     (build-system python-build-system)
-    (propagated-inputs ; the following packages are all needed at run time
+    (propagated-inputs     ; the following packages are all needed at run time
      `(("python-cycler" ,python-cycler)
+       ("python-fonttools" ,python-fonttools)
        ("python-kiwisolver" ,python-kiwisolver)
+       ("python-packaging" ,python-packaging)
        ("python-pyparsing" ,python-pyparsing)
        ("python-pygobject" ,python-pygobject)
        ("python-certifi" ,python-certifi)
@@ -6354,6 +6356,7 @@ comparison.
        ("python-pillow" ,python-pillow)
        ("python-pytz" ,python-pytz)
        ("python-six" ,python-six)
+       ("python-wxpython" ,python-wxpython)
        ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
        ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
        ;; object. For this reason we need to import both libraries.
@@ -6366,101 +6369,87 @@ comparison.
            qhull
            cairo
            glib
-           ;; FIXME: Add backends when available.
-           ;("python-wxpython" ,python-wxpython)
            tcl
            tk))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-wheel" ,python-wheel)
-       ("unzip" ,unzip)
-       ("jquery-ui"
-        ,(origin
-           (method url-fetch)
-           (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
-           (sha256
-            (base32
-             "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
+       ("python-pytest-timeout" ,python-pytest-timeout)
+       ("python-pytest-xdist" ,python-pytest-xdist)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; XXX We disable all image comparison tests because we're using a
-         ;; newer version of FreeType than matplotlib expects.  This leads to
-         ;; minor differences throughout the tests.
-         (add-after 'unpack 'fix-and-disable-failing-tests
-           (lambda _
-             (substitute* (append (find-files "lib/matplotlib/tests/"
-                                              "test_.*\\.py$")
-                                  (find-files "lib/mpl_toolkits/tests"
-                                              "test_.*\\.py$"))
-               (("^from matplotlib" match)
-                (string-append "import pytest\n" match))
-               (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
-                 indent)
-                (string-append indent
-                               "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
-                               match)))
-             (substitute* "lib/matplotlib/tests/test_animation.py"
-               (("/bin/sh") (which "sh")))
-             (for-each delete-file
-                       ;; test_normal_axes, test_get_tightbbox_polar
-                       '("lib/matplotlib/tests/test_axes.py"
-                         "lib/matplotlib/tests/test_polar.py"
-                         ;; We don't use the webagg backend and this test
-                         ;; forces it.
-                         "lib/matplotlib/tests/test_backend_webagg.py"
-                         ;; test_outward_ticks
-                         "lib/matplotlib/tests/test_tightlayout.py"
-                         ;; test_hidden_axes fails with minor extent
-                         ;; differences, possibly due to the use of a
-                         ;; different version of FreeType.
-                         "lib/matplotlib/tests/test_constrainedlayout.py"
-                         ;; Fontconfig returns no fonts.
-                         "lib/matplotlib/tests/test_font_manager.py"))
-             #t))
-         (add-before 'install 'install-jquery-ui
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let* ((python-version (python-version
-                                      (assoc-ref inputs "python")))
-                    (dir
-                     (string-append (assoc-ref outputs "out")
-                                    "/lib/python" python-version
-                                    "/site-packages"
-                                    "/matplotlib/backends/web_backend/")))
-               (mkdir-p dir)
-               (invoke "unzip"
-                       (assoc-ref inputs "jquery-ui")
-                       "-d" dir))
-             #t))
-         (replace 'check
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "python" "tests.py" "-v"
-                     "-m" "not network and not webagg")))
-         (add-before 'build 'configure-environment
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let ((cairo (assoc-ref inputs "cairo")))
-               ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
-               ;; has not effect.
-               (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
-               (setenv "HOME" (getcwd))
-               ;; Fix rounding errors when using the x87 FPU.
-               (when (string-prefix? "i686" ,(%current-system))
-                 (setenv "CFLAGS" "-ffloat-store"))
-               (call-with-output-file "setup.cfg"
-                 (lambda (port)
-                   (format port "[libs]~%
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'pretend-version
+            ;; The version string is usually derived via setuptools-scm, but
+            ;; without the git metadata available, the version string is set to
+            ;; '0.0.0'.
+            (lambda _
+              (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
+          (add-after 'unpack 'fix-and-disable-failing-tests
+            ;; XXX: Disable all image comparison tests because we're using a
+            ;; newer version of FreeType than matplotlib expects.  This leads
+            ;; to minor differences throughout the tests.
+            (lambda _
+              (substitute* (append (find-files "lib/matplotlib/tests/"
+                                               "test_.*\\.py$")
+                               (find-files "lib/mpl_toolkits/tests"
+                                           "test_.*\\.py$"))
+                (("^from matplotlib" match)
+                 (string-append "import pytest\n" match))
+                (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
+                  indent)
+                 (string-append indent "@pytest.mark.skip(\
+reason=\"unknown minor image differences\")\n" match)))
+              (substitute* "lib/matplotlib/tests/test_animation.py"
+                (("/bin/sh") (which "sh")))
+              (for-each delete-file
+                        ;; test_normal_axes, test_get_tightbbox_polar
+                        '("lib/matplotlib/tests/test_axes.py"
+                          "lib/matplotlib/tests/test_polar.py"
+                          ;; We don't use the webagg backend and this test
+                          ;; forces it.
+                          "lib/matplotlib/tests/test_backend_webagg.py"
+                          ;; test_outward_ticks
+                          "lib/matplotlib/tests/test_tightlayout.py"
+                          ;; test_hidden_axes fails with minor extent
+                          ;; differences, possibly due to the use of a
+                          ;; different version of FreeType.
+                          "lib/matplotlib/tests/test_constrainedlayout.py"
+                          ;; Fontconfig returns no fonts.
+                          "lib/matplotlib/tests/test_font_manager.py"))))
+          (add-before 'build 'configure-environment
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Fix rounding errors when using the x87 FPU.
+              (when (string-prefix? "i686" #$(%current-system))
+                (setenv "CFLAGS" "-ffloat-store"))
+              (call-with-output-file "mplsetup.cfg"
+                (lambda (port)
+                  (format port "\
+[libs]
 system_freetype = true
 system_qhull = true
-[directories]~%
-basedirlist = ~a,~a~%
-[packages]~%
-tests = True~%"
-                        (assoc-ref inputs "tcl")
-                        (assoc-ref inputs "tk")))))
-             #t)))))
+
+[rc_options]
+backend=Agg
+
+[directories]
+basedirlist = ~a,~a
+
+[packages]
+tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; Step out of the source directory to avoid interference.
+                (with-directory-excursion "/tmp"
+                  ;; Run the installed tests, which is what we want since not
+                  ;; everything gets built in the source directory.
+                  (invoke "pytest"
+                          "-n" (number->string (parallel-job-count))
+                          "-m" "not network" "--pyargs" "matplotlib"))))))))
     (home-page "https://matplotlib.org/")
     (synopsis "2D plotting library for Python")
     (description
@@ -6475,53 +6464,47 @@ toolkits.")
 (define-public python2-matplotlib
   (let ((matplotlib (package-with-python2
                      (strip-python2-variant python-matplotlib))))
-    (package (inherit matplotlib)
-      (version "2.2.4")
+    (package/inherit matplotlib
+      (version "2.2.5")
       (source
        (origin
          (method url-fetch)
          (uri (pypi-uri "matplotlib" version))
          (sha256
           (base32
-           "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
+           "1sk05fdai9rw35l983rw2ymvz0nafs7szs7yz4nxrpyr1j27l0x3"))))
       (arguments
        (substitute-keyword-arguments (package-arguments matplotlib)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (replace 'install-jquery-ui
-               (lambda* (#:key outputs inputs #:allow-other-keys)
-                 (let ((dir (string-append (assoc-ref outputs "out")
-                                           "/lib/python2.7/site-packages/"
-                                           "matplotlib/backends/web_backend/")))
-                   (mkdir-p dir)
-                   (invoke "unzip"
-                           (assoc-ref inputs "jquery-ui")
-                           "-d" dir))))
-             ;; Without this file mpl_toolkits cannot be imported.
-             (add-after 'install 'create-init-file
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (with-output-to-file
-                     (string-append
-                      (assoc-ref outputs "out")
-                      "/lib/python2.7/site-packages/mpl_toolkits/__init__.py")
-                   (lambda _ (display "")))))
-             (delete 'fix-and-disable-failing-tests)
-             (delete 'check))))) ; These tests weren't run the the past.
-      ;; Make sure to use special packages for Python 2 instead
-      ;; of those automatically rewritten by package-with-python2.
+          #~(modify-phases #$phases
+              (add-after 'install 'create-init-file
+                (lambda _
+                  (with-output-to-file
+                      (string-append
+                       #$output
+                       "/lib/python2.7/site-packages/mpl_toolkits/__init__.py")
+                    (lambda _ (display "")))))
+              (delete 'fix-and-disable-failing-tests)
+              (delete 'check)))))      ; These tests weren't run the the past.
+      (native-inputs
+       `(("pkg-config" ,pkg-config)))
       (propagated-inputs
-       `(("python2-pycairo" ,python2-pycairo)
-         ("python2-backports-functools-lru-cache"
-          ,python2-backports-functools-lru-cache)
+       `(("gobject-introspection" ,gobject-introspection)
+         ("python2-backports-functools-lru-cache" ,python2-backports-functools-lru-cache)
+         ("python2-certifi" ,python2-certifi)
+         ("python2-cycler" ,python2-cycler)
+         ("python2-dateutil" ,python2-dateutil)
          ("python2-functools32" ,python2-functools32)
+         ("python2-kiwisolver" ,python2-kiwisolver)
+         ("python2-numpy" ,python2-numpy)
+         ("python2-pillow" ,python2-pillow)
+         ("python2-pycairo" ,python2-pycairo)
          ("python2-pygobject-2" ,python2-pygobject-2)
+         ("python2-pyparsing" ,python2-pyparsing)
+         ("python2-pytz" ,python2-pytz)
+         ("python2-six" ,python2-six)
          ("python2-subprocess32" ,python2-subprocess32)
-         ("python2-tkinter" ,python-2 "tk")
-         ,@(fold alist-delete (package-propagated-inputs matplotlib)
-                 '("python-cairocffi"
-                   "python-pycairo"
-                   "python-pygobject"
-                   "python-tkinter")))))))
+         ("python2-tkinter" ,python-2 "tk"))))))
 
 (define-public python-matplotlib-documentation
   (package
@@ -9259,27 +9242,17 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
 (define-public python-beautifulsoup4
   (package
     (name "python-beautifulsoup4")
-    (version "4.9.3")
+    (version "4.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "beautifulsoup4" version))
        (sha256
         (base32
-         "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
+         "14c8z4gh9bi38agx9ls8ym5rscc02pc6f6hmliaqk08xa8yd4fn2"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; The Python 2 source is the definitive source of beautifulsoup4. We
-         ;; must use this conversion script when building with Python 3. The
-         ;; conversion script also runs the tests.
-         ;; For more information, see the file 'convert-py3k' in the source
-         ;; distribution.
-         (replace 'check
-           (lambda _ (invoke "./convert-py3k"))))))
     (propagated-inputs
-     (list python-soupsieve))
+     (list python-soupsieve python-html5lib python-lxml))
     (home-page
      "https://www.crummy.com/software/BeautifulSoup/bs4/")
     (synopsis
@@ -9296,8 +9269,16 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
 (define-public python2-beautifulsoup4
   (let ((base (package-with-python2
                (strip-python2-variant python-beautifulsoup4))))
-   (package/inherit base
-     (arguments `(#:python ,python-2)))))
+    (package/inherit base
+      (version "4.9.3")                 ;last version to support Python 2
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "beautifulsoup4" version))
+         (sha256
+          (base32
+           "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
+      (arguments `(#:python ,python-2)))))
 
 (define-public python-soupsieve
   (package
@@ -10834,28 +10815,170 @@ add functionality and customization to your projects with their own plugins.")
 (define-public python2-straight-plugin
   (package-with-python2 python-straight-plugin))
 
-(define-public python-fonttools
+(define-public python-pysendfile
   (package
-    (name "python-fonttools")
-    (version "4.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "fonttools" version ".zip"))
-              (sha256
-               (base32
-                "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
+    (name "python-pysendfile")
+    (version "2.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pysendfile" version))
+       (sha256
+        (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
     (build-system python-build-system)
-    (native-inputs
-     (list unzip python-pytest python-pytest-runner))
-    (home-page "https://github.com/fonttools/fonttools")
-    (synopsis "Tools to manipulate font files")
-    (description
-     "FontTools/TTX is a library to manipulate font files from Python.  It
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (setenv "HOME" "/tmp")
+                         (invoke "make" "test")))))))
+    (home-page "https://github.com/giampaolo/pysendfile")
+    (synopsis "Python interface to sendfile(2)")
+    (description "The @{pysendfile} Python library provides an interface to
+the @code{sendfile(2)} system call.")
+    (license license:expat)))
+
+(define-public python-pyftpdlib
+  (package
+    (name "python-pyftpdlib")
+    (version "1.5.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyftpdlib" version))
+       (sha256
+        (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke
+                 "pytest"
+                 ;; Deselect failing tests.
+                 "-k" (string-append
+                       ;; Using Pytest instead of the Makefile causes the
+                       ;; command line tests to fail on unknown Pytest
+                       ;; arguments.
+                       "not TestCommandLineParser "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/478
+                       "and not test_use_gmt_times "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/550
+                       "and not test_masquerade_address "
+                       ;; https://github.com/giampaolo/pyftpdlib/issues/500
+                       "and not test_rest_on_stor "
+                       "and not test_stor_ascii"))))))))
+    (native-inputs (list python-psutil python-pytest))
+    (propagated-inputs (list python-pyopenssl python-pysendfile))
+    (home-page "https://github.com/giampaolo/pyftpdlib/")
+    (synopsis "Asynchronous and scalable Python FTP server library")
+    (description "The Python FTP server library provides a high-level
+interface to write efficient, scalable and asynchronous FTP servers with
+Python.  It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
+RFC-959} FTP server implementation available for Python, and has the following
+traits:
+@itemize
+@item
+It is lightweight, fast and scalable.
+@item
+It uses the @code{sendfile(2)} system call for uploads.
+@item
+It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
+asynchronously.
+@item
+It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
+IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
+RFC-2640}) and MLSD/MLST commands (RFC-3659).
+@item
+It has a flexible system of @samp{authorizers} able to manage both
+@samp{virtual} and @samp{real} users.
+@end itemize")
+    (license license:expat)))
+
+(define-public python-fs
+  (package
+    (name "python-fs")
+    (version "2.4.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fs" version))
+       (sha256
+        (base32 "0v5kqzi0vd8ar4j4qf5440nzwa9dcagpxb3q6k0cln4cqlmxqmcm"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (replace 'check
+                     (lambda* (#:key tests? #:allow-other-keys)
+                       (when tests?
+                         (setenv "HOME" "/tmp")
+                         (invoke "pytest" "-m" "not slow")))))))
+    (propagated-inputs
+     (list python-appdirs python-pytz python-typing python-six))
+    (native-inputs
+     (list python-mock python-parameterized python-pyftpdlib python-pytest))
+    (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
+    (synopsis "File system abstraction layer for Python")
+    (description "PyFilesystem's @code{FS} object is a file system abstraction
+sharing similarities with Python's own @code{file} object for single files.
+It allows opening all the files under a given directory recursively, as a
+single @code{FS} object.  This enables, for example, counting the combined
+number of lines in the contained files easily.")
+    (license license:expat)))
+
+;;; Tests are left out in the main package to avoid cycles.
+(define-public python-fonttools
+  (hidden-package
+   (package
+     (name "python-fonttools")
+     (version "4.28.5")
+     (source (origin
+               (method url-fetch)
+               (uri (pypi-uri "fonttools" version ".zip"))
+               (sha256
+                (base32
+                 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
+     (build-system python-build-system)
+     (native-inputs
+      (list unzip))
+     (arguments '(#:tests? #f))
+     (home-page "https://github.com/fonttools/fonttools")
+     (synopsis "Tools to manipulate font files")
+     (description
+      "FontTools/TTX is a library to manipulate font files from Python.  It
 supports reading and writing of TrueType/OpenType fonts, reading and writing
 of AFM files, reading (and partially writing) of PS Type 1 fonts.  The package
 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
 from an XML-based format.")
-    (license license:expat)))
+     (license license:expat)
+     (properties `((python2-variant . ,(delay python2-fonttools)))))))
+
+(define-public python-fonttools-with-tests
+  (package/inherit python-fonttools
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-fonttools)
+       ((#:tests? _ #f)
+        #t)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "pytest"))))))))
+    (native-inputs
+     (modify-inputs (package-inputs python-fonttools)
+       (append python-pytest            ;FIXME: indentation is broken
+           python-brotli
+         python-fs
+         python-scipy
+         python-zopfli)))
+    (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
 
 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
 (define-public python2-fonttools
@@ -10966,13 +11089,13 @@ third-party code.")
 (define-public python-msgpack
   (package
     (name "python-msgpack")
-    (version "1.0.0")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "msgpack" version))
               (sha256
                (base32
-                "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
+                "07m84yisf8m6gr68ip9v6vzxax7kqbn8qxg7ir18clk1jgxwgzai"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -11244,23 +11367,20 @@ native modules.")
 (define-public python-xlrd
   (package
     (name "python-xlrd")
-    (version "1.2.0")
+    (version "2.0.1")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "xlrd" version))
+              ;; The tests are not included in the PyPI archive.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/python-excel/xlrd")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
+                "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Some tests depend on writing a temporary file to the user's home
-         ;; directory.
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             (delete-file "tests/test_open_workbook.py")
-             #t)))))
+    (native-inputs
+     (list python-pytest))
     (home-page "http://www.python-excel.org/")
     (synopsis "Library for extracting data from Excel files")
     (description "This package provides a library to extract data from
@@ -11272,6 +11392,7 @@ Unicode-aware.  It is not intended as an end-user tool.")
 (define-public python2-xlrd
   (package-with-python2 python-xlrd))
 
+;;; Note: this package is unmaintained since 2018 (archived on GitHub).
 (define-public python-xlwt
   (package
     (name "python-xlwt")
@@ -11361,11 +11482,16 @@ printing of sub-tables by specifying a row range.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv" "-k"
-                     ;; Tries to open an outgoing connection.
-                     "not test_ssl_outgoing"))))))
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "-vv" "-k"
+                       (string-append
+                        ;; Tries to open an outgoing connection.
+                        "not test_ssl_outgoing "
+                        ;; This test fails since Python 3.9.9 (see:
+                        ;; https://github.com/dabeaz/curio/issues/347).
+                        "and not test_timeout"))))))))
     (native-inputs
      (list python-pytest))
     (home-page "https://github.com/dabeaz/curio")
@@ -15011,13 +15137,7 @@ module, adding support for Unicode strings.")
              #t))
          (replace 'check
            (lambda _
-             (invoke "make" "test")))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))
-               #t))))))
+             (invoke "make" "test"))))))
     (propagated-inputs
      (list python-chardet python-cryptography python-sortedcontainers))
     (native-inputs
@@ -16172,29 +16292,25 @@ database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
 (define-public poetry
   (package
     (name "poetry")
-    (version "1.1.11")
-    ;; Poetry can only be built from source with Poetry.
+    (version "1.1.12")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "poetry" version))
        (sha256
         (base32
-         "17pnf2j4adlm9fhyg5jkkvs8bzcigb6nj72vr0687fxybzsj4zbx"))))
+         "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ;; Pypi does not have tests.
+     `(#:tests? #f                      ;PyPI does not have tests
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'patch-setup-py
            (lambda _
              (substitute* "setup.py"
-               ;; Allow newer versions of python-keyring.
+               ;; Relax some of the requirements.
                (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
-               ;; TODO: remove after the next release cycle,
-               ;; when packaging has been updated.
-               (("packaging>=20.4,<21.0") "packaging>=20.0,<21.0"))
-             #t)))))
+               (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
     (propagated-inputs
      (list python-cachecontrol
            python-cachy
@@ -16212,7 +16328,7 @@ database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
            python-pkginfo
            python-poetry-core
            python-requests
-           python-requests-toolbelt-0.9.1
+           python-requests-toolbelt
            python-shellingham
            python-tomlkit
            python-virtualenv))
@@ -18478,7 +18594,7 @@ multitouch applications.")
 (define-public python-astroid
   (package
     (name "python-astroid")
-    (version "2.6.6")
+    (version "2.9.0")
     (source
      (origin
        (method git-fetch)
@@ -18487,12 +18603,12 @@ multitouch applications.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1amzf996inwmh4r3mlpzmch60xs6lrg86vppfnwl1y0l8r0y7zxh"))))
+        (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-lazy-object-proxy python-wrapt))
     (native-inputs
-     (list python-pytest python-pytest-runner))
+     (list python-pytest python-pytest-runner python-typing-extensions))
     (home-page "https://github.com/PyCQA/astroid")
     (synopsis "Common base representation of python source code for pylint and
      other projects")
@@ -18505,43 +18621,7 @@ multitouch applications.")
      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))))))
-
-(define-public python2-astroid
-  (let ((base (package-with-python2
-               (strip-python2-variant python-astroid))))
-    (package (inherit base)
-    ;; Version 2.x removes python2 support.
-    (version "1.6.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "astroid" version))
-       (sha256
-        (base32
-         "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
-    (arguments
-     `(#:python ,python-2
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-spurious-test
-           (lambda _
-             ;; https://github.com/PyCQA/astroid/issues/276
-             (delete-file "astroid/tests/unittest_brain.py")))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "python" "-m" "unittest" "discover"
-                       "-p" "unittest*.py")))))))
-    (native-inputs `())
-    (propagated-inputs
-     (list python2-backports-functools-lru-cache
-           python2-enum34
-           python2-lazy-object-proxy
-           python2-singledispatch
-           python2-six
-           python2-wrapt)))))
+    (license license:lgpl2.1+)))
 
 (define-public python-isbnlib
   (package
@@ -21169,7 +21249,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.2")
+    (version "1.5.1")
     (source
      (origin
        (method git-fetch)
@@ -21177,7 +21257,7 @@ 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 "1wr6pkvvrq6rzjjw88pd5xy8fy06msam4hlxbkglvdmwh4c083l0"))
+        (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
        (file-name (git-file-name name version))))
     (build-system python-build-system)
     (arguments
@@ -21257,13 +21337,13 @@ Python 3.6+ type hints.")
 (define-public python-typing
   (package
     (name "python-typing")
-    (version "3.7.4.3")
+    (version "3.10.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "typing" version))
        (sha256
-        (base32 "1j8wnz8c9s049w9xbf7ssr1dmgg4rz7vdfq7m880srzxhafgp1qi"))))
+        (base32 "0c5il4d68fd4qrm5k3dps70j0xz0n5krj6lhwn9vzpal3whsvd0k"))))
     (build-system python-build-system)
     (home-page "https://docs.python.org/3/library/typing.html")
     (synopsis "Type hints for Python")
@@ -21281,17 +21361,41 @@ and other tools.")
 (define-public python-typing-extensions
   (package
     (name "python-typing-extensions")
-    (version "3.10.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "typing_extensions" version))
-       (sha256
-        (base32
-         "0zk7kbcms828by6avmqp09bsag1az37qr60viqjwvw8izwb5vxs9"))))
+    (version "4.0.1")
+    (source (origin
+              ;; The test script is missing from the PyPI archive.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/python/typing")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
     (build-system python-build-system)
-    (home-page
-     "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
+    (arguments
+     (list
+      #:tests? #f       ;requires Python's test module, not available in Guix
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'enter-source-directory
+            (lambda _
+              (chdir "typing_extensions")))
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "python" "src/test_typing_extensions.py"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs (list python-pypa-build python-flit-core))
+    (home-page "https://github.com/python/typing/typing_extensions")
     (synopsis "Experimental type hints for Python")
     (description
      "The typing_extensions module contains additional @code{typing} hints not
@@ -24341,92 +24445,52 @@ the syntactic logic to configure and launch jobs in an execution environment.")
 (define-public python-flit
   (package
     (name "python-flit")
-    (version "3.3.0")
-    ;; We fetch the sources via git because on pypi the package is split into
-    ;; two parts: flit and flit_core; flit_core cannot be built without flit.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/takluyver/flit")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0mvyymw3zqsnip4x4ca6anr5rbx30hcmpqwrnhjwcm7s8mycd01x"))))
+    (version "3.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flit" version))
+       (sha256
+        (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'bootstrap
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((home (string-append (getcwd) "/home")))
-               (mkdir-p home)
-               (setenv "HOME" home))
-             (for-each make-file-writable (find-files "."))
-             (copy-recursively (assoc-ref inputs "python-testpath")
-                               (string-append (getcwd) "/testpath"))
-             (substitute* "pyproject.toml"
-               (("\"testpath\",") ""))
-             (invoke "python" "bootstrap_dev.py")))
-         (replace 'build
-           (lambda _
-             ;; A ZIP archive should be generated, but it fails with "ZIP does
-             ;; not support timestamps before 1980".  Luckily,
-             ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
-             ;; 1980.
-             (setenv "SOURCE_DATE_EPOCH" "315532800")
-             (for-each (lambda (toml)
-                         (invoke "python3" "-m" "flit"
-                                 "--debug" "--ini-file" toml
-                                 "build"))
-                       '("testpath/pyproject.toml"
-                         "pyproject.toml"))
-             (with-directory-excursion "flit_core"
-               (invoke "python" "build_dists.py"))))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (let ((out (assoc-ref outputs "out")))
-               (delete-file-recursively "./home")
-               (for-each (lambda (wheel)
-                           (format #true wheel)
-                           (invoke "python" "-m" "pip" "install"
-                                   wheel (string-append "--prefix=" out)))
-                         (append
-                          (find-files "flit_core/dist" "\\.whl$")
-                          (find-files "dist" "\\.whl$")))))))
-       #:tests? #f)) ; XXX: Check requires network access.
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (setenv "HOME" "/tmp")
+                (setenv "FLIT_NO_NETWORK" "1"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
     (propagated-inputs
-     (list python-pytoml python-toml))
+     (list python-pypa-build
+           python-tomli-w
+           python-flit-core
+           python-docutils
+           python-requests))
     (native-inputs
-     `(("python-docutils" ,python-docutils)
-       ("python-responses" ,python-responses)
-       ("python-pygments-github-lexers" ,python-pygments-github-lexers)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-sphinx" ,python-sphinx)
-       ("python-sphinxcontrib-github-alt" ,python-sphinxcontrib-github-alt)
-       ;; This package needs testpath, but testpath also needs flit...
-       ("python-testpath"
-        ,(let ((name "python-testpath")
-               (version "0.4.4"))
-           (origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/jupyter/testpath")
-                   (commit version)))
-             (file-name (git-file-name name version))
-             (sha256
-              (base32
-               "1fwv4d3p54xx1x942s104irr35lszvv6jnr4nn1scsfvc0m1qmbk")))))))
+     (list python-responses
+           python-pygments-github-lexers
+           python-pytest
+           python-pytest-cov
+           python-sphinx
+           python-sphinxcontrib-github-alt
+           python-testpath))
     (home-page "https://flit.readthedocs.io/")
-    (synopsis
-     "Simple packaging tool for simple packages")
-    (description
-     "Flit is a simple way to put Python packages and modules on PyPI.  Flit
-packages a single importable module or package at a time, using the import
-name as the name on PyPI.  All subpackages and data files within a package
-are included automatically.")
+    (synopsis "Simple packaging tool for simple packages")
+    (description "Flit is a simple way to put Python packages and modules on
+PyPI.  Flit packages a single importable module or package at a time, using
+the import name as the name on PyPI.  All subpackages and data files within a
+package are included automatically.")
     (license license:bsd-3)))
 
 (define-public python-pathtools
@@ -27960,13 +28024,21 @@ compatible with a wide range of versions of the Stripe API.")
         (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda* (#:key tests? #:allow-other-keys)
-                      (when tests? (invoke "pytest" "-vv")))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'pretend-version
+           ;; The version string is usually derived via setuptools-scm, but
+           ;; without the git metadata available, the version string is set to
+           ;; '0.0.0'.
+           (lambda _
+             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest")))))))
     (native-inputs
-     (list python-appdirs python-pytest python-pytest-mock
-           python-setuptools-scm))
+     (list python-appdirs python-pytest python-pytest-cov
+           python-pytest-mock python-setuptools-scm))
     (home-page "https://github.com/platformdirs/platformdirs")
     (synopsis "Determine the appropriate platform-specific directories")
     (description "When writing applications, finding the right location to
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 23f188c6f9..3bc3346c21 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -431,7 +431,7 @@ data types.")
   (package
     (inherit python-2)
     (name "python")
-    (version "3.9.6")
+    (version "3.9.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
@@ -445,7 +445,7 @@ data types.")
                         "python-3-no-static-lib.patch"))
               (sha256
                (base32
-                "12hhw2685i68pwfx5hdkqngzhbji4ccyjmqb5rzvkigg6fpj0y9r"))
+                "09vd7g71i11iz5ydqghwc8kaxr0vgji94hhwwnj77h3kll28r0h6"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index f8a7222005..739ffb3192 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -122,7 +122,7 @@
 ;;; to be used in source form.  The latest support for bootstrapping from
 ;;; 1.39.0 is not yet released so use the latest commit (see:
 ;;; https://github.com/thepowersgang/mrustc/issues/185).
-(define %mrustc-commit "474bec9cfd7862a20e7288cecd7fcf5e18648b9a")
+(define %mrustc-commit "c7066542f8e93d320323749216bf3c82aecb67c2")
 (define %mrustc-source
   (let* ((version "0.9")
          (commit %mrustc-commit)
@@ -136,7 +136,7 @@
       (file-name (git-file-name name (git-version version revision commit)))
       (sha256
        (base32
-        "1zacz5qia0r457mv74wvrvznnv4az5g2w9j8ji9ssy727wljhvz7")))))
+        "0zv1x6601s5fnnkcdlqkc4bknisqz569qb0iyb9rjsmaf1kh0na3")))))
 
 ;;; Rust 1.39 is special in that it is built with mrustc, which shortens the
 ;;; bootstrap path.
@@ -623,14 +623,29 @@ safety and thread safety guarantees.")
 (define rust-1.54
   (let ((base-rust
          (rust-bootstrapped-package
-          rust-1.53 "1.54.0"
-          "0xk9dhfff16caambmwij67zgshd8v9djw6ha0fnnanlv7rii31dc")))
-    (package
-      (inherit base-rust)
+          rust-1.53
+          "1.54.0" "0xk9dhfff16caambmwij67zgshd8v9djw6ha0fnnanlv7rii31dc")))
+    (package/inherit base-rust
       (source
        (origin
          (inherit (package-source base-rust))
-         (snippet '(delete-file-recursively "src/llvm-project"))))
+         (snippet '(delete-file-recursively "src/llvm-project")))))))
+
+(define rust-1.55
+  (rust-bootstrapped-package
+   rust-1.54 "1.55.0" "07l28f7grdmi65naq71pbmvdd61hwcpi40ry7kp7dy7m233rldxj"))
+
+(define rust-1.56
+  (rust-bootstrapped-package
+   rust-1.55 "1.56.1" "04cmqx7nn63hzz7z27b2b0dj2qx18rck9ifvip43s6dampx8v2f3"))
+
+(define rust-1.57
+  (let ((base-rust
+         (rust-bootstrapped-package
+          rust-1.56 "1.57.0"
+          "06jw8ka2p3kls8p0gd4p0chhhb1ia1mlvj96zn78n7qvp71zjiim")))
+    (package
+      (inherit base-rust)
       (outputs (cons "rustfmt" (package-outputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
@@ -718,11 +733,6 @@ safety and thread safety guarantees.")
                                 ((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")))
@@ -772,20 +782,8 @@ safety and thread safety guarantees.")
                             `("procps" ,procps)
                             (package-native-inputs base-rust))))))
 
-(define-public rust-1.55
-  (rust-bootstrapped-package
-   rust-1.54 "1.55.0" "07l28f7grdmi65naq71pbmvdd61hwcpi40ry7kp7dy7m233rldxj"))
-
-(define-public rust-1.56
-  (rust-bootstrapped-package
-   rust-1.55 "1.56.1" "04cmqx7nn63hzz7z27b2b0dj2qx18rck9ifvip43s6dampx8v2f3"))
-
-(define-public rust-1.57
-  (rust-bootstrapped-package
-   rust-1.56 "1.57.0" "06jw8ka2p3kls8p0gd4p0chhhb1ia1mlvj96zn78n7qvp71zjiim"))
-
 ;;; 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.54)
+(define-public rust rust-1.57)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index bb5b402eee..4330b1b9af 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages samba)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -55,6 +56,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages time)
@@ -181,64 +183,58 @@ external dependencies.")
 (define-public samba
   (package
     (name "samba")
-    (version "4.13.14")
+    (version "4.15.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.samba.org/pub/samba/stable/"
                            "samba-" version ".tar.gz"))
        (sha256
-        (base32 "103zy09mszjlfrsnm2vzrw5d9ph5jckddb9cxsrhrslkzblah4b6"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; XXX: Some bundled libraries (e.g, popt, cmocka) are used from
-           ;; the system, but their bundled sources must be kept as they
-           ;; include the WAF scripts used for detecting them.
-           (delete-file-recursively "third_party/pyiso8601")
-           #t))))
+        (base32 "1nrp85aya0pbbqdqjaqcw82cnzzys16yls37hi2h6mci8d09k4si"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags '("TEST_OPTIONS=--quick") ;some tests are very long
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'setup-docbook-stylesheets
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Append Samba's own DTDs to XML_CATALOG_FILES
-             ;; (c.f. docs-xml/build/README).
-             (copy-file "docs-xml/build/catalog.xml.in"
-                        "docs-xml/build/catalog.xml")
-             (substitute* "docs-xml/build/catalog.xml"
-               (("/@abs_top_srcdir@")
-                (string-append (getcwd) "/docs-xml")))
-             ;; Honor XML_CATALOG_FILES.
-             (substitute* "buildtools/wafsamba/wafsamba.py"
-               (("XML_CATALOG_FILES=\"\\$\\{SAMBA_CATALOGS\\}" all)
-                (string-append all " $XML_CATALOG_FILES")))
-             #t))
-         (replace 'configure
-           ;; Samba uses a custom configuration script that runs WAF.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (libdir (string-append out "/lib")))
-               (invoke "./configure"
-                       "--enable-selftest"
-                       "--enable-fhs"
-                       (string-append "--prefix=" out)
-                       "--sysconfdir=/etc"
-                       "--localstatedir=/var"
-                       ;; Install public and private libraries into
-                       ;; a single directory to avoid RPATH issues.
-                       (string-append "--libdir=" libdir)
-                       (string-append "--with-privatelibdir=" libdir)))))
-         (add-before 'install 'disable-etc,var-samba-directories-setup
-           (lambda _
-             (substitute* "dynconfig/wscript"
-               (("bld\\.INSTALL_DIR.*") ""))
-             #t)))
-       ;; FIXME: The test suite seemingly hangs after failing to provision the
-       ;; test environment.
-       #:tests? #f))
+     (list
+      #:make-flags #~(list "TEST_OPTIONS=--quick") ;some tests are very long
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'setup-docbook-stylesheets
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Append Samba's own DTDs to XML_CATALOG_FILES
+              ;; (c.f. docs-xml/build/README).
+              (copy-file "docs-xml/build/catalog.xml.in"
+                         "docs-xml/build/catalog.xml")
+              (substitute* "docs-xml/build/catalog.xml"
+                (("/@abs_top_srcdir@")
+                 (string-append (getcwd) "/docs-xml")))
+              ;; Honor XML_CATALOG_FILES.
+              (substitute* "buildtools/wafsamba/wafsamba.py"
+                (("XML_CATALOG_FILES=\"\\$\\{SAMBA_CATALOGS\\}" all)
+                 (string-append all " $XML_CATALOG_FILES")))))
+          (replace 'configure
+            ;; Samba uses a custom configuration script that runs WAF.
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((libdir (string-append #$output "/lib")))
+                (invoke "./configure"
+                        "--enable-selftest"
+                        "--enable-fhs"
+                        (string-append "--prefix=" #$output)
+                        "--sysconfdir=/etc"
+                        "--localstatedir=/var"
+                        ;; Install public and private libraries into
+                        ;; a single directory to avoid RPATH issues.
+                        (string-append "--libdir=" libdir)
+                        (string-append "--with-privatelibdir=" libdir)
+                        "--with-system-mitkrb5" ;#$(this-package-input "mit-krb5")
+                        (string-append "--with-system-mitkdc="
+                                       (search-input-file inputs "sbin/krb5kdc"))
+                        "--with-experimental-mit-ad-dc"))))
+          (add-before 'install 'disable-etc,var-samba-directories-setup
+            (lambda _
+              (substitute* "dynconfig/wscript"
+                (("bld\\.INSTALL_DIR.*") "")))))
+      ;; FIXME: The test suite seemingly hangs after failing to provision the
+      ;; test environment.
+      #:tests? #f))
     (inputs
      (list acl
            cmocka
@@ -247,12 +243,12 @@ external dependencies.")
            dbus
            gpgme
            gnutls
-           heimdal
            jansson
            libarchive
            libtirpc
            linux-pam
            lmdb
+           mit-krb5
            openldap
            perl
            python
@@ -263,15 +259,19 @@ external dependencies.")
      ;; In Requires or Requires.private of pkg-config files.
      (list ldb talloc tevent))
     (native-inputs
-     `(("perl-parse-yapp" ,perl-parse-yapp)
-       ("pkg-config" ,pkg-config)
-       ("python-iso8601" ,python-iso8601)
-       ("rpcsvc-proto" ,rpcsvc-proto)   ; for 'rpcgen'
-       ;; For generating man pages.
-       ("docbook-xml" ,docbook-xml-4.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("xsltproc" ,libxslt)
-       ("libxml2" ,libxml2)))           ;for XML_CATALOG_FILES
+     (list perl-parse-yapp
+           pkg-config
+           python-cryptography          ;for krb5 tests
+           python-dnspython
+           python-iso8601
+           python-markdown
+           rpcsvc-proto                 ;for 'rpcgen'
+           python-pyasn1                ;for krb5 tests
+           ;; For generating man pages.
+           docbook-xml-4.2
+           docbook-xsl
+           libxslt
+           libxml2))                    ;for XML_CATALOG_FILES
     (home-page "https://www.samba.org/")
     (synopsis
      "The standard Windows interoperability suite of programs for GNU and Unix")
@@ -286,15 +286,16 @@ Desktops into Active Directory environments using the winbind daemon.")
 
 (define-public samba/fixed
   ;; Version that rarely changes, depended on by libsoup.
-  (package/inherit samba
-    (version "4.13.10")
-    (source
-     (origin
-       (inherit (package-source samba))
-       (uri (string-append "https://download.samba.org/pub/samba/stable/"
-                           "samba-" version ".tar.gz"))
-       (sha256
-        (base32 "00q5hf2r71dyma785dckcyksv3082mqfgyy9q6k6rc6kqjwkirzh"))))))
+  (hidden-package
+   (package/inherit samba
+     (version "4.15.3")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://download.samba.org/pub/samba/stable/"
+                            "samba-" version ".tar.gz"))
+        (sha256
+         (base32 "1nrp85aya0pbbqdqjaqcw82cnzzys16yls37hi2h6mci8d09k4si")))))))
 
 (define-public talloc
   (package
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 52f675ea1d..2c3979ca18 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -952,7 +952,6 @@ files and text.")
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #false                  ;missing files
-       #:rust ,rust-1.56
        #:features '("extra")
        #:cargo-inputs
        (("rust-ctrlc" ,rust-ctrlc-3)
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 75a69c8d87..c19cc97862 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -893,15 +893,6 @@ message streaming.")
          #:tests? #f
          #:phases
          (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                      (string-append (assoc-ref outputs "out")
-                                     "/src/github.com/prometheus/common/expfmt/testdata/")
-                      ".*\\.gz$"))
-               #t))
            ;; Source-only package
            (delete 'build))))
       (propagated-inputs
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 6d4a61efbd..c3c5c243eb 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -247,7 +247,7 @@ cards.")
        #:install-source? #f
        #:cargo-inputs
        (("rust-backtrace" ,rust-backtrace-0.3)
-        ("rust-bitflags" ,rust-bitflags-1.3)
+        ("rust-bitflags" ,rust-bitflags-1)
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-curl-sys" ,rust-curl-sys-0.4)
         ("rust-cxx" ,rust-cxx-1)
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 427f281686..e5d8394f5f 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -89,7 +89,8 @@ tasks, synchronization primitives, atomic operations, and more.")
     (arguments
      `(#:test-target "test"
        #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                         (assoc-ref %outputs "out") "/lib"))
+                                         (assoc-ref %outputs "out") "/lib")
+                          "CFLAGS=-fuse-ld=gold")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fail-on-test-errors
@@ -121,6 +122,13 @@ tasks, synchronization primitives, atomic operations, and more.")
                (copy-recursively "doc" doc)
                (copy-recursively "examples" examples)
                (copy-recursively "include" include)))))))
+    (native-inputs
+     ;; XXX: For some reason, since commit "gnu: binutils: Absorb
+     ;; binutils-next", the build of just this version of TBB crashes during
+     ;; tests.  Workaround it by linking the binaries with ld.gold.
+     (list (module-ref (resolve-interface
+                        '(gnu packages commencement))
+                       'ld-gold-wrapper)))
     (home-page "https://www.threadingbuildingblocks.org")
     (synopsis "C++ library for parallel programming")
     (description
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 6601a49c59..bd4c2461a2 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -254,19 +254,17 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
        (modules '((guix build utils)
                   (ice-9 ftw)))
        (snippet
-        '(begin
-           (with-directory-excursion "libs"
-             (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf")))
-               ;; Delete bundled software, except Lua which cannot easily be
-               ;; used as an external dependency, pplib and xpdf which aren't
-               ;; supported as system libraries (see m4/kpse-xpdf-flags.m4).
-               (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))))
+        ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
+        '(with-directory-excursion "libs"
+           (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf")))
+             ;; Delete bundled software, except Lua which cannot easily be
+             ;; used as an external dependency, pplib and xpdf which aren't
+             ;; supported as system libraries (see m4/kpse-xpdf-flags.m4).
+             (for-each delete-file-recursively
+                       (scandir "."
+                                (lambda (file)
+                                  (and (not (member file preserved-directories))
+                                       (eq? 'directory (stat:type (stat file))))))))))))
     (build-system gnu-build-system)
     (inputs
      `(("texlive-extra-src" ,texlive-extra-src)
@@ -368,24 +366,21 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                (("gswin32c") "gs"))
              (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
                (("\"gs\"")
-                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
-             #t))
+                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))))
          (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))
+                (string-append all "\nHAVE_LIBGS=1")))))
          (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))
+                "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))))
          ,@(if (target-ppc32?)
              ;; Some mendex tests fail on some architectures.
              `((add-after 'unpack 'skip-mendex-tests
@@ -430,9 +425,16 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                                                      iso-8859-1-encoded-scripts))
 
                (with-fluids ((%default-port-encoding "ISO-8859-1"))
-                 (substitute-commands iso-8859-1-encoded-scripts))
-
-               #t)))
+                 (substitute-commands iso-8859-1-encoded-scripts)))))
+         ;; When ST_NLINK_TRICK is set, kpathsea attempts to avoid work when
+         ;; searching files by assuming that a directory with exactly two
+         ;; links has no subdirectories.  This assumption does not hold in our
+         ;; case, so some directories with symlinked subdirectories would not
+         ;; be traversed.
+         (add-after 'patch-scripts 'patch-directory-traversal
+           (lambda _
+             (substitute* "texk/kpathsea/config.h"
+               (("#define ST_NLINK_TRICK") ""))))
          (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
@@ -457,8 +459,7 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                  ;; 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))
+                 (("^max_print_line = .*$") "max_print_line = 1000\n")))))
          (add-after 'install 'post-install
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
              (let* ((out (assoc-ref outputs "out"))
@@ -480,11 +481,12 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                     (config.guess (search-input-file inputs
                                                      "/bin/config.guess")))
 
-               ;; Create symbolic links for the latex variants and their
-               ;; man pages.
+               ;; Create symbolic links for the latex variants and their man
+               ;; pages.  We link lualatex to luahbtex; see issue #51252 for
+               ;; details.
                (with-directory-excursion (string-append out "/bin/")
                  (for-each symlink
-                           '("pdftex" "pdftex"   "xetex"   "luatex")
+                           '("pdftex" "pdftex"   "xetex"   "luahbtex")
                            '("latex"  "pdflatex" "xelatex" "lualatex")))
                (with-directory-excursion (string-append share "/man/man1/")
                  (symlink "luatex.1" "lualatex.1"))
@@ -497,6 +499,14 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                                   source "/texlive-scripts/source/")
                                  scripts)
 
+               ;; Patch them.
+               (let ((dirs (map dirname (list (which "sed") (which "awk")))))
+                 (with-directory-excursion scripts
+                   (substitute* '("mktexpk" "mktexmf" "mktexlsr")
+                     (("^version=" m)
+                      (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a"
+                              dirs m)))))
+
                ;; Make sure that fmtutil can find its Perl modules.
                (substitute* (string-append scripts "/fmtutil.pl")
                  (("\\$TEXMFROOT/")
@@ -2580,48 +2590,65 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
       (license license:lppl))))
 
 (define-public texlive-kpathsea
-  (package
-    (inherit (simple-texlive-package
-              "texlive-kpathsea"
-              (list "/web2c/amiga-pl.tcx"
-                    "/web2c/cp1250cs.tcx"
-                    "/web2c/cp1250pl.tcx"
-                    "/web2c/cp1250t1.tcx"
-                    "/web2c/cp227.tcx"
-                    "/web2c/cp852-cs.tcx"
-                    "/web2c/cp852-pl.tcx"
-                    "/web2c/cp8bit.tcx"
-                    "/web2c/empty.tcx"
-                    "/web2c/fmtutil.cnf"
-                    "/web2c/il1-t1.tcx"
-                    "/web2c/il2-cs.tcx"
-                    "/web2c/il2-pl.tcx"
-                    "/web2c/il2-t1.tcx"
-                    "/web2c/kam-cs.tcx"
-                    "/web2c/kam-t1.tcx"
-                    "/web2c/macce-pl.tcx"
-                    "/web2c/macce-t1.tcx"
-                    "/web2c/maz-pl.tcx"
-                    "/web2c/mktex.cnf"
-                    "/web2c/mktex.opt"
-                    "/web2c/mktexdir"
-                    "/web2c/mktexdir.opt"
-                    "/web2c/mktexnam"
-                    "/web2c/mktexnam.opt"
-                    "/web2c/mktexupd"
-                    "/web2c/natural.tcx"
-                    "/web2c/tcvn-t5.tcx"
-                    "/web2c/viscii-t5.tcx")
-              (base32
-               "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
-              #:trivial? #t))
-    (home-page "https://www.tug.org/texlive/")
-    (synopsis "Files related to the path searching library for TeX")
-    (description "Kpathsea is a library and utility programs which provide
+  (let ((template (simple-texlive-package
+                   "texlive-kpathsea"
+                   (list "/web2c/amiga-pl.tcx"
+                         "/web2c/cp1250cs.tcx"
+                         "/web2c/cp1250pl.tcx"
+                         "/web2c/cp1250t1.tcx"
+                         "/web2c/cp227.tcx"
+                         "/web2c/cp852-cs.tcx"
+                         "/web2c/cp852-pl.tcx"
+                         "/web2c/cp8bit.tcx"
+                         "/web2c/empty.tcx"
+                         "/web2c/fmtutil.cnf"
+                         "/web2c/il1-t1.tcx"
+                         "/web2c/il2-cs.tcx"
+                         "/web2c/il2-pl.tcx"
+                         "/web2c/il2-t1.tcx"
+                         "/web2c/kam-cs.tcx"
+                         "/web2c/kam-t1.tcx"
+                         "/web2c/macce-pl.tcx"
+                         "/web2c/macce-t1.tcx"
+                         "/web2c/maz-pl.tcx"
+                         "/web2c/mktex.cnf"
+                         "/web2c/mktex.opt"
+                         "/web2c/mktexdir"
+                         "/web2c/mktexdir.opt"
+                         "/web2c/mktexnam"
+                         "/web2c/mktexnam.opt"
+                         "/web2c/mktexupd"
+                         "/web2c/natural.tcx"
+                         "/web2c/tcvn-t5.tcx"
+                         "/web2c/viscii-t5.tcx")
+                   (base32
+                    "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'patch-references
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((dirs (map dirname (list (which "sed")
+                                                (which "awk")))))
+                   (substitute* '("web2c/mktexdir"
+                                  "web2c/mktexnam"
+                                  "web2c/mktexupd")
+                     (("^version=" m)
+                      (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a"
+                              dirs m))))))))))
+      (inputs
+       (list sed gawk))
+      (home-page "https://www.tug.org/texlive/")
+      (synopsis "Files related to the path searching library for TeX")
+      (description "Kpathsea is a library and utility programs which provide
 path searching facilities for TeX file types, including the self-locating
 feature required for movable installations, layered on top of a general search
 mechanism.  This package provides supporting files.")
-    (license license:lgpl3+)))
+      (license license:lgpl3+))))
 
 (define-public texlive-latexconfig
   (package
@@ -2673,8 +2700,7 @@ formats.")
              (add-after 'unpack 'fix-lua-sources
                (lambda _
                  (substitute* "source/latex/base/ltluatex.dtx"
-                   (("	") "  "))
-                 #t))
+                   (("	") "  "))))
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
                  ;; Find required fonts
@@ -2746,8 +2772,7 @@ formats.")
                          "--fmtdir=web2c"
                          (string-append "--cnffile=web2c/fmtutil.cnf"))
                  ;; We don't actually want to install it.
-                 (delete-file "web2c/fmtutil.cnf")
-                 #t))
+                 (delete-file "web2c/fmtutil.cnf")))
              (add-after 'install 'install-more
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (let* ((out (assoc-ref outputs "out"))
@@ -2768,8 +2793,7 @@ formats.")
                    (for-each (cut install-file <> target)
                              (find-files "build" ".*"))
                    (for-each (cut install-file <> web2c)
-                             (find-files "web2c" ".*"))
-                   #t)))))))
+                             (find-files "web2c" ".*")))))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
          ("texlive-tex-ini-files" ,texlive-tex-ini-files)
@@ -3657,35 +3681,21 @@ 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.
-;; This is why we take the release from GitHub instead.
-(define-public texlive-luatex-lualibs
-  (package
-    (name "texlive-luatex-lualibs")
-    (version "2.5")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/lualatex/lualibs/"
-                                  "releases/download/v"
-                                  version "/lualibs.zip"))
-              (file-name (string-append name "-" version ".zip"))
-              (sha256
-               (base32
-                "1xx9blvrmx9hyhrl345lpai9m6xxnw997261a1ahn1bm5r2j5fqy"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist"))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))
-    (native-inputs
-     (list texlive-bin unzip zip))
-    (home-page "https://github.com/lualatex/lualibs")
-    (synopsis "Lua modules for general programming (in the (La)TeX world)")
+(define-public texlive-lualibs
+  (package
+    (inherit
+     (simple-texlive-package
+      "texlive-lualibs"
+      (list "doc/luatex/lualibs/"
+            "source/luatex/lualibs/"
+            "tex/luatex/lualibs/")
+      (base32 "0gf60vj9y75a7dlrmpbyqgsa00s1717r6if3lm5ldm41i9fm8ywz")
+      ;; The source dtx file only unpacks three files.  This is why we
+      ;; install all the files as they are, because there is no clear
+      ;; way to generate them all.
+      #:trivial? #true))
+    (home-page "https://ctan.org/macros/luatex/generic/lualibs")
+    (synopsis "Additional Lua functions for LuaTeX macro programmers")
     (description
      "Lualibs is a collection of Lua modules useful for general programming.
 The bundle is based on Lua modules shipped with ConTeXt, and made available in
@@ -3693,6 +3703,23 @@ this bundle for use independent of ConTeXt.")
     ;; GPL version 2 only
     (license license:gpl2)))
 
+(define-deprecated-package texlive-luatex-lualibs texlive-lualibs)
+
+(define-public texlive-lua-alt-getopt
+  (package
+    (inherit
+     (simple-texlive-package
+      "texlive-lua-alt-getopt"
+      (list "doc/support/lua-alt-getopt/" "scripts/lua-alt-getopt/")
+      (base32 "0cizxzn33n3pn98xkqnxb8s6vdwkar3xrwhraqrs05pjfdn9d4wz")
+      #:trivial? #t))
+    (home-page "https://ctan.org/support/lualibs/lua-alt-getopt")
+    (synopsis "Process application arguments the same way as getopt_long")
+    (description
+     "This package provides a Lua module for processing application arguments
+in the same way as BSD/GNU @code{getopt_long(3)} functions do.")
+    (license license:expat)))
+
 ;; 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
@@ -3711,7 +3738,8 @@ this bundle for use independent of ConTeXt.")
     (package
       (inherit template)
       (propagated-inputs
-       (list texlive-luatex-lualibs))
+       (list texlive-lua-alt-getopt ;for luaotfload-tool
+             texlive-lualibs))
       (home-page "https://github.com/lualatex/luaotfload")
       (synopsis "OpenType font loader for LuaTeX")
       (description
@@ -3725,71 +3753,6 @@ loading fonts by their proper names instead of file names.")
 
 (define-deprecated-package texlive-luatex-luaotfload texlive-luaotfload)
 
-;; FIXME: This package is a temporary workaround to provide ‘lualatex.fmt’ for
-;; the LuaTeX engine. It is needed because it was discovered too late in the
-;; core-updates-frozen cycle that texlive-latex-base only provides it for
-;; LuaHBTeX. See https://issues.guix.gnu.org/51252.
-(define-public texlive-latex-luatex
-  (package
-    (name "texlive-latex-luatex")
-    (version (number->string %texlive-revision))
-    (source #f)
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 rdelim)
-                  (ice-9 string-fun))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'unpack)
-         (delete 'bootstrap)
-         (delete 'configure)
-         (delete 'check)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (mkdir "web2c")
-             (let ((fmtutil.cnf-in (open-file
-                                    (string-append
-                                     (assoc-ref inputs "texlive-kpathsea")
-                                     "/share/texmf-dist/web2c/fmtutil.cnf")
-                                    "r"))
-                   (fmtutil.cnf-out (open-file "web2c/fmtutil.cnf" "w")))
-
-               ;; Copy ‘lualatex’ format lines to the new fmtutil.cnf, changing
-               ;; the engine from ‘luahbtex’ to ‘luatex’.
-               (do ((line "" (read-line fmtutil.cnf-in 'concat)))
-                   ((eof-object? line))
-                 (when (string-prefix? "lualatex" line)
-                   (display (string-replace-substring line "luahbtex" "luatex")
-                            fmtutil.cnf-out)))
-               (close-port fmtutil.cnf-out)
-               (close-port fmtutil.cnf-in)
-
-               (invoke "fmtutil" "--sys" "--all" "--fmtdir=web2c"
-                       "--cnffile=web2c/fmtutil.cnf")
-
-               ;; Don't risk this file interfering with anything else.
-               (delete-file "web2c/fmtutil.cnf"))))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((web2c (string-append %output "/share/texmf-dist/web2c")))
-               (mkdir-p web2c)
-               (copy-recursively "web2c" web2c)))))))
-    (native-inputs
-     (list texlive-bin
-           texlive-babel
-           texlive-cm
-           texlive-fonts-latex
-           texlive-kpathsea
-           texlive-latex-base
-           texlive-lm
-           texlive-tex-ini-files))
-    (home-page (package-home-page texlive-latex-base))
-    (synopsis "LuaLaTeX format files for LuaTeX")
-    (description "This package is necessary to use LaTeX with the LuaTeX engine.")
-    (license (package-license texlive-latex-base))))
-
 (define-public texlive-latex-amsmath
   (package
     (name "texlive-latex-amsmath")
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 5ff1fe9901..5a78dc3a6f 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1675,14 +1675,7 @@ visualize your public Git repositories on a web interface.")
                         "not test_install_existing_hooks_no_overwrite"
                         " and not test_uninstall_restores_legacy_hooks"
                         " and not test_installed_from_venv"
-                        " and not test_healthy_venv_creator")))))
-         (add-before 'reset-gzip-timestamps 'make-gz-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Make sure .gz files are writable so that the
-             ;; 'reset-gzip-timestamps' phase can do its work.
-             (let ((out (assoc-ref outputs "out")))
-               (for-each make-file-writable
-                         (find-files out "\\.gz$"))))))))
+                        " and not test_healthy_venv_creator"))))))))
     (native-inputs
      `(("git" ,git-minimal)
        ("python-covdefaults" ,python-covdefaults)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index a9996e477e..89738e83b0 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 David Wilson <david@daviwil.com>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021,2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
@@ -4387,9 +4387,6 @@ tools for styling them, including a built-in real-time video preview.")
        ("pkg-config" ,pkg-config)))
      (arguments
       `(#:glib-or-gtk? #t
-        ;; Pitivi is not yet compatible with Meson 0.60:
-        ;; https://gitlab.gnome.org/GNOME/pitivi/-/issues/2593
-        #:meson ,meson-0.59
         #:phases
         (modify-phases %standard-phases
           (add-after 'glib-or-gtk-wrap 'wrap-other-dependencies
@@ -5206,7 +5203,7 @@ result in several formats:
 (define-public rav1e
   (package
     (name "rav1e")
-    (version "0.4.1")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
@@ -5215,15 +5212,18 @@ result in several formats:
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00rjil6qbrwfxhhlq9yvidxm0gp9qdbywhf5zvkj85lykbhyff09"))))
+         "006bfcmjwg0phg8gc25b1sl2ngjrb2bh1b3fd0s5gbf9nlkr8qsn"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-aom-sys" ,rust-aom-sys-0.2)
+     `(;; Strip the '--release' flag to work around the doctest failures with
+       ;; Rust 1.57 (see: https://github.com/xiph/rav1e/issues/2851).
+       #:cargo-test-flags '()
+       #:cargo-inputs
+       (("rust-aom-sys" ,rust-aom-sys-0.3)
         ("rust-arbitrary" ,rust-arbitrary-0.4)
         ("rust-arg-enum-proc-macro" ,rust-arg-enum-proc-macro-0.3)
-        ("rust-arrayvec" ,rust-arrayvec-0.5)
-        ("rust-av-metrics" ,rust-av-metrics-0.6)
+        ("rust-arrayvec" ,rust-arrayvec-0.7)
+        ("rust-av-metrics" ,rust-av-metrics-0.7)
         ("rust-backtrace" ,rust-backtrace-0.3)
         ("rust-bitstream-io" ,rust-bitstream-io-1)
         ("rust-byteorder" ,rust-byteorder-1)
@@ -5231,7 +5231,7 @@ result in several formats:
         ("rust-clap" ,rust-clap-2)
         ("rust-console" ,rust-console-0.14)
         ("rust-crossbeam" ,rust-crossbeam-0.8)
-        ("rust-dav1d-sys" ,rust-dav1d-sys-0.3.2)
+        ("rust-dav1d-sys" ,rust-dav1d-sys-0.3)
         ("rust-fern" ,rust-fern-0.6)
         ("rust-image" ,rust-image-0.23)
         ("rust-interpolate-name" ,rust-interpolate-name-0.2)
@@ -5250,7 +5250,7 @@ result in several formats:
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
         ("rust-rust-hawktracer" ,rust-rust-hawktracer-0.7)
-        ("rust-rustc-version" ,rust-rustc-version-0.3)
+        ("rust-rustc-version" ,rust-rustc-version-0.4)
         ("rust-scan-fmt" ,rust-scan-fmt-0.2)
         ("rust-serde" ,rust-serde-1)
         ("rust-signal-hook" ,rust-signal-hook-0.3)
@@ -5262,16 +5262,21 @@ result in several formats:
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
         ("rust-y4m" ,rust-y4m-0.7))
        #:cargo-development-inputs
-       (("rust-assert-cmd" ,rust-assert-cmd-1)
+       (("rust-assert-cmd" ,rust-assert-cmd-2)
         ("rust-cc" ,rust-cc-1)
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-interpolate-name" ,rust-interpolate-name-0.2)
-        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rand-chacha" ,rust-rand-chacha-0.3)
-        ("rust-semver" ,rust-semver-0.11))
+        ("rust-semver" ,rust-semver-1))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'relax-versions
+           (lambda _
+             (substitute* "Cargo.toml"
+               ;; Allow using more recent versions of
+               (("~3.1.2") "~3"))))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 4a9ac08bc9..a16a12c7aa 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1340,8 +1340,6 @@ to integrate other virtualization mechanisms if needed.")
                (base32
                 "1gdcvqz88qkp402zra9csc6391f2xki1270x683n6ixakl3gf8w4"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:meson ,meson-0.59))          ;KeyError: 'install_dir' with meson 0.60
     (inputs
      (list openssl cyrus-sasl lvm2 ; for libdevmapper
            libyajl))
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 8e9aa2b1b5..cfe24f41b0 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -251,15 +251,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
                           "-DUSE_SYSTEMD=OFF"
                           (string-append ; uses lib64 by default
                            "-DLIB_INSTALL_DIR="
-                           (assoc-ref %outputs "out") "/lib")
-                          ;; XXX Adding GStreamer GL support would apparently
-                          ;; require adding gst-plugins-bad to the inputs,
-                          ;; which might entail a security risk as a result of
-                          ;; the plugins of dubious code quality that are
-                          ;; included.  More investigation is needed.  For
-                          ;; now, we explicitly disable it to prevent an error
-                          ;; at configuration time.
-                          "-DUSE_GSTREAMER_GL=OFF")
+                           (assoc-ref %outputs "out") "/lib"))
        #:make-flags
        ;; Never build with unsupported -j1: https://issues.guix.gnu.org/47964#5
        (list "-j" (number->string (max 2 (parallel-job-count))))
@@ -350,7 +342,10 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
     (description
      "WebKitGTK+ is a full-featured port of the WebKit rendering engine,
 suitable for projects requiring any kind of web integration, from hybrid
-HTML/CSS applications to full-fledged web browsers.")
+HTML/CSS applications to full-fledged web browsers.  WebKitGTK+ video playing
+capabilities can be extended through the use of GStreamer plugins (not
+propagated by default) such as @code{gst-plugins-good} and
+@code{gst-plugins-bad}.")
     ;; WebKit's JavaScriptCore and WebCore components are available under
     ;; the GNU LGPL, while the rest is available under a BSD-style license.
     (license (list license:lgpl2.0
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 74a6ea38b8..865ffdb61f 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -431,7 +431,7 @@ avoiding password prompts when X11 forwarding has already been setup.")
            wayland-protocols
            xkeyboard-config))
     (native-inputs
-     (list bison doxygen pkg-config))
+     (list bison doxygen pkg-config python))
     (arguments
      `(#:configure-flags
        (list (string-append "-Dxkb-config-root="
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index c54417c586..14e35d19ae 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -5532,18 +5532,18 @@ Wayland.")
 (define-public libx11
   (package
     (name "libx11")
-    (version "1.7.2")
+    (version "1.7.3.1")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "mirror://xorg/individual/lib/libX11-"
-                            version ".tar.bz2"))
-        (sha256
-          (base32
-            "0v7aj8q3rlchdyfwdna7n7vgpyzyir391dlv5rwy9fxagbikbyhw"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://xorg.freedesktop.org/archive/"
+                           "/individual/lib/libX11-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1289nvs52q9fnp7zl30bdpbvqggnjjb39vy0zll511zvcrr43z9g"))))
     (build-system gnu-build-system)
     (outputs '("out"
-               "doc"))                            ;8 MiB of man pages + XML
+               "doc"))                  ;8 MiB of man pages + XML
     (arguments
      `(#:configure-flags
        (list (string-append "--mandir="
@@ -5552,9 +5552,9 @@ Wayland.")
              "--disable-static"
              ,@(malloc0-flags))))
     (propagated-inputs
-      (list xorgproto libxcb))
+     (list xorgproto libxcb))
     (inputs
-      (list xtrans))
+     (list xtrans))
     (native-inputs
      (list pkg-config xorgproto))
     (home-page "https://www.x.org/wiki/")
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index d0f7413268..d84411c090 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -598,6 +598,8 @@ and 'man/'.  This phase moves directories to the right place if needed."
                                         (string-suffix? ".tgz" file))
                                     (gzip-file? file)))
                              #:stat lstat)))
+      ;; Ensure the files are writable.
+      (for-each make-file-writable files)
       (for-each reset-gzip-timestamp files)))
 
   (match outputs
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 3beb7da67a..dd5a91f52f 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1462,10 +1463,9 @@ not supported."
                                    `(let ((cl (command-line)))
                                       (apply execl ,interpreter
                                              (car cl)
-                                             (cons (car cl)
-                                                   (append
-                                                    ',(string-split args #\space)
-                                                    cl))))))
+                                             (append
+                                              ',(string-tokenize args char-set:graphic)
+                                              cl)))))
                    (template (string-append prog ".XXXXXX"))
                    (out      (mkstemp! template))
                    (st       (stat prog))
diff --git a/guix/lint.scm b/guix/lint.scm
index 379bd0e80b..3ca7a0b608 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -571,9 +571,7 @@ or \"bash-minimal\" is not in its inputs. 'wrap-script' is not supported."
                                        input-names)))
   (define (check-procedure-body body)
     (match body
-      ;; Explicitely setting an interpreter is acceptable,
-      ;; #:sh support is added on 'core-updates'.
-      ;; TODO(core-updates): remove mention of core-updates.
+      ;; Explicitely setting an interpreter is acceptable.
       (('wrap-program _ '#:sh . _) '())
       (('wrap-program _ . _)
        (list (report-wrap-program-error package 'wrap-program)))
diff --git a/tests/build-utils.scm b/tests/build-utils.scm
index 6b131c0af8..7f4f12ccc7 100644
--- a/tests/build-utils.scm
+++ b/tests/build-utils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -167,9 +168,7 @@ echo hello world"))
                                    "/some/path:/some/other/path"))))
              '(let ((cl (command-line)))
                 (apply execl "/anything/cabbage-bash-1.2.3/bin/sh"
-                       (car cl)
-                       (cons (car cl)
-                             (append '("") cl)))))
+                       (car cl) (append (quote ()) cl))))
      script-contents)
     (call-with-temporary-directory
      (lambda (directory)
@@ -208,8 +207,7 @@ print('hello world')"))
              `(let ((cl (command-line)))
                 (apply execl "/anything/cabbage-bash-1.2.3/bin/python3"
                        (car cl)
-                       (cons (car cl)
-                             (append '("" "-and" "-args") cl)))))
+                       (append '("-and" "-args") cl))))
      script-contents)
     (call-with-temporary-directory
      (lambda (directory)
@@ -243,6 +241,54 @@ print('hello world')"))
                                            "/some/other/path")))
          #f)))))
 
+(define (arg-test bash-args)
+  (call-with-temporary-directory
+   (lambda (directory)
+     (let ((script-file-name (string-append directory "/bash-test.sh")))
+       (call-with-output-file script-file-name
+         (lambda (port)
+           (display (string-append "\
+#!" (which "bash") bash-args "
+echo \"$#$0$*${A}\"")
+                    port)))
+
+       (display "Unwrapped script contents:\n")
+       (call-with-input-file script-file-name
+         (lambda (port) (display (get-string-all port))))
+       (newline) (newline)
+       (chmod script-file-name #o777)
+       (setenv "A" "A")
+       (let* ((run-script (lambda _
+                            (open-pipe*
+                             OPEN_READ
+                             script-file-name "1" "2" "3 3" "4")))
+              (pipe (run-script))
+              (unwrapped-output (get-string-all pipe)))
+         (close-pipe pipe)
+
+         (wrap-script script-file-name `("A" = ("A\nA")))
+
+         (display "Wrapped script contents:\n")
+         (call-with-input-file script-file-name
+           (lambda (port) (display (get-string-all port))))
+         (newline) (newline)
+
+         (let* ((pipe (run-script))
+                (wrapped-output (get-string-all pipe)))
+           (close-pipe pipe)
+           (display "./bash-test.sh 1 2 3\\ 3 4 # Output:\n")
+           (display unwrapped-output) (newline)
+           (display "./bash-test.sh 1 2 3\\ 3 4 # Output (wrapped):\n")
+           (display wrapped-output) (newline)
+           (string=? (string-append unwrapped-output "A\n")
+                     wrapped-output)))))))
+
+(test-assert "wrap-script, argument handling"
+  (arg-test ""))
+
+(test-assert "wrap-script, argument handling, bash --norc"
+  (arg-test " --norc"))
+
 (test-equal "substitute*, text contains a NUL byte, UTF-8"
   "c\0d"
   (with-fluids ((%default-port-encoding "UTF-8")
@@ -287,5 +333,4 @@ print('hello world')"))
           ("guile/bin" . ,(dirname (which "guile"))))
         "guile"))))
 
-
 (test-end)