summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk4
-rw-r--r--gnu/packages/curl.scm64
-rw-r--r--gnu/packages/game-development.scm4
-rw-r--r--gnu/packages/gl.scm14
-rw-r--r--gnu/packages/graphics.scm4
-rw-r--r--gnu/packages/haskell-xyz.scm58
-rw-r--r--gnu/packages/patches/ghc-basement-fix-32bit.patch177
-rw-r--r--gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch303
-rw-r--r--gnu/packages/patches/ghc-memory-fix-32bit.patch40
-rw-r--r--gnu/packages/patches/ghc-persistent-fix-32bit.patch25
-rw-r--r--gnu/packages/qt.scm5
-rw-r--r--gnu/packages/sdl.scm17
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/web.scm18
-rw-r--r--gnu/packages/xdisorg.scm35
-rw-r--r--gnu/packages/xorg.scm44
16 files changed, 374 insertions, 442 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index fcd9024ce3..d250816999 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1269,9 +1269,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/ghc-9.2-grep-warnings.patch \
   %D%/packages/patches/ghc-testsuite-dlopen-pie.patch		\
   %D%/packages/patches/ghc-testsuite-grep-compat.patch		\
-  %D%/packages/patches/ghc-bloomfilter-ghc9.2.patch	\
+  %D%/packages/patches/ghc-basement-fix-32bit.patch		\
   %D%/packages/patches/ghc-bytestring-handle-ghc9.patch	\
   %D%/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch	\
+  %D%/packages/patches/ghc-memory-fix-32bit.patch		\
+  %D%/packages/patches/ghc-persistent-fix-32bit.patch		\
   %D%/packages/patches/ghostscript-CVE-2023-36664.patch		\
   %D%/packages/patches/ghostscript-CVE-2023-36664-fixup.patch	\
   %D%/packages/patches/ghostscript-leptonica-hurd.patch		\
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index 9f06f35495..d94a0178af 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2023 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,15 +65,14 @@
 (define-public curl
   (package
     (name "curl")
-    (version "7.85.0")
-    (replacement curl/fixed)
+    (version "8.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://curl.se/download/curl-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1rjbn0h5rddclhvxb8p5gddxszcrpbf5cw1whx6wnj4s9dnlmdc8"))
+                "0bd8y8v66biyqvg70ka1sdd0aixs6yzpnvfsig907xzh9af2mihn"))
               (patches (search-patches "curl-use-ssl-cert-env.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
@@ -118,15 +118,28 @@
               (rename-file (string-append #$output "/share/man/man3")
                            (string-append #$output:doc "/share/man/man3"))))
           (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
+            (lambda* (#:key tests? parallel-tests? make-flags #:allow-other-keys)
               (substitute* "tests/runtests.pl"
                 (("/bin/sh") (which "sh")))
-
               (when tests?
-                ;; The top-level "make check" does "make -C tests quiet-test", which
-                ;; is too quiet.  Use the "test" target instead, which is more
-                ;; verbose.
-                (invoke "make" "-C" "tests" "test"))))
+                (let* ((job-count (string-append
+                                   "-j"
+                                   (if parallel-tests?
+                                       (number->string (parallel-job-count))
+                                       "1")))
+                       (arguments `("-C" "tests" "test"
+                                    ,@make-flags
+                                    ,(if #$(or (system-hurd?)
+                                               (target-arm32?)
+                                               (target-aarch64?))
+                                         ;; protocol FAIL
+                                         (string-append "TFLAGS=\"~1474 "
+                                                        job-count "\"")
+                                         (string-append "TFLAGS=" job-count)))))
+                  ;; The top-level "make check" does "make -C tests quiet-test", which
+                  ;; is too quiet.  Use the "test" target instead, which is more
+                  ;; verbose.
+                  (apply invoke "make" arguments)))))
           #$@(if (system-hurd?)
                  #~((add-after 'unpack 'skip-tests
                       (lambda _
@@ -155,39 +168,6 @@ tunneling, and so on.")
                                    "See COPYING in the distribution."))
     (home-page "https://curl.haxx.se/")))
 
-(define curl/fixed
-  (let ((%version "8.4.0"))
-    (package
-      (inherit curl)
-      (version "8.4.0a")               ; add lowercase 'a' for grafting
-      (source (origin
-                (method url-fetch)
-                (uri (string-append "https://curl.se/download/curl-"
-                                    %version ".tar.xz"))
-                (sha256
-                 (base32
-                  "0bd8y8v66biyqvg70ka1sdd0aixs6yzpnvfsig907xzh9af2mihn"))
-                (patches (search-patches "curl-use-ssl-cert-env.patch"))))
-      (arguments
-       (if (system-hurd?)
-           (substitute-keyword-arguments (package-arguments curl)
-             ((#:phases phases '%standard-phases)
-              #~(modify-phases #$phases
-                  ;; We cannot simply set #:make-flags because they are
-                  ;; ignored by curl's custom check phase.
-                  (replace 'check
-                    (lambda* (#:key tests? make-flags #:allow-other-keys)
-                      (substitute* "tests/runtests.pl"
-                        (("/bin/sh") (which "sh")))
-                      ;; See comment in curl about check/test.
-                      (let ((arguments `("-C" "tests" "test"
-                                         ,@make-flags
-                                         ;; protocol FAIL
-                                         "TFLAGS=~1474")))
-                        (when tests?
-                          (apply invoke "make" arguments))))))))
-           (package-arguments curl))))))
-
 (define-public curl-ssh
   (package/inherit curl
     (arguments
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 1d9abd9705..671c7839ac 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -2055,7 +2055,7 @@ scripted in a Python-like language.")
 (define-public godot
   (package
     (name "godot")
-    (version "4.1.2")
+    (version "4.1.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2064,7 +2064,7 @@ scripted in a Python-like language.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zm07rknpjkvyxpiscqsx5hi4gc5wi647jlhillxdf85b36s6q9j"))
+                "1mwwzf77ixkalciqakn6q42g9sl2570didfll406sfs42wz534ng"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (srfi srfi-1)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 6472158abc..c02a6f0a84 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -267,7 +267,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "23.1.4")
+    (version "23.2.1")
     (source
       (origin
         (method url-fetch)
@@ -277,7 +277,7 @@ also known as DXTn or DXTC) for Mesa.")
                                   "mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "0n89l7lvawh85hq2a7g5pp5v017s03qs3n4hbbff6rs8p5zs2qbj"))))
+          "1k61pgw0vcjrlb4299q98cy7iqmk2r7jmb5ika91z01dzhb0dpk4"))))
     (build-system meson-build-system)
     (propagated-inputs
      ;; The following are in the Requires.private field of gl.pc.
@@ -754,10 +754,14 @@ OpenGL graphics API.")
       #~(modify-phases %standard-phases
           (add-before 'configure 'patch-paths
             (lambda* (#:key inputs #:allow-other-keys)
-              (let ((mesa (dirname (search-input-file inputs "lib/libGL.so"))))
+              (let ((mesa-lib
+                     (lambda (file)
+                       (search-input-file inputs (string-append "lib/" file)))))
                 (substitute* (find-files "." "\\.[ch]$")
-                  (("libGL.so.1") (string-append mesa "/libGL.so.1"))
-                  (("libEGL.so.1") (string-append mesa "/libEGL.so.1")))))))))
+                  (("libGL.so.1") (mesa-lib "libGL.so.1"))
+                  (("libEGL.so.1") (mesa-lib "libEGL.so.1"))
+                  (("libGLESv1_CM.so.1") (mesa-lib "libGLESv1_CM.so.1"))
+                  (("libGLESv2.so.2") (mesa-lib "libGLESv2.so.2")))))))))
     (build-system meson-build-system)
     (native-inputs
      (list pkg-config python))
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 00e273b853..9e2efaa7fb 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -2204,6 +2204,10 @@ Cflags: -I${includedir}~%" #$output #$version)))))
                           "_" "_" "_" "Codec_partialAnim"
                           "_" "_" "_" "Codec_InvalidImages"
                           "_" "_" "_" "Codec_GifInterlacedTruncated"
+                          ;; This test started failing possibly after mesa
+                          ;; being updated to 23.2.1 and possibly only on some
+                          ;; hardware.
+                          "_" "_" "_" "SkRuntimeBlender_GPU"
                           "_" "_" "_" "SkText_UnicodeText_Flags"
                           "_" "_" "_" "SkParagraph_FontStyle"
                           "_" "_" "_" "flight_animated_image"
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index e34acca909..5d9e5757a0 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -781,7 +781,8 @@ than @code{base-compat}, which has no dependencies.")
               (uri (hackage-uri "basement" version))
               (sha256
                (base32
-                "1d2xj5dmjps7nc7rwp5s0kyjcg9v8xfql6ik4yk1d3affnvazhjn"))))
+                "1d2xj5dmjps7nc7rwp5s0kyjcg9v8xfql6ik4yk1d3affnvazhjn"))
+              (patches (search-patches "ghc-basement-fix-32bit.patch"))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "basement")))
     (home-page "https://github.com/haskell-foundation/foundation#readme")
@@ -1062,31 +1063,26 @@ library for Haskell.")
 (define-public ghc-bloomfilter
   (package
     (name "ghc-bloomfilter")
-    (version "2.0.1.0")
+    (version "2.0.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (hackage-uri "bloomfilter" version))
        (sha256
         (base32
-         "03vrmncg1c10a2wcg5skq30m1yiknn7nwxz2gblyyfaxglshspkc"))
-       (patches (search-patches "ghc-bloomfilter-ghc9.2.patch"))))
+         "0klb26ldkw32axv3927w489j71r2rc9pangsvznqjbljib9970hp"))
+       (snippet
+        #~(begin (use-modules (guix build utils))
+                 ;; https://github.com/bos/bloomfilter/issues/7
+                 (substitute* "Data/BloomFilter/Easy.hs"
+                   ((" in if roundedBits <= 0 \\|\\| maxbitstoolarge roundedBits")
+                    " in if roundedBits <= 0"))))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "bloomfilter")))
     (native-inputs
      (list ghc-quickcheck ghc-random ghc-test-framework
            ghc-test-framework-quickcheck2))
-    (arguments
-     `(#:cabal-revision ("2"
-                         "1hi6hwvhv7lxqv0l6hv2854g1rvc52zcmr3ldvnaan1l1b666867")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "bloomfilter.cabal"
-               (("\\b(base)\\s+[^,]+" all dep)
-                dep)))))))
-    (home-page "https://github.com/bos/bloomfilter")
+    (home-page "https://github.com/haskell-pkg-janitors/bloomfilter")
     (synopsis "Pure and impure Bloom filter implementations")
     (description "This package provides both mutable and immutable Bloom
 filter data types, along with a family of hash functions and an easy-to-use
@@ -7080,7 +7076,8 @@ speed, flexibility, and quality of parse errors.")
               (uri (hackage-uri "memory" version))
               (sha256
                (base32
-                "0yl3ivvn7i9wbx910b7bzj9c3g0jjjk91j05wj74qb5zx2yyf9rk"))))
+                "0yl3ivvn7i9wbx910b7bzj9c3g0jjjk91j05wj74qb5zx2yyf9rk"))
+              (patches (search-patches "ghc-memory-fix-32bit.patch"))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "memory")))
     (inputs (list ghc-basement))
@@ -8512,7 +8509,12 @@ code.  It was designed for use in @code{Pandoc}.")
                '(begin
                   ;; Fix test case.
                   (substitute* "test/writer.ms"
-                    (("\\\\\\[u2212\\]") "-"))))))
+                    (("\\\\\\[u2212\\]") "-"))
+                  (substitute* "test/Tests/Old.hs"
+                    ;; There is no indication why these tests are failing on
+                    ;; i686-linux.
+                    ((".*fb2WriterTest' \"images.*") "")
+                    ((".*fb2WriterTest' \"testsuite.*") ""))))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "pandoc")))
     (inputs (list ghc-glob
@@ -8608,6 +8610,17 @@ provided for those who need a drop-in replacement for Markdown.pl.")
        #:configure-flags #~(list "-fembed_data_files")
        #:phases
        #~(modify-phases %standard-phases
+           (add-after 'install 'install-more
+             (lambda _
+               (let ((bash (string-append #$output "/etc/bash_completion.d/pandoc"))
+                     (man1 (string-append #$output "/share/man/man1")))
+                 (mkdir-p (dirname bash))
+                 (with-output-to-file bash
+                   (lambda _
+                     (invoke (string-append #$output "/bin/pandoc")
+                             "--bash-completion")))
+                 (mkdir-p man1)
+                 (install-file "man/pandoc.1" man1))))
            (add-after 'register 'remove-libraries
              (lambda* (#:key outputs #:allow-other-keys)
                (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))
@@ -8919,7 +8932,8 @@ numbers")
               (uri (hackage-uri "persistent" version))
               (sha256
                (base32
-                "0z69yvk0rd29dp5qdhi4p587b891y90azrzzpa3g10cxp3gyywvm"))))
+                "0z69yvk0rd29dp5qdhi4p587b891y90azrzzpa3g10cxp3gyywvm"))
+              (patches (search-patches "ghc-persistent-fix-32bit.patch"))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "persistent")))
     (inputs (list ghc-conduit
@@ -16006,10 +16020,12 @@ benchmarks](https://hackage.haskell.org/package/random-bytestring-0.1.3.2/src/be
                          ghc-tasty-hunit
                          ghc-tasty-quickcheck))
     (arguments
-     `(#:cabal-revision ("2"
-                         "0cz3zzz9k490w9nfn4hpgdw4zx4w70fwqrwsfx8svcwqssqibqw3")))
+     `(#:cabal-revision ("4"
+                         "1lc32d5nxk0ry1pfn3ss55hi4cv6qj5nkkdn3j4y3lrdwyv7kbw2")
+       #:tests? ,(not (or (%current-target-system)
+                          (target-x86-32?)))))
     (home-page "https://github.com/emilypi/base64")
-    (synopsis "A modern RFC 4648-compliant Base64 library")
+    (synopsis "Modern RFC 4648-compliant Base64 library")
     (description
      "RFC 4648-compliant Base64 with an eye towards performance and modernity
 (additional support for RFC 7049 standards)")
diff --git a/gnu/packages/patches/ghc-basement-fix-32bit.patch b/gnu/packages/patches/ghc-basement-fix-32bit.patch
new file mode 100644
index 0000000000..7407b2ef75
--- /dev/null
+++ b/gnu/packages/patches/ghc-basement-fix-32bit.patch
@@ -0,0 +1,177 @@
+https://github.com/haskell-foundation/foundation/pull/573
+https://github.com/haskell-foundation/foundation/commit/38be2c93acb6f459d24ed6c626981c35ccf44095.patch
+
+Changes made:
+Changed '904' to '902' to use the fix with GHC-9.2.
+
+diff --git a/Basement/Bits.hs b/Basement/Bits.hs
+index 7eeea0f..b1e9afd 100644
+--- a/Basement/Bits.hs
++++ b/Basement/Bits.hs
+@@ -54,8 +54,12 @@ import GHC.Int
+ import Basement.Compat.Primitive
+ 
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++import GHC.Exts
++#else
+ import GHC.IntWord64
+ #endif
++#endif
+ 
+ -- | operation over finite bits
+ class FiniteBitsOps bits where
+diff --git a/Basement/Numerical/Additive.hs b/Basement/Numerical/Additive.hs
+index d0dfb97..79b7033 100644
+--- a/Basement/Numerical/Additive.hs
++++ b/Basement/Numerical/Additive.hs
+@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128
+ import qualified Basement.Types.Word256 as Word256
+ 
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++import           GHC.Exts
++#else
+ import           GHC.IntWord64
+ #endif
++#endif
+ 
+ -- | Represent class of things that can be added together,
+ -- contains a neutral element and is commutative.
+diff --git a/Basement/Numerical/Conversion.hs b/Basement/Numerical/Conversion.hs
+index db502c0..abb6d93 100644
+--- a/Basement/Numerical/Conversion.hs
++++ b/Basement/Numerical/Conversion.hs
+@@ -26,8 +26,12 @@ import GHC.Word
+ import Basement.Compat.Primitive
+ 
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++import GHC.Exts
++#else
+ import GHC.IntWord64
+ #endif
++#endif
+ 
+ intToInt64 :: Int -> Int64
+ #if WORD_SIZE_IN_BITS == 64
+@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i)
+ #endif
+ 
+ #if WORD_SIZE_IN_BITS == 64
++#if __GLASGOW_HASKELL__ >= 904
++word64ToWord# :: Word64# -> Word#
++word64ToWord# i = word64ToWord# i
++#else
+ word64ToWord# :: Word# -> Word#
+ word64ToWord# i = i
++#endif
+ {-# INLINE word64ToWord# #-}
+ #endif
+ 
++#if WORD_SIZE_IN_BITS < 64
++word64ToWord32# :: Word64# -> Word32#
++word64ToWord32# i = wordToWord32# (word64ToWord# i)
++{-# INLINE word64ToWord32# #-}
++#endif
++
+ -- | 2 Word32s
+ data Word32x2 = Word32x2 {-# UNPACK #-} !Word32
+                          {-# UNPACK #-} !Word32
+@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G
+ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64))
+ #endif
+ #else
++#if __GLASGOW_HASKELL__ >= 902
++word64ToWord32s :: Word64 -> Word32x2
++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64))
++#else
+ word64ToWord32s :: Word64 -> Word32x2
+ word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64))
+ #endif
++#endif
+ 
+ wordToChar :: Word -> Char
+ wordToChar (W# word) = C# (chr# (word2Int# word))
+diff --git a/Basement/PrimType.hs b/Basement/PrimType.hs
+index f8ca292..b8fbaf7 100644
+--- a/Basement/PrimType.hs
++++ b/Basement/PrimType.hs
+@@ -54,7 +54,11 @@ import           Basement.Nat
+ import qualified Prelude (quot)
+ 
+ #if WORD_SIZE_IN_BITS < 64
+-import           GHC.IntWord64
++#if __GLASGOW_HASKELL__ >= 902
++import GHC.Exts
++#else
++import GHC.IntWord64
++#endif
+ #endif
+ 
+ #ifdef FOUNDATION_BOUNDS_CHECK
+diff --git a/Basement/Types/OffsetSize.hs b/Basement/Types/OffsetSize.hs
+index cd94492..b2903ba 100644
+--- a/Basement/Types/OffsetSize.hs
++++ b/Basement/Types/OffsetSize.hs
+@@ -70,8 +70,12 @@ import Data.List (foldl')
+ import qualified Prelude
+ 
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++import GHC.Exts
++#else
+ import GHC.IntWord64
+ #endif
++#endif
+ 
+ -- | File size in bytes
+ newtype FileSize = FileSize Word64
+@@ -225,7 +229,11 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme
+ 
+ csizeOfSize :: CountOf Word8 -> CSize
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz)))
++#else
+ csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz))
++#endif
+ #else
+ #if __GLASGOW_HASKELL__ >= 904
+ csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz)))
+@@ -238,7 +246,11 @@ csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz))
+ 
+ csizeOfOffset :: Offset8 -> CSize
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz)))
++#else
+ csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz))
++#endif
+ #else
+ #if __GLASGOW_HASKELL__ >= 904
+ csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz)))
+@@ -250,7 +262,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz))
+ sizeOfCSSize :: CSsize -> CountOf Word8
+ sizeOfCSSize (CSsize (-1))      = error "invalid size: CSSize is -1"
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz))
++#else
+ sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz)
++#endif
+ #else
+ #if __GLASGOW_HASKELL__ >= 904
+ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz))
+@@ -261,7 +277,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz)
+ 
+ sizeOfCSize :: CSize -> CountOf Word8
+ #if WORD_SIZE_IN_BITS < 64
++#if __GLASGOW_HASKELL__ >= 902
++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz)))
++#else
+ sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz))
++#endif
+ #else
+ #if __GLASGOW_HASKELL__ >= 904
+ sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz)))
diff --git a/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch b/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch
deleted file mode 100644
index 97caf2cc9b..0000000000
--- a/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch
+++ /dev/null
@@ -1,303 +0,0 @@
-Taken from https://github.com/bos/bloomfilter/pull/20
-
-From fb79b39c44404fd791a3bed973e9d844fb084f1e Mon Sep 17 00:00:00 2001
-From: Simon Jakobi <simon.jakobi@gmail.com>
-Date: Fri, 12 Nov 2021 01:37:36 +0100
-Subject: [PATCH] Fix build with GHC 9.2
-
-The `FastShift.shift{L,R}` methods are replaced with `unsafeShift{L,R}`
-introduced in base-4.5.
-
-Fixes #19.
----
- Data/BloomFilter.hs         | 16 +++++------
- Data/BloomFilter/Hash.hs    | 15 +++++-----
- Data/BloomFilter/Mutable.hs | 20 +++++++-------
- Data/BloomFilter/Util.hs    | 55 ++++++-------------------------------
- bloomfilter.cabal           |  2 +-
- 5 files changed, 34 insertions(+), 74 deletions(-)
-
-diff --git a/Data/BloomFilter.hs b/Data/BloomFilter.hs
-index 2210cef..6b47c21 100644
---- a/Data/BloomFilter.hs
-+++ b/Data/BloomFilter.hs
-@@ -78,8 +78,8 @@ import Control.DeepSeq (NFData(..))
- import Data.Array.Base (unsafeAt)
- import qualified Data.Array.Base as ST
- import Data.Array.Unboxed (UArray)
--import Data.Bits ((.&.))
--import Data.BloomFilter.Util (FastShift(..), (:*)(..))
-+import Data.Bits ((.&.), unsafeShiftL, unsafeShiftR)
-+import Data.BloomFilter.Util ((:*)(..))
- import qualified Data.BloomFilter.Mutable as MB
- import qualified Data.BloomFilter.Mutable.Internal as MB
- import Data.BloomFilter.Mutable.Internal (Hash, MBloom)
-@@ -98,7 +98,7 @@ data Bloom a = B {
-     }
- 
- instance Show (Bloom a) where
--    show ub = "Bloom { " ++ show ((1::Int) `shiftL` shift ub) ++ " bits } "
-+    show ub = "Bloom { " ++ show ((1::Int) `unsafeShiftL` shift ub) ++ " bits } "
- 
- instance NFData (Bloom a) where
-     rnf !_ = ()
-@@ -172,7 +172,7 @@ singleton hash numBits elt = create hash numBits (\mb -> MB.insert mb elt)
- -- | Given a filter's mask and a hash value, compute an offset into
- -- a word array and a bit offset within that word.
- hashIdx :: Int -> Word32 -> (Int :* Int)
--hashIdx mask x = (y `shiftR` logBitsInHash) :* (y .&. hashMask)
-+hashIdx mask x = (y `unsafeShiftR` logBitsInHash) :* (y .&. hashMask)
-   where hashMask = 31 -- bitsInHash - 1
-         y = fromIntegral x .&. mask
- 
-@@ -191,7 +191,7 @@ hashesU ub elt = hashIdx (mask ub) `map` hashes ub elt
- -- /still/ some possibility that @True@ will be returned.
- elem :: a -> Bloom a -> Bool
- elem elt ub = all test (hashesU ub elt)
--  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `shiftL` bit) /= 0
-+  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `unsafeShiftL` bit) /= 0
-           
- modify :: (forall s. (MBloom s a -> ST s z))  -- ^ mutation function (result is discarded)
-         -> Bloom a
-@@ -255,11 +255,11 @@ insertList elts = modify $ \mb -> mapM_ (MB.insert mb) elts
- -- is /still/ some possibility that @True@ will be returned.
- notElem :: a -> Bloom a -> Bool
- notElem elt ub = any test (hashesU ub elt)
--  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `shiftL` bit) == 0
-+  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `unsafeShiftL` bit) == 0
- 
- -- | Return the size of an immutable Bloom filter, in bits.
- length :: Bloom a -> Int
--length = shiftL 1 . shift
-+length = unsafeShiftL 1 . shift
- 
- -- | Build an immutable Bloom filter from a seed value.  The seeding
- -- function populates the filter as follows.
-@@ -318,7 +318,7 @@ fromList hashes numBits = unfold hashes numBits convert
- logPower2 :: Int -> Int
- logPower2 k = go 0 k
-     where go j 1 = j
--          go j n = go (j+1) (n `shiftR` 1)
-+          go j n = go (j+1) (n `unsafeShiftR` 1)
- 
- -- $overview
- --
-diff --git a/Data/BloomFilter/Hash.hs b/Data/BloomFilter/Hash.hs
-index 132a3a4..d071fd4 100644
---- a/Data/BloomFilter/Hash.hs
-+++ b/Data/BloomFilter/Hash.hs
-@@ -38,8 +38,7 @@ module Data.BloomFilter.Hash
-     ) where
- 
- import Control.Monad (foldM)
--import Data.Bits ((.&.), (.|.), xor)
--import Data.BloomFilter.Util (FastShift(..))
-+import Data.Bits ((.&.), (.|.), unsafeShiftL, unsafeShiftR, xor)
- import Data.List (unfoldr)
- import Data.Int (Int8, Int16, Int32, Int64)
- import Data.Word (Word8, Word16, Word32, Word64)
-@@ -91,11 +90,11 @@ class Hashable a where
-              -> Word64           -- ^ salt
-              -> IO Word64
-     hashIO64 v salt = do
--                   let s1 = fromIntegral (salt `shiftR` 32) .&. maxBound
-+                   let s1 = fromIntegral (salt `unsafeShiftR` 32) .&. maxBound
-                        s2 = fromIntegral salt
-                    h1 <- hashIO32 v s1
-                    h2 <- hashIO32 v s2
--                   return $ (fromIntegral h1 `shiftL` 32) .|. fromIntegral h2
-+                   return $ (fromIntegral h1 `unsafeShiftL` 32) .|. fromIntegral h2
- 
- -- | Compute a 32-bit hash.
- hash32 :: Hashable a => a -> Word32
-@@ -149,8 +148,8 @@ cheapHashes :: Hashable a => Int -- ^ number of hashes to compute
- cheapHashes k v = go 0
-     where go i | i == j = []
-                | otherwise = hash : go (i + 1)
--               where !hash = h1 + (h2 `shiftR` i)
--          h1 = fromIntegral (h `shiftR` 32)
-+               where !hash = h1 + (h2 `unsafeShiftR` i)
-+          h1 = fromIntegral (h `unsafeShiftR` 32)
-           h2 = fromIntegral h
-           h = hashSalt64 0x9150a946c4a8966e v
-           j = fromIntegral k
-@@ -163,7 +162,7 @@ instance Hashable Integer where
-                                    (salt `xor` 0x3ece731e)
-                   | otherwise = hashIO32 (unfoldr go k) salt
-         where go 0 = Nothing
--              go i = Just (fromIntegral i :: Word32, i `shiftR` 32)
-+              go i = Just (fromIntegral i :: Word32, i `unsafeShiftR` 32)
- 
- instance Hashable Bool where
-     hashIO32 = hashOne32
-@@ -224,7 +223,7 @@ instance Hashable Word64 where
- -- | A fast unchecked shift.  Nasty, but otherwise GHC 6.8.2 does a
- -- test and branch on every shift.
- div4 :: CSize -> CSize
--div4 k = fromIntegral ((fromIntegral k :: HTYPE_SIZE_T) `shiftR` 2)
-+div4 k = fromIntegral ((fromIntegral k :: HTYPE_SIZE_T) `unsafeShiftR` 2)
- 
- alignedHash :: Ptr a -> CSize -> Word32 -> IO Word32
- alignedHash ptr bytes salt
-diff --git a/Data/BloomFilter/Mutable.hs b/Data/BloomFilter/Mutable.hs
-index edff1fc..0bb5cc9 100644
---- a/Data/BloomFilter/Mutable.hs
-+++ b/Data/BloomFilter/Mutable.hs
-@@ -65,9 +65,9 @@ module Data.BloomFilter.Mutable
- import Control.Monad (liftM, forM_)
- import Control.Monad.ST (ST)
- import Data.Array.Base (unsafeRead, unsafeWrite)
--import Data.Bits ((.&.), (.|.))
-+import Data.Bits ((.&.), (.|.), unsafeShiftL, unsafeShiftR)
- import Data.BloomFilter.Array (newArray)
--import Data.BloomFilter.Util (FastShift(..), (:*)(..), nextPowerOfTwo)
-+import Data.BloomFilter.Util ((:*)(..), nextPowerOfTwo)
- import Data.Word (Word32)
- import Data.BloomFilter.Mutable.Internal
- 
-@@ -86,9 +86,9 @@ new hash numBits = MB hash shft msk `liftM` newArray numElems numBytes
-                 | numBits > maxHash = maxHash
-                 | isPowerOfTwo numBits = numBits
-                 | otherwise = nextPowerOfTwo numBits
--        numElems = max 2 (twoBits `shiftR` logBitsInHash)
--        numBytes = numElems `shiftL` logBytesInHash
--        trueBits = numElems `shiftL` logBitsInHash
-+        numElems = max 2 (twoBits `unsafeShiftR` logBitsInHash)
-+        numBytes = numElems `unsafeShiftL` logBytesInHash
-+        trueBits = numElems `unsafeShiftL` logBitsInHash
-         shft     = logPower2 trueBits
-         msk      = trueBits - 1
-         isPowerOfTwo n = n .&. (n - 1) == 0
-@@ -109,7 +109,7 @@ logBytesInHash = 2 -- logPower2 (sizeOf (undefined :: Hash))
- -- | Given a filter's mask and a hash value, compute an offset into
- -- a word array and a bit offset within that word.
- hashIdx :: Int -> Word32 -> (Int :* Int)
--hashIdx msk x = (y `shiftR` logBitsInHash) :* (y .&. hashMask)
-+hashIdx msk x = (y `unsafeShiftR` logBitsInHash) :* (y .&. hashMask)
-   where hashMask = 31 -- bitsInHash - 1
-         y = fromIntegral x .&. msk
- 
-@@ -125,7 +125,7 @@ insert mb elt = do
-   let mu = bitArray mb
-   forM_ (hashesM mb elt) $ \(word :* bit) -> do
-       old <- unsafeRead mu word
--      unsafeWrite mu word (old .|. (1 `shiftL` bit))
-+      unsafeWrite mu word (old .|. (1 `unsafeShiftL` bit))
- 
- -- | Query a mutable Bloom filter for membership.  If the value is
- -- present, return @True@.  If the value is not present, there is
-@@ -135,7 +135,7 @@ elem elt mb = loop (hashesM mb elt)
-   where mu = bitArray mb
-         loop ((word :* bit):wbs) = do
-           i <- unsafeRead mu word
--          if i .&. (1 `shiftL` bit) == 0
-+          if i .&. (1 `unsafeShiftL` bit) == 0
-             then return False
-             else loop wbs
-         loop _ = return True
-@@ -145,7 +145,7 @@ elem elt mb = loop (hashesM mb elt)
- 
- -- | Return the size of a mutable Bloom filter, in bits.
- length :: MBloom s a -> Int
--length = shiftL 1 . shift
-+length = unsafeShiftL 1 . shift
- 
- 
- -- | Slow, crummy way of computing the integer log of an integer known
-@@ -153,7 +153,7 @@ length = shiftL 1 . shift
- logPower2 :: Int -> Int
- logPower2 k = go 0 k
-     where go j 1 = j
--          go j n = go (j+1) (n `shiftR` 1)
-+          go j n = go (j+1) (n `unsafeShiftR` 1)
- 
- -- $overview
- --
-diff --git a/Data/BloomFilter/Util.hs b/Data/BloomFilter/Util.hs
-index 7f695dc..6ade6e5 100644
---- a/Data/BloomFilter/Util.hs
-+++ b/Data/BloomFilter/Util.hs
-@@ -2,15 +2,11 @@
- 
- module Data.BloomFilter.Util
-     (
--      FastShift(..)
--    , nextPowerOfTwo
-+      nextPowerOfTwo
-     , (:*)(..)
-     ) where
- 
--import Data.Bits ((.|.))
--import qualified Data.Bits as Bits
--import GHC.Base
--import GHC.Word
-+import Data.Bits ((.|.), unsafeShiftR)
- 
- -- | A strict pair type.
- data a :* b = !a :* !b
-@@ -22,46 +18,11 @@ nextPowerOfTwo :: Int -> Int
- {-# INLINE nextPowerOfTwo #-}
- nextPowerOfTwo n =
-     let a = n - 1
--        b = a .|. (a `shiftR` 1)
--        c = b .|. (b `shiftR` 2)
--        d = c .|. (c `shiftR` 4)
--        e = d .|. (d `shiftR` 8)
--        f = e .|. (e `shiftR` 16)
--        g = f .|. (f `shiftR` 32)  -- in case we're on a 64-bit host
-+        b = a .|. (a `unsafeShiftR` 1)
-+        c = b .|. (b `unsafeShiftR` 2)
-+        d = c .|. (c `unsafeShiftR` 4)
-+        e = d .|. (d `unsafeShiftR` 8)
-+        f = e .|. (e `unsafeShiftR` 16)
-+        g = f .|. (f `unsafeShiftR` 32)  -- in case we're on a 64-bit host
-         !h = g + 1
-     in h
--
---- | This is a workaround for poor optimisation in GHC 6.8.2.  It
---- fails to notice constant-width shifts, and adds a test and branch
---- to every shift.  This imposes about a 10% performance hit.
--class FastShift a where
--    shiftL :: a -> Int -> a
--    shiftR :: a -> Int -> a
--
--instance FastShift Word32 where
--    {-# INLINE shiftL #-}
--    shiftL (W32# x#) (I# i#) = W32# (x# `uncheckedShiftL#` i#)
--
--    {-# INLINE shiftR #-}
--    shiftR (W32# x#) (I# i#) = W32# (x# `uncheckedShiftRL#` i#)
--
--instance FastShift Word64 where
--    {-# INLINE shiftL #-}
--    shiftL (W64# x#) (I# i#) = W64# (x# `uncheckedShiftL64#` i#)
--
--    {-# INLINE shiftR #-}
--    shiftR (W64# x#) (I# i#) = W64# (x# `uncheckedShiftRL64#` i#)
--
--instance FastShift Int where
--    {-# INLINE shiftL #-}
--    shiftL (I# x#) (I# i#) = I# (x# `iShiftL#` i#)
--
--    {-# INLINE shiftR #-}
--    shiftR (I# x#) (I# i#) = I# (x# `iShiftRA#` i#)
--
--instance FastShift Integer where
--    {-# INLINE shiftL #-}
--    shiftL = Bits.shiftL
--
--    {-# INLINE shiftR #-}
--    shiftR = Bits.shiftR
-diff --git a/bloomfilter.cabal b/bloomfilter.cabal
-index 821a5d7..c621f7f 100644
---- a/bloomfilter.cabal
-+++ b/bloomfilter.cabal
-@@ -18,7 +18,7 @@ extra-source-files: README.markdown cbits/lookup3.c cbits/lookup3.h
- library
-   build-depends:
-     array,
--    base       >= 4.4 && < 5,
-+    base       >= 4.5 && < 5,
-     bytestring >= 0.9,
-     deepseq
-   exposed-modules:  Data.BloomFilter
diff --git a/gnu/packages/patches/ghc-memory-fix-32bit.patch b/gnu/packages/patches/ghc-memory-fix-32bit.patch
new file mode 100644
index 0000000000..cb81b42521
--- /dev/null
+++ b/gnu/packages/patches/ghc-memory-fix-32bit.patch
@@ -0,0 +1,40 @@
+https://github.com/vincenthz/hs-memory/commit/2738929ce15b4c8704bbbac24a08539b5d4bf30e.patch
+https://github.com/vincenthz/hs-memory/pull/99
+Adjusted so the '904' becomes '902'
+
+From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001
+From: sternenseemann <sternenseemann@systemli.org>
+Date: Mon, 14 Aug 2023 10:51:30 +0200
+Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4
+
+Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on
+i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use
+the ready made solution.
+
+Closes #98, as it should be the better solution.
+---
+ Data/Memory/Internal/CompatPrim64.hs | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs
+index b9eef8a..a134c88 100644
+--- a/Data/Memory/Internal/CompatPrim64.hs
++++ b/Data/Memory/Internal/CompatPrim64.hs
+@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64#
+ w64# w _ _ = w
+ 
+ #elif WORD_SIZE_IN_BITS == 32
++#if __GLASGOW_HASKELL__ < 902
+ import GHC.IntWord64
+ import GHC.Prim (Word#)
+ 
+@@ -158,6 +159,9 @@ timesWord64# a b =
+     let !ai = word64ToInt64# a
+         !bi = word64ToInt64# b
+      in int64ToWord64# (timesInt64# ai bi)
++#else
++import GHC.Prim
++#endif
+ 
+ w64# :: Word# -> Word# -> Word# -> Word64#
+ w64# _ hw lw =
diff --git a/gnu/packages/patches/ghc-persistent-fix-32bit.patch b/gnu/packages/patches/ghc-persistent-fix-32bit.patch
new file mode 100644
index 0000000000..d0aace2445
--- /dev/null
+++ b/gnu/packages/patches/ghc-persistent-fix-32bit.patch
@@ -0,0 +1,25 @@
+https://sources.debian.org/data/main/h/haskell-persistent/2.13.3.5-2/debian/patches/fix-tests-32-bit
+Inspired by: https://github.com/yesodweb/persistent/pull/1429
+
+--- a/test/Database/Persist/THSpec.hs
++++ b/test/Database/Persist/THSpec.hs
+@@ -25,6 +25,7 @@ module Database.Persist.THSpec where
+ 
+ import Control.Applicative (Const(..))
+ import Data.Aeson (decode, encode)
++import Data.Bits (bitSizeMaybe)
+ import Data.ByteString.Lazy.Char8 ()
+ import Data.Coerce
+ import Data.Functor.Identity (Identity(..))
+@@ -237,7 +238,10 @@ spec = describe "THSpec" $ do
+         it "should have usual haskell name" $ do
+             fieldHaskell `shouldBe` FieldNameHS "Id"
+         it "should have correct underlying sql type" $ do
+-            fieldSqlType `shouldBe` SqlInt64
++            fieldSqlType `shouldBe`
++                if bitSizeMaybe (0 :: Int) <= Just 32
++                    then SqlInt32
++                    else SqlInt64
+         it "should have correct haskell type" $ do
+             fieldType `shouldBe` FTTypeCon Nothing "Int"
+ 
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 12785c811f..7ec4526492 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -406,7 +406,10 @@ system, and the core design of Django is reused in Grantlee.")
            libxfixes
            libxi
            libxinerama
-           libxkbcommon
+           ;; Use libxkbcommon-1.5 as 1.6.0 removed keysyms referenced in the
+           ;; qtbase source.
+           ;; TODO: Check if libxkbcommon can be used on next update.
+           libxkbcommon-1.5
            libxml2
            libxrandr
            libxrender
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index a4ee654097..3a4aafcaa7 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2023 Evgeny Pisemsky <evgeny@pisemsky.com>
+;;; Copyright © 2023 dan <i@dan.games>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages vulkan)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
@@ -116,7 +118,7 @@ joystick, and graphics hardware.")
   (package
     (inherit sdl)
     (name "sdl2")
-    (version "2.26.2")
+    (version "2.28.5")
     (source (origin
               (method url-fetch)
               (uri
@@ -124,7 +126,7 @@ joystick, and graphics hardware.")
                               version ".tar.gz"))
               (sha256
                (base32
-                "1q4r1camsr17mnpv00d6h3qy93b481rp68r6fbxbszq3vv1rplwm"))))
+                "1r36cspzv6h8abiqbbkrgm17g975p9wiziir2xabj3721dyv6b1k"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
@@ -133,11 +135,13 @@ joystick, and graphics hardware.")
                   #$flags))
        ((#:make-flags flags ''())
         #~(cons*
-           ;; SDL dlopens libudev, so make sure it is in rpath. This overrides
-           ;; the LDFLAG set in sdl’s configure-flags, which isn’t necessary
-           ;; as sdl2 includes Mesa by default.
+           ;; SDL dlopens libudev and libvulkan, so make sure they are in
+           ;; rpath. This overrides the LDFLAG set in sdl’s configure-flags,
+           ;; which isn’t necessary as sdl2 includes Mesa by default.
            (string-append "LDFLAGS=-Wl,-rpath,"
-                          #$(this-package-input "eudev") "/lib")
+                          #$(this-package-input "eudev") "/lib"
+                          ",-rpath,"
+                          #$(this-package-input "vulkan-loader") "/lib")
            #$flags))))
     (inputs
      ;; SDL2 needs to be built with ibus support otherwise some systems
@@ -151,6 +155,7 @@ joystick, and graphics hardware.")
                ibus-minimal
                libxkbcommon
                libxcursor               ;enables X11 cursor support
+               vulkan-loader
                wayland
                wayland-protocols)))
     (license license:bsd-3)))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 6a0aaf7f14..75e6370c72 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -991,7 +991,7 @@ number generator")
     (name "mbedtls-apache")
     ;; XXX Check whether ‘-Wformat-signedness’ still breaks mbedtls-for-hiawatha
     ;; when updating.
-    (version "2.28.0")
+    (version "2.28.5")
     (source
      (origin
        (method git-fetch)
@@ -1000,7 +1000,7 @@ number generator")
              (commit (string-append "mbedtls-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0s37dsi29v7146fi9k4frvx5rz2snxdm6c3rwq2fvnca2r80hfjl"))))
+        (base32 "1jlkvvyigpjvv404b8vmx68f1v6g1h2zr6rd78dhc0xgqi018phs"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 389f7d1375..f06f0d6abf 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -7988,8 +7988,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 (define-public nghttp2
   (package
     (name "nghttp2")
-    (version "1.49.0")
-    (replacement nghttp2-1.57)
+    (version "1.58.0")
     (source
      (origin
        (method url-fetch)
@@ -7998,7 +7997,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
                            "nghttp2-" version ".tar.xz"))
        (sha256
         (base32
-         "0vm692c7q2wc4xxz8c41nr8jps2fkwf51xp8fb233cghpf9d9kxh"))))
+         "1q4ps8acr7nyia7mf2z11m0yh3fn1imhyv855j3xjbx91l2a6s2a"))))
     (build-system gnu-build-system)
     (outputs (list "out"
                    "lib"))              ; only libnghttp2
@@ -8100,19 +8099,6 @@ compressed JSON header blocks.
                    (("print \\(ver >= '3\\.8'\\)")
                     "print (tuple(map(int, ver.split('.'))) >= (3,8))")))))))))))
 
-(define-public nghttp2-1.57
-  (package
-    (inherit nghttp2)
-    (version "1.57.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/nghttp2/nghttp2/"
-                                  "releases/download/v" version "/"
-                                  "nghttp2-" version ".tar.xz"))
-              (sha256
-               (base32
-                "0n598w7w8rqdqiay2fad3a11253hibakan5c4vjkpx09648v044j"))))))
-
 (define-public hpcguix-web
   (package
     (name "hpcguix-web")
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index fe70d25e3b..f9bf42b721 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -510,14 +510,14 @@ avoiding password prompts when X11 forwarding has already been setup.")
 (define-public libxkbcommon
   (package
     (name "libxkbcommon")
-    (version "1.4.1")
+    (version "1.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0fbb2dyjvf71p42y2jmwdcylsvj03w52f5rb23c2d00rwahhfg4l"))))
+                "0awwz5pg9x5bj0d7dpg4a7bd4gl6k55mlpxwb12534fkrpn19p0f"))))
     (build-system meson-build-system)
     (inputs
      (list libx11
@@ -554,6 +554,19 @@ X11 (yet).")
                                 "See 'COPYING' in the distribution."))
     (properties '((cpe-name . "xkbcommon")))))
 
+(define-public libxkbcommon-1.5
+  (package
+    (inherit libxkbcommon)
+    (version "1.5.0")
+    (source (origin
+              (inherit (package-source libxkbcommon))
+              (method url-fetch)
+              (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "05z08rpa464x8myjxddhix7jp9jcmakd7xrybx4hz8dwpg2123sn"))))))
+
 (define-public libfakekey
   (package
     (name "libfakekey")
@@ -688,7 +701,7 @@ following the mouse.")
 (define-public pixman
   (package
     (name "pixman")
-    (version "0.40.0")
+    (version "0.42.2")
     (source
      (origin
        (method url-fetch)
@@ -697,7 +710,7 @@ following the mouse.")
          "https://www.cairographics.org/releases/pixman-"
          version ".tar.gz"))
        (sha256
-        (base32 "1z13n96m7x91j25qq9wlkxsbq04wfwjhw66ir17frna06zn0s83d"))
+        (base32 "0pk298iqxqr64vk3z6nhjwr6vjg1971zfrjkqy5r9zd2mppq057a"))
        (patches
         (search-patches
          "pixman-CVE-2016-5296.patch"))))
@@ -722,7 +735,7 @@ rasterisation.")
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.114")
+    (version "2.4.117")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -730,7 +743,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "09nhk3jx3qzggl5vyii3yh4zm0npjqsbxhzvxrg2xla77a2cyj9h"))))
+                "0ar4c4ikcbm1s4sg09ld406izq5s1yk7b2n0mmvql77bwdlqv252"))))
     (build-system meson-build-system)
     (arguments
      (list #:configure-flags
@@ -744,6 +757,16 @@ rasterisation.")
              (_ ''()))
            #:phases
            #~(modify-phases %standard-phases
+               ;; A typo in a previous upstream commit disabled building
+               ;; libdrm_intel by default on supported platforms.  This was
+               ;; fixed by the following change in upstream commit
+               ;; 8a933c778a0eb36526bf3fc8a289e25add9ff8b0.
+               ;; TODO: Remove on next update of libdrm.
+               (add-after 'unpack 'build-intel-by-default
+                 (lambda _
+                   (substitute* "meson.build"
+                     (("system\\(\\)\\.startswith")
+                      "cpu_family().startswith"))))
                (replace 'check
                  (lambda* (#:key tests? #:allow-other-keys)
                    (when tests?
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index f65ffa7476..8f359c3e2f 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1432,18 +1432,17 @@ treat it as part of their software base when porting.")
 (define-public libxpm
   (package
     (name "libxpm")
-    (version "3.5.13")
-    (replacement libxpm/fixed)
+    (version "3.5.17")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/lib/libXpm-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "09dc6nwlb2122h02vl64k9x56mxnyqz2gwpga0abfv4bb1bxmlcw"))))
+           "0hvf49qy55gwldpwpw7ihcmn5i2iinpjh2rbha63hzcy060izcv4"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -1457,21 +1456,6 @@ treat it as part of their software base when porting.")
     (description "XPM (X Pixmap) image file format library.")
     (license license:x11)))
 
-(define-public libxpm/fixed
-  (package
-    (inherit libxpm)
-    (version "3.5.17")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/lib/libXpm-"
-               version
-               ".tar.xz"))
-        (sha256
-          (base32
-            "0hvf49qy55gwldpwpw7ihcmn5i2iinpjh2rbha63hzcy060izcv4"))))))
-
 (define-public libxres
   (package
     (name "libxres")
@@ -5332,16 +5316,15 @@ Wayland.")
 (define-public libx11
   (package
     (name "libx11")
-    (version "1.8.1")
-    (replacement libx11-fixed)          ;security fixes
+    (version "1.8.7")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://xorg.freedesktop.org/archive/"
-                           "/individual/lib/libX11-" version ".tar.xz"))
+       (uri (string-append "mirror://xorg/individual/lib/libX11-"
+                           version ".tar.xz"))
        (sha256
         (base32
-         "1xyry8i7zqmlkvpbyyqwi18rrdw6ycczlvfp63rh2570pfhimi0v"))))
+         "1vlrgrdibp4lr84wgmsdy1ihzaai8bvvqc68npi1m19wir36gwh5"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                  ;8 MiB of man pages + XML
@@ -5363,19 +5346,6 @@ Wayland.")
     (description "Xorg Core X11 protocol client library.")
     (license license:x11)))
 
-(define-public libx11-fixed
-  (package
-    (inherit libx11)
-    (version "1.8.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://xorg/individual/lib/libX11-"
-                           version ".tar.xz"))
-       (sha256
-        (base32
-         "1vlrgrdibp4lr84wgmsdy1ihzaai8bvvqc68npi1m19wir36gwh5"))))))
-
 ;; packages of height 5 in the propagated-inputs tree
 
 (define-public libxcursor