summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi6
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/emacs-xyz.scm251
-rw-r--r--gnu/packages/emacs.scm4
-rw-r--r--gnu/packages/fontutils.scm9
-rw-r--r--gnu/packages/geo.scm9
-rw-r--r--gnu/packages/gnome.scm12
-rw-r--r--gnu/packages/gstreamer.scm18
-rw-r--r--gnu/packages/image-processing.scm22
-rw-r--r--gnu/packages/linux.scm32
-rw-r--r--gnu/packages/messaging.scm76
-rw-r--r--gnu/packages/ntp.scm2
-rw-r--r--gnu/packages/patches/emacs-pgtk-super-key-fix.patch49
-rw-r--r--gnu/packages/patches/emacs-polymode-fix-lexical-variable-error.patch37
-rw-r--r--gnu/packages/pdf.scm60
-rw-r--r--gnu/packages/php.scm2
-rw-r--r--gnu/packages/plotutils.scm4
-rw-r--r--gnu/packages/python-science.scm4
-rw-r--r--gnu/services/desktop.scm23
-rw-r--r--gnu/services/xorg.scm23
-rw-r--r--guix/gnu-maintenance.scm7
-rw-r--r--guix/import/gem.scm19
-rw-r--r--guix/scripts/import/gem.scm39
-rw-r--r--tests/gem.scm113
-rw-r--r--tests/gnu-maintenance.scm29
25 files changed, 685 insertions, 168 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 5bec94487b..8def1d8433 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -13228,6 +13228,12 @@ The command below imports metadata for the @code{rails} Ruby package:
 guix import gem rails
 @end example
 
+You can also ask for a specific version:
+
+@example
+guix import gem @@7.0.4
+@end example
+
 @table @code
 @item --recursive
 @itemx -r
diff --git a/gnu/local.mk b/gnu/local.mk
index 094012316f..99034149c9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -52,6 +52,7 @@
 # Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 # Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 # Copyright © 2022 muradm <mail@muradm.net>
+# Copyright © 2022 Hilton Chain <hako@ultrarare.space>
 #
 # This file is part of GNU Guix.
 #
@@ -1038,12 +1039,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/emacs-highlight-stages-add-gexp.patch	\
   %D%/packages/patches/emacs-libgit-use-system-libgit2.patch    \
   %D%/packages/patches/emacs-lispy-fix-thread-last-test.patch   \
+  %D%/packages/patches/emacs-polymode-fix-lexical-variable-error.patch  \
   %D%/packages/patches/emacs-source-date-epoch.patch		\
   %D%/packages/patches/emacs-telega-path-placeholder.patch	\
   %D%/packages/patches/emacs-telega-test-env.patch		\
   %D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch	\
   %D%/packages/patches/emacs-yasnippet-fix-tests.patch	\
   %D%/packages/patches/emacs-kv-fix-tests.patch	\
+  %D%/packages/patches/emacs-pgtk-super-key-fix.patch	\
   %D%/packages/patches/enjarify-setup-py.patch			\
   %D%/packages/patches/enlightenment-fix-setuid-path.patch	\
   %D%/packages/patches/erlang-man-path.patch			\
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 5aff012adb..30bd0ca48b 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1348,6 +1348,28 @@ color scheme used by Visual Studio Code.")
 Apprentice and Sourcerer.")
       (license license:gpl3+))))
 
+(define-public emacs-suneater-theme
+  (package
+    (name "emacs-suneater-theme")
+    (version "2.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~plattfot/suneater-theme")
+             (commit version)))
+       (sha256
+        (base32
+         "0nlam8f8ly86y7p2dn10y9ixnm7bhmigsx7si4cjynh6aiyczyds"))
+       (file-name (git-file-name name version))))
+    (build-system emacs-build-system)
+    (home-page "https://git.sr.ht/~plattfot/suneater-theme")
+    (synopsis "Minimalistic dark theme for Emacs")
+    (description
+     "Suneater is a dark, minimalistic Emacs theme.  It was based on Sunburst
+theme but now takes more inspiration from the Nano theme.")
+    (license license:gpl3+)))
+
 (define-public emacs-treepy
   (package
     (name "emacs-treepy")
@@ -2572,6 +2594,30 @@ light user interface.")
 within a specified width.  It is useful for displaying long track titles.")
     (license license:gpl3+)))
 
+(define-public emacs-emprise
+  (package
+    (name "emacs-emprise")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~plattfot/emprise")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "0yddvvpjdcgsiwv24jbddkgl5r1lxgz037akjln6z9acx9qrc8px"))
+       (file-name (git-file-name name version))))
+    (build-system emacs-build-system)
+    (home-page "https://sr.ht/~plattfot/emprise")
+    (synopsis "Control MPRIS supported media players from Emacs")
+    (description "This package provides a set of commands to control media
+players that supports the Media Player Remote Interfacing
+Specification (MPRIS) protocol from Emacs.  It uses Emacs' Completing Read
+framework as the user interface, which integrates well with Vertico or
+Selectrum.")
+    (license license:gpl3+)))
+
 
 ;;;
 ;;; Miscellaneous.
@@ -2605,6 +2651,31 @@ This package turns this into an O(1) operation.  It does so by assigning a
 letter to each link using avy.")
     (license license:gpl3+)))
 
+(define-public emacs-app-launcher
+  ;; XXX: Upstream did not tag any commit so far.  Base version is extracted
+  ;; from Version keyword.
+  (let ((commit "d5015e394b0a666a8c7c4d4bdf786266e773b145")
+        (revision "0"))
+    (package
+      (name "emacs-app-launcher")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/SebastienWae/app-launcher")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0l97ajy27awydyd4gc6323wyhpm5vm2db6i0lp5gqaxi9fp7jivp"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/SebastienWae/app-launcher")
+      (synopsis "Use Emacs standard completion to launch applications")
+      (description "This package defines the @code{app-launcher-run-app}
+command, which uses Emacs standard completion to select an application
+installed on your machine and launch it.")
+      (license license:gpl3+))))
+
 (define-public emacs-auto-sudoedit
   (package
     (name "emacs-auto-sudoedit")
@@ -6162,6 +6233,64 @@ and retrieving information using the SQLite program through Elisp programming.
 It is not intended as a user interface.")
       (license license:gpl3+))))
 
+(define-public emacs-sqlite3-api
+  (package
+    (name "emacs-sqlite3-api")
+    (version "0.16")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pekingduck/emacs-sqlite3-api")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0yrfwb3yvhp1ib4izxh1ds68b3zw8gjkjhlk1kivarxnfjnjnly2"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? (not (%current-target-system))
+      #:test-command #~(list "make" "test" "EMACS=emacs")
+      #:modules '((guix build emacs-build-system)
+                  (guix build emacs-utils)
+                  (guix build utils))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-module-load
+            (lambda _
+              (make-file-writable "sqlite3.el")
+              (emacs-substitute-sexps "sqlite3.el"
+                ("(require 'sqlite3-api nil t)"
+                 (string-append
+                  "(module-load \"" #$output "/lib/sqlite3-api.so\")")))))
+          (add-before 'check 'build-emacs-module
+            (lambda _
+              ;; Remove code that fetches constants from the SQLite website
+              ;; and the call to generate a timestamp.
+              (invoke "sed" "--in-place" "3,4d;24,28d;31d" "tools/gen-consts.sh")
+              ;; Remove filter logic from the script that generates the constants.
+              (invoke "sed" "--in-place" "7,11d;18,22d" "tools/gen-consts.py")
+              ;; Generate the consts.c file.
+              (invoke "make" "--directory=tools")
+              ;; Remove the SQLITE_STATIC and SQLITE_TRANSIENT
+              ;; constants. They cause a compilation warning and would have
+              ;; been removed by the original script.
+              (invoke "sed" "--in-place" "/ifdef SQLITE_STATIC/,+2d" "consts.c")
+              (invoke "sed" "--in-place" "/ifdef SQLITE_TRANSIENT/,+2d" "consts.c")
+              ;; Compile the shared object file.
+              (invoke "make" #$(string-append "CC=" (cc-for-target)))
+              ;; Move the shared object file into /lib.
+              (install-file "sqlite3-api.so"
+                            (string-append #$output "/lib")))))))
+    (native-inputs (list python sed))
+    (inputs (list sqlite))
+    (home-page "https://github.com/pekingduck/emacs-sqlite3-api")
+    (synopsis "Dynamic module for Emacs to access the SQLite C interface")
+    (description "This package provides a dynamic module for Emacs that allows
+direct access to the SQLite C interface.  It only exposes a subset of the full
+SQLite C interface, but should satisfy most user's needs.")
+    (license license:gpl3+)))
+
 (define-public emacs-sr-speedbar
   (let ((commit "77a83fb50f763a465c021eca7343243f465b4a47")
         (revision "0"))
@@ -6725,14 +6854,14 @@ user.")
 (define-public emacs-subed
   (package
     (name "emacs-subed")
-    (version "1.0.8")
+    (version "1.0.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.nongnu.org/nongnu/subed-"
                                   version ".tar"))
               (sha256
                (base32
-                "05dx4ywma7n73d0cihf4v8ayihm7gmfqpzvdycq4yk0zkxb958z1"))))
+                "192m7pg8hiqx7ppr1sk6n5qjcbz78dmcg6m14syq12ll07zfpcm0"))))
     (arguments
      (list
       #:tests? #t
@@ -15755,7 +15884,7 @@ gnugo-image-display-mode}.")
 (define-public emacs-transpose-frame
   (package
     (name "emacs-transpose-frame")
-    (version "0.2.0")
+    (version "0.2.1")
     (source
      (origin
        (method git-fetch)
@@ -15764,7 +15893,7 @@ gnugo-image-display-mode}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01j4ci0c52r2c31hc9r4p7nsb6s8blmvg50g9n5v5h3afjl1c35v"))))
+        (base32 "0m9jmfwwhgkwxbq3y000ymx7parbgqr7gq3yjm2wh1ll747gv51y"))))
     (build-system emacs-build-system)
     (home-page "https://www.emacswiki.org/emacs/TransposeFrame")
     (synopsis "Transpose window arrangement in current frame")
@@ -15773,6 +15902,31 @@ functions which allows users to transpose windows arrangement in currently
 selected frame.")
     (license license:bsd-2)))
 
+(define-public emacs-transpose-mark
+  ;; XXX: Upstream made no release so far, and did not add a Version keyword.
+  (let ((commit "667327602004794de97214cf336ac61650ef75b7")
+        (revision "0"))
+    (package
+      (name "emacs-transpose-mark")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kwrooijen/transpose-mark")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "03wc50vn1kmrgnzzhs06pwpap2p2rx84wwzxw0hawsg1f1l35m2x"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/kwrooijen/transpose-mark")
+      (synopsis "Library for transposing lines and regions")
+      (description "Transpose mark provides some commands that makes
+transposing lines and regions easier.  You can mark a line and transpose it
+with a line at point, or mark a region and transpose it with another region
+a point.  The plugin provides visual feedback for marked regions.")
+      (license license:gpl3+))))
+
 (define-public emacs-key-chord
   (package
     (name "emacs-key-chord")
@@ -16574,7 +16728,7 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
 (define-public emacs-ement
   (package
     (name "emacs-ement")
-    (version "0.1.3")
+    (version "0.1.4")
     (source
      (origin
        (method git-fetch)
@@ -16583,7 +16737,7 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "075mwlc616rr86zgli36n6r8w09c5cvlk43by0f1xzla5rmiza8r"))))
+        (base32 "1kms6l14h6ig8kphzpkxv16z7gpvcwvcfsp5ljssdnrx0c7dzz16"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs))               ;need libxml support
@@ -17525,7 +17679,10 @@ contexts.
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18ssl2h861dm2jkd3df6wkfr48p8zk337dbvpq5522kia7fq1lbn"))))
+        (base32 "18ssl2h861dm2jkd3df6wkfr48p8zk337dbvpq5522kia7fq1lbn"))
+       (patches
+        ;; XXX: Cherry-picked from upstream, remove when bumping to 0.2.3.
+        (search-patches "emacs-polymode-fix-lexical-variable-error.patch"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/polymode/polymode")
     (synopsis "Framework for multiple Emacs modes based on indirect buffers")
@@ -19292,7 +19449,7 @@ files to be expanded upon opening them.")
 (define-public emacs-parsebib
   (package
     (name "emacs-parsebib")
-    (version "4.2")
+    (version "4.3")
     (source
      (origin
        (method git-fetch)
@@ -19301,7 +19458,7 @@ files to be expanded upon opening them.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0da4b6d65bq9xhyhq7h9g315zg6g5q9435vz870la966rgav5szd"))))
+        (base32 "0vcl2wvxwpr62c9ym0fm3qaxzhjcrpk4r6r0zaqhkvlf8qr3rg8y"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/joostkremers/parsebib")
     (synopsis "Library for parsing @file{.bib} files")
@@ -19619,7 +19776,7 @@ that it can display an error message showing how the parser fails.")
 (define-public emacs-move-text
   (package
     (name "emacs-move-text")
-    (version "2.0.8")
+    (version "2.0.10")
     (source
      (origin
        (method git-fetch)
@@ -19628,7 +19785,7 @@ that it can display an error message showing how the parser fails.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "06jxk5g23822gfmwrxhc34zand3dr8p2wjh1zs3j61ibz6n0nmz1"))))
+        (base32 "0pxvipjp9xvr9zwiwij943jgpy7fk8pxphbdj0vrg8ar5avlqiam"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacsfodder/move-text")
     (synopsis "Move current line or region with M-up or M-down")
@@ -21005,7 +21162,7 @@ and doesn't require memorisation of commands.
 (define-public emacs-logview
   (package
     (name "emacs-logview")
-    (version "0.15")
+    (version "0.15.1")
     (source
      (origin
        (method git-fetch)
@@ -21014,7 +21171,7 @@ and doesn't require memorisation of commands.
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "08bn7fj336krlrsf7flk0fgx9mdkd44vq8sxyx6s1c1q5bc0hqnk"))))
+        (base32 "1khri5632pjirj191x3ps94s4pyrwapf1pbrkmqqp0d26b50d3s2"))))
     (propagated-inputs
      (list emacs-datetime emacs-extmap))
     (build-system emacs-build-system)
@@ -30320,14 +30477,14 @@ detected language.")
 (define-public emacs-persist
   (package
     (name "emacs-persist")
-    (version "0.4")
+    (version "0.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "persist-" version ".tar"))
        (sha256
-        (base32 "0gpxy41qawzss2526j9a7lys60vqma1lvamn4bfabwza7gfhac0q"))))
+        (base32 "090n4479zs82by7a3vb551gyjvv8lpfcylk43ywr2lfyssc9xiq0"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/persist.html")
     (synopsis "Persist variables between Emacs sessions")
@@ -30655,6 +30812,34 @@ conventions.")
 snippets for Emacs.")
       (license license:expat))))
 
+(define-public emacs-orca
+  ;; XXX: Upstream did not tag any commit so far.  Base version is extracted
+  ;; from Version keyword.
+  (let ((commit "0687f416a5573f63b691d384454f5a793266ed97")
+        (revision "0"))
+    (package
+      (name "emacs-orca")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/abo-abo/orca")
+               (commit commit)))
+         (sha256
+          (base32 "00a363vkqvryw5s7pj0kh8pqq5vvbf1pmbzz0b1z1fckwr49sv0f"))))
+      (build-system emacs-build-system)
+      (propagated-inputs (list emacs-zoutline))
+      (home-page "https://github.com/abo-abo/orca")
+      (synopsis "Handler for Org Capture")
+      (description
+       "This package provides several convenient recipes for configuring Org
+Capture, mainly for capturing from a browser.  It can match URLs and inject
+the capture in a targeted Org file, under a targeted heading.  The more this
+package is configured, the less refiling is needed on your captures: they will
+go directly to where they belong.")
+      (license license:gpl3+))))
+
 (define-public emacs-org-roam
   (package
     (name "emacs-org-roam")
@@ -30717,6 +30902,34 @@ as a plug-and-play solution for anyone already using Org mode for their
 personal wiki.")
     (license license:gpl3+)))
 
+(define-public emacs-org-roam-ui
+  (let ((commit "c75fc7506ee7f03840a9a93ed9336d7ed24551aa")
+        (revision "0"))
+    (package
+      (name "emacs-org-roam-ui")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/org-roam/org-roam-ui")
+               (commit commit)))
+         (sha256
+          (base32 "0mkcd2622np8s5qz2zvx7lch6dc586xqmn6914gi4ym7nvklf3zy"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list #:include #~(cons "^out" %default-include)))
+      (propagated-inputs
+       (list emacs-org-roam emacs-simple-httpd emacs-websocket))
+      (home-page "https://github.com/org-roam/org-roam-ui")
+      (synopsis "Web User Interface for Org Roam")
+      (description
+       "Org Roam UI is meant as a successor of Org Roam server that extends
+functionality of Org Roam with a web app that runs side-by-side with Emacs,
+providing a web interface for navigating around notes created within Org
+Roam.")
+      (license license:gpl3+))))
+
 (define-public emacs-org-roam-bibtex
   (package
     (name "emacs-org-roam-bibtex")
@@ -31575,14 +31788,14 @@ work on alists, hash-table and arrays.  All functions are prefixed with
 (define-public emacs-xref
   (package
     (name "emacs-xref")
-    (version "1.5.0")
+    (version "1.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xref-"
                            version ".tar"))
        (sha256
-        (base32 "0xl6aiwkjbgs44c3wxk6s85diydm3y5lsd7znb0dhbqb7milid2d"))))
+        (base32 "131jxsc1sl8q3r9drhylwyfig9qjjkj3hilv3npidp868pr7xdna"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/xref.html")
     (synopsis "Cross-referencing commands")
@@ -32155,14 +32368,14 @@ are prefixed with @code{seq-} and work on lists, strings, and vectors.")
 (define-public emacs-setup
   (package
     (name "emacs-setup")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://elpa.gnu.org/packages/setup-"
                             version ".tar"))
         (sha256
-          (base32 "0r13ry73jm31j8fq7v1sh0k113fr4blfkiz85696bdpah2pnca87"))))
+          (base32 "0n9zjclf4b2sr8c8zd37fs45p25p3856frm419c9hch69hhcsv3a"))))
     (build-system emacs-build-system)
     (home-page "https://git.sr.ht/~pkal/setup")
     (synopsis "Helpful configuration macro")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 881109bb77..bbed0175d4 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -409,6 +409,10 @@ languages.")
   (package
     (inherit emacs-next)
     (name "emacs-next-pgtk")
+    (source
+     (origin
+       (inherit (package-source emacs-next))
+       (patches (search-patches "emacs-pgtk-super-key-fix.patch"))))
     (arguments
      (substitute-keyword-arguments (package-arguments emacs-next)
        ((#:configure-flags flags #~'())
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 5a79fcb184..6ff51260b6 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -447,8 +447,15 @@ converts any cubic curves to quadratic.  The most useful function is probably
        (sha256
         (base32 "068hm62s1iphyg66w96vgiif6ahpcsaf8fr44rk6jdf71f6fyqd5"))))
     (build-system python-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "pytest" "-vv")))))))
     (native-inputs
-     (list python-pytest python-pytest-runner python-setuptools-scm))
+     (list python-pytest python-setuptools-scm))
     (propagated-inputs
      (list python-booleanoperations
            python-cffsubr
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 4fdee3dc7b..8e619d1dba 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -2366,7 +2366,14 @@ visualization.")
                            (version-major version) "/SAGA%20-%20" version
                            "/saga-" version ".tar.gz"))
        (sha256
-        (base32 "008izjs6gvj09abxf16ssl1xy0ay3ljq4jswbggp6wiiq459minv"))))
+        (base32 "008izjs6gvj09abxf16ssl1xy0ay3ljq4jswbggp6wiiq459minv"))
+       (modules '((guix build utils)))
+       (snippet
+        '(substitute* "saga-gis/src/tools/docs/docs_pdf/doc_pdf.cpp"
+           (("^#include <hpdf\\.h>\n" all)
+            (string-append all "#include <hpdf_version.h>\n"))
+           (("\\bHPDF_PROJECTING_SCUARE_END\\b")
+            "HPDF_PROJECTING_SQUARE_END")))))
     (build-system cmake-build-system)
     (native-inputs
      (list pkg-config swig))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 190cc42950..5a2bbe618a 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -2293,6 +2293,7 @@ The gnome-about program helps find which version of GNOME is installed.")
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Dlogind=libelogind")
+       #:meson ,meson-0.60
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -5815,7 +5816,10 @@ services for numerous locations.")
               "-Dsystemd=false"
               ;; Otherwise, the RUNPATH will lack the final path component.
               (string-append "-Dc_link_args=-Wl,-rpath=" #$output
-                             "/lib/gnome-settings-daemon-3.0"))
+                             "/lib/gnome-settings-daemon-3.0:"
+                             ;; Also add NSS because for some reason Meson
+                             ;; > 0.60 does not add it automatically (XXX).
+                             (search-input-directory %build-inputs "lib/nss")))
       #:phases
       #~(modify-phases %standard-phases
           (add-before 'configure 'set-baobab-file-name
@@ -9613,7 +9617,8 @@ can add your own files to the collection.")
          "15wmikwk62cdi93gas77nqh4fbhlrxrncyfmcd1gfa34jbn7vnsa"))))
     (build-system meson-build-system)
     (arguments
-     '(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.60
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -9655,6 +9660,8 @@ beautifying border effects.")
         (base32
          "1qvrxrk1h8bd75xwasxbvlkqrw6xkavjimvc7sslkw6lvb3z86jp"))))
     (build-system meson-build-system)
+    (arguments
+     (list #:meson meson-0.60))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
        ("gtk+-bin" ,gtk+ "bin") ; for gtk-update-icon-cache
@@ -12022,6 +12029,7 @@ desktop environment.")
            gspell
            gtk
            gjs
+           libadwaita
            libsecret
            libsoup
            telepathy-glib
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index aa49f89155..a1cf662e37 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -476,7 +476,21 @@ the GStreamer multimedia framework.")
     (arguments
      (list #:phases
            #~(modify-phases %standard-phases
-               #$@%common-gstreamer-phases)))
+               #$@%common-gstreamer-phases
+               #$@(if (string-prefix? "i686" (or (%current-target-system)
+                                                 (%current-system)))
+                      ;; FIXME: These tests consistently fail in the Guix CI:
+                      ;;   https://issues.guix.gnu.org/57868
+                      '((add-after 'unpack 'disable-systemclock-test
+                          (lambda _
+                            (substitute* "tests/check/gst/gstsystemclock.c"
+                              (("tcase_add_test \\(tc_chain, \
+test_stress_cleanup_unschedule.*")
+                               "")
+                              (("tcase_add_test \\(tc_chain, \
+test_stress_reschedule.*")
+                               "")))))
+                      '()))))
     (propagated-inputs
      ;; In gstreamer-1.0.pc:
      ;;   Requires: glib-2.0, gobject-2.0
@@ -880,7 +894,7 @@ model to base your own plug-in on, here it is.")
             openjpeg
             ;; openni2
             opensles
-            openssl
+            openssl-1.1
             opus
             orc
             pango
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index aa8efd97c6..a8f40c4454 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -324,14 +324,18 @@ many popular formats.")
               (snippet
                '(begin
                   (for-each
-                    (lambda (dir)
-                      (delete-file-recursively
-                        (string-append "ThirdParty/" dir "/vtk" dir)))
-                    ;; pugixml depended upon unconditionally
-                    '("doubleconversion" "eigen" "expat" "freetype" "gl2ps"
-                      "glew" "hdf5" "jpeg" "jsoncpp" "libproj" "libxml2" "lz4"
-                      "netcdf" "ogg" "png" "sqlite" "theora" "tiff" "zlib"))
-                  #t))))
+                   (lambda (dir)
+                     (delete-file-recursively
+                      (string-append "ThirdParty/" dir "/vtk" dir)))
+                   ;; pugixml depended upon unconditionally
+                   '("doubleconversion" "eigen" "expat" "freetype" "gl2ps"
+                     "glew" "hdf5" "jpeg" "jsoncpp" "libharu" "libproj"
+                     "libxml2" "lz4" "netcdf" "ogg" "png" "sqlite" "theora"
+                     "tiff" "zlib"))
+                  (substitute* "IO/ExportPDF/vtkPDFContextDevice2D.cxx"
+                    (("\\bHPDF_UINT16 (noPen|dash|dot|denseDot|dashDot|dashDotDot)\\b"
+                      _ var)
+                     (string-append "HPDF_REAL " var)))))))
     (properties `((release-monitoring-url . "https://vtk.org/download/")))
     (build-system cmake-build-system)
     (arguments
@@ -348,6 +352,7 @@ many popular formats.")
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON"
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON"
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_jsoncpp=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libharu=ON"
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_libproj=ON"
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON"
                            "-DVTK_MODULE_USE_EXTERNAL_VTK_lz4=ON"
@@ -381,6 +386,7 @@ many popular formats.")
            glew
            glu
            hdf5
+           libharu
            libjpeg-turbo
            jsoncpp
            libtheora
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 3400740649..81e1fb8f70 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -353,17 +353,17 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The current "stable" kernels. That is, the most recently released major
 ;; versions that are still supported upstream.
 
-(define-public linux-libre-5.19-version "5.19.8")
+(define-public linux-libre-5.19-version "5.19.9")
 (define-public linux-libre-5.19-gnu-revision "gnu")
 (define deblob-scripts-5.19
   (linux-libre-deblob-scripts
    linux-libre-5.19-version
    linux-libre-5.19-gnu-revision
    (base32 "1lk90psz33ldb8aiaws4iayhycl5bmywr6badvzffjpr87s5phxw")
-   (base32 "1ph67fvg5qvlkh4cynrrmvkngkb0sw6k90b1mwy9466s24khn05i")))
+   (base32 "092myqjixvy1k3ylcj0hfc4whfxapjvxsxm4gk30a3jv5dnh7mly")))
 (define-public linux-libre-5.19-pristine-source
   (let ((version linux-libre-5.19-version)
-        (hash (base32 "1kl7fifsa6vsm34xg3kd2svhx18n771hfj67nhwnlalmb9whhqv1")))
+        (hash (base32 "0dvzjbyknzlx4ndz77fsm6v28fj2chxbq1z85fbc3bckcscbbm8a")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.19)))
@@ -372,22 +372,22 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The "longterm" kernels — the older releases with long-term upstream support.
 ;; Here are the support timelines:
 ;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-5.15-version "5.15.67")
+(define-public linux-libre-5.15-version "5.15.68")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
    linux-libre-5.15-version
    linux-libre-5.15-gnu-revision
    (base32 "0vj60bra81fmbx3lz924czbhxs4dmvd4d584g9mcs80b7c4q52kg")
-   (base32 "1r189c704jvizk452zcsm9v3g27ybjcjchjwxazsy3nx0wdwx7si")))
+   (base32 "048r4synfax2ajyzlmp672b68yshxwlfccdah2vz1kh88rqfmgsc")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "0h7r2k59jsw8ykb2p7nxrpazbwx1n5p3nmfbbj1lhib91fldjiys")))
+        (hash (base32 "0zlb44bwpc0hwfynzz5v5b3lkv4aha7w5737ns1qb8cvbk5v7fqp")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.142")
+(define-public linux-libre-5.10-version "5.10.143")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
@@ -397,12 +397,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1981axxswghza3iadp94q54y8w30h9w9vyq4cbjiiv9alvbv0pb8")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "0s52vfvw5pgnq7gq9n66ib05ryhkxwv765f16862l5gykbdynirz")))
+        (hash (base32 "14af0lsvgh1k0fh283d0nrm1pkrk2kaf2mz0ab59vlvjybg9wb7s")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.212")
+(define-public linux-libre-5.4-version "5.4.213")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
@@ -412,12 +412,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1vnjbdyssa7dwyjl9kg35alwvf7yh597cl74yr1wy2gk5bc9paw6")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "1hngr4hsrcd6hmlyvc3msy5racniav2jagp5abmp7xsxv0yjxiq9")))
+        (hash (base32 "1wdssqmac66zqsnq5lx2z8ampa0rd3qswg0gm1sh6n3y8xlf2z76")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.257")
+(define-public linux-libre-4.19-version "4.19.258")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
@@ -427,12 +427,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "0izaldl2l2zsshkd07qsnr9x6ikipmj5jp7lxr8dyz7kf2m17pga")))
+        (hash (base32 "002sw8b272dzkp3vff0x89sbj5p3vrrikqygfdgrsxv7k3w4459x")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.292")
+(define-public linux-libre-4.14-version "4.14.293")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
@@ -442,12 +442,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "0zc97qy62dhc5xkjnvsfn4lpl4dgrj23hlxvxcr4cr8sj0hxzx3h")))
+        (hash (base32 "047gl9nqrvpi9jaxlmhfnx848qvnrhf13710ka8fwn3lyv22k342")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.327")
+(define-public linux-libre-4.9-version "4.9.328")
 (define-public linux-libre-4.9-gnu-revision "gnu1")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
@@ -457,7 +457,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0bib3641dbcqdkx3anna3caxnsg3nw9cnmhcklq0s93g3m57041h")))
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "1lh63viynf9f7vl0a52mnal8jack9lbqfsfammwkxi3kafpw30r2")))
+        (hash (base32 "1px2np3k796cjwq1sp9gfxyql6hqyqya82vq9cb5y0canq6fqmg8")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 43b4a66890..b5600d4baf 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1253,45 +1253,45 @@ of xmpppy.")
           "3.9"
           "/site-packages"))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk+:bin" ,gtk+ "bin")
-       ("python-distutils-extra" ,python-distutils-extra)
-       ("python-setuptools" ,python-setuptools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           `(,gtk+ "bin")
+           python-distutils-extra
+           python-setuptools
+           xorg-server-for-tests))
     (inputs
-     `(("avahi" ,avahi)
-       ("dbus" ,dbus)
-       ("farstream" ,farstream)
-       ("geoclue" ,geoclue)
-       ("glib" ,glib)
-       ("glib-networking" ,glib-networking)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gsound",gsound)
-       ("gspell" ,gspell)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("gtk+" ,gtk+)
-       ("gtksourceview" ,gtksourceview-4)
-       ("gupnp-igd" ,gupnp-igd)
-       ("libappindicator" ,libappindicator)
-       ("libnice" ,libnice)
-       ("libsecret" ,libsecret)
-       ("libsoup" ,libsoup)
-       ("libxss" ,libxscrnsaver)
-       ("network-manager" ,network-manager)
-       ("python-css-parser" ,python-css-parser)
-       ("python-dbus" ,python-dbus)
-       ("python-gssapi" ,python-gssapi)
-       ("python-keyring" ,python-keyring)
-       ("python-nbxmpp" ,python-nbxmpp)
-       ("python-packaging" ,python-packaging)
-       ("python-pillow" ,python-pillow)
-       ("python-precis-i18n" ,python-precis-i18n)
-       ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pyopenssl" ,python-pyopenssl)))
+     (list avahi
+           dbus
+           farstream
+           geoclue
+           glib
+           glib-networking
+           gsettings-desktop-schemas
+           gsound
+           gspell
+           gstreamer
+           gst-plugins-base
+           gtk+
+           gtksourceview-4
+           gupnp-igd
+           libappindicator
+           libnice
+           libsecret
+           libsoup
+           libxscrnsaver
+           network-manager
+           python-css-parser
+           python-dbus
+           python-gssapi
+           python-keyring
+           python-nbxmpp
+           python-packaging
+           python-pillow
+           python-precis-i18n
+           python-pycairo
+           python-pygobject
+           python-pyopenssl))
     (propagated-inputs
      (list dconf))
     (synopsis "Fully-featured XMPP client")
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index b942703ff3..a27c1c6a12 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -155,7 +155,7 @@ time-stamping or reference clock, sub-microsecond accuracy is possible.")
            #t))))
    (native-inputs (list which pkg-config))
    (inputs
-    `(("openssl" ,openssl)
+    `(("openssl" ,openssl-1.1)
       ("libevent" ,libevent)
       ;; Build with POSIX capabilities support on GNU/Linux.  This allows 'ntpd'
       ;; to run as non-root (when invoked with '-u'.)
diff --git a/gnu/packages/patches/emacs-pgtk-super-key-fix.patch b/gnu/packages/patches/emacs-pgtk-super-key-fix.patch
new file mode 100644
index 0000000000..a58c448af9
--- /dev/null
+++ b/gnu/packages/patches/emacs-pgtk-super-key-fix.patch
@@ -0,0 +1,49 @@
+From a897516fc5ec380938115ad42023f279d128fc1e Mon Sep 17 00:00:00 2001
+From: Andrew Tropin <andrew@trop.in>
+Date: Fri, 16 Sep 2022 15:24:19 +0300
+Subject: [PATCH] Workaround gtk bug for superkey handling
+
+https://gitlab.gnome.org/GNOME/gtk/-/issues/4913
+https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55362
+Patch based on Thomas Jost's suggestion.
+
+---
+ src/pgtkterm.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/pgtkterm.c b/src/pgtkterm.c
+index 491ba33882..d5a9970693 100644
+--- a/src/pgtkterm.c
++++ b/src/pgtkterm.c
+@@ -5051,7 +5051,7 @@ pgtk_gtk_to_emacs_modifiers (struct pgtk_display_info *dpyinfo, int state)
+     mod |= mod_ctrl;
+   if (state & GDK_META_MASK || state & GDK_MOD1_MASK)
+     mod |= mod_meta;
+-  if (state & GDK_SUPER_MASK)
++  if (state & GDK_SUPER_MASK || state & GDK_MOD4_MASK)
+     mod |= mod_super;
+   if (state & GDK_HYPER_MASK)
+     mod |= mod_hyper;
+@@ -5184,7 +5184,7 @@ key_press_event (GtkWidget *widget, GdkEvent *event, gpointer *user_data)
+       /* While super is pressed, the input method will always always
+ 	 resend the key events ignoring super.  As a workaround, don't
+ 	 filter key events with super or hyper pressed.  */
+-      if (!(event->key.state & (GDK_SUPER_MASK | GDK_HYPER_MASK)))
++      if (!(event->key.state & (GDK_SUPER_MASK | GDK_MOD4_MASK | GDK_HYPER_MASK)))
+ 	{
+ 	  if (pgtk_im_filter_keypress (f, &event->key))
+ 	    return TRUE;
+@@ -5199,8 +5199,9 @@ key_press_event (GtkWidget *widget, GdkEvent *event, gpointer *user_data)
+       /* make_lispy_event turns chars into control chars.
+          Don't do it here because XLookupString is too eager.  */
+       state &= ~GDK_CONTROL_MASK;
+-      state &= ~(GDK_META_MASK
+-		 | GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_MOD1_MASK);
++      state &= ~(GDK_META_MASK | GDK_MOD1_MASK
++		 | GDK_SUPER_MASK | GDK_MOD4_MASK
++		 | GDK_HYPER_MASK);
+ 
+       nbytes = event->key.length;
+       if (nbytes > copy_bufsiz)
+-- 
+2.37.3
diff --git a/gnu/packages/patches/emacs-polymode-fix-lexical-variable-error.patch b/gnu/packages/patches/emacs-polymode-fix-lexical-variable-error.patch
new file mode 100644
index 0000000000..77a8452c2a
--- /dev/null
+++ b/gnu/packages/patches/emacs-polymode-fix-lexical-variable-error.patch
@@ -0,0 +1,37 @@
+From 8b83fa772a71efc9dc030c43db2cba944e4338c1 Mon Sep 17 00:00:00 2001
+From: Kien Nguyen <kien.n.quang@gmail.com>
+Date: Wed, 19 May 2021 23:15:01 +0900
+Subject: [PATCH] Fix using of temporary lexical variable causes error in
+ native compiling
+
+---
+ polymode-core.el | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/polymode-core.el b/polymode-core.el
+index e7d40be..ef316f8 100644
+--- a/polymode-core.el
++++ b/polymode-core.el
+@@ -2088,14 +2088,14 @@ Elements of LIST can be either strings or symbols."
+                              (stringp pm--output-file)
+                              (pm--file-mod-time pm--output-file)))
+                    (imt (and omt (pm--file-mod-time pm--input-file)))
+-                   (action (if is-exporter "exporting" "weaving"))
+                    (ofile (if (and imt (time-less-p imt omt))
+                               (progn
+                                 (message "Not re-%s as input file '%s' hasn't changed"
+-                                         (file-name-nondirectory ifile) action)
++                                         (if is-exporter "exporting" "weaving")
++                                         (file-name-nondirectory ifile))
+                                 pm--output-file)
+                             (message "%s '%s' with '%s' ..."
+-                                     (capitalize action)
++                                     (if is-exporter "EXPORTING" "WEAVING")
+                                      (file-name-nondirectory ifile)
+                                      (eieio-object-name processor))
+                             (let ((fn (with-no-warnings
+
+base-commit: 44265e35161d77f6eaa09388ea2256b89bd5dcc8
+-- 
+2.37.2
+
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index c18e7f7f62..bdc773f650 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -22,6 +22,7 @@
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -385,36 +386,37 @@ Poppler PDF rendering library.")
 
 (define-public libharu
   (package
-   (name "libharu")
-   (version "2.3.0")
-   (source (origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/libharu/libharu")
-                   (commit (string-append
-                            "RELEASE_"
-                            (string-join (string-split version #\.) "_")))))
-             (file-name (git-file-name name version))
-             (sha256
-              (base32
-               "15s9hswnl3qqi7yh29jyrg0hma2n99haxznvcywmsp8kjqlyg75q"))))
-   (build-system gnu-build-system)
-   (arguments
-    `(#:configure-flags
-      (list (string-append "--with-zlib="
-                           (assoc-ref %build-inputs "zlib"))
-            (string-append "--with-png="
-                           (assoc-ref %build-inputs "libpng")))))
-   (inputs
-    (list zlib libpng))
-   (native-inputs
-    (list autoconf automake libtool))
-   (home-page "http://libharu.org/")
-   (synopsis "Library for generating PDF files")
-   (description
-    "libHaru is a library for generating PDF files.  libHaru does not support
+    (name "libharu")
+    (version "2.4.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/libharu/libharu")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jwzqvv81zf5f7zssyixhyjirlp9ddwkbaabd177syb1bxljlsdc"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f                  ; No tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-cmake
+                 (lambda _
+                   (substitute* "CMakeLists.txt"
+                     (("^install\\(FILES (README\\.md CHANGES) INSTALL DESTINATION .*\\)"
+                       _ files)
+                      (format #f "install(FILES ~a DESTINATION ~a/share/doc/~a-~a)"
+                              files #$output #$name #$version))))))))
+    (inputs
+     (list libpng zlib))
+    (home-page "http://libharu.org/")
+    (synopsis "Library for generating PDF files")
+    (description
+     "libHaru is a library for generating PDF files.  libHaru does not support
 reading and editing of existing PDF files.")
-   (license license:zlib)))
+    (license license:zlib)))
 
 (define-public xpdf
   (package
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index fdea27160d..645a8edee1 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -381,7 +381,7 @@
        ("libzip" ,libzip)
        ("oniguruma" ,oniguruma)
        ("openldap" ,openldap)
-       ("openssl" ,openssl)
+       ("openssl" ,openssl-1.1)
        ("pcre" ,pcre2)
        ("postgresql" ,postgresql)
        ("readline" ,readline)
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 4dcf4802a2..6afbf57c77 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -269,14 +269,14 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.82")
+    (version "2.83")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asymptote/"
                            version "/asymptote-" version ".src.tgz"))
        (sha256
-        (base32 "13blmsapbai4hqynyj1r1sjpypdv6frfassl2f2x7j2ql1dbqvsg"))
+        (base32 "18w8nf0p1b3h74sk1b7w96kq5gcaq09idi4771ini7p594gsfg7y"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled RapidJSON.
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index d1698e5f67..80acb606b2 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -348,13 +348,13 @@ library.")
 (define-public python-pandas
   (package
     (name "python-pandas")
-    (version "1.4.2")
+    (version "1.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pandas" version))
        (sha256
-        (base32 "04lsak3j5hq2hk0vfjf532rdxdqmg2akamdl4yl3qipihp2izg4j"))))
+        (base32 "0ryv66s9cvd27q6a985vv556k2qlnlrdna2z7qc7bdhphrrhsv5b"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 9b3eb12613..1b087635d1 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -117,6 +117,9 @@
             elogind-service
             elogind-service-type
 
+            %gdm-file-system
+            gdm-file-system-service
+
             %fontconfig-file-system
             fontconfig-file-system-service
 
@@ -1232,6 +1235,13 @@ when they log out."
     (flags '(read-only))
     (check? #f)))
 
+(define %gdm-file-system
+  (file-system
+    (device "none")
+    (mount-point "/var/lib/gdm")
+    (type "tmpfs")
+    (check? #f)))
+
 ;; The global fontconfig cache directory can sometimes contain stale entries,
 ;; possibly referencing fonts that have been GC'd, so mount it read-only.
 ;; As mentioned https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36924#8 and
@@ -1240,6 +1250,15 @@ when they log out."
   (simple-service 'fontconfig-file-system
                   file-system-service-type
                   (list %fontconfig-file-system)))
+
+;; Avoid stale caches and stale user IDs being reused between system
+;; reconfigurations, which would crash GDM and render the system unusable.
+;; GDM doesn't require persisting anything valuable there anyway.
+(define gdm-file-system-service
+  (simple-service 'gdm-file-system
+                  file-system-service-type
+                  (list %gdm-file-system)))
+
 
 ;;;
 ;;; AccountsService service.
@@ -1750,6 +1769,10 @@ applications needing access to be root.")
                               (list (file-append nfs-utils "/sbin/mount.nfs")
                                (file-append ntfs-3g "/sbin/mount.ntfs-3g"))))
 
+         ;; This is a volatile read-write file system mounted at /var/lib/gdm,
+         ;; to avoid GDM stale cache and permission issues.
+         gdm-file-system-service
+
          ;; The global fontconfig cache directory can sometimes contain
          ;; stale entries, possibly referencing fonts that have been GC'd,
          ;; so mount it read-only.
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 0cbd9aa53b..3ff290c197 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -818,27 +818,6 @@ the GNOME desktop environment.")
          (home-directory "/var/lib/gdm")
          (shell (file-append shadow "/sbin/nologin")))))
 
-(define %gdm-activation
-  ;; Ensure /var/lib/gdm is owned by the "gdm" user.  This is normally the
-  ;; case but could be wrong if the "gdm" user was created, then removed, and
-  ;; then recreated under a different UID/GID: <https://bugs.gnu.org/37423>.
-  (with-imported-modules '((guix build utils))
-    #~(begin
-        (use-modules (guix build utils))
-
-        (let* ((gdm (getpwnam "gdm"))
-               (uid (passwd:uid gdm))
-               (gid (passwd:gid gdm))
-               (st  (stat "/var/lib/gdm" #f)))
-          ;; Recurse into /var/lib/gdm only if it has wrong ownership.
-          (when (and st
-                     (or (not (= uid (stat:uid st)))
-                         (not (= gid (stat:gid st)))))
-            (for-each (lambda (file)
-                        (chown file uid gid))
-                      (find-files "/var/lib/gdm"
-                                  #:directories? #t)))))))
-
 (define dbus-daemon-wrapper
   (program-file
    "gdm-dbus-wrapper"
@@ -1022,8 +1001,6 @@ the GNOME desktop environment.")
                   (extensions
                    (list (service-extension shepherd-root-service-type
                                             gdm-shepherd-service)
-                         (service-extension activation-service-type
-                                            (const %gdm-activation))
                          (service-extension account-service-type
                                             (const %gdm-accounts))
                          (service-extension pam-root-service-type
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index e7edbf6656..1ffa408666 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -499,6 +500,12 @@ are unavailable."
              (base-url (string-append base-url directory))
              (url  (cond ((and=> (string->uri url) uri-scheme) ;full URL?
                           url)
+                         ;; full URL, except for URI scheme.  Reuse the URI
+                         ;; scheme of the document that contains the link.
+                         ((string-prefix? "//" url)
+                          (string-append
+                           (symbol->string (uri-scheme (string->uri base-url)))
+                           ":" url))
                          ((string-prefix? "/" url) ;absolute path?
                           (let ((uri (string->uri base-url)))
                             (uri->string
diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index 0e5bb7e635..ad1343bff4 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -81,10 +82,12 @@
   (requirements  gem-dependency-requirements))    ;string
 
 
-(define (rubygems-fetch name)
-  "Return a <gem> record for the package NAME, or #f on failure."
+(define* (rubygems-fetch name #:optional version)
+  "Return a <gem> record for the package NAME and VERSION, or #f on failure.  If VERSION is #f or missing, return the latest version gem."
   (and=> (json-fetch
-          (string-append "https://rubygems.org/api/v1/gems/" name ".json"))
+          (if version
+              (string-append "https://rubygems.org/api/v2/rubygems/" name "/versions/" version ".json")
+              (string-append "https://rubygems.org/api/v1/gems/" name ".json")))
          json->gem))
 
 (define (ruby-package-name name)
@@ -122,8 +125,11 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES."
 
 (define* (gem->guix-package package-name #:key (repo 'rubygems) version)
   "Fetch the metadata for PACKAGE-NAME from rubygems.org, and return the
-`package' s-expression corresponding to that package, or #f on failure."
-  (let ((gem (rubygems-fetch package-name)))
+`package' s-expression corresponding to that package, or #f on failure.
+Optionally include a VERSION string to fetch a specific version gem."
+  (let ((gem (if version
+                 (rubygems-fetch package-name version)
+                 (rubygems-fetch package-name))))
     (if gem
         (let* ((dependencies-names (map gem-dependency-name
                                         (gem-dependencies-runtime
@@ -189,4 +195,5 @@ package on RubyGems."
   (recursive-import package-name
                     #:repo '()
                     #:repo->guix-package gem->guix-package
-                    #:guix-name ruby-package-name))
+                    #:guix-name ruby-package-name
+                    #:version version))
diff --git a/guix/scripts/import/gem.scm b/guix/scripts/import/gem.scm
index 82deac16ad..7f1e73332b 100644
--- a/guix/scripts/import/gem.scm
+++ b/guix/scripts/import/gem.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,7 @@
   #:use-module (srfi srfi-37)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
+  #:use-module (ice-9 receive)
   #:export (guix-import-gem))
 
 
@@ -42,8 +44,9 @@
   '())
 
 (define (show-help)
-  (display (G_ "Usage: guix import gem PACKAGE-NAME
-Import and convert the RubyGems package for PACKAGE-NAME.\n"))
+  (display (G_ "Usage: guix import gem PACKAGE-NAME[@VERSION] Import and
+convert the RubyGems package for PACKAGE-NAME.  Optionally, a version can be
+specified after the at-sign (@) character.\n"))
   (display (G_ "
   -h, --help             display this help and exit"))
   (display (G_ "
@@ -86,21 +89,23 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n"))
                              (_ #f))
                            (reverse opts))))
     (match args
-      ((package-name)
-       (let ((code (if (assoc-ref opts 'recursive)
-                       (map (match-lambda
-                              ((and ('package ('name name) . rest) pkg)
-                               `(define-public ,(string->symbol name)
-                                  ,pkg))
-                              (_ #f))
-                            (gem-recursive-import package-name 'rubygems))
-                       (let ((sexp (gem->guix-package package-name)))
-                         (if sexp sexp #f)))))
-         (match code
-           ((or #f '(#f))
-            (leave (G_ "failed to download meta-data for package '~a'~%")
-                   package-name))
-           (_ code))))
+      ((spec)
+       (receive (package-name package-version)
+           (package-name->name+version spec)
+         (let ((code (if (assoc-ref opts 'recursive)
+                         (map (match-lambda
+                                ((and ('package ('name name) . rest) pkg)
+                                 `(define-public ,(string->symbol name)
+                                    ,pkg))
+                                (_ #f))
+                              (gem-recursive-import package-name package-version))
+                         (let ((sexp (gem->guix-package package-name #:version package-version)))
+                           (if sexp sexp #f)))))
+           (match code
+             ((or #f '(#f))
+              (leave (G_ "failed to download meta-data for package '~a'~%")
+                     package-name))
+             (_ code)))))
       (()
        (leave (G_ "too few arguments~%")))
       ((many ...)
diff --git a/tests/gem.scm b/tests/gem.scm
index c8fe15398e..6aa0d279dc 100644
--- a/tests/gem.scm
+++ b/tests/gem.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,6 +45,22 @@
   \"licenses\": [\"MIT\", \"Apache 2.0\"]
 }")
 
+(define test-foo-v2-json
+  "{
+  \"name\": \"foo\",
+  \"version\": \"2.0.0\",
+  \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
+  \"info\": \"A cool gem\",
+  \"homepage_uri\": \"https://example.com\",
+  \"dependencies\": {
+    \"runtime\": [
+      { \"name\": \"bundler\" },
+      { \"name\": \"bar\" }
+    ]
+  },
+  \"licenses\": [\"MIT\", \"Apache 2.0\"]
+}")
+
 (define test-bar-json
   "{
   \"name\": \"bar\",
@@ -103,6 +120,35 @@
       (x
        (pk 'fail x #f)))))
 
+(test-assert "gem->guix-package with a specific version"
+  ;; Replace network resources with sample data.
+  (mock ((guix http-client) http-fetch
+         (lambda (url . rest)
+           (match url
+             ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json"
+              (values (open-input-string test-foo-v2-json)
+                      (string-length test-foo-v2-json)))
+             (_ (error "Unexpected URL: " url)))))
+    (match (gem->guix-package "foo" #:version "2.0.0")
+      (('package
+         ('name "ruby-foo")
+         ('version "2.0.0")
+         ('source ('origin
+                    ('method 'url-fetch)
+                    ('uri ('rubygems-uri "foo" 'version))
+                    ('sha256
+                     ('base32
+                      "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+         ('build-system 'ruby-build-system)
+         ('propagated-inputs ('list 'bundler 'ruby-bar))
+         ('synopsis "A cool gem")
+         ('description "This package provides a cool gem")
+         ('home-page "https://example.com")
+         ('license ('list 'license:expat 'license:asl2.0)))
+       #t)
+      (x
+       (pk 'fail x #f)))))
+
 (test-assert "gem-recursive-import"
   ;; Replace network resources with sample data.
   (mock ((guix http-client) http-fetch
@@ -170,4 +216,71 @@
           (x
            (pk 'fail x #f)))))
 
+(test-assert "gem-recursive-import with a specific version"
+  ;; Replace network resources with sample data.
+  (mock ((guix http-client) http-fetch
+         (lambda (url . rest)
+           (match url
+             ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json"
+              (values (open-input-string test-foo-v2-json)
+                      (string-length test-foo-v2-json)))
+             ("https://rubygems.org/api/v1/gems/bar.json"
+              (values (open-input-string test-bar-json)
+                      (string-length test-bar-json)))
+             ("https://rubygems.org/api/v1/gems/bundler.json"
+              (values (open-input-string test-bundler-json)
+                      (string-length test-bundler-json)))
+             (_ (error "Unexpected URL: " url)))))
+        (match (gem-recursive-import "foo" "2.0.0")
+          ((('package
+              ('name "ruby-bar")
+              ('version "1.0.0")
+              ('source
+               ('origin
+                 ('method 'url-fetch)
+                 ('uri ('rubygems-uri "bar" 'version))
+                 ('sha256
+                  ('base32
+                   "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+              ('build-system 'ruby-build-system)
+              ('propagated-inputs ('list 'bundler))
+              ('synopsis "Another cool gem")
+              ('description "Another cool gem")
+              ('home-page "https://example.com")
+              ('license #f))                      ;no licensing info
+            ('package
+              ('name "ruby-bundler")
+              ('version "1.14.2")
+              ('source
+               ('origin
+                 ('method 'url-fetch)
+                 ('uri ('rubygems-uri "bundler" 'version))
+                 ('sha256
+                  ('base32
+                   "1446xiz7zg0bz7kgx9jv84y0s4hpsg61dj5l3qb0i00avc1kxd9v"))))
+              ('build-system 'ruby-build-system)
+              ('synopsis "Ruby gem bundler")
+              ('description "Ruby gem bundler")
+              ('home-page "https://bundler.io/")
+              ('license 'license:expat))
+            ('package
+              ('name "ruby-foo")
+              ('version "2.0.0")
+              ('source
+               ('origin
+                 ('method 'url-fetch)
+                 ('uri ('rubygems-uri "foo" 'version))
+                 ('sha256
+                  ('base32
+                   "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+              ('build-system 'ruby-build-system)
+              ('propagated-inputs ('list 'bundler 'ruby-bar))
+              ('synopsis "A cool gem")
+              ('description "This package provides a cool gem")
+              ('home-page "https://example.com")
+              ('license ('list 'license:expat 'license:asl2.0))))
+           #t)
+          (x
+           (pk 'fail x #f)))))
+
 (test-end "gem")
diff --git a/tests/gnu-maintenance.scm b/tests/gnu-maintenance.scm
index c04d8ba733..89b0684c25 100644
--- a/tests/gnu-maintenance.scm
+++ b/tests/gnu-maintenance.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,6 +19,10 @@
 
 (define-module (test-gnu-maintenance)
   #:use-module (guix gnu-maintenance)
+  #:use-module (guix tests)
+  #:use-module (guix tests http)
+  #:use-module (guix upstream)
+  #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-64)
   #:use-module (ice-9 match))
@@ -55,4 +60,28 @@
              ("mpg321_0.3.2.orig.tar.gz" "0.3.2")
              ("bvi-1.4.1.src.tar.gz" "1.4.1")))))
 
+(test-assert "latest-html-release, scheme-less URIs"
+  (with-http-server
+      `((200 "<html xmlns=\"http://www.w3.org/1999/xhtml\">
+<head>
+<title>Releases (on another domain)!</title>
+</head>
+<body
+<a href=\"//another-site/foo-2.tar.gz\">version 1</a>
+</body>
+</html>"))
+    (let ()
+      (define package
+        (dummy-package "foo"
+          (source
+           (dummy-origin
+            (uri (string-append (%local-url) "/foo-1.tar.gz"))))
+          (properties
+           `((release-monitoring-url . ,(%local-url))))))
+      (define update ((upstream-updater-latest %generic-html-updater) package))
+      (define expected-new-url "http://another-site/foo-2.tar.gz")
+      (and (pk 'u update)
+           (equal? (upstream-source-version update) "2")
+           (equal? (list expected-new-url) (upstream-source-urls update))))))
+
 (test-end)