summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-09-16 19:11:43 +0200
committerMarius Bakke <marius@gnu.org>2022-09-16 19:11:43 +0200
commit7e0f2728a46b8f96b875a7199655bd63ad6a9fff (patch)
treebc86385f3ef3f788eed795764ff40c71595dcf2b
parentaf53cf42b7391d3af4fa303233afb87700eccd5f (diff)
parent706e6c3c8f9aa19c6ec22d4bbd77d09624dbf671 (diff)
downloadguix-7e0f2728a46b8f96b875a7199655bd63ad6a9fff.tar.gz
Merge branch 'staging' into core-updates
-rw-r--r--NEWS93
-rw-r--r--gnu/build/marionette.scm22
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/audio.scm2
-rw-r--r--gnu/packages/bioinformatics.scm2
-rw-r--r--gnu/packages/bootloaders.scm7
-rw-r--r--gnu/packages/build-tools.scm79
-rw-r--r--gnu/packages/check.scm4
-rw-r--r--gnu/packages/chemistry.scm2
-rw-r--r--gnu/packages/cpp.scm4
-rw-r--r--gnu/packages/ebook.scm41
-rw-r--r--gnu/packages/education.scm75
-rw-r--r--gnu/packages/enchant.scm2
-rw-r--r--gnu/packages/engineering.scm2
-rw-r--r--gnu/packages/fonts.scm5
-rw-r--r--gnu/packages/fontutils.scm159
-rw-r--r--gnu/packages/fpga.scm29
-rw-r--r--gnu/packages/geo.scm121
-rw-r--r--gnu/packages/gnome.scm6
-rw-r--r--gnu/packages/irods.scm2
-rw-r--r--gnu/packages/java.scm20
-rw-r--r--gnu/packages/monitoring.scm16
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/nfs.scm1
-rw-r--r--gnu/packages/patches/java-antlr4-fix-code-too-large.java90
-rw-r--r--gnu/packages/python-science.scm112
-rw-r--r--gnu/packages/python-xyz.scm55
-rw-r--r--gnu/packages/security-token.scm4
-rw-r--r--gnu/packages/simulation.scm2
-rw-r--r--gnu/packages/spice.scm48
-rw-r--r--gnu/packages/telegram.scm2
-rw-r--r--gnu/packages/video.scm10
-rw-r--r--gnu/packages/virtualization.scm2
-rw-r--r--gnu/packages/web.scm4
-rw-r--r--gnu/packages/xdisorg.scm2
-rw-r--r--gnu/services/desktop.scm14
-rw-r--r--gnu/system/install.scm2
37 files changed, 756 insertions, 290 deletions
diff --git a/NEWS b/NEWS
index 12a6d8a8f9..96f411b4c2 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@
 Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
@@ -16,8 +17,12 @@ Please send Guix bug reports to bug-guix@gnu.org.
 ** Package management
 *** New ‘guix home’ command, for home environment management
 *** New ‘guix shell’ command, the successor to ‘guix environment’
+*** New ‘guix system edit’ command, to edit services
 *** New ‘deb’ format for the ‘guix pack’ command
 *** New ‘guix import minetest’ command, to import Minetest extensions
+*** New ‘guix import elm’ command, to import Elm packages
+*** New ‘guix import egg’ command, to import CHICKEN egg packages
+*** New ‘guix import hexpm’ command, to import Erlang and Elixir packages
 *** New 'guix style' command, to auto-format package definitions
 *** ‘guix import texlive’ rewritten to use the TLPDB as its source
 *** ‘guix import elpa’ now supports the non-GNU ELPA repository
@@ -25,26 +30,75 @@ Please send Guix bug reports to bug-guix@gnu.org.
 *** ‘guix import cran’ can now import a specific version
 *** New updater (see ‘guix refresh’): ‘generic-git’
 *** ‘guix graph’ has a new ‘--max-depth’ option
+*** ‘guix deploy’ has a new ‘--execute’ option
 *** ‘--with-commit’ option now accepts strings returned by ‘git describe’
+*** Align tabular data output by commands like ‘guix package --list-available’
+*** Improved ‘guix import go’ importer via a new PEG parser
+*** Improved Software Heritage downloader
+*** New 'web.archive.org’ download fall-back
+*** Various performance enhancements
+*** New ‘--tune’ package transformation option
+*** ‘guix refresh’ ‘-L’ option is repurposed to ‘load-path’ modification
+*** ‘guix system image’ supersedes the ‘docker-image’ sub-command
+
 ** Distribution
 *** The installation script can now enable local substitute servers discovery
 *** More control over boot-time file system checks and repairs
 *** XFS file systems can be created by the installer and mounted by label/UUID
 *** New interface for declaring swap space
 *** GNOME is now at version 42
+*** TeX Live is now at version 2021
+*** Python is now faster thanks to being built with optimizations
 *** The Rust bootstrap now starts from 1.54 instead of 1.19
 *** Most Python 2 packages have been removed
 *** Guix now makes use of parallel xz compression
 *** Faster shared libraries discovery via a per-package dynamic linker cache
-*** Build phases are no longer required to return a boolean
-*** Package inputs can now be provided without explicit labels
+*** Package inputs can now be plain package lists
 *** A package origin can now be a single file rather than an archive
 *** Multiple Tex Live trees can now be used via GUIX_TEXMF
 *** A new sanity-check phase detects packaging problems at build time
-*** G-Expressions can now be used to author build phases
 *** Fetching sources can now fall-back to use Disarchive
+*** Improved CI and infrastructure
+*** Multiple cross-compilation tooling addition and fixes
+*** Many Qt 6 modules are now packaged
+*** Configuring setuid programs is now more flexible
+*** Add support for the XFS file system
+*** Add partial support for LUKS2 headers when using GRUB
+*** GDM now supports Wayland
+*** Guix System static networking support is improved
+*** The installer final configuration is prettified
+*** The installer external command handling is improved
+*** The installer now has a crash dump upload mechanism
+*** Emacs now supports native compilation
+*** GRUB bootloader now supports chain-loading
+
 ** Programming interfaces
 *** (guix records) now supports “field sanitizers”
+*** Build phases are no longer required to return a boolean
+*** G-Expressions can now be used to author build phases
+*** Various improvements to the helpers in (gnu service configuration)
+*** New ‘modify-inputs’ macro to ease customizing a list of package inputs
+*** New ‘this-package-input’ and ‘this-package-native-input’ macros
+*** ‘texlive-union’ is now deprecated in favor of ‘texlive-updmap.cfg’
+*** New (guix cpu) module
+*** New (guix least-authority) module
+*** New (guix plaform) module
+*** New (guix read-print) module
+
+It provides a comment-preserving reader and a comment-preserving
+pretty-printer smarter than (ice-9 pretty-print).
+
+*** New ‘channel-build-system’
+
+This build system lets you build Guix instances from channel specifications,
+similar to how 'guix time-machine' would do it, as regular packages.
+
+*** New ‘elm-build-system’
+*** New ‘rebar-build-system’
+*** New services
+anonip, bitmask, fail2ban, gitile, greetd, jami, lightdm, log-cleanup,
+nar-herder, opendht, rasdaemon, seatd, strongswan
+
 ** Noteworthy bug fixes
 *** Fall back to Software Heritage when cloning a channel
     (<https://issues.guix.gnu.org/44187>)
@@ -56,13 +110,42 @@ Please send Guix bug reports to bug-guix@gnu.org.
     (<https://issues.guix.gnu.org/24937>)
 *** File system flags are validated before system instantiation
     (<https://issues.guix.gnu.org/51425>)
-*** Fonts can now be discovered in any profile
+*** Fonts can now be discovered in any profile via XDG_DATA_DIRS
+    (<https://issues.guix.gnu.org/31403>)
 *** Python modules discovery no longer uses PYTHONPATH
 *** Various Python reproducibility fixes
-*** Installer now supports MSDOS disk labels on UEFI systems
+*** The installer now supports MSDOS disk labels on UEFI systems
     (<https://issues.guix.gnu.org/47889>)
+*** The installer can now properly mount FAT16 partitions
+    (<https://issues.guix.gnu.org/48419>)
+*** The installer no longer crashes when deleting a free space partition
 *** Emacs handles major upgrades better without a re-login
     (<https://bugs.gnu.org/47458>)
+*** The bootloader configuration now accepts multiple targets
+    (<https://issues.guix.gnu.org/40997>.)
+*** A file system mount point is always created when ‘create?’ is true
+    (<https://issues.guix.gnu.org/40158>)
+*** Build the man database only if ‘man-db’ is in the profile
+*** gdk-pixbuf now discovers pixbuf loaders via a search path
+    (<https://issues.guix.gnu.org/50957>)
+*** Gitolite home directory permissions are fixed
+    (https://issues.guix.gnu.org/56444)
+*** The man-db database is indexed via man pages names
+    (https://issues.guix.gnu.org/38838)
+*** ‘chfn’ can now change the user's full name
+    (https://issues.guix.gnu.org/52539)
+*** Gnome settings Bluetooth panel is now working
+    (https://issues.guix.gnu.org/32166)
+*** Inferiors are now caching store connections
+    (https://issues.guix.gnu.org/48007)
+*** The installer doesn't segfault when removing an extended partition
+*** The installer doesn't ship an older Guix revision
+    (https://issues.guix.gnu.org/53210)
+*** The installer cannot proceed without any non-root user accounts
+    (https://issues.guix.gnu.org/54666)
+*** <operating-system> compiler truly honors the 'system' argument
+    (https://issues.guix.gnu.org/55951)
+
 * Changes in 1.3.0 (since 1.2.0)
 ** Package management
 *** POWER9 (powerpc64le-linux) is now supported as a technology preview
diff --git a/gnu/build/marionette.scm b/gnu/build/marionette.scm
index 06b699bd7b..5ebf783892 100644
--- a/gnu/build/marionette.scm
+++ b/gnu/build/marionette.scm
@@ -178,7 +178,18 @@ QEMU monitor and to the guest's backdoor REPL."
     (($ <marionette> command pid monitor (= force repl))
      (write exp repl)
      (newline repl)
-     (read repl))))
+     (with-exception-handler
+         (lambda (exn)
+           (simple-format
+            (current-error-port)
+            "error reading marionette response: ~A
+  remaining response: ~A\n"
+            exn
+            (get-line repl))
+           (raise-exception exn))
+       (lambda ()
+         (read repl))
+       #:unwind? #t))))
 
 (define* (wait-for-file file marionette
                         #:key (timeout 10) (read 'read))
@@ -187,7 +198,14 @@ FILE has not shown up after TIMEOUT seconds, raise an error."
   (match (marionette-eval
           `(let loop ((i ,timeout))
              (cond ((file-exists? ,file)
-                    (cons 'success (call-with-input-file ,file ,read)))
+                    (cons 'success
+                          (let ((content
+                                 (call-with-input-file ,file ,read)))
+                            (if (eof-object? content)
+                                ;; #<eof> can't be read, so convert to the
+                                ;; empty string
+                                ""
+                                content))))
                    ((> i 0)
                     (sleep 1)
                     (loop (- i 1)))
diff --git a/gnu/local.mk b/gnu/local.mk
index bad2714cf0..a1e8a0f389 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1321,7 +1321,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/jamvm-2.0.0-disable-branch-patching.patch	\
   %D%/packages/patches/jamvm-2.0.0-opcode-guard.patch		\
   %D%/packages/patches/java-antlr4-Add-standalone-generator.patch	\
-  %D%/packages/patches/java-antlr4-fix-code-too-large.java	\
   %D%/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch	\
   %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch	\
   %D%/packages/patches/java-commons-collections-fix-java8.patch \
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 663123e638..fd27c1cc71 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -3615,7 +3615,7 @@ stretching and pitch scaling of audio.  This package contains the library.")
         (base32 "0nvhdzy0m3bchk3dpnspv2f518p2v9fjcrv36z1sva1pv9a2g35w"))))
     (build-system cmake-build-system)
     (native-inputs
-     (list catch-framework2))
+     (list catch2))
     (inputs
      (list fftw))
     (home-page "https://mixxxdj.github.io/libkeyfinder/")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index f35412d4ec..b35802e915 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -3792,7 +3792,7 @@ comment or quality sections.")
     (inputs
      (list gsl openblas zlib))
     (native-inputs
-     `(("catch" ,catch-framework2-1)
+     `(("catch" ,catch2-1)
        ("perl" ,perl)
        ("shunit2" ,shunit2)
        ("which" ,which)))
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index b521b57ecd..210bc30536 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -600,7 +600,12 @@ also initializes the boards (RAM etc).")
               (("'cc'") "'gcc'"))
              (substitute* "tools/patman/test_util.py"
               ;; python3-coverage is simply called coverage in guix.
-              (("python3-coverage") "coverage"))
+               (("python3-coverage") "coverage")
+
+               ;; Don't require 100% coverage since it's brittle and can
+               ;; fail with newer versions of coverage or dependencies.
+               (("raise ValueError\\('Test coverage failure'\\)")
+                "print('Continuing anyway since Guix does not care :O')"))
              (substitute* "test/run"
               ;; Make it easier to find test failures.
               (("#!/bin/bash") "#!/bin/bash -x")
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index b5b9d501f9..84a62d0fd6 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -45,9 +45,11 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
@@ -62,7 +64,7 @@
   #:use-module (gnu packages rpc)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages ninja)
+  #:use-module (gnu packages version-control)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python))
 
@@ -342,6 +344,81 @@ resembles Python.")
 ;; TODO: Bump this in the next rebuild cycle.
 (define-public meson meson-0.60)
 
+(define-public meson-python
+  (package
+    (name "meson-python")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "meson_python" version))
+              (sha256
+               (base32
+                "0k2yn0iws1n184sdznzmfw4xgbqgq5cn02hpc7m0xdaxryj1ybs4"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'avoid-ninja-dependency
+                 (lambda _
+                   ;; Avoid dependency on the "ninja" PyPI distribution,
+                   ;; which is a meta-package that simply downloads and
+                   ;; installs ninja from the web ...
+                   (substitute* "pyproject.toml"
+                     (("'ninja',")
+                      ""))))
+               (replace 'build
+                 (lambda _
+                   ;; ZIP does not support timestamps before 1980.
+                   (setenv "SOURCE_DATE_EPOCH" "315532800")
+                   (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))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "pytest" "-vv" "tests" "-k"
+                             (string-append
+                              "not "
+                              ;; These tests require a git checkout.
+                              (string-join '("test_contents_unstaged"
+                                             "test_no_pep621"
+                                             "test_pep621"
+                                             "test_dynamic_version"
+                                             "test_contents"
+                                             "test_contents_subdirs")
+                                           " and not ")))))))))
+    (propagated-inputs
+     (list meson-0.63                   ;>=0.62 required
+           ninja
+           ;; XXX: python-meson forcefully sets the RUNPATH of binaries
+           ;; for vendoring purposes, and uses PatchELF for that(!).  This
+           ;; functionality is not useful in Guix, but removing this
+           ;; dependency is tricky.  There is discussion upstream about making
+           ;; it optional, but for now we'll just carry it:
+           ;; https://github.com/FFY00/meson-python/issues/125
+           patchelf
+           python-colorama
+           python-pyproject-metadata
+           python-tomli
+           python-wheel))
+    (native-inputs
+     (list python-pypa-build
+           python-wheel
+
+           ;; For tests.
+           pkg-config
+           python-gitpython
+           python-pytest
+           python-pytest-mock))
+    (home-page "https://github.com/FFY00/mesonpy")
+    (synopsis "Meson-based build backend for Python")
+    (description
+     "meson-python is a PEP 517 build backend for Meson projects.")
+    (license license:expat)))
+
 (define-public premake4
   (package
     (name "premake")
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 3ee8fd9b01..4a42bc7eca 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -441,7 +441,7 @@ PyUnit and others.")
 multi-paradigm automated test framework for C++ and Objective-C.")
     (license license:boost1.0)))
 
-(define-public catch-framework2-1
+(define-public catch2-1
   (package
     (name "catch2")
     (version "1.12.2")
@@ -470,7 +470,7 @@ multi-paradigm automated test framework for C++ and Objective-C.")
 a multi-paradigm automated test framework for C++ and Objective-C.")
     (license license:boost1.0)))
 
-(define-public catch-framework2
+(define-public catch2
   (package
     (name "catch2")
     (version "2.13.8")
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index 735d599d2d..c517610fe8 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -559,7 +559,7 @@ symmetries written in C.  Spglib can be used to:
            glm
            netcdf))
     (native-inputs
-     (list catch-framework2 python-setuptools))
+     (list catch2 python-setuptools))
     (home-page "https://pymol.org")
     (synopsis "Molecular visualization system")
     (description "PyMOL is a capable molecular viewer and renderer.  It can be
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 6289c9520f..d03e0bc7e1 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -531,7 +531,7 @@ functions, class methods, and stl containers.
               (modules '((guix build utils)))
               (snippet '(delete-file-recursively "./test/thirdparty"))))
     (inputs
-     (list catch-framework2-1))
+     (list catch2-1))
     (build-system cmake-build-system)
     (arguments
      '(#:phases
@@ -1264,7 +1264,7 @@ services including database, analytic, and machine learning technologies.")
            (lambda _
              (invoke "./tests"))))))
     (native-inputs
-     (list catch-framework2))
+     (list catch2))
     (synopsis "C++11/14/17 std::expected with functional-style extensions")
     (description "@code{std::expected} is proposed as the preferred way to
 represent objects which will either have an expected value, or an unexpected
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index c3a27cb113..df4064ae56 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Mathieu Laparie <mlaparie@disr.it>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -678,3 +679,43 @@ format documents, with the following features:
 @item handling encrypted documents
 @end itemize\n")
     (license license:lgpl3+)))
+
+(define-public python-ebooklib
+  (package
+    (name "python-ebooklib")
+    (version "0.17.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "EbookLib" version))
+              (sha256
+               (base32
+                "1w972g0kmh9cdxf3kjr7v4k99wvv4lxv3rxkip39c08550nf48zy"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-lxml python-six))
+    (home-page "https://github.com/aerkalov/ebooklib")
+    (synopsis "Ebook library which can handle EPUB2/EPUB3 and Kindle format")
+    (description
+     "Ebook library which can handle EPUB2/EPUB3 and Kindle format.")
+    (license license:agpl3+)))
+
+(define-public shirah
+  (package
+    (name "shirah")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "shirah_reader" version))
+              (sha256
+               (base32
+                "0j15v435lz68c1mj5clfx5dmfyjc6jvvz2q8hqvv799mb2faj42y"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-beautifulsoup4 python-ebooklib
+                             python-syllables python-termcolor))
+    (home-page "https://github.com/hallicopter/shirah-reader")
+    (synopsis "Terminal ebook reader with an optional RSVP mode")
+    (description
+     "@command{shirah} is a curses based terminal ebook reader that can
+display ebooks in the usual way or with Rapid Serial Visual Presentation, a
+method to enable speedreading by showing the text word by word at configurable
+speeds.")
+  (license license:gpl2+)))
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index afe93ef842..54cd00d08d 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2022 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
@@ -45,6 +47,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages image)
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde)
@@ -1075,3 +1078,75 @@ machine, and more.")
     (description "Commandline client for exercism.io, a free service providing
 mentored learning for programming languages.")
     (license license:expat)))
+
+(define-public mazo
+  (package
+    (name "mazo")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/luis-felipe/mazo.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "06246380i5rxycniwg5syn0aldd2zy10cbqk1lgyc0qfqb2lyrwj"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:use-setuptools? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'build)
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (let* ((out (assoc-ref outputs "out"))
+                      (home (string-append out "/tmp")))
+                 (add-installed-pythonpath inputs outputs)
+                 (setenv "HOME" home)
+                 (invoke "python3" "manage.py" "test")))))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (script (string-append bin "/mazo"))
+                    (share (string-append out "/share"))
+                    (help (string-append share "/help/C/mazo"))
+                    (icons (string-append
+                            share
+                            "/icons/hicolor/scalable/apps"))
+                    (apps (string-append share "/applications"))
+                    (site (string-append
+                           (site-packages inputs outputs)
+                           "/mazo")))
+               (mkdir-p help)
+               (mkdir-p bin)
+               (copy-file "mazo.py" script)
+               (chmod script #o555)
+               (install-file "icons/mazo.svg" icons)
+               (install-file "lugare.ulkeva.Mazo.desktop" apps)
+               (copy-recursively "help/C/mazo" help)
+               (copy-recursively "mazo" site)))))))
+    (native-inputs
+     (list python-django
+           python-django-cleanup
+           python-django-svg-image-form-field
+           python-pillow
+           python-pycairo))
+    (propagated-inputs
+     (list gstreamer
+           gtk+
+           python
+           python-django
+           python-django-cleanup
+           python-django-svg-image-form-field
+           python-pillow
+           python-pycairo
+           python-pygobject
+           yelp))
+    (home-page "https://luis-felipe.gitlab.io/mazo/")
+    (synopsis "Memorize concepts using multimedia flash cards")
+    (description "Mazo is a learning application that helps you memorize
+simple concepts using multimedia flash cards and spaced reviews.")
+    (license license:public-domain)))
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index 4b31c3131b..1f82b2447e 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -58,7 +58,7 @@
         (base32 "0wbb6dwmzlsyy224y0liis0azgzwbjdvcyzc31pw1aw6vbp36na6"))))
     (build-system cmake-build-system)
     (native-inputs
-     (list catch-framework2
+     (list catch2
            git-minimal
            perl
            ;;FIX-ME: Building with ronn fails.
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 673ea8023b..5c84b9ede0 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -3218,7 +3218,7 @@ perform various useful functions such as:
     ;;      with all of these.
     (inputs
      `(("boost" ,boost)
-       ("catch2" ,catch-framework2)
+       ("catch2" ,catch2)
        ("cgal" ,cgal)
        ("eigen" ,eigen)
        ("embree" ,embree)
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index edcd888f73..a812476db1 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -756,7 +756,7 @@ OpenType variant of these fonts.")
 (define-public font-amiri
   (package
     (name "font-amiri")
-    (version "0.114")
+    (version "0.117")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -765,7 +765,7 @@ OpenType variant of these fonts.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "01d54i68pmy37fhvxv8kld3iqlc1m0vr871zd66y5y4c7kn2v7as"))))
+                "1z2hdmny52bapakf96y5xfr29f8ax7q6nj651zrihnnhfdriqfx1"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -779,6 +779,7 @@ OpenType variant of these fonts.")
                      (assoc-ref font:%standard-phases 'install)))))
     (native-inputs
      (list python-fonttools
+           python-glyphsets
            python-pcpp
            python-opentype-sanitizer
            python-sfdlib
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index bedd8ead8c..902472546e 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -138,16 +138,22 @@ them as it goes.")
 (define-public python-afdko
   (package
     (name "python-afdko")
-    (version "3.8.1")
+    (version "3.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "afdko" version))
        (sha256
-        (base32 "171r9f7n8fgz37dkcgpzj508lxfafcyzzx43ps12j1z2nk1sk905"))
+        (base32 "0k1204vykgx32saa495s1lgmz1dixcp8bjiv486imx77killvm02"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
+            (substitute*
+                "tests/buildcff2vf_data/expected_output/SHSansJPVFTest.ttx"
+              ;; Adjust expected output to match newer fonttools.  Taken from:
+              ;; https://github.com/adobe-type-tools/afdko/commit/7c526390a10e
+              (("FDSelect format=\"3\"")
+               "FDSelect format=\"0\""))
             (with-directory-excursion "c/makeotf/lib/hotconv"
               ;; Delete ANTLR-generated code.
               (for-each delete-file
@@ -158,6 +164,27 @@ them as it goes.")
      (list
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-c++17
+            (lambda _
+              ;; ANTLR4 4.10 and later require C++ 17.
+              (substitute* "CMakeLists.txt"
+                (("CMAKE_CXX_STANDARD 11")
+                 "CMAKE_CXX_STANDARD 17"))))
+          (add-after 'unpack 'use-system-libxml2
+            (lambda _
+              ;; XXX: These horrifying substitutions revert this upstream
+              ;; PR: <https://github.com/adobe-type-tools/afdko/pull/1527>.
+              ;; Hopefully it's only temporary..!
+              (substitute* (find-files "." "^CMakeLists.txt$")
+                (("\\(\\(NOT \\$\\{LibXml2_FOUND\\}\\) OR \
+\"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)")
+                 "(NOT ${LibXml2_FOUND})")
+                (("\\(\\(\\$\\{LibXml2_FOUND\\}\\) AND \
+\\(NOT \"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)\\)")
+                 "(${LibXml2_FOUND})"))
+                (substitute* "cmake/ExternalLibXML2.cmake"
+                  (("set\\(LIBXML2_STATIC_INCLUDE_DIR")
+                   "set(LIBXML2_INCLUDE_DIR)"))))
           (add-after 'unpack 'patch-problematic-requirements
             (lambda _
               (substitute* "requirements.txt"
@@ -177,7 +204,8 @@ them as it goes.")
                  (format #f "include_directories(SYSTEM ~a)"
                          (search-input-directory inputs
                                                  "include/antlr4-runtime"))))
-              (substitute* "c/makeotf/lib/hotconv/CMakeLists.txt"
+              (substitute* '("c/makeotf/lib/hotconv/CMakeLists.txt"
+                             "c/makeotf/lib/cffread/CMakeLists.txt")
                 (("antlr4_static")
                  "antlr4-runtime"))))
           (add-after 'unpack 'regenerate-hotconv-grammar
@@ -198,7 +226,8 @@ them as it goes.")
             (lambda* (#:key tests? #:allow-other-keys)
               (when tests?
                 (setenv "HOME" "/tmp")
-                (invoke "pytest" "-vv"))))
+                (invoke "pytest" "-vv" "--dist" "loadfile" "-n"
+                        (number->string (parallel-job-count))))))
           (add-after 'check 'wrap
             (assoc-ref %standard-phases 'wrap))
           (add-before 'wrap 'wrap-PATH
@@ -216,11 +245,16 @@ them as it goes.")
      (list antlr4
            openjdk                      ;required by antlr4
            ninja
+           pkg-config
            python-pytest
+           python-pytest-xdist
            python-scikit-build
            python-setuptools-scm
            python-wheel))
-    (inputs (list java-antlr4-runtime-cpp `(,util-linux "lib")))
+    (inputs
+     (list java-antlr4-runtime-cpp
+           libxml2
+           `(,util-linux "lib")))
     (propagated-inputs
      (list psautohint
            python-booleanoperations
@@ -349,13 +383,13 @@ Kit for OpenType (AFDKO) @command{tx} tool.")
 (define-public python-compreffor
   (package
     (name "python-compreffor")
-    (version "0.5.1.post1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "compreffor" version))
        (sha256
-        (base32 "1r3wqd67qnz8p6irv68mvadqv1nklgzw53376iarw3pq4gxrma36"))))
+        (base32 "0r6vlxrm73j719f5q3n6sy737p2424n7qam52am83p55j0fb9h5f"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -405,13 +439,13 @@ converts any cubic curves to quadratic.  The most useful function is probably
 (define-public python-ufo2ft
   (package
     (name "python-ufo2ft")
-    (version "2.26.0")
+    (version "2.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ufo2ft" version))
        (sha256
-        (base32 "0a6iq5g6qdxj7nvip8nnf0mf8y5wmpd3wwq0dv7d4nm9bjrh0r6m"))))
+        (base32 "068hm62s1iphyg66w96vgiif6ahpcsaf8fr44rk6jdf71f6fyqd5"))))
     (build-system python-build-system)
     (native-inputs
      (list python-pytest python-pytest-runner python-setuptools-scm))
@@ -436,13 +470,13 @@ to generate OpenType font binaries from Unified Font Objects (UFOs).")
 (define-public python-fontmath
   (package
     (name "python-fontmath")
-    (version "0.9.1")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fontMath" version ".zip"))
        (sha256
-        (base32 "001756zxn2386dm4svgqjgw5026hvyacxl09b2qlk7s06phpcphw"))))
+        (base32 "014407hpvqdx123g06i664qrfq86bf9l621x7jllpgqw3rqir2sc"))))
     (build-system python-build-system)
     (propagated-inputs (list python-fonttools))
     (native-inputs
@@ -509,13 +543,13 @@ implementing the pen protocol for manipulating glyphs.")
   (hidden-package
    (package
      (name "python-fontparts-bootstrap")
-     (version "0.10.4")
+     (version "0.10.8")
      (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "fontParts" version ".zip"))
         (sha256
-         (base32 "1ic453q86s5hsw8mxnclk1vr4qp69fd67gywhv23zqwz9a7kb7lh"))))
+         (base32 "0i5ww6yl9m74wnjd7gyvjkdh7m56haql4gv7lasmppdipay2209g"))))
      (build-system python-build-system)
      (propagated-inputs
       (list python-booleanoperations
@@ -540,6 +574,101 @@ process.  FontParts is the successor of RoboFab.")
      (alist-delete 'hidden?
                    (package-properties python-fontparts-bootstrap)))))
 
+(define-public python-glyphslib
+  (package
+    (name "python-glyphslib")
+    (version "6.0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "glyphsLib" version))
+              (sha256
+               (base32
+                "0mkkwd09g76hvif603ij5aqicxh47zvhgyyd0pjcjmpdy6dr70yw"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda _
+              ;; The Zip format does not support pre-1980 time stamps.
+              (let ((circa-1980 (* 10 366 24 60 60)))
+                (setenv "SOURCE_DATE_EPOCH" (number->string circa-1980))
+                (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))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "GUIX_PYTHONPATH"
+                        (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
+                (invoke "pytest" "-vv"
+                        ;; These fail because the test data has not yet been
+                        ;; updated for newer FontTools:
+                        ;;   https://github.com/googlefonts/glyphsLib/issues/787
+                        ;; Re-enable for versions > 6.0.7.
+                        "--ignore=tests/builder/designspace_gen_test.py"
+                        "--ignore=tests/builder/interpolation_test.py"
+                        )))))))
+    (native-inputs
+     (list python-pypa-build
+           python-setuptools-scm
+           python-wheel
+
+           ;; For tests.
+           python-pytest
+           python-xmldiff))
+    (propagated-inputs
+     (list python-defcon
+           python-fonttools
+           python-openstep-plist
+           python-ufolib2
+           python-ufo2ft
+           python-ufonormalizer))
+    (home-page "https://github.com/googlefonts/glyphsLib")
+    (synopsis "Bridge Glyphs source files to UFOs")
+    (description
+     "This package provides a bridge from Glyphs source files (@file{.glyphs})
+to UFOs and DesignSpace files via @code{defcon} and @code{designspaceLib}.")
+    (license license:asl2.0)))
+
+(define-public python-glyphsets
+ (package
+  (name "python-glyphsets")
+  (version "0.5.2")
+  (source (origin
+            (method url-fetch)
+            (uri (pypi-uri "glyphsets" version))
+            (sha256
+             (base32
+              "1dc24i0hkd85gkkg3bqjhagjyw3xsqxazd86yh2l60c1wr5n9y6g"))))
+  (build-system python-build-system)
+  (arguments
+   (list #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'loosen-version-constraints
+               (lambda _
+                 (substitute* "setup.py"
+                   (("setuptools_scm>=4,<6\\.1")
+                    "setuptools_scm>=4"))))
+             (replace 'check
+               (lambda* (#:key tests? #:allow-other-keys)
+                 (when tests?
+                   (invoke "pytest" "-vv" "tests/testglyphdata.py")
+                   (invoke "pytest" "-vv" "tests/testusage.py")))))))
+  (native-inputs (list python-pytest python-setuptools-scm))
+  (propagated-inputs
+   (list python-defcon python-fonttools python-glyphslib))
+  (home-page "https://github.com/googlefonts/glyphsets/")
+  (synopsis "Evaluate coverage of glyph sets")
+  (description
+   "This package provides an API with data about glyph sets for many
+different scripts and languages.")
+  (license license:asl2.0)))
+
 (define-public python-opentype-sanitizer
   (package
     (name "python-opentype-sanitizer")
@@ -1556,13 +1685,13 @@ API-compatible with defcon.")
 (define-public python-defcon-bootstrap
   (package
     (name "python-defcon-bootstrap")
-    (version "0.10.0")
+    (version "0.10.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "defcon" version ".zip"))
        (sha256
-        (base32 "0g0bjwzdj6sskyh8snbxsxza3czdmvb807qv38mizx631cm8c2d0"))))
+        (base32 "0i1a306b8c42dpbplwxj6ili2aac5lwq2ir6r1jswicysvk9dqxf"))))
     (build-system python-build-system)
     (propagated-inputs (list python-fontpens-bootstrap python-fonttools-full))
     (native-inputs
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 58b81bf83a..11c56477a8 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -58,7 +58,8 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages algebra)
-  #:use-module (gnu packages libftdi))
+  #:use-module (gnu packages libftdi)
+  #:use-module (gnu packages libusb))
 
 (define-public abc
  (let ((commit "5ae4b975c49c")
@@ -584,3 +585,29 @@ libraries, optionally encrypted, into other simulators.")
 hardware designs in Verilog.")
       (home-page "https://zipcpu.com/")
       (license license:lgpl3+))))
+
+(define-public openfpgaloader
+  (package
+    (name "openfpgaloader")
+    (version "0.9.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/trabucayre/openFPGALoader.git")
+                     (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1v3bwzhsrnsn304cqhd5azn68cl847qv8w8cb8bl7372jiqz5wqq"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list libftdi libusb hidapi zlib))
+    (arguments
+     `(#:tests? #f)) ; No tests exist
+    (synopsis "Utility for programming FPGA")
+    (description "This package provides a program to transfer a bitstream
+to an FPGA.")
+    (home-page "https://f4pga.org/")
+    (license license:asl2.0)))
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index d210cd63b5..4fdee3dc7b 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -65,6 +65,7 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages cups)
@@ -823,42 +824,72 @@ street bearings/orientations, and speed/travel time.")
     (license license:expat)))
 
 (define-public mapnik
-  (package
-    (name "mapnik")
-    (version "3.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/mapnik/mapnik/releases/download/v"
-                           version "/mapnik-v" version ".tar.bz2"))
-       (sha256
-        (base32
-         "0qb2irykja5qhr9apz9r230pcxap9v3j85fi98mj2xd9sa163ms3"))))
-    (build-system scons-build-system)
-    (inputs
-     (list boost
-           cairo
-           freetype
-           harfbuzz
-           icu4c
-           libjpeg-turbo
-           libpng
-           libtiff
-           libwebp
-           libxml2
-           proj.4
-           sqlite
-           zlib))
-    (native-inputs
-     (list pkg-config postgresql))
-    (arguments
-     `(#:scons-flags
-       (list "CC=gcc"
-             (string-append "PREFIX=" %output)
-             (string-append "CUSTOM_LDFLAGS=-Wl,-rpath=" %output "/lib"))))
-    (home-page "https://mapnik.org/")
-    (synopsis "Toolkit for developing mapping applications")
-    (description "Mapnik is a toolkit for developing mapping applications.  It
+  ;; There hasn't been a release since early 2021, and it fails to build with
+  ;; Boost 1.77+.
+  (let ((commit "81103491b467e17218140f50bc0bb9dc8c1f0317")
+        (revision "0"))
+    (package
+      (name "mapnik")
+      (version (git-version "3.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mapnik/mapnik")
+               (commit commit)
+               ;; TODO: Un-bundle mapbox dependencies (not yet packaged).
+               (recursive? #t)))        ;for mapbox dependencies and test data
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "094nam57bdd5nak88qy33z2p3kjahk3vk2nk56m5jkcr5d3hlnx2"))))
+      (build-system qt-build-system)
+      (arguments
+       (list
+        #:cmake cmake                   ;for FIND_PACKAGE_ARGS
+        #:configure-flags
+        #~(list (string-append "-DCMAKE_CXX_FLAGS=-I"
+                               #$(this-package-native-input "catch2")
+                               "/include/catch2"))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'use-system-catch2
+              (lambda _
+                (substitute* "test/CMakeLists.txt"
+                  (("GIT_TAG.*v2.13.7" all)
+                   (string-append all "\n"
+                                  "  FIND_PACKAGE_ARGS NAMES Catch2"))
+                  (("^include.*Catch2_SOURCE_DIR.*contrib/Catch.cmake.*")
+                   "include(Catch)\n"))))
+            (add-after 'unpack 'disable-problematic-tests
+              (lambda _
+                ;; The 'ogr' test fails for unknown reasons.  Mark it as
+                ;; expected to fail (see:
+                ;; https://github.com/mapnik/mapnik/issues/4329).
+                (substitute* "test/unit/datasource/ogr.cpp"
+                  (("TEST_CASE\\(\"ogr\"" all)
+                   (string-append all ", \"[!shouldfail]\""))))))))
+      (native-inputs
+       (list catch2
+             pkg-config
+             postgresql))
+      (inputs
+       (list boost
+             cairo
+             freetype
+             gdal
+             harfbuzz
+             icu4c
+             libjpeg-turbo
+             libpng
+             libtiff
+             libwebp
+             libxml2
+             proj
+             sqlite
+             zlib))
+      (home-page "https://mapnik.org/")
+      (synopsis "Toolkit for developing mapping applications")
+      (description "Mapnik is a toolkit for developing mapping applications.  It
 is basically a collection of geographic objects like maps, layers,
 datasources, features, and geometries.  At its core is a C++ shared library
 providing algorithms and patterns for spatial data access and visualization.
@@ -866,15 +897,15 @@ The library does not rely on any specific windowing system and can be deployed
 to any server environment.  It is intended to play fair in a multi-threaded
 environment and is aimed primarily, but not exclusively, at web-based
 development.")
-    (license (list license:lgpl2.1+
-                   ;; demo/viewer, demo/python/rundemo.py
-                   license:gpl2+
-                   ;; deps/boost, deps/mapbox, deps/agg/include/agg_conv_offset.h
-                   license:boost1.0
-                   ;; deps/mapnik/sparsehash
-                   license:bsd-3
-                   ;; deps/agg
-                   (license:non-copyleft "file://deps/agg/copying")))))
+      (license (list license:lgpl2.1+
+                     ;; demo/viewer, demo/python/rundemo.py
+                     license:gpl2+
+                     ;; deps/boost, deps/mapbox, deps/agg/include/agg_conv_offset.h
+                     license:boost1.0
+                     ;; deps/mapnik/sparsehash
+                     license:bsd-3
+                     ;; deps/agg
+                     (license:non-copyleft "file://deps/agg/copying"))))))
 
 (define-public spatialite-gui
   (package
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 201d939918..cb255fc488 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -9730,8 +9730,10 @@ associations for GNOME.")
            gobject-introspection
            gsettings-desktop-schemas
            pkg-config))
-    (inputs
-     (list rest-next))
+    (propagated-inputs
+     ;; These dependencies are required by govirt-1.0.pc.
+     (list glib
+           rest-next))
     (synopsis "GoVirt Library")
     (description "GoVirt is a GObject wrapper for the oVirt REST API.")
     (home-page "https://gitlab.gnome.org/GNOME/libgovirt")
diff --git a/gnu/packages/irods.scm b/gnu/packages/irods.scm
index e9ac0d5297..58ef3bf474 100644
--- a/gnu/packages/irods.scm
+++ b/gnu/packages/irods.scm
@@ -154,7 +154,7 @@
        ("unixodbc" ,unixodbc)
        ("zeromq" ,zeromq)))
     (native-inputs
-     `(("catch2" ,catch-framework2)
+     `(("catch2" ,catch2)
        ("clang" ,clang-toolchain-6)
        ("clang-runtime" ,clang-runtime-6)
        ("libcxx+libcxxabi" ,libcxx+libcxxabi-6)))
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 8b3b172ae9..f467c473d7 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8717,7 +8717,7 @@ actual rendering.")
 (define-public java-antlr4-runtime
   (package
     (name "java-antlr4-runtime")
-    (version "4.8")
+    (version "4.10.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8726,10 +8726,9 @@ actual rendering.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1qal3add26qxskm85nk7r758arladn5rcyjinmhlhznmpbbv9j8m"))
+                "0ldvd9jm4nrivaw7i7wh1q40q6xgzmzirsywiakbhg8sppagqlv7"))
               (patches
-                (search-patches "java-antlr4-Add-standalone-generator.patch"
-                                "java-antlr4-fix-code-too-large.java"))))
+                (search-patches "java-antlr4-Add-standalone-generator.patch"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "java-antlr4-runtime.jar"
@@ -8759,6 +8758,8 @@ sources by ANTLR.")
       ;; TODO: try to run the tests under
       ;; runtime-testsuite/test/org/antlr/v4/test/runtime/cpp with antlr4.
       #:tests? #f                       ;no CMake test target
+      ;; TODO: Building the tests wants to download googletest.
+      #:configure-flags #~'("-DANTLR_BUILD_CPP_TESTS=OFF")
       #:phases
       #~(modify-phases %standard-phases
           (add-after 'unpack 'chdir
@@ -8787,10 +8788,12 @@ generated sources by ANTLR.")))
     (arguments
      `(#:jar-name "antlr4.jar"
        #:source-dir "tool/src"
-       #:test-dir "tool-testsuite/test:runtime-testsuite/test:runtime-testsuite/annotations/src"
+       #:test-dir "tool-testsuite/test:runtime-testsuite/test"
        #:test-include (list "**/Test*.java")
        #:test-exclude (list
-                        ;; no runnable method
+                       ;; These have no runnable methods and fail because
+                       ;; test-include above is too broad.
+                        "**/TestContext.java"
                         "**/TestOutputReading.java"
                         ;; no @Test methods
                         "**/TestParserErrors.java"
@@ -8808,9 +8811,7 @@ generated sources by ANTLR.")))
                         "**/TestFullContextParsing.java"
                         "**/TestCompositeLexers.java"
                         ;; Null pointer exception
-                        "**/TestCompositeGrammars.java"
-                        ;; Wrong assumption on emoji
-                        "**/TestUnicodeData.java")
+                        "**/TestCompositeGrammars.java")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-build.xml
@@ -8824,7 +8825,6 @@ generated sources by ANTLR.")))
          (add-after 'bin-install 'check
            (lambda _
              (invoke "ant" "compile-tests")
-             (invoke "ant" "check" "-Dtest.home=runtime-testsuite/annotations/src")
              (invoke "ant" "check" "-Dtest.home=runtime-testsuite/test")
              (invoke "ant" "check" "-Dtest.home=tool-testsuite/test")
              #t))
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 47845700ee..e2cdf7c448 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -311,7 +311,7 @@ through a text-based interface.")
 (define-public python-pyzabbix
   (package
     (name "python-pyzabbix")
-    (version "1.0.0")
+    (version "1.2.1")
     (home-page "https://github.com/lukecyca/pyzabbix")
     ;; No tests on PyPI, use the git checkout.
     (source
@@ -321,26 +321,20 @@ through a text-based interface.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "146pv8bj6pv8max1lkm07560b9zcc268c927kff6rcib47qxfnn2"))))
+         "0ad5xac67brmwc3wd0f87pjplly3cqyrz1dp725lzz2hrjgiaqi8"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'patch
-                    (lambda _
-                      ;; Permit newer versions of httpretty.
-                      (substitute* "setup.py"
-                        (("httpretty<0\\.8\\.7")
-                         "httpretty"))))
                   (replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (if tests?
-                          (invoke "nosetests")
+                          (invoke "pytest" "-vv" "tests")
                           (format #t "test suite not run~%")))))))
     (native-inputs
      ;; For tests.
-     (list python-httpretty python-nose))
+     (list python-requests-mock python-pytest))
     (propagated-inputs
-     (list python-requests python-semantic-version))
+     (list python-packaging python-requests))
     (synopsis "Python interface to the Zabbix API")
     (description
      "@code{pyzabbix} is a Python module for working with the Zabbix API.")
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index ee4d91bd2a..a69c7fbad8 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1378,7 +1378,7 @@ between different versions of ØMQ.")
     (native-inputs
      (list pkg-config))
     (inputs
-     (list catch-framework2 zeromq))
+     (list catch2 zeromq))
     (home-page "https://zeromq.org")
     (synopsis "C++ bindings for the ØMQ messaging library")
     (description
@@ -3603,7 +3603,7 @@ communication over HTTP.")
     (build-system cmake-build-system)
     (inputs                             ; TODO: Need to force-keep references on some inputs, e.g. boost.
      (list zlib
-           catch-framework2
+           catch2
            openssl
            boost
            pcre
diff --git a/gnu/packages/nfs.scm b/gnu/packages/nfs.scm
index ce951543ff..d5ebe6a760 100644
--- a/gnu/packages/nfs.scm
+++ b/gnu/packages/nfs.scm
@@ -116,7 +116,6 @@
     (inputs
      `(("keyutils" ,keyutils)
        ("libevent" ,libevent)
-       ("libnfsidmap" ,libnfsidmap)
        ("rpcsvc-proto" ,rpcsvc-proto)   ;for 'rpcgen'
        ("sqlite" ,sqlite)
        ("lvm2" ,lvm2)
diff --git a/gnu/packages/patches/java-antlr4-fix-code-too-large.java b/gnu/packages/patches/java-antlr4-fix-code-too-large.java
deleted file mode 100644
index 9e9f92349d..0000000000
--- a/gnu/packages/patches/java-antlr4-fix-code-too-large.java
+++ /dev/null
@@ -1,90 +0,0 @@
-From d22db2048534bdf3d9615117291f9d86564ff10d Mon Sep 17 00:00:00 2001
-From: Julien Lepiller <julien@lepiller.eu>
-Date: Sat, 19 Sep 2020 21:05:48 +0200
-Subject: [PATCH] Separate addPropertyAliases in two methods
-
-The quantity of data used to generate addPropertyAliases creates a big
-method, that is too big for java and results in "error: code too large".
-This is most likely due to added data between the expected version of
-icu and the actual version of icu in Guix.
----
- .../org/antlr/v4/tool/templates/unicodedata.st | 17 ++++++++++++++---
- .../unicode/UnicodeDataTemplateController.java | 18 ++++++++++--------
- 2 files changed, 24 insertions(+), 11 deletions(-)
-
-diff --git a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
-index 0f22c73..3573873 100644
---- a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
-+++ b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
-@@ -1,4 +1,4 @@
--unicodedata(propertyCodePointRanges, propertyAliases) ::= <<
-+unicodedata(propertyCodePointRanges, propertyAliasesA, propertyAliasesB) ::= <<
- package org.antlr.v4.unicode;
- 
- import java.util.Arrays;
-@@ -15,7 +15,7 @@ import org.antlr.v4.runtime.misc.Interval;
-  */
- public abstract class UnicodeData {
-        private static final Map\<String, IntervalSet\> propertyCodePointRanges = new HashMap\<\>(<length(propertyCodePointRanges)>);
--       private static final Map\<String, String\> propertyAliases = new HashMap\<\>(<length(propertyAliases)>);
-+       private static final Map\<String, String\> propertyAliases = new HashMap\<\>(<length(propertyAliasesA)> + <length(propertyAliasesB)>);
- 
-        // Work around Java 64k bytecode method limit by splitting up static
-        // initialization into one method per Unicode property
-@@ -30,9 +30,20 @@ static private void addProperty<i>() {
-        propertyCodePointRanges.put("<k>".toLowerCase(Locale.US), codePointRanges);
- \}}; separator="\n\n">
- 
-+       // Property aliases
-+       static private void addPropertyAliases1() {
-+              <propertyAliasesA.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesA.(k)>".toLowerCase(Locale.US)); }; separator="\n">
-+       }
-+
-+       // Property aliases
-+       static private void addPropertyAliases2() {
-+              <propertyAliasesB.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesB.(k)>".toLowerCase(Locale.US)); }; separator="\n">
-+       }
-+
-        // Property aliases
-        static private void addPropertyAliases() {
--              <propertyAliases.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliases.(k)>".toLowerCase(Locale.US)); }; separator="\n">
-+             addPropertyAliases1();
-+             addPropertyAliases2();
-        }
- 
-        // Put it all together
-diff --git a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
-index da244a3..dc591cb 100644
---- a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
-+++ b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
-@@ -78,17 +78,19 @@ public abstract class UnicodeDataTemplateController {
- 		addTR35ExtendedPictographicPropertyCodesToCodePointRanges(propertyCodePointRanges);
- 		addEmojiPresentationPropertyCodesToCodePointRanges(propertyCodePointRanges);
- 
--		Map<String, String> propertyAliases = new LinkedHashMap<>();
--		addUnicodeCategoryCodesToNames(propertyAliases);
--		addUnicodeBinaryPropertyCodesToNames(propertyAliases);
--		addUnicodeScriptCodesToNames(propertyAliases);
--		addUnicodeBlocksToNames(propertyAliases);
--		addUnicodeIntPropertyCodesToNames(propertyAliases);
--		propertyAliases.put("EP", "Extended_Pictographic");
-+		Map<String, String> propertyAliases1 = new LinkedHashMap<>();
-+		Map<String, String> propertyAliases2 = new LinkedHashMap<>();
-+		addUnicodeCategoryCodesToNames(propertyAliases1);
-+		addUnicodeBinaryPropertyCodesToNames(propertyAliases1);
-+		addUnicodeScriptCodesToNames(propertyAliases1);
-+		addUnicodeBlocksToNames(propertyAliases2);
-+		addUnicodeIntPropertyCodesToNames(propertyAliases2);
-+		propertyAliases2.put("EP", "Extended_Pictographic");
- 
- 		Map<String, Object> properties = new LinkedHashMap<>();
- 		properties.put("propertyCodePointRanges", propertyCodePointRanges);
--		properties.put("propertyAliases", propertyAliases);
-+		properties.put("propertyAliasesA", propertyAliases1);
-+		properties.put("propertyAliasesB", propertyAliases2);
- 		return properties;
- 	}
- 
--- 
-2.28.0
-
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 3548345326..d1698e5f67 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -42,6 +42,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bioinformatics)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages databases)
@@ -75,81 +76,86 @@
 (define-public python-scipy
   (package
     (name "python-scipy")
-    (version "1.8.0")
+    (version "1.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "scipy" version))
        (sha256
-        (base32 "1gghkwn93niyasm36333xbqrnn3yiadq9d97wnc9mg14nzbg5m1i"))))
-    (outputs '("out" "doc"))
+        (base32 "1jcb94xal7w7ax80kaivqqics36v8smi4a3xngyxbrh0i538rli6"))))
     (build-system python-build-system)
     (arguments
      (list
-      #:modules '((guix build utils)
-                  (guix build python-build-system)
-                  (ice-9 format))
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'unpack 'disable-pythran
-            (lambda _
-              (setenv "SCIPY_USE_PYTHRAN" "0")))
-          (add-before 'build 'change-home-dir
+          (add-after 'unpack 'loosen-requirements
             (lambda _
-              ;; Change from /homeless-shelter to /tmp for write permission.
-              (setenv "HOME" "/tmp")))
-          (add-before 'build 'configure-openblas
+              (substitute* "pyproject.toml"
+                (("numpy==") "numpy>=")
+                (("meson==") "meson>="))))
+          (replace 'build
             (lambda _
-              (call-with-output-file "site.cfg"
-                (lambda (port)
-                  (format port
-                          "\
-[blas]
-libraries = openblas
-library_dirs = ~a/lib
-include_dirs = ~:*~a/include
-
-[atlas]
-library_dirs = ~:*~a/lib
-atlas_libs = openblas~%"  #$(this-package-input "openblas"))))))
-          (add-before 'build 'parallelize-build
+              ;; ZIP does not support timestamps before 1980.
+              (setenv "SOURCE_DATE_EPOCH" "315532800")
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
             (lambda _
-              (setenv "NPY_NUM_BUILD_JOBS"
-                      (number->string (parallel-job-count)))))
-          (add-before 'check 'install-doc
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-                     (doc (string-append data "/doc/" #$name "-" #$version))
-                     (html (string-append doc "/html")))
-                (with-directory-excursion "doc"
-                  ;; Build doc.
-                  (invoke "make" "html"
-                          ;; Building the documentation takes a very long time.
-                          ;; Parallelize it.
-                          (string-append "SPHINXOPTS=-j"
-                                         (number->string (parallel-job-count))))
-                  ;; Install doc.
-                  (mkdir-p html)
-                  (copy-recursively "build/html" html)))))
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl))))
           (replace 'check
             (lambda* (#:key tests? #:allow-other-keys)
               (when tests?
-                (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
-                        "-j" (number->string (parallel-job-count)))))))))
-    (propagated-inputs (list python-numpy python-matplotlib python-pyparsing))
+                ;; Step out of the source directory to avoid interference.
+                (with-directory-excursion "/tmp"
+                  (invoke "python" "-c"
+                          (string-append
+                           "import scipy; scipy.test('fast', parallel="
+                           (number->string (parallel-job-count))
+                           ", verbose=2)"))))))
+          (add-after 'check 'install-doc
+            (lambda* (#:key outputs #:allow-other-keys)
+              ;; FIXME: Documentation cannot be built because it requires
+              ;; a newer version of pydata-sphinx-theme, which currently
+              ;; cannot build without internet access:
+              ;; <https://github.com/pydata/pydata-sphinx-theme/issues/628>.
+              ;; Keep the phase for easy testing.
+              (let ((sphinx-build (false-if-exception
+                                   (search-input-file input "bin/sphinx-build"))))
+                (if sphinx-build
+                    (let* ((doc (assoc-ref outputs "doc"))
+                           (data (string-append doc "/share"))
+                           (docdir (string-append
+                                    data "/doc/"
+                                    #$(package-name this-package) "-"
+                                    #$(package-version this-package)))
+                           (html (string-append docdir "/html")))
+                      (with-directory-excursion "doc"
+                        ;; Build doc.
+                        (invoke "make" "html"
+                                ;; Building the documentation takes a very long time.
+                                ;; Parallelize it.
+                                (string-append "SPHINXOPTS=-j"
+                                               (number->string (parallel-job-count))))
+                        ;; Install doc.
+                        (mkdir-p html)
+                        (copy-recursively "build/html" html)))
+                    (format #t "sphinx-build not found, skipping~%"))))))))
+    (propagated-inputs
+     (list python-numpy python-matplotlib python-pyparsing python-pythran))
     (inputs (list openblas pybind11))
     (native-inputs
      (list gfortran
-           perl
+           ;; XXX: Adding gfortran shadows GCC headers, causing a compilation
+           ;; failure.  Somehow also providing GCC works around it ...
+           gcc
+           meson-python
+           pkg-config
            python-cython
-           python-numpydoc
-           python-pydata-sphinx-theme
+           python-pypa-build
            python-pytest
            python-pytest-xdist
-           python-sphinx-4
-           python-sphinx-panels
-           python-threadpoolctl
-           which))
+           python-threadpoolctl))
     (home-page "https://scipy.org/")
     (synopsis "The Scipy library provides efficient numerical routines")
     (description "The SciPy library is one of the core packages that make up
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 72bb841208..92db6715df 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -128,6 +128,7 @@
 ;;; Copyright © 2022 Marek Felšöci <marek@felsoci.sk>
 ;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
 ;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
+;;; Copyright © 2022 Mathieu Laparie <mlaparie@disr.it>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -10030,6 +10031,24 @@ function signatures.")
      "This package provides a YAML template engine with Python expressions.")
     (license license:expat)))
 
+(define-public python-syllables
+  (package
+    (name "python-syllables")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "syllables" version))
+              (sha256
+               (base32
+                "0wkl6h0rg6fbsxfp0a8fnibf3l4l6lbh6z12cvcilgb6qhxzpmv3"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/prosegrinder/python-syllables")
+    (synopsis "Package for estimating the number of syllables in a word")
+    (description
+     "This package provides a Python package for estimating the number of
+syllables in a word.")
+    (license license:gpl3)))
+
 (define-public python-sympy
   (package
     (name "python-sympy")
@@ -11559,6 +11578,40 @@ reading and writing MessagePack data.")
 and MAC network addresses.")
     (license license:bsd-3)))
 
+(define-public python-openstep-plist
+ (package
+  (name "python-openstep-plist")
+  (version "0.3.0")
+  (home-page "https://github.com/fonttools/openstep-plist")
+  (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url home-page)
+                  (commit (string-append "v" version))))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
+  (build-system python-build-system)
+  (arguments
+   (list #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'pretend-version
+               (lambda _
+                 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
+                         #$(package-version this-package))))
+             (replace 'check
+               (lambda* (#:key tests? #:allow-other-keys)
+                 (when tests?
+                   (invoke "pytest" "-vv")))))))
+  (native-inputs
+   (list python-cython python-pytest python-setuptools-scm))
+  (synopsis "OpenStep plist parser and writer")
+  (description
+   "This package provides a parser for the \"old style\" OpenStep property
+list format (also known as ASCII plist), written in Cython.")
+  (license license:expat)))
+
 (define-public python-wrapt
   (package
     (name "python-wrapt")
@@ -22283,7 +22336,7 @@ user-space file systems in Python.")
 
        ;; The following dependencies are used for tests.
        ("python-pytest" ,python-pytest)
-       ("catch" ,catch-framework2-1)
+       ("catch" ,catch2-1)
        ("eigen" ,eigen)))
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index d89714b577..f2cd6e33af 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -741,7 +741,7 @@ an unprivileged user.")
     (arguments
      ;; These tests do not require any device to be connected
      '(#:configure-flags (list "-DCOMPILE_OFFLINE_TESTS=ON")))
-    (native-inputs (list catch-framework2 doxygen graphviz pkg-config))
+    (native-inputs (list catch2 doxygen graphviz pkg-config))
     (inputs (list hidapi libusb))
     (home-page "https://github.com/Nitrokey/libnitrokey")
     (synopsis "Communication library for Nitrokey")
@@ -765,7 +765,7 @@ an unprivileged user.")
     (arguments
      '(#:configure-flags (list "-DBUILD_TESTING=on")))
     (native-inputs (list pkg-config qttools-5))
-    (inputs (list catch-framework2))
+    (inputs (list catch2))
     (home-page "https://github.com/tplgy/cppcodec")
     (synopsis "Header library to encode/decode base64, base64url, etc.")
     (description "This package provides library to encode/decode base64,
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index b1bbb7f996..39b5620822 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -465,7 +465,7 @@ FFC is part of the FEniCS Project.")
        ("sundials" ,sundials-openmpi)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("catch" ,catch-framework2-1)
+     `(("catch" ,catch2-1)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("ffc" ,python-fenics-ffc)
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 5d505b0ee2..2be724c455 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,22 +24,26 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages nss)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages security-token)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages virtualization)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
@@ -369,35 +374,32 @@ share smart cards from client system to local or remote virtual machines.")
 (define-public virt-viewer
   (package
     (name "virt-viewer")
-    (version "7.0")
+    (version "11.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                "https://virt-manager.org/download/sources/virt-viewer/"
-                "virt-viewer-" version ".tar.gz"))
+                    "https://virt-manager.org/download/sources/virt-viewer/"
+                    "virt-viewer-" version ".tar.xz"))
               (sha256
                (base32
-                "00y9vi69sja4pkrfnvrkwsscm41bqrjzvp8aijb20pvg6ymczhj7"))))
-    (build-system gnu-build-system)
-    (inputs
-      (list gtk+ gtk-vnc libcap libxml2 spice-gtk))
+                "1l5bv6x6j21l487mk3n93ai121gg62n6b069r2jpf72cbhra4gx4"))))
+    (build-system meson-build-system)
     (native-inputs
-      `(("glib:bin" ,glib "bin")
-        ("intltool" ,intltool)
-        ("pkg-config" ,pkg-config)))
-    (arguments
-      `(#:configure-flags
-        '("--with-spice-gtk")
-        #:phases
-         (modify-phases %standard-phases
-           (add-after
-            'install 'wrap-remote-viewer
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let ((out             (assoc-ref outputs "out"))
-                    (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
-                (wrap-program (string-append out "/bin/remote-viewer")
-                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
-              #t)))))
+     (list `(,glib "bin")
+           gettext-minimal
+           perl                         ;for pod2man
+           pkg-config
+           python))
+    (inputs
+     (list bash-completion
+           gtk+
+           gtk-vnc
+           libcap
+           libgovirt
+           libvirt-glib
+           libxml2
+           spice-gtk
+           vte))
     (synopsis "Graphical console client for virtual machines")
     (description "Graphical console client for virtual machines using SPICE or
 VNC.")
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index 4976acbc0c..1a22d230d2 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -387,7 +387,7 @@ Telegram project, for its use in telegram desktop client.")
     (inputs
      `(("alsa" ,alsa-lib)
        ("c++-gsl" ,c++-gsl)
-       ("catch" ,catch-framework2)
+       ("catch" ,catch2)
        ("codegen-source"
         ,(origin
            (method git-fetch)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 8c0f187be1..9cc1ea46e3 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -784,9 +784,15 @@ old-fashioned output methods with powerful ascii-art renderer.")
                            "/celluloid-" version ".tar.xz"))
        (sha256
         (base32 "0ns9xh582c8kajw4v2x5ap5jfiba3gxywqc2klc0v6fc3id1gqii"))))
-    (build-system glib-or-gtk-build-system)
+    (build-system meson-build-system)
     (native-inputs
-     (list intltool pkg-config))
+     (list
+      desktop-file-utils           ; for update-desktop-database
+      intltool
+      `(,glib "bin")               ; for glib-compile-resources
+      `(,gtk "bin")                ; for gtk-update-icon-cache
+      pkg-config
+      python-wrapper))             ; for generate-authors.py
     (inputs
      (list gtk libadwaita libepoxy mpv))
     (home-page "https://github.com/celluloid-player/celluloid")
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index cebcc9742d..199156dbb9 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1517,7 +1517,7 @@ virtualization library.")
      (list dconf
            gtk+
            gtk-vnc
-           gtksourceview
+           gtksourceview-4
            libvirt
            libvirt-glib
            libosinfo
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index e92cb22d7d..6a60e65650 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -5717,14 +5717,14 @@ on the fly.")
 (define-public hitch
   (package
     (name "hitch")
-    (version "1.7.2")
+    (version "1.7.3")
     (home-page "https://hitch-tls.org/")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "source/hitch-" version ".tar.gz"))
               (sha256
                (base32
-                "118p3a8wjvr0yhldpd1zm7d2cmgaw4vmyz9ib8m64z18qsz5rmnw"))))
+                "11wp50zs5irb5bj5xyanm060nlvna6ha328wqf6p2nvpbnaz86qs"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 0d595992cc..02e04ccf88 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -2893,7 +2893,7 @@ create layout indicator widgets.")
                 "1gxpgifzy0hnpd0ymw3r32amzr32z3bgb90ldjzl438p6h1q0i26"))))
     (build-system cmake-build-system)
     (native-inputs
-     (list catch-framework2))
+     (list catch2))
     (arguments
      `(#:configure-flags '("-DWITH_GIT_CATCH=off")
        #:phases
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 07e7500847..9b3eb12613 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1034,7 +1034,7 @@ include the @command{udisksctl} command, part of UDisks, and GNOME Disks."
     '(ignore poweroff reboot halt kexec suspend hibernate hybrid-sleep lock))
   (define (handle-action x)
     (if (unspecified? x)
-        ""                              ;empty serializer
+        x                               ;let the unspecified value go through
         (enum x handle-actions)))
   (define (sleep-list tokens)
     (unless (valid-list? tokens char-set:user-name)
@@ -1042,10 +1042,18 @@ include the @command{udisksctl} command, part of UDisks, and GNOME Disks."
     (string-join tokens " "))
   (define-syntax ini-file-clause
     (syntax-rules ()
+      ;; Produce an empty line when encountering an unspecified value.  This
+      ;; is better than an empty string value, which can, in some cases, cause
+      ;; warnings such as "Failed to parse handle action setting".
       ((_ config (prop (parser getter)))
-       (string-append prop "=" (parser (getter config)) "\n"))
+       (let ((value (parser (getter config))))
+         (if (unspecified? value)
+             ""
+             (string-append prop "=" value "\n"))))
       ((_ config str)
-       (string-append str "\n"))))
+       (if (unspecified? str)
+           ""
+           (string-append str "\n")))))
   (define-syntax-rule (ini-file config file clause ...)
     (plain-file file (string-append (ini-file-clause config clause) ...)))
   (ini-file
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index a7b7c246bf..003c49a3e7 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -476,7 +476,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m
     ;; non-functional:
     ;; <https://lists.gnu.org/archive/html/guix-devel/2019-03/msg00441.html>.
     ;; Thus, blacklist it.
-    (kernel-arguments '("quiet" "modprobe.blacklist=radeon"))
+    (kernel-arguments '("quiet" "modprobe.blacklist=radeon,amdgpu"))
 
     (file-systems
      ;; Note: the disk image build code overrides this root file system with