summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/avahi.scm2
-rw-r--r--gnu/packages/backup.scm2
-rw-r--r--gnu/packages/base.scm20
-rw-r--r--gnu/packages/bioinformatics.scm3
-rw-r--r--gnu/packages/calendar.scm12
-rw-r--r--gnu/packages/certs.scm4
-rw-r--r--gnu/packages/check.scm26
-rw-r--r--gnu/packages/compression.scm35
-rw-r--r--gnu/packages/cran.scm3
-rw-r--r--gnu/packages/databases.scm118
-rw-r--r--gnu/packages/electronics.scm2
-rw-r--r--gnu/packages/elf.scm5
-rw-r--r--gnu/packages/enlightenment.scm4
-rw-r--r--gnu/packages/fcitx.scm5
-rw-r--r--gnu/packages/freedesktop.scm24
-rw-r--r--gnu/packages/gdb.scm23
-rw-r--r--gnu/packages/gl.scm26
-rw-r--r--gnu/packages/gnome.scm22
-rw-r--r--gnu/packages/gnuzilla.scm2
-rw-r--r--gnu/packages/golang.scm6
-rw-r--r--gnu/packages/groovy.scm1404
-rw-r--r--gnu/packages/gstreamer.scm180
-rw-r--r--gnu/packages/gtk.scm6
-rw-r--r--gnu/packages/haskell-check.scm5
-rw-r--r--gnu/packages/image.scm6
-rw-r--r--gnu/packages/imagemagick.scm4
-rw-r--r--gnu/packages/java.scm418
-rw-r--r--gnu/packages/kde.scm2
-rw-r--r--gnu/packages/kodi.scm2
-rw-r--r--gnu/packages/linux.scm49
-rw-r--r--gnu/packages/lisp-xyz.scm5619
-rw-r--r--gnu/packages/lisp.scm58
-rw-r--r--gnu/packages/messaging.scm2
-rw-r--r--gnu/packages/networking.scm2
-rw-r--r--gnu/packages/nss.scm154
-rw-r--r--gnu/packages/ntp.scm4
-rw-r--r--gnu/packages/onc-rpc.scm13
-rw-r--r--gnu/packages/patches/dconf-meson-0.52.patch19
-rw-r--r--gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch1831
-rw-r--r--gnu/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch42
-rw-r--r--gnu/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch33
-rw-r--r--gnu/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch45
-rw-r--r--gnu/packages/patches/jamvm-1.5.1-aarch64-support.patch572
-rw-r--r--gnu/packages/patches/jamvm-1.5.1-armv7-support.patch (renamed from gnu/packages/patches/jamvm-arm.patch)0
-rw-r--r--gnu/packages/patches/jamvm-2.0.0-aarch64-support.patch645
-rw-r--r--gnu/packages/patches/jamvm-2.0.0-opcode-guard.patch35
-rw-r--r--gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch87
-rw-r--r--gnu/packages/patches/libcyaml-libyaml-compat.patch51
-rw-r--r--gnu/packages/patches/libdrm-realpath-virtio.patch42
-rw-r--r--gnu/packages/patches/libsndfile-CVE-2017-12562.patch97
-rw-r--r--gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch77
-rw-r--r--gnu/packages/patches/libsndfile-CVE-2017-8362.patch61
-rw-r--r--gnu/packages/patches/libsndfile-armhf-type-checks.patch42
-rw-r--r--gnu/packages/patches/mariadb-client-test-32bit.patch37
-rw-r--r--gnu/packages/patches/nss-pkgconfig.patch225
-rw-r--r--gnu/packages/patches/python-gst-fix-build-with-python-3.8.patch36
-rw-r--r--gnu/packages/patches/sbcl-graph-asdf-definitions.patch70
-rw-r--r--gnu/packages/pciutils.scm4
-rw-r--r--gnu/packages/popt.scm16
-rw-r--r--gnu/packages/pulseaudio.scm64
-rw-r--r--gnu/packages/python-crypto.scm29
-rw-r--r--gnu/packages/python-web.scm13
-rw-r--r--gnu/packages/python-xyz.scm35
-rw-r--r--gnu/packages/qt.scm34
-rw-r--r--gnu/packages/ruby.scm3
-rw-r--r--gnu/packages/rust.scm27
-rw-r--r--gnu/packages/security-token.scm4
-rw-r--r--gnu/packages/sphinx.scm51
-rw-r--r--gnu/packages/sssd.scm2
-rw-r--r--gnu/packages/valgrind.scm23
-rw-r--r--gnu/packages/video.scm8
-rw-r--r--gnu/packages/vulkan.scm12
-rw-r--r--gnu/packages/web-browsers.scm77
-rw-r--r--gnu/packages/web.scm16
-rw-r--r--gnu/packages/wget.scm7
-rw-r--r--gnu/packages/wm.scm29
-rw-r--r--gnu/packages/xdisorg.scm10
-rw-r--r--gnu/packages/xiph.scm4
-rw-r--r--gnu/packages/xorg.scm50
79 files changed, 6016 insertions, 6821 deletions
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
index 602f9d7997..b2aeeadf47 100644
--- a/gnu/packages/avahi.scm
+++ b/gnu/packages/avahi.scm
@@ -74,7 +74,7 @@
        ("expat" ,expat)
        ("gdbm" ,gdbm)
        ("glib" ,glib)
-       ("libcap" ,libcap)            ;to enable chroot support in avahi-daemon
+       ("libcap" ,libcap-2.31)       ;to enable chroot support in avahi-daemon
        ("libdaemon" ,libdaemon)
        ("libevent" ,libevent)))
     (native-inputs
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 2f8a0da0cf..f550f5724f 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -1103,7 +1103,7 @@ interactive mode.")
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
-       ("check" ,check)
+       ("check" ,check-0.14)
        ("pkg-config" ,pkg-config)))
     (home-page "https://burp.grke.org")
     (synopsis "Differential backup and restore")
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index c83775d8ee..47fca7c494 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -324,7 +324,7 @@ used to apply commands with arbitrarily long arguments.")
              ,@(if (and (not (%current-target-system))
                         (member (%current-system)
                                 (package-supported-systems libcap)))
-             `(("libcap" ,libcap))  ;capability support in 'ls', etc.
+             `(("libcap" ,libcap-2.31))        ;capability support in 'ls', etc.
              '())))
    (native-inputs
     ;; Perl is needed to run tests in native builds, and to run the bundled
@@ -1229,7 +1229,7 @@ command.")
 (define-public tzdata
   (package
     (name "tzdata")
-    (version "2020a")
+    (version "2020d")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1237,10 +1237,10 @@ command.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "18lrp0zh8m931jjlrv8lvjas4ka5dfkzdbwnbw5lwd2dlbn62wal"))))
+               "1wxskk9mh1x2073n99qna2mq58mgi648mbq5dxlqfcrnvrbkk0cd"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f
+     `(#:tests? #f
        #:make-flags (let ((out (assoc-ref %outputs "out"))
                           (tmp (getenv "TMPDIR")))
                       (list (string-append "TOPDIR=" out)
@@ -1252,6 +1252,16 @@ command.")
                             (string-append "LIBDIR=" tmp "/lib")
                             (string-append "MANDIR=" tmp "/man")
 
+                            ;; XXX: tzdata 2020b changed the on-disk format
+                            ;; of the time zone files from 'fat' to 'slim'.
+                            ;; Many packages (particularly evolution-data-server)
+                            ;; can not yet handle the latter, so we stick with
+                            ;; 'fat' for now.
+                            ,@(if (version>=? (package-version this-package)
+                                              "2020b")
+                                  '("CPPFLAGS=-DZIC_BLOAT_DEFAULT='\"fat\"'")
+                                  '())
+
                             "AWK=awk"
                             "CC=gcc"))
        #:modules ((guix build utils)
@@ -1287,7 +1297,7 @@ command.")
                                 version ".tar.gz"))
                           (sha256
                            (base32
-                            "0sfnlqw1p93r7klny69rwr94fh22mz632h52phgzfgg01q9gfakx"))))))
+                            "1mgsckixmmk9qxzsflfxnp3999qi3ls72bgksclk01g852x51w3c"))))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 4c49b00252..e189dd7b00 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -11155,7 +11155,6 @@ models.  TADbit is complemented by TADkit for visualizing 3D models.")
        ("tcsh" ,tcsh)
        ("perl" ,perl)
        ("libpng" ,libpng)
-       ("mariadb" ,mariadb "lib")
        ("mariadb-dev" ,mariadb "dev")
        ("openssl" ,openssl-1.0)))
     (home-page "https://genome.cse.ucsc.edu/index.html")
@@ -15552,7 +15551,7 @@ than is possible with plain-text methods alone.")
     (propagated-inputs
      `(("libxml2" ,libxml2)))
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("swig" ,swig)))
     (home-page "http://sbml.org/Software/libSBML")
     (synopsis "Process SBML files and data streams")
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 607d2d8328..93303d632f 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -38,6 +38,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages dav)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -125,12 +126,20 @@ the <tz.h> library for handling time zones and leap seconds.")
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; test suite appears broken
+       #:parallel-build? #f             ;may cause GIR generation failure
        #:configure-flags '("-DSHARED_ONLY=true"
                            ;; required by evolution-data-server
                            "-DGOBJECT_INTROSPECTION=true"
                            "-DICAL_GLIB_VAPI=true")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-docbook-reference
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "doc/reference/libical-glib/libical-glib-docs.sgml.in"
+               (("http://www.oasis-open.org/docbook/xml/4.3/")
+                (string-append (assoc-ref inputs "docbook-xml")
+                               "/xml/dtd/docbook/")))
+             #t))
          (add-before 'configure 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              ;; TODO: libical 3.1.0 supports using TZDIR instead of a hard-coded
@@ -145,7 +154,8 @@ the <tz.h> library for handling time zones and leap seconds.")
                  (("\\\"/usr/share/lib/zoneinfo\\\"") "")))
              #t)))))
     (native-inputs
-     `(("gobject-introspection" ,gobject-introspection)
+     `(("docbook-xml" ,docbook-xml-4.3)
+       ("gobject-introspection" ,gobject-introspection)
        ("gtk-doc" ,gtk-doc)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index 7f4dca5f56..0cb20467ab 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -76,7 +76,7 @@
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.52.1")
+    (version "3.57")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -87,7 +87,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "0y4jb9095f7bbgw7d7kvzm4c3g4p5i6y68fwhb8wlkpb7b1imj5w"))))
+                "10n3pncg6k81ikjz12la147rppwqn57bkrdl9gb820w6pq0nra2m"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index cf8bd8ed91..935937e84d 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -135,7 +135,7 @@ like Jasmine or Mocha.")
 (define-public check
   (package
     (name "check")
-    (version "0.14.0")
+    (version "0.15.2")
     (source
      (origin
       (method url-fetch)
@@ -143,7 +143,7 @@ like Jasmine or Mocha.")
                           version "/check-" version ".tar.gz"))
       (sha256
        (base32
-        "02zkfiyklckmivrfvdsrlzvzphkdsgjrz3igncw05dv5pshhq3xx"))))
+        "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))))
     (build-system gnu-build-system)
     (home-page "https://libcheck.github.io/check/")
     (synopsis "Unit test framework for C")
@@ -156,7 +156,19 @@ faults or other signals.  The output from unit tests can be used within
 source code editors and IDEs.")
     (license license:lgpl2.1+)))
 
-;; Some packages require this older version.  Removed once no longer needed.
+;; Some packages require older versions.  Removed once no longer needed.
+(define-public check-0.14
+  (package
+    (inherit check)
+    (version "0.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/libcheck/check/releases"
+                                  "/download/" version "/check-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02zkfiyklckmivrfvdsrlzvzphkdsgjrz3igncw05dv5pshhq3xx"))))))
+
 (define-public check-0.12
   (package
    (inherit check)
@@ -924,13 +936,13 @@ and many external plugins.")
   (package
     (inherit (strip-python2-variant python-pytest))
     (name "python2-pytest")
-    (version "4.6.9")
+    (version "4.6.11")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pytest" version))
               (sha256
                (base32
-                "0fgkmpc31nzy97fxfrkqbzycigdwxwwmninx3qhkzp81migggs0r"))))
+                "0ls3pqr86xgif6bphsb6wrww9r2vc7p7a2naq8zcq8115wwq5yjh"))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
@@ -1562,14 +1574,14 @@ have failed since the last commit or what tests are currently failing.")))
 (define-public python-coverage
   (package
     (name "python-coverage")
-    (version "5.0.3")
+    (version "5.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "coverage" version))
        (sha256
         (base32
-         "1vrg8panqw79pswg52ygbrff3wdnxarrd9qz6c64ah0c4h2cmbvp"))))
+         "16z8i18msgs8k74n73dj9x49wzkl0vk4vq8k5pl1bsj70y7b4k53"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 083b82bf36..818624f92e 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -798,28 +798,33 @@ decompression of some loosely related file formats used by Microsoft.")
          "0lpaypmk70ag2ks3kf2dl4ac3ba40n5kc1ainkp9wfjawz76mh61"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
+    (outputs (list "out" "static"))
     (native-inputs
      `(;; For tests.
        ("python" ,python)
        ("valgrind" ,valgrind)))
     (arguments
      `(#:test-target "test"
-       #:make-flags (list "CC=gcc"
+       #:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "prefix=" (assoc-ref %outputs "out")))
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)            ;no configure script
-                  (add-before 'check 'disable-broken-test
-                    (lambda _
-                      ;; XXX: test_install.sh fails when prefix is a subdirectory.
-                      (substitute* "tests/Makefile"
-                        (("^test: (.*) test-install" _ targets)
-                         (string-append "test: " targets)))
-                      #t))
-                  (add-after 'install 'delete-static-library
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out")))
-                        (delete-file (string-append out "/lib/liblz4.a"))
-                        #t))))))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ; no configure script
+         (add-before 'check 'disable-broken-test
+           (lambda _
+             (substitute* "tests/Makefile"
+               ;; This fails when $prefix is not a single top-level directory.
+               (("^test: (.*) test-install" _ targets)
+                (string-append "test: " targets)))
+             #t))
+         (add-after 'install 'move-static-library
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (static (assoc-ref outputs "static")))
+               (mkdir-p (string-append static "/lib"))
+               (rename-file (string-append out "/lib/liblz4.a")
+                            (string-append static "/lib/liblz4.a"))
+               #t))))))
     (home-page "https://www.lz4.org")
     (synopsis "Compression algorithm focused on speed")
     (description "LZ4 is a lossless compression algorithm, providing
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 64e139c243..adb1bf421b 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -3331,8 +3331,7 @@ dimensioned arrays.")
     (properties `((upstream-name . "RMySQL")))
     (build-system r-build-system)
     (inputs
-     `(("mariadb" ,mariadb "lib")
-       ("mariadb-dev" ,mariadb "dev")
+     `(("mariadb-dev" ,mariadb "dev")
        ("zlib" ,zlib)))
     (propagated-inputs
      `(("r-dbi" ,r-dbi)))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index f7de8d1464..130726bb13 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -898,7 +898,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.1.45")
+    (version "10.5.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.com/MariaDB"
@@ -906,8 +906,7 @@ Language.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1mfs0x4c0z7d306n128dxdawk3llk25vxif5zwl20fv1z5qhz3wx"))
-              (patches (search-patches "mariadb-client-test-32bit.patch"))
+                "1i257h0zdypdfj5wkg6ck9pxlkph0jvjs92k22pjr6gnx5lxs1gz"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -925,8 +924,8 @@ Language.")
                   (for-each (lambda (file)
                               (unless (string-suffix? "CMakeLists.txt" file)
                                 (delete-file file)))
-                            (append (find-files "extra/yassl")
-                                    (find-files "pcre") (find-files "zlib")))
+                            (append (find-files "extra/wolfssl")
+                                    (find-files "zlib")))
                   #t))))
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
@@ -980,29 +979,20 @@ Language.")
          "-DINSTALL_SHAREDIR=share")
        #:phases
        (modify-phases %standard-phases
-         ,@(if (string-prefix? "arm" (%current-system))
-               ;; XXX: Because of the GCC 5 input, we need to hide GCC 7 from
-               ;; CPLUS_INCLUDE_PATH so that its headers do not shadow GCC 5.
-               '((add-after 'set-paths 'hide-default-gcc
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (let ((gcc (assoc-ref inputs "gcc")))
-                       (setenv "CPLUS_INCLUDE_PATH"
-                               (string-join
-                                (delete (string-append gcc "/include/c++")
-                                        (string-split (getenv "CPLUS_INCLUDE_PATH")
-                                                      #\:))
-                                ":"))
-                       #t))))
-               '())
-         (add-after 'unpack 'fix-pcre-detection
+         (add-after 'unpack 'adjust-output-references
            (lambda _
-             ;; The bundled PCRE in MariaDB has a patch that was upstreamed
-             ;; in version 8.34.  Unfortunately the upstream patch behaves
-             ;; slightly differently and the build system fails to detect it.
-             ;; See <https://bugs.exim.org/show_bug.cgi?id=2173>.
-             ;; XXX: Consider patching PCRE instead.
-             (substitute* "cmake/pcre.cmake"
-               ((" OR NOT PCRE_STACK_SIZE_OK") ""))
+             ;; The build system invariably prepends $CMAKE_INSTALL_PREFIX
+             ;; to other variables such as $INSTALL_INCLUDEDIR, which does
+             ;; not work when the latter uses an absolute file name.
+             (substitute* "libmariadb/mariadb_config/mariadb_config.c.in"
+               (("@CMAKE_INSTALL_PREFIX@/@INSTALL_INCLUDEDIR@")
+                "@INSTALL_INCLUDEDIR@"))
+             (substitute* "libmariadb/mariadb_config/libmariadb.pc.in"
+               (("\\$\\{prefix\\}/@INSTALL_INCLUDEDIR@")
+                "@INSTALL_INCLUDEDIR@"))
+             (substitute* "include/CMakeLists.txt"
+               (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_INCLUDEDIR\\}")
+                "${INSTALL_INCLUDEDIR}"))
              #t))
          (add-after 'unpack 'adjust-tests
            (lambda _
@@ -1010,6 +1000,7 @@ Language.")
                     '(;; These fail because root@hostname == root@localhost in
                       ;; the build environment, causing a user count mismatch.
                       ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
+                      "funcs_1.is_columns_mysql"
                       "main.join_cache"
                       "main.explain_non_select"
                       "main.stat_tables"
@@ -1018,20 +1009,7 @@ Language.")
 
                       ;; This file contains a time bomb which makes it fail after
                       ;; 2030-12-31.  See <https://bugs.gnu.org/34351> for details.
-                      "main.mysqldump"
-
-                      ;; FIXME: This test fails on i686:
-                      ;; -myisampack: Can't create/write to file (Errcode: 17 "File exists")
-                      ;; +myisampack: Can't create/write to file (Errcode: 17 "File exists)
-                      ;; When running "myisampack --join=foo/t3 foo/t1 foo/t2"
-                      ;; (all three tables must exist and be identical)
-                      ;; in a loop it produces the same error around 1/240 times.
-                      ;; montywi on #maria suggested removing the real_end check in
-                      ;; "strings/my_vsnprintf.c" on line 503, yet it still does not
-                      ;; reach the ending quote occasionally.  Disable it for now.
-                      "main.myisampack"
-                      ;; FIXME: This test fails on armhf-linux:
-                      "mroonga/storage.index_read_multiple_double"))
+                      "main.mysqldump"))
 
                    ;; This file contains a list of known-flaky tests for this
                    ;; release.  Append our own items.
@@ -1042,9 +1020,10 @@ Language.")
                          disabled-tests)
                (close-port unstable-tests)
 
-               ;; XXX: This test fails because it expects a latin1 charset and
+               ;; XXX: These fail because they expect a latin1 charset and
                ;; collation.  See <https://jira.mariadb.org/browse/MDEV-21264>.
-               (substitute* "mysql-test/r/gis_notembedded.result"
+               (substitute* '("mysql-test/main/gis_notembedded.result"
+                              "mysql-test/main/system_mysql_db.result")
                  (("latin1_swedish_ci") "utf8_general_ci")
                  (("\tlatin1") "\tutf8"))
 
@@ -1077,6 +1056,10 @@ Language.")
                            "--testcase-timeout=40"
                            "--suite-timeout=600"
                            "--parallel" (number->string (parallel-job-count))
+                           ;; Skip the replication tests: they are very I/O
+                           ;; intensive and frequently causes indeterministic
+                           ;; failures even on powerful hardware.
+                           "--skip-rpl"
                            "--skip-test-list=unstable-tests"))
                  (format #t "test suite not run~%"))
              #t))
@@ -1087,56 +1070,57 @@ Language.")
                    (dev     (assoc-ref outputs "dev"))
                    (lib     (assoc-ref outputs "lib"))
                    (openssl (assoc-ref inputs "openssl")))
-              (substitute* (string-append out "/bin/mysql_install_db")
+              (substitute* (list (string-append out "/bin/mariadb-install-db")
+                                 (string-append out "/bin/mysql_install_db"))
                 (("basedir=\"\"")
-                 (string-append "basedir=\"" out "\"")))
+                 (string-append "basedir=\"" out "\""))
+                (("\\$basedir/share/mysql")
+                 (string-append lib "/share/mysql")))
+
               ;; Remove unneeded files for testing.
               (with-directory-excursion lib
                 (for-each delete-file-recursively
-                          '("data" "mysql-test" "sql-bench"))
+                          '("mysql-test" "sql-bench"))
                 ;; And static libraries.
                 (for-each delete-file (find-files "lib" "\\.a$")))
               (with-directory-excursion out
                 (delete-file "share/man/man1/mysql-test-run.pl.1")
                 ;; Delete huge and unnecessary executables.
-                (for-each delete-file (find-files "bin" "(test|embedded)")))
+                (for-each delete-file (find-files "bin" "test$")))
               (mkdir-p (string-append dev "/share"))
               (mkdir-p (string-append dev "/bin"))
+              (rename-file (string-append lib "/bin/mariadbd")
+                           (string-append out "/bin/mariadbd"))
               (rename-file (string-append lib "/bin/mysqld")
                            (string-append out "/bin/mysqld"))
-              (rename-file (string-append lib "/share/pkgconfig")
-                           (string-append dev "/share/pkgconfig"))
+              (mkdir-p (string-append dev "/lib"))
+              (rename-file (string-append lib "/lib/pkgconfig")
+                           (string-append dev "/lib/pkgconfig"))
+              (rename-file (string-append lib "/bin/mariadb_config")
+                           (string-append dev "/bin/mariadb_config"))
               (rename-file (string-append out "/bin/mysql_config")
                            (string-append dev "/bin/mysql_config"))
 
-
-              (substitute*  (string-append out "/bin/mysql_install_db")
-                (("\\$basedir/share/mysql")
-                 (string-append lib "/share/mysql")))
-
               ;; Embed an absolute reference to OpenSSL in mysql_config
               ;; and the pkg-config file to avoid propagation.
+              ;; XXX: how to do this for mariadb_config.c.in?
               (substitute* (list (string-append dev "/bin/mysql_config")
-                                 (string-append dev "/share/pkgconfig/mariadb.pc"))
+                                 (string-append dev "/lib/pkgconfig/mariadb.pc"))
                 (("-lssl -lcrypto" all)
                  (string-append "-L" openssl "/lib " all)))
 
               #t))))))
     (native-inputs
      `(("bison" ,bison)
-       ;; XXX: On armhf, use GCC 5 to work around <https://bugs.gnu.org/37605>.
-       ,@(if (string-prefix? "armhf" (%current-system))
-             `(("gcc@5" ,gcc-5))
-             '())
        ("perl" ,perl)))
     (inputs
      `(("jemalloc" ,jemalloc)
        ("libaio" ,libaio)
        ("libxml2" ,libxml2)
        ("ncurses" ,ncurses)
-       ("openssl" ,openssl-1.0)
+       ("openssl" ,openssl)
        ("pam" ,linux-pam)
-       ("pcre" ,pcre)
+       ("pcre2" ,pcre2)
        ("xz" ,xz)
        ("zlib" ,zlib)))
     ;; The test suite is very resource intensive and can take more than three
@@ -1323,7 +1307,7 @@ organized in a hash table or B+ tree.")
 
     (native-inputs `(("bc" ,bc)
                      ("bash:include" ,bash "include")
-                     ("check" ,check)
+                     ("check" ,check-0.14)
                      ("libuuid" ,util-linux)
                      ("pkg-config" ,pkg-config)))
 
@@ -2085,7 +2069,7 @@ valid SQL query.")
 (define-public unixodbc
   (package
    (name "unixodbc")
-   (version "2.3.7")
+   (version "2.3.9")
    (source (origin
             (method url-fetch)
             (uri
@@ -2093,7 +2077,7 @@ valid SQL query.")
               "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-"
               version ".tar.gz"))
             (sha256
-             (base32 "0xry3sg497wly8f7715a7gwkn2k36bcap0mvzjw74jj53yx6kwa5"))))
+             (base32 "01xj65d02i3yjy7p9z08y9jakcs5szmz4rask868n7387nn3x0sj"))))
    (build-system gnu-build-system)
    (synopsis "Data source abstraction library")
    (description "Unixodbc is a library providing an API with which to access
@@ -3220,8 +3204,7 @@ files or Python scripts that define a list of migration steps.")
     (build-system python-build-system)
     (arguments '(#:tests? #f))          ;XXX: requires a live database
     (inputs
-     `(("mysql" ,mariadb "lib")
-       ("mysql-dev" ,mariadb "dev")))
+     `(("mysql-dev" ,mariadb "dev")))
     (home-page "https://github.com/PyMySQL/mysqlclient-python")
     (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
     (description "MySQLdb is an interface to the popular MySQL database server
@@ -3902,8 +3885,7 @@ The drivers officially supported by @code{libdbi} are:
        ("sqlite" ,sqlite)
        ("odbc" ,unixodbc)
        ("boost" ,boost)
-       ("mariadb:dev" ,mariadb "dev")
-       ("mariadb:lib" ,mariadb "lib")))
+       ("mariadb:dev" ,mariadb "dev")))
     (arguments
      `(#:tests? #f ; Tests may require running database management systems.
        #:phases
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index d21ec61039..3f9ca33ede 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -88,7 +88,7 @@ to take care of the OS-specific details when writing software that uses serial p
                                               "/share/doc/libsigrokdecode"))
              #t)))))
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("doxygen" ,doxygen)
        ("graphviz" ,graphviz)
        ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 3aabc6e927..48558d5f14 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Mark Wielaard <mark@klomp.org>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -214,7 +215,7 @@ static analysis of the ELF binaries at hand.")
 (define-public patchelf
   (package
     (name "patchelf")
-    (version "0.10")
+    (version "0.11")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -223,7 +224,7 @@ static analysis of the ELF binaries at hand.")
                    "/patchelf-" version ".tar.bz2"))
              (sha256
               (base32
-               "1wzwvnlyf853hw9zgqq5522bvf8gqadk8icgqa41a5n7593csw7n"))))
+               "16ms3ijcihb88j3x6cl8cbvhia72afmfcphczb9cfwr0gbc22chx"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 02fd45017a..ed15cd28d2 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -79,7 +79,7 @@
                 "0svybbrvpf6q955y6fclxh3md64z0dgmh0x54x2j60503hhs071m"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
@@ -470,7 +470,7 @@ Libraries stack (eo, evas, ecore, edje, emotion, ethumb and elementary).")
            (lambda _ (setenv "HOME" "/tmp") #t)))
        #:tests? #f)) ; tests require running dbus service
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("gettext" ,gettext-minimal)
        ("pkg-config" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/fcitx.scm b/gnu/packages/fcitx.scm
index 279a9c8186..d52edf1750 100644
--- a/gnu/packages/fcitx.scm
+++ b/gnu/packages/fcitx.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,14 +98,14 @@ by the different predictive algorithms.")
 (define-public fcitx
   (package
     (name "fcitx")
-    (version "4.2.9.7")
+    (version "4.2.9.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.fcitx-im.org/fcitx/"
                                   "fcitx-" version "_dict.tar.xz"))
               (sha256
                (base32
-                "13vg7yzfq0vj2r8zdf9ly3n243nwwggkhd5qv3z6yqdyj0m3ncyg"))))
+                "1iik80l7g8yk9iwsls6nl9whwgm0sj8i7s6s0bz4c5anl35iaddw"))))
     (build-system cmake-build-system)
     (outputs '("out" "gtk2" "gtk3"))
     (arguments
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 6caff14cf2..7b2a8d8bb3 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -373,14 +373,14 @@ freedesktop.org project.")
   ;; Updating this will rebuild over 700 packages through libinput-minimal.
   (package
     (name "libinput")
-    (version "1.15.5")
+    (version "1.16.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://freedesktop.org/software/libinput/"
                                   "libinput-" version ".tar.xz"))
               (sha256
                (base32
-                "15ww4jl3lcxyi8m8idg8canklbqv729gnwpkz7r98c1w8a7zq3m9"))))
+                "1ab0q4iya07kvjd2g1vzamj9h57qldi15h3b8324vg3szr88qggw"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=false")
@@ -459,7 +459,7 @@ the freedesktop.org XDG Base Directory specification.")
 (define-public elogind
   (package
     (name "elogind")
-    (version "243.4")
+    (version "243.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -468,7 +468,7 @@ the freedesktop.org XDG Base Directory specification.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "141frvgyk4fafcxsix94qc0d9ffrwksld8lqq4hq6xsgjlvv0mrs"))))
+                "1ccj3cbs9nsfg497wg195in1a7b9csm1jdm7z6q7vvx1ynpjxlxz"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -507,14 +507,6 @@ the freedesktop.org XDG Base Directory specification.")
                (("join_paths\\(bindir, 'pkttyagent'\\)")
                 "'\"/run/current-system/profile/bin/pkttyagent\"'"))
              #t))
-         (add-after 'unpack 'adjust-dbus-socket-address
-           (lambda _
-             ;; Look for the D-Bus socket in /var/run instead of /run.  Remove
-             ;; this for versions > 243.4.
-             (substitute* "src/libelogind/sd-bus/bus-internal.h"
-               (("=/run/dbus/system_bus_socket")
-                "=/var/run/dbus/system_bus_socket"))
-             #t))
          (add-after 'unpack 'adjust-tests
            (lambda _
              ;; This test tries to copy some bytes from /usr/lib/os-release,
@@ -825,14 +817,14 @@ Python.")
 (define-public wayland
   (package
     (name "wayland")
-    (version "1.17.0")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://wayland.freedesktop.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "194ibzwpdcn6fvk4xngr4bf5axpciwg2bj82fdvz88kfmjw13akj"))))
+                "0k995rn96xkplrapz5k648j651wc43kq817xk1x8280h16gsfxa6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-tests? #f))
@@ -861,7 +853,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
 (define-public wayland-protocols
   (package
     (name "wayland-protocols")
-    (version "1.18")
+    (version "1.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -869,7 +861,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                     "wayland-protocols-" version ".tar.xz"))
               (sha256
                (base32
-                "1cvl93h83ymbfhb567jv5gzyq08181w7c46rsw4xqqqpcvkvfwrx"))))
+                "1rsdgvkkvxs3cjhpl6agvbkm53vm7k8rg127j9y2vn33m2hvg0lp"))))
     (build-system gnu-build-system)
     (inputs
      `(("wayland" ,wayland)))
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index c01c65ce20..79fc49f5ff 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -40,17 +40,18 @@
   #:use-module (guix build-system gnu)
   #:use-module (srfi srfi-1))
 
-(define-public gdb-9.1
+(define-public gdb-9.2
   (package
     (name "gdb")
-    (version "9.1")
+    (version "9.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/gdb/gdb-"
                                  version ".tar.xz"))
+             (patches (search-patches "gdb-hurd.patch"))
              (sha256
               (base32
-               "0dqp1p7w836iwijg1zb4a784n0j4pyjiw5v6h8fg5lpx6b40x7k9"))))
+               "0mf5fn8v937qwnal4ykn3ji1y2sxk0fa1yfqi679hxmpg6pdf31n"))))
 
     (build-system gnu-build-system)
     (arguments
@@ -70,20 +71,14 @@
                      #t))
                   (add-after
                    'install 'remove-libs-already-in-binutils
-                   (lambda* (#:key inputs outputs
-                             ;; TODO: Inline the native-inputs addition and
-                             ;; below usage in the next rebuild cycle.
-                             ,@(if (%current-target-system)
-                                   '(native-inputs)
-                                   '())
+                   (lambda* (#:key native-inputs inputs outputs
                              #:allow-other-keys)
                      ;; Like Binutils, GDB installs libbfd, libopcodes, etc.
                      ;; However, this leads to collisions when both are
                      ;; installed, and really is none of its business,
                      ;; conceptually.  So remove them.
-                     (let* ((binutils ,@(if (%current-target-system)
-                                            '((assoc-ref native-inputs "binutils"))
-                                            '((assoc-ref inputs "binutils"))))
+                     (let* ((binutils (or (assoc-ref inputs "binutils")
+                                          (assoc-ref native-inputs "binutils")))
                             (out      (assoc-ref outputs "out"))
                             (files1   (with-directory-excursion binutils
                                         (append (find-files "lib")
@@ -137,7 +132,7 @@ written in C, C++, Ada, Objective-C, Pascal and more.")
 ;; <https://bugs.gnu.org/37810>.
 (define-public gdb-8.2
   (package
-    (inherit gdb-9.1)
+    (inherit gdb-9.2)
     (version "8.2.1")
     (source (origin
               (method url-fetch)
@@ -150,7 +145,7 @@ written in C, C++, Ada, Objective-C, Pascal and more.")
 (define-public gdb
   ;; This is the fixed version that packages depend on.  Update it rarely
   ;; enough to avoid massive rebuilds.
-  gdb-9.1)
+  gdb-9.2)
 
 (define-public gdb-10
   (package
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index fb33bd7f6d..a8b142cacb 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -233,14 +233,7 @@ also known as DXTn or DXTC) for Mesa.")
 (define-public mesa
   (package
     (name "mesa")
-    (version "20.0.7")
-
-    ;; Mesa 20.0.5 through 20.0.7 has problems with some graphic drivers, so
-    ;; we need this newer version.
-    ;; https://gitlab.freedesktop.org/mesa/mesa/-/issues/2882
-    ;; https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4861
-    (replacement mesa-20.0.8)
-
+    (version "20.1.9")
     (source
       (origin
         (method url-fetch)
@@ -252,7 +245,7 @@ also known as DXTn or DXTC) for Mesa.")
                                   version "/mesa-" version ".tar.xz")))
         (sha256
          (base32
-          "0y517qpdg6v6dsdgzb365p03m30511sbyh8pq0mcvhvjwy7javpy"))
+          "10kk8a8k7f4ip8yaiqdyrx162nbw8pw4h3b4hs4ha8mpd43wlldj"))
         (patches
          (search-patches "mesa-skip-disk-cache-test.patch"))))
     (build-system meson-build-system)
@@ -446,21 +439,6 @@ device drivers allows Mesa to be used in many different environments ranging
 from software emulation to complete hardware acceleration for modern GPUs.")
     (license license:x11)))
 
-;; Replacement package to fix <https://gitlab.freedesktop.org/mesa/mesa/-/issues/2863>.
-(define mesa-20.0.8
-  (package
-    (inherit mesa)
-    (version "20.0.8")
-    (source (origin
-              (inherit (package-source mesa))
-              (uri (list (string-append "https://mesa.freedesktop.org/archive/"
-                                        "mesa-" version ".tar.xz")
-                         (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
-                                        "mesa-" version ".tar.xz")))
-              (sha256
-               (base32
-                "0v0bfh3ay07s6msxmklvwfaif0q02kq2yhy65fdhys49vw8c1w3c"))))))
-
 (define-public mesa-opencl
   (package/inherit mesa
     (name "mesa-opencl")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 92ef018b51..17cdc93a00 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -4438,17 +4438,16 @@ and RDP protocols.")
 (define-public dconf
   (package
     (name "dconf")
-    (version "0.34.0")
+    (version "0.36.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://gnome/sources/" name "/"
                     (version-major+minor version) "/"
                     name "-" version ".tar.xz"))
-              (patches (search-patches "dconf-meson-0.52.patch"))
               (sha256
                (base32
-                "0lnsl85cp2vpzgp8pkf6l6yd2i3lp02jdvga1icfa78j2smr8fll"))))
+                "0bfs069pjv6lhp7xrzmrhz3876ay2ryqxzc6mlva1hhz34ibprlz"))))
     (build-system meson-build-system)
     (propagated-inputs
      ;; In Requires of dconf.pc.
@@ -4467,10 +4466,17 @@ and RDP protocols.")
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (arguments
-     `(#:tests? #f ; To contact dbus it needs to load /var/lib/dbus/machine-id
-                   ; or /etc/machine-id.
-       #:glib-or-gtk? #t
-       #:configure-flags '("-Denable-gtk-doc=true")))
+     `(#:glib-or-gtk? #t
+       #:configure-flags '("-Denable-gtk-doc=true")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'increase-test-timeout
+                    (lambda _
+                      ;; On big-memory systems, the engine test may take
+                      ;; much longer than the default of 30 seconds.
+                      (substitute* "tests/meson.build"
+                        (("test\\(unit_test\\[0\\], exe" all)
+                         (string-append all ", timeout : 90")))
+                      #t)))))
     (home-page "https://developer.gnome.org/dconf/")
     (synopsis "Low-level GNOME configuration system")
     (description "Dconf is a low-level configuration system.  Its main purpose
@@ -8100,7 +8106,7 @@ libxml2.")
        ("xmllint" ,libxml2)))
     (inputs
      `(("accountsservice" ,accountsservice)
-       ("check" ,check) ; for testing
+       ("check" ,check-0.14)            ;for testing
        ("elogind" ,elogind)
        ("gnome-session" ,gnome-session)
        ("gnome-settings-daemon" ,gnome-settings-daemon)
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index db67d7ad0a..0b16796b13 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1430,7 +1430,7 @@ standards of the IceCat project.")
        ("mesa" ,mesa)
        ("mit-krb5" ,mit-krb5)
        ("nspr" ,nspr)
-       ("nss" ,nss-3.57)
+       ("nss" ,nss)
        ("pango" ,pango)
        ("pixman" ,pixman)
        ("pulseaudio" ,pulseaudio)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 82573bd099..4ac9071457 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.com>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 raingloom <raingloom@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -149,6 +150,11 @@
                   ("os/os_test.go" "(.+)(TestHostname.+)")
                   ("time/format_test.go" "(.+)(TestParseInSydney.+)")
 
+                  ;; XXX: This test fails with tzdata 2020b and newer.  Later
+                  ;; Go releases work fine, so just disable this for the
+                  ;; bootstrap Go.
+                  ("time/example_test.go" "(.+)(ExampleParseInLocation.+)")
+
                   ("os/exec/exec_test.go" "(.+)(TestEcho.+)")
                   ("os/exec/exec_test.go" "(.+)(TestCommandRelativeName.+)")
                   ("os/exec/exec_test.go" "(.+)(TestCatStdin.+)")
diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm
index e21c4e3775..c44a17b59e 100644
--- a/gnu/packages/groovy.scm
+++ b/gnu/packages/groovy.scm
@@ -31,7 +31,7 @@
 (define java-groovy-bootstrap
   (package
     (name "java-groovy-bootstrap")
-    (version "2.4.15")
+    (version "3.0.5")
     (source
      (origin
        (method git-fetch)
@@ -43,57 +43,69 @@
                                   version)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1q4cplimr18j93zz92kgq8b6wdv0p9svr7cdr47q8b2mbjpd0x3j"))
+        (base32 "00556qxjmcn3a3xhfy6n0zw3d69mnw72vzm2rb6n4ihzkk7579nm"))
        (patches
         (search-patches "groovy-add-exceptionutilsgenerator.patch"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "groovy.jar"
-       #:source-dir "src/main:subprojects/groovy-test/src/main/java"
+       #:source-dir "src/main/java:src/main/antlr2:subprojects/parser-antlr4/src/main/java:src/antlr"
        #:test-dir "src/test"
        #:tests? #f
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:main-class "groovy.ui.GroovyMain"
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'fix-java8
-           ;; Fix "Reference to plus is ambiguous"
-           (lambda _
-             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
-               (("toList\\(left\\)")
-                "(List<T>)toList(left)"))
-             #t))
          (add-before 'build 'generate-parsers
            (lambda _
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
                (invoke "antlr" "java.g"))
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
                (mkdir "parser")
                (with-directory-excursion "parser"
                  (invoke "antlr" "../groovy.g")))
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
              #t))
          (add-before 'build 'generate-exception-utils
            (lambda _
              (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "-source" "1.8" "-target" "1.8"
                      "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
              (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
                                                  ":config/ant/src")
                      "org.codehaus.groovy.ExceptionUtilsGenerator"
                      "build/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
+             #t))
+         (add-before 'build 'set-source-level
+           (lambda _
+             (substitute* "build.xml"
+               (("<javac") "<javac source=\"1.8\" target=\"1.8\""))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)
+     `(("antlr2" ,antlr2)
+       ("antlr4" ,java-tunnelvisionlabs-antlr4)
+       ("java-jsr305" ,java-jsr305)
+       ("java-junit" ,java-junit)
        ("java-hamcrest-core" ,java-hamcrest-core)
-       ("antlr2" ,antlr2)
        ("java-jmock-1" ,java-jmock-1)
        ("java-xmlunit-legacy" ,java-xmlunit-legacy)))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
+     `(("java-antlr4-runtime" ,java-tunnelvisionlabs-antlr4-runtime)
+       ("java-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)
+       ("java-asm" ,java-asm-8)
+       ("java-asm-util" ,java-asm-util-8)
        ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-xstream" ,java-xstream)
+       ("java-commons-cli" ,java-commons-cli)
        ("java-jansi" ,java-jansi)
-       ("java-jline-2" ,java-jline-2)))
+       ("java-jline-2" ,java-jline-2)
+       ("java-picocli" ,java-picocli)
+       ("java-xstream" ,java-xstream)))
     (home-page "http://groovy-lang.org/")
     (synopsis "Groovy's java bootstrap")
     (description "This package contains the java bootstrap that is used to build
@@ -106,26 +118,25 @@ groovy submodules.")
     (name "groovy-bootstrap")
     (arguments
      `(#:jar-name "groovy.jar"
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        ;Requires groovy-xml and logback-classic which are circular dependencies
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'fix-java8
-           ;; Fix "Reference to plus is ambiguous"
-           (lambda _
-             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
-               (("toList\\(left\\)")
-                "(List<T>)toList(left)"))
-             #t))
          (add-before 'build 'generate-parser
            (lambda _
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
                (invoke "antlr" "java.g"))
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
                (mkdir "parser")
                (with-directory-excursion "parser"
                  (invoke "antlr" "../groovy.g")))
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
              #t))
          (add-before 'build 'generate-exception-utils
            (lambda _
@@ -141,19 +152,19 @@ groovy submodules.")
              (mkdir-p "target/classes/org/codehaus/groovy/runtime")
              (mkdir-p "target/classes/META-INF")
              (invoke "javac" "-cp" (getenv "CLASSPATH")
-                     "src/main/org/codehaus/groovy/tools/DgmConverter.java")
+                     "src/main/java/org/codehaus/groovy/tools/DgmConverter.java")
              (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
-                                                 ":src/main")
+                                                 ":src/main/java")
                      "org.codehaus.groovy.tools.DgmConverter")
              #t))
          (add-before 'build 'copy-resources
            (lambda _
-             (with-directory-excursion "src/main"
+             (with-directory-excursion "src/main/java"
                (for-each (lambda (file)
-                           (mkdir-p (string-append "../../target/classes/"
+                           (mkdir-p (string-append "../../../target/classes/"
                                                    (dirname file)))
                            (copy-file file
-                                      (string-append "../../target/classes/"
+                                      (string-append "../../../target/classes/"
                                                      file)))
                   (find-files "." ".*.(txt|properties|xml|html)")))
              #t))
@@ -162,6 +173,7 @@ groovy submodules.")
              (mkdir-p "build/jar")
              (apply invoke "java" "-cp" (getenv "CLASSPATH")
                            "org.codehaus.groovy.tools.FileSystemCompiler"
+                           "-cp" (getenv "CLASSPATH")
                            "-d" "target/classes"
                            "-j"; joint compilation
                            (find-files "src/main"
@@ -186,7 +198,7 @@ is used to build the groovy submodules written in groovy.")))
     (name "groovy-tests-bootstrap")
     (arguments
      `(#:jar-name "groovy-tests-bootstrap.jar"
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:tests? #f; no tests
        #:phases
        (modify-phases %standard-phases
@@ -196,17 +208,20 @@ is used to build the groovy submodules written in groovy.")))
              (mkdir-p "build/jar")
              (apply invoke "java" "-cp" (getenv "CLASSPATH")
                     "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-cp" (getenv "CLASSPATH")
                     "-d" "build/classes"
                     "-j"; joint compilation
                     (append
                       (find-files "src/test" "TestSupport.java")
                       (find-files "src/test" "HeadlessTestSupport.java")
+                      (find-files "src/test" "AstAssert.groovy")
                       (find-files "src/test" "XmlAssert.java")))
              (invoke "jar" "-cf" "build/jar/groovy-tests-bootstrap.jar"
                      "-C" "build/classes" ".")
              #t)))))
     (inputs
      `(("groovy-test" ,groovy-test)
+       ("groovy-parser-antlr4" ,groovy-parser-antlr4)
        ,@(package-inputs groovy-bootstrap)))
     (native-inputs
      `(("groovy-bootstrap" ,groovy-bootstrap)
@@ -215,14 +230,15 @@ is used to build the groovy submodules written in groovy.")))
     (description "This package contains three classes required for testing
 other groovy submodules.")))
 
-(define groovy-test
+(define (groovy-subproject name)
   (package
     (inherit groovy-bootstrap)
-    (name "groovy-test")
+    (name name)
     (arguments
-     `(#:jar-name "groovy-test.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-test/src/test"
+     `(#:jar-name ,(string-append name ".jar")
+       #:test-dir ,(string-append name "/src/test")
+       #:test-include (list "**/*Test.java" "**/*.groovy")
+       #:jdk ,openjdk9
        #:phases
        (modify-phases %standard-phases
          (replace 'build
@@ -231,839 +247,531 @@ other groovy submodules.")))
              (mkdir-p "build/jar")
              (apply invoke "java" "-cp" (getenv "CLASSPATH")
                     "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "subprojects/groovy-test/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-test.jar"
+                    "-cp" (getenv "CLASSPATH")
+                    "-d" "build/classes" "-j"
+                    (append
+                      (find-files ,(string-append "subprojects/" name "/src/main/java")
+                        ".*\\.(groovy|java)$")
+                      (find-files ,(string-append "subprojects/" name "/src/main/groovy")
+                        ".*\\.(groovy|java)$")))
+             (invoke "jar" "-cf" ,(string-append "build/jar/" name ".jar")
                      "-C" "build/classes" ".")
              #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "subprojects/groovy-test/src/test"
-                                        ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy test submodule")
-    (description "This package contains the test submodules used to test
-other groovy submodules.")))
-
-(define groovy-xml
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-xml")
-    (arguments
-     `(#:jar-name "groovy-xml.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-xml")
-             #t))
-         (replace 'build
+         (add-before 'build 'copy-resources
            (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-xml.jar"
-                     "-C" "build/classes" ".")
+             (let ((resource-dir ,(string-append "subprojects/" name
+                                                 "/src/main/resources")))
+               (when (file-exists? resource-dir)
+                 (copy-recursively resource-dir "build/classes")))
              #t))
          (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy XML")
-    (description "This package contains XML-related utilities for groovy.")))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (mkdir-p "build/test-classes")
+               (substitute* "build.xml"
+                 (("depends=\"compile-tests\"") "depends=\"\"")
+                 (("}/java") "}/"))
+               (apply invoke "java" "-cp"
+                      (string-append (getenv "CLASSPATH") ":build/classes")
+                      "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
+                      (string-append (getenv "CLASSPATH") ":build/classes")
+                      "-d" "build/test-classes" "-j"
+                      (append
+                        (find-files ,(string-append "subprojects/" name "/src/test/java")
+                                    ".*\\.(groovy|java)$")
+                        (find-files ,(string-append "subprojects/" name "/src/test/groovy")
+                                    ".*\\.(groovy|java)$")))
+               (invoke "ant" "check"))
+             #t)))))))
+
+(define groovy-parser-antlr4
+  (let ((base (groovy-subproject "parser-antlr4")))
+    (package
+      (inherit base)
+      (name "groovy-parser-antlr4")
+      (arguments
+       `(#:tests? #f
+         ,@(substitute-keyword-arguments (package-arguments base)
+            ((#:phases phases)
+             `(modify-phases ,phases
+                (add-before 'build 'generate-parser
+                  (lambda _
+                    (invoke "antlr4" "-lib" "src/antlr"
+                            "-package" "org.apache.groovy.parser.antlr4"
+                            "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+                    (invoke "antlr4" "-lib" "src/antlr"
+                            "-package" "org.apache.groovy.parser.antlr4"
+                            "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
+                    (for-each
+                      (lambda (file)
+                        (install-file file
+                                      "subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4"))
+                      (find-files "src/antlr" ".*.java$"))
+                    #t)))))))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-native-inputs java-groovy-bootstrap)))
+      (synopsis "Groovy antlr4 parser submodule")
+      (description "This package contains the new parser Parrot for Groovy, which
+is based on Antlr4.  The new parser can parse Groovy source code and construct
+the related AST, which is almost identical to the one generated by the old
+parser.  Currently all features of Groovy are available."))))
+
+(define groovy-test
+  (let ((base (groovy-subproject "groovy-test")))
+    (package
+      (inherit base)
+      (arguments
+        `(;#:tests? #f
+          ,@(package-arguments base)))
+      (synopsis "Groovy test submodule")
+      (description "This package contains the test submodules used to test
+other groovy submodules."))))
+
+(define groovy-xml
+  (let ((base (groovy-subproject "groovy-xml")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (inputs
+       `(("groovy-parser-antlr4" ,groovy-parser-antlr4)
+         ,@(package-inputs base)))
+      (synopsis "Groovy XML")
+      (description "This package contains XML-related utilities for groovy."))))
 
 (define groovy-templates
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-templates")
-    (arguments
-     `(#:jar-name "groovy-templates.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-templates/src/test"
-       #:tests? #f;Requires spock-framework which is a circular dependency
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "subprojects/groovy-templates/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-templates.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy template engine")
-    (description "This package contains a template framework which is
+  (let ((base (groovy-subproject "groovy-templates")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f;Requires spock-framework which is a circular dependency
+         ,@(substitute-keyword-arguments (package-arguments base)
+             ((#:phases phases)
+              `(modify-phases ,phases
+                 ;; These annotations are used for QA, but do not affect build output.
+                 ;; They require findbugs, which we don't have yet.
+                 (add-before 'build 'remove-annotation
+                   (lambda _
+                     (substitute* '("subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java"
+                                    "subprojects/groovy-templates/src/main/groovy/groovy/text/TemplateEngine.java")
+                       (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
+                       (("@SuppressFBWarnings.*") ""))
+                     #t)))))))
+      (inputs
+       `(("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy template engine")
+      (description "This package contains a template framework which is
 well-suited to applications where the text to be generated follows the form of
-a static template.")))
+a static template."))))
 
 (define groovy-groovydoc
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-groovydoc")
-    (arguments
-     `(#:jar-name "groovy-groovydoc.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-groovydoc/src/test"
-       #:tests? #f; Requires groovy-ant which is a circular dependency
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "subprojects/groovy-groovydoc/src/main/resources"
-                               "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "subprojects/groovy-groovydoc/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-groovydoc.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy documentation generation")
-    (description "This package contains the groovy documentation generator,
-similar to javadoc.")))
+  (let ((base (groovy-subproject "groovy-groovydoc")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; Requires groovy-ant which is a circular dependency
+         ,@(package-arguments base)))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-parser-antlr4" ,groovy-parser-antlr4)
+         ("java-javaparser" ,java-javaparser)
+         ,@(package-inputs groovy-bootstrap)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs java-groovy-bootstrap)))
+      (synopsis "Groovy documentation generation")
+      (description "This package contains the groovy documentation generator,
+similar to javadoc."))))
 
 (define groovy-ant
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-ant")
-    (arguments
-     `(#:jar-name "groovy-ant.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       ;; FIXME: Excluding all tests because they fail
-       #:test-exclude (list
-                        "**/GroovyTest.java"
-                        "**/GroovycTest.java")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-ant")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-ant.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-groovydoc" ,groovy-groovydoc)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-xml" ,groovy-xml)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy ant tasks")
-    (description "This package contains groovy-related ant tasks definitions.")))
+  (let ((base (groovy-subproject "groovy-ant")))
+    (package
+      (inherit base)
+      (arguments
+       `(;#:tests? #f;Requires spock-framework which is a circular dependency
+         #:ant ,ant/java8; ant is actually a dependency of this package, and we need 1.10
+         ,@(substitute-keyword-arguments (package-arguments base)
+             ((#:phases phases)
+              `(modify-phases ,phases
+                 ;; These annotations are used for QA, but do not affect build output.
+                 ;; They require findbugs, which we don't have yet.
+                 (add-before 'build 'remove-annotation
+                   (lambda _
+                     (substitute* (find-files "subprojects/groovy-ant"
+                                              ".*.java$")
+                       (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
+                       (("@SuppressFBWarnings.*") ""))
+                     #t)))))))
+      (inputs
+       `(("groovy-groovydoc" ,groovy-groovydoc)
+         ("java-asm-tree" ,java-asm-tree-8)
+         ("java-asm-analysis" ,java-asm-analysis-8)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("ant-junit" ,ant-junit)
+         ("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-xml" ,groovy-xml)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy ant tasks")
+      (description "This package contains groovy-related ant tasks definitions."))))
+
+(define groovy-astbuilder
+  (let ((base (groovy-subproject "groovy-astbuilder")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'copy-resources)
+             (add-after 'build 'copy-resources
+               (lambda _
+                 (copy-recursively
+                   "subprojects/groovy-astbuilder/src/main/resources"
+                   "build/classes")
+                 (substitute* "build.xml"
+                   (("depends=\"compile,") "depends=\""))
+                 (invoke "ant" "jar")
+                 #t))))))
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Transformation to capture ASTBuilder from code statements")
+      (description "This package contains an AST transformation for use with
+ASTBuilder when building \"from string\" Groovy statements."))))
 
 (define groovy-bsf
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-bsf")
-    (arguments
-     `(#:jar-name "groovy-bsf.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       #:test-exclude (list
+  (let ((base (groovy-subproject "groovy-bsf")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:test-exclude (list
 ;; exception from Groovy: org.codehaus.groovy.runtime.InvokerInvocationException:
 ;; groovy.lang.MissingMethodException: No signature of method:
 ;; java.util.ArrayList.each() is applicable for argument types:
 ;; (groovy.script.MapFromList$_doit_closure1) values:
 ;; [groovy.script.MapFromList$_doit_closure1@17e554d5]
                         "**/BSFTest.java")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-bsf")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-bsf.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\""))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("java-commons-bsf" ,java-commons-bsf)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy BSF engine")
-    (description "This package defines the BSF engine for using Groovy inside
-any @dfn{Bean Scripting Framework} (BSF) application.")))
+         ,@(package-arguments base)))
+      (inputs
+       `(("java-commons-bsf" ,java-commons-bsf)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy BSF engine")
+      (description "This package defines the BSF engine for using Groovy inside
+any @dfn{Bean Scripting Framework} (BSF) application."))))
+
+(define groovy-cli-commons
+  (let ((base (groovy-subproject "groovy-cli-commons")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy CLI common classes")
+      (description "This package defines common classes for dealing with
+command-line arguments in Groovy."))))
+
+(define groovy-cli-picocli
+  (let ((base (groovy-subproject "groovy-cli-picocli")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("java-picocli" ,java-picocli)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy CLI classes that use picocli")
+      (description "This package defines classes for dealing with command-line
+arguments in Groovy using the picocli library."))))
 
 (define groovy-swing
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-swing")
-    (arguments
-     `(#:jar-name "groovy-swing.jar"
-       #:jdk ,icedtea-8
-       ;; FIXME: tests are not run
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-swing")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-swing.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
-               (("HeadlessTestSupport.headless") "isHeadless()"))
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy graphical library")
-    (description "This package contains the groovy bindings to Java Swing, a
-library used to build graphical interfaces.")))
+  (let ((base (groovy-subproject "groovy-swing")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'check 'fix-test
+               (lambda _
+                 (substitute*
+                   "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
+                   (("HeadlessTestSupport.headless") "isHeadless()"))
+                 #t))))))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy graphical library")
+      (description "This package contains the groovy bindings to Java Swing, a
+library used to build graphical interfaces."))))
 
 (define groovy-console
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-console")
-    (arguments
-     `(#:jar-name "groovy-console.jar"
-       #:jdk ,icedtea-8
-       ;; FIXME: tests are not run
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-console")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-console.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (substitute*
-               "../groovy-swing/src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
-               (("HeadlessTestSupport.headless") "isHeadless()"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append
-                      (find-files "../groovy-swing/src/test" ".*\\.(groovy|java)$")
-                      (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-swing" ,groovy-swing)
-       ("groovy-templates" ,groovy-templates)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy graphical interface")
-    (description "This package contains a graphical interface to run groovy.")))
+  (let ((base (groovy-subproject "groovy-console")))
+    (package
+      (inherit base)
+      (arguments
+         (substitute-keyword-arguments (package-arguments base)
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (add-before 'check 'build-swing
+                 (lambda _
+                   (substitute*
+                     "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
+                     (("HeadlessTestSupport.headless") "isHeadless()"))
+                   (mkdir-p "build/test-classes")
+                   (apply invoke "java" "-cp"
+                          (string-append (getenv "CLASSPATH") ":build/classes")
+                          "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
+                          (string-append (getenv "CLASSPATH") ":build/classes")
+                          "-d" "build/test-classes" "-j"
+                          (append
+                            (find-files "subprojects/groovy-swing/src/test/java"
+                                        ".*\\.(groovy|java)$")
+                            (find-files "subprojects/groovy-swing/src/test/groovy"
+                                        ".*\\.(groovy|java)$")))
+                   #t))))))
+      (inputs
+       `(("groovy-swing" ,groovy-swing)
+         ("groovy-templates" ,groovy-templates)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy graphical interface")
+      (description "This package contains a graphical interface to run groovy."))))
+
+(define groovy-datetime
+  (let ((base (groovy-subproject "groovy-datetime")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Date/Time API for Groovy")
+      (description "This package defines new Groovy methods which appear on
+normal JDK Date/Time API (@code{java.time}) classes inside the Groovy
+environment."))))
+
+(define groovy-dateutil
+  (let ((base (groovy-subproject "groovy-dateutil")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Date and Calendar API for Groovy")
+      (description "This package defines new groovy methods which appear on
+normal JDK Date and Calendar classes inside the Groovy environment."))))
 
 (define groovy-docgenerator
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-docgenerator")
-    (arguments
-     `(#:jar-name "groovy-docgenerator.jar"
-       #:jdk ,icedtea-8
-       #:tests? #f; No tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-docgenerator")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-docgenerator.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-swing" ,groovy-swing)
-       ("java-qdox-1.12" ,java-qdox-1.12)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy documentation generation")
-    (description "This package contains a command line tool to generate
-documentation for groovy applications.")))
+  (let ((base (groovy-subproject "groovy-docgenerator")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; No tests
+         ,@(package-arguments base)))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-swing" ,groovy-swing)
+         ("java-qdox-1.12" ,java-qdox-1.12)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy documentation generation")
+      (description "This package contains a command line tool to generate
+documentation for groovy applications."))))
 
 (define groovy-groovysh
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-groovysh")
-    (arguments
-     `(#:jar-name "groovy-groovysh.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-groovysh")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-groovysh.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-xml" ,groovy-xml)
-       ("groovy-console" ,groovy-console)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy REPL")
-    (description "This package contains the Groovy REPL.")))
+  (let ((base (groovy-subproject "groovy-groovysh")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-xml" ,groovy-xml)
+         ("groovy-console" ,groovy-console)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy REPL")
+      (description "This package contains the Groovy REPL."))))
 
 (define groovy-jmx
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-jmx")
-    (arguments
-     `(#:jar-name "groovy-jmx.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-jmx")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-jmx.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy JMX extension")
-    (description "This package contains the JMX extension of Groovy, for
-management and monitoring of JVM-based solutions.")))
+  (let ((base (groovy-subproject "groovy-jmx")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy JMX extension")
+      (description "This package contains the JMX extension of Groovy, for
+management and monitoring of JVM-based solutions."))))
 
 (define groovy-json
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-json")
-    (arguments
-     `(#:jar-name "groovy-json.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-json")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-json.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy JSON")
-    (description "This package contains JSON-related utilities for groovy.")))
+  (let ((base (groovy-subproject "groovy-json")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy JSON")
+      (description "This package contains JSON-related utilities for groovy."))))
 
 (define groovy-jsr223
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-jsr223")
-    (arguments
-     `(#:jar-name "groovy-jsr223.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-jsr223")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-jsr223.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy's own JSR223 implementation")
-    (description "This package contains Groovy's own JSR223 implementation.  This
-module is used for interaction between Groovy and Java code.")))
+  (let ((base (groovy-subproject "groovy-jsr223")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy's own JSR223 implementation")
+      (description "This package contains Groovy's own JSR223 implementation.  This
+module is used for interaction between Groovy and Java code."))))
 
 (define groovy-nio
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-nio")
-    (arguments
-     `(#:jar-name "groovy-nio.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:tests? #f; Requires spock-framework
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-nio")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-nio.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy input-output library")
-    (description "This package implements an input/output library that extends
-the functionality of the common library of Java.")))
+  (let ((base (groovy-subproject "groovy-nio")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; Require spock-framework
+         ,@(package-arguments base)))
+      (synopsis "Groovy input-output library")
+      (description "This package implements an input/output library that extends
+the functionality of the common library of Java."))))
 
 (define groovy-servlet
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-servlet")
-    (arguments
-     `(#:jar-name "groovy-servlet.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-servlet")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-servlet.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes"
-                    "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-json" ,groovy-json)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy's servlet implementation")
-    (description "This package contains a library to create groovlets, Groovy's
-version of Java servlets.")))
+  (let ((base (groovy-subproject "groovy-servlet")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-json" ,groovy-json)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy's servlet implementation")
+      (description "This package contains a library to create groovlets, Groovy's
+version of Java servlets."))))
 
 (define groovy-sql
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-sql")
-    (arguments
-     `(#:jar-name "groovy-sql.jar"
-       #:test-dir "src/test"
-       #:tests? #f;TODO: Requires hsqldb
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-sql")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main"
-                                  ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-sql.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy SQL library")
-    (description "This package contains a facade over Java's normal JDBC APIs
-providing greatly simplified resource management and result set handling.")))
+  (let ((base (groovy-subproject "groovy-sql")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f;TODO: Requires hsqldb
+         ,@(package-arguments base)))
+      (synopsis "Groovy SQL library")
+      (description "This package contains a facade over Java's normal JDBC APIs
+providing greatly simplified resource management and result set handling."))))
 
 (define groovy-testng
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-testng")
-    (arguments
-     `(#:jar-name "groovy-testng.jar"
-       #:tests? #f; No tests
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-testng")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-testng.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy testing framework")
-    (description "This package contains integration code for running TestNG
-tests in Groovy.")))
+  (let ((base (groovy-subproject "groovy-testng")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy testing framework")
+      (description "This package contains integration code for running TestNG
+tests in Groovy."))))
 
 (define groovy-macro
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-macro")
-    (arguments
-     `(#:jar-name "groovy-macro.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-macro")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-macro.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                   (string-append (getenv "CLASSPATH") ":build/classes")
-                   "org.codehaus.groovy.tools.FileSystemCompiler"
-                   "-d" "build/test-classes" "-j"
-                   (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-json" ,groovy-json)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy macro processor")
-    (description "This package contains a high-level library to create macro
-and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
+  (let ((base (groovy-subproject "groovy-macro")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'copy-resources)
+             (add-after 'build 'copy-resources
+               (lambda _
+                 (copy-recursively "subprojects/groovy-macro/src/main/resources"
+                                   "build/classes")
+                 (substitute* "build.xml"
+                   (("depends=\"compile,") "depends=\""))
+                 (invoke "ant" "jar")
+                 #t))))))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-json" ,groovy-json)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy macro processor")
+      (description "This package contains a high-level library to create macro
+and modify groovy's @dfn{Abstract Syntax Tree} (AST)."))))
+
+(define groovy-yaml
+  (let ((base (groovy-subproject "groovy-yaml")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-json" ,groovy-json)
+         ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
+         ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
+         ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
+         ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy YAML")
+      (description "This package contains YAML-related utilities for groovy."))))
 
 (define-public groovy
   (package
@@ -1071,7 +779,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
     (name "groovy")
     (arguments
      `(#:tests? #f; No tests
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -1089,7 +797,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
                    (("@GROOVYJAR@") "groovy.jar")
                    (("MAX_FD=\"maximum\"")
                     (string-append
-                      "MAX_FD=\"maximum\"\nJAVAHOME="
+                      "MAX_FD=\"maximum\"\nJAVA_HOME="
                       (assoc-ref inputs "jdk"))))
                  ;; Groovy uses class loading. It's not enough to put the class
                  ;; in the loader's classpath, as it causes breakages:
@@ -1105,14 +813,17 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
                        (lambda (jar)
                          (symlink jar (string-append out-lib "/" (basename jar))))
                        (find-files (assoc-ref inputs input) ".*.jar")))
-                   '("groovy-bootstrap" "groovy-ant" "groovy-bsf"
-                     "groovy-console" "groovy-docgenerator"
-                     "groovy-groovydoc" "groovy-groovysh"
-                     "groovy-jmx" "groovy-json" "groovy-jsr223"
-                     "groovy-nio" "groovy-servlet" "groovy-sql"
+                   '("groovy-bootstrap" "groovy-ant" "groovy-astbuilder"
+                     "groovy-bsf" "groovy-cli-commons" "groovy-cli-picocli"
+                     "groovy-console" "groovy-datetime" "groovy-dateutil"
+                     "groovy-docgenerator" "groovy-groovydoc" "groovy-groovysh"
+                     "groovy-jmx" "groovy-json" "groovy-jsr223" "groovy-nio"
+                     "groovy-parser-antlr4" "groovy-servlet" "groovy-sql"
                      "groovy-swing" "groovy-templates" "groovy-testng"
-                     "groovy-xml" "java-commons-cli" "java-asm"
-                     "java-classpathx-servletapi" "java-xstream"
+                     "groovy-xml" "groovy-yaml" "java-commons-cli"
+                     "java-tunnelvisionlabs-antlr4-runtime" "java-asm"
+                     "java-asm-analysis" "java-asm-tree" "java-asm-util"
+                     "java-classpathx-servletapi" "java-xstream" "java-picocli"
                      "java-jansi" "java-jline-2"))
                  ;; antlr.jar is present twice in antlr2.  Symlink doesn't like
                  ;; it, so we symlink it here.
@@ -1130,8 +841,13 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
     (inputs
      `(("groovy-bootstrap" ,groovy-bootstrap)
        ("groovy-ant" ,groovy-ant)
+       ("groovy-astbuilder" ,groovy-astbuilder)
        ("groovy-bsf" ,groovy-bsf)
+       ("groovy-cli-commons" ,groovy-cli-commons)
+       ("groovy-cli-picocli" ,groovy-cli-picocli)
        ("groovy-console" ,groovy-console)
+       ("groovy-datetime" ,groovy-datetime)
+       ("groovy-dateutil" ,groovy-dateutil)
        ("groovy-docgenerator" ,groovy-docgenerator)
        ("groovy-groovydoc" ,groovy-groovydoc)
        ("groovy-groovysh" ,groovy-groovysh)
@@ -1139,18 +855,26 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
        ("groovy-json" ,groovy-json)
        ("groovy-jsr223" ,groovy-jsr223)
        ("groovy-nio" ,groovy-nio)
+       ("groovy-parser-antlr4" ,groovy-parser-antlr4)
        ("groovy-servlet" ,groovy-servlet)
        ("groovy-sql" ,groovy-sql)
        ("groovy-swing" ,groovy-swing)
        ("groovy-templates" ,groovy-templates)
        ("groovy-testng" ,groovy-testng)
        ("groovy-xml" ,groovy-xml)
+       ("groovy-yaml" ,groovy-yaml)
+       ("java-tunnelvisionlabs-antlr4-runtime"
+        ,java-tunnelvisionlabs-antlr4-runtime)
        ("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
+       ("java-asm" ,java-asm-8)
+       ("java-asm-analysis" ,java-asm-analysis-8)
+       ("java-asm-tree" ,java-asm-tree-8)
+       ("java-asm-util" ,java-asm-util-8)
        ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-xstream" ,java-xstream)
+       ("java-picocli" ,java-picocli)
        ("java-jansi" ,java-jansi)
        ("java-jline-2" ,java-jline-2)
+       ("java-xstream" ,java-xstream)
        ("antlr2" ,antlr2)))
     (synopsis "Programming language for the JVM")
     (description "Apache Groovy is a powerful, optionally typed and dynamic
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 01474e29a7..0ab93e3a65 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -33,6 +33,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system trivial)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages audio)
@@ -42,7 +43,6 @@
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages flex)
@@ -394,6 +394,58 @@ arrays of data.")
     ;; under the 3-clause BSD license, the rest is under 2-clause BSD license.
     (license (list license:bsd-2 license:bsd-3))))
 
+(define-public gstreamer-docs
+  (package
+    (name "gstreamer-docs")
+    (version "1.18.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://gstreamer.freedesktop.org/src/gstreamer-docs"
+                    "/gstreamer-docs-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0x6ix6dj3ndc1y133xidb21a4bamdfjh88mxxxld05d78wd1ayda"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules ((guix build utils)))
+         (let* ((source (assoc-ref %build-inputs "source"))
+                (tar (assoc-ref %build-inputs "tar"))
+                (xz (assoc-ref %build-inputs "xz"))
+                (out (assoc-ref %outputs "out"))
+                (books (string-append out "/share/devhelp/books")))
+           (setenv "PATH" (string-append xz "/bin"))
+           (mkdir-p books)
+           (with-directory-excursion books
+             (invoke (string-append tar "/bin/tar") "-xvf" source
+                     "--strip-components=3"
+                     (string-append ,name "-" ,version
+                                    "/devhelp/books/GStreamer")))
+           #t))))
+    (native-inputs
+     `(("tar" ,tar)
+       ("xz" ,xz)))
+    (home-page "https://gstreamer.freedesktop.org/")
+    (synopsis "Developer documentation for GStreamer")
+    (description
+     "This package contains manuals, tutorials, and API reference for
+the GStreamer multimedia framework.")
+    ;; The documentation is covered by multiple licenses.  Anything not
+    ;; explicitly mentioned below is LGPL2.1+.  See README.md for details.
+    (license (list
+              ;; The tutorial code can be used with either of these licenses,
+              ;; at the users option.
+              license:lgpl2.1+ license:bsd-2 license:expat
+              ;; The developer manual and plugin writer guide carries
+              ;; the Open Publication License v1.0.
+              (license:fsf-free "https://opencontent.org/openpub/"
+                                "The Open Publication License v1.0")
+              ;; Tutorials are covered by CC-BY-SA 4.0.
+              license:cc-by-sa4.0))))
+
 ;; Increase the test timeouts to accommodate slow or busy machines.
 (define %common-gstreamer-phases
   '((add-after 'unpack 'increase-test-timeout
@@ -408,7 +460,7 @@ arrays of data.")
 (define-public gstreamer
   (package
     (name "gstreamer")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
      (origin
       (method url-fetch)
@@ -417,9 +469,8 @@ arrays of data.")
             version ".tar.xz"))
       (sha256
        (base32
-        "0kp93622y29pck8asvil1fmzf55s2gx76wv475a6izc3cwj49w73"))))
+        "01bq1k0gj603zyhq975zl09q4zla12mxqvhmk9fyn2kcn12r5w0g"))))
     (build-system meson-build-system)
-    (outputs '("out" "doc"))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -437,23 +488,13 @@ arrays of data.")
                        (("tcase_add_test \\(tc_chain, test_stress_reschedule.*")
                       ""))
                      #t)))
-               '())
-         (add-after 'install 'move-docs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (doc (assoc-ref outputs "doc")))
-               (mkdir-p (string-append doc "/share"))
-               (copy-recursively (string-append out "/share/gtk-doc")
-                                 (string-append doc "/share/gtk-doc"))
-               (delete-file-recursively (string-append out "/share/gtk-doc"))
-               #t))))))
+               '()))))
     (propagated-inputs `(("glib" ,glib))) ; required by gstreamer-1.0.pc.
     (native-inputs
      `(("bison" ,bison)
        ("flex" ,flex)
        ("glib" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
@@ -479,7 +520,7 @@ This package provides the core library and elements.")
 (define-public gst-plugins-base
   (package
     (name "gst-plugins-base")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
      (origin
       (method url-fetch)
@@ -487,7 +528,7 @@ This package provides the core library and elements.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "0sl1hxlyq46r02k7z70v09vx1gi4rcypqmzra9jid93lzvi76gmi"))))
+        "15vqvcy842vhbic3w7l4yvannzazdgwggzv2x8f9m02hm78vsakn"))))
     (build-system meson-build-system)
     (propagated-inputs
      `(("glib" ,glib)              ;required by gstreamer-sdp-1.0.pc
@@ -522,10 +563,7 @@ This package provides the core library and elements.")
         ("gobject-introspection" ,gobject-introspection)
         ("python-wrapper" ,python-wrapper)))
     (arguments
-     `(#:configure-flags '("-Dgl=disabled"
-                           ;; FIXME: Documentation fails to build without
-                           ;; enabling GL above, which causes other problems.
-                           "-Ddoc=false")
+     `(#:configure-flags '("-Dgl=disabled")
        #:phases
        (modify-phases %standard-phases
          ,@%common-gstreamer-phases
@@ -544,7 +582,7 @@ for the GStreamer multimedia library.")
 (define-public gst-plugins-good
   (package
     (name "gst-plugins-good")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
@@ -553,22 +591,13 @@ for the GStreamer multimedia library.")
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
        (sha256
-        (base32 "068k3cbv1yf3gbllfdzqsg263kzwh21y8dpwr0wvgh15vapkpfs0"))))
+        (base32 "1b4b3a6fm2wyqpnx300pg1sz01m9qhfajadk3b7sbzisg8vvqab3"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "docs"
-               (substitute* "plugins/gst-plugins-good-plugins-docs.sgml"
-                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
-                  (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
-         (add-before
-             'check 'pre-check
+         (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
              (system "Xvfb :1 +extension GLX &")
@@ -581,8 +610,7 @@ for the GStreamer multimedia library.")
              (setenv "DBUS_FATAL_WARNINGS" "0")
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("gettext" ,gettext-minimal)
+     `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
@@ -643,14 +671,14 @@ model to base your own plug-in on, here it is.")
 (define-public gst-plugins-bad
   (package
     (name "gst-plugins-bad")
-    (version "1.16.2")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/src/"
                                   name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0x0y0hm0ga3zqi5q4090hw5sjh59y1ry9ak16qsaascm72i7mjzi"))))
+                "0pqqq5bs9fjwcmbwgsgxs2dx6gznhxs7ii5pmjkslr6xmlfap0pk"))))
     (build-system meson-build-system)
     (arguments
      `(#:phases
@@ -667,20 +695,26 @@ model to base your own plug-in on, here it is.")
                         ""))
                      #t)))
                '())
-         (add-after 'unpack 'disable-failing-test
-           (lambda _
-             ;; FIXME: Why is this failing.
-             (substitute* "tests/check/meson.build"
-               ((".*elements/dash_mpd\\.c.*")
-                ""))
-             #t)))))
+         (add-after 'unpack 'adjust-tests
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (let ((gst-plugins-good (assoc-ref (or native-inputs inputs)
+                                                "gst-plugins-good")))
+               (substitute* "tests/check/meson.build"
+                 ;; Make gst-plugin-good available for tests, see
+                 ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1426
+                 (("'GST_PLUGIN_SYSTEM_PATH_1_0', ''")
+                  (string-append "'GST_PLUGIN_SYSTEM_PATH_1_0', '"
+                                 gst-plugins-good "/lib/gstreamer-1.0'"))
+                 ;; This test occasionally times out, see
+                 ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1412
+                 ((".*elements/dtls\\.c.*") ""))
+               #t))))))
     (propagated-inputs
      `(("gst-plugins-base" ,gst-plugins-base)))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
-       ;; TODO: Enable documentation for 1.18.
-       ;;("gtk-doc" ,gtk-doc)
+       ("gst-plugins-good" ,gst-plugins-good) ;for tests
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
@@ -737,7 +771,7 @@ par compared to the rest.")
 (define-public gst-plugins-ugly
   (package
     (name "gst-plugins-ugly")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
@@ -745,22 +779,13 @@ par compared to the rest.")
         (string-append "https://gstreamer.freedesktop.org/src/"
                        name "/" name "-" version ".tar.xz"))
        (sha256
-        (base32 "1jpvc32x6q01zjkfgh6gmq6aaikiyfwwnhj7bmvn52syhrdl202m"))))
+        (base32 "10p0nyzighvkciaspxnhlr7d7n4acrv96lf483i8l988bvj48rk8"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "docs"
-               (substitute* "plugins/gst-plugins-ugly-plugins-docs.sgml"
-                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
-                  (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t))
-         (add-before
-             'check 'pre-check
+         (add-before 'check 'pre-check
            (lambda _
              ;; Tests require a running X server.
              (system "Xvfb :1 +extension GLX &")
@@ -773,8 +798,7 @@ par compared to the rest.")
              (setenv "DBUS_FATAL_WARNINGS" "0")
              #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("gettext" ,gettext-minimal)
+     `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
@@ -805,7 +829,7 @@ think twice about shipping them.")
 (define-public gst-libav
   (package
     (name "gst-libav")
-    (version "1.16.2")
+    (version "1.18.0")
     (source
      (origin
        (method url-fetch)
@@ -814,28 +838,10 @@ think twice about shipping them.")
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
        (sha256
-        (base32 "1wpfilc98bad9nsv3y1qapxp35dvn2mvwvrmqwrsj58cf09gc967"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Drop bundled ffmpeg.
-           (delete-file-recursively "gst-libs/ext/libav")
-           #t))))
+        (base32 "0sm0sfdlalimpkf7a7rk7whvyvmmfi2kly2z3q2j5z53x5f3zya2"))))
     (build-system meson-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "docs"
-               (substitute* "plugins/gst-libav-plugins-docs.sgml"
-                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
-                  (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t)))))
     (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("perl" ,perl)
+     `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
        ("ruby" ,ruby)))
@@ -853,15 +859,15 @@ decoders, muxers, and demuxers provided by FFmpeg.")
 (define-public gst-editing-services
   (package
     (name "gst-editing-services")
-    (version "1.16.2")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://gstreamer.freedesktop.org/src/" name "/"
-                    "gstreamer-editing-services-" version ".tar.xz"))
+                    "gst-editing-services-" version ".tar.xz"))
               (sha256
                (base32
-                "05hcf3prna8ajjnqd53221gj9syarrrjbgvjcbhicv0c38csc1hf"))))
+                "1a00f07v0yjqz1hydhgkjjarm4rk99yjicbz5wkfl5alhzag1bjd"))))
     (build-system meson-build-system)
     (arguments
      ;; FIXME: 16/22 failing tests.
@@ -888,7 +894,7 @@ non-linear editors.")
 (define-public python-gst
   (package
     (name "python-gst")
-    (version "1.16.2")
+    (version "1.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -896,9 +902,7 @@ non-linear editors.")
                     "gst-python-" version ".tar.xz"))
               (sha256
                (base32
-                "1a48ca66izmm8hnp608jv5isg3jxb0vlfmhns0bg9nbkilag7390"))
-              (patches
-               (search-patches "python-gst-fix-build-with-python-3.8.patch"))))
+                "0ifx2s2j24sj2w5jm7cxyg1kinnhbxiz4x0qp3gnsjlwbawfigvn"))))
     (build-system meson-build-system)
     (arguments
      `(#:modules ((guix build meson-build-system)
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 4e58c65ead..6a2384c79e 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -830,7 +830,7 @@ application suites.")
 (define-public gtk+
   (package (inherit gtk+-2)
    (name "gtk+")
-   (version "3.24.20")
+   (version "3.24.23")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/" name "/"
@@ -838,7 +838,7 @@ application suites.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1wqxkd3xnqwihcawncp9mkf9bv5a5fg5i4ahm6klpl782vvnkb1d"))
+              "1cg2vbwbcp7bc84ky0b69ipgdr9djhspnf5k8lajb8jphcj4v1jx"))
             (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
                                      "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
    (propagated-inputs
@@ -1619,7 +1619,7 @@ and routines to assist in editing internationalized text.")
        (sha256
         (base32 "08rpw9hkaprm4r853xy1d35i2af1pji8c3mzzl01mmwmyr9p0x8k"))))
     (native-inputs `(("pkg-config" ,pkg-config)
-                     ("check" ,check)
+                     ("check" ,check-0.14)
                      ("gettext" ,gettext-minimal)
                      ("glib:bin" ,glib "bin")
                      ("xorg-server" ,xorg-server-for-tests)))
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index b5546f97f8..6176b95988 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -501,12 +501,9 @@ use HUnit assertions as QuickCheck properties.")
         (base32
          "0426j43af8v3qmdjjqxivazsvr3a2brac8yw09vpgpjkb2m0nmkv"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f))  ; FIXME: currently missing libraries used for tests.
     (inputs
      `(("ghc-random" ,ghc-random)
-       ("ghc-splitmix" ,ghc-splitmix-bootstrap)
-       ("ghc-tf-random" ,ghc-tf-random)))
+       ("ghc-splitmix" ,ghc-splitmix-bootstrap)))
     (home-page "https://github.com/nick8325/quickcheck")
     (synopsis "Automatic testing of Haskell programs")
     (description
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 36d7dd606f..5044a527ce 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -975,7 +975,7 @@ Metafile}, and @acronym{EMF+, Enhanced Metafile Plus} files.")
 (define-public imlib2
   (package
     (name "imlib2")
-    (version "1.6.1")
+    (version "1.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -983,8 +983,10 @@ Metafile}, and @acronym{EMF+, Enhanced Metafile Plus} files.")
                     "/imlib2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0v8n3dswx7rxqfd0q03xwc7j2w1mv8lv18rdxv487a1xw5vklfad"))))
+                "0zdk4afdrrr1539f2q15zja19j4wwfmpswzws2ffgflcnhywlxhr"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags (list "--disable-static")))
     (native-inputs
      `(("pkgconfig" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index ccc0cfb493..e4efea4e45 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -48,14 +48,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.11-11")
+    (version "6.9.11-34")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1b67rrppvm04aqr76qky5h2a0j2d161h8kwa04fv611w5xwandr2"))))
+               "0acdjkkgjgpfcwj9h9zncywjjrrgb9sh0cvfn3jamjxh5byf638s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch"
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 70141a5f05..35f905136f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -37,6 +37,7 @@
   #:use-module (guix hg-download)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
+  #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
@@ -290,7 +291,8 @@ language.")
               (uri (string-append "mirror://sourceforge/jamvm/jamvm/"
                                   "JamVM%20" version "/jamvm-"
                                   version ".tar.gz"))
-              (patches (search-patches "jamvm-arm.patch"))
+              (patches (search-patches "jamvm-1.5.1-aarch64-support.patch"
+                                       "jamvm-1.5.1-armv7-support.patch"))
               (sha256
                (base32
                 "06lhi03l3b0h48pc7x58bk9my2nrcf1flpmglvys3wyad6yraf36"))
@@ -306,13 +308,30 @@ language.")
                             (assoc-ref %build-inputs "classpath"))
              "--disable-int-caching"
              "--enable-runtime-reloc-checks"
-             "--enable-ffi")))
+             "--enable-ffi")
+       #:phases
+       ,(if (string-prefix? "aarch64" (or (%current-system)
+                                          (%current-target-system)))
+            ;; Makefiles and the configure script need to be regenerated to
+            ;; incorporate support for AArch64.
+            '(modify-phases %standard-phases
+               (replace 'bootstrap
+                 (lambda _ (invoke "autoreconf" "-vif"))))
+            '%standard-phases)))
     (inputs
      `(("classpath" ,classpath-bootstrap)
        ("jikes" ,jikes)
        ("libffi" ,libffi)
        ("zip" ,zip)
        ("zlib" ,zlib)))
+    (native-inputs
+     (if (string-prefix? "aarch64" (or (%current-system)
+                                       (%current-target-system)))
+         ;; Additional packages needed for autoreconf.
+         `(("autoconf" ,autoconf)
+           ("automake" ,automake)
+           ("libtool" ,libtool))
+         '()))
     (home-page "http://jamvm.sourceforge.net/")
     (synopsis "Small Java Virtual Machine")
     (description "JamVM is a Java Virtual Machine conforming to the JVM
@@ -697,7 +716,8 @@ machine.")))
                 (file-name (string-append "classpath-" version "-checkout"))
                 (sha256
                  (base32
-                  "1v2rww76ww322mpg3s12a1kkc6gkp31bm9gcxs532h0wq285fiw4"))))
+                  "1v2rww76ww322mpg3s12a1kkc6gkp31bm9gcxs532h0wq285fiw4"))
+                (patches (search-patches "classpath-aarch64-support.patch"))))
       (arguments
        `(#:make-flags
          ;; Ensure that the initial heap size is smaller than the maximum
@@ -763,7 +783,9 @@ machine.")))
                (base32
                 "1nl0zxz8y5x8gwsrm7n32bry4dx8x70p8z3s9jbdvs8avyb8whkn"))
               (patches
-               (search-patches "jamvm-2.0.0-disable-branch-patching.patch"))
+               (search-patches "jamvm-2.0.0-disable-branch-patching.patch"
+                               "jamvm-2.0.0-opcode-guard.patch"
+                               "jamvm-2.0.0-aarch64-support.patch"))
               (snippet
                '(begin
                   ;; Remove precompiled software.
@@ -771,9 +793,10 @@ machine.")))
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list (string-append "--with-classpath-install-dir="
-                            (assoc-ref %build-inputs "classpath")))))
+     (substitute-keyword-arguments (package-arguments jamvm-1-bootstrap)
+       ((#:configure-flags _)
+        '(list (string-append "--with-classpath-install-dir="
+                              (assoc-ref %build-inputs "classpath"))))))
     (inputs
      `(("classpath" ,classpath-devel)
        ("ecj-javac-wrapper" ,ecj-javac-wrapper)
@@ -804,6 +827,8 @@ machine.")))
               (sha256
                (base32
                 "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
+              (patches (search-patches
+                        "icedtea-6-extend-hotspot-aarch64-support.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -832,7 +857,8 @@ machine.")))
        `("--enable-bootstrap"
          "--enable-nss"
          "--without-rhino"
-         "--with-parallel-jobs"
+         ,(string-append "--with-parallel-jobs="
+                         (number->string (parallel-job-count)))
          "--disable-downloading"
          "--disable-tests"
          ,(string-append "--with-ecj="
@@ -865,11 +891,8 @@ machine.")))
                             (assoc-ref inputs
                                        (string-append part "-src"))
                             part))
-                         '("jdk" "corba"
+                         '("jdk" "hotspot" "corba"
                            "langtools" "jaxp" "jaxws")))
-             (with-directory-excursion "openjdk"
-               (invoke "tar" "xvf" (assoc-ref inputs "hotspot-src"))
-               (rename-file "hg-checkout" "hotspot"))
              (substitute* "patches/freetypeversion.patch"
                (("REQUIRED_FREETYPE_VERSION = 2.2.1")
                 "REQUIRED_FREETYPE_VERSION = 2.10.1"))
@@ -1095,9 +1118,7 @@ machine.")))
                  (changeset "jdk6-b41")))
            (sha256
             (base32
-             "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))
-           (patches
-            (search-patches "icedtea-6-hotspot-gcc-segfault-workaround.patch"))))
+             "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))))
        ("corba-src"
         ,(origin
            (method hg-fetch)
@@ -1208,6 +1229,8 @@ bootstrapping purposes.")
            "--enable-bootstrap"
            "--enable-nss"
            "--without-rhino"
+           ,(string-append "--with-parallel-jobs="
+                           (number->string (parallel-job-count)))
            "--disable-downloading"
            "--disable-tests"        ;they are run in the check phase instead
            "--with-openjdk-src-dir=./openjdk.src"
@@ -1636,7 +1659,7 @@ bootstrapping purposes.")
               (base32
                "17bdv39n4lh8l5737c96f3xgamx4y305m067p01cywgp7zaddqws"))
              (patches (search-patches
-                       "icedtea-7-hotspot-gcc-segfault-workaround.patch"))))
+                       "icedtea-7-hotspot-aarch64-use-c++98.patch"))))
          ("ant" ,ant-bootstrap)
          ("attr" ,attr)
          ("coreutils" ,coreutils)
@@ -1739,6 +1762,8 @@ IcedTea build harness.")
                  `( ;;"--disable-bootstrap"
                    "--enable-bootstrap"
                    "--enable-nss"
+                   ,(string-append "--with-parallel-jobs="
+                                   (number->string (parallel-job-count)))
                    "--disable-downloading"
                    "--disable-system-pcsc"
                    "--disable-system-sctp"
@@ -1830,16 +1855,8 @@ new Date();"))
           ,(drop "langtools"
                  "15wizy123vhk40chl1b4p552jf2pw2hdww0myf11qab425axz4nw"))
          ("hotspot-drop"
-          ,(origin
-             (method url-fetch)
-             (uri (string-append
-                   "http://icedtea.classpath.org/download/drops"
-                   "/icedtea8/" version "/hotspot.tar.xz"))
-             (sha256
-              (base32
-               "1ciz1w9j0kz7s1dxdhyqq71nla9icyz6qvn0b9z2zgkklqa98qmm"))
-             (patches (search-patches
-                       "icedtea-7-hotspot-gcc-segfault-workaround.patch"))))
+          ,(drop "hotspot"
+                 "1ciz1w9j0kz7s1dxdhyqq71nla9icyz6qvn0b9z2zgkklqa98qmm"))
          ("nashorn-drop"
           ,(drop "nashorn"
                  "19pzl3ppaw8j6r5cnyp8qiw3hxijh3hdc46l39g5yfhdl4pr4hpa"))
@@ -2409,14 +2426,14 @@ new Date();"))
 (define-public ant/java8
   (package (inherit ant-bootstrap)
     (name "ant")
-    (version "1.10.1")
+    (version "1.10.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/ant/source/apache-ant-"
                                   version "-src.tar.gz"))
               (sha256
                (base32
-                "10p3dh77lkzzzcy32dk9azljixzadp46fggjfbvgkl8mmb8cxxv8"))
+                "066k2isig5xm70cihj9p73hkp5w7h5zbfqz5kxb6cwr9cb86xl2k"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -2444,7 +2461,7 @@ new Date();"))
                ;; "check" phase, because the dependency on "test-jar" would always
                ;; result in the tests to be run.
                (substitute* "build.xml"
-                 (("depends=\"jars,test-jar\"") "depends=\"jars\""))
+                 (("depends=\"jars,test-jar") "depends=\"jars"))
                (invoke "bash" "bootstrap.sh"
                        (string-append "-Ddist.dir="
                                       (assoc-ref outputs "out")))))))))
@@ -2457,14 +2474,14 @@ new Date();"))
 ;; requires Java 8.
 (define-public ant
   (package (inherit ant/java8)
-    (version "1.9.9")
+    (version "1.9.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/ant/source/apache-ant-"
                                   version "-src.tar.gz"))
               (sha256
                (base32
-                "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n"))))
+                "1xy30f1w5gaqk6g3f0vw7ygix4rb6032qkcw42y4z8wd9jihgygd"))))
     (native-inputs
      `(("jdk" ,icedtea-7 "jdk")
        ("zip" ,zip)
@@ -5118,6 +5135,72 @@ including java-asm.")
        ((#:tests? _) #f)))
     (native-inputs `())))
 
+(define-public java-asm-8
+  (package
+    (inherit java-asm)
+    (version "8.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://gitlab.ow2.org/asm/asm")
+                     (commit (string-append
+                               "ASM_" (string-join (string-split version #\.)
+                                                   "_")))))
+              (file-name (git-file-name "java-asm" version))
+              (sha256
+               (base32
+                "1s6j27zc1i76gh891w2g48b1c3abp9w8zp5j54yb1vm5h8djkd69"))))
+    (arguments
+     `(#:jar-name "asm8.jar"
+       #:source-dir "asm/src/main/java"
+       #:test-dir "asm/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (propagated-inputs '())
+    (native-inputs '())))
+
+(define-public java-asm-tree-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-tree")
+    (arguments
+     `(#:jar-name "asm-tree.jar"
+       #:source-dir "asm-tree/src/main/java"
+       #:test-dir "asm-tree/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)))))
+
+(define-public java-asm-analysis-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-analysis")
+    (arguments
+     `(#:jar-name "asm-analysis.jar"
+       #:source-dir "asm-analysis/src/main/java"
+       #:test-dir "asm-analysis/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)
+       ("java-asm-tree" ,java-asm-tree-8)))))
+
+(define-public java-asm-util-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-util")
+    (arguments
+     `(#:jar-name "asm-util8.jar"
+       #:source-dir "asm-util/src/main/java"
+       #:test-dir "asm-util/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)
+       ("java-asm-analysis" ,java-asm-analysis-8)
+       ("java-asm-tree" ,java-asm-tree-8)))))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
@@ -8372,6 +8455,184 @@ text or binary files.  It's widely used to build languages, tools, and
 frameworks.  From a grammar, ANTLR generates a parser that can build and walk
 parse trees.")))
 
+(define-public java-antlr4-runtime-4.1
+  (package
+    (inherit java-antlr4-runtime)
+    (version "4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/antlr/antlr4")
+                     (commit version)))
+              (file-name (git-file-name "antlr4" version))
+              (sha256
+               (base32
+                "1i8hmx5an58cjyvhji0xgpvd6lq00z1k1mjys025q2wqc25wv4c1"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments java-antlr4-runtime)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'chmod
+             (lambda _
+               (chmod "build.xml" #o644)
+               #t))))))
+    (inputs
+     `(("java-treelayout" ,java-treelayout)))))
+
+(define-public antlr4-4.1
+  (package
+    (inherit antlr4)
+    (version (package-version java-antlr4-runtime-4.1))
+    (source (package-source java-antlr4-runtime-4.1))
+    (arguments
+      (substitute-keyword-arguments (package-arguments antlr4)
+        ((#:test-dir _)
+         "tool/test")
+        ((#:test-exclude excludes)
+         `(list "**/TestParseErrors.java"
+                "**/TestTopologicalSort.java"
+                ,@excludes))
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (delete 'generate-unicode)
+            (replace 'check
+              (lambda _
+                (invoke "ant" "check")
+                #t))
+            (add-before 'configure 'chmod
+              (lambda _
+                (chmod "build.xml" #o644)
+                #t))
+            (delete 'remove-graphemes)
+            (delete 'remove-unrelated-languages)
+            (delete 'generate-test-parsers)))))
+    (inputs
+      (alist-replace
+        "java-antlr4-runtime" (list java-antlr4-runtime-4.1)
+        (package-inputs antlr4)))))
+
+(define-public java-tunnelvisionlabs-antlr4-runtime-annotations
+  (package
+    (inherit java-antlr4-runtime)
+    (name "java-tunnelvisionlabs-antlr4-runtime-annotations")
+    (version "4.7.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/tunnelvisionlabs/antlr4")
+                     (commit (string-append version "-opt"))))
+              (file-name (git-file-name "java-tunnelvisionlabs-antlr4" version))
+              (sha256
+               (base32
+                "1mf2lvvsszpialsk23ma83pwp50nd32lrbjpa847zlm5gmranbr8"))
+              (patches
+                (search-patches "java-antlr4-Add-standalone-generator.patch"
+                                "java-tunnelvisionlabs-antlr-code-too-large.patch"))))
+    (arguments
+     `(#:jar-name "java-antlr4-runtime-annotations.jar"
+       #:source-dir "runtime/JavaAnnotations/src"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'copy-resources
+           (lambda _
+             (copy-recursively "runtime/JavaAnnotations/resources"
+                               "build/classes")
+             #t))
+         (add-after 'copy-resources 'rebuild-jar
+           (lambda _
+             (invoke "ant" "jar")
+             #t)))))
+    (inputs '())
+    (native-inputs '())
+    (synopsis "Annotations for ANTLR's runtime library")
+    (description "This package contains annotations used during the build of
+the runtime library of ANTLR.")))
+
+;; the runtime of this library requires a lexer that is generated by antlr4.
+;; However, antlr4 itself requires this library at build and run-time.  We
+;; use antlr4@4.1, the closest version of antlr that doesn't need this
+;; bootstrap process, to generate the lexer.  The generated lexer is built
+;; for the 4.1 runtime, which is slightly different from this runtime.
+;; So, we build the runtime with antlr 4.1, with a broken xml lexer, that we
+;; use to build antlr4.  We then re-use this antlr4 to build the runtime, and
+;; the proper, working, runtime to build antlr4 again.
+(define java-tunnelvisionlabs-antlr4-runtime-bootstrap
+  (package
+    (inherit java-antlr4-runtime)
+    (name "java-tunnelvisionlabs-antlr4-runtime")
+    (version (package-version java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (source (package-source java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (arguments
+     `(#:jar-name "java-antlr4-runtime.jar"
+       #:source-dir "runtime/Java/src"
+       #:tests? #f; tests require antlr4, but antlr4 depends on this package
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-xpath-lexer
+           (lambda _
+             (invoke "antlr4" "-lib" "runtime/Java/src/org/antlr/v4/runtime/tree/xpath"
+                     "-visitor" "-no-listener"
+                     "-package" "org.antlr.v4.runtime.tree.xpath"
+                     "runtime/Java/src/org/antlr/v4/runtime/tree/xpath/XPathLexer.g4")
+             ;; Generated code is for an incompatible version of the runtime
+             (substitute* "runtime/Java/src/org/antlr/v4/runtime/tree/xpath/XPathLexer.java"
+               (("LexerATNSimulator\\(this,_ATN,_decisionToDFA,_sharedContextCache\\)")
+                "LexerATNSimulator(this,_ATN)"))
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "runtime/Java/src/main/dot"
+                               "build/classes")
+             #t)))))
+    (native-inputs
+     `(("antlr4" ,antlr4-4.1)
+       ("java-tunnelvisionlabs-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)))))
+
+(define java-tunnelvisionlabs-antlr4-bootstrap
+  (package
+    (inherit antlr4)
+    (name "java-tunnelvisionlabs-antlr4")
+    (version (package-version java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (source (package-source java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (arguments
+     (substitute-keyword-arguments (package-arguments antlr4)
+       ((#:test-dir _)
+        "tool/test:runtime-testsuite/src")
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'remove-unrelated-languages)
+           (delete 'remove-graphemes)
+           (delete 'generate-test-parsers)
+           (delete 'check)))))
+    (native-inputs '())
+    (inputs
+     `(("antlr3" ,antlr3)
+       ("java-antlr4-runtime" ,java-tunnelvisionlabs-antlr4-runtime-bootstrap)
+       ("java-tunnelvisionlabs-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)
+       ("java-icu4j" ,java-icu4j)
+       ("java-jsonp-api" ,java-jsonp-api)
+       ("java-stringtemplate" ,java-stringtemplate)
+       ("java-treelayout" ,java-treelayout)))))
+
+(define-public java-tunnelvisionlabs-antlr4-runtime
+  (package
+    (inherit java-tunnelvisionlabs-antlr4-runtime-bootstrap)
+    (native-inputs
+      (alist-replace
+        "antlr4" (list java-tunnelvisionlabs-antlr4-bootstrap)
+        (package-native-inputs java-tunnelvisionlabs-antlr4-runtime-bootstrap)))))
+
+(define-public java-tunnelvisionlabs-antlr4
+  (package
+    (inherit java-tunnelvisionlabs-antlr4-bootstrap)
+    (inputs
+      (alist-replace
+        "java-antlr4-runtime" (list java-tunnelvisionlabs-antlr4-runtime)
+        (package-inputs java-tunnelvisionlabs-antlr4-bootstrap)))))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
@@ -13183,3 +13444,98 @@ in Java, usable from Groovy, Kotlin, Scala, etc.")
 used in JVM-based languages.  They serve as an additional documentation and
 can be interpreted by IDEs and static analysis tools to improve code analysis.")
     (license license:expat)))
+
+(define-public java-javaparser
+  (package
+    (name "java-javaparser")
+    (version "3.16.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/javaparser/javaparser")
+                     (commit (string-append "javaparser-parent-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a4jk12ffa31fa0y8vda0739vpfj1206p0nha842b7bixbvwamv9"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file
+                            (find-files "." "\\.jar$"))
+                  #t))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f; tests require jbehave and junit5
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fill-template
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main"
+               (copy-file "java-templates/com/github/javaparser/JavaParserBuild.java"
+                          "java/com/github/javaparser/JavaParserBuild.java")
+               (substitute* "java/com/github/javaparser/JavaParserBuild.java"
+                 (("\\$\\{project.version\\}") ,version)
+                 (("\\$\\{project.name\\}") "javaparser")
+                 (("\\$\\{project.build.finalName\\}") "javaparser")
+                 (("\\$\\{maven.version\\}") "fake")
+                 (("\\$\\{maven.build.version\\}") "fake")
+                 (("\\$\\{build.timestamp\\}") "0")
+                 (("\\$\\{java.vendor\\}") "Guix")
+                 (("\\$\\{java.vendor.url\\}") "https://gnu.org/software/guix")
+                 (("\\$\\{java.version\\}") "1.8")
+                 (("\\$\\{os.arch\\}") "any")
+                 (("\\$\\{os.name\\}") "GuixSD")
+                 (("\\$\\{os.version\\}") "not available")))
+             #t))
+         (add-before 'build 'generate-javacc
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main/java"
+               (invoke "java" "javacc" "../javacc/java.jj"))
+             #t))
+         (add-before 'build 'copy-javacc-support
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main"
+               (copy-recursively "javacc-support" "java"))
+             #t))
+         (replace 'build
+           (lambda _
+             (define (build name)
+               (format #t "Building ~a~%" name)
+               (delete-file-recursively "build/classes")
+               (mkdir-p "build/classes")
+               (apply invoke "javac"
+                      "-cp" (string-append (getenv "CLASSPATH") ":"
+                                           (string-join (find-files "build/jar" ".")
+                                                        ":"))
+                      "-d" "build/classes"
+                      (find-files (string-append name "/src/main/java")
+                                  ".*.java"))
+               (invoke "jar" "-cf" (string-append "build/jar/" name ".jar")
+                       "-C" "build/classes" "."))
+             (mkdir-p "build/classes")
+             (mkdir-p "build/test-classes")
+             (mkdir-p "build/jar")
+             (build "javaparser-core")
+             (build "javaparser-core-serialization")
+             (build "javaparser-core-generators")
+             (build "javaparser-core-metamodel-generator")
+             (build "javaparser-symbol-solver-core")
+             #t))
+         (replace 'install
+           (install-jars "build/jar")))))
+    (inputs
+     `(("java-guava" ,java-guava)
+       ("java-jboss-javassist" ,java-jboss-javassist)
+       ("java-jsonp-api" ,java-jsonp-api)))
+    (native-inputs
+     `(("javacc" ,javacc)))
+    (home-page "http://javaparser.org/")
+    (synopsis "Parser for Java")
+    (description
+     "This project contains a set of libraries implementing a Java 1.0 - Java
+11 Parser with advanced analysis functionalities.")
+    (license (list
+               ;; either lgpl or asl
+               license:lgpl3+
+               license:asl2.0))))
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index d80e59cdeb..546d8caa9b 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -447,7 +447,7 @@ illustrate project schedules.")
        ("openexr" ,openexr)
        ("perl" ,perl)
        ("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase-for-krita)
+       ("qtbase" ,qtbase)
        ("qtdeclarative" ,qtdeclarative)
        ("qtmultimedia" ,qtmultimedia)
        ("qtsvg" ,qtsvg)
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index 6673916ebb..b3dc96f925 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -437,7 +437,7 @@ alternatives. In compilers, this can reduce the cascade of secondary errors.")
        ("libxrender" ,libxrender)
        ("libxslt" ,libxslt)
        ("lzo" ,lzo)
-       ("mariadb" ,mariadb "lib")
+       ("mariadb-dev" ,mariadb "lib")
        ("mariadb-dev" ,mariadb "dev")
        ("openssl" ,openssl)
        ("pcre" ,pcre)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index cce1f70ffd..7bc9a46d1f 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -157,6 +157,7 @@
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module (guix utils)
+  #:use-module (guix deprecation)    ;for libcap/next
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-2)
   #:use-module (srfi srfi-26)
@@ -1285,7 +1286,7 @@ application by hooking GStreamer into the loopback device.")
 (define-public linux-pam
   (package
     (name "linux-pam")
-    (version "1.3.1")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
@@ -1294,7 +1295,7 @@ application by hooking GStreamer into the loopback device.")
              version "/Linux-PAM-" version ".tar.xz"))
        (sha256
         (base32
-         "1nyh9kdi3knhxcbv5v4snya0g3gff0m671lnvqcbygw3rm77mx7g"))
+         "0d6hvz6lpkac08hw5wnlhfdm0fhqd0n6jf6v7fz3jhg6a6694vfd"))
        (patches (search-patches "linux-pam-no-setfsuid.patch"))))
 
     (build-system gnu-build-system)
@@ -2037,7 +2038,7 @@ intercept and print the system calls executed by the program.")
 (define-public alsa-lib
   (package
     (name "alsa-lib")
-    (version "1.2.2")
+    (version "1.2.3.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2045,7 +2046,7 @@ intercept and print the system calls executed by the program.")
                    version ".tar.bz2"))
              (sha256
               (base32
-               "1v5kb8jyvrpkvvq7dq8hfbmcj68lml97i4s0prxpfx2mh3c57s6q"))))
+               "05dyk856ppvqymazyk1cmpln53g88cq1wjpnsygqrvnamyvwa7z8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
@@ -2061,14 +2062,14 @@ MIDI functionality to the Linux-based operating system.")
 (define-public alsa-utils
   (package
     (name "alsa-utils")
-    (version "1.2.2")
+    (version "1.2.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://ftp.alsa-project.org/pub/utils/"
                                  name "-" version ".tar.bz2"))
              (sha256
               (base32
-               "1wz460by17rmxrcydn583rd4lhj6wlvqs6x1j5pdzxn5g3app024"))))
+               "1ai1z4kf91b1m3qrpwqkc1af5vm2fkdkknqv95xdwf19q94aw6gz"))))
     (build-system gnu-build-system)
     (arguments
      ;; XXX: Disable man page creation until we have DocBook.
@@ -2400,7 +2401,7 @@ network hardware types (plipconfig, slattach) and advanced aspects of IP
 configuration (iptunnel, ipmaddr).")
       (license license:gpl2+))))
 
-(define-public libcap
+(define-public libcap-2.31
   (package
     (name "libcap")
     (version "2.31")
@@ -2439,12 +2440,13 @@ Linux-based operating systems.")
     ;; License is BSD-3 or GPLv2, at the user's choice.
     (license license:gpl2)))
 
-;; libcap 2.31 causes problems for 'fakeroot', so provide this newer variant.
+;; libcap 2.31 has problems with newer kernels, so provide this newer variant.
+;; Keep the old libcap around to avoid rebuilding 'coreutils' and 'avahi'.
 ;; To be merged with libcap on the next rebuild cycle.
-(define-public libcap/next
+(define-public libcap
   (package
-    (inherit libcap)
-    (version "2.34")
+    (inherit libcap-2.31)
+    (version "2.44")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2452,7 +2454,22 @@ Linux-based operating systems.")
                     "libcap2/libcap-" version ".tar.xz"))
               (sha256
                (base32
-                "048n1gy2p48vl9hkrr9wymfxxcpwj2aslz2bv79nhl4m2lhd9kdf"))))))
+                "1qf80lifygbnxwvqjf8jz5j24n6fqqx4ixnkbf76xs2vrmcq664j"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libcap-2.31)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'configure
+             (lambda _
+               ;; Add $libdir to the RUNPATH of executables.
+               (substitute* "Make.Rules"
+                 (("LDFLAGS \\?= #-g")
+                  (string-append "LDFLAGS ?= -Wl,-rpath="
+                                 %output "/lib")))
+               #t))))))))
+
+(define-deprecated libcap/next libcap)
+(export libcap/next)
 
 (define-public bridge-utils
   (package
@@ -4619,7 +4636,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
 (define-public bluez
   (package
     (name "bluez")
-    (version "5.54")
+    (version "5.55")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4627,7 +4644,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1p2ncvjz6alr9n3l5wvq2arqgc7xjs6dqyar1l9jp0z8cfgapkb8"))))
+                "124v9s4y1s7s6klx5vlmzpk1jlr4x84ch7r7scm7x2f42dqp2qw8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -4636,6 +4653,8 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                "--localstatedir=/var"
                "--enable-library"
                "--disable-systemd"
+               ;; TODO: is this needed?  Not installed by default since 5.55.
+               "--enable-hid2hci"
                ;; Install dbus/udev files to the correct location.
                (string-append "--with-dbusconfdir=" out "/etc")
                (string-append "--with-udevdir=" out "/lib/udev")))
@@ -7073,7 +7092,7 @@ the superuser to make device nodes.")
        ("xz" ,xz)))
     (inputs
      `(("acl" ,acl)
-       ("libcap" ,libcap/next)
+       ("libcap" ,libcap)
        ("util-linux" ,util-linux)
        ("sed" ,sed)
        ("coreutils" ,coreutils)))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index fb85416e38..ba0bad252c 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -75,6 +75,7 @@
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19))
 
 (define-public sbcl-alexandria
@@ -321,7 +322,18 @@ streams which are similar to string streams.")
        (sha256
         (base32 "0dwvr29diqzcg5n6jvbk2rnd90i05l7n828hhw99khmqd0kz7xsi"))))
     (build-system asdf-build-system/sbcl)
-    (native-inputs `(("flexi-streams" ,sbcl-flexi-streams)))
+    (native-inputs
+     `(("flexi-streams" ,sbcl-flexi-streams)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-ppcre-unicode
+           ;; cl-ppcre and cl-ppcre-unicode are put in different packages
+           ;; to work around the circular dependency between edicl/cl-ppcre
+           ;; and edicl/cl-unicode.
+           (lambda _
+             (delete-file "cl-ppcre-unicode.asd")
+             #t)))))
     (synopsis "Portable regular expression library for Common Lisp")
     (description "CL-PPCRE is a portable regular expression library for Common
 Lisp, which is compatible with perl.  It is pretty fast, thread-safe, and
@@ -335,9 +347,9 @@ compatible with ANSI-compliant Common Lisp implementations.")
 (define-public ecl-cl-ppcre
   (sbcl-package->ecl-package sbcl-cl-ppcre))
 
-(define sbcl-cl-unicode-base
+(define-public sbcl-cl-unicode
   (package
-    (name "sbcl-cl-unicode-base")
+    (name "sbcl-cl-unicode")
     (version "0.1.6")
     (source (origin
               (method git-fetch)
@@ -349,9 +361,8 @@ compatible with ANSI-compliant Common Lisp implementations.")
                (base32
                 "0ykx2s9lqfl74p1px0ik3l2izd1fc9jd1b4ra68s5x34rvjy0hza"))))
     (build-system asdf-build-system/sbcl)
-    (arguments
-     '(#:asd-file "cl-unicode.asd"
-       #:asd-system-name "cl-unicode/base"))
+    (native-inputs
+     `(("flexi-streams" ,sbcl-flexi-streams)))
     (inputs
      `(("cl-ppcre" ,sbcl-cl-ppcre)))
     (home-page "http://weitz.de/cl-unicode/")
@@ -361,23 +372,36 @@ is compatible with perl.  It is pretty fast, thread-safe, and compatible with
 ANSI-compliant Common Lisp implementations.")
     (license license:bsd-2)))
 
-(define-public sbcl-cl-unicode
-  (package
-    (inherit sbcl-cl-unicode-base)
-    (name "sbcl-cl-unicode")
-    (inputs
-     `(("cl-unicode/base" ,sbcl-cl-unicode-base)
-       ,@(package-inputs sbcl-cl-unicode-base)))
-    (native-inputs
-     `(("flexi-streams" ,sbcl-flexi-streams)))
-    (arguments '())))
-
 (define-public ecl-cl-unicode
   (sbcl-package->ecl-package sbcl-cl-unicode))
 
 (define-public cl-unicode
   (sbcl-package->cl-source-package sbcl-cl-unicode))
 
+(define-public sbcl-cl-ppcre-unicode
+  (package (inherit sbcl-cl-ppcre)
+    (name "sbcl-cl-ppcre-unicode")
+    (inputs
+     `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
+       ("sbcl-cl-unicode" ,sbcl-cl-unicode)))
+    (arguments
+     `(#:tests? #f ; tests fail with "Component :CL-PPCRE-TEST not found"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-ppcre
+           ;; cl-ppcre and cl-ppcre-unicode are put in different packages
+           ;; to work around the circular dependency between edicl/cl-ppcre
+           ;; and edicl/cl-unicode.
+           (lambda _
+             (delete-file "cl-ppcre.asd")
+             #t)))))))
+
+(define-public cl-ppcre-unicode
+  (sbcl-package->cl-source-package sbcl-cl-ppcre-unicode))
+
+(define-public ecl-cl-ppcre-unicode
+  (sbcl-package->ecl-package sbcl-cl-ppcre-unicode))
+
 (define-public sbcl-zpb-ttf
   (package
     (name "sbcl-zpb-ttf")
@@ -407,9 +431,9 @@ file.")
 (define-public cl-zpb-ttf
   (sbcl-package->cl-source-package sbcl-zpb-ttf))
 
-(define-public sbcl-cl-aa
+(define-public sbcl-cl-vectors
   (package
-    (name "sbcl-cl-aa")
+    (name "sbcl-cl-vectors")
     (version "0.1.5")
     (source
      (origin
@@ -420,67 +444,17 @@ file.")
         (base32
          "04lhwi0kq8pkwhgd885pk80m1cp9sfvjjn5zj70s1dnckibhdmqh"))))
     (build-system asdf-build-system/sbcl)
-    (arguments '(#:asd-file "cl-aa.asd"))
-    (home-page "http://projects.tuxee.net/cl-vectors/")
-    (synopsis "Polygon rasterizer")
-    (description
-     "This is a Common Lisp library implementing the AA polygon rasterization
-algorithm from the @url{http://antigrain.com, Antigrain} project.")
-    (license license:expat)))
-
-(define-public ecl-cl-aa
-  (sbcl-package->ecl-package sbcl-cl-aa))
-
-(define-public cl-aa
-  (sbcl-package->cl-source-package sbcl-cl-aa))
-
-(define-public sbcl-cl-paths
-  (package
-    (inherit sbcl-cl-aa)
-    (name "sbcl-cl-paths")
-    (arguments '(#:asd-file "cl-paths.asd"))
-    (synopsis "Facilities to create and manipulate vectorial paths")
-    (description
-     "This package provides facilities to create and manipulate vectorial
-paths.")))
-
-(define-public ecl-cl-paths
-  (sbcl-package->ecl-package sbcl-cl-paths))
-
-(define-public cl-paths
-  (sbcl-package->cl-source-package sbcl-cl-paths))
-
-(define-public sbcl-cl-paths-ttf
-  (package
-    (inherit sbcl-cl-aa)
-    (name "sbcl-cl-paths-ttf")
-    (arguments '(#:asd-file "cl-paths-ttf.asd"))
     (inputs
-     `(("cl-paths" ,sbcl-cl-paths)
-       ("zpb-ttf" ,sbcl-zpb-ttf)))
-    (synopsis "Facilities to create and manipulate vectorial paths")
-    (description
-     "This package provides facilities to create and manipulate vectorial
-paths.")))
-
-(define-public ecl-cl-paths-ttf
-  (sbcl-package->ecl-package sbcl-cl-paths-ttf))
-
-(define-public cl-paths-ttf
-  (sbcl-package->cl-source-package sbcl-cl-paths-ttf))
-
-(define-public sbcl-cl-vectors
-  (package
-    (inherit sbcl-cl-aa)
-    (name "sbcl-cl-vectors")
-    (arguments '(#:asd-file "cl-vectors.asd"))
-    (inputs
-     `(("cl-aa" ,sbcl-cl-aa)
-       ("cl-paths" ,sbcl-cl-paths)))
+     `(("zpb-ttf" ,sbcl-zpb-ttf)))
+    (arguments
+     '(#:asd-systems '("cl-vectors"
+                       "cl-paths-ttf")))
+    (home-page "http://projects.tuxee.net/cl-vectors/")
     (synopsis "Create, transform and render anti-aliased vectorial paths")
     (description
      "This is a pure Common Lisp library to create, transform and render
-anti-aliased vectorial paths.")))
+anti-aliased vectorial paths.")
+    (license license:expat)))
 
 (define-public ecl-cl-vectors
   (sbcl-package->ecl-package sbcl-cl-vectors))
@@ -508,7 +482,6 @@ anti-aliased vectorial paths.")))
       (build-system asdf-build-system/sbcl)
       (arguments
        '(#:tests? #f           ; spatial-trees.test requires spatial-trees.nns
-         #:asd-file "spatial-trees.asd"
          #:test-asd-file "spatial-trees.test.asd"))
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
@@ -650,7 +623,6 @@ from other CLXes around the net.")
        `(("clx" ,sbcl-clx)
          ("zpb-ttf" ,sbcl-zpb-ttf)
          ("cl-vectors" ,sbcl-cl-vectors)
-         ("cl-paths-ttf" ,sbcl-cl-paths-ttf)
          ("cl-fad" ,sbcl-cl-fad)
          ("cl-store" ,sbcl-cl-store)
          ("trivial-features" ,sbcl-trivial-features)))
@@ -660,30 +632,19 @@ from other CLXes around the net.")
 antialiased TrueType font rendering using CLX and XRender extension.")
       (license license:expat))))
 
-(define-public sbcl-cl-ppcre-unicode
-  (package (inherit sbcl-cl-ppcre)
-    (name "sbcl-cl-ppcre-unicode")
-    (arguments
-     `(#:tests? #f ; tests fail with "Component :CL-PPCRE-TEST not found"
-       #:asd-file "cl-ppcre-unicode.asd"))
-    (inputs
-     `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-       ("sbcl-cl-unicode" ,sbcl-cl-unicode)))))
+(define-public cl-clx-truetype
+  (sbcl-package->cl-source-package sbcl-clx-truetype))
 
-(define-public ecl-cl-ppcre-unicode
-  (sbcl-package->ecl-package sbcl-cl-ppcre-unicode))
+(define-public ecl-clx-truetype
+  (sbcl-package->ecl-package sbcl-clx-truetype))
 
-;; The slynk that users expect to install includes all of slynk's contrib
-;; modules.  Therefore, we build the base module and all contribs first; then
-;; we expose the union of these as `sbcl-slynk'.  The following variable
-;; describes the base module.
-(define sbcl-slynk-boot0
+(define-public sbcl-slynk
   (let ((revision "3")
         ;; Update together with emacs-sly.
         (commit "6a2f543cb21f14104c2253af5a1427b884a987ae"))
     (package
-      (name "sbcl-slynk-boot0")
-      (version (string-append "1.0.0-beta-" revision "." (string-take commit 7)))
+      (name "sbcl-slynk")
+      (version (git-version "1.0.0-beta" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -693,7 +654,7 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (commit commit)))
          (sha256
           (base32 "0wbpg9p9yg2hd62l15pvy50fk3hndq5zzyqlyyf04g368s895144"))
-         (file-name (string-append "slynk-" version "-checkout"))
+         (file-name (git-file-name "slynk" version))
          (modules '((guix build utils)
                     (ice-9 ftw)))
          (snippet
@@ -724,9 +685,40 @@ antialiased TrueType font rendering using CLX and XRender extension.")
                        (scandir "slynk"))
              #t))))
       (build-system asdf-build-system/sbcl)
+      (outputs '("out" "image"))
       (arguments
        `(#:tests? #f ; No test suite
-         #:asd-system-name "slynk"))
+         #:asd-systems '("slynk"
+                         "slynk/arglists"
+                         "slynk/util"
+                         "slynk/fancy-inspector"
+                         "slynk/package-fu"
+                         "slynk/mrepl"
+                         "slynk/trace-dialog"
+                         "slynk/profiler"
+                         "slynk/stickers"
+                         "slynk/indentation"
+                         "slynk/retro")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'create-asdf-configuration 'build-image
+             (lambda* (#:key outputs #:allow-other-keys)
+               (build-image (string-append
+                             (assoc-ref %outputs "image")
+                             "/bin/slynk")
+                            %outputs
+                            #:dependencies '("slynk"
+                                             "slynk/arglists"
+                                             "slynk/util"
+                                             "slynk/fancy-inspector"
+                                             "slynk/package-fu"
+                                             "slynk/mrepl"
+                                             "slynk/trace-dialog"
+                                             "slynk/profiler"
+                                             "slynk/stickers"
+                                             "slynk/indentation"
+                                             "slynk/retro"))
+               #t)))))
       (synopsis "Common Lisp IDE for Emacs")
       (description "SLY is a fork of SLIME, an IDE backend for Common Lisp.
 It also features a completely redesigned REPL based on Emacs's own
@@ -738,216 +730,18 @@ multiple inspectors with independent history.")
       (properties `((cl-source-variant . ,(delay cl-slynk)))))))
 
 (define-public cl-slynk
-  (package
-    (inherit (sbcl-package->cl-source-package sbcl-slynk-boot0))
-    (name "cl-slynk")))
-
-(define ecl-slynk-boot0
-  (sbcl-package->ecl-package sbcl-slynk-boot0))
-
-(define sbcl-slynk-arglists
-  (package
-    (inherit sbcl-slynk-boot0)
-    (name "sbcl-slynk-arglists")
-    (inputs `(("slynk" ,sbcl-slynk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-boot0)
-       ((#:asd-file _ "") "slynk.asd")
-       ((#:asd-system-name _ #f) "slynk/arglists")))))
-
-(define ecl-slynk-arglists
-  (sbcl-package->ecl-package sbcl-slynk-arglists))
-
-(define sbcl-slynk-util
-  (package
-    (inherit sbcl-slynk-boot0)
-    (name "sbcl-slynk-util")
-    (inputs `(("slynk" ,sbcl-slynk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-boot0)
-       ((#:asd-file _ "") "slynk.asd")
-       ((#:asd-system-name _ #f) "slynk/util")))))
-
-(define ecl-slynk-util
-  (sbcl-package->ecl-package sbcl-slynk-util))
-
-(define sbcl-slynk-fancy-inspector
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-fancy-inspector")
-    (inputs `(("slynk-util" ,sbcl-slynk-util)
-              ,@(package-inputs sbcl-slynk-arglists)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/fancy-inspector")))))
-
-(define ecl-slynk-fancy-inspector
-  (sbcl-package->ecl-package sbcl-slynk-fancy-inspector))
-
-(define sbcl-slynk-package-fu
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-package-fu")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/package-fu")))))
-
-(define ecl-slynk-package-fu
-  (sbcl-package->ecl-package sbcl-slynk-package-fu))
-
-(define sbcl-slynk-mrepl
-  (package
-    (inherit sbcl-slynk-fancy-inspector)
-    (name "sbcl-slynk-mrepl")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/mrepl")))))
-
-(define ecl-slynk-mrepl
-  (sbcl-package->ecl-package sbcl-slynk-mrepl))
-
-(define sbcl-slynk-trace-dialog
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-trace-dialog")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/trace-dialog")))))
-
-(define ecl-slynk-trace-dialog
-  (sbcl-package->ecl-package sbcl-slynk-trace-dialog))
-
-(define sbcl-slynk-profiler
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-profiler")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/profiler")))))
-
-(define ecl-slynk-profiler
-  (sbcl-package->ecl-package sbcl-slynk-profiler))
-
-(define sbcl-slynk-stickers
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-stickers")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/stickers")))))
-
-(define ecl-slynk-stickers
-  (sbcl-package->ecl-package sbcl-slynk-stickers))
-
-(define sbcl-slynk-indentation
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-indentation")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/indentation")))))
-
-(define ecl-slynk-indentation
-  (sbcl-package->ecl-package sbcl-slynk-indentation))
-
-(define sbcl-slynk-retro
-  (package
-    (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-retro")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
-       ((#:asd-system-name _ #f) "slynk/retro")))))
-
-(define ecl-slynk-retro
-  (sbcl-package->ecl-package sbcl-slynk-retro))
-
-(define slynk-systems
-  '("slynk"
-    "slynk-util"
-    "slynk-arglists"
-    "slynk-fancy-inspector"
-    "slynk-package-fu"
-    "slynk-mrepl"
-    "slynk-profiler"
-    "slynk-trace-dialog"
-    "slynk-stickers"
-    "slynk-indentation"
-    "slynk-retro"))
-
-(define-public sbcl-slynk
-  (package
-    (inherit sbcl-slynk-boot0)
-    (name "sbcl-slynk")
-    (inputs
-     `(("slynk" ,sbcl-slynk-boot0)
-       ("slynk-util" ,sbcl-slynk-util)
-       ("slynk-arglists" ,sbcl-slynk-arglists)
-       ("slynk-fancy-inspector" ,sbcl-slynk-fancy-inspector)
-       ("slynk-package-fu" ,sbcl-slynk-package-fu)
-       ("slynk-mrepl" ,sbcl-slynk-mrepl)
-       ("slynk-profiler" ,sbcl-slynk-profiler)
-       ("slynk-trace-dialog" ,sbcl-slynk-trace-dialog)
-       ("slynk-stickers" ,sbcl-slynk-stickers)
-       ("slynk-indentation" ,sbcl-slynk-indentation)
-       ("slynk-retro" ,sbcl-slynk-retro)))
-    (native-inputs `(("sbcl" ,sbcl)))
-    (build-system trivial-build-system)
-    (source #f)
-    (outputs '("out" "image"))
-    (arguments
-     `(#:modules ((guix build union)
-                  (guix build utils)
-                  (guix build lisp-utils))
-       #:builder
-       (begin
-         (use-modules (ice-9 match)
-                      (srfi srfi-1)
-                      (guix build union)
-                      (guix build lisp-utils))
-
-         (union-build
-          (assoc-ref %outputs "out")
-          (filter-map
-           (match-lambda
-             ((name . path)
-              (if (string-prefix? "slynk" name) path #f)))
-           %build-inputs))
-
-         (prepend-to-source-registry
-          (string-append (assoc-ref %outputs "out") "//"))
-
-         (parameterize ((%lisp-type "sbcl")
-                        (%lisp (string-append (assoc-ref %build-inputs "sbcl")
-                                              "/bin/sbcl")))
-           (build-image (string-append
-                         (assoc-ref %outputs "image")
-                         "/bin/slynk")
-                        %outputs
-                        #:dependencies ',slynk-systems))
-         #t)))))
+  (sbcl-package->cl-source-package sbcl-slynk))
 
 (define-public ecl-slynk
-  (package
-    (inherit sbcl-slynk)
-    (name "ecl-slynk")
-    (inputs
-     (map (match-lambda
-            ((name pkg . _)
-             (list name (sbcl-package->ecl-package pkg))))
-          (package-inputs sbcl-slynk)))
-    (native-inputs '())
-    (outputs '("out"))
-    (arguments
-     '(#:modules ((guix build union))
-       #:builder
-       (begin
-         (use-modules (ice-9 match)
-                      (guix build union))
-         (match %build-inputs
-           (((names . paths) ...)
-            (union-build (assoc-ref %outputs "out")
-                         paths)
-            #t)))))))
+  (let ((pkg (sbcl-package->ecl-package sbcl-slynk)))
+    (package
+      (inherit pkg)
+      (outputs '("out"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'build-image))))))))
 
 (define-public sbcl-parse-js
   (let ((commit "fbadc6029bec7039602abfc06c73bb52970998f6")
@@ -975,6 +769,9 @@ JavaScript (ECMAScript 3).  It has basic support for ECMAScript 5.")
 (define-public cl-parse-js
   (sbcl-package->cl-source-package sbcl-parse-js))
 
+(define-public ecl-parse-js
+  (sbcl-package->ecl-package sbcl-parse-js))
+
 (define-public sbcl-parse-number
   (package
     (name "sbcl-parse-number")
@@ -1002,6 +799,9 @@ else @code{parse-number} signals an error of type @code{invalid-number}.")
 (define-public cl-parse-number
   (sbcl-package->cl-source-package sbcl-parse-number))
 
+(define-public ecl-parse-number
+  (sbcl-package->ecl-package sbcl-parse-number))
+
 (define-public sbcl-iterate
   (package
     (name "sbcl-iterate")
@@ -1080,6 +880,9 @@ compressor.  It works on data produced by @code{parse-js} to generate a
 (define-public cl-uglify-js
   (sbcl-package->cl-source-package sbcl-cl-uglify-js))
 
+(define-public ecl-cl-uglify-js
+  (sbcl-package->ecl-package sbcl-cl-uglify-js))
+
 (define-public uglify-js
   (package
     (inherit sbcl-cl-uglify-js)
@@ -1095,9 +898,14 @@ compressor.  It works on data produced by @code{parse-js} to generate a
          (with-output-to-file script
            (lambda _
              (format #t "#!~a/bin/sbcl --script
+
  (require :asdf)
- (push (truename \"~a/lib/sbcl\") asdf:*central-registry*)"
+ (asdf:initialize-source-registry
+  #p\"~a/etc/common-lisp/source-registry.conf.d/\")
+ (asdf:initialize-output-translations
+  #p\"~a/etc/common-lisp/asdf-output-translations.conf.d/\")"
                      (assoc-ref %build-inputs "sbcl")
+                     (assoc-ref %build-inputs "sbcl-cl-uglify-js")
                      (assoc-ref %build-inputs "sbcl-cl-uglify-js"))
              ;; FIXME: cannot use progn here because otherwise it fails to
              ;; find cl-uglify-js.
@@ -1174,7 +982,9 @@ utilities that make it even easier to manipulate text in Common Lisp.  It has
          (sha256
           (base32 "14pcahr8r2j3idhyy216zyw8jnj1dnrx0qbkkbdqkvwzign1ah4j"))))
       (build-system asdf-build-system/sbcl)
-      (arguments '(#:tests? #f))
+      (arguments
+       '(#:asd-files '("trivial-features.asd")
+         #:tests? #f))
       (home-page "https://cliki.net/trivial-features")
       (synopsis "Ensures consistency of @code{*FEATURES*} in Common Lisp")
       (description "Trivial-features ensures that @code{*FEATURES*} is
@@ -1293,8 +1103,7 @@ GNU libiconv, but completely written in Common Lisp.")
        (file-name (string-append "cl-yacc-" version "-checkout"))))
     (build-system asdf-build-system/sbcl)
     (arguments
-     `(#:asd-file "yacc.asd"
-       #:asd-system-name "yacc"))
+     `(#:asd-systems '("yacc")))
     (synopsis "LALR(1) parser generator for Common Lisp, similar in spirit to Yacc")
     (description
      "CL-Yacc is a LALR(1) parser generator for Common Lisp, similar in spirit
@@ -1569,9 +1378,11 @@ C, C++, Java, Python, Erlang, Haskell, Objective-C, Diff, Webkit.")
       (arguments
        ;; FIXME: We need to specify the name because the build-system thinks
        ;; "3" is a version marker.
-       `(#:asd-system-name "3bmd"))
+       `(#:asd-systems '("3bmd"
+                         "3bmd-ext-code-blocks")))
       (inputs
-       `(("esrap" ,sbcl-esrap)
+       `(("colorize" ,sbcl-colorize)
+         ("esrap" ,sbcl-esrap)
          ("split-sequence" ,sbcl-split-sequence)))
       (synopsis "Markdown processor in Command Lisp using esrap parser")
       (description
@@ -1586,29 +1397,6 @@ parsing, and grammar based on @command{peg-markdown}.")
 (define-public ecl-3bmd
   (sbcl-package->ecl-package sbcl-3bmd))
 
-(define-public sbcl-3bmd-ext-code-blocks
-  (let ((commit "192ea13435b605a96ef607df51317056914cabbd"))
-    (package
-      (inherit sbcl-3bmd)
-      (name "sbcl-3bmd-ext-code-blocks")
-      (arguments
-       `(#:asd-system-name "3bmd-ext-code-blocks"
-         #:asd-file "3bmd-ext-code-blocks.asd"))
-      (inputs
-       `(("3bmd" ,sbcl-3bmd)
-         ("colorize" ,sbcl-colorize)))
-      (synopsis "3bmd extension which adds support for GitHub-style fenced
-code blocks")
-      (description
-       "3bmd extension which adds support for GitHub-style fenced code blocks,
-with @command{colorize} support."))))
-
-(define-public cl-3bmd-ext-code-blocks
-  (sbcl-package->cl-source-package sbcl-3bmd-ext-code-blocks))
-
-(define-public ecl-3bmd-ext-code-blocks
-  (sbcl-package->ecl-package sbcl-3bmd-ext-code-blocks))
-
 (define-public sbcl-cl-fad
   (package
     (name "sbcl-cl-fad")
@@ -1810,19 +1598,13 @@ writing code that contains string literals that contain code themselves.")
 (define-public ecl-pythonic-string-reader
   (sbcl-package->ecl-package sbcl-pythonic-string-reader))
 
-;; SLIME does not have a ASDF system definition to build all of Swank.  As a
-;; result, the asdf-build-system/sbcl will produce an almost empty package.
-;; Some work was done to fix this at
-;; https://github.com/sionescu/slime/tree/swank-asdf but it was never merged
-;; and is now lagging behind.  Building SBCL fasls might not be worth the
-;; hassle, so let's just ship the source then.
-(define-public cl-slime-swank
+(define-public sbcl-slime-swank
   (package
-    (name "cl-slime-swank")
+    (name "sbcl-slime-swank")
     (version "2.24")
     (source
      (origin
-       (file-name (string-append name "-" version ".tar.gz"))
+       (file-name (git-file-name "slime-swank" version))
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/slime/slime/")
@@ -1830,7 +1612,9 @@ writing code that contains string literals that contain code themselves.")
        (sha256
         (base32
          "0js24x42m7b5iymb4rxz501dff19vav5pywnzv50b673rbkaaqvh"))))
-    (build-system asdf-build-system/source)
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     '(#:asd-systems '("swank")))
     (home-page "https://github.com/slime/slime")
     (synopsis "Common Lisp Swank server")
     (description
@@ -1839,8 +1623,11 @@ processes that doesn't run under Emacs.  Lisp processes created by
 @command{M-x slime} automatically start the server.")
     (license (list license:gpl2+ license:public-domain))))
 
-(define-public sbcl-slime-swank
-  (deprecated-package "sbcl-slime-swank" cl-slime-swank))
+(define-public cl-slime-swank
+  (sbcl-package->cl-source-package sbcl-slime-swank))
+
+(define-public ecl-slime-swank
+  (sbcl-package->ecl-package sbcl-slime-swank))
 
 (define-public sbcl-mgl-pax
   (let ((commit "818448418d6b9de74620f606f5b23033c6082769"))
@@ -1860,16 +1647,12 @@ processes that doesn't run under Emacs.  Lisp processes created by
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("3bmd" ,sbcl-3bmd)
-         ("3bmd-ext-code-blocks" ,sbcl-3bmd-ext-code-blocks)
          ("babel" ,sbcl-babel)
          ("cl-fad" ,sbcl-cl-fad)
          ("ironclad" ,sbcl-ironclad)
          ("named-readtables" ,sbcl-named-readtables)
-         ("pythonic-string-reader" ,sbcl-pythonic-string-reader)))
-      (propagated-inputs
-       ;; Packages having mgl-pax as input complain that it can't find
-       ;; swank if we put it in inputs, so let's put it in propageted-inputs.
-       `(("swank" ,cl-slime-swank)))
+         ("pythonic-string-reader" ,sbcl-pythonic-string-reader)
+         ("swank" ,sbcl-slime-swank)))
       (synopsis "Exploratory programming environment and documentation generator")
       (description
        "PAX provides an extremely poor man's Explorable Programming
@@ -1893,7 +1676,13 @@ pretty, documentation is code.")
   (sbcl-package->cl-source-package sbcl-mgl-pax))
 
 (define-public ecl-mgl-pax
-  (sbcl-package->ecl-package sbcl-mgl-pax))
+  (let ((pkg (sbcl-package->ecl-package sbcl-mgl-pax)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ;; TODO: Find why the tests fail on ECL.
+         ((#:tests? _ #f) #f))))))
 
 (define-public sbcl-lisp-unit
   (let ((commit "89653a232626b67400bf9a941f9b367da38d3815"))
@@ -2116,10 +1905,10 @@ named color.")
 (define-public ecl-cl-ansi-text
   (sbcl-package->ecl-package sbcl-cl-ansi-text))
 
-(define-public sbcl-prove-asdf
+(define-public sbcl-prove
   (let ((commit "4f9122bd393e63c5c70c1fba23070622317cfaa0"))
     (package
-      (name "sbcl-prove-asdf")
+      (name "sbcl-prove")
       (version (git-version "1.0.0" "1" commit))
       (source
        (origin
@@ -2132,35 +1921,13 @@ named color.")
            "07sbfw459z8bbjvx1qlmfa8qk2mvbjnnzi2mi0x72blaj8bkl4vc"))
          (file-name (git-file-name "prove" version))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       `(#:asd-file "prove-asdf.asd"))
-      (synopsis "Test requirement for the Common Lisp 'prove' library")
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("cl-ansi-text" ,sbcl-cl-ansi-text)))
+      (synopsis "Yet another unit testing framework for Common Lisp")
       (description
-       "Test requirement for the Common Lisp @command{prove} library.")
-      (home-page "https://github.com/fukamachi/prove")
-      (license license:expat))))
-
-(define-public cl-prove-asdf
-  (sbcl-package->cl-source-package sbcl-prove-asdf))
-
-(define-public ecl-prove-asdf
-  (sbcl-package->ecl-package sbcl-prove-asdf))
-
-(define-public sbcl-prove
-  (package
-    (inherit sbcl-prove-asdf)
-    (name "sbcl-prove")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("cl-ansi-text" ,sbcl-cl-ansi-text)))
-    (native-inputs
-     `(("prove-asdf" ,sbcl-prove-asdf)))
-    (arguments
-     `(#:asd-file "prove.asd"))
-    (synopsis "Yet another unit testing framework for Common Lisp")
-    (description
-     "This project was originally called @command{cl-test-more}.
+       "This project was originally called @command{cl-test-more}.
 @command{prove} is yet another unit testing framework for Common Lisp.  The
 advantages of @command{prove} are:
 
@@ -2170,7 +1937,9 @@ advantages of @command{prove} are:
 @item Extensible test reporters
 @item Colorizes the report if it's available (note for SLIME)
 @item Reports test durations
-@end itemize\n")))
+@end itemize\n")
+      (home-page "https://github.com/fukamachi/prove")
+      (license license:expat))))
 
 (define-public cl-prove
   (sbcl-package->cl-source-package sbcl-prove))
@@ -2198,8 +1967,7 @@ advantages of @command{prove} are:
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)))
       (native-inputs
-       `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)))
+       `(("prove" ,sbcl-prove)))
       (arguments
        ;; TODO: Tests don't find "proc-parse-test", why?
        `(#:tests? #f))
@@ -2237,8 +2005,7 @@ pattern-matching-like, but a char-by-char procedural parser.")
        `(("alexandria" ,sbcl-alexandria)
          ("babel" ,sbcl-babel)))
       (native-inputs
-       `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)))
+       `(("prove" ,sbcl-prove)))
       (arguments
        ;; TODO: Tests don't find "proc-parse-test", why?
        `(#:tests? #f))
@@ -2255,12 +2022,12 @@ values from a string in Common Lisp.")
 (define-public ecl-parse-float
   (sbcl-package->ecl-package sbcl-parse-float))
 
-(define-public sbcl-ascii-strings
+(define-public sbcl-cl-string-match
   (let ((revision "1")
         (changeset "5048480a61243e6f1b02884012c8f25cdbee6d97"))
     (package
-      (name "sbcl-ascii-strings")
-      (version (string-append "0-" revision "." (string-take changeset 7)))
+      (name "sbcl-cl-string-match")
+      (version (git-version "0" revision changeset))
       (source
        (origin
          (method hg-fetch)
@@ -2274,69 +2041,28 @@ values from a string in Common Lisp.")
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)
-         ("babel" ,sbcl-babel)))
+         ("babel" ,sbcl-babel)
+         ("iterate" ,sbcl-iterate)
+         ("jpl-queues" ,sbcl-jpl-queues)
+         ("jpl-util" ,sbcl-jpl-util)
+         ("mgl-pax" ,sbcl-mgl-pax)
+         ("parse-float" ,sbcl-parse-float)
+         ("proc-parse" ,sbcl-proc-parse)
+         ("yacc" ,sbcl-cl-yacc)))
+      ;; TODO: Tests are not evaluated properly.
+      (native-inputs
+       ;; For testing:
+       `(("lisp-unit" ,sbcl-lisp-unit)))
       (arguments
-       `(#:asd-file "ascii-strings.asd"))
-      (synopsis "Operations on ASCII strings")
+       `(#:tests? #f))
+      (synopsis "Set of utilities to manipulate strings in Common Lisp")
       (description
-       "Operations on ASCII strings.  Essentially this can be any kind of
-single-byte encoded strings.")
+       "@command{cl-strings} is a small, portable, dependency-free set of
+utilities that make it even easier to manipulate text in Common Lisp.  It has
+100% test coverage and works at least on sbcl, ecl, ccl, abcl and clisp.")
       (home-page "https://bitbucket.org/vityok/cl-string-match/")
       (license license:bsd-3))))
 
-(define-public cl-ascii-strings
-  (sbcl-package->cl-source-package sbcl-ascii-strings))
-
-(define-public ecl-ascii-strings
-  (sbcl-package->ecl-package sbcl-ascii-strings))
-
-(define-public sbcl-simple-scanf
-  (package
-    (inherit sbcl-ascii-strings)
-    (name "sbcl-simple-scanf")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("iterate" ,sbcl-iterate)
-       ("proc-parse" ,sbcl-proc-parse)
-       ("parse-float" ,sbcl-parse-float)))
-    (arguments
-     `(#:asd-file "simple-scanf.asd"))
-    (synopsis "Simple scanf-like functionality implementation")
-    (description
-     "A simple scanf-like functionality implementation.")))
-
-(define-public cl-simple-scanf
-  (sbcl-package->cl-source-package sbcl-simple-scanf))
-
-(define-public ecl-simple-scanf
-  (sbcl-package->ecl-package sbcl-simple-scanf))
-
-(define-public sbcl-cl-string-match
-  (package
-    (inherit sbcl-ascii-strings)
-    (name "sbcl-cl-string-match")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("ascii-strings" ,sbcl-ascii-strings)
-       ("yacc" ,sbcl-cl-yacc)
-       ("jpl-util" ,sbcl-jpl-util)
-       ("jpl-queues" ,sbcl-jpl-queues)
-       ("mgl-pax" ,sbcl-mgl-pax)
-       ("iterate" ,sbcl-iterate)))
-    ;; TODO: Tests are not evaluated properly.
-    (native-inputs
-     ;; For testing:
-     `(("lisp-unit" ,sbcl-lisp-unit)
-       ("simple-scanf" ,sbcl-simple-scanf)))
-    (arguments
-     `(#:tests? #f
-       #:asd-file "cl-string-match.asd"))
-    (synopsis "Portable, dependency-free set of utilities to manipulate strings in Common Lisp")
-    (description
-     "@command{cl-strings} is a small, portable, dependency-free set of
-utilities that make it even easier to manipulate text in Common Lisp.  It has
-100% test coverage and works at least on sbcl, ecl, ccl, abcl and clisp.")))
-
 (define-public cl-string-match
   (sbcl-package->cl-source-package sbcl-cl-string-match))
 
@@ -2419,6 +2145,14 @@ Lisp programs.  It parses URI according to the RFC 2396 specification.")
           (base32
            "0wdhfnzi4v6d97pggzj2aw55si94w4327br94jrmyvwf351wqjvv"))))
       (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+      (arguments
+       '(#:asd-systems '("queues"
+                         "queues.simple-queue"
+                         "queues.simple-cqueue"
+                         "queues.priority-queue"
+                         "queues.priority-cqueue")))
       (home-page "https://github.com/oconnore/queues")
       (synopsis "Common Lisp queue library")
       (description
@@ -2432,93 +2166,9 @@ non-consing thread safe queues and fibonacci priority queues.")
 (define-public ecl-queues
   (sbcl-package->ecl-package sbcl-queues))
 
-(define-public sbcl-queues.simple-queue
-  (package
-    (inherit sbcl-queues)
-    (name "sbcl-queues.simple-queue")
-    (inputs
-     `(("sbcl-queues" ,sbcl-queues)))
-    (arguments
-     `(#:asd-file "queues.simple-queue.asd"))
-    (synopsis "Simple queue implementation")
-    (description
-     "This is a simple queue library for Common Lisp with features such as
-non-consing thread safe queues and fibonacci priority queues.")
-    (license license:expat)))
-
-(define-public cl-queues.simple-queue
-  (sbcl-package->cl-source-package sbcl-queues.simple-queue))
-
-(define-public ecl-queues.simple-queue
-  (sbcl-package->ecl-package sbcl-queues.simple-queue))
-
-(define-public sbcl-queues.simple-cqueue
-  (package
-    (inherit sbcl-queues)
-    (name "sbcl-queues.simple-cqueue")
-    (inputs
-     `(("sbcl-queues" ,sbcl-queues)
-       ("sbcl-queues.simple-queue" ,sbcl-queues.simple-queue)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)))
-    (arguments
-     `(#:asd-file "queues.simple-cqueue.asd"))
-    (synopsis "Thread safe queue implementation")
-    (description
-     "This is a simple queue library for Common Lisp with features such as
-non-consing thread safe queues and fibonacci priority queues.")
-    (license license:expat)))
-
-(define-public cl-queues.simple-cqueue
-  (sbcl-package->cl-source-package sbcl-queues.simple-cqueue))
-
-(define-public ecl-queues.simple-cqueue
-  (sbcl-package->ecl-package sbcl-queues.simple-cqueue))
-
-(define-public sbcl-queues.priority-queue
-  (package
-    (inherit sbcl-queues)
-    (name "sbcl-queues.priority-queue")
-    (inputs
-     `(("sbcl-queues" ,sbcl-queues)))
-    (arguments
-     `(#:asd-file "queues.priority-queue.asd"))
-    (synopsis "Priority queue (Fibonacci) implementation")
-    (description
-     "This is a simple queue library for Common Lisp with features such as
-non-consing thread safe queues and fibonacci priority queues.")
-    (license license:expat)))
-
-(define-public cl-queues.priority-queue
-  (sbcl-package->cl-source-package sbcl-queues.priority-queue))
-
-(define-public ecl-queues.priority-queue
-  (sbcl-package->ecl-package sbcl-queues.priority-queue))
-
-(define-public sbcl-queues.priority-cqueue
-  (package
-    (inherit sbcl-queues)
-    (name "sbcl-queues.priority-cqueue")
-    (inputs
-     `(("sbcl-queues" ,sbcl-queues)
-       ("sbcl-queues.priority-queue" ,sbcl-queues.priority-queue)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)))
-    (arguments
-     `(#:asd-file "queues.priority-cqueue.asd"))
-    (synopsis "Thread safe fibonacci priority queue implementation")
-    (description
-     "This is a simple queue library for Common Lisp with features such as
-non-consing thread safe queues and fibonacci priority queues.")
-    (license license:expat)))
-
-(define-public cl-queues.priority-cqueue
-  (sbcl-package->cl-source-package sbcl-queues.priority-cqueue))
-
-(define-public ecl-queues.priority-cqueue
-  (sbcl-package->ecl-package sbcl-queues.priority-cqueue))
-
-(define sbcl-cffi-bootstrap
+(define-public sbcl-cffi
   (package
-    (name "sbcl-cffi-bootstrap")
+    (name "sbcl-cffi")
     (version "0.21.0")
     (source
      (origin
@@ -2531,12 +2181,14 @@ non-consing thread safe queues and fibonacci priority queues.")
         (base32 "1qalargz9bhp850qv60ffwpdqi4xirzar4l3g6qcg8yc6xqf2cjk"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("libffi" ,libffi)
-       ("alexandria" ,sbcl-alexandria)
+     `(("alexandria" ,sbcl-alexandria)
        ("babel" ,sbcl-babel)
+       ("libffi" ,libffi)
        ("trivial-features" ,sbcl-trivial-features)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("pkg-config" ,pkg-config)
+       ("rt" ,sbcl-rt)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2547,9 +2199,21 @@ non-consing thread safe queues and fibonacci priority queues.")
                                      (assoc-ref inputs "libffi")
                                      "/lib/" all)))
              (substitute* "toolchain/c-toolchain.lisp"
-               (("\"cc\"") (format #f "~S" (which "gcc")))))))
-       #:asd-system-name "cffi"
-       #:tests? #f))
+               (("\"cc\"") (format #f "~S" (which "gcc"))))))
+         (add-after 'build 'install-headers
+           (lambda* (#:key outputs #:allow-other-keys)
+             (install-file "grovel/common.h"
+                           (string-append
+                            (assoc-ref outputs "out")
+                            "/include/grovel")))))
+       #:asd-files '("cffi.asd"
+                     "cffi-toolchain.asd"
+                     "cffi-grovel.asd"
+                     "cffi-libffi.asd"
+                     "cffi-uffi-compat.asd")
+       #:asd-systems '("cffi"
+                       "cffi-libffi"
+                       "cffi-uffi-compat")))
     (home-page "https://common-lisp.net/project/cffi/")
     (synopsis "Common Foreign Function Interface for Common Lisp")
     (description "The Common Foreign Function Interface (CFFI)
@@ -2559,75 +2223,11 @@ in the CFFI-SYS package, and a portable frontend in the CFFI
 package.")
     (license license:expat)))
 
-(define-public sbcl-cffi-toolchain
-  (package
-    (inherit sbcl-cffi-bootstrap)
-    (name "sbcl-cffi-toolchain")
-    (inputs
-     `(("libffi" ,libffi)
-       ("sbcl-cffi" ,sbcl-cffi-bootstrap)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cffi-bootstrap)
-       ((#:asd-system-name _) #f)
-       ((#:tests? _) #t)))))
-
-(define-public sbcl-cffi-libffi
-  (package
-    (inherit sbcl-cffi-toolchain)
-    (name "sbcl-cffi-libffi")
-    (inputs
-     `(("cffi" ,sbcl-cffi-bootstrap)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
-       ("trivial-features" ,sbcl-trivial-features)
-       ("libffi" ,libffi)))))
-
-(define-public sbcl-cffi-grovel
-  (package
-    (inherit sbcl-cffi-toolchain)
-    (name "sbcl-cffi-grovel")
-    (inputs
-     `(("libffi" ,libffi)
-       ("cffi" ,sbcl-cffi-bootstrap)
-       ("cffi-toolchain" ,sbcl-cffi-toolchain)
-       ("alexandria" ,sbcl-alexandria)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cffi-toolchain)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'build 'install-headers
-             (lambda* (#:key outputs #:allow-other-keys)
-               (install-file "grovel/common.h"
-                             (string-append
-                              (assoc-ref outputs "out")
-                              "/include/grovel"))))))))))
-
-(define-public sbcl-cffi
-  (package
-    (inherit sbcl-cffi-toolchain)
-    (name "sbcl-cffi")
-    (inputs (package-inputs sbcl-cffi-bootstrap))
-    (native-inputs
-     `(("cffi-grovel" ,sbcl-cffi-grovel)
-       ("cffi-libffi" ,sbcl-cffi-libffi)
-       ("rt" ,sbcl-rt)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ,@(package-native-inputs sbcl-cffi-bootstrap)))))
-
 (define-public cl-cffi
   (sbcl-package->cl-source-package sbcl-cffi))
 
-(define-public sbcl-cffi-uffi-compat
-  (package
-    (inherit sbcl-cffi-toolchain)
-    (name "sbcl-cffi-uffi-compat")
-    (native-inputs
-     `(,@(package-inputs sbcl-cffi-bootstrap))) ; For fix-paths phase
-    (inputs
-     `(("cffi" ,sbcl-cffi)))
-    (synopsis "UFFI Compatibility Layer for CFFI")))
-
-(define-public cl-cffi-uffi-compat
-  (sbcl-package->cl-source-package sbcl-cffi-uffi-compat))
+(define-public ecl-cffi
+  (sbcl-package->ecl-package sbcl-cffi))
 
 (define-public sbcl-cl-sqlite
   (package
@@ -2652,8 +2252,7 @@ package.")
      `(("fiveam" ,sbcl-fiveam)
        ("bordeaux-threads" ,sbcl-bordeaux-threads)))
     (arguments
-     `(#:asd-file "sqlite.asd"
-       #:asd-system-name "sqlite"
+     `(#:asd-systems '("sqlite")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths
@@ -2671,6 +2270,9 @@ relational database engine.")
 (define-public cl-sqlite
   (sbcl-package->cl-source-package sbcl-cl-sqlite))
 
+(define-public ecl-cl-sqlite
+  (sbcl-package->ecl-package sbcl-cl-sqlite))
+
 (define-public sbcl-parenscript
   ;; Source archives are overwritten on every release, we use the Git repo instead.
   (let ((commit "7a1ac46353cecd144fc91915ba9f122aafcf4766"))
@@ -2856,10 +2458,10 @@ Lisp implementations.")
 (define-public ecl-closer-mop
   (sbcl-package->ecl-package sbcl-closer-mop))
 
-(define sbcl-cl-cffi-gtk-boot0
+(define-public sbcl-cl-cffi-gtk
   (let ((commit "e9a46df65995d9a16e6c8dbdc1e09b775eb4a966"))
     (package
-      (name "sbcl-cl-cffi-gtk-boot0")
+      (name "sbcl-cl-cffi-gtk")
       (version (git-version "0.11.2" "2" commit))
       (source
        (origin
@@ -2872,17 +2474,34 @@ Lisp implementations.")
           (base32
            "04vix0gmqsj91lm975sx7jhlnz5gq1xf9jp873mp7c8frc5dk1jj"))))
       (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
       (inputs
-       `(("iterate" ,sbcl-iterate)
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cairo" ,cairo)
          ("cffi" ,sbcl-cffi)
-         ("trivial-features" ,sbcl-trivial-features)
+         ("closer-mop" ,sbcl-closer-mop)
+         ("gdk-pixbuf" ,gdk-pixbuf)
          ("glib" ,glib)
-         ("cairo" ,cairo)
+         ("gtk" ,gtk+)
+         ("iterate" ,sbcl-iterate)
          ("pango" ,pango)
-         ("gdk-pixbuf" ,gdk-pixbuf)
-         ("gtk" ,gtk+)))
+         ("trivial-features" ,sbcl-trivial-features)
+         ("trivial-garbage" ,sbcl-trivial-garbage)))
       (arguments
-       `(#:phases
+       `(#:asd-files '("gtk/cl-cffi-gtk.asd"
+                       "glib/cl-cffi-gtk-glib.asd"
+                       "gobject/cl-cffi-gtk-gobject.asd"
+                       "gio/cl-cffi-gtk-gio.asd"
+                       "cairo/cl-cffi-gtk-cairo.asd"
+                       "pango/cl-cffi-gtk-pango.asd"
+                       "gdk-pixbuf/cl-cffi-gtk-gdk-pixbuf.asd"
+                       "gdk/cl-cffi-gtk-gdk.asd")
+         #:test-asd-file "test/cl-cffi-gtk-test.asd"
+         ;; TODO: Tests fail with memory fault.
+         ;; See https://github.com/Ferada/cl-cffi-gtk/issues/24.
+         #:tests? #f
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
@@ -2917,223 +2536,12 @@ Lisp implementations.")
 is a library for creating graphical user interfaces.")
       (license license:lgpl3))))
 
-(define-public sbcl-cl-cffi-gtk-glib
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-glib")
-    (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "glib/cl-cffi-gtk-glib.asd")))))
-
-(define-public sbcl-cl-cffi-gtk-gobject
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-gobject")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ("trivial-garbage" ,sbcl-trivial-garbage)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("closer-mop" ,sbcl-closer-mop)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "gobject/cl-cffi-gtk-gobject.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-gobject")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk-gio
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-gio")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "gio/cl-cffi-gtk-gio.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-gio")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk-cairo
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-cairo")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "cairo/cl-cffi-gtk-cairo.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-cairo")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk-pango
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-pango")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
-       ("cl-cffi-gtk-cairo" ,sbcl-cl-cffi-gtk-cairo)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "pango/cl-cffi-gtk-pango.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-pango")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk-gdk-pixbuf
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-gdk-pixbuf")
-    (inputs
-     `(("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
-       ("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "gdk-pixbuf/cl-cffi-gtk-gdk-pixbuf.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-gdk-pixbuf")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk-gdk
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk-gdk")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
-       ("cl-cffi-gtk-gio" ,sbcl-cl-cffi-gtk-gio)
-       ("cl-cffi-gtk-gdk-pixbuf" ,sbcl-cl-cffi-gtk-gdk-pixbuf)
-       ("cl-cffi-gtk-cairo" ,sbcl-cl-cffi-gtk-cairo)
-       ("cl-cffi-gtk-pango" ,sbcl-cl-cffi-gtk-pango)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "gdk/cl-cffi-gtk-gdk.asd")
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk-gdk")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
-(define-public sbcl-cl-cffi-gtk
-  (package
-    (inherit sbcl-cl-cffi-gtk-boot0)
-    (name "sbcl-cl-cffi-gtk")
-    (inputs
-     `(("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
-       ("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
-       ("cl-cffi-gtk-gio" ,sbcl-cl-cffi-gtk-gio)
-       ("cl-cffi-gtk-gdk" ,sbcl-cl-cffi-gtk-gdk)
-       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-cffi-gtk-boot0)
-       ((#:asd-file _ "") "gtk/cl-cffi-gtk.asd")
-       ((#:test-asd-file _ "") "test/cl-cffi-gtk-test.asd")
-       ;; TODO: Tests fail with memory fault.
-       ;; See https://github.com/Ferada/cl-cffi-gtk/issues/24.
-       ((#:tests? _ #f) #f)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'link-source
-             ;; Since source is particularly heavy (16MiB+), let's reuse it
-             ;; across the different components of cl-ffi-gtk.
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((glib-source (string-append (assoc-ref inputs "cl-cffi-gtk-glib")
-                                                 "/share/common-lisp/sbcl-source/"
-                                                 "cl-cffi-gtk-glib"))
-                     (out-source (string-append (assoc-ref outputs "out")
-                                                "/share/common-lisp/sbcl-source/"
-                                                "cl-cffi-gtk")))
-                 (delete-file-recursively out-source)
-                 (symlink glib-source out-source)
-                 #t)))))))))
-
 (define-public cl-cffi-gtk
   (sbcl-package->cl-source-package sbcl-cl-cffi-gtk))
 
+(define-public ecl-cl-cffi-gtk
+  (sbcl-package->ecl-package sbcl-cl-cffi-gtk))
+
 (define-public sbcl-cl-webkit
   (let ((commit "04bb5703b68f4db9de71529b81896cc428ef54e1"))
     (package
@@ -3155,8 +2563,7 @@ is a library for creating graphical user interfaces.")
          ("cl-cffi-gtk" ,sbcl-cl-cffi-gtk)
          ("webkitgtk" ,webkitgtk)))
       (arguments
-       `(#:asd-file "webkit2/cl-webkit2.asd"
-         #:asd-system-name "cl-webkit2"
+       `(#:asd-systems '("cl-webkit2")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
@@ -3177,6 +2584,9 @@ WebKit browsing engine.")
 (define-public cl-webkit
   (sbcl-package->cl-source-package sbcl-cl-webkit))
 
+(define-public ecl-cl-webkit
+  (sbcl-package->ecl-package sbcl-cl-webkit))
+
 (define-public sbcl-lparallel
   (package
     (name "sbcl-lparallel")
@@ -3300,10 +2710,10 @@ portability, and boilerplate reduction in CSS.")
   (sbcl-package->ecl-package sbcl-cl-css))
 
 (define-public sbcl-portable-threads
-  (let ((commit "c0e61a1faeb0583c80fd3f20b16cc4c555226920"))
+  (let ((commit "aa26bf38338a6b068bf8bfb3375d8d8c3b0a28df"))
     (package
       (name "sbcl-portable-threads")
-      (version (git-version "2.3" "1" commit))
+      (version (git-version "2.3" "2" commit))
       (source
        (origin
          (method git-fetch)
@@ -3312,14 +2722,13 @@ portability, and boilerplate reduction in CSS.")
                (commit commit)))
          (file-name (git-file-name "portable-threads" version))
          (sha256
-          (base32
-           "03fmxyarc0xf4kavwkfa0a2spkyfrz6hbgbi9y4q7ny5aykdyfaq"))))
+          (base32 "058ksi07vfdmhrf5mdlc833s82m1rcqfja2266520m3r8bzs8bvs"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        `(;; Tests seem broken.
          #:tests? #f))
       (home-page "https://github.com/binghe/portable-threads")
-      (synopsis "Portable threads (and scheduled and periodic functions) API for Common Lisp")
+      (synopsis "Portable threads API for Common Lisp")
       (description
        "Portable Threads (and Scheduled and Periodic Functions) API for Common
 Lisp (from GBBopen project).")
@@ -3328,14 +2737,12 @@ Lisp (from GBBopen project).")
 (define-public cl-portable-threads
   (sbcl-package->cl-source-package sbcl-portable-threads))
 
-(define-public ecl-portable-threada
+(define-public ecl-portable-threads
   (sbcl-package->ecl-package sbcl-portable-threads))
 
-(define sbcl-usocket-boot0
-  ;; usocket's test rely on usocket-server which depends on usocket itself.
-  ;; We break this cyclic dependency with -boot0 that packages usocket.
+(define-public sbcl-usocket
   (package
-    (name "sbcl-usocket-boot0")
+    (name "sbcl-usocket")
     (version "0.8.3")
     (source
      (origin
@@ -3348,48 +2755,23 @@ Lisp (from GBBopen project).")
         (base32
          "0x746wr2324l6bn7skqzgkzcbj5kd0zp2ck0c8rldrw0rzabg826"))))
     (build-system asdf-build-system/sbcl)
+    (native-inputs
+     `(("rt" ,sbcl-rt)))
     (inputs
-     `(("split-sequence" ,sbcl-split-sequence)))
+     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("split-sequence" ,sbcl-split-sequence)))
     (arguments
-     `(#:tests? #f
-       #:asd-system-name "usocket"))
+     `(#:tests? #f ; FIXME: Tests need network access?
+       #:asd-systems '("usocket"
+                       "usocket-server")))
     (home-page "https://common-lisp.net/project/usocket/")
-    (synopsis "Universal socket library for Common Lisp (server side)")
+    (synopsis "Universal socket library for Common Lisp")
     (description
      "This library strives to provide a portable TCP/IP and UDP/IP socket
 interface for as many Common Lisp implementations as possible, while keeping
 the abstraction and portability layer as thin as possible.")
     (license license:expat)))
 
-(define-public sbcl-usocket-server
-  (package
-    (inherit sbcl-usocket-boot0)
-    (name "sbcl-usocket-server")
-    (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("usocket" ,sbcl-usocket-boot0)))
-    (arguments
-     '(#:asd-system-name "usocket-server"))
-    (synopsis "Universal socket library for Common Lisp (server side)")))
-
-(define-public cl-usocket-server
-  (sbcl-package->cl-source-package sbcl-usocket-server))
-
-(define-public ecl-socket-server
-  (sbcl-package->ecl-package sbcl-usocket-server))
-
-(define-public sbcl-usocket
-  (package
-    (inherit sbcl-usocket-boot0)
-    (name "sbcl-usocket")
-    (arguments
-     ;; FIXME: Tests need network access?
-     `(#:tests? #f))
-    (native-inputs
-     ;; Testing only.
-     `(("usocket-server" ,sbcl-usocket-server)
-       ("rt" ,sbcl-rt)))))
-
 (define-public cl-usocket
   (sbcl-package->cl-source-package sbcl-usocket))
 
@@ -3538,7 +2920,7 @@ client and server.")
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((test-results (string-append (assoc-ref outputs "out")
                                                  "/share/common-lisp/"
-                                                 (%lisp-type) "-source"
+                                                 (%lisp-type)
                                                  "/trivial-backtrace"
                                                  "/test-results")))
                 (when (file-exists? test-results)
@@ -3558,6 +2940,9 @@ backtrace portably.")
 (define-public cl-trivial-backtrace
   (sbcl-package->cl-source-package sbcl-trivial-backtrace))
 
+(define-public ecl-trivial-backtrace
+  (sbcl-package->ecl-package sbcl-trivial-backtrace))
+
 (define-public sbcl-rfc2388
   (let ((commit "591bcf7e77f2c222c43953a80f8c297751dc0c4e")
         (revision "1"))
@@ -3585,6 +2970,9 @@ process form data posted with HTTP POST method using enctype
 (define-public cl-rfc2388
   (sbcl-package->cl-source-package sbcl-rfc2388))
 
+(define-public ecl-rfc2388
+  (sbcl-package->ecl-package sbcl-rfc2388))
+
 (define-public sbcl-md5
   (package
     (name "sbcl-md5")
@@ -3661,6 +3049,9 @@ Development into CL+SSL was done by David Lichteblau.")
 (define-public cl-cl+ssl
   (sbcl-package->cl-source-package sbcl-cl+ssl))
 
+(define-public ecl-cl+ssl
+  (sbcl-package->ecl-package sbcl-cl+ssl))
+
 (define-public sbcl-kmrcl
   (let ((version "1.111")
         (commit "4a27407aad9deb607ffb8847630cde3d041ea25a")
@@ -3690,6 +3081,9 @@ Rosenberg's Common Lisp packages.")
 (define-public cl-kmrcl
   (sbcl-package->cl-source-package sbcl-kmrcl))
 
+(define-public ecl-kmrcl
+  (sbcl-package->ecl-package sbcl-kmrcl))
+
 (define-public sbcl-cl-base64
   ;; 3.3.4 tests are broken, upstream fixes them.
   (let ((commit "577683b18fd880b82274d99fc96a18a710e3987a"))
@@ -3722,6 +3116,9 @@ encoding table that uses only URI-compatible characters.")
 (define-public cl-base64
   (sbcl-package->cl-source-package sbcl-cl-base64))
 
+(define-public ecl-cl-base64
+  (sbcl-package->ecl-package sbcl-cl-base64))
+
 (define-public sbcl-chunga
   (package
     (name "sbcl-chunga")
@@ -3748,6 +3145,9 @@ defined in RFC 2616.")
 (define-public cl-chunga
   (sbcl-package->cl-source-package sbcl-chunga))
 
+(define-public ecl-chunga
+  (sbcl-package->ecl-package sbcl-chunga))
+
 (define-public sbcl-cl-who
   (let ((version "1.1.4")
         (commit "2c08caa4bafba720409af9171feeba3f32e86d32")
@@ -3777,9 +3177,12 @@ WHO means \"with-html-output\" for want of a better acronym) is probably just
 as good or bad as the next one.")
       (license license:bsd-2))))
 
-(define-public cl-cl-who
+(define-public cl-who
   (sbcl-package->cl-source-package sbcl-cl-who))
 
+(define-public ecl-cl-who
+  (sbcl-package->ecl-package sbcl-cl-who))
+
 (define-public sbcl-chipz
   (let ((version "0.8")
         (commit "75dfbc660a5a28161c57f115adf74c8a926bfc4d")
@@ -3815,6 +3218,9 @@ the format used by the popular compression tool bzip2.")
 (define-public cl-chipz
   (sbcl-package->cl-source-package sbcl-chipz))
 
+(define-public ecl-chipz
+  (sbcl-package->ecl-package sbcl-chipz))
+
 (define-public sbcl-drakma
   (package
     (name "sbcl-drakma")
@@ -3895,6 +3301,13 @@ connections (keep-alive), and SSL.")
 (define-public cl-hunchentoot
   (sbcl-package->cl-source-package sbcl-hunchentoot))
 
+(define-public ecl-hunchentoot
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-hunchentoot))
+    (arguments
+     ;; Tests fail on ECL with 'Socket error in "socket": EINVAL'.
+     '(#:tests? #f))))
+
 (define-public sbcl-trivial-types
   (package
     (name "sbcl-trivial-types")
@@ -3919,33 +3332,8 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
 (define-public cl-trivial-types
   (sbcl-package->cl-source-package sbcl-trivial-types))
 
-(define-public sbcl-cl-syntax
-  (package
-    (name "sbcl-cl-syntax")
-    (version "0.0.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/m2ym/cl-syntax")
-             (commit "03f0c329bbd55b8622c37161e6278366525e2ccc")))
-       (file-name (git-file-name "cl-syntax" version))
-       (sha256
-        (base32 "17ran8xp77asagl31xv8w819wafh6whwfc9p6dgx22ca537gyl4y"))))
-    (build-system asdf-build-system/sbcl)
-    (arguments
-     '(#:asd-file "cl-syntax.asd"
-       #:asd-system-name "cl-syntax"))
-    (inputs `(("sbcl-trivial-types" ,sbcl-trivial-types)
-              ("sbcl-named-readtables" ,sbcl-named-readtables)))
-    (home-page "https://github.com/m2ym/cl-syntax")
-    (synopsis "Reader Syntax Coventions for Common Lisp and SLIME")
-    (description
-     "CL-SYNTAX provides Reader Syntax Coventions for Common Lisp and SLIME.")
-    (license license:llgpl)))
-
-(define-public cl-syntax
-  (sbcl-package->cl-source-package sbcl-cl-syntax))
+(define-public ecl-trivial-types
+  (sbcl-package->ecl-package sbcl-trivial-types))
 
 (define-public sbcl-cl-annot
   (let ((commit "c99e69c15d935eabc671b483349a406e0da9518d")
@@ -3963,9 +3351,6 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
          (sha256
           (base32 "1wq1gs9jjd5m6iwrv06c2d7i5dvqsfjcljgbspfbc93cg5xahk4n"))))
       (build-system asdf-build-system/sbcl)
-    (arguments
-     '(#:asd-file "cl-annot.asd"
-       #:asd-system-name "cl-annot"))
       (inputs
        `(("sbcl-alexandria" ,sbcl-alexandria)))
       (home-page "https://github.com/m2ym/cl-annot")
@@ -3977,41 +3362,43 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
 (define-public cl-annot
   (sbcl-package->cl-source-package sbcl-cl-annot))
 
-(define-public sbcl-cl-syntax-annot
-  (package
-    (inherit sbcl-cl-syntax)
-    (name "sbcl-cl-syntax-annot")
-    (arguments
-     '(#:asd-file "cl-syntax-annot.asd"
-       #:asd-system-name "cl-syntax-annot"))
-    (inputs
-     `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-       ("sbcl-cl-annot" ,sbcl-cl-annot)))
-    (synopsis "Common Lisp reader Syntax for cl-annot")
-    (description
-     "CL-SYNTAX provides reader syntax coventions for Common Lisp and
-@code{cl-annot}.")))
-
-(define-public cl-syntax-annot
-  (sbcl-package->cl-source-package sbcl-cl-syntax-annot))
+(define-public ecl-cl-annot
+  (sbcl-package->ecl-package sbcl-cl-annot))
 
-(define-public sbcl-cl-syntax-interpol
+(define-public sbcl-cl-syntax
   (package
-    (inherit sbcl-cl-syntax)
-    (name "sbcl-cl-syntax-interpol")
-    (arguments
-     '(#:asd-file "cl-syntax-interpol.asd"
-       #:asd-system-name "cl-syntax-interpol"))
+    (name "sbcl-cl-syntax")
+    (version "0.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/m2ym/cl-syntax")
+             (commit "03f0c329bbd55b8622c37161e6278366525e2ccc")))
+       (file-name (git-file-name "cl-syntax" version))
+       (sha256
+        (base32 "17ran8xp77asagl31xv8w819wafh6whwfc9p6dgx22ca537gyl4y"))))
+    (build-system asdf-build-system/sbcl)
     (inputs
-     `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-       ("sbcl-cl-interpol" ,sbcl-cl-interpol)))
-    (synopsis "Common Lisp reader Syntax for cl-interpol")
+     `(("cl-annot" ,sbcl-cl-annot)
+       ("cl-interpol" ,sbcl-cl-interpol)
+       ("named-readtables" ,sbcl-named-readtables)
+       ("trivial-types" ,sbcl-trivial-types)))
+    (arguments
+     '(#:asd-systems '("cl-syntax"
+                       "cl-syntax-annot"
+                       "cl-syntax-interpol")))
+    (home-page "https://github.com/m2ym/cl-syntax")
+    (synopsis "Reader Syntax Coventions for Common Lisp and SLIME")
     (description
-     "CL-SYNTAX provides reader syntax coventions for Common Lisp and
-@code{cl-interpol}.")))
+     "CL-SYNTAX provides Reader Syntax Coventions for Common Lisp and SLIME.")
+    (license license:llgpl)))
+
+(define-public cl-syntax
+  (sbcl-package->cl-source-package sbcl-cl-syntax))
 
-(define-public cl-syntax-interpol
-  (sbcl-package->cl-source-package sbcl-cl-syntax-interpol))
+(define-public ecl-cl-syntax
+  (sbcl-package->ecl-package sbcl-cl-syntax))
 
 (define-public sbcl-cl-utilities
   (let ((commit "dce2d2f6387091ea90357a130fa6d13a6776884b")
@@ -4030,9 +3417,7 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
           (base32 "1r46v730yf96nk2vb24qmagv9x96xvd08abqwhf02ghgydv1a7z2"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       '(#:asd-file "cl-utilities.asd"
-         #:asd-system-name "cl-utilities"
-         #:phases
+       '(#:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
@@ -4055,6 +3440,9 @@ everywhere some dumb user might make a mistake.")
 (define-public cl-utilities
   (sbcl-package->cl-source-package sbcl-cl-utilities))
 
+(define-public ecl-cl-utilities
+  (sbcl-package->ecl-package sbcl-cl-utilities))
+
 (define-public sbcl-map-set
   (let ((commit "7b4b545b68b8")
         (revision "1"))
@@ -4080,6 +3468,9 @@ addition, removal, and random selection.")
 (define-public cl-map-set
   (sbcl-package->cl-source-package sbcl-map-set))
 
+(define-public ecl-map-set
+  (sbcl-package->ecl-package sbcl-map-set))
+
 (define-public sbcl-quri
   (let ((commit "b53231c5f19446dd7c24b15a249fefa45ae94f9a")
         (revision "2"))
@@ -4100,8 +3491,7 @@ addition, removal, and random selection.")
        ;; Tests fail with: Component QURI-ASD::QURI-TEST not found,
        ;; required by #<SYSTEM "quri">. Why?
        '(#:tests? #f))
-      (native-inputs `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-                       ("sbcl-prove" ,sbcl-prove)))
+      (native-inputs `(("sbcl-prove" ,sbcl-prove)))
       (inputs `(("sbcl-babel" ,sbcl-babel)
                 ("sbcl-split-sequence" ,sbcl-split-sequence)
                 ("sbcl-cl-utilities" ,sbcl-cl-utilities)
@@ -4116,6 +3506,9 @@ Lisp. It is intended to be a replacement of PURI.")
 (define-public cl-quri
   (sbcl-package->cl-source-package sbcl-quri))
 
+(define-public ecl-quri
+  (sbcl-package->ecl-package sbcl-quri))
+
 (define-public sbcl-myway
   (let ((commit "286230082a11f879c18b93f17ca571c5f676bfb7")
         (revision "1"))
@@ -4137,8 +3530,7 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; by #<SYSTEM "myway">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
+      `(("sbcl-prove" ,sbcl-prove)))
      (inputs
       `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
         ("sbcl-quri" ,sbcl-quri)
@@ -4151,6 +3543,9 @@ Lisp. It is intended to be a replacement of PURI.")
 (define-public cl-myway
   (sbcl-package->cl-source-package sbcl-myway))
 
+(define-public ecl-myway
+  (sbcl-package->ecl-package sbcl-myway))
+
 (define-public sbcl-xsubseq
   (let ((commit "5ce430b3da5cda3a73b9cf5cee4df2843034422b")
         (revision "1"))
@@ -4172,8 +3567,7 @@ Lisp. It is intended to be a replacement of PURI.")
       ;; required by #<SYSTEM "xsubseq">. Why?
       '(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
+      `(("sbcl-prove" ,sbcl-prove)))
      (home-page "https://github.com/fukamachi/xsubseq")
      (synopsis "Efficient way to use \"subseq\"s in Common Lisp")
      (description
@@ -4184,6 +3578,9 @@ effieiently.")
 (define-public cl-xsubseq
   (sbcl-package->cl-source-package sbcl-xsubseq))
 
+(define-public ecl-xsubseq
+  (sbcl-package->ecl-package sbcl-xsubseq))
+
 (define-public sbcl-smart-buffer
   (let ((commit "09b9a9a0b3abaa37abe9a730f5aac2643dca4e62")
         (revision "1"))
@@ -4205,8 +3602,7 @@ effieiently.")
        ;; found, required by #<SYSTEM "smart-buffer">. Why?
        `(#:tests? #f))
       (native-inputs
-       `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-         ("sbcl-prove" ,sbcl-prove)))
+       `(("sbcl-prove" ,sbcl-prove)))
       (inputs
        `(("sbcl-xsubseq" ,sbcl-xsubseq)
          ("sbcl-flexi-streams" ,sbcl-flexi-streams)))
@@ -4220,6 +3616,9 @@ depending on content size.")
 (define-public cl-smart-buffer
   (sbcl-package->cl-source-package sbcl-smart-buffer))
 
+(define-public ecl-smart-buffer
+  (sbcl-package->ecl-package sbcl-smart-buffer))
+
 (define-public sbcl-fast-http
   (let ((commit "502a37715dcb8544cc8528b78143a942de662c5a")
         (revision "2"))
@@ -4241,9 +3640,8 @@ depending on content size.")
        ;; required by #<SYSTEM "fast-http">. Why?
        `(#:tests? #f))
       (native-inputs
-       `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-         ("sbcl-prove" ,sbcl-prove)
-         ("cl-syntax-interpol" ,sbcl-cl-syntax-interpol)))
+       `(("sbcl-prove" ,sbcl-prove)
+         ("cl-syntax" ,sbcl-cl-syntax)))
       (inputs
        `(("sbcl-alexandria" ,sbcl-alexandria)
          ("sbcl-proc-parse" ,sbcl-proc-parse)
@@ -4261,6 +3659,9 @@ Lisp.")
 (define-public cl-fast-http
   (sbcl-package->cl-source-package sbcl-fast-http))
 
+(define-public ecl-fast-http
+  (sbcl-package->ecl-package sbcl-fast-http))
+
 (define-public sbcl-static-vectors
   (package
     (name "sbcl-static-vectors")
@@ -4277,8 +3678,7 @@ Lisp.")
     (native-inputs
      `(("sbcl-fiveam" ,sbcl-fiveam)))
     (inputs
-     `(("sbcl-cffi-grovel" ,sbcl-cffi-grovel)
-       ("sbcl-cffi" ,sbcl-cffi)))
+     `(("sbcl-cffi" ,sbcl-cffi)))
     (build-system asdf-build-system/sbcl)
     (home-page "https://github.com/sionescu/static-vectors")
     (synopsis "Allocate SIMPLE-ARRAYs in static memory")
@@ -4320,6 +3720,9 @@ Only minimal changes required to make your CLOS objects serializable.")
 (define-public cl-marshal
   (sbcl-package->cl-source-package sbcl-marshal))
 
+(define-public ecl-marshal
+  (sbcl-package->ecl-package sbcl-marshal))
+
 (define-public sbcl-checkl
   (let ((commit "80328800d047fef9b6e32dfe6bdc98396aee3cc9")
         (revision "1"))
@@ -4340,7 +3743,8 @@ Only minimal changes required to make your CLOS objects serializable.")
        ;; Error while trying to load definition for system checkl-test from
        ;; pathname [...]/checkl-test.asd: The function CHECKL:DEFINE-TEST-OP
        ;; is undefined.
-       '(#:tests? #f))
+       '(#:asd-files '("checkl.asd")
+         #:tests? #f))
       (native-inputs
        `(("sbcl-fiveam" ,sbcl-fiveam)))
       (inputs
@@ -4358,6 +3762,9 @@ against the last run.")
 (define-public cl-checkl
   (sbcl-package->cl-source-package sbcl-checkl))
 
+(define-public ecl-checkl
+  (sbcl-package->ecl-package sbcl-checkl))
+
 (define-public sbcl-fast-io
   (let ((commit "603f4903dd74fb221859da7058ae6ca3853fe64b")
         (revision "2"))
@@ -4378,7 +3785,8 @@ against the last run.")
       ;; Error while trying to load definition for system fast-io-test from
       ;; pathname [...]/fast-io-test.asd: The function CHECKL:DEFINE-TEST-OP
       ;; is undefined.
-      '(#:tests? #f))
+      '(#:tests? #f
+        #:asd-files '("fast-io.asd")))
      (native-inputs
       `(("sbcl-fiveam" ,sbcl-fiveam)
         ("sbcl-checkl" ,sbcl-checkl)))
@@ -4397,6 +3805,9 @@ streams (though primarily the former, while wrapping the latter).")
 (define-public cl-fast-io
   (sbcl-package->cl-source-package sbcl-fast-io))
 
+(define-public ecl-fast-io
+  (sbcl-package->ecl-package sbcl-fast-io))
+
 (define-public sbcl-jonathan
   (let ((commit "1f448b4f7ac8265e56e1c02b32ce383e65316300")
         (revision "1"))
@@ -4418,11 +3829,9 @@ streams (though primarily the former, while wrapping the latter).")
       ;; required by #<SYSTEM "jonathan">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
+      `(("sbcl-prove" ,sbcl-prove)))
      (inputs
       `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-        ("sbcl-cl-syntax-annot" ,sbcl-cl-syntax-annot)
         ("sbcl-fast-io" ,sbcl-fast-io)
         ("sbcl-proc-parse" ,sbcl-proc-parse)
         ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)))
@@ -4437,6 +3846,9 @@ CCL.")
 (define-public cl-jonathan
   (sbcl-package->cl-source-package sbcl-jonathan))
 
+(define-public ecl-jonathan
+  (sbcl-package->ecl-package sbcl-jonathan))
+
 (define-public sbcl-http-body
   (let ((commit "dd01dc4f5842e3d29728552e5163acce8386eb73")
         (revision "1"))
@@ -4458,8 +3870,7 @@ CCL.")
       ;; found, required by #<SYSTEM "http-body">. Why?
       `(#:tests? #f))
      (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
+      `(("sbcl-prove" ,sbcl-prove)))
      (inputs
       `(("sbcl-fast-http" ,sbcl-fast-http)
         ("sbcl-jonathan" ,sbcl-jonathan)
@@ -4475,6 +3886,9 @@ multipart/form-data.")
 (define-public cl-http-body
   (sbcl-package->cl-source-package sbcl-http-body))
 
+(define-public ecl-http-body
+  (sbcl-package->ecl-package sbcl-http-body))
+
 (define-public sbcl-circular-streams
   (let ((commit "e770bade1919c5e8533dd2078c93c3d3bbeb38df")
         (revision "1"))
@@ -4509,46 +3923,59 @@ reset to 0 and you're able to read it again.")
 (define-public cl-circular-streams
   (sbcl-package->cl-source-package sbcl-circular-streams))
 
-(define-public sbcl-lack-request
+(define-public ecl-circular-streams
+  (sbcl-package->ecl-package sbcl-circular-streams))
+
+(define-public sbcl-lack
   (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
         (revision "1"))
     (package
-     (name "sbcl-lack-request")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack-request" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-request.asd"
-        #:asd-system-name "lack-request"
-        #:test-asd-file "t-lack-request.asd"
-        ;; XXX: Component :CLACK-TEST not found
-        #:tests? #f))
-     (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
-     (inputs
-      `(("sbcl-quri" ,sbcl-quri)
-        ("sbcl-http-body" ,sbcl-http-body)
-        ("sbcl-circular-streams" ,sbcl-circular-streams)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
+      (name "sbcl-lack")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/lack")
+               (commit commit)))
+         (file-name (git-file-name "lack" version))
+         (sha256
+          (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("prove" ,sbcl-prove)))
+      (inputs
+       `(("circular-streams" ,sbcl-circular-streams)
+         ("http-body" ,sbcl-http-body)
+         ("ironclad" ,sbcl-ironclad)
+         ("local-time" ,sbcl-local-time)
+         ("quri" ,sbcl-quri)
+         ("trivial-mimes" ,sbcl-trivial-mimes)))
+      (arguments
+       '(#:asd-systems '("lack"
+                         "lack-request"
+                         "lack-response"
+                         "lack-component"
+                         "lack-util"
+                         "lack-middleware-backtrace"
+                         "lack-middleware-static")
+         #:test-asd-file "t-lack.asd"
+         ;; XXX: Component :CLACK not found
+         #:tests? #f))
+      (home-page "https://github.com/fukamachi/lack")
+      (synopsis "Lack, the core of Clack")
+      (description
+       "Lack is a Common Lisp library which allows web applications to be
 constructed of modular components.  It was originally a part of Clack, however
 it's going to be rewritten as an individual project since Clack v2 with
 performance and simplicity in mind.")
-     (license license:llgpl))))
+      (license license:llgpl))))
 
-(define-public cl-lack-request
-  (sbcl-package->cl-source-package sbcl-lack-request))
+(define-public cl-lack
+  (sbcl-package->cl-source-package sbcl-lack))
+
+(define-public ecl-lack
+  (sbcl-package->ecl-package sbcl-lack))
 
 (define-public sbcl-local-time
   (let ((commit "62792705245168d3fc2e04164b9a143477284142")
@@ -4585,156 +4012,8 @@ Long Painful History of Time\".")
 (define-public cl-local-time
   (sbcl-package->cl-source-package sbcl-local-time))
 
-(define-public sbcl-lack-response
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack-response")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-response.asd"
-        #:asd-system-name "lack-response"
-        ;; XXX: no tests for lack-response.
-        #:tests? #f))
-     (native-inputs
-      `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-        ("sbcl-prove" ,sbcl-prove)))
-     (inputs
-      `(("sbcl-quri" ,sbcl-quri)
-        ("sbcl-http-body" ,sbcl-http-body)
-        ("sbcl-circular-streams" ,sbcl-circular-streams)
-        ("sbcl-local-time" ,sbcl-local-time)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack-response
-  (sbcl-package->cl-source-package sbcl-lack-response))
-
-(define-public sbcl-lack-component
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack-component")
-     (version (git-version "0.0.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack-component" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-component.asd"
-        #:asd-system-name "lack-component"
-        #:test-asd-file "t-lack-component.asd"
-        ;; XXX: Component :LACK-TEST not found
-        #:tests? #f))
-     (native-inputs
-      `(("prove-asdf" ,sbcl-prove-asdf)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack-component
-  (sbcl-package->cl-source-package sbcl-lack-component))
-
-(define-public sbcl-lack-util
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack-util")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack-util" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-util.asd"
-        #:asd-system-name "lack-util"
-        #:test-asd-file "t-lack-util.asd"
-        ;; XXX: Component :LACK-TEST not found
-        #:tests? #f))
-     (native-inputs
-      `(("prove-asdf" ,sbcl-prove-asdf)))
-     (inputs
-      `(("sbcl-ironclad" ,sbcl-ironclad)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack-util
-  (sbcl-package->cl-source-package sbcl-lack-util))
-
-(define-public sbcl-lack-middleware-backtrace
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack-middleware-backtrace")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack-middleware-backtrace" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-middleware-backtrace.asd"
-        #:asd-system-name "lack-middleware-backtrace"
-        #:test-asd-file "t-lack-middleware-backtrace.asd"
-        ;; XXX: Component :LACK not found
-        #:tests? #f))
-     (native-inputs
-      `(("prove-asdf" ,sbcl-prove-asdf)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack-middleware-backtrace
-  (sbcl-package->cl-source-package sbcl-lack-middleware-backtrace))
+(define-public ecl-local-time
+  (sbcl-package->ecl-package sbcl-local-time))
 
 (define-public sbcl-trivial-mimes
   (let ((commit "303f8ac0aa6ca0bc139aa3c34822e623c3723fab")
@@ -4752,20 +4031,6 @@ performance and simplicity in mind.")
          (sha256
           (base32 "17jxgl47r695bvsb7wi3n2ws5rp1zzgvw0zii8cy5ggw4b4ayv6m"))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after
-               'unpack 'fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((anchor "#p\"/etc/mime.types\""))
-                 (substitute* "mime-types.lisp"
-                   ((anchor all)
-                    (string-append
-                     anchor "\n"
-                     "(asdf:system-relative-pathname :trivial-mimes "
-                     "\"../../share/common-lisp/" (%lisp-type)
-                     "-source/trivial-mimes/mime.types\")")))))))))
       (native-inputs
        `(("stefil" ,sbcl-hu.dwim.stefil)))
       (inputs
@@ -4783,83 +4048,6 @@ mime-type of a file.")
 (define-public ecl-trivial-mimes
   (sbcl-package->ecl-package sbcl-trivial-mimes))
 
-(define-public sbcl-lack-middleware-static
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack-middleware-static")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack-middleware-static" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:asd-file "lack-middleware-static.asd"
-        #:asd-system-name "lack-middleware-static"
-        #:test-asd-file "t-lack-middleware-static.asd"
-        ;; XXX: Component :LACK not found
-        #:tests? #f))
-     (native-inputs
-      `(("prove-asdf" ,sbcl-prove-asdf)))
-     (inputs
-      `(("sbcl-ironclad" ,sbcl-ironclad)
-        ("sbcl-trivial-mimes" ,sbcl-trivial-mimes)
-        ("sbcl-local-time" ,sbcl-local-time)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack-middleware-static
-  (sbcl-package->cl-source-package sbcl-lack-middleware-static))
-
-(define-public sbcl-lack
-  (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
-        (revision "1"))
-    (package
-     (name "sbcl-lack")
-     (version (git-version "0.1.0" revision commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/lack")
-             (commit commit)))
-       (file-name (git-file-name "lack" version))
-       (sha256
-        (base32 "1avh4ygcj9xcx4m17nj0wnxxaisk26w4ljs2bibzxaln24x7pi85"))))
-     (build-system asdf-build-system/sbcl)
-     (arguments
-      '(#:test-asd-file "t-lack.asd"
-        ;; XXX: Component :CLACK not found
-        #:tests? #f))
-     (native-inputs
-      `(("prove-asdf" ,sbcl-prove-asdf)))
-     (inputs
-      `(("sbcl-lack-component" ,sbcl-lack-component)
-        ("sbcl-lack-util" ,sbcl-lack-util)))
-     (home-page "https://github.com/fukamachi/lack")
-     (synopsis "Lack, the core of Clack")
-     (description
-      "Lack is a Common Lisp library which allows web applications to be
-constructed of modular components.  It was originally a part of Clack, however
-it's going to be rewritten as an individual project since Clack v2 with
-performance and simplicity in mind.")
-     (license license:llgpl))))
-
-(define-public cl-lack
-  (sbcl-package->cl-source-package sbcl-lack))
-
 (define-public sbcl-ningle
   (let ((commit "50bd4f09b5a03a7249bd4d78265d6451563b25ad")
         (revision "1"))
@@ -4903,15 +4091,11 @@ performance and simplicity in mind.")
                  fasl-files)
                #t)))))
       (native-inputs
-       `(("sbcl-prove-asdf" ,sbcl-prove-asdf)
-         ("sbcl-prove" ,sbcl-prove)))
+       `(("sbcl-prove" ,sbcl-prove)))
       (inputs
        `(("sbcl-cl-syntax" ,sbcl-cl-syntax)
-         ("sbcl-cl-syntax-annot" ,sbcl-cl-syntax-annot)
          ("sbcl-myway" ,sbcl-myway)
-         ("sbcl-lack-request" ,sbcl-lack-request)
-         ("sbcl-lack-response" ,sbcl-lack-response)
-         ("sbcl-lack-component" ,sbcl-lack-component)
+         ("sbcl-lack" ,sbcl-lack)
          ("sbcl-alexandria" ,sbcl-alexandria)
          ("sbcl-babel" ,sbcl-babel)))
       (home-page "https://8arrow.org/ningle/")
@@ -4923,6 +4107,9 @@ performance and simplicity in mind.")
 (define-public cl-ningle
   (sbcl-package->cl-source-package sbcl-ningle))
 
+(define-public ecl-ningle
+  (sbcl-package->ecl-package sbcl-ningle))
+
 (define-public sbcl-cl-fastcgi
   (let ((commit "d576d20eeb12f225201074b28934ba395b15781a")
         (revision "1"))
@@ -4968,72 +4155,49 @@ mostly Common Lisp implementation.")
 (define-public ecl-cl-fastcgi
   (sbcl-package->ecl-package sbcl-cl-fastcgi))
 
-(define clack-commit "e3e032843bb1220ab96263c411aa7f2feb4746e0")
-(define clack-revision "1")
-
 (define-public sbcl-clack
-  (package
-    (name "sbcl-clack")
-    (version (git-version "2.0.0" clack-revision clack-commit))
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/fukamachi/clack")
-             (commit clack-commit)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1ymzs6qyrwhlj6cgqsnpyn6g5cbp7a3s1vgxwna20y2q7y4iacy0"))))
-    (build-system asdf-build-system/sbcl)
-    (inputs
-     `(("sbcl-lack" ,sbcl-lack)
-       ("sbcl-lack-middleware-backtrace" ,sbcl-lack-middleware-backtrace)
-       ("sbcl-bordeaux-threads" ,sbcl-bordeaux-threads)))
-    (home-page "https://github.com/fukamachi/clack")
-    (synopsis "Web Application Environment for Common Lisp")
-    (description
-     "Clack is a web application environment for Common Lisp inspired by
+  (let ((commit "e3e032843bb1220ab96263c411aa7f2feb4746e0")
+        (revision "1"))
+    (package
+      (name "sbcl-clack")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/clack")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1ymzs6qyrwhlj6cgqsnpyn6g5cbp7a3s1vgxwna20y2q7y4iacy0"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cl-fastcgi" ,sbcl-cl-fastcgi)
+         ("flexi-streams" ,sbcl-flexi-streams)
+         ("hunchentoot" ,sbcl-hunchentoot)
+         ("lack" ,sbcl-lack)
+         ("split-sequence" ,sbcl-split-sequence)
+         ("usocket" ,sbcl-usocket)
+         ("quri" ,sbcl-quri)))
+      (arguments
+       '(#:asd-systems '("clack"
+                         "clack-handler-fcgi"
+                         "clack-socket"
+                         "clack-handler-hunchentoot")))
+      (home-page "https://github.com/fukamachi/clack")
+      (synopsis "Web Application Environment for Common Lisp")
+      (description
+       "Clack is a web application environment for Common Lisp inspired by
 Python's WSGI and Ruby's Rack.")
-    (license license:llgpl)))
+      (license license:llgpl))))
 
 (define-public cl-clack
   (sbcl-package->cl-source-package sbcl-clack))
 
-(define-public sbcl-clack-handler-fcgi
-  (package
-    (inherit sbcl-clack)
-    (name "sbcl-clack-handler-fcgi")
-    (version (git-version "0.3.1" clack-revision clack-commit))
-    (inputs
-     `(("cl-fastcgi" ,sbcl-cl-fastcgi)
-       ("alexandria" ,sbcl-alexandria)
-       ("flexi-streams" ,sbcl-flexi-streams)
-       ("usocket" ,sbcl-usocket)
-       ("quri" ,sbcl-quri)))
-    (synopsis "Web Application Environment for Common Lisp (FastCGI handler)")))
-
-(define-public cl-clack-handler-fcgi
-  (sbcl-package->cl-source-package sbcl-clack-handler-fcgi))
-
-(define sbcl-clack-socket
-  (package
-    (inherit sbcl-clack)
-    (name "sbcl-clack-socket")
-    (version (git-version "0.1" clack-revision clack-commit))))
-
-(define-public sbcl-clack-handler-hunchentoot
-  (package
-    (inherit sbcl-clack)
-    (name "sbcl-clack-handler-hunchentoot")
-    (version (git-version "0.4.0" clack-revision clack-commit))
-    (inputs
-     `(("hunchentoot" ,sbcl-hunchentoot)
-       ("clack-socket" ,sbcl-clack-socket)
-       ("flexi-streams" ,sbcl-flexi-streams)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("split-sequence" ,sbcl-split-sequence)
-       ("alexandria" ,sbcl-alexandria)))
-    (synopsis "Web Application Environment for Common Lisp (Hunchentoot handler)")))
+(define-public ecl-clack
+  (sbcl-package->ecl-package sbcl-clack))
 
 (define-public sbcl-log4cl
   (let ((commit "611e094458504b938d49de904eab141285328c7c")
@@ -5213,8 +4377,7 @@ the CFFI approach used by burgled-batteries, but has the same goal.")
           (base32 "03g5qks4c59nmxa48pbslxkfh77h8hn8566jddp6m9pl15dzzpxd"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:asd-file "parse-declarations-1.0.asd"
-         #:asd-system-name "parse-declarations-1.0"))
+       `(#:asd-systems '("parse-declarations-1.0")))
       (home-page "https://common-lisp.net/project/parse-declarations/")
       (synopsis "Parse, filter, and build declarations")
       (description
@@ -5258,7 +4421,7 @@ high-level way.  This library provides such operators.")
       ;; MIT
       (license license:expat))))
 
-(define-public cl-cl-quickcheck
+(define-public cl-quickcheck
   (sbcl-package->cl-source-package sbcl-cl-quickcheck))
 
 (define-public ecl-cl-quickcheck
@@ -5312,7 +4475,6 @@ high-level way.  This library provides such operators.")
       (inputs
        `(("python" ,python)
          ("sbcl-cffi" ,sbcl-cffi)
-         ("sbcl-cffi-grovel" ,sbcl-cffi-grovel)
          ("sbcl-alexandria" , sbcl-alexandria)
          ("sbcl-parse-declarations-1.0" ,sbcl-parse-declarations)
          ("sbcl-trivial-garbage" ,sbcl-trivial-garbage)))
@@ -5423,8 +4585,7 @@ basic everyday functions and macros.")
       (arguments
        ;; Guix incorrectly assumes the "8" is part of the version
        ;; number and lobs it off.
-       `(#:asd-file "trivial-utf-8.asd"
-         #:asd-system-name "trivial-utf-8"))
+       `(#:asd-systems '("trivial-utf-8")))
       (build-system asdf-build-system/sbcl)
       (synopsis "UTF-8 input/output library")
       (description
@@ -5503,13 +4664,12 @@ formats.")
 (define-public ecl-swap-bytes
   (sbcl-package->ecl-package sbcl-swap-bytes))
 
-(define-public sbcl-iolib.asdf
+(define-public sbcl-iolib
   ;; Latest release is from June 2017.
   (let ((commit "7f5ea3a8457a29d224b24653c2b3657fb1898021")
         (revision "2"))
     (package
-      (name "sbcl-iolib.asdf")
-      (build-system asdf-build-system/sbcl)
+      (name "sbcl-iolib")
       (version (git-version "0.8.3" revision commit))
       (home-page "https://github.com/sionescu/iolib")
       (source
@@ -5522,135 +4682,41 @@ formats.")
          (sha256
           (base32
            "1bg5w7lm61hqk4b0svmri8a590q36z76jfa0sdgzb39r98c04w12"))))
+      (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       `(("alexandria" ,sbcl-alexandria)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cffi" ,sbcl-cffi)
+         ("idna" ,sbcl-idna)
+         ("libfixposix" ,libfixposix)
+         ("split-sequence" ,sbcl-split-sequence)
+         ("swap-bytes" ,sbcl-swap-bytes)))
       (arguments
-       '(#:asd-file "iolib.asdf.asd"))
-      (synopsis "ASDF component classes for IOLib, a Common Lisp I/O library")
+       '(#:asd-files '("iolib.asdf.asd"
+                       "iolib.conf.asd"
+                       "iolib.common-lisp.asd"
+                       "iolib.base.asd"
+                       "iolib.asd")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/syscalls/ffi-functions-unix.lisp"
+                 (("\\(:default \"libfixposix\"\\)")
+                  (string-append
+                   "(:default \""
+                   (assoc-ref inputs "libfixposix") "/lib/libfixposix\")")))
+               ;; Socket tests need Internet access, disable them.
+               (substitute* "iolib.asd"
+                 (("\\(:file \"sockets\" :depends-on \\(\"pkgdcl\" \"defsuites\"\\)\\)")
+                  "")))))))
+      (synopsis "Common Lisp I/O library")
       (description "IOlib is to be a better and more modern I/O library than
 the standard Common Lisp library.  It contains a socket library, a DNS
 resolver, an I/O multiplexer(which supports @code{select(2)}, @code{epoll(4)}
 and @code{kqueue(2)}), a pathname library and file-system utilities.")
       (license license:expat))))
 
-(define-public sbcl-iolib.conf
-  (package
-    (inherit sbcl-iolib.asdf)
-    (name "sbcl-iolib.conf")
-    (inputs
-     `(("iolib.asdf" ,sbcl-iolib.asdf)))
-    (arguments
-     '(#:asd-file "iolib.conf.asd"))
-    (synopsis "Compile-time configuration for IOLib, a Common Lisp I/O library")))
-
-(define-public sbcl-iolib.common-lisp
-  (package
-    (inherit sbcl-iolib.asdf)
-    (name "sbcl-iolib.common-lisp")
-    (inputs
-     `(("iolib.asdf" ,sbcl-iolib.asdf)
-       ("iolib.conf" ,sbcl-iolib.conf)))
-    (arguments
-     '(#:asd-file "iolib.common-lisp.asd"))
-    (synopsis "Slightly modified Common Lisp for IOLib, a Common Lisp I/O library")))
-
-(define-public sbcl-iolib.base
-  (package
-    (inherit sbcl-iolib.asdf)
-    (name "sbcl-iolib.base")
-    (inputs
-     `(("iolib.asdf" ,sbcl-iolib.asdf)
-       ("iolib.conf" ,sbcl-iolib.conf)
-       ("iolib.common-lisp" ,sbcl-iolib.common-lisp)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     '(#:asd-file "iolib.base.asd"))
-    (synopsis "Base package for IOLib, a Common Lisp I/O library")))
-
-(define-public sbcl-iolib.grovel
-  (deprecated-package "sbcl-iolib.grovel" sbcl-cffi-grovel))
-
-(define sbcl-iolib+syscalls
-  (package
-    (inherit sbcl-iolib.asdf)
-    (name "sbcl-iolib+syscalls")
-    (inputs
-     `(("iolib.asdf" ,sbcl-iolib.asdf)
-       ("iolib.conf" ,sbcl-iolib.conf)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
-       ("iolib.base" ,sbcl-iolib.base)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("idna" ,sbcl-idna)
-       ("swap-bytes" ,sbcl-swap-bytes)
-       ("libfixposix" ,libfixposix)
-       ("cffi" ,sbcl-cffi)))
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (arguments
-     '(#:asd-file "iolib.asd"
-       #:asd-system-name "iolib/syscalls"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/syscalls/ffi-functions-unix.lisp"
-               (("\\(:default \"libfixposix\"\\)")
-                (string-append
-                 "(:default \""
-                 (assoc-ref inputs "libfixposix") "/lib/libfixposix\")")))
-             ;; Socket tests need Internet access, disable them.
-             (substitute* "iolib.asd"
-               (("\\(:file \"sockets\" :depends-on \\(\"pkgdcl\" \"defsuites\"\\)\\)")
-                "")))))))
-    (synopsis "Common Lisp I/O library")))
-
-(define sbcl-iolib+multiplex
-  (package
-    (inherit sbcl-iolib+syscalls)
-    (name "sbcl-iolib+multiplex")
-    (inputs
-     `(("iolib+syscalls" ,sbcl-iolib+syscalls)
-       ,@(package-inputs sbcl-iolib+syscalls)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
-       ((#:asd-system-name _) "iolib/multiplex")))))
-
-(define sbcl-iolib+streams
-  (package
-    (inherit sbcl-iolib+syscalls)
-    (name "sbcl-iolib+streams")
-    (inputs
-     `(("iolib+multiplex" ,sbcl-iolib+multiplex)
-       ,@(package-inputs sbcl-iolib+syscalls)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
-       ((#:asd-system-name _) "iolib/streams")))))
-
-(define sbcl-iolib+sockets
-  (package
-    (inherit sbcl-iolib+syscalls)
-    (name "sbcl-iolib+sockets")
-    (inputs
-     `(("iolib+syscalls" ,sbcl-iolib+syscalls)
-       ("iolib+streams" ,sbcl-iolib+streams)
-       ,@(package-inputs sbcl-iolib+syscalls)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
-       ((#:asd-system-name _) "iolib/sockets")))))
-
-(define-public sbcl-iolib
-  (package
-    (inherit sbcl-iolib+syscalls)
-    (name "sbcl-iolib")
-    (inputs
-     `(("iolib+multiplex" ,sbcl-iolib+multiplex)
-       ("iolib+streams" ,sbcl-iolib+streams)
-       ("iolib+sockets" ,sbcl-iolib+sockets)
-       ,@(package-inputs sbcl-iolib+syscalls)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
-       ((#:asd-system-name _) "iolib")))))
-
 (define-public cl-iolib
   (let ((parent (sbcl-package->cl-source-package sbcl-iolib)))
     (package
@@ -5660,6 +4726,9 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
        `(("libfixposix" ,libfixposix)
          ,@(package-propagated-inputs parent))))))
 
+(define-public ecl-iolib
+  (sbcl-package->ecl-package sbcl-iolib))
+
 (define-public sbcl-ieee-floats
   (let ((commit "566b51a005e81ff618554b9b2f0b795d3b29398d")
         (revision "1"))
@@ -5688,6 +4757,9 @@ floating point values to IEEE 754 binary representation.")
 (define-public cl-ieee-floats
   (sbcl-package->cl-source-package sbcl-ieee-floats))
 
+(define-public ecl-ieee-floats
+  (sbcl-package->ecl-package sbcl-ieee-floats))
+
 (define sbcl-closure-common
   (let ((commit "e3c5f5f454b72b01b89115e581c3c52a7e201e5c")
         (revision "1"))
@@ -5715,14 +4787,12 @@ Closure is a reference to the web browser it was originally written for.")
       ;; TODO: License?
       (license #f))))
 
-(define-public sbcl-cxml+xml
+(define-public sbcl-cxml
   (let ((commit "00b22bf4c4cf11c993d5866fae284f95ab18e6bf")
         (revision "1"))
     (package
-      (name "sbcl-cxml+xml")
-      (build-system asdf-build-system/sbcl)
+      (name "sbcl-cxml")
       (version (git-version "0.0.0" revision commit))
-      (home-page "https://common-lisp.net/project/cxml/")
       (source
        (origin
          (method git-fetch)
@@ -5733,81 +4803,24 @@ Closure is a reference to the web browser it was originally written for.")
          (sha256
           (base32
            "13kif7rf3gqdycsk9zq0d7y0g9y81krkl0z87k0p2fkbjfgrph37"))))
-      (inputs
-       `(("closure-common" ,sbcl-closure-common)
-         ("puri" ,sbcl-puri)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
-      (arguments
-       `(#:asd-file "cxml.asd"
-         #:asd-system-name "cxml/xml"))
-      (synopsis "Common Lisp XML parser")
-      (description "CXML implements a namespace-aware, validating XML 1.0
-parser as well as the DOM Level 2 Core interfaces.  Two parser interfaces are
-offered, one SAX-like, the other similar to StAX.")
-      (license license:llgpl))))
-
-(define sbcl-cxml+dom
-  (package
-    (inherit sbcl-cxml+xml)
-    (name "sbcl-cxml+dom")
-    (inputs
-     `(("closure-common" ,sbcl-closure-common)
-       ("puri" ,sbcl-puri)
-       ("cxml+xml" ,sbcl-cxml+xml)))
-    (arguments
-     `(#:asd-file "cxml.asd"
-       #:asd-system-name "cxml/dom"))))
-
-(define sbcl-cxml+klacks
-  (package
-    (inherit sbcl-cxml+xml)
-    (name "sbcl-cxml+klacks")
-    (inputs
-     `(("closure-common" ,sbcl-closure-common)
-       ("puri" ,sbcl-puri)
-       ("cxml+xml" ,sbcl-cxml+xml)))
-    (arguments
-     `(#:asd-file "cxml.asd"
-       #:asd-system-name "cxml/klacks"))))
-
-(define sbcl-cxml+test
-  (package
-    (inherit sbcl-cxml+xml)
-    (name "sbcl-cxml+test")
-    (inputs
-     `(("closure-common" ,sbcl-closure-common)
-       ("puri" ,sbcl-puri)
-       ("cxml+xml" ,sbcl-cxml+xml)))
-    (arguments
-     `(#:asd-file "cxml.asd"
-       #:asd-system-name "cxml/test"))))
-
-(define-public sbcl-cxml
-  (package
-    (inherit sbcl-cxml+xml)
-    (name "sbcl-cxml")
+      (build-system asdf-build-system/sbcl)
     (inputs
      `(("closure-common" ,sbcl-closure-common)
        ("puri" ,sbcl-puri)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
-       ("cxml+dom" ,sbcl-cxml+dom)
-       ("cxml+klacks" ,sbcl-cxml+klacks)
-       ("cxml+test" ,sbcl-cxml+test)))
-    (arguments
-     `(#:asd-file "cxml.asd"
-       #:asd-system-name "cxml"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'build 'install-dtd
-           (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "catalog.dtd"
-                           (string-append
-                            (assoc-ref outputs "out")
-                            "/lib/" (%lisp-type))))))))))
+       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+    (synopsis "Common Lisp XML parser")
+    (description "CXML implements a namespace-aware, validating XML 1.0
+parser as well as the DOM Level 2 Core interfaces.  Two parser interfaces are
+offered, one SAX-like, the other similar to StAX.")
+    (home-page "https://common-lisp.net/project/cxml/")
+    (license license:llgpl))))
 
 (define-public cl-cxml
   (sbcl-package->cl-source-package sbcl-cxml))
 
+(define-public ecl-cxml
+  (sbcl-package->ecl-package sbcl-cxml))
+
 (define-public sbcl-cl-reexport
   (let ((commit "312f3661bbe187b5f28536cd7ec2956e91366c3b")
         (revision "1"))
@@ -5839,6 +4852,9 @@ cookie headers, cookie creation, cookie jar creation and more.")
 (define-public cl-reexport
   (sbcl-package->cl-source-package sbcl-cl-reexport))
 
+(define-public ecl-cl-reexport
+  (sbcl-package->ecl-package sbcl-cl-reexport))
+
 (define-public sbcl-cl-cookie
   (let ((commit "cea55aed8b9ad25fafd13defbcb9fe8f41b29546")
         (revision "1"))
@@ -5864,8 +4880,7 @@ cookie headers, cookie creation, cookie jar creation and more.")
          ("cl-ppcre" ,sbcl-cl-ppcre)
          ("local-time" ,sbcl-local-time)))
       (native-inputs
-       `(("prove-asdf" ,sbcl-prove-asdf)
-         ("prove" ,sbcl-prove)))
+       `(("prove" ,sbcl-prove)))
       (arguments
        ;; TODO: Tests fail because cl-cookie depends on cl-cookie-test.
        `(#:tests? #f))
@@ -5877,6 +4892,9 @@ cookie headers, cookie creation, cookie jar creation and more.")
 (define-public cl-cookie
   (sbcl-package->cl-source-package sbcl-cl-cookie))
 
+(define-public ecl-cl-cookie
+  (sbcl-package->ecl-package sbcl-cl-cookie))
+
 (define-public sbcl-dexador
   (let ((commit "953090f04c4d1a9ee6632b90133cdc297b68badc")
         (revision "1"))
@@ -5914,8 +4932,7 @@ cookie headers, cookie creation, cookie jar creation and more.")
          ("alexandria" ,sbcl-alexandria)))
       (native-inputs
        `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)
-         ("lack-request" ,sbcl-lack-request)
+         ("lack" ,sbcl-lack)
          ("clack" ,sbcl-clack)
          ("babel" ,sbcl-babel)
          ("alexandria" ,sbcl-alexandria)
@@ -5984,6 +5001,9 @@ This library offers macros to deal with symbols from any namespace.")
 (define-public cl-lisp-namespace
   (sbcl-package->cl-source-package sbcl-lisp-namespace))
 
+(define-public ecl-lisp-namespace
+  (sbcl-package->ecl-package sbcl-lisp-namespace))
+
 (define-public sbcl-trivial-cltl2
   (let ((commit "8a3bda30dc25d2f65fcf514d0eb6e6db75252c61")
         (revision "2"))
@@ -6012,6 +5032,9 @@ and it exports symbols from implementation-specific packages.")
 (define-public cl-trivial-cltl2
   (sbcl-package->cl-source-package sbcl-trivial-cltl2))
 
+(define-public ecl-trivial-cltl2
+  (sbcl-package->ecl-package sbcl-trivial-cltl2))
+
 (define-public sbcl-introspect-environment
   (let ((commit "fff42f8f8fd0d99db5ad6c5812e53de7d660020b")
         (revision "1"))
@@ -6056,6 +5079,9 @@ can and/or provide reasonable defaults.")
 (define-public cl-introspect-environment
   (sbcl-package->cl-source-package sbcl-introspect-environment))
 
+(define-public ecl-introspect-environment
+  (sbcl-package->ecl-package sbcl-introspect-environment))
+
 (define-public sbcl-type-i
   (let ((commit "d34440ab4ebf5a46a58deccb35950b15670e3667")
         (revision "2"))
@@ -6091,6 +5117,13 @@ the return type of a function.")
 (define-public cl-type-i
   (sbcl-package->cl-source-package sbcl-type-i))
 
+(define-public ecl-type-i
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-type-i))
+    (arguments
+     ;; The tests get stuck indefinitly
+     '(#:tests? #f))))
+
 (define-public sbcl-optima
   (let ((commit "373b245b928c1a5cce91a6cb5bfe5dd77eb36195")
         (revision "1"))
@@ -6126,6 +5159,9 @@ optimizing techniques widely used in the functional programming world.")
 (define-public cl-optima
   (sbcl-package->cl-source-package sbcl-optima))
 
+(define-public ecl-optima
+  (sbcl-package->ecl-package sbcl-optima))
+
 (define-public sbcl-fare-quasiquote
   (let ((commit "640d39a0451094071b3e093c97667b3947f43639")
         (revision "1"))
@@ -6145,11 +5181,15 @@ optimizing techniques widely used in the functional programming world.")
          (sha256
           (base32 "1g6q11l50kgija9f55lzqpcwvaq0ljiw8v1j265hnyg6nahjwjvg"))))
       (inputs
-       `(("fare-utils" ,sbcl-fare-utils)))
+       `(("fare-utils" ,sbcl-fare-utils)
+         ("named-readtables" ,sbcl-named-readtables)
+         ("optima" ,sbcl-optima)))
       (arguments
        ;; XXX: Circular dependencies: Tests depend on subsystems,
        ;; which depend on the main systems.
        `(#:tests? #f
+         #:asd-systems '("fare-quasiquote"
+                         "fare-quasiquote-extras")
          #:phases
          (modify-phases %standard-phases
            ;; XXX: Require 1.0.0 version of fare-utils, and we package some
@@ -6159,7 +5199,11 @@ optimizing techniques widely used in the functional programming world.")
              (lambda _
                (substitute* "fare-quasiquote.asd"
                  (("\\(:version \"fare-utils\" \"1.0.0\"\\)")
-                  "\"fare-utils\"")))))))
+                  "\"fare-utils\""))
+               (substitute* "fare-quasiquote-optima.asd"
+                 (("\\(:version \"optima\" \"1\\.0\"\\)")
+                  "\"optima\""))
+               #t)))))
       (synopsis "Pattern-matching friendly implementation of quasiquote")
       (description "The main purpose of this n+2nd reimplementation of
 quasiquote is enable matching of quasiquoted patterns, using Optima or
@@ -6169,222 +5213,97 @@ Trivia.")
 (define-public cl-fare-quasiquote
   (sbcl-package->cl-source-package sbcl-fare-quasiquote))
 
-(define-public sbcl-fare-quasiquote-optima
-  (package
-    (inherit sbcl-fare-quasiquote)
-    (name "sbcl-fare-quasiquote-optima")
-    (inputs
-     `(("optima" ,sbcl-optima)
-       ("fare-quasiquote" ,sbcl-fare-quasiquote)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-requirement
-           (lambda _
-             (substitute* "fare-quasiquote-optima.asd"
-               (("\\(:version \"optima\" \"1\\.0\"\\)")
-                "\"optima\""))
-             #t)))))))
-
-(define-public cl-fare-quasiquote-optima
-  (sbcl-package->cl-source-package sbcl-fare-quasiquote-optima))
+(define-public ecl-fare-quasiquote
+  (sbcl-package->ecl-package sbcl-fare-quasiquote))
 
-(define-public sbcl-fare-quasiquote-readtable
-  (package
-    (inherit sbcl-fare-quasiquote)
-    (name "sbcl-fare-quasiquote-readtable")
-    (inputs
-     `(("fare-quasiquote" ,sbcl-fare-quasiquote)
-       ("named-readtables" ,sbcl-named-readtables)))
-    (description "The main purpose of this n+2nd reimplementation of
-quasiquote is enable matching of quasiquoted patterns, using Optima or
-Trivia.
-
-This package uses fare-quasiquote with named-readtable.")))
-
-(define-public cl-fare-quasiquote-readtable
-  (sbcl-package->cl-source-package sbcl-fare-quasiquote-readtable))
-
-(define-public sbcl-fare-quasiquote-extras
-  (package
-    (inherit sbcl-fare-quasiquote)
-    (name "sbcl-fare-quasiquote-extras")
-    (build-system asdf-build-system/sbcl)
-    (inputs
-     `(("fare-quasiquote-optima" ,sbcl-fare-quasiquote-optima)
-       ("fare-quasiquote-readtable" ,sbcl-fare-quasiquote-readtable)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib/" (%lisp-type))))
-               (mkdir-p lib)
-               (install-file "fare-quasiquote-extras.asd" lib)
-               (make-file-writable
-                (string-append lib "/fare-quasiquote-extras.asd"))
-               #t))))))
-    (description "This library combines @code{fare-quasiquote-readtable} and
-@code{fare-quasiquote-optima}.")))
-
-(define-public cl-fare-quasiquote-extras
-  (package
-    (inherit cl-fare-quasiquote)
-    (name "cl-fare-quasiquote-extras")
-    (build-system asdf-build-system/source)
-    (propagated-inputs
-     `(("fare-quasiquote" ,cl-fare-quasiquote)
-       ("fare-quasiquote-optima" ,cl-fare-quasiquote-optima)
-       ("fare-quasiquote-readtable" ,cl-fare-quasiquote-readtable)))
-    (description "This library combines @code{fare-quasiquote-readtable} and
-@code{fare-quasiquote-optima}.")))
-
-(define-public sbcl-trivia.level0
+;;; Split the trivia package in two to work around the circular dependency
+;;; between guicho271828/trivia and guicho271828/type-i.
+(define-public sbcl-trivia.trivial
   (let ((commit "37698b47a14c2007630468de7a993694ef7bd475")
         (revision "2"))
     (package
-      (name "sbcl-trivia.level0")
-      (build-system asdf-build-system/sbcl)
+      (name "sbcl-trivia.trivial")
       (version (git-version "0.0.0" revision commit))
-      (home-page "https://github.com/guicho271828/trivia")
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url home-page)
+               (url "https://github.com/guicho271828/trivia")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "trivia" version))
          (sha256
           (base32
            "0rsbwbw3ipxxgr6zzhci12nilq8zky475kmhz1rcxy4q8a85vn72"))))
+      (build-system asdf-build-system/sbcl)
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       `(("alexandria" ,sbcl-alexandria)
+         ("closer-mop" ,sbcl-closer-mop)
+         ("lisp-namespace" ,sbcl-lisp-namespace)
+         ("trivial-cltl2" ,sbcl-trivial-cltl2)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-build
+             (lambda _
+               (for-each delete-file
+                         '("trivia.balland2006.asd"
+                           "trivia.ppcre.asd"
+                           "trivia.quasiquote.asd"
+                           "trivia.cffi.asd"
+                           "trivia.asd"
+                           "trivia.test.asd"))
+               #t)))))
       (synopsis "Pattern matching in Common Lisp")
       (description "Trivia is a pattern matching compiler that is compatible
 with Optima, another pattern matching library for Common Lisp.  It is meant to
 be faster and more extensible than Optima.")
+      (home-page "https://github.com/guicho271828/trivia")
       (license license:llgpl))))
 
-(define-public sbcl-trivia.level1
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.level1")
-    (inputs
-     `(("trivia.level0" ,sbcl-trivia.level0)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains the core patterns of Trivia.")))
-
-(define-public sbcl-trivia.level2
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.level2")
-    (inputs
-     `(("trivia.level1" ,sbcl-trivia.level1)
-       ("lisp-namespace" ,sbcl-lisp-namespace)
-       ("trivial-cltl2" ,sbcl-trivial-cltl2)
-       ("closer-mop" ,sbcl-closer-mop)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains a non-optimized pattern matcher compatible with Optima,
-with extensible optimizer interface.")))
-
-(define-public sbcl-trivia.trivial
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.trivial")
-    (inputs
-     `(("trivia.level2" ,sbcl-trivia.level2)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains the base level system of Trivia with a trivial optimizer.")))
-
-(define-public sbcl-trivia.balland2006
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.balland2006")
-    (inputs
-     `(("trivia.trivial" ,sbcl-trivia.trivial)
-       ("iterate" ,sbcl-iterate)
-       ("type-i" ,sbcl-type-i)
-       ("alexandria" ,sbcl-alexandria)))
-    (arguments
-     ;; Tests are done in trivia itself.
-     `(#:tests? #f))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
+(define-public cl-trivia.trivial
+  (sbcl-package->cl-source-package sbcl-trivia.trivial))
 
-This system contains the base level system of Trivia with a trivial optimizer.")))
-
-(define-public sbcl-trivia.ppcre
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.ppcre")
-    (inputs
-     `(("trivia.trivial" ,sbcl-trivia.trivial)
-       ("cl-ppcre" ,sbcl-cl-ppcre)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains the PPCRE extension.")))
-
-(define-public sbcl-trivia.quasiquote
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.quasiquote")
-    (inputs
-     `(("trivia.trivial" ,sbcl-trivia.trivial)
-       ("fare-quasiquote" ,sbcl-fare-quasiquote)
-       ("fare-quasiquote-readtable" ,sbcl-fare-quasiquote-readtable)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains the fare-quasiquote extension.")))
-
-(define-public sbcl-trivia.cffi
-  (package
-    (inherit sbcl-trivia.level0)
-    (name "sbcl-trivia.cffi")
-    (inputs
-     `(("cffi" ,sbcl-cffi)
-       ("trivia.trivial" ,sbcl-trivia.trivial)))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.
-
-This system contains the CFFI foreign slot access extension.")))
+(define-public ecl-trivia.trivial
+  (sbcl-package->ecl-package sbcl-trivia.trivial))
 
 (define-public sbcl-trivia
   (package
-    (inherit sbcl-trivia.level0)
+    (inherit sbcl-trivia.trivial)
     (name "sbcl-trivia")
-    (inputs
-     `(("trivia.balland2006" ,sbcl-trivia.balland2006)))
     (native-inputs
      `(("fiveam" ,sbcl-fiveam)
-       ("trivia.ppcre" ,sbcl-trivia.ppcre)
-       ("trivia.quasiquote" ,sbcl-trivia.quasiquote)
-       ("trivia.cffi" ,sbcl-trivia.cffi)
        ("optima" ,sbcl-optima)))
-    (arguments
-     `(#:test-asd-file "trivia.test.asd"))
-    (description "Trivia is a pattern matching compiler that is compatible
-with Optima, another pattern matching library for Common Lisp.  It is meant to
-be faster and more extensible than Optima.")))
+    (inputs
+     `(("alexandria" ,sbcl-alexandria)
+       ("cffi" ,sbcl-cffi)
+       ("cl-ppcre" ,sbcl-cl-ppcre)
+       ("fare-quasiquote" ,sbcl-fare-quasiquote)
+       ("iterate" ,sbcl-iterate)
+       ("trivia.trivial" ,sbcl-trivia.trivial)
+       ("type-i" ,sbcl-type-i)))
+    (arguments
+     '(#:asd-systems '("trivia"
+                       "trivia.ppcre"
+                       "trivia.quasiquote"
+                       "trivia.cffi")
+       #:test-asd-file "trivia.test.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (for-each delete-file
+                       '("trivia.level0.asd"
+                         "trivia.level1.asd"
+                         "trivia.level2.asd"
+                         "trivia.trivial.asd"))
+             #t)))))))
 
 (define-public cl-trivia
   (sbcl-package->cl-source-package sbcl-trivia))
 
+(define-public ecl-trivia
+  (sbcl-package->ecl-package sbcl-trivia))
+
 (define-public sbcl-mk-string-metrics
   (package
     (name "sbcl-mk-string-metrics")
@@ -6419,6 +5338,9 @@ various string metrics in Common Lisp:
 (define-public cl-mk-string-metrics
   (sbcl-package->cl-source-package sbcl-mk-string-metrics))
 
+(define-public ecl-mk-string-metrics
+  (sbcl-package->ecl-package sbcl-mk-string-metrics))
+
 (define-public sbcl-cl-str
   (package
     (name "sbcl-cl-str")
@@ -6438,11 +5360,9 @@ various string metrics in Common Lisp:
        ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
        ("cl-change-case" ,sbcl-cl-change-case)))
     (native-inputs
-     `(("prove" ,sbcl-prove)
-       ("prove-asdf" ,sbcl-prove-asdf)))
+     `(("prove" ,sbcl-prove)))
     (arguments
-     `(#:asd-file "str.asd"
-       #:asd-system-name "str"
+     `(#:asd-systems '("str")
        #:test-asd-file "str.test.asd"))
     (synopsis "Modern, consistent and terse Common Lisp string manipulation library")
     (description "A modern and consistent Common Lisp string manipulation
@@ -6457,6 +5377,9 @@ arrows.")
 (define-public cl-str
   (sbcl-package->cl-source-package sbcl-cl-str))
 
+(define-public ecl-cl-str
+  (sbcl-package->ecl-package sbcl-cl-str))
+
 (define-public sbcl-cl-xmlspam
   (let ((commit "ea06abcca2a73a9779bcfb09081e56665f94e22a"))
     (package
@@ -6489,15 +5412,17 @@ constructs can be used interchangeably with pattern matching, and the full
 power of CXML is available when necessary.")
       (license license:bsd-3))))
 
-;; TODO: dbus uses ASDF's package-inferred-system which is not supported by
-;; asdf-build-system/sbcl as of 2019-08-02.  We should fix
-;; asdf-build-system/sbcl.
-(define-public cl-dbus
+(define-public cl-xmlspam
+  (sbcl-package->cl-source-package sbcl-cl-xmlspam))
+
+(define-public ecl-cl-xmlspam
+  (sbcl-package->ecl-package sbcl-cl-xmlspam))
+
+(define-public sbcl-dbus
   (let ((commit "24b452df3a45ca5dc95015500f34baad175c981a")
         (revision "1"))
     (package
-      (name "cl-dbus")
-      (build-system asdf-build-system/source)
+      (name "sbcl-dbus")
       (version (git-version "20190408" revision commit))
       (home-page "https://github.com/death/dbus")
       (source
@@ -6510,9 +5435,8 @@ power of CXML is available when necessary.")
          (sha256
           (base32
            "0fw2q866yddbf23nk9pxphm9gsasx35vjyss82xzvndnjmzlqfl5"))))
-      ;; Inputs must be propagated or else packages depending on this won't
-      ;; have the necessary packages.
-      (propagated-inputs
+      (build-system asdf-build-system/sbcl)
+      (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("trivial-garbage" ,sbcl-trivial-garbage)
          ("babel" ,sbcl-babel)
@@ -6526,6 +5450,12 @@ power of CXML is available when necessary.")
 objects as well as send and notify other objects connected to a bus.")
       (license license:bsd-2))))
 
+(define-public cl-dbus
+  (sbcl-package->cl-source-package sbcl-dbus))
+
+(define-public ecl-dbus
+  (sbcl-package->ecl-package sbcl-dbus))
+
 (define-public sbcl-cl-hooks
   (let ((commit "5b638083f3b4f1221a52631d9c8a0a265565cac7")
         (revision "1"))
@@ -6610,8 +5540,7 @@ extension-points via the concept of hooks.")
            "1fh8r7kf8s3hvqdg6b71b8p7w3v2kkga9bw8j3qqdxhzr6anpm0b"))))
       (inputs
        `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("usocket" ,sbcl-usocket)
-         ("usocket-server" ,sbcl-usocket-server)))
+         ("usocket" ,sbcl-usocket)))
       (synopsis "Common Lisp abstraction layer over platform dependent functionality")
       (description "@code{s-sysdeps} is an abstraction layer over platform
 dependent functionality.  This simple package is used as a building block in a
@@ -6725,7 +5654,11 @@ programming style and the efficiency of an iterative programming style.")
            "0z30jr3lxz3cmi019fsl4lgcgwf0yqpn95v9zkkkwgymdrkd4lga"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("local-time" ,sbcl-local-time)))
+       `(("local-time" ,sbcl-local-time)
+         ("series" ,sbcl-series)))
+      (arguments
+       '(#:asd-systems '("periods"
+                         "periods-series")))
       (synopsis "Common Lisp library for manipulating date/time objects")
       (description
        "Periods is a Common Lisp library providing a set of utilities for
@@ -6740,26 +5673,6 @@ discontiguous ranges of time.")
 (define-public ecl-periods
   (sbcl-package->ecl-package sbcl-periods))
 
-(define-public sbcl-periods-series
-  (package
-    (inherit sbcl-periods)
-    (name "sbcl-periods-series")
-    (inputs
-     `(("periods" ,sbcl-periods)
-       ("series" ,sbcl-series)))
-    (arguments
-     '(#:asd-file "periods-series.asd"
-       #:asd-system-name "periods-series"))
-    (description
-     "Periods-series is an extension of the periods Common Lisp library
-providing functions compatible with the series Common Lisp library.")))
-
-(define-public cl-periods-series
-  (sbcl-package->cl-source-package sbcl-periods-series))
-
-(define-public ecl-periods-series
-  (sbcl-package->ecl-package sbcl-periods-series))
-
 (define-public sbcl-metatilities-base
   (let ((commit "6eaa9e3ff0939a93a92109dd0fcd218de85417d5")
         (revision "1"))
@@ -6814,7 +5727,8 @@ which implements a set of utilities.")
       (inputs
        `(("metatilities-base" ,sbcl-metatilities-base)))
       (arguments
-       '(#:phases
+       '(#:asd-files '("cl-containers.asd")
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'relax-version-checks
              (lambda _
@@ -6881,57 +5795,40 @@ on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.")
 (define-public ecl-xlunit
   (sbcl-package->ecl-package sbcl-xlunit))
 
-(define-public sbcl-fprog
+(define-public sbcl-cambl
   (let ((commit "7016d1a98215f82605d1c158e7a16504ca1f4636")
         (revision "1"))
     (package
-      (name "sbcl-fprog")
-      (version (git-version "1.0.0" revision commit))
+      (name "sbcl-cambl")
+      (version (git-version "4.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/jwiegley/cambl")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cambl" version))
          (sha256
-          (base32
-           "103mry04j2k9vznsxm7wcvccgxkil92cdrv52miwcmxl8daa4jiz"))))
+          (base32 "103mry04j2k9vznsxm7wcvccgxkil92cdrv52miwcmxl8daa4jiz"))))
       (build-system asdf-build-system/sbcl)
-      (synopsis "Functional programming utilities for Common Lisp")
-      (description
-       "@code{fprog} is a Common Lisp library allowing iteration over
-immutable lists sharing identical sublists.")
-      (home-page "https://github.com/jwiegley/cambl")
-      (license license:bsd-3))))
-
-(define-public cl-fprog
-  (sbcl-package->cl-source-package sbcl-fprog))
-
-(define-public ecl-fprog
-  (sbcl-package->ecl-package sbcl-fprog))
-
-(define-public sbcl-cambl
-  (let ((commit "7016d1a98215f82605d1c158e7a16504ca1f4636")
-        (revision "1"))
-    (package
-      (inherit sbcl-fprog)
-      (name "sbcl-cambl")
-      (version (git-version "4.0.0" revision commit))
       (native-inputs
        `(("xlunit" ,sbcl-xlunit)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-containers" ,sbcl-cl-containers)
          ("local-time" ,sbcl-local-time)
-         ("periods" ,sbcl-periods)
-         ("fprog" ,sbcl-fprog)))
+         ("periods" ,sbcl-periods)))
+      (arguments
+       '(#:asd-files '("fprog.asd"
+                       "cambl.asd")))
       (synopsis "Commoditized amounts and balances for Common Lisp")
       (description
        "CAMBL is a Common Lisp library providing a convenient facility for
 working with commoditized values.  It does not allow compound units (and so is
 not suited for scientific operations) but does work rather nicely for the
-purpose of financial calculations."))))
+purpose of financial calculations.")
+      (home-page "https://github.com/jwiegley/cambl")
+      (license license:bsd-3))))
 
 (define-public cl-cambl
   (sbcl-package->cl-source-package sbcl-cambl))
@@ -6960,7 +5857,7 @@ purpose of financial calculations."))))
        `(("cambl" ,sbcl-cambl)
          ("cl-ppcre" ,sbcl-cl-ppcre)
          ("local-time" ,sbcl-local-time)
-         ("periods-series" ,sbcl-periods-series)))
+         ("periods" ,sbcl-periods)))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -7216,6 +6113,9 @@ of C+GObject libraries without the need of writing dedicated bindings.")
 (define-public cl-gobject-introspection
   (sbcl-package->cl-source-package sbcl-cl-gobject-introspection))
 
+(define-public ecl-cl-gobject-introspection
+  (sbcl-package->ecl-package sbcl-cl-gobject-introspection))
+
 (define-public sbcl-string-case
   (let ((commit "718c761e33749e297cd2809c7ba3ade1985c49f7")
         (revision "0"))
@@ -7374,14 +6274,13 @@ implementation specific equivalent.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("trivia" ,sbcl-trivia)
-         ("trivia.quasiquote" ,sbcl-trivia.quasiquote)
          ("split-sequence" ,sbcl-split-sequence)
          ("string-case" ,sbcl-string-case)
          ("parse-number" ,sbcl-parse-number)
          ("trivial-garbage" ,sbcl-trivial-garbage)
          ("bordeaux-threads" ,sbcl-bordeaux-threads)
          ("named-readtables" ,sbcl-named-readtables)
-         ("fare-quasiquote-extras" ,sbcl-fare-quasiquote-extras)
+         ("fare-quasiquote" ,sbcl-fare-quasiquote)
          ("parse-declarations-1.0" ,sbcl-parse-declarations)
          ("global-vars" ,sbcl-global-vars)
          ("trivial-file-size" ,sbcl-trivial-file-size)
@@ -7407,6 +6306,9 @@ supplement, not a competitor, to Alexandria.")
 (define-public cl-serapeum
   (sbcl-package->cl-source-package sbcl-serapeum))
 
+(define-public ecl-serapeum
+  (sbcl-package->ecl-package sbcl-serapeum))
+
 (define-public sbcl-arrows
   (let ((commit "df7cf0067e0132d9697ac8b1a4f1b9c88d4f5382")
         (revision "0"))
@@ -7587,11 +6489,8 @@ JSON interchange format.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("iterate" ,sbcl-iterate)
-         ("metabang-bind" ,sbcl-metabang-bind)))
-      (propagated-inputs
-       ;; Swank doesn't have a pre-compiled package, therefore we must
-       ;; propagate its sources.
-       `(("swank" ,cl-slime-swank)))
+         ("metabang-bind" ,sbcl-metabang-bind)
+         ("swank" ,sbcl-slime-swank)))
       (arguments
        '(#:phases
          (modify-phases %standard-phases
@@ -7610,6 +6509,9 @@ interactive development.")
 (define-public cl-stefil
   (sbcl-package->cl-source-package sbcl-stefil))
 
+(define-public ecl-stefil
+  (sbcl-package->ecl-package sbcl-stefil))
+
 (define-public sbcl-graph
   (let ((commit "78bf9ec930d8eae4f0861b5be76765fb1e45e24f")
         (revision "0"))
@@ -7626,19 +6528,22 @@ interactive development.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1qpij4xh8bqwc2myahpilcbh916v7vg0acz2fij14d3y0jm02h0g"))
-         (patches (search-patches "sbcl-graph-asdf-definitions.patch"))))
+           "1qpij4xh8bqwc2myahpilcbh916v7vg0acz2fij14d3y0jm02h0g"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("stefil" ,sbcl-stefil)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-heap" ,sbcl-cl-heap)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
          ("curry-compose-reader-macros" ,sbcl-curry-compose-reader-macros)
          ("metabang-bind" ,sbcl-metabang-bind)
-         ("named-readtables" ,sbcl-named-readtables)))
+         ("named-readtables" ,sbcl-named-readtables)
+         ("yason" ,sbcl-yason)))
       (arguments
-       '(#:test-asd-file "graph-test.asd"))
+       '(#:asd-systems '("graph"
+                         "graph/dot"
+                         "graph/json")))
       (synopsis "Graph data structure and algorithms for Common Lisp")
       (description
        "The GRAPH Common Lisp library provides a data structures to represent
@@ -7650,39 +6555,8 @@ path, maximum flow, minimum spanning tree, etc.).")
 (define-public cl-graph
   (sbcl-package->cl-source-package sbcl-graph))
 
-(define-public sbcl-graph-dot
-  (package
-    (inherit sbcl-graph)
-    (name "sbcl-graph-dot")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("curry-compose-reader-macros" ,sbcl-curry-compose-reader-macros)
-       ("graph" ,sbcl-graph)
-       ("metabang-bind" ,sbcl-metabang-bind)
-       ("named-readtables" ,sbcl-named-readtables)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-graph)
-       ((#:asd-file _ "") "graph-dot.asd")
-       ((#:asd-system-name _ #f) "graph-dot")))
-    (synopsis "Serialize graphs to and from DOT format")))
-
-(define-public sbcl-graph-json
-  (package
-    (inherit sbcl-graph)
-    (name "sbcl-graph-json")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("curry-compose-reader-macros" ,sbcl-curry-compose-reader-macros)
-       ("graph" ,sbcl-graph)
-       ("metabang-bind" ,sbcl-metabang-bind)
-       ("named-readtables" ,sbcl-named-readtables)
-       ("yason" ,sbcl-yason)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-graph)
-       ((#:asd-file _ "") "graph-json.asd")
-       ((#:asd-system-name _ #f) "graph-json")))
-    (synopsis "Serialize graphs to and from JSON format")))
+(define-public ecl-graph
+  (sbcl-package->ecl-package sbcl-graph))
 
 (define-public sbcl-trivial-indent
   (let ((commit "2d016941751647c6cc5bd471751c2cf68861c94a")
@@ -7713,6 +6587,9 @@ results.")
 (define-public cl-trivial-indent
   (sbcl-package->cl-source-package sbcl-trivial-indent))
 
+(define-public ecl-trivial-indent
+  (sbcl-package->ecl-package sbcl-trivial-indent))
+
 (define-public sbcl-documentation-utils
   (let ((commit "98630dd5f7e36ae057fa09da3523f42ccb5d1f55")
         (revision "0"))
@@ -7776,6 +6653,9 @@ macro.  This library provides a set of simple utilities to help with that.")
 (define-public cl-form-fiddle
   (sbcl-package->cl-source-package sbcl-form-fiddle))
 
+(define-public ecl-form-fiddle
+  (sbcl-package->ecl-package sbcl-form-fiddle))
+
 (define-public sbcl-parachute
   (let ((commit "ca04dd8e43010a6dfffa26dbe1d62af86008d666")
         (revision "0"))
@@ -7808,6 +6688,9 @@ Each test can contain a bunch of test forms that make up its body.")
 (define-public cl-parachute
   (sbcl-package->cl-source-package sbcl-parachute))
 
+(define-public ecl-parachute
+  (sbcl-package->ecl-package sbcl-parachute))
+
 (define-public sbcl-array-utils
   (let ((commit "f90eb9070d0b2205af51126a35033574725e5c56")
         (revision "0"))
@@ -7840,6 +6723,9 @@ functions for arrays and vectors.  Originally from Plump.")
 (define-public cl-array-utils
   (sbcl-package->cl-source-package sbcl-array-utils))
 
+(define-public ecl-array-utils
+  (sbcl-package->ecl-package sbcl-array-utils))
+
 (define-public sbcl-plump
   (let ((commit "34f890fe46efdebe7bb70d218f1937e98f632bf9")
         (revision "1"))
@@ -7875,6 +6761,11 @@ your own classes.")
 (define-public cl-plump
   (sbcl-package->cl-source-package sbcl-plump))
 
+(define-public ecl-plump
+  (sbcl-package->ecl-package sbcl-plump))
+
+;;; Split the antik package in two to work around the circular dependency
+;;; between antik/antik and antik/gsll.
 (define-public sbcl-antik-base
   (let ((commit "e4711a69b3d6bf37b5727af05c3cfd03e8428ba3")
         (revision "1"))
@@ -7894,13 +6785,31 @@ your own classes.")
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)
+         ("cffi" ,sbcl-cffi)
          ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("drakma" ,sbcl-drakma)
+         ("fare-utils" ,sbcl-fare-utils)
          ("iterate" ,sbcl-iterate)
          ("metabang-bind" ,sbcl-metabang-bind)
          ("named-readtables" ,sbcl-named-readtables)
-         ("split-sequence" ,sbcl-split-sequence)))
+         ("split-sequence" ,sbcl-split-sequence)
+         ("static-vectors" ,sbcl-static-vectors)
+         ("trivial-garbage" ,sbcl-trivial-garbage)
+         ("trivial-utf-8" ,sbcl-trivial-utf-8)))
       (native-inputs
        `(("lisp-unit" ,sbcl-lisp-unit)))
+      (arguments
+       '(#:asd-systems '("antik-base"
+                         "foreign-array")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-build
+             (lambda _
+               (for-each delete-file
+                         '("antik.asd"
+                           "physical-dimension.asd"
+                           "science-data.asd"))
+               #t)))))
       (synopsis "Scientific and engineering computation in Common Lisp")
       (description
        "Antik provides a foundation for scientific and engineering
@@ -7917,63 +6826,19 @@ computer known.")
   (sbcl-package->cl-source-package sbcl-antik-base))
 
 (define-public ecl-antik-base
-  (sbcl-package->ecl-package sbcl-antik-base))
-
-(define-public sbcl-foreign-array
-  (package
-    (inherit sbcl-antik-base)
-    (name "sbcl-foreign-array")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-antik-base)
-       ((#:asd-file _ "") "foreign-array.asd")
-       ((#:asd-system-name _ #f) "foreign-array")))
-    (inputs
-     `(("antik-base" ,sbcl-antik-base)
-       ("cffi" ,sbcl-cffi)
-       ("trivial-garbage" ,sbcl-trivial-garbage)
-       ("static-vectors" ,sbcl-static-vectors)))
-    (synopsis "Common Lisp library providing access to foreign arrays")))
-
-(define-public cl-foreign-array
-  (sbcl-package->cl-source-package sbcl-foreign-array))
-
-(define-public ecl-foreign-array
-  (sbcl-package->ecl-package sbcl-foreign-array))
-
-(define-public sbcl-physical-dimension
-  (package
-    (inherit sbcl-antik-base)
-    (name "sbcl-physical-dimension")
-    (inputs
-     `(("fare-utils" ,sbcl-fare-utils)
-       ("foreign-array" ,sbcl-foreign-array)
-       ("trivial-utf-8" ,sbcl-trivial-utf-8)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-antik-base)
-       ((#:asd-file _ "") "physical-dimension.asd")
-       ((#:asd-system-name _ #f) "physical-dimension")))
-    (synopsis
-     "Common Lisp library providing computations with physical units")))
-
-(define-public cl-physical-dimension
-  (sbcl-package->cl-source-package sbcl-physical-dimension))
-
-(define-public sbcl-science-data
-  (package
-    (inherit sbcl-antik-base)
-    (name "sbcl-science-data")
-    (inputs
-     `(("physical-dimension" ,sbcl-physical-dimension)
-       ("drakma" ,sbcl-drakma)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-antik-base)
-       ((#:asd-file _ "") "science-data.asd")
-       ((#:asd-system-name _ #f) "science-data")))
-    (synopsis
-     "Common Lisp library for scientific and engineering numerical data")))
-
-(define-public cl-science-data
-  (sbcl-package->cl-source-package sbcl-science-data))
+  (let ((pkg (sbcl-package->ecl-package sbcl-antik-base)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'fix-readtable
+               (lambda _
+                 (substitute* "input-output/readtable.lisp"
+                   (("#-ccl")
+                    "#-(or ccl ecl)"))
+                 #t)))))))))
 
 (define-public sbcl-gsll
   (let ((commit "1a8ada22f9cf5ed7372d352b2317f4ccdb6ab308")
@@ -7996,9 +6861,8 @@ computer known.")
        `(("lisp-unit" ,sbcl-lisp-unit)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
-         ("cffi-grovel" ,sbcl-cffi-grovel)
-         ("cffi-libffi" ,sbcl-cffi-libffi)
-         ("foreign-array" ,sbcl-foreign-array)
+         ("antik-base" ,sbcl-antik-base)
+         ("cffi" ,sbcl-cffi)
          ("gsl" ,gsl)
          ("metabang-bind" ,sbcl-metabang-bind)
          ("trivial-features" ,sbcl-trivial-features)
@@ -8037,17 +6901,27 @@ intending to program in Lisp.")
 (define-public cl-gsll
   (sbcl-package->cl-source-package sbcl-gsll))
 
+(define-public ecl-gsll
+  (sbcl-package->ecl-package sbcl-gsll))
+
 (define-public sbcl-antik
   (package
     (inherit sbcl-antik-base)
     (name "sbcl-antik")
     (inputs
-     `(("gsll" ,sbcl-gsll)
-       ("physical-dimension" ,sbcl-physical-dimension)))
+     `(("antik-base" ,sbcl-antik-base)
+       ("gsll" ,sbcl-gsll)))
     (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-antik-base)
-       ((#:asd-file _ "") "antik.asd")
-       ((#:asd-system-name _ #f) "antik")))))
+     '(#:asd-systems '("antik"
+                       "science-data")
+       #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-build
+             (lambda _
+               (for-each delete-file
+                         '("antik-base.asd"
+                           "foreign-array.asd"))
+               #t)))))))
 
 (define-public cl-antik
   (sbcl-package->cl-source-package sbcl-antik))
@@ -8090,13 +6964,11 @@ doesn't support them.")
 (define-public ecl-cl-interpol
   (sbcl-package->ecl-package sbcl-cl-interpol))
 
-(define sbcl-symbol-munger-boot0
-  ;; There is a cyclical dependency between symbol-munger and lisp-unit2.
-  ;; See https://github.com/AccelerationNet/symbol-munger/issues/4
-  (let ((commit "cc2bb4b7acd454d756484aec81ba487648385fc3")
+(define-public sbcl-symbol-munger
+  (let ((commit "97598d4c3c53fd5da72ab78908fbd5d8c7a13416")
         (revision "1"))
     (package
-      (name "sbcl-symbol-munger-boot0")
+      (name "sbcl-symbol-munger")
       (version (git-version "0.0.1" revision commit))
       (source
        (origin
@@ -8107,16 +6979,15 @@ doesn't support them.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0diav5ricqsybqvbp4bkxyj3bn3v9n7xb2pqqc4vg1algsw2pyjl"))))
+           "0y8jywjy0ldyhp7bxf16fdvdd2qgqnd7nlhlqfpfnzxcqk4xy1km"))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       `(#:asd-file "symbol-munger.asd"
-         #:asd-system-name "symbol-munger"))
       (inputs
-       `(("iterate" ,sbcl-iterate)
-         ("alexandria" ,sbcl-alexandria)))
-      (native-inputs
-       `(("lisp-unit" ,sbcl-lisp-unit)))
+       `(("alexandria" ,sbcl-alexandria)
+         ("iterate" ,sbcl-iterate)))
+      (arguments
+       ;; There is a cyclical dependency between symbol-munger and lisp-unit2.
+       ;; See https://github.com/AccelerationNet/symbol-munger/issues/4
+       '(#:tests? #f))
       (synopsis
        "Capitalization and spacing conversion functions for Common Lisp")
       (description
@@ -8129,13 +7000,19 @@ and camel-case rules.")
       ;; See https://github.com/AccelerationNet/symbol-munger/issues/5
       (license license:expat))))
 
-(define sbcl-lisp-unit2-boot0
+(define-public cl-symbol-munger
+  (sbcl-package->cl-source-package sbcl-symbol-munger))
+
+(define-public ecl-symbol-munger
+  (sbcl-package->ecl-package sbcl-symbol-munger))
+
+(define-public sbcl-lisp-unit2
   ;; There is a cyclical dependency between symbol-munger and lisp-unit2.
   ;; See https://github.com/AccelerationNet/symbol-munger/issues/4
   (let ((commit "fb9721524d1e4e73abb223ee036d74ce14a5505c")
         (revision "1"))
     (package
-      (name "sbcl-lisp-unit2-boot0")
+      (name "sbcl-lisp-unit2")
       (version (git-version "0.2.0" revision commit))
       (source
        (origin
@@ -8148,14 +7025,11 @@ and camel-case rules.")
           (base32
            "1rsqy8y0jqll6xn9a593848f5wvd5ribv4csry1ly0hmdhfnqzlp"))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       `(#:asd-file "lisp-unit2.asd"
-         #:asd-system-name "lisp-unit2"))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-interpol" ,sbcl-cl-interpol)
          ("iterate" ,sbcl-iterate)
-         ("symbol-munger-boot0" ,sbcl-symbol-munger-boot0)))
+         ("symbol-munger" ,sbcl-symbol-munger)))
       (synopsis "Test Framework for Common Lisp")
       (description
        "LISP-UNIT2 is a Common Lisp library that supports unit testing in the
@@ -8164,56 +7038,6 @@ by Chris Riesbeck.")
       (home-page "https://github.com/AccelerationNet/lisp-unit2")
       (license license:expat))))
 
-(define-public sbcl-symbol-munger
-  (let ((commit "97598d4c3c53fd5da72ab78908fbd5d8c7a13416")
-        (revision "1"))
-    (package
-      (name "sbcl-symbol-munger")
-      (version (git-version "0.0.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/AccelerationNet/symbol-munger")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0y8jywjy0ldyhp7bxf16fdvdd2qgqnd7nlhlqfpfnzxcqk4xy1km"))))
-      (build-system asdf-build-system/sbcl)
-      (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("iterate" ,sbcl-iterate)))
-      (native-inputs
-       `(("lisp-unit2-boot0" ,sbcl-lisp-unit2-boot0)))
-      (synopsis
-       "Capitalization and spacing conversion functions for Common Lisp")
-      (description
-       "This is a Common Lisp library to change the capitalization and spacing
-of a string or a symbol.  It can convert to and from Lisp, english, underscore
-and camel-case rules.")
-      (home-page "https://github.com/AccelerationNet/symbol-munger")
-      ;; The package declares a BSD license, but all of the license
-      ;; text is MIT.
-      ;; See https://github.com/AccelerationNet/symbol-munger/issues/5
-      (license license:expat))))
-
-(define-public cl-symbol-munger
-  (sbcl-package->cl-source-package sbcl-symbol-munger))
-
-(define-public ecl-symbol-munger
-  (sbcl-package->ecl-package sbcl-symbol-munger))
-
-(define-public sbcl-lisp-unit2
-  (package
-    (inherit sbcl-lisp-unit2-boot0)
-    (name "sbcl-lisp-unit2")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-interpol" ,sbcl-cl-interpol)
-       ("iterate" ,sbcl-iterate)
-       ("symbol-munger" ,sbcl-symbol-munger)))))
-
 (define-public cl-lisp-unit2
   (sbcl-package->cl-source-package sbcl-lisp-unit2))
 
@@ -8295,11 +7119,11 @@ sacrificing much in the way of power.")
 (define-public ecl-external-program
   (sbcl-package->ecl-package sbcl-external-program))
 
-(define sbcl-cl-ana-boot0
+(define-public sbcl-cl-ana
   (let ((commit "fa7cee4c50aa1c859652813049ba0da7c18a0df9")
         (revision "1"))
     (package
-     (name "sbcl-cl-ana-boot0")
+     (name "sbcl-cl-ana")
      (version (git-version "0.0.0" revision commit))
      (source
       (origin
@@ -8309,9 +7133,38 @@ sacrificing much in the way of power.")
              (commit commit)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0mr47l57m276dbpap7irr4fcnk5fgknhf6mgv4043s8h73amk5qh"))))
+        (base32 "0mr47l57m276dbpap7irr4fcnk5fgknhf6mgv4043s8h73amk5qh"))))
      (build-system asdf-build-system/sbcl)
+     (native-inputs
+      `(("cl-fad" ,sbcl-cl-fad)))
+     (inputs
+      `(("alexandria" ,sbcl-alexandria)
+        ("antik" ,sbcl-antik)
+        ("cffi" ,sbcl-cffi)
+        ("cl-csv" ,sbcl-cl-csv)
+        ("closer-mop" ,sbcl-closer-mop)
+        ("external-program" ,sbcl-external-program)
+        ("gsl" ,gsl)
+        ("gsll" ,sbcl-gsll)
+        ("hdf5" ,hdf5-parallel-openmpi)
+        ("iterate" ,sbcl-iterate)
+        ("libffi" ,libffi)
+        ("split-sequence" ,sbcl-split-sequence)))
+     (arguments
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "hdf-cffi/hdf-cffi.lisp"
+                (("/usr/lib/i386-linux-gnu/hdf5/serial/libhdf5.so")
+                 (string-append (assoc-ref inputs "hdf5")
+                                "/lib/libhdf5.so")))
+              (substitute* "gsl-cffi/gsl-cffi.lisp"
+                (("define-foreign-library gsl-cffi" all)
+                 (string-append all " (:unix "
+                                (assoc-ref inputs "gsl")
+                                "/lib/libgsl.so)")))
+              #t)))))
      (synopsis "Common Lisp data analysis library")
      (description
       "CL-ANA is a data analysis library in Common Lisp providing tabular and
@@ -8320,1060 +7173,6 @@ visualization.")
      (home-page "https://github.com/ghollisjr/cl-ana")
      (license license:gpl3))))
 
-(define-public sbcl-cl-ana.pathname-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.pathname-utils")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "pathname-utils/cl-ana.pathname-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.pathname-utils")))))
-
-(define-public cl-ana.pathname-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.pathname-utils))
-
-(define-public ecl-cl-ana.pathname-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.pathname-utils))
-
-(define-public sbcl-cl-ana.package-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.package-utils")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "package-utils/cl-ana.package-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.package-utils")))))
-
-(define-public cl-ana.package-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.package-utils))
-
-(define-public ecl-cl-ana.package-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.package-utils))
-
-(define-public sbcl-cl-ana.string-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.string-utils")
-    (inputs
-     `(("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "string-utils/cl-ana.string-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.string-utils")))))
-
-(define-public cl-ana.string-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.string-utils))
-
-(define-public ecl-cl-ana.string-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.string-utils))
-
-(define-public sbcl-cl-ana.functional-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.functional-utils")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "functional-utils/cl-ana.functional-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.functional-utils")))))
-
-(define-public cl-ana.functional-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.functional-utils))
-
-(define-public ecl-cl-ana.functional-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.functional-utils))
-
-(define-public sbcl-cl-ana.list-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.list-utils")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "list-utils/cl-ana.list-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.list-utils")))))
-
-(define-public cl-ana.list-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.list-utils))
-
-(define-public ecl-cl-ana.list-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.list-utils))
-
-(define-public sbcl-cl-ana.generic-math
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.generic-math")
-    (inputs
-     `(("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.package-utils" ,sbcl-cl-ana.package-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "generic-math/cl-ana.generic-math.asd")
-       ((#:asd-system-name _ #f) "cl-ana.generic-math")))))
-
-(define-public cl-ana.generic-math
-  (sbcl-package->cl-source-package sbcl-cl-ana.generic-math))
-
-(define-public ecl-cl-ana.generic-math
-  (sbcl-package->ecl-package sbcl-cl-ana.generic-math))
-
-(define-public sbcl-cl-ana.math-functions
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.math-functions")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("gsll" ,sbcl-gsll)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "math-functions/cl-ana.math-functions.asd")
-       ((#:asd-system-name _ #f) "cl-ana.math-functions")))))
-
-(define-public cl-ana.math-functions
-  (sbcl-package->cl-source-package sbcl-cl-ana.math-functions))
-
-(define-public sbcl-cl-ana.calculus
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.calculus")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "calculus/cl-ana.calculus.asd")
-       ((#:asd-system-name _ #f) "cl-ana.calculus")))))
-
-(define-public cl-ana.calculus
-  (sbcl-package->cl-source-package sbcl-cl-ana.calculus))
-
-(define-public ecl-cl-ana.calculus
-  (sbcl-package->ecl-package sbcl-cl-ana.calculus))
-
-(define-public sbcl-cl-ana.symbol-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.symbol-utils")
-    (inputs
-     `(("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "symbol-utils/cl-ana.symbol-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.symbol-utils")))))
-
-(define-public cl-ana.symbol-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.symbol-utils))
-
-(define-public ecl-cl-ana.symbol-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.symbol-utils))
-
-(define-public sbcl-cl-ana.macro-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.macro-utils")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "macro-utils/cl-ana.macro-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.macro-utils")))))
-
-(define-public cl-ana.macro-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.macro-utils))
-
-(define-public ecl-cl-ana.macro-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.macro-utils))
-
-(define-public sbcl-cl-ana.binary-tree
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.binary-tree")
-    (inputs
-     `(("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "binary-tree/cl-ana.binary-tree.asd")
-       ((#:asd-system-name _ #f) "cl-ana.binary-tree")))))
-
-(define-public cl-ana.binary-tree
-  (sbcl-package->cl-source-package sbcl-cl-ana.binary-tree))
-
-(define-public ecl-cl-ana.binary-tree
-  (sbcl-package->ecl-package sbcl-cl-ana.binary-tree))
-
-(define-public sbcl-cl-ana.tensor
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.tensor")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "tensor/cl-ana.tensor.asd")
-       ((#:asd-system-name _ #f) "cl-ana.tensor")))))
-
-(define-public cl-ana.tensor
-  (sbcl-package->cl-source-package sbcl-cl-ana.tensor))
-
-(define-public ecl-cl-ana.tensor
-  (sbcl-package->ecl-package sbcl-cl-ana.tensor))
-
-(define-public sbcl-cl-ana.error-propogation
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.error-propogation")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "error-propogation/cl-ana.error-propogation.asd")
-       ((#:asd-system-name _ #f) "cl-ana.error-propogation")))))
-
-(define-public cl-ana.error-propogation
-  (sbcl-package->cl-source-package sbcl-cl-ana.error-propogation))
-
-(define-public sbcl-cl-ana.quantity
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.quantity")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "quantity/cl-ana.quantity.asd")
-       ((#:asd-system-name _ #f) "cl-ana.quantity")))))
-
-(define-public cl-ana.quantity
-  (sbcl-package->cl-source-package sbcl-cl-ana.quantity))
-
-(define-public sbcl-cl-ana.table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "table/cl-ana.table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.table")))))
-
-(define-public cl-ana.table
-  (sbcl-package->cl-source-package sbcl-cl-ana.table))
-
-(define-public ecl-cl-ana.table
-  (sbcl-package->ecl-package sbcl-cl-ana.table))
-
-(define-public sbcl-cl-ana.table-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.table-utils")
-    (inputs
-     `(("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "table-utils/cl-ana.table-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.table-utils")))))
-
-(define-public cl-ana.table-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.table-utils))
-
-(define-public ecl-cl-ana.table-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.table-utils))
-
-(define-public sbcl-cl-ana.hdf-cffi
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.hdf-cffi")
-    (inputs
-     `(("cffi" ,sbcl-cffi)
-       ("hdf5" ,hdf5-parallel-openmpi)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "hdf-cffi/cl-ana.hdf-cffi.asd")
-       ((#:asd-system-name _ #f) "cl-ana.hdf-cffi")
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "hdf-cffi/hdf-cffi.lisp"
-                 (("/usr/lib/i386-linux-gnu/hdf5/serial/libhdf5.so")
-                  (string-append
-                   (assoc-ref inputs "hdf5")
-                   "/lib/libhdf5.so")))))))))))
-
-(define-public cl-ana.hdf-cffi
-  (sbcl-package->cl-source-package sbcl-cl-ana.hdf-cffi))
-
-(define-public ecl-cl-ana.hdf-cffi
-  (sbcl-package->ecl-package sbcl-cl-ana.hdf-cffi))
-
-(define-public sbcl-cl-ana.int-char
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.int-char")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "int-char/cl-ana.int-char.asd")
-       ((#:asd-system-name _ #f) "cl-ana.int-char")))))
-
-(define-public cl-ana.int-char
-  (sbcl-package->cl-source-package sbcl-cl-ana.int-char))
-
-(define-public ecl-cl-ana.int-char
-  (sbcl-package->ecl-package sbcl-cl-ana.int-char))
-
-(define-public sbcl-cl-ana.memoization
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.memoization")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "memoization/cl-ana.memoization.asd")
-       ((#:asd-system-name _ #f) "cl-ana.memoization")))))
-
-(define-public cl-ana.memoization
-  (sbcl-package->cl-source-package sbcl-cl-ana.memoization))
-
-(define-public ecl-cl-ana.memoization
-  (sbcl-package->ecl-package sbcl-cl-ana.memoization))
-
-(define-public sbcl-cl-ana.typespec
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.typespec")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cl-ana.int-char" ,sbcl-cl-ana.int-char)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "typespec/cl-ana.typespec.asd")
-       ((#:asd-system-name _ #f) "cl-ana.typespec")))))
-
-(define-public cl-ana.typespec
-  (sbcl-package->cl-source-package sbcl-cl-ana.typespec))
-
-(define-public ecl-cl-ana.typespec
-  (sbcl-package->ecl-package sbcl-cl-ana.typespec))
-
-(define-public sbcl-cl-ana.hdf-typespec
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.hdf-typespec")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cl-ana.hdf-cffi" ,sbcl-cl-ana.hdf-cffi)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "hdf-typespec/cl-ana.hdf-typespec.asd")
-       ((#:asd-system-name _ #f) "cl-ana.hdf-typespec")))))
-
-(define-public cl-ana.hdf-typespec
-  (sbcl-package->cl-source-package sbcl-cl-ana.hdf-typespec))
-
-(define-public ecl-cl-ana.hdf-typespec
-  (sbcl-package->ecl-package sbcl-cl-ana.hdf-typespec))
-
-(define-public sbcl-cl-ana.hdf-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.hdf-utils")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cl-ana.hdf-cffi" ,sbcl-cl-ana.hdf-cffi)
-       ("cl-ana.hdf-typespec" ,sbcl-cl-ana.hdf-typespec)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.pathname-utils" ,sbcl-cl-ana.pathname-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "hdf-utils/cl-ana.hdf-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.hdf-utils")))))
-
-(define-public cl-ana.hdf-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.hdf-utils))
-
-(define-public ecl-cl-ana.hdf-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.hdf-utils))
-
-(define-public sbcl-cl-ana.typed-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.typed-table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "typed-table/cl-ana.typed-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.typed-table")))))
-
-(define-public cl-ana.typed-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.typed-table))
-
-(define-public ecl-cl-ana.typed-table
-  (sbcl-package->ecl-package sbcl-cl-ana.typed-table))
-
-(define-public sbcl-cl-ana.hdf-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.hdf-table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.binary-tree" ,sbcl-cl-ana.binary-tree)
-       ("cl-ana.hdf-cffi" ,sbcl-cl-ana.hdf-cffi)
-       ("cl-ana.hdf-typespec" ,sbcl-cl-ana.hdf-typespec)
-       ("cl-ana.hdf-utils" ,sbcl-cl-ana.hdf-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("cl-ana.typed-table" ,sbcl-cl-ana.typed-table)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "hdf-table/cl-ana.hdf-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.hdf-table")))))
-
-(define-public cl-ana.hdf-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.hdf-table))
-
-(define-public ecl-cl-ana.hdf-table
-  (sbcl-package->ecl-package sbcl-cl-ana.hdf-table))
-
-(define-public sbcl-cl-ana.gsl-cffi
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.gsl-cffi")
-    (inputs
-     `(("cffi" ,sbcl-cffi)
-       ("gsl" ,gsl)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "gsl-cffi/cl-ana.gsl-cffi.asd")
-       ((#:asd-system-name _ #f) "cl-ana.gsl-cffi")
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "gsl-cffi/gsl-cffi.lisp"
-                 (("define-foreign-library gsl-cffi" all)
-                  (string-append all " (:unix "
-                                 (assoc-ref inputs "gsl")
-                                 "/lib/libgsl.so)")))))))))))
-
-(define-public cl-ana.gsl-cffi
-  (sbcl-package->cl-source-package sbcl-cl-ana.gsl-cffi))
-
-(define-public ecl-cl-ana.gsl-cffi
-  (sbcl-package->ecl-package sbcl-cl-ana.gsl-cffi))
-
-(define-public sbcl-cl-ana.ntuple-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.ntuple-table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cl-ana.gsl-cffi" ,sbcl-cl-ana.gsl-cffi)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("cl-ana.typed-table" ,sbcl-cl-ana.typed-table)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)
-       ("gsll" ,sbcl-gsll)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "ntuple-table/cl-ana.ntuple-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.ntuple-table")))))
-
-(define-public cl-ana.ntuple-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.ntuple-table))
-
-(define-public sbcl-cl-ana.csv-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.csv-table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("antik" ,sbcl-antik)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("cl-csv" ,sbcl-cl-csv)
-       ("iterate" ,sbcl-iterate)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "csv-table/cl-ana.csv-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.csv-table")))))
-
-(define-public cl-ana.csv-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.csv-table))
-
-(define-public sbcl-cl-ana.reusable-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.reusable-table")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.table" ,sbcl-cl-ana.table)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "reusable-table/cl-ana.reusable-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.reusable-table")))))
-
-(define-public cl-ana.reusable-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.reusable-table))
-
-(define-public ecl-cl-ana.reusable-table
-  (sbcl-package->ecl-package sbcl-cl-ana.reusable-table))
-
-(define-public sbcl-cl-ana.linear-algebra
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.linear-algebra")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)
-       ("gsll" ,sbcl-gsll)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "linear-algebra/cl-ana.linear-algebra.asd")
-       ((#:asd-system-name _ #f) "cl-ana.linear-algebra")))))
-
-(define-public cl-ana.linear-algebra
-  (sbcl-package->cl-source-package sbcl-cl-ana.linear-algebra))
-
-(define-public sbcl-cl-ana.lorentz
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.lorentz")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.linear-algebra" ,sbcl-cl-ana.linear-algebra)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)
-       ("iterate" ,sbcl-iterate)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "lorentz/cl-ana.lorentz.asd")
-       ((#:asd-system-name _ #f) "cl-ana.lorentz")))))
-
-(define-public cl-ana.lorentz
-  (sbcl-package->cl-source-package sbcl-cl-ana.lorentz))
-
-(define-public sbcl-cl-ana.clos-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.clos-utils")
-    (inputs
-     `(("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)
-       ("closer-mop" ,sbcl-closer-mop)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "clos-utils/cl-ana.clos-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.clos-utils")))))
-
-(define-public cl-ana.clos-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.clos-utils))
-
-(define-public ecl-cl-ana.clos-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.clos-utils))
-
-(define-public sbcl-cl-ana.hash-table-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.hash-table-utils")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "hash-table-utils/cl-ana.hash-table-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.hash-table-utils")))))
-
-(define-public cl-ana.hash-table-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.hash-table-utils))
-
-(define-public ecl-cl-ana.hash-table-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.hash-table-utils))
-
-(define-public sbcl-cl-ana.map
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.map")
-    (inputs
-     `(("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "map/cl-ana.map.asd")
-       ((#:asd-system-name _ #f) "cl-ana.map")))))
-
-(define-public cl-ana.map
-  (sbcl-package->cl-source-package sbcl-cl-ana.map))
-
-(define-public ecl-cl-ana.map
-  (sbcl-package->ecl-package sbcl-cl-ana.map))
-
-(define-public sbcl-cl-ana.fitting
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.fitting")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)
-       ("gsll" ,sbcl-gsll)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "fitting/cl-ana.fitting.asd")
-       ((#:asd-system-name _ #f) "cl-ana.fitting")))))
-
-(define-public cl-ana.fitting
-  (sbcl-package->cl-source-package sbcl-cl-ana.fitting))
-
-(define-public sbcl-cl-ana.histogram
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.histogram")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("iterate" ,sbcl-iterate)
-       ("cl-ana.binary-tree" ,sbcl-cl-ana.binary-tree)
-       ("cl-ana.clos-utils" ,sbcl-cl-ana.clos-utils)
-       ("cl-ana.fitting" ,sbcl-cl-ana.fitting)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "histogram/cl-ana.histogram.asd")
-       ((#:asd-system-name _ #f) "cl-ana.histogram")))))
-
-(define-public cl-ana.histogram
-  (sbcl-package->cl-source-package sbcl-cl-ana.histogram))
-
-(define-public sbcl-cl-ana.file-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.file-utils")
-    (inputs
-     `(("external-program" ,sbcl-external-program)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "file-utils/cl-ana.file-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.file-utils")))))
-
-(define-public cl-ana.file-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.file-utils))
-
-(define-public ecl-cl-ana.file-utils
-  (sbcl-package->ecl-package sbcl-cl-ana.file-utils))
-
-(define-public sbcl-cl-ana.statistics
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.statistics")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.map" ,sbcl-cl-ana.map)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "statistics/cl-ana.statistics.asd")
-       ((#:asd-system-name _ #f) "cl-ana.statistics")))))
-
-(define-public cl-ana.statistics
-  (sbcl-package->cl-source-package sbcl-cl-ana.statistics))
-
-(define-public sbcl-cl-ana.gnuplot-interface
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.gnuplot-interface")
-    (inputs
-     `(("external-program" ,sbcl-external-program)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "gnuplot-interface/cl-ana.gnuplot-interface.asd")
-       ((#:asd-system-name _ #f) "cl-ana.gnuplot-interface")))))
-
-(define-public cl-ana.gnuplot-interface
-  (sbcl-package->cl-source-package sbcl-cl-ana.gnuplot-interface))
-
-(define-public ecl-cl-ana.gnuplot-interface
-  (sbcl-package->ecl-package sbcl-cl-ana.gnuplot-interface))
-
-(define-public sbcl-cl-ana.plotting
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.plotting")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.gnuplot-interface" ,sbcl-cl-ana.gnuplot-interface)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)
-       ("cl-ana.pathname-utils" ,sbcl-cl-ana.pathname-utils)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)
-       ("external-program" ,sbcl-external-program)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "plotting/cl-ana.plotting.asd")
-       ((#:asd-system-name _ #f) "cl-ana.plotting")))))
-
-(define-public cl-ana.plotting
-  (sbcl-package->cl-source-package sbcl-cl-ana.plotting))
-
-(define-public sbcl-cl-ana.table-viewing
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.table-viewing")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.plotting" ,sbcl-cl-ana.plotting)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "table-viewing/cl-ana.table-viewing.asd")
-       ((#:asd-system-name _ #f) "cl-ana.table-viewing")))))
-
-(define-public cl-ana.table-viewing
-  (sbcl-package->cl-source-package sbcl-cl-ana.table-viewing))
-
-(define-public sbcl-cl-ana.serialization
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.serialization")
-    (inputs
-     `(("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.hdf-utils" ,sbcl-cl-ana.hdf-utils)
-       ("cl-ana.hdf-table" ,sbcl-cl-ana.hdf-table)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.int-char" ,sbcl-cl-ana.int-char)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.typespec" ,sbcl-cl-ana.typespec)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "serialization/cl-ana.serialization.asd")
-       ((#:asd-system-name _ #f) "cl-ana.serialization")))))
-
-(define-public cl-ana.serialization
-  (sbcl-package->cl-source-package sbcl-cl-ana.serialization))
-
-(define-public sbcl-cl-ana.makeres
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.file-utils" ,sbcl-cl-ana.file-utils)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)
-       ("cl-ana.hdf-utils" ,sbcl-cl-ana.hdf-utils)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.pathname-utils" ,sbcl-cl-ana.pathname-utils)
-       ("cl-ana.plotting" ,sbcl-cl-ana.plotting)
-       ("cl-ana.reusable-table" ,sbcl-cl-ana.reusable-table)
-       ("cl-ana.serialization" ,sbcl-cl-ana.serialization)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("external-program" ,sbcl-external-program)))
-    (native-inputs
-     `(("cl-fad" ,sbcl-cl-fad)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres/cl-ana.makeres.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres")))))
-
-(define-public cl-ana.makeres
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres))
-
-(define-public sbcl-cl-ana.makeres-macro
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-macro")
-    (inputs
-     `(("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-macro/cl-ana.makeres-macro.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-macro")))))
-
-(define-public cl-ana.makeres-macro
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-macro))
-
-(define-public sbcl-cl-ana.makeres-block
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-block")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-block/cl-ana.makeres-block.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-block")))))
-
-(define-public cl-ana.makeres-block
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-block))
-
-(define-public sbcl-cl-ana.makeres-progress
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-progress")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-progress/cl-ana.makeres-progress.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-progress")))))
-
-(define-public cl-ana.makeres-progress
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-progress))
-
-(define-public sbcl-cl-ana.makeres-table
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-table")
-    (inputs
-     `(("cl-ana.csv-table" ,sbcl-cl-ana.csv-table)
-       ("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)
-       ("cl-ana.hdf-table" ,sbcl-cl-ana.hdf-table)
-       ("cl-ana.hdf-utils" ,sbcl-cl-ana.hdf-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)
-       ("cl-ana.makeres-macro" ,sbcl-cl-ana.makeres-macro)
-       ("cl-ana.memoization" ,sbcl-cl-ana.memoization)
-       ("cl-ana.ntuple-table" ,sbcl-cl-ana.ntuple-table)
-       ("cl-ana.reusable-table" ,sbcl-cl-ana.reusable-table)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)))
-    (native-inputs
-     `(("cl-fad" ,sbcl-cl-fad)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-table/cl-ana.makeres-table.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-table")))))
-
-(define-public cl-ana.makeres-table
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-table))
-
-(define-public sbcl-cl-ana.makeres-graphviz
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-graphviz")
-    (inputs
-     `(("cl-ana.makeres" ,sbcl-cl-ana.makeres)
-       ("external-program" ,sbcl-external-program)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-graphviz/cl-ana.makeres-graphviz.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-graphviz")))))
-
-(define-public cl-ana.makeres-graphviz
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-graphviz))
-
-(define-public sbcl-cl-ana.makeres-branch
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-branch")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-branch/cl-ana.makeres-branch.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-branch")))))
-
-(define-public cl-ana.makeres-branch
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-branch))
-
-(define-public sbcl-cl-ana.makeres-utils
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.makeres-utils")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-ana.file-utils" ,sbcl-cl-ana.file-utils)
-       ("cl-ana.fitting" ,sbcl-cl-ana.fitting)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.pathname-utils" ,sbcl-cl-ana.pathname-utils)
-       ("cl-ana.plotting" ,sbcl-cl-ana.plotting)
-       ("cl-ana.reusable-table" ,sbcl-cl-ana.reusable-table)
-       ("cl-ana.string-utils" ,sbcl-cl-ana.string-utils)
-       ("cl-ana.symbol-utils" ,sbcl-cl-ana.symbol-utils)
-       ("cl-ana.table" ,sbcl-cl-ana.table)))
-    (native-inputs
-     `(("cl-fad" ,sbcl-cl-fad)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "makeres-utils/cl-ana.makeres-utils.asd")
-       ((#:asd-system-name _ #f) "cl-ana.makeres-utils")))))
-
-(define-public cl-ana.makeres-utils
-  (sbcl-package->cl-source-package sbcl-cl-ana.makeres-utils))
-
-(define-public sbcl-cl-ana.statistical-learning
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana.statistical-learning")
-    (inputs
-     `(("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.functional-utils" ,sbcl-cl-ana.functional-utils)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.linear-algebra" ,sbcl-cl-ana.linear-algebra)
-       ("cl-ana.list-utils" ,sbcl-cl-ana.list-utils)
-       ("cl-ana.macro-utils" ,sbcl-cl-ana.macro-utils)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.statistics" ,sbcl-cl-ana.statistics)))
-    (native-inputs
-     `(("cl-fad" ,sbcl-cl-fad)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "")
-        "statistical-learning/cl-ana.statistical-learning.asd")
-       ((#:asd-system-name _ #f) "cl-ana.statistical-learning")))))
-
-(define-public cl-ana.statistical-learning
-  (sbcl-package->cl-source-package sbcl-cl-ana.statistical-learning))
-
-(define-public sbcl-cl-ana
-  (package
-    (inherit sbcl-cl-ana-boot0)
-    (name "sbcl-cl-ana")
-    (inputs
-     `(("cl-ana.binary-tree" ,sbcl-cl-ana.binary-tree)
-       ("cl-ana.calculus" ,sbcl-cl-ana.calculus)
-       ("cl-ana.clos-utils" ,sbcl-cl-ana.clos-utils)
-       ("cl-ana.csv-table" ,sbcl-cl-ana.csv-table)
-       ("cl-ana.error-propogation" ,sbcl-cl-ana.error-propogation)
-       ("cl-ana.file-utils" ,sbcl-cl-ana.file-utils)
-       ("cl-ana.fitting" ,sbcl-cl-ana.fitting)
-       ("cl-ana.generic-math" ,sbcl-cl-ana.generic-math)
-       ("cl-ana.hash-table-utils" ,sbcl-cl-ana.hash-table-utils)
-       ("cl-ana.hdf-table" ,sbcl-cl-ana.hdf-table)
-       ("cl-ana.histogram" ,sbcl-cl-ana.histogram)
-       ("cl-ana.int-char" ,sbcl-cl-ana.int-char)
-       ("cl-ana.linear-algebra" ,sbcl-cl-ana.linear-algebra)
-       ("cl-ana.lorentz" ,sbcl-cl-ana.lorentz)
-       ("cl-ana.map" ,sbcl-cl-ana.map)
-       ("cl-ana.makeres" ,sbcl-cl-ana.makeres)
-       ("cl-ana.makeres-block" ,sbcl-cl-ana.makeres-block)
-       ("cl-ana.makeres-branch" ,sbcl-cl-ana.makeres-branch)
-       ("cl-ana.makeres-graphviz" ,sbcl-cl-ana.makeres-graphviz)
-       ("cl-ana.makeres-macro" ,sbcl-cl-ana.makeres-macro)
-       ("cl-ana.makeres-progress" ,sbcl-cl-ana.makeres-progress)
-       ("cl-ana.makeres-table" ,sbcl-cl-ana.makeres-table)
-       ("cl-ana.makeres-utils" ,sbcl-cl-ana.makeres-utils)
-       ("cl-ana.math-functions" ,sbcl-cl-ana.math-functions)
-       ("cl-ana.ntuple-table" ,sbcl-cl-ana.ntuple-table)
-       ("cl-ana.package-utils" ,sbcl-cl-ana.package-utils)
-       ("cl-ana.pathname-utils" ,sbcl-cl-ana.pathname-utils)
-       ("cl-ana.plotting" ,sbcl-cl-ana.plotting)
-       ("cl-ana.quantity" ,sbcl-cl-ana.quantity)
-       ("cl-ana.reusable-table" ,sbcl-cl-ana.reusable-table)
-       ("cl-ana.serialization" ,sbcl-cl-ana.serialization)
-       ("cl-ana.statistics" ,sbcl-cl-ana.statistics)
-       ("cl-ana.statistical-learning" ,sbcl-cl-ana.statistical-learning)
-       ("cl-ana.table" ,sbcl-cl-ana.table)
-       ("cl-ana.table-utils" ,sbcl-cl-ana.table-utils)
-       ("cl-ana.table-viewing" ,sbcl-cl-ana.table-viewing)
-       ("cl-ana.tensor" ,sbcl-cl-ana.tensor)
-       ("libffi" ,libffi)))
-    (native-inputs
-     `(("cl-fad" ,sbcl-cl-fad)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-ana-boot0)
-       ((#:asd-file _ "") "cl-ana.asd")
-       ((#:asd-system-name _ #f) "cl-ana")))))
-
 (define-public cl-ana
   (sbcl-package->cl-source-package sbcl-cl-ana))
 
@@ -9509,6 +7308,13 @@ may contain sets, maps may be keyed by sets, etc.")
 (define-public cl-fset
   (sbcl-package->cl-source-package sbcl-fset))
 
+(define-public ecl-fset
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-fset))
+    (arguments
+     ;; Tests fails on ECL with "The function FSET::MAKE-CHAR is undefined".
+     '(#:tests? #f))))
+
 (define-public sbcl-cl-cont
   (let ((commit "fc1fa7e6eb64894fdca13e688e6015fad5290d2a")
         (revision "1"))
@@ -9642,7 +7448,6 @@ has a small codebase that's easy to understand and use.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
-         ("cffi-grovel" ,sbcl-cffi-grovel)
          ("libuv" ,libuv)))
       (arguments
        `(#:phases
@@ -9672,11 +7477,11 @@ has a small codebase that's easy to understand and use.")
 (define-public ecl-cl-libuv
   (sbcl-package->ecl-package sbcl-cl-libuv))
 
-(define-public sbcl-cl-async-base
+(define-public sbcl-cl-async
   (let ((commit "f6423e44404a44434d803605e0d2e17199158e28")
         (revision "1"))
     (package
-      (name "sbcl-cl-async-base")
+      (name "sbcl-cl-async")
       (version (git-version "0.6.1" revision commit))
       (source
        (origin
@@ -9690,98 +7495,23 @@ has a small codebase that's easy to understand and use.")
            "11xi9dxb8mjgwzrkj88i0xkgk26z9w9ddxzbv6xsvfc1d4x5cf4x"))))
       (build-system asdf-build-system/sbcl)
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+       `(("babel" ,sbcl-babel)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
          ("cffi" ,sbcl-cffi)
-         ("cl-libuv" ,sbcl-cl-libuv)))
+         ("cl-libuv" ,sbcl-cl-libuv)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("fast-io" ,sbcl-fast-io)
+         ("openssl" ,openssl)
+         ("static-vectors" ,sbcl-static-vectors)
+         ("trivial-features" ,sbcl-trivial-features)
+         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
+         ("vom" ,sbcl-vom)))
       (arguments
-       `(#:asd-file "cl-async.asd"))
-      (synopsis "Base system for cl-async")
-      (description
-       "Cl-async is a library for general purpose, non-blocking programming in
-Common Lisp.  It uses the libuv library as backend.")
-      (home-page "https://orthecreedence.github.io/cl-async/")
-      (license license:expat))))
-
-(define-public cl-async-base
-  (sbcl-package->cl-source-package sbcl-cl-async-base))
-
-(define-public ecl-cl-async-base
-  (sbcl-package->ecl-package sbcl-cl-async-base))
-
-(define-public sbcl-cl-async-util
-  (package
-    (inherit sbcl-cl-async-base)
-    (name "sbcl-cl-async-util")
-    (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("cffi" ,sbcl-cffi)
-       ("cl-async-base" ,sbcl-cl-async-base)
-       ("cl-libuv" ,sbcl-cl-libuv)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("fast-io" ,sbcl-fast-io)
-       ("vom" ,sbcl-vom)))
-    (synopsis "Internal utilities for cl-async")))
-
-(define-public cl-async-util
-  (sbcl-package->cl-source-package sbcl-cl-async-util))
-
-(define-public ecl-cl-async-util
-  (sbcl-package->ecl-package sbcl-cl-async-util))
-
-(define-public sbcl-cl-async
-  (package
-    (inherit sbcl-cl-async-base)
-    (name "sbcl-cl-async")
-    (inputs
-     `(("babel" ,sbcl-babel)
-       ("cffi" ,sbcl-cffi)
-       ("cl-async-base" ,sbcl-cl-async-base)
-       ("cl-async-util" ,sbcl-cl-async-util)
-       ("cl-libuv" ,sbcl-cl-libuv)
-       ("cl-ppcre" ,sbcl-cl-ppcre)
-       ("static-vectors" ,sbcl-static-vectors)
-       ("trivial-features" ,sbcl-trivial-features)
-       ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
-    (synopsis "Asynchronous operations for Common Lisp")))
-
-(define-public cl-async
-  (sbcl-package->cl-source-package sbcl-cl-async))
-
-(define-public ecl-cl-async
-  (sbcl-package->ecl-package sbcl-cl-async))
-
-(define-public sbcl-cl-async-repl
-  (package
-    (inherit sbcl-cl-async-base)
-    (name "sbcl-cl-async-repl")
-    (inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("cl-async" ,sbcl-cl-async)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-async-base)
-       ((#:asd-file _ "") "cl-async-repl.asd")))
-    (synopsis "REPL integration for cl-async")))
-
-(define-public cl-async-repl
-  (sbcl-package->cl-source-package sbcl-cl-async-repl))
-
-(define-public ecl-cl-async-repl
-  (sbcl-package->ecl-package sbcl-cl-async-repl))
-
-(define-public sbcl-cl-async-ssl
-  (package
-    (inherit sbcl-cl-async-base)
-    (name "sbcl-cl-async-ssl")
-    (inputs
-     `(("cffi" ,sbcl-cffi)
-       ("cl-async" ,sbcl-cl-async)
-       ("openssl" ,openssl)
-       ("vom" ,sbcl-vom)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-cl-async-base)
-       ((#:asd-file _ "") "cl-async-ssl.asd")
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
+       `(#:asd-systems '("cl-async"
+                         "cl-async-repl"
+                         "cl-async-ssl")
+         #:phases
+         (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/ssl/package.lisp"
@@ -9791,14 +7521,19 @@ Common Lisp.  It uses the libuv library as backend.")
                  (("libssl\\.so")
                   (string-append (assoc-ref inputs "openssl")
                                  "/lib/libssl.so")))
-               #t))))))
-    (synopsis "SSL wrapper around cl-async socket implementation")))
+               #t)))))
+      (synopsis "Asynchronous operations for Common Lisp")
+      (description
+       "Cl-async is a library for general purpose, non-blocking programming in
+Common Lisp.  It uses the libuv library as backend.")
+      (home-page "https://orthecreedence.github.io/cl-async/")
+      (license license:expat))))
 
-(define-public cl-async-ssl
-  (sbcl-package->cl-source-package sbcl-cl-async-ssl))
+(define-public cl-async
+  (sbcl-package->cl-source-package sbcl-cl-async))
 
-(define-public ecl-cl-async-ssl
-  (sbcl-package->ecl-package sbcl-cl-async-ssl))
+(define-public ecl-cl-async
+  (sbcl-package->ecl-package sbcl-cl-async))
 
 (define-public sbcl-blackbird
   (let ((commit "d361f81c1411dec07f6c2dcb11c78f7aea9aaca8")
@@ -10000,21 +7735,30 @@ ZeroMQ.")
      `(("imagemagick" ,imagemagick)
        ("tk" ,tk)))
     (arguments
-     `(#:asd-file "ltk/ltk.asd"
+     `(#:asd-systems '("ltk"
+                       "ltk-mw"
+                       "ltk-remote")
        #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'fix-paths
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (substitute* "ltk/ltk.lisp"
-                        (("#-freebsd \"wish\"")
-                         (string-append "#-freebsd \""
-                                        (assoc-ref inputs "tk")
-                                        "/bin/wish\""))
-                        (("do-execute \"convert\"")
-                         (string-append "do-execute \""
-                                        (assoc-ref inputs "imagemagick")
-                                        "/bin/convert\"")))
-                      #t)))))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "ltk/ltk.lisp"
+               (("#-freebsd \"wish\"")
+                (string-append "#-freebsd \""
+                               (assoc-ref inputs "tk")
+                               "/bin/wish\""))
+               (("do-execute \"convert\"")
+                (string-append "do-execute \""
+                               (assoc-ref inputs "imagemagick")
+                               "/bin/convert\"")))
+             #t))
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "ltk/ltk-remote.lisp"
+               (("\\(:export")
+                "(:shadow #:raise) (:export"))
+             #t)))))
     (synopsis "Common Lisp bindings for the Tk GUI toolkit")
     (description
      "LTK is a Common Lisp binding for the Tk graphics toolkit.  It is written
@@ -10028,44 +7772,6 @@ in pure Common Lisp and does not require any Tk knowledge for its usage.")
 (define-public ecl-ltk
   (sbcl-package->ecl-package sbcl-ltk))
 
-(define-public sbcl-ltk-mw
-  (package
-    (inherit sbcl-ltk)
-    (name "sbcl-ltk-mw")
-    (inputs
-     `(("ltk" ,sbcl-ltk)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-ltk)
-       ((#:asd-file _) "ltk/ltk-mw.asd")
-       ((#:phases _) '%standard-phases)))
-    (synopsis "Extra widgets for LTK")
-    (description
-     "This is a collection of higher-level widgets built on top of LTK.")))
-
-(define-public cl-ltk-mw
-  (sbcl-package->cl-source-package sbcl-ltk-mw))
-
-(define-public ecl-ltk-mw
-  (sbcl-package->ecl-package sbcl-ltk-mw))
-
-(define-public sbcl-ltk-remote
-  (package
-    (inherit sbcl-ltk)
-    (name "sbcl-ltk-remote")
-    (inputs
-     `(("ltk" ,sbcl-ltk)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-ltk)
-       ((#:asd-file _) "ltk/ltk-remote.asd")
-       ((#:phases _) '%standard-phases)))
-    (synopsis "Remote GUI support for LTK")
-    (description
-     "This LTK extension allows the GUI to be displayed on a computer different
-from the one running the Lisp program by using a TCP connection.")))
-
-(define-public cl-ltk-remote
-  (sbcl-package->cl-source-package sbcl-ltk-remote))
-
 (define-public sbcl-cl-lex
   (let ((commit "f2dbbe25ef553005fb402d9a6203180c3fa1093b")
         (revision "1"))
@@ -10394,14 +8100,11 @@ them as PNG files.")
                                "/LICENSE")))
       (inputs
        `(("cffi" ,sbcl-cffi)
-         ("cffi-grovel" ,sbcl-cffi-grovel)
          ("hdf5" ,hdf5-1.10)))
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "hdf5-cffi"
-         #:asd-file "hdf5-cffi.asd"
-         #:test-asd-file "hdf5-cffi.test.asd"
+       `(#:test-asd-file "hdf5-cffi.test.asd"
          ;; Tests depend on hdf5-cffi.examples.asd in addition to hdf5-cffi.asd,
          ;; I don't know if there is a way to tell asdf-build-system to load
          ;; an additional system first, so tests are disabled.
@@ -10452,9 +8155,7 @@ generation functions from the GSL library.")
     (home-page "https://github.com/lvaruzza/cl-randist")
     (license license:bsd-2)
     (arguments
-     `(#:asd-system-name "cl-randist"
-       #:asd-file "cl-randist.asd"
-       #:tests? #f))))
+     `(#:tests? #f))))
 
 (define-public cl-randist
   (sbcl-package->cl-source-package sbcl-cl-randist))
@@ -10486,9 +8187,7 @@ covered by the Common Lisp standard.")
     (inputs
      `(("documentation-utils" ,sbcl-documentation-utils)))
     (arguments
-     `(#:asd-system-name "float-features"
-       #:asd-file "float-features.asd"
-       #:tests? #f))))
+     `(#:tests? #f))))
 
 (define-public cl-float-features
   (sbcl-package->cl-source-package sbcl-float-features))
@@ -10526,9 +8225,7 @@ caching based on arguments (an expanded form of memoization).")
        ("symbol-munger" ,sbcl-symbol-munger)
        ("closer-mop" ,sbcl-closer-mop)))
     (arguments
-     `(#:asd-system-name "function-cache"
-       #:asd-file "function-cache.asd"
-       #:tests? #f))))
+     `(#:tests? #f))))
 
 (define-public cl-function-cache
   (sbcl-package->cl-source-package sbcl-function-cache))
@@ -10566,13 +8263,14 @@ the elements in compound type specifier, e.g. @code{dimensions} in
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "type-r"
-         #:asd-file "type-r.asd"
-         #:test-asd-file "type-r.test.asd")))))
+       `(#:test-asd-file "type-r.test.asd")))))
 
 (define-public cl-type-r
   (sbcl-package->cl-source-package sbcl-type-r))
 
+(define-public ecl-type-r
+  (sbcl-package->ecl-package sbcl-type-r))
+
 (define-public sbcl-trivialib-type-unify
   (let ((commit "62492ebf04db567dcf435ae84c50b7b8202ecf99")
         (revision "1"))
@@ -10605,16 +8303,18 @@ correctly.")
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "trivialib.type-unify"
-         #:asd-file "trivialib.type-unify.asd"
+       `(#:asd-systems '("trivialib.type-unify")
          #:test-asd-file "trivialib.type-unify.test.asd")))))
 
 (define-public cl-trivialib-type-unify
   (sbcl-package->cl-source-package sbcl-trivialib-type-unify))
 
+(define-public ecl-trivialib-type-unify
+  (sbcl-package->ecl-package sbcl-trivialib-type-unify))
+
 (define-public sbcl-specialized-function
-  (let ((commit "b96b6afaf8358bf91cc0703e62a5a4ee20d2b7bc")
-        (revision "1"))
+  (let ((commit "dee56d2d2b6ecd10500ad291c56217698604ec35")
+        (revision "2"))
     (package
       (name "sbcl-specialized-function")
       (version (git-version "0.0.0" revision commit))
@@ -10626,8 +8326,7 @@ correctly.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "12j45ff0n26578vmfbhb9mfbdchw4wy023k0m2ppgl9s0z4bhjaj"))))
+          (base32 "1mcc7mmpbnmgnr1cl2jl5r1ai54gn7fbisv2c14sh9za5w4sib82"))))
       (build-system asdf-build-system/sbcl)
       (synopsis "Julia-like dispatch for Common Lisp")
       (description
@@ -10647,13 +8346,15 @@ code.  The main target of this macro is speed.")
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "specialized-function"
-         #:asd-file "specialized-function.asd"
+       `(#:asd-files '("specialized-function.asd")
          #:test-asd-file "specialized-function.test.asd")))))
 
 (define-public cl-specialized-function
   (sbcl-package->cl-source-package sbcl-specialized-function))
 
+(define-public ecl-specialized-function
+  (sbcl-package->ecl-package sbcl-specialized-function))
+
 (define-public sbcl-constantfold
   (let ((commit "0ff1d97a3fbcb89264f6a2af6ce62b73e7b421f4")
         (revision "1"))
@@ -10685,16 +8386,18 @@ additional form that is considered as a candidate for a constant.")
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "constantfold"
-         #:asd-file "constantfold.asd"
+       `(#:asd-files '("constantfold.asd")
          #:test-asd-file "constantfold.test.asd")))))
 
 (define-public cl-constantfold
   (sbcl-package->cl-source-package sbcl-constantfold))
 
+(define-public ecl-constantfold
+  (sbcl-package->ecl-package sbcl-constantfold))
+
 (define-public sbcl-gtype
-  (let ((commit "42275e3606242ae91e9c8dfa30c18ced50a35b66")
-        (revision "1"))
+  (let ((commit "2442e32485635525af278ebd8fa69a27d5b8cf18")
+        (revision "2"))
     (package
       (name "sbcl-gtype")
       (version (git-version "0.1" revision commit))
@@ -10706,8 +8409,7 @@ additional form that is considered as a candidate for a constant.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "1f56dba998v945jcxhha391557n6md1ql25b7icfwwfivhmlaa9b"))))
+          (base32 "0hbkfdw00v7bsa6zbric34p5w6hfwxycccg8wc2faq0cxhsvpv9h"))))
       (build-system asdf-build-system/sbcl)
       (synopsis "C++/Julia-like parametric types in Common Lisp")
       (description
@@ -10725,16 +8427,24 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "gtype"
-         #:asd-file "gtype.asd"
+       `(#:asd-files '("gtype.asd")
          #:test-asd-file "gtype.test.asd")))))
 
 (define-public cl-gtype
   (sbcl-package->cl-source-package sbcl-gtype))
 
+(define-public ecl-gtype
+  (let ((pkg (sbcl-package->ecl-package sbcl-gtype)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ;; The tests fail on ECL with a COMPILE-FILE-ERROR for t/package.lisp.
+         ((#:tests? _ #f) #f))))))
+
 (define-public sbcl-numcl
-  (let ((commit "1cf7dfa59f763a24a501092870e9c5ee745d0c17")
-        (revision "1"))
+  (let ((commit "3e8d40bf774e070e7af1d3dbf01bc8c37dbebd3a")
+        (revision "2"))
     (package
       (name "sbcl-numcl")
       (version (git-version "0.1.0" revision commit))
@@ -10746,8 +8456,7 @@ type correctness in Common Lisp.  It is based on CLtL2 extensions.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32
-           "0i3jby9hf4ii7blivgyza80g0vmjfhk8537i5i7kqqk0i5sdnym2"))))
+          (base32 "1hqpr68f6xkxaj1hjjayyh97wcdmj51k20qrd3nsv1rcpmdc5ll4"))))
       (build-system asdf-build-system/sbcl)
       (synopsis "Numpy clone in Common Lisp")
       (description
@@ -10772,13 +8481,23 @@ and usefulness, not speed.  Track the progress at
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (arguments
-       `(#:asd-system-name "numcl"
-         #:asd-file "numcl.asd"
-         #:test-asd-file "numcl.test.asd")))))
+       `(#:asd-files '("numcl.asd")
+         #:test-asd-file "numcl.test.asd"
+         ;; Tests fail on SBCL with "Heap exhausted, game over",
+         ;; but they pass on ECL.
+         #:tests? #f)))))
 
 (define-public cl-numcl
   (sbcl-package->cl-source-package sbcl-numcl))
 
+(define-public ecl-numcl
+  (let ((pkg (sbcl-package->ecl-package sbcl-numcl)))
+    (package
+      (inherit pkg)
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ((#:tests? _ #f) #t))))))
+
 (define-public sbcl-pzmq
   (let ((commit "7c7390eedc469d033c72dc497984d1536ee75826")
         (revision "1"))
@@ -10801,7 +8520,6 @@ and usefulness, not speed.  Track the progress at
          ("let-plus" ,sbcl-let-plus)))
       (inputs
        `(("cffi" ,sbcl-cffi)
-         ("cffi-grovel" ,sbcl-cffi-grovel)
          ("zeromq" ,zeromq)))
       (arguments
        `(#:phases (modify-phases %standard-phases
@@ -10939,11 +8657,14 @@ approach to templating.")
 (define-public cl-mysql
   (sbcl-package->cl-source-package sbcl-cl-mysql))
 
-(define-public sbcl-simple-date
+(define-public ecl-cl-mysql
+  (sbcl-package->ecl-package sbcl-cl-mysql))
+
+(define-public sbcl-postmodern
   (let ((commit "74469b25bbda990ec9b77e0d0eccdba0cd7e721a")
         (revision "1"))
     (package
-      (name "sbcl-simple-date")
+      (name "sbcl-postmodern")
       (version (git-version "1.19" revision commit))
       (source
        (origin
@@ -10957,108 +8678,23 @@ approach to templating.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
-      (synopsis "Basic date and time objects for Common Lisp")
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("closer-mop" ,sbcl-closer-mop)
+         ("global-vars" ,sbcl-global-vars)
+         ("md5" ,sbcl-md5)
+         ("split-sequence" ,sbcl-split-sequence)
+         ("usocket" ,sbcl-usocket)))
+      (arguments
+       ;; TODO: Fix missing dependency errors for simple-date/postgres-glue,
+       ;; cl-postgres/tests and s-sql/tests.
+       `(#:tests? #f
+         #:asd-systems '("postmodern"
+                         "simple-date/postgres-glue")))
+      (synopsis "Common Lisp library for interacting with PostgreSQL")
       (description
-       "@code{simple-date} is a very basic implementation of date and time
-objects, used to support storing and retrieving time-related SQL types.")
-      (home-page "https://marijnhaverbeke.nl/postmodern/")
-      (license license:zlib))))
-
-(define-public cl-simple-date
-  (sbcl-package->cl-source-package sbcl-simple-date))
-
-(define-public ecl-simple-date
-  (sbcl-package->ecl-package sbcl-simple-date))
-
-(define-public sbcl-cl-postgres
-  (package
-    (inherit sbcl-simple-date)
-    (name "sbcl-cl-postgres")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("simple-date" ,sbcl-simple-date)))
-    (inputs
-     `(("md5" ,sbcl-md5)
-       ("split-sequence" ,sbcl-split-sequence)
-       ("usocket" ,sbcl-usocket)))
-    (arguments
-     `(#:tests? #f)) ; TODO: Break simple-date/postgres-glue circular dependency
-    (synopsis "Common Lisp interface for PostgreSQL")
-    (description
-     "@code{cl-postgres} is a low-level library used for interfacing with
-a PostgreSQL server over a socket.")))
-
-(define-public cl-postgres
-  (sbcl-package->cl-source-package sbcl-cl-postgres))
-
-(define-public ecl-cl-postgres
-  (package
-    (inherit (sbcl-package->ecl-package sbcl-cl-postgres))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-ecl
-           (lambda _
-             (substitute* "cl-postgres.asd"
-               (("\\) \"usocket\"") " :ecl) \"usocket\""))
-             #t)))
-       #:tests? #f))))
-
-(define-public sbcl-simple-date-postgres-glue
-  (package
-    (inherit sbcl-simple-date)
-    (name "sbcl-simple-date-postgres-glue")
-    (inputs
-     `(("cl-postgres" ,sbcl-cl-postgres)
-       ("simple-date" ,sbcl-simple-date)))
-    (arguments
-     `(#:asd-file "simple-date.asd"
-       #:asd-system-name "simple-date/postgres-glue"))))
-
-(define-public cl-simple-date-postgres-glue
-  (sbcl-package->cl-source-package sbcl-simple-date-postgres-glue))
-
-(define-public sbcl-s-sql
-  (package
-    (inherit sbcl-simple-date)
-    (name "sbcl-s-sql")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-postgres" ,sbcl-cl-postgres)))
-    (arguments
-     `(#:tests? #f)) ; TODO: Break postmodern circular dependency
-    (synopsis "Lispy DSL for SQL")
-    (description
-     "@code{s-sql} is a Common Lisp library that can be used to compile
-s-expressions to strings of SQL code, escaping any Lisp values inside, and
-doing as much as possible of the work at compile time.")))
-
-(define-public cl-s-sql
-  (sbcl-package->cl-source-package sbcl-s-sql))
-
-(define-public sbcl-postmodern
-  (package
-    (inherit sbcl-simple-date)
-    (name "sbcl-postmodern")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("simple-date" ,sbcl-simple-date)
-       ("simple-date-postgres-glue" ,sbcl-simple-date-postgres-glue)))
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("cl-postgres" ,sbcl-cl-postgres)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("global-vars" ,sbcl-global-vars)
-       ("s-sql" ,sbcl-s-sql)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (arguments
-     ;; TODO: Fix missing dependency errors for simple-date/postgres-glue,
-     ;; cl-postgres/tests and s-sql/tests.
-     `(#:tests? #f))
-    (synopsis "Common Lisp library for interacting with PostgreSQL")
-    (description
-     "@code{postmodern} is a Common Lisp library for interacting with
+       "@code{postmodern} is a Common Lisp library for interacting with
 PostgreSQL databases.  It provides the following features:
 
 @itemize
@@ -11068,11 +8704,29 @@ foreign libraries.
 @item A syntax for mixing SQL and Lisp code.
 @item Convenient support for prepared statements and stored procedures.
 @item A metaclass for simple database-access objects.
-@end itemize\n")))
+@end itemize\n")
+      (home-page "https://marijnhaverbeke.nl/postmodern/")
+      (license license:zlib))))
 
 (define-public cl-postmodern
   (sbcl-package->cl-source-package sbcl-postmodern))
 
+(define-public ecl-postmodern
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-postmodern))
+    (arguments
+     `(#:tests? #f
+       #:asd-systems '("postmodern"
+                       "simple-date/postgres-glue")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "cl-postgres.asd"
+               (("\\) \"usocket\"")
+                " :ecl) \"usocket\""))
+             #t)))))))
+
 (define-public sbcl-dbi
   ;; Master includes a breaking change which other packages depend on since
   ;; Quicklisp decided to follow it:
@@ -11091,12 +8745,22 @@ foreign libraries.
          (sha256
           (base32 "0r3n4rw12qqxad0cryym2ibm4ddl49gbq4ra227afibsr43nw5k3"))))
       (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("rove" ,sbcl-rove)
+         ("trivial-types" ,sbcl-trivial-types)))
       (inputs
        `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cl-mysql" ,sbcl-cl-mysql)
+         ("cl-sqlite" ,sbcl-cl-sqlite)
          ("closer-mop" ,sbcl-closer-mop)
-         ("split-sequence" ,sbcl-split-sequence)))
+         ("postmodern" ,sbcl-postmodern)
+         ("split-sequence" ,sbcl-split-sequence)
+         ("trivial-garbage" ,sbcl-trivial-garbage)))
       (arguments
-       `(#:tests? #f))            ; TODO: Break circular dependency with dbd-*
+       `(#:asd-systems '("dbi"
+                         "dbd-mysql"
+                         "dbd-postgres"
+                         "dbd-sqlite3")))
       (synopsis "Database independent interface for Common Lisp")
       (description
        "@code{dbi} is a Common Lisp library providing a database independent
@@ -11107,43 +8771,8 @@ interface for MySQL, PostgreSQL and SQLite.")
 (define-public cl-dbi
   (sbcl-package->cl-source-package sbcl-dbi))
 
-(define-public sbcl-dbd-mysql
-  (package
-   (inherit sbcl-dbi)
-   (name "sbcl-dbd-mysql")
-   (inputs
-    `(("cl-mysql" ,sbcl-cl-mysql)
-      ("dbi" ,sbcl-dbi)))
-   (synopsis "Database driver for MySQL")))
-
-(define-public cl-dbd-mysql
-  (sbcl-package->cl-source-package sbcl-dbd-mysql))
-
-(define-public sbcl-dbd-postgres
-  (package
-   (inherit sbcl-dbi)
-   (name "sbcl-dbd-postgres")
-   (inputs
-    `(("cl-postgres" ,sbcl-cl-postgres)
-      ("dbi" ,sbcl-dbi)
-      ("trivial-garbage" ,sbcl-trivial-garbage)))
-   (synopsis "Database driver for PostgreSQL")))
-
-(define-public cl-dbd-postgres
-  (sbcl-package->cl-source-package sbcl-dbd-postgres))
-
-(define-public sbcl-dbd-sqlite3
-  (package
-   (inherit sbcl-dbi)
-   (name "sbcl-dbd-sqlite3")
-   (inputs
-    `(("cl-sqlite" ,sbcl-cl-sqlite)
-      ("dbi" ,sbcl-dbi)
-      ("trivial-garbage" ,sbcl-trivial-garbage)))
-   (synopsis "Database driver for SQLite3")))
-
-(define-public cl-dbd-sqlite3
-  (sbcl-package->cl-source-package sbcl-dbd-sqlite3))
+(define-public ecl-dbi
+  (sbcl-package->ecl-package sbcl-dbi))
 
 (define-public sbcl-uffi
   (package
@@ -11161,6 +8790,7 @@ interface for MySQL, PostgreSQL and SQLite.")
     (build-system asdf-build-system/sbcl)
     (arguments
      `(#:tests? #f ; TODO: Fix use of deprecated ASDF functions
+       #:asd-files '("uffi.asd")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-permissions
@@ -11182,10 +8812,8 @@ interface for MySQL, PostgreSQL and SQLite.")
        ;; asdf-build-system/source has its own phases and does not inherit
        ;; from asdf-build-system/sbcl phases.
        (modify-phases %standard-phases/source
-         (add-after 'unpack 'fix-permissions
-           (lambda _
-             (make-file-writable "doc/html.tar.gz")
-             #t)))))))
+         ;; Already done in SBCL package.
+         (delete 'reset-gzip-timestamps))))))
 
 (define-public sbcl-clsql
   (package
@@ -11209,16 +8837,82 @@ interface for MySQL, PostgreSQL and SQLite.")
            #t))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
-     `(("cffi-uffi-compat" ,sbcl-cffi-uffi-compat)
-       ("rt" ,sbcl-rt)
-       ("uffi" ,sbcl-uffi)))
+     `(("rt" ,sbcl-rt)))
+    (inputs
+     `(("cffi" ,sbcl-cffi)
+       ("md5" ,sbcl-md5)
+       ("mysql" ,mysql)
+       ("postgresql" ,postgresql)
+       ("postmodern" ,sbcl-postmodern)
+       ("sqlite" ,sqlite)
+       ("uffi" ,sbcl-uffi)
+       ("zlib" ,zlib)))
     (arguments
-     `(#:phases
+     `(#:asd-files '("clsql.asd"
+                     "clsql-uffi.asd"
+                     "clsql-sqlite3.asd"
+                     "clsql-postgresql.asd"
+                     "clsql-postgresql-socket3.asd"
+                     "clsql-mysql.asd")
+       #:asd-systems '("clsql"
+                       "clsql-sqlite3"
+                       "clsql-postgresql"
+                       "clsql-postgresql-socket3"
+                       "clsql-mysql")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-permissions
            (lambda _
              (make-file-writable "doc/html.tar.gz")
              #t))
+         (add-after 'unpack 'fix-build
+           (lambda _
+             (substitute* "clsql-uffi.asd"
+               (("\\(:version uffi \"2.0\"\\)")
+                "uffi"))
+             (substitute* "db-postgresql/postgresql-api.lisp"
+               (("\\(data :cstring\\)")
+                "(data :string)"))
+             #t))
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "db-sqlite3/sqlite3-loader.lisp"
+               (("libsqlite3")
+                (string-append (assoc-ref inputs "sqlite")
+                               "/lib/libsqlite3")))
+             (substitute* "db-postgresql/postgresql-loader.lisp"
+               (("libpq")
+                (string-append (assoc-ref inputs "postgresql")
+                               "/lib/libpq")))
+             (let ((lib (string-append "#p\""
+                                       (assoc-ref outputs "out")
+                                       "/lib/\"")))
+               (substitute* "clsql-mysql.asd"
+                 (("#p\"/usr/lib/clsql/clsql_mysql\\.so\"")
+                  lib))
+               (substitute* "db-mysql/mysql-loader.lisp"
+                 (("libmysqlclient" all)
+                  (string-append (assoc-ref inputs "mysql") "/lib/" all))
+                 (("clsql-mysql-system::\\*library-file-dir\\*")
+                  lib)))
+             #t))
+         (add-before 'build 'build-helper-library
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((mysql (assoc-ref inputs "mysql"))
+                    (inc-dir (string-append mysql "/include/mysql"))
+                    (lib-dir (string-append mysql "/lib"))
+                    (shared-lib-dir (string-append (assoc-ref outputs "out")
+                                                   "/lib"))
+                    (shared-lib (string-append shared-lib-dir
+                                               "/clsql_mysql.so")))
+               (mkdir-p shared-lib-dir)
+               (invoke "gcc" "-fPIC" "-shared"
+                       "-I" inc-dir
+                       "db-mysql/clsql_mysql.c"
+                       "-Wl,-soname=clsql_mysql"
+                       "-L" lib-dir "-lmysqlclient" "-lz"
+                       "-o" shared-lib)
+               #t)))
          (add-after 'unpack 'fix-tests
            (lambda _
              (substitute* "clsql.asd"
@@ -11244,9 +8938,9 @@ interfaces as well as a functional and an object oriented interface.")
        ("sqlite" ,sqlite)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("cl-postgres" ,cl-postgres)
-       ("cffi-uffi-compat" ,cl-cffi-uffi-compat)
+     `(("cffi" ,cl-cffi)
        ("md5" ,cl-md5)
+       ("postmodern" ,cl-postmodern)
        ("uffi" ,cl-uffi)))
     (arguments
      `(#:phases
@@ -11258,126 +8952,16 @@ interfaces as well as a functional and an object oriented interface.")
              (make-file-writable "doc/html.tar.gz")
              #t)))))))
 
-(define-public sbcl-clsql-uffi
-  (package
-    (inherit sbcl-clsql)
-    (name "sbcl-clsql-uffi")
-    (inputs
-     `(("cffi-uffi-compat" ,sbcl-cffi-uffi-compat)
-       ("clsql" ,sbcl-clsql)
-       ("uffi" ,sbcl-uffi)))
-    (synopsis "UFFI helper functions for Common Lisp SQL interface library")))
-
-(define-public sbcl-clsql-sqlite3
-  (package
-    (inherit sbcl-clsql)
-    (name "sbcl-clsql-sqlite3")
-    (inputs
-     `(("clsql" ,sbcl-clsql)
-       ("clsql-uffi" ,sbcl-clsql-uffi)
-       ("sqlite" ,sqlite)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-clsql)
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "db-sqlite3/sqlite3-loader.lisp"
-                 (("libsqlite3")
-                  (string-append (assoc-ref inputs "sqlite")
-                                 "/lib/libsqlite3")))
-               #t))))))
-    (synopsis "SQLite3 driver for Common Lisp SQL interface library")))
-
-(define-public sbcl-clsql-postgresql
-  (package
-    (inherit sbcl-clsql)
-    (name "sbcl-clsql-postgresql")
-    (inputs
-     `(("clsql" ,sbcl-clsql)
-       ("clsql-uffi" ,sbcl-clsql-uffi)
-       ("postgresql" ,postgresql)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-clsql)
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "db-postgresql/postgresql-loader.lisp"
-                 (("libpq")
-                  (string-append (assoc-ref inputs "postgresql")
-                                 "/lib/libpq")))
-               #t))))))
-    (synopsis "PostgreSQL driver for Common Lisp SQL interface library")))
-
-(define-public sbcl-clsql-postgresql-socket3
-  (package
-    (inherit sbcl-clsql)
-    (name "sbcl-clsql-postgresql-socket3")
-    (inputs
-     `(("cl-postgres" ,sbcl-cl-postgres)
-       ("clsql" ,sbcl-clsql)
-       ("md5" ,sbcl-md5)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-clsql)
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'create-asd-file 'fix-asd-file
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (lib (string-append out "/lib/" (%lisp-type)))
-                      (asd (string-append lib "/clsql-postgresql-socket3.asd")))
-                 (substitute* asd
-                   (("CLSQL-POSTGRESQL-SOCKET-SYSTEM::")
-                    "")))
-               #t))))))
-    (synopsis "PostgreSQL driver for Common Lisp SQL interface library")))
-
-(define-public sbcl-clsql-mysql
-  (package
-    (inherit sbcl-clsql)
-    (name "sbcl-clsql-mysql")
-    (inputs
-     `(("mysql" ,mysql)
-       ("sbcl-clsql" ,sbcl-clsql)
-       ("sbcl-clsql-uffi" ,sbcl-clsql-uffi)
-       ("zlib" ,zlib)))
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-clsql)
-       ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'fix-paths
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((lib (string-append "#p\""
-                                         (assoc-ref outputs "out")
-                                         "/lib/\"")))
-                 (substitute* "clsql-mysql.asd"
-                   (("#p\"/usr/lib/clsql/clsql_mysql\\.so\"")
-                    lib))
-                 (substitute* "db-mysql/mysql-loader.lisp"
-                   (("libmysqlclient" all)
-                    (string-append (assoc-ref inputs "mysql") "/lib/" all))
-                   (("clsql-mysql-system::\\*library-file-dir\\*")
-                    lib)))
-               #t))
-           (add-before 'build 'build-helper-library
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((mysql (assoc-ref inputs "mysql"))
-                      (inc-dir (string-append mysql "/include/mysql"))
-                      (lib-dir (string-append mysql "/lib"))
-                      (shared-lib-dir (string-append (assoc-ref outputs "out")
-                                                     "/lib"))
-                      (shared-lib (string-append shared-lib-dir
-                                                 "/clsql_mysql.so")))
-                 (mkdir-p shared-lib-dir)
-                 (invoke "gcc" "-fPIC" "-shared"
-                         "-I" inc-dir
-                         "db-mysql/clsql_mysql.c"
-                         "-Wl,-soname=clsql_mysql"
-                         "-L" lib-dir "-lmysqlclient" "-lz"
-                         "-o" shared-lib)
-                 #t)))))))
-    (synopsis "MySQL driver for Common Lisp SQL interface library")))
+(define-public ecl-clsql
+  (let ((pkg (sbcl-package->ecl-package sbcl-clsql)))
+    (package
+      (inherit pkg)
+      (inputs
+       (alist-delete "uffi" (package-inputs pkg)))
+      (arguments
+       (substitute-keyword-arguments (package-arguments pkg)
+         ((#:asd-files asd-files '())
+          `(cons "clsql-cffi.asd" ,asd-files)))))))
 
 (define-public sbcl-sycamore
   (let ((commit "fd2820fec165ad514493426dea209728f64e6d18"))
@@ -11394,8 +8978,6 @@ interfaces as well as a functional and an object oriented interface.")
          (sha256
           (base32 "00bv1aj89q5vldmq92zp2364jq312zjq2mbd3iyz1s2b4widzhl7"))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       `(#:asd-file "src/sycamore.asd"))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cl-ppcre" ,sbcl-cl-ppcre)))
@@ -11418,6 +9000,9 @@ If features:
 (define-public cl-sycamore
   (sbcl-package->cl-source-package sbcl-sycamore))
 
+(define-public ecl-sycamore
+  (sbcl-package->ecl-package sbcl-sycamore))
+
 (define-public sbcl-trivial-package-local-nicknames
   (package
     (name "sbcl-trivial-package-local-nicknames")
@@ -11443,6 +9028,9 @@ in DEFPACKAGE.")
 (define-public cl-trivial-package-local-nicknames
   (sbcl-package->cl-source-package sbcl-trivial-package-local-nicknames))
 
+(define-public ecl-trivial-package-local-nicknames
+  (sbcl-package->ecl-package sbcl-trivial-package-local-nicknames))
+
 (define-public sbcl-enchant
   (let ((commit "6af162a7bf10541cbcfcfa6513894900329713fa"))
     (package
@@ -11482,6 +9070,9 @@ multiple checkers, including Aspell and Hunspell.")
 (define-public cl-enchant
   (sbcl-package->cl-source-package sbcl-enchant))
 
+(define-public ecl-enchant
+  (sbcl-package->ecl-package sbcl-enchant))
+
 (define-public sbcl-cl-change-case
   (let ((commit "5ceff2a5f8bd845b6cb510c6364176b27a238fd3"))
     (package
@@ -11517,6 +9108,9 @@ PascalCase, snake_case, param-case, CONSTANT_CASE and more.")
 (define-public cl-change-case
   (sbcl-package->cl-source-package sbcl-cl-change-case))
 
+(define-public ecl-cl-change-case
+  (sbcl-package->ecl-package sbcl-cl-change-case))
+
 (define-public sbcl-moptilities
   (let ((commit "a436f16b357c96b82397ec018ea469574c10dd41"))
     (package
@@ -11537,6 +9131,15 @@ PascalCase, snake_case, param-case, CONSTANT_CASE and more.")
        `(("closer-mop" ,sbcl-closer-mop)))
       (native-inputs
        `(("lift" ,sbcl-lift)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-tests
+             (lambda _
+               (substitute* "lift-standard.config"
+                 ((":relative-to lift-test")
+                  ":relative-to moptilities-test"))
+               #t)))))
       (synopsis "Compatibility layer for Common Lisp MOP implementation differences")
       (description
        "MOP utilities provide a common interface between Lisps and make the
@@ -11562,29 +9165,12 @@ MOP easier to use.")
          (sha256
           (base32 "15viw5pi5sa7qq9b4n2rr3dj2jkqr180rh9z1lh8w3rgl42i2adc"))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           ;; The cleanup phase moves files around but we need to keep the
-           ;; directory structure for the grovel-generated library.
-           (replace 'cleanup
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (lib (string-append out "/lib/sbcl/")))
-                 (delete-file-recursively (string-append lib "src"))
-                 (delete-file-recursively (string-append lib "tests"))
-                 (for-each delete-file
-                           (filter (lambda (file)
-                                     (not (member (basename file) '("libosicat.so"))))
-                                   (find-files (string-append lib "posix") ".*"))))
-               #t)))))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
          ("trivial-features" ,sbcl-trivial-features)))
       (native-inputs
-       `(("cffi-grovel" ,sbcl-cffi-grovel)
-         ("rt" ,sbcl-rt)))
+       `(("rt" ,sbcl-rt)))
       (synopsis "Operating system interface for Common Lisp")
       (description
        "Osicat is a lightweight operating system interface for Common Lisp on
@@ -11595,6 +9181,9 @@ accompaniment to the standard ANSI facilities.")
 (define-public cl-osicat
   (sbcl-package->cl-source-package sbcl-osicat))
 
+(define-public ecl-osicat
+  (sbcl-package->ecl-package sbcl-osicat))
+
 (define-public sbcl-clx-xembed
   (let ((commit "a5c4b844d31ee68ffa58c933cc1cdddde6990743")
         (revision "1"))
@@ -11613,7 +9202,7 @@ accompaniment to the standard ANSI facilities.")
           (base32 "1abx4v36ycmfjdwpjk4hh8058ya8whwia7ds9vd96q2qsrs57f12"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:asd-system-name "xembed"))
+       `(#:asd-systems '("xembed")))
       (inputs
        `(("sbcl-clx" ,sbcl-clx)))
       (synopsis "CL(x) xembed protocol implementation ")
@@ -11643,7 +9232,7 @@ accompaniment to the standard ANSI facilities.")
          "0rlswkf0siaabsvvch3dgxmg45fw5w8pd9b7ri2w7a298aya52z9"))))
     (build-system asdf-build-system/sbcl)
     (arguments
-     '(#:asd-system-name "quantile-estimator"))
+     '(#:asd-files '("quantile-estimator.asd")))
     (inputs
      `(("alexandria" ,sbcl-alexandria)))
     (home-page "https://github.com/deadtrickster/quantile-estimator.cl")
@@ -11679,9 +9268,29 @@ Streams in ICDE’05.")
     (inputs
      `(("alexandria" ,sbcl-alexandria)
        ("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("cffi" ,sbcl-cffi)
+       ("cl-fad" ,sbcl-cl-fad)
        ("cl-ppcre" ,sbcl-cl-ppcre)
+       ("drakma" ,sbcl-drakma)
+       ("hunchentoot" ,sbcl-hunchentoot)
        ("local-time" ,sbcl-local-time)
-       ("quantile-estimator" ,sbcl-quantile-estimator)))
+       ("quantile-estimator" ,sbcl-quantile-estimator)
+       ("salza2" ,sbcl-salza2)
+       ("split-sequence" ,sbcl-split-sequence)
+       ("trivial-utf-8" ,sbcl-trivial-utf-8)))
+    (arguments
+     '(#:asd-files '("prometheus.asd"
+                     "prometheus.collectors.sbcl.asd"
+                     "prometheus.collectors.process.asd"
+                     "prometheus.formats.text.asd"
+                     "prometheus.exposers.hunchentoot.asd"
+                     "prometheus.pushgateway.asd")
+       #:asd-systems '("prometheus"
+                       "prometheus.collectors.sbcl"
+                       "prometheus.collectors.process"
+                       "prometheus.formats.text"
+                       "prometheus.exposers.hunchentoot"
+                       "prometheus.pushgateway")))
     (home-page "https://github.com/deadtrickster/prometheus.cl")
     (synopsis "Prometheus.io Common Lisp client")
     (description "Prometheus.io Common Lisp client.")
@@ -11693,85 +9302,6 @@ Streams in ICDE’05.")
 (define-public ecl-prometheus
   (sbcl-package->ecl-package sbcl-prometheus))
 
-(define-public sbcl-prometheus.collectors.sbcl
-  (package
-    (inherit sbcl-prometheus)
-    (name "sbcl-prometheus.collectors.sbcl")
-    (inputs `(("prometheus" ,sbcl-prometheus)))
-    (synopsis "Prometheus collector for SBCL metrics")
-    (description "Prometheus collector for SBCL metrics.")))
-
-(define-public cl-prometheus.collectors.sbcl
-  (sbcl-package->cl-source-package sbcl-prometheus.collectors.sbcl))
-
-(define-public sbcl-prometheus.collectors.process
-  (package
-    (inherit sbcl-prometheus)
-    (name "sbcl-prometheus.collectors.process")
-    (inputs
-     `(("cffi" ,sbcl-cffi)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
-       ("cl-fad" ,sbcl-cl-fad)
-       ("prometheus" ,sbcl-prometheus)
-       ("split-sequence" ,sbcl-split-sequence)))
-    (synopsis "Prometheus collector for process metrics")
-    (description "Prometheus collector for process metrics.")))
-
-(define-public cl-prometheus.collectors.process
-  (sbcl-package->cl-source-package sbcl-prometheus.collectors.process))
-
-(define-public ecl-prometheus.collectors.process
-  (sbcl-package->ecl-package sbcl-prometheus.collectors.process))
-
-(define-public sbcl-prometheus.formats.text
-  (package
-    (inherit sbcl-prometheus)
-    (name "sbcl-prometheus.formats.text")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("prometheus" ,sbcl-prometheus)))
-    (synopsis "Prometheus client text format")
-    (description "Prometheus client text format.")))
-
-(define-public cl-prometheus.formats.text
-  (sbcl-package->cl-source-package sbcl-prometheus.formats.text))
-
-(define-public ecl-prometheus.formats.text
-  (sbcl-package->ecl-package sbcl-prometheus.formats.text))
-
-(define-public sbcl-prometheus.exposers.hunchentoot
-  (package
-    (inherit sbcl-prometheus)
-    (name "sbcl-prometheus.exposers.hunchentoot")
-    (inputs
-     `(("hunchentoot" ,sbcl-hunchentoot)
-       ("prometheus" ,sbcl-prometheus)
-       ("prometheus.formats.text" ,sbcl-prometheus.formats.text)
-       ("salza2" ,sbcl-salza2)
-       ("trivial-utf-8" ,sbcl-trivial-utf-8)))
-    (synopsis "Prometheus collector for Hunchentoot metrics")
-    (description "Prometheus collector for Hunchentoot metrics")))
-
-(define-public cl-prometheus.exposers.hunchentoot
-  (sbcl-package->cl-source-package sbcl-prometheus.exposers.hunchentoot))
-
-(define-public sbcl-prometheus.pushgateway
-  (package
-    (inherit sbcl-prometheus)
-    (name "sbcl-prometheus.pushgateway")
-    (inputs
-     `(("drakma" ,sbcl-drakma)
-       ("prometheus" ,sbcl-prometheus)
-       ("prometheus.formats.text" ,sbcl-prometheus.formats.text)))
-    (synopsis "Prometheus Pushgateway client")
-    (description "Prometheus Pushgateway client.")))
-
-(define-public cl-prometheus.pushgateway
-  (sbcl-package->cl-source-package sbcl-prometheus.pushgateway))
-
-(define-public ecl-prometheus.pushgateway
-  (sbcl-package->ecl-package sbcl-prometheus.pushgateway))
-
 (define-public sbcl-uuid
   (let ((commit "e7d6680c3138385c0708f7aaf0c96622eeb140e8"))
     (package
@@ -11836,9 +9366,6 @@ and active restarts.")
 (define-public ecl-dissect
   (sbcl-package->ecl-package sbcl-dissect))
 
-;; TODO: Uses ASDF's package-inferred-system which is not supported by
-;; asdf-build-system/sbcl as of 2020-05-21. We should fix
-;; asdf-build-system/sbcl.
 (define-public sbcl-rove
   (package
     (name "sbcl-rove")
@@ -11922,14 +9449,13 @@ learn about each of the parameters.")
        `(#:test-asd-file "sxql-test.asd"))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
-         ("cl-syntax-annot" ,sbcl-cl-syntax-annot)
+         ("cl-syntax" ,sbcl-cl-syntax)
          ("iterate" ,sbcl-iterate)
          ("optima" ,sbcl-optima)
          ("split-sequence" ,sbcl-split-sequence)
          ("trivial-types" ,sbcl-trivial-types)))
       (native-inputs
-       `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)))
+       `(("prove" ,sbcl-prove)))
       (home-page "https://github.com/fukamachi/sxql")
       (synopsis "SQL generator for Common Lisp")
       (description "SQL generator for Common Lisp.")
@@ -11958,7 +9484,7 @@ learn about each of the parameters.")
            "05ss4nz1jb9kb796295482b62w5cj29msfj8zis33sp2rw2vmv2g"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:asd-system-name "1am"))
+       `(#:asd-systems '("1am")))
       (home-page "https://github.com/lmj/1am")
       (synopsis "Minimal testing framework for Common Lisp")
       (description "A minimal testing framework for Common Lisp.")
@@ -12023,19 +9549,10 @@ tables.")
              (substitute* "src/low-level/librdkafka-bindings.lisp"
                (("librdkafka" all)
                 (string-append (assoc-ref inputs "librdkafka") "/lib/"
-                               all)))))
-         (add-before 'cleanup 'move-bundle
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (actual (string-append out "/lib/sbcl/src/cl-rdkafka.fasl"))
-                    (expected (string-append
-                               out "/lib/sbcl/cl-rdkafka--system.fasl")))
-               (copy-file actual expected)
-               #t))))))
+                               all))))))))
     (inputs
      `(("bordeaux-threads" ,sbcl-bordeaux-threads)
        ("cffi" ,sbcl-cffi)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
        ("librdkafka" ,librdkafka)
        ("lparallel" ,sbcl-lparallel)
        ("trivial-garbage" ,sbcl-trivial-garbage)))
@@ -12047,6 +9564,9 @@ tables.")
 (define-public cl-rdkafka
   (sbcl-package->cl-source-package sbcl-cl-rdkafka))
 
+(define-public ecl-cl-rdkafka
+  (sbcl-package->ecl-package sbcl-cl-rdkafka))
+
 (define-public sbcl-acclimation
   (let ((commit "4d51150902568fcd59335f4cc4cfa022df6116a5"))
     (package
@@ -12077,10 +9597,13 @@ weight, temperature, names of physical quantitites, etc.")
 (define-public cl-acclimation
   (sbcl-package->cl-source-package sbcl-acclimation))
 
-(define-public sbcl-clump-2-3-tree
+(define-public ecl-acclimation
+  (sbcl-package->ecl-package sbcl-acclimation))
+
+(define-public sbcl-clump
   (let ((commit "1ea4dbac1cb86713acff9ae58727dd187d21048a"))
     (package
-      (name "sbcl-clump-2-3-tree")
+      (name "sbcl-clump")
       (version (git-version "0.0.0" "1" commit))
       (source
        (origin
@@ -12092,14 +9615,11 @@ weight, temperature, names of physical quantitites, etc.")
          (sha256
           (base32
            "1639msyagsswj85gc0wd90jgh8588j3qg5q70by9s2brf2q6w4lh"))))
-      (arguments
-       '(#:asd-file "2-3-tree/clump-2-3-tree.asd"
-         #:asd-system-name "clump-2-3-tree"))
       (inputs
        `(("acclimation" ,sbcl-acclimation)))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/robert-strandh/Clump")
-      (synopsis "Implementation of 2-3 trees for Common Lisp")
+      (synopsis "Collection of tree implementations for Common Lisp")
       (description "The purpose of this library is to provide a collection of
 implementations of trees.
 
@@ -12113,34 +9633,16 @@ where the trees can be used as search trees or as trees that represent
 sequences of objects.")
       (license license:bsd-2))))
 
-(define-public sbcl-clump-binary-tree
-  (package
-    (inherit sbcl-clump-2-3-tree)
-    (name "sbcl-clump-binary-tree")
-    (arguments
-     '(#:asd-file "Binary-tree/clump-binary-tree.asd"
-       #:asd-system-name "clump-binary-tree"))
-    (synopsis "Implementation of binary trees for Common Lisp")))
-
-(define-public sbcl-clump
-  (package
-    (inherit sbcl-clump-2-3-tree)
-    (name "sbcl-clump")
-    (arguments
-     '(#:asd-file "clump.asd"
-       #:asd-system-name "clump"))
-    (inputs
-     `(("clump-2-3-tree" ,sbcl-clump-2-3-tree)
-       ("clump-binary-tree" ,sbcl-clump-binary-tree)))
-    (synopsis "Collection of tree implementations for Common Lisp")))
-
 (define-public cl-clump
   (sbcl-package->cl-source-package sbcl-clump))
 
-(define-public sbcl-cluffer-base
+(define-public ecl-clump
+  (sbcl-package->ecl-package sbcl-clump))
+
+(define-public sbcl-cluffer
   (let ((commit "4aad29c276a58a593064e79972ee4d77cae0af4a"))
     (package
-      (name "sbcl-cluffer-base")
+      (name "sbcl-cluffer")
       (version (git-version "0.0.0" "1" commit))
       (source
        (origin
@@ -12152,12 +9654,10 @@ sequences of objects.")
          (sha256
           (base32
            "1bcg13g7qb3dr8z50aihdjqa6miz5ivlc9wsj2csgv1km1mak2kj"))))
-      (arguments
-       '(#:asd-file "Base/cluffer-base.asd"
-         #:asd-system-name "cluffer-base"))
-      (inputs
-       `(("acclimation" ,sbcl-acclimation)))
       (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("acclimation" ,sbcl-acclimation)
+         ("clump" ,sbcl-clump)))
       (home-page "https://github.com/robert-strandh/cluffer")
       (synopsis "Common Lisp library providing a protocol for text-editor buffers")
       (description "Cluffer is a library for representing the buffer of a text
@@ -12166,64 +9666,12 @@ interact with the buffer contents in various ways, and it supplies different
 implementations of those protocols for different purposes.")
       (license license:bsd-2))))
 
-(define-public sbcl-cluffer-standard-line
-  (package
-    (inherit sbcl-cluffer-base)
-    (name "sbcl-cluffer-standard-line")
-    (arguments
-     '(#:asd-file "Standard-line/cluffer-standard-line.asd"
-       #:asd-system-name "cluffer-standard-line"))
-    (inputs
-     `(("cluffer-base" ,sbcl-cluffer-base)))))
-
-(define-public sbcl-cluffer-standard-buffer
-  (package
-    (inherit sbcl-cluffer-base)
-    (name "sbcl-cluffer-standard-buffer")
-    (arguments
-     '(#:asd-file "Standard-buffer/cluffer-standard-buffer.asd"
-       #:asd-system-name "cluffer-standard-buffer"))
-    (inputs
-     `(("cluffer-base" ,sbcl-cluffer-base)
-       ("clump" ,sbcl-clump)))))
-
-(define-public sbcl-cluffer-simple-line
-  (package
-    (inherit sbcl-cluffer-base)
-    (name "sbcl-cluffer-simple-line")
-    (arguments
-     '(#:asd-file "Simple-line/cluffer-simple-line.asd"
-       #:asd-system-name "cluffer-simple-line"))
-    (inputs
-     `(("cluffer-base" ,sbcl-cluffer-base)))))
-
-(define-public sbcl-cluffer-simple-buffer
-  (package
-    (inherit sbcl-cluffer-base)
-    (name "sbcl-cluffer-simple-buffer")
-    (arguments
-     '(#:asd-file "Simple-buffer/cluffer-simple-buffer.asd"
-       #:asd-system-name "cluffer-simple-buffer"))
-    (inputs
-     `(("cluffer-base" ,sbcl-cluffer-base)))))
-
-(define-public sbcl-cluffer
-  (package
-    (inherit sbcl-cluffer-base)
-    (name "sbcl-cluffer")
-    (arguments
-     '(#:asd-file "cluffer.asd"
-       #:asd-system-name "cluffer"))
-    (inputs
-     `(("cluffer-base" ,sbcl-cluffer-base)
-       ("cluffer-standard-line" ,sbcl-cluffer-standard-line)
-       ("cluffer-standard-buffer" ,sbcl-cluffer-standard-buffer)
-       ("cluffer-simple-line" ,sbcl-cluffer-simple-line)
-       ("cluffer-simple-buffer" ,sbcl-cluffer-simple-buffer)))))
-
 (define-public cl-cluffer
   (sbcl-package->cl-source-package sbcl-cluffer))
 
+(define-public ecl-cluffer
+  (sbcl-package->ecl-package sbcl-cluffer))
+
 (define-public sbcl-cl-libsvm-format
   (let ((commit "3300f84fd8d9f5beafc114f543f9d83417c742fb")
         (revision "0"))
@@ -12242,8 +9690,7 @@ implementations of those protocols for different purposes.")
            "0284aj84xszhkhlivaigf9qj855fxad3mzmv3zfr0qzb5k0nzwrg"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)))
+       `(("prove" ,sbcl-prove)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
       (synopsis "LibSVM data format reader for Common Lisp")
@@ -12277,8 +9724,7 @@ format.")
            "14x95rlg80ay5hv645ki57pqvy12v28hz4k1w0f6bsfi2rmpxchq"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
-       `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)))
+       `(("prove" ,sbcl-prove)))
       (inputs
        `(("cl-libsvm-format" ,sbcl-cl-libsvm-format)
          ("cl-store" ,sbcl-cl-store)))
@@ -12317,7 +9763,6 @@ online linear classification written in Common Lisp.")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("prove" ,sbcl-prove)
-         ("prove-asdf" ,sbcl-prove-asdf)
          ("trivial-garbage" ,sbcl-trivial-garbage)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
@@ -12535,7 +9980,6 @@ wrappers of deflate streams.  It currently does not handle compression.")
       (inputs
        `(("alexandria" ,sbcl-alexandria)
          ("cffi" ,sbcl-cffi)
-         ("cffi-grovel" ,sbcl-cffi-grovel)
          ("freetype" ,freetype)
          ("trivial-garbage" ,sbcl-trivial-garbage)))
       (arguments
@@ -12701,7 +10145,7 @@ than a few Kb.")
          ("trivial-features" ,sbcl-trivial-features)))
       (arguments
        ;; FIXME: Without the following line, the build fails (see issue 41437).
-       `(#:asd-system-name "3bz"))
+       `(#:asd-systems '("3bz")))
       (home-page "https://github.com/3b/3bz")
       (synopsis "Deflate decompression for Common Lisp")
       (description
@@ -12811,6 +10255,8 @@ both from files on disk, or streams in memory.")
          ("retrospectiff" ,sbcl-retrospectiff)
          ("skippy" ,sbcl-skippy)
          ("zpng" ,sbcl-zpng)))
+      (arguments
+       '(#:asd-files '("opticl.asd")))
       (home-page "https://github.com/slyrus/opticl")
       (synopsis "Image processing library for Common Lisp")
       (description
@@ -12821,11 +10267,14 @@ and saving 2-dimensional pixel-based images.")
 (define-public cl-opticl
   (sbcl-package->cl-source-package sbcl-opticl))
 
-(define-public sbcl-clim-lisp
+(define-public ecl-opticl
+  (sbcl-package->ecl-package sbcl-opticl))
+
+(define-public sbcl-mcclim
   (let ((commit "27b4d7a667c9b3faa74cabcb57706b888314fff7")
         (revision "0"))
     (package
-      (name "sbcl-clim-lisp")
+      (name "sbcl-mcclim")
       (version (git-version "0.9.7" revision commit))
       (source
        (origin
@@ -12837,11 +10286,67 @@ and saving 2-dimensional pixel-based images.")
          (sha256
           (base32 "0jijfgkwas6xnpp5wiii6slcx9pgsalngacb8zm29x6pamx2193h"))))
       (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)
+         ("pkg-config" ,pkg-config)))
       (inputs
        `(("alexandria" ,sbcl-alexandria)
+         ("babel" ,sbcl-babel)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cl-freetype2" ,sbcl-cl-freetype2)
+         ("cl-pdf" ,sbcl-cl-pdf)
+         ("cffi" ,sbcl-cffi)
+         ("cl-unicode" ,sbcl-cl-unicode)
+         ("cl-vectors" ,sbcl-cl-vectors)
          ("closer-mop" ,sbcl-closer-mop)
+         ("clx" ,sbcl-clx)
+         ("flexi-streams" ,sbcl-flexi-streams)
+         ("flexichain" ,sbcl-flexichain)
+         ("font-dejavu" ,font-dejavu)
+         ("fontconfig" ,fontconfig)
+         ("freetype" ,freetype)
+         ("harfbuzz" ,harfbuzz)
          ("log4cl" ,sbcl-log4cl)
-         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+         ("opticl" ,sbcl-opticl)
+         ("spatial-trees" ,sbcl-spatial-trees)
+         ("swank" ,sbcl-slime-swank)
+         ("trivial-features" ,sbcl-trivial-features)
+         ("trivial-garbage" ,sbcl-trivial-garbage)
+         ("trivial-gray-streams" ,sbcl-trivial-gray-streams)
+         ("zpb-ttf" ,sbcl-zpb-ttf)))
+      (arguments
+       '(#:asd-systems '("mcclim"
+                         "clim-examples")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; mcclim-truetype uses DejaVu as default font and
+               ;; sets the path at build time.
+               (substitute* "Extensions/fonts/fontconfig.lisp"
+                 (("/usr/share/fonts/truetype/dejavu/")
+                  (string-append (assoc-ref inputs "font-dejavu")
+                                 "/share/fonts/truetype/")))
+               (substitute* "Extensions/fontconfig/src/functions.lisp"
+                 (("libfontconfig\\.so")
+                  (string-append (assoc-ref inputs "fontconfig")
+                                 "/lib/libfontconfig.so")))
+               (substitute* "Extensions/harfbuzz/src/functions.lisp"
+                 (("libharfbuzz\\.so")
+                  (string-append (assoc-ref inputs "harfbuzz")
+                                 "/lib/libharfbuzz.so")))
+               #t))
+           (add-after 'unpack 'fix-build
+             (lambda _
+               ;; The cffi-grovel system does not get loaded automatically,
+               ;; so we load it explicitly.
+               (substitute* "Extensions/fontconfig/mcclim-fontconfig.asd"
+                 (("\\(asdf:defsystem #:mcclim-fontconfig" all)
+                  (string-append "(asdf:load-system :cffi-grovel)\n" all)))
+               (substitute* "Extensions/harfbuzz/mcclim-harfbuzz.asd"
+                 (("\\(asdf:defsystem #:mcclim-harfbuzz" all)
+                  (string-append "(asdf:load-system :cffi-grovel)\n" all)))
+               #t)))))
       (home-page "https://common-lisp.net/project/mcclim/")
       (synopsis "Common Lisp GUI toolkit")
       (description
@@ -12849,642 +10354,11 @@ and saving 2-dimensional pixel-based images.")
 specification}, a toolkit for writing GUIs in Common Lisp.")
       (license license:lgpl2.1+))))
 
-(define-public sbcl-clim-basic
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-basic")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("babel" ,sbcl-babel)
-       ("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("clim-lisp" ,sbcl-clim-lisp)
-       ("flexichain" ,sbcl-flexichain)
-       ("spatial-trees" ,sbcl-spatial-trees)
-       ("trivial-features" ,sbcl-trivial-features)
-       ("trivial-garbage" ,sbcl-trivial-garbage)))
-    (arguments
-     '(#:asd-file "Core/clim-basic/clim-basic.asd"))))
-
-(define-public sbcl-clim-core
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-core")
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)))
-    (arguments
-     '(#:asd-file "Core/clim-core/clim-core.asd"))))
-
-(define-public sbcl-esa-mcclim
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-esa-mcclim")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("clim-core" ,sbcl-clim-core)))
-    (arguments
-     '(#:asd-file "Libraries/ESA/esa-mcclim.asd"))))
-
-(define-public sbcl-mcclim-fonts
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-fonts")
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)))
-    (arguments
-     '(#:asd-file "Extensions/fonts/mcclim-fonts.asd"))))
-
-(define-public sbcl-automaton
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-automaton")
-    (inputs
-     `())
-    (arguments
-     '(#:asd-file "Libraries/Drei/cl-automaton/automaton.asd"))))
-
-(define-public sbcl-persistent
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-persistent")
-    (inputs
-     `())
-    (arguments
-     '(#:asd-file "Libraries/Drei/Persistent/persistent.asd"))))
-
-(define-public sbcl-drei-mcclim
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-drei-mcclim")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (inputs
-     `(("automaton" ,sbcl-automaton)
-       ("clim-core" ,sbcl-clim-core)
-       ("esa-mcclim" ,sbcl-esa-mcclim)
-       ("flexichain" ,sbcl-flexichain)
-       ("mcclim-fonts" ,sbcl-mcclim-fonts)
-       ("persistent" ,sbcl-persistent)
-       ("swank" ,cl-slime-swank)))
-    (arguments
-     '(#:asd-file "Libraries/Drei/drei-mcclim.asd"))))
-
-(define-public sbcl-clim
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim")
-    (inputs
-     `(("clim-core" ,sbcl-clim-core)
-       ("drei-mcclim" ,sbcl-drei-mcclim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Core/clim/clim.asd"))))
-
-(define-public sbcl-mcclim-backend-common
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-backend-common")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/common/mcclim-backend-common.asd"))))
-
-(define-public sbcl-mcclim-clx
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-clx")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-unicode" ,sbcl-cl-unicode)
-       ("clx" ,sbcl-clx)
-       ("mcclim-backend-common" ,sbcl-mcclim-backend-common)
-       ("mcclim-fonts" ,sbcl-mcclim-fonts)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/CLX/mcclim-clx.asd"))))
-
-(define-public sbcl-mcclim-fonts-truetype
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-fonts-truetype")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-aa" ,sbcl-cl-aa)
-       ("cl-paths-ttf" ,sbcl-cl-paths-ttf)
-       ("cl-vectors" ,sbcl-cl-vectors)
-       ("clim-basic" ,sbcl-clim-basic)
-       ("font-dejavu" ,font-dejavu)
-       ("zpb-ttf" ,sbcl-zpb-ttf)))
-    (arguments
-     '(#:asd-file "Extensions/fonts/mcclim-fonts.asd"
-       #:asd-system-name "mcclim-fonts/truetype"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; mcclim-truetype uses DejaVu as default font and
-             ;; sets the path at build time.
-             (substitute* "Extensions/fonts/fontconfig.lisp"
-               (("/usr/share/fonts/truetype/dejavu/")
-                (string-append (assoc-ref inputs "font-dejavu")
-                               "/share/fonts/truetype/")))
-             #t)))))))
-
-(define-public sbcl-mcclim-fonts-clx-truetype
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-fonts-clx-truetype")
-    (inputs
-     `(("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-fonts-truetype" ,sbcl-mcclim-fonts-truetype)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "./Extensions/fonts/mcclim-fonts.asd"
-       #:asd-system-name "mcclim-fonts/clx-truetype"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Extensions/fonts/mcclim-fonts.asd"
-               ((":depends-on \\(#:mcclim-fonts/truetype")
-                ":depends-on (#:mcclim-fonts-truetype"))
-             #t)))))))
-
-(define-public sbcl-mcclim-clx-truetype
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-clx-truetype")
-    (inputs
-     `(("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-fonts-clx-truetype" ,sbcl-mcclim-fonts-clx-truetype)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/CLX/mcclim-clx.asd"
-       #:asd-system-name "mcclim-clx/truetype"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Backends/CLX/mcclim-clx.asd"
-               (("mcclim-fonts/clx-truetype")
-                "mcclim-fonts-clx-truetype"))
-             #t)))))))
-
-(define-public sbcl-mcclim-fontconfig
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-fontconfig")
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
-       ("fontconfig" ,fontconfig)))
-    (arguments
-     '(#:asd-file "Extensions/fontconfig/mcclim-fontconfig.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Extensions/fontconfig/src/functions.lisp"
-               (("libfontconfig\\.so")
-                (string-append (assoc-ref inputs "fontconfig")
-                               "/lib/libfontconfig.so")))
-             #t))
-         (add-after 'unpack 'fix-build
-           (lambda _
-             ;; The cffi-grovel system does not get loaded automatically,
-             ;; so we load it explicitly.
-             (substitute* "Extensions/fontconfig/mcclim-fontconfig.asd"
-               (("\\(asdf:defsystem #:mcclim-fontconfig" all)
-                (string-append "(asdf:load-system :cffi-grovel)\n" all)))
-             #t)))))))
-
-(define-public sbcl-mcclim-harfbuzz
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-harfbuzz")
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cffi" ,sbcl-cffi)
-       ("cffi-grovel" ,sbcl-cffi-grovel)
-       ("freetype" ,freetype)
-       ("harfbuzz" ,harfbuzz)
-       ("trivial-garbage" ,sbcl-trivial-garbage)))
-    (arguments
-     '(#:asd-file "Extensions/harfbuzz/mcclim-harfbuzz.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Extensions/harfbuzz/src/functions.lisp"
-               (("libharfbuzz\\.so")
-                (string-append (assoc-ref inputs "harfbuzz")
-                               "/lib/libharfbuzz.so")))
-             #t))
-         (add-after 'unpack 'fix-build
-           (lambda _
-             ;; The cffi-grovel system does not get loaded automatically,
-             ;; so we load it explicitly.
-             (substitute* "Extensions/harfbuzz/mcclim-harfbuzz.asd"
-               (("\\(asdf:defsystem #:mcclim-harfbuzz" all)
-                (string-append "(asdf:load-system :cffi-grovel)\n" all)))
-             #t)))))))
-
-(define-public sbcl-mcclim-fonts-clx-freetype
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-fonts-clx-freetype")
-    (inputs
-     `(("cl-freetype2" ,sbcl-cl-freetype2)
-       ("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-fontconfig" ,sbcl-mcclim-fontconfig)
-       ("mcclim-fonts" ,sbcl-mcclim-fonts)
-       ("mcclim-harfbuzz" ,sbcl-mcclim-harfbuzz)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/fonts/mcclim-fonts.asd"
-       #:asd-system-name "mcclim-fonts/clx-freetype"))))
-
-(define-public sbcl-mcclim-clx-freetype
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-clx-freetype")
-    (inputs
-     `(("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-fonts-clx-freetype" ,sbcl-mcclim-fonts-clx-freetype)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/CLX/mcclim-clx.asd"
-       #:asd-system-name "mcclim-clx/freetype"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Backends/CLX/mcclim-clx.asd"
-               (("mcclim-fonts/clx-freetype")
-                "mcclim-fonts-clx-freetype"))
-             #t)))))))
-
-(define-public sbcl-mcclim-render
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-render")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("cl-vectors" ,sbcl-cl-vectors)
-       ("clim-basic" ,sbcl-clim-basic)
-       ("mcclim-backend-common" ,sbcl-mcclim-backend-common)
-       ("mcclim-fonts-truetype" ,sbcl-mcclim-fonts-truetype)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/render/mcclim-render.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Extensions/render/mcclim-render.asd"
-               (("mcclim-fonts/truetype")
-                "mcclim-fonts-truetype"))
-             #t)))))))
-
-(define-public sbcl-mcclim-clx-fb
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-clx-fb")
-    (inputs
-     `(("mcclim-backend-common" ,sbcl-mcclim-backend-common)
-       ("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-render" ,sbcl-mcclim-render)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/CLX-fb/mcclim-clx-fb.asd"))))
-
-(define-public sbcl-mcclim-null
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-null")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/Null/mcclim-null.asd"))))
-
-(define-public sbcl-clim-postscript-font
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-postscript-font")
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)
-       ("mcclim-backend-common" ,sbcl-mcclim-backend-common)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/PostScript/clim-postscript-font.asd"))))
-
-(define-public sbcl-clim-postscript
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-postscript")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)
-       ("clim-postscript-font" ,sbcl-clim-postscript-font)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/PostScript/clim-postscript.asd"
-       ;; Test suite disabled because of a dependency cycle.
-       ;; The tests depend on mcclim/test-util, which depends on mcclim,
-       ;; wich depends on mcclim/extensions, which depends on clim-postscript.
-       #:tests? #f))))
-
-(define-public sbcl-clim-pdf
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-pdf")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (inputs
-     `(("cl-pdf" ,sbcl-cl-pdf)
-       ("clim-basic" ,sbcl-clim-basic)
-       ("clim-postscript-font" ,sbcl-clim-postscript-font)
-       ("flexi-streams" ,sbcl-flexi-streams)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/PDF/clim-pdf.asd"
-       ;; Test suite disabled because of a dependency cycle.
-       ;; The tests depend on mcclim/test-util, which depends on mcclim,
-       ;; wich depends on mcclim/extensions, which depends on clim-pdf.
-       #:tests? #f))))
-
-(define-public sbcl-mcclim-looks
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-looks")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("mcclim-clx" ,sbcl-mcclim-clx)
-       ("mcclim-clx-fb" ,sbcl-mcclim-clx-fb)
-       ("mcclim-clx-freetype" ,sbcl-mcclim-clx-freetype)
-       ("mcclim-clx-truetype" ,sbcl-mcclim-clx-truetype)
-       ("mcclim-null" ,sbcl-mcclim-null)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "mcclim.asd"
-       #:asd-system-name "mcclim/looks"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "mcclim.asd"
-               (("mcclim-clx/truetype")
-                "mcclim-clx-truetype")
-               (("mcclim-clx/freetype")
-                "mcclim-clx-freetype"))
-             #t)))))))
-
-(define-public sbcl-mcclim-franz
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-franz")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/Franz/mcclim-franz.asd"))))
-
-(define-public sbcl-mcclim-bezier-core
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-bezier-core")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("clim-pdf" ,sbcl-clim-pdf)
-       ("clim-postscript" ,sbcl-clim-postscript)
-       ("mcclim-null" ,sbcl-mcclim-null)
-       ("mcclim-render" ,sbcl-mcclim-render)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/bezier/mcclim-bezier.asd"
-       #:asd-system-name "mcclim-bezier/core"))))
-
-(define-public sbcl-mcclim-bezier-clx
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-bezier-clx")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("mcclim-bezier/core" ,sbcl-mcclim-bezier-core)
-       ("mcclim-clx" ,sbcl-mcclim-clx)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/bezier/mcclim-bezier.asd"
-       #:asd-system-name "mcclim-bezier/clx"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Extensions/bezier/mcclim-bezier.asd"
-               (("mcclim-bezier/core\\)")
-                "mcclim-bezier-core)"))
-             #t)))))))
-
-(define-public sbcl-mcclim-bezier
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-bezier")
-    (inputs
-     `(("mcclim-bezier/clx" ,sbcl-mcclim-bezier-clx)
-       ("mcclim-bezier/core" ,sbcl-mcclim-bezier-core)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/bezier/mcclim-bezier.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Extensions/bezier/mcclim-bezier.asd"
-               (("\\(#:mcclim-bezier/core")
-                "(#:mcclim-bezier-core")
-               (("#:mcclim-bezier/clx\\)\\)")
-                "#:mcclim-bezier-clx))"))
-             #t)))))))
-
-(define-public sbcl-mcclim-bitmaps
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-bitmaps")
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)
-       ("opticl" ,sbcl-opticl)))
-    (arguments
-     '(#:asd-file "Extensions/bitmap-formats/mcclim-bitmaps.asd"))))
-
-(define-public sbcl-conditional-commands
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-conditional-commands")
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)))
-    (arguments
-     '(#:asd-file "Extensions/conditional-commands/conditional-commands.asd"))))
-
-(define-public sbcl-mcclim-layouts-tab
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-layouts-tab")
-    (inputs
-     `(("clim" ,sbcl-clim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Extensions/layouts/mcclim-layouts.asd"
-       #:asd-system-name "mcclim-layouts/tab"))))
-
-(define-public sbcl-mcclim-extensions
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-extensions")
-    (inputs
-     `(("clim-pdf" ,sbcl-clim-pdf)
-       ("clim-postscript" ,sbcl-clim-postscript)
-       ("conditional-commands" ,sbcl-conditional-commands)
-       ("mcclim-bezier" ,sbcl-mcclim-bezier)
-       ("mcclim-bitmaps" ,sbcl-mcclim-bitmaps)
-       ("mcclim-franz" ,sbcl-mcclim-franz)
-       ("mcclim-layouts-tab" ,sbcl-mcclim-layouts-tab)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "mcclim.asd"
-       #:asd-system-name "mcclim/extensions"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "mcclim.asd"
-               (("mcclim-layouts/tab")
-                "mcclim-layouts-tab"))
-             #t)))))))
-
-(define-public sbcl-mcclim
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)))
-    (inputs
-     `(("mcclim-looks" ,sbcl-mcclim-looks)
-       ("mcclim-extensions" ,sbcl-mcclim-extensions)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "mcclim.asd"
-               ((":depends-on \\(\"mcclim/looks\" \"mcclim/extensions\"\\)")
-                ":depends-on (\"mcclim-looks\" \"mcclim-extensions\")"))
-             #t)))
-       ;; Test suite disabled because of a dependency cycle.
-       ;; The tests depend on mcclim/test-util, which depends on mcclim.
-       #:tests? #f))))
-
 (define-public cl-mcclim
-  (let ((base (sbcl-package->cl-source-package sbcl-clim-lisp)))
-    (package
-      (inherit base)
-      (name "cl-mcclim")
-      (native-inputs
-       `(("fiveam" ,cl-fiveam)
-         ("pkg-config" ,pkg-config)))
-      (inputs
-       `(("alexandria" ,cl-alexandria)
-         ("babel" ,cl-babel)
-         ("bordeaux-threads" ,cl-bordeaux-threads)
-         ("cffi" ,cl-cffi)
-         ("cl-aa" ,cl-aa)
-         ("cl-freetype2" ,cl-freetype2)
-         ("cl-paths-ttf" ,cl-paths-ttf)
-         ("cl-pdf" ,cl-pdf)
-         ("cl-unicode" ,cl-unicode)
-         ("cl-vectors" ,cl-vectors)
-         ("closer-mop" ,cl-closer-mop)
-         ("clx" ,cl-clx)
-         ("flexi-streams" ,cl-flexi-streams)
-         ("flexichain" ,cl-flexichain)
-         ("fontconfig" ,fontconfig)
-         ("freetype" ,freetype)
-         ("harfbuzz" ,harfbuzz)
-         ("log4cl" ,cl-log4cl)
-         ("opticl" ,cl-opticl)
-         ("spatial-trees" ,cl-spatial-trees)
-         ("trivial-features" ,cl-trivial-features)
-         ("trivial-garbage" ,cl-trivial-garbage)
-         ("trivial-gray-streams" ,cl-trivial-gray-streams)
-         ("swank" ,cl-slime-swank)
-         ("zpb-ttf" ,cl-zpb-ttf))))))
-
-(define-public sbcl-mcclim-test-util
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-test-util")
-    (inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("mcclim" ,sbcl-mcclim)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "mcclim.asd"
-       #:asd-system-name "mcclim/test-util"))))
-
-(define-public sbcl-mcclim-raster-image
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-mcclim-raster-image")
-    (native-inputs
-     `(("fiveam" ,sbcl-fiveam)
-       ("mcclim-test-util" ,sbcl-mcclim-test-util)))
-    (inputs
-     `(("clim-basic" ,sbcl-clim-basic)
-       ("mcclim-backend-common" ,sbcl-mcclim-backend-common)
-       ("mcclim-render" ,sbcl-mcclim-render)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Backends/RasterImage/mcclim-raster-image.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Backends/RasterImage/mcclim-raster-image.asd"
-               (("mcclim/test-util")
-                "mcclim-test-util"))
-             #t)))))))
+  (sbcl-package->cl-source-package sbcl-mcclim))
 
-(define-public sbcl-clim-examples
-  (package
-    (inherit sbcl-clim-lisp)
-    (name "sbcl-clim-examples")
-    (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("mcclim" ,sbcl-mcclim)
-       ("mcclim-bezier" ,sbcl-mcclim-bezier)
-       ("mcclim-layouts-tab" ,sbcl-mcclim-layouts-tab)
-       ("mcclim-raster-image" ,sbcl-mcclim-raster-image)
-       ("swank" ,cl-slime-swank))) ; For drei-mcclim
-    (arguments
-     '(#:asd-file "Examples/clim-examples.asd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-asd-system-names
-           (lambda _
-             (substitute* "Examples/clim-examples.asd"
-               (("mcclim-layouts/tab")
-                "mcclim-layouts-tab"))
-             #t)))))))
+(define-public ecl-mcclim
+  (sbcl-package->ecl-package sbcl-mcclim))
 
 (define-public sbcl-cl-inflector
   (let ((commit "f1ab16919ccce3bd82a0042677d9616dde2034fe")
@@ -13741,11 +10615,11 @@ can separate configuration system from an implementation.")
 (define-public ecl-envy
   (sbcl-package->ecl-package sbcl-envy))
 
-(define sbcl-mito-core
+(define-public sbcl-mito
   (let ((commit "d3b9e375ef364a65692da2185085a08c969ac88a")
 	(revision "1"))
     (package
-      (name "sbcl-mito-core")
+      (name "sbcl-mito")
       (version (git-version "0.1" revision commit))
       (home-page "https://github.com/fukamachi/mito")
       (source
@@ -13758,76 +10632,21 @@ can separate configuration system from an implementation.")
          (sha256
           (base32 "08mncgzjnbbsf1a6am3l73iw4lyfvz5ldjg5g84awfaxml4p73mb"))))
       (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("prove" ,sbcl-prove)))
       (inputs
-       `(("dbi" ,sbcl-dbi)
-         ("sxql" ,sbcl-sxql)
+       `(("alexandria" ,sbcl-alexandria)
          ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("cl-reexport" ,sbcl-cl-reexport)
          ("closer-mop" ,sbcl-closer-mop)
+         ("dbi" ,sbcl-dbi)
          ("dissect" ,sbcl-dissect)
-         ("optima" ,sbcl-optima)
-         ("cl-reexport" ,sbcl-cl-reexport)
+         ("esrap" ,sbcl-esrap)
          ("local-time" ,sbcl-local-time)
-         ("uuid" ,sbcl-uuid)
-         ("alexandria" ,sbcl-alexandria)))
-      (synopsis "ORM for Common Lisp with migrations and relationships support")
-      (description "Mito is yet another object relational mapper, and it aims
-to be a successor of Integral.
-
-@itemize
-@item Support MySQL, PostgreSQL and SQLite3.
-@item Add id (serial/uuid primary key), created_at and updated_at by default
-like Ruby's ActiveRecord.
-@item Migrations.
-@item Database schema versioning.
-@end itemize\n")
-      (license license:llgpl))))
-
-(define sbcl-mito-migration
-  (package
-    (inherit sbcl-mito-core)
-    (name "sbcl-mito-migration")
-    (inputs
-     `(("mito-core" ,sbcl-mito-core)
-       ("dbi" ,sbcl-dbi)
-       ("sxql" ,sbcl-sxql)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("cl-reexport" ,sbcl-cl-reexport)
-       ("uuid" ,sbcl-uuid)
-       ("alexandria" ,sbcl-alexandria)
-       ("esrap" ,sbcl-esrap)))))
-
-(define sbcl-lack-middleware-mito
-  (package
-    (inherit sbcl-mito-core)
-    (name "sbcl-lack-middleware-mito")
-    (inputs
-     `(("mito-core" ,sbcl-mito-core)
-       ("dbi" ,sbcl-dbi)))
-    (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-build
-             (lambda _
-               (substitute* "lack-middleware-mito.asd"
-                 (("cl-dbi") "dbi"))
-               #t)))))))
-
-(define-public sbcl-mito
-  (package
-    (inherit sbcl-mito-core)
-    (name "sbcl-mito")
-    (inputs
-     `(("mito-core" ,sbcl-mito-core)
-       ("mito-migration" ,sbcl-mito-migration)
-       ("lack-middleware-mito" ,sbcl-lack-middleware-mito)
-       ("cl-reexport" ,sbcl-cl-reexport)))
-    (native-inputs
-     `(("prove" ,sbcl-prove)
-       ("prove-asdf" ,sbcl-prove-asdf)
-       ("dbd-mysql" ,sbcl-dbd-mysql)
-       ("dbd-postgres" ,sbcl-dbd-postgres)
-       ("dbd-sqlite3" ,sbcl-dbd-sqlite3)))
-    (arguments
+         ("optima" ,sbcl-optima)
+         ("sxql" ,sbcl-sxql)
+         ("uuid" ,sbcl-uuid)))
+      (arguments
        '(#:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'remove-non-functional-tests
@@ -13847,11 +10666,26 @@ like Ruby's ActiveRecord.
                #t)))
          ;; TODO: While all enabled tests pass, the phase fails with:
          ;; Component MITO-ASD::MITO-TEST not found, required by #<SYSTEM "mito">
-         #:tests? #f))))
+         #:tests? #f))
+      (synopsis "ORM for Common Lisp with migrations and relationships support")
+      (description "Mito is yet another object relational mapper, and it aims
+to be a successor of Integral.
+
+@itemize
+@item Support MySQL, PostgreSQL and SQLite3.
+@item Add id (serial/uuid primary key), created_at and updated_at by default
+like Ruby's ActiveRecord.
+@item Migrations.
+@item Database schema versioning.
+@end itemize\n")
+      (license license:llgpl))))
 
 (define-public cl-mito
   (sbcl-package->cl-source-package sbcl-mito))
 
+(define-public ecl-mito
+  (sbcl-package->ecl-package sbcl-mito))
+
 (define-public sbcl-kebab
   (let ((commit "e7f77644c4e46131e7b8039d191d35fe6211f31b")
         (revision "1"))
@@ -13875,8 +10709,7 @@ like Ruby's ActiveRecord.
          ("cl-interpol" ,sbcl-cl-interpol)
          ("split-sequence" ,sbcl-split-sequence)))
       (native-inputs
-       `(("prove-asdf" ,sbcl-prove-asdf)
-         ("prove" ,sbcl-prove)))
+       `(("prove" ,sbcl-prove)))
       (arguments
        ;; Tests passes but the phase fails with
        ;; Component KEBAB-ASD::KEBAB-TEST not found, required by #<SYSTEM "kebab">.
@@ -13916,7 +10749,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
          ("optima" ,sbcl-optima)
          ("trivial-types" ,sbcl-trivial-types)
          ("closer-mop" ,sbcl-closer-mop)
-         ("cl-syntax-annot" ,sbcl-cl-syntax-annot)
+         ("cl-syntax" ,sbcl-cl-syntax)
          ("sxql" ,sbcl-sxql)
          ("dbi" ,sbcl-dbi)
          ("babel" ,sbcl-babel)
@@ -13926,9 +10759,7 @@ camelCase, snake_case, kebab-case (lisp-case).")
          ("kebab" ,sbcl-kebab)
          ("log4cl" ,sbcl-log4cl)))
       (native-inputs
-       `(("prove-asdf" ,sbcl-prove-asdf)
-         ("prove" ,sbcl-prove)
-         ("dbd-sqlite3" ,sbcl-dbd-sqlite3)))
+       `(("prove" ,sbcl-prove)))
       (arguments
        ;; TODO: Tests fail with
        ;; While evaluating the form starting at line 22, column 0
@@ -14034,7 +10865,8 @@ that and not limited to a certain server or text format.")
          ("prove" ,sbcl-prove)))
       (arguments
        ;; Tests depend on caveman, which in turns depends on cl-project.
-       '(#:tests? #f))
+       '(#:tests? #f
+         #:asd-files '("cl-project.asd")))
       (synopsis "Generate a skeleton for modern Common Lisp projects")
       (description "This library provides a modern project skeleton generator.
 In contract with other generators, CL-Project generates one package per file
@@ -14067,19 +10899,18 @@ can begin writing unit tests as soon as the project is generated.")
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("ningle" ,cl-ningle)
-         ("lack-request" ,sbcl-lack-request)
-         ("lack-response" ,sbcl-lack-response)
+         ("lack" ,sbcl-lack)
          ("cl-project" ,sbcl-cl-project)
          ("dbi" ,sbcl-dbi)
-         ("cl-syntax-annot" ,sbcl-cl-syntax-annot)
+         ("cl-syntax" ,sbcl-cl-syntax)
          ("myway" ,sbcl-myway)
          ("quri" ,sbcl-quri)))
       (native-inputs
        `(("usocket" ,sbcl-usocket)
          ("dexador" ,sbcl-dexador)))
       (arguments
-       `(#:asd-file "caveman2.asd"
-         #:asd-system-name "caveman2"
+       `(#:asd-files '("caveman2.asd")
+         #:asd-systems '("caveman2")
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'remove-v1
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index e1c8bbb5e3..4f79d79207 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -76,21 +76,10 @@
   #:use-module (gnu packages xorg)
   #:use-module (ice-9 match))
 
-(define (asdf-substitutions lisp)
-  ;; Prepend XDG_DATA_DIRS/LISP-bundle-systems to ASDF's
-  ;; 'default-system-source-registry'.
-  `((("\\(,dir \"systems/\"\\)\\)")
-     (format #f
-             "(,dir \"~a-bundle-systems\")))
-
-      ,@(loop :for dir :in (xdg-data-dirs \"common-lisp/\")
-              :collect `(:directory (,dir \"systems\"))"
-             ,lisp))))
-
 (define-public cl-asdf
   (package
     (name "cl-asdf")
-    (version "3.3.3")
+    (version "3.3.4")
     (source
      (origin
        (method url-fetch)
@@ -98,7 +87,7 @@
         (string-append "https://common-lisp.net/project/asdf/archives/asdf-"
                        version ".lisp"))
        (sha256
-        (base32 "18lr6kxvzhr79c9rx3sdricz30aby866fj0m24w27zxsqlyvn3rd"))))
+        (base32 "1hpx30f6yrak15nw992k7x3pn75ahvjs04n4f134k68mhgs62km2"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -110,9 +99,29 @@
          (let* ((out (string-append (assoc-ref %outputs "out")))
                 (asdf-install (string-append out %source-install-prefix
                                              "/source/asdf/"))
-                (asdf (string-append (assoc-ref %build-inputs "source"))))
+                (src-asdf (string-append (assoc-ref %build-inputs "source")))
+                (dst-asdf (string-append asdf-install "asdf.lisp")))
            (mkdir-p asdf-install)
-           (copy-file asdf (string-append asdf-install "asdf.lisp"))))))
+           (copy-file src-asdf dst-asdf)
+           ;; Patch ASDF to make it read the configuration files in all
+           ;; the direcories listed in '$XDG_CONFIG_DIRS' instead of just
+           ;; the first.
+           (substitute* dst-asdf
+             (("\\(xdg-config-pathname \\*source-registry-directory\\* direction\\)")
+              "`(:source-registry
+                 ,@(loop
+                      for dir in (xdg-config-dirs
+                                  \"common-lisp/source-registry.conf.d/\")
+                      collect `(:include ,dir))
+                 :inherit-configuration)")
+             (("\\(xdg-config-pathname \\*output-translations-directory\\* direction\\)")
+              "`(:output-translations
+                 ,@(loop
+                      for dir in (xdg-config-dirs
+                                  \"common-lisp/asdf-output-translations.conf.d/\")
+                      collect `(:include ,dir))
+                 :inherit-configuration)")))
+         #t)))
     (home-page "https://common-lisp.net/project/asdf/")
     (synopsis "Another System Definition Facility")
     (description
@@ -259,10 +268,7 @@ interface to the Tk widget system.")
                                 "/share/common-lisp/source/asdf/asdf.lisp"))
                     (out (string-append (assoc-ref outputs "out")))
                     (contrib-asdf "contrib/asdf/asdf.lisp"))
-               (copy-file guix-asdf contrib-asdf)
-               ;; Add ecl-bundle-systems to 'default-system-source-registry'.
-               (substitute* contrib-asdf
-                 ,@(asdf-substitutions name)))
+               (copy-file guix-asdf contrib-asdf))
              #t))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -296,7 +302,10 @@ interface to the Tk widget system.")
     (native-search-paths
      (list (search-path-specification
             (variable "XDG_DATA_DIRS")
-            (files '("share")))))
+            (files '("share")))
+           (search-path-specification
+            (variable "XDG_CONFIG_DIRS")
+            (files '("etc")))))
     (home-page "http://ecls.sourceforge.net/")
     (synopsis "Embeddable Common Lisp")
     (description "ECL is an implementation of the Common Lisp language as
@@ -435,9 +444,7 @@ an interpreter, a compiler, a debugger, and much more.")
                                 "/share/common-lisp/source/asdf/asdf.lisp"))
                     (out (string-append (assoc-ref outputs "out")))
                     (contrib-asdf "contrib/asdf/asdf.lisp"))
-               (copy-file guix-asdf contrib-asdf)
-               (substitute* contrib-asdf
-                 ,@(asdf-substitutions name)))
+               (copy-file guix-asdf contrib-asdf))
              #t))
          (add-before 'build 'patch-unix-tool-paths
            (lambda* (#:key outputs inputs #:allow-other-keys)
@@ -544,7 +551,10 @@ an interpreter, a compiler, a debugger, and much more.")
     (native-search-paths
      (list (search-path-specification
             (variable "XDG_DATA_DIRS")
-            (files '("share")))))
+            (files '("share")))
+           (search-path-specification
+            (variable "XDG_CONFIG_DIRS")
+            (files '("etc")))))
     (home-page "http://www.sbcl.org/")
     (synopsis "Common Lisp implementation")
     (description "Steel Bank Common Lisp (SBCL) is a high performance Common
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 7fe58094c0..2dacb73892 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -543,7 +543,7 @@ authentication.")
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("check" ,check)
+       ("check" ,check-0.14)
        ("intltool" ,intltool)
        ("gconf" ,gconf)
        ("python" ,python-2)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index f94c3e410f..5de4f6ef1b 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1239,7 +1239,7 @@ test_parse_format_ipv(4(|_listen_all|_mapped_ipv6)|6)\\);")
        #:test-target "test"))
     (inputs `(("net-tools" ,net-tools)
               ("zlib" ,zlib)))
-    (native-inputs `(("check" ,check)
+    (native-inputs `(("check" ,check-0.14)
                      ("pkg-config" ,pkg-config)))
     (home-page "https://code.kryo.se/iodine/")
     (synopsis "Tunnel IPv4 data through a DNS server")
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 949ed91020..6e2ca883e0 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -36,7 +36,7 @@
 (define-public nspr
   (package
     (name "nspr")
-    (version "4.25")
+    (version "4.29")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -44,7 +44,7 @@
                    version "/src/nspr-" version ".tar.gz"))
              (sha256
               (base32
-               "0mjjk2b7ika3v4y99cnaqz3z1iq1a50r1psn9i3s87gr46z0khqb"))))
+               "10i5x637x0jqmdi47grkzgn56fg6770naa3wrhr4dmsrh3dnna12"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
@@ -73,129 +73,6 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.52.1")
-    (source (origin
-              (method url-fetch)
-              (uri (let ((version-with-underscores
-                          (string-join (string-split version #\.) "_")))
-                     (string-append
-                      "https://ftp.mozilla.org/pub/mozilla.org/security/nss/"
-                      "releases/NSS_" version-with-underscores "_RTM/src/"
-                      "nss-" version ".tar.gz")))
-              (sha256
-               (base32
-                "0y4jb9095f7bbgw7d7kvzm4c3g4p5i6y68fwhb8wlkpb7b1imj5w"))
-              ;; Create nss.pc and nss-config.
-              (patches (search-patches "nss-pkgconfig.patch"
-                                       "nss-increase-test-timeout.patch"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Delete the bundled copy of these libraries.
-                  (delete-file-recursively "nss/lib/zlib")
-                  (delete-file-recursively "nss/lib/sqlite")
-                  #t))))
-    (build-system gnu-build-system)
-    (outputs '("out" "bin"))
-    (arguments
-     `(#:parallel-build? #f ; not supported
-       #:make-flags
-       (let* ((out (assoc-ref %outputs "out"))
-              (nspr (string-append (assoc-ref %build-inputs "nspr")))
-              (rpath (string-append "-Wl,-rpath=" out "/lib/nss")))
-         (list "-C" "nss" (string-append "PREFIX=" out)
-               "NSDISTMODE=copy"
-               "NSS_USE_SYSTEM_SQLITE=1"
-               (string-append "NSPR_INCLUDE_DIR=" nspr "/include/nspr")
-               ;; Add $out/lib/nss to RPATH.
-               (string-append "RPATH=" rpath)
-               (string-append "LDFLAGS=" rpath)))
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 ftw)
-                  (ice-9 match)
-                  (srfi srfi-26))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda _
-             (setenv "CC" "gcc")
-             ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
-             ,@(match (%current-system)
-                 ((or "x86_64-linux" "aarch64-linux")
-                  `((setenv "USE_64" "1")))
-                 (_
-                  '()))
-             #t))
-         (replace 'check
-           (lambda _
-             ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
-             ;; The later requires a working DNS or /etc/hosts.
-             (setenv "DOMSUF" "localdomain")
-             (setenv "USE_IP" "TRUE")
-             (setenv "IP_ADDRESS" "127.0.0.1")
-
-             ;; The "PayPalEE.cert" certificate expires every six months,
-             ;; leading to test failures:
-             ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
-             ;; work around that, set the time to roughly the release date.
-             (invoke "faketime" "2020-02-01" "./nss/tests/all.sh")))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append (assoc-ref outputs "bin") "/bin"))
-                      (inc (string-append out "/include/nss"))
-                      (lib (string-append out "/lib/nss"))
-                      (obj (match (scandir "dist" (cut string-suffix? "OBJ" <>))
-                             ((obj) (string-append "dist/" obj)))))
-                 ;; Install nss-config to $out/bin.
-                 (install-file (string-append obj "/bin/nss-config")
-                               (string-append out "/bin"))
-                 (delete-file (string-append obj "/bin/nss-config"))
-                 ;; Install nss.pc to $out/lib/pkgconfig.
-                 (install-file (string-append obj "/lib/pkgconfig/nss.pc")
-                               (string-append out "/lib/pkgconfig"))
-                 (delete-file (string-append obj "/lib/pkgconfig/nss.pc"))
-                 (rmdir (string-append obj "/lib/pkgconfig"))
-                 ;; Install other files.
-                 (copy-recursively "dist/public/nss" inc)
-                 (copy-recursively (string-append obj "/bin") bin)
-                 (copy-recursively (string-append obj "/lib") lib)
-
-                 ;; FIXME: libgtest1.so is installed in the above step, and it's
-                 ;; (unnecessarily) linked with several NSS libraries, but
-                 ;; without the needed rpaths, causing the 'validate-runpath'
-                 ;; phase to fail.  Here we simply delete libgtest1.so, since it
-                 ;; seems to be used only during the tests.
-                 (delete-file (string-append lib "/libgtest1.so"))
-                 (delete-file (string-append lib "/libgtestutil.so"))
-
-                 #t))))))
-    (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
-    (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
-    (native-inputs `(("perl" ,perl)
-                     ("libfaketime" ,libfaketime))) ;for tests
-
-    ;; The NSS test suite takes around 48 hours on Loongson 3A (MIPS) when
-    ;; another build is happening concurrently on the same machine.
-    (properties '((timeout . 216000)))  ; 60 hours
-
-    (home-page
-     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
-    (synopsis "Network Security Services")
-    (description
-     "Network Security Services (@dfn{NSS}) is a set of libraries designed to
-support cross-platform development of security-enabled client and server
-applications.  Applications built with NSS can support SSL v2 and v3, TLS,
-PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other
-security standards.")
-    (license license:mpl2.0)))
-
-(define-public nss-3.57
-  (package
-    (inherit nss)
     (version "3.57")
     (source (origin
               (method url-fetch)
@@ -218,6 +95,8 @@ security standards.")
                   (delete-file-recursively "nss/lib/zlib")
                   (delete-file-recursively "nss/lib/sqlite")
                   #t))))
+    (build-system gnu-build-system)
+    (outputs '("out" "bin"))
     (arguments
      `(#:parallel-build? #f ; not supported
        #:make-flags
@@ -260,7 +139,7 @@ security standards.")
              ;; leading to test failures:
              ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
              ;; work around that, set the time to roughly the release date.
-             (invoke "faketime" "2020-02-01" "./nss/tests/all.sh")))
+             (invoke "faketime" "2020-10-01" "./nss/tests/all.sh")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -282,4 +161,25 @@ security standards.")
                (copy-recursively "dist/public/nss" inc)
                (copy-recursively (string-append obj "/bin") bin)
                (copy-recursively (string-append obj "/lib") lib)
-               #t))))))))
+               #t))))))
+    (inputs
+     `(("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
+    (propagated-inputs `(("nspr" ,nspr))) ; required by nss.pc.
+    (native-inputs `(("perl" ,perl)
+                     ("libfaketime" ,libfaketime))) ;for tests
+
+    ;; The NSS test suite takes around 48 hours on Loongson 3A (MIPS) when
+    ;; another build is happening concurrently on the same machine.
+    (properties '((timeout . 216000)))  ; 60 hours
+
+    (home-page
+     "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
+    (synopsis "Network Security Services")
+    (description
+     "Network Security Services (@dfn{NSS}) is a set of libraries designed to
+support cross-platform development of security-enabled client and server
+applications.  Applications built with NSS can support SSL v2 and v3, TLS,
+PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other
+security standards.")
+    (license license:mpl2.0)))
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 2372c6138b..95d784c62a 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -81,7 +81,7 @@
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("gnutls" ,gnutls)
-       ("libcap" ,libcap/next)
+       ("libcap" ,libcap)
        ("libseccomp" ,libseccomp)
        ("nettle" ,nettle)))
     (home-page "https://chrony.tuxfamily.org/")
@@ -144,7 +144,7 @@ time-stamping or reference clock, sub-microsecond accuracy is possible.")
       ;; to run as non-root (when invoked with '-u'.)
       ,@(if (string-suffix? "-linux"
                             (or (%current-target-system) (%current-system)))
-            `(("libcap" ,libcap/next))
+            `(("libcap" ,libcap))
             '())))
    (arguments
     `(#:phases
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 8d0480622e..e4b03b7858 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -143,7 +143,7 @@ from the protocol files.")
 (define-public libnsl
   (package
     (name "libnsl")
-    (version "1.2.0")
+    (version "1.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -152,17 +152,10 @@ from the protocol files.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1chzqhcgh0yia9js8mh92cmhyka7rh32ql6b3mgdk26n94dqzs8b"))))
+                "1dayj5i4bh65gn7zkciacnwv2a0ghm6nn58d78rsi4zby4lyj5w5"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--disable-static")
-       #:phases (modify-phases %standard-phases
-                  (add-before 'bootstrap 'gettextize
-                    (lambda _
-                      ;; Regenerate the bundled Makefile.in.in to avoid a
-                      ;; "gettext infrastructure mismatch" because the
-                      ;; existing version was generated by an older gettext.
-                      (invoke "gettextize" "-f"))))))
+     `(#:configure-flags '("--disable-static")))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/patches/dconf-meson-0.52.patch b/gnu/packages/patches/dconf-meson-0.52.patch
deleted file mode 100644
index c636edc108..0000000000
--- a/gnu/packages/patches/dconf-meson-0.52.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Fix build failure with Meson 0.52.
-
-Taken from upstream:
-https://gitlab.gnome.org/GNOME/dconf/commit/7ad890fb7a2ec90a777a756a1fa20a615ec7245e
-https://gitlab.gnome.org/GNOME/dconf/merge_requests/54
-
-diff --git a/client/meson.build b/client/meson.build
-index f3b7122cb05bfa7bb481c487e3cd052aa1ad58e5..de6387e2cac2aba12b83f2614c277bada434fd16 100644
---- a/client/meson.build
-+++ b/client/meson.build
-@@ -28,7 +28,7 @@ libdconf_client = static_library(
- 
- libdconf_client_dep = declare_dependency(
-   dependencies: gio_dep,
--  link_whole: libdconf_client,
-+  link_with: libdconf_client,
- )
- 
- libdconf = shared_library(
diff --git a/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch b/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch
new file mode 100644
index 0000000000..9dc112a344
--- /dev/null
+++ b/gnu/packages/patches/icedtea-6-extend-hotspot-aarch64-support.patch
@@ -0,0 +1,1831 @@
+From d51cb8c0f7966ac0b870e90e421cc8a796d98abf Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Tue, 9 Jun 2020 13:48:42 -0400
+Subject: [PATCH] Extend AArch64 support
+
+This adds to IcedTea 6 a patch that extends the support for AArch64 in
+its version of HotSpot, allowing the portable Zero virtual machine to
+be built for that platform.
+
+The patch added is a backport of the one prepared for JDK 9 by the
+OpenJDK AArch64 Porting Project, available (as of 11 June 2020) for
+download from https://openjdk.java.net/jeps/237.
+---
+ Makefile.am                                   |    3 +-
+ Makefile.in                                   |   12 +-
+ .../hs23/aarch64-extended-support.patch       | 1766 +++++++++++++++++
+ 3 files changed, 1775 insertions(+), 6 deletions(-)
+ create mode 100644 patches/hotspot/hs23/aarch64-extended-support.patch
+
+diff --git a/Makefile.am b/Makefile.am
+index 97dac85..f5c917b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -621,7 +621,8 @@ ICEDTEA_PATCHES = \
+ 	patches/openjdk/6260348-pr3068.patch \
+ 	patches/openjdk/6961123-pr2975.patch \
+ 	patches/pr2800-missing_resources.patch \
+-	patches/pr3213-conditional_arm32jit.patch
++	patches/pr3213-conditional_arm32jit.patch \
++	patches/hotspot/hs23/aarch64-extended-support.patch
+ 
+ if WITH_RHINO
+ ICEDTEA_PATCHES += \
+diff --git a/Makefile.in b/Makefile.in
+index aced7c2..e3545ee 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -1049,11 +1049,13 @@ ICEDTEA_PATCHES = $(DROP_PATCHES) $(SECURITY_PATCHES) \
+ 	patches/openjdk/6260348-pr3068.patch \
+ 	patches/openjdk/6961123-pr2975.patch \
+ 	patches/pr2800-missing_resources.patch \
+-	patches/pr3213-conditional_arm32jit.patch $(am__append_21) \
+-	$(am__append_22) $(am__append_23) $(am__append_24) \
+-	$(am__append_25) $(am__append_26) $(am__append_27) \
+-	$(am__append_28) $(am__append_29) $(am__append_30) \
+-	$(am__append_31) $(am__append_32) $(DISTRIBUTION_PATCHES)
++	patches/pr3213-conditional_arm32jit.patch \
++	patches/hotspot/hs23/aarch64-extended-support.patch \
++	$(am__append_21) $(am__append_22) $(am__append_23) \
++	$(am__append_24) $(am__append_25) $(am__append_26) \
++	$(am__append_27) $(am__append_28) $(am__append_29) \
++	$(am__append_30) $(am__append_31) $(am__append_32) \
++	$(DISTRIBUTION_PATCHES)
+ @ENABLE_NSS_FALSE@NSS_PATCHES = patches/nss-not-enabled-config.patch
+ @ENABLE_NSS_TRUE@NSS_PATCHES = patches/nss-config.patch
+ 
+diff --git a/patches/hotspot/hs23/aarch64-extended-support.patch b/patches/hotspot/hs23/aarch64-extended-support.patch
+new file mode 100644
+index 0000000..7817f4d
+--- /dev/null
++++ b/patches/hotspot/hs23/aarch64-extended-support.patch
+@@ -0,0 +1,1766 @@
++diff --git openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
++index 5771fdd..b23cc17 100644
++--- openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
+++++ openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
++@@ -304,6 +304,9 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
++ #ifdef amd64
++ #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
++ #endif
+++#ifdef aarch64
+++#define NPRGREG 32
+++#endif
++ #if defined(sparc) || defined(sparcv9)
++ #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
++ #endif
++@@ -406,6 +409,12 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo
++   regs[REG_INDEX(R_O7)]  = gregs.u_regs[14];
++ #endif /* sparc */
++ 
+++#if defined(aarch64)
+++
+++#define REG_INDEX(reg) sun_jvm_hotspot_debugger_aarch64_AARCH64ThreadContext_##reg
+++
+++#endif /* aarch64 */
+++
++ 
++   (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
++   return array;
++diff --git openjdk.orig/hotspot/agent/src/os/linux/libproc.h openjdk/hotspot/agent/src/os/linux/libproc.h
++index e4d77f7..c02b841 100644
++--- openjdk.orig/hotspot/agent/src/os/linux/libproc.h
+++++ openjdk/hotspot/agent/src/os/linux/libproc.h
++@@ -54,6 +54,10 @@ struct pt_regs {
++ 
++ #endif //sparc or sparcv9
++ 
+++#if defined(aarch64)
+++#include "asm/ptrace.h"
+++#endif
+++
++ /************************************************************************************
++ 
++ 0. This is very minimal subset of Solaris libproc just enough for current application.
++@@ -97,6 +101,9 @@ unsigned long   regs[IA64_REG_COUNT];     /* integer and fp regs */
++ #if defined(sparc)  || defined(sparcv9)
++ #define user_regs_struct  pt_regs
++ #endif
+++#if defined(aarch64)
+++#define user_regs_struct user_pt_regs
+++#endif
++ 
++ // This C bool type must be int for compatibility with Linux calls and
++ // it would be a mistake to equivalence it to C++ bool on many platforms
++diff --git openjdk.orig/hotspot/make/defs.make openjdk/hotspot/make/defs.make
++index 44f21f8..4e8d00b 100644
++--- openjdk.orig/hotspot/make/defs.make
+++++ openjdk/hotspot/make/defs.make
++@@ -232,7 +232,7 @@ ifneq ($(OSNAME),windows)
++ 
++   # Use uname output for SRCARCH, but deal with platform differences. If ARCH
++   # is not explicitly listed below, it is treated as x86. 
++-  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc zero,$(ARCH)))
+++  SRCARCH     = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc aarch64 zero,$(ARCH)))
++   ARCH/       = x86
++   ARCH/sparc  = sparc
++   ARCH/sparc64= sparc
++@@ -242,6 +242,7 @@ ifneq ($(OSNAME),windows)
++   ARCH/ppc64  = ppc
++   ARCH/ppc    = ppc
++   ARCH/arm    = arm
+++  ARCH/aarch64= aarch64
++   ARCH/zero   = zero
++ 
++   # BUILDARCH is usually the same as SRCARCH, except for sparcv9
++@@ -267,11 +268,12 @@ ifneq ($(OSNAME),windows)
++   LIBARCH/sparcv9 = sparcv9
++   LIBARCH/ia64    = ia64
++   LIBARCH/ppc64   = ppc
+++  LIBARCH/aarch64 = aarch64
++   LIBARCH/ppc     = ppc
++   LIBARCH/arm     = arm
++   LIBARCH/zero    = $(ZERO_LIBARCH)
++ 
++-  LP64_ARCH = sparcv9 amd64 ia64 zero
+++  LP64_ARCH = sparcv9 amd64 ia64 aarch64 zero
++ endif
++ 
++ # Required make macro settings for all platforms
++diff --git openjdk.orig/hotspot/make/linux/makefiles/buildtree.make openjdk/hotspot/make/linux/makefiles/buildtree.make
++index 7c3d4f9..3bc7e8a 100644
++--- openjdk.orig/hotspot/make/linux/makefiles/buildtree.make
+++++ openjdk/hotspot/make/linux/makefiles/buildtree.make
++@@ -385,6 +385,7 @@ DATA_MODE/sparc   = 32
++ DATA_MODE/sparcv9 = 64
++ DATA_MODE/amd64   = 64
++ DATA_MODE/ia64    = 64
+++DATA_MODE/aarch64 = 64
++ DATA_MODE/zero    = $(ARCH_DATA_MODEL)
++ 
++ JAVA_FLAG/32 = -d32
++diff --git openjdk.orig/hotspot/make/linux/makefiles/defs.make openjdk/hotspot/make/linux/makefiles/defs.make
++index 7bb3149..39ffda4 100644
++--- openjdk.orig/hotspot/make/linux/makefiles/defs.make
+++++ openjdk/hotspot/make/linux/makefiles/defs.make
++@@ -118,6 +118,15 @@ ifeq ($(ARCH), ppc)
++   HS_ARCH          = ppc
++ endif
++ 
+++# AARCH64
+++ifeq ($(ARCH), aarch64)
+++  ARCH_DATA_MODEL  = 64
+++  MAKE_ARGS        += LP64=1
+++  PLATFORM         = linux-aarch64
+++  VM_PLATFORM      = linux_aarch64
+++  HS_ARCH          = aarch64
+++endif
+++
++ # determine if HotSpot is being built in JDK6 or earlier version
++ JDK6_OR_EARLIER=0
++ ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
++diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
++index 897e3a6..44f1673 100644
++--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make
+++++ openjdk/hotspot/make/linux/makefiles/gcc.make
++@@ -104,6 +104,7 @@ endif
++ ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
++ ARCHFLAG/i486    = -m32 -march=i586
++ ARCHFLAG/amd64   = -m64
+++ARCHFLAG/aarch64 =
++ ARCHFLAG/ia64    =
++ ARCHFLAG/sparc   = -m32 -mcpu=v9
++ ARCHFLAG/sparcv9 = -m64 -mcpu=v9
++diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
++index c1b0e5c..9f7cda0 100644
++--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
+++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
++@@ -296,6 +296,8 @@ static char cpu_arch[] = "sparcv9";
++ #  else
++ static char cpu_arch[] = "sparc";
++ #  endif
+++#elif defined(AARCH64)
+++static char cpu_arch[] = "aarch64";
++ #else
++ #error Add appropriate cpu_arch setting
++ #endif
++@@ -1442,7 +1444,7 @@ void os::Linux::clock_init() {
++ #ifndef SYS_clock_getres
++ 
++ #if defined(IA32) || defined(AMD64)
++-#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229)
+++#define SYS_clock_getres IA32_ONLY(266)  AMD64_ONLY(229) AARCH64_ONLY(114)
++ #define sys_clock_getres(x,y)  ::syscall(SYS_clock_getres, x, y)
++ #else
++ #warning "SYS_clock_getres not defined for this platform, disabling fast_thread_cpu_time"
++@@ -1930,7 +1932,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
++     static  Elf32_Half running_arch_code=EM_AARCH64;
++   #else
++     #error Method os::dll_load requires that one of following is defined:\
++-         IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH
+++      IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH, AARCH64
++   #endif
++ 
++   // Identify compatability class for VM's architecture and library's architecture
++@@ -3056,7 +3058,7 @@ void os::large_page_init() {
++ 
++ #ifndef ZERO
++     _large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
++-                       ARM_ONLY(2 * M) PPC_ONLY(4 * M);
+++                       ARM_ONLY(2 * M) PPC_ONLY(4 * M) AARCH64_ONLY(2 * M);
++ #endif // ZERO
++ 
++     FILE *fp = fopen("/proc/meminfo", "r");
++@@ -5378,11 +5380,11 @@ void Parker::unpark() {
++ extern char** environ;
++ 
++ #ifndef __NR_fork
++-#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
+++#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57) AARCH64_ONLY(1079)
++ #endif
++ 
++ #ifndef __NR_execve
++-#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
+++#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59) AARCH64_ONLY(221)
++ #endif
++ 
++ // Run the specified command in a separate process. Return its exit value,
++diff --git openjdk.orig/hotspot/src/share/vm/adlc/main.cpp openjdk/hotspot/src/share/vm/adlc/main.cpp
++index 47e207a..b93504e 100644
++--- openjdk.orig/hotspot/src/share/vm/adlc/main.cpp
+++++ openjdk/hotspot/src/share/vm/adlc/main.cpp
++@@ -244,6 +244,11 @@ int main(int argc, char *argv[])
++   AD.addInclude(AD._CPP_file, "assembler_arm.inline.hpp");
++   AD.addInclude(AD._CPP_file, "nativeInst_arm.hpp");
++   AD.addInclude(AD._CPP_file, "vmreg_arm.inline.hpp");
+++#endif
+++#ifdef TARGET_ARCH_aarch64
+++  AD.addInclude(AD._CPP_file, "assembler_aarch64.inline.hpp");
+++  AD.addInclude(AD._CPP_file, "nativeInst_aarch64.hpp");
+++  AD.addInclude(AD._CPP_file, "vmreg_aarch64.inline.hpp");
++ #endif
++   AD.addInclude(AD._HPP_file, "memory/allocation.hpp");
++   AD.addInclude(AD._HPP_file, "opto/machnode.hpp");
++diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp openjdk/hotspot/src/share/vm/asm/assembler.cpp
++index 2bcdcbc..57787ac 100644
++--- openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp
+++++ openjdk/hotspot/src/share/vm/asm/assembler.cpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "assembler_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ // Implementation of AbstractAssembler
++diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp openjdk/hotspot/src/share/vm/asm/assembler.hpp
++index c25aa3f..4f77825 100644
++--- openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp
+++++ openjdk/hotspot/src/share/vm/asm/assembler.hpp
++@@ -51,6 +51,10 @@
++ # include "register_ppc.hpp"
++ # include "vm_version_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "register_aarch64.hpp"
+++# include "vm_version_aarch64.hpp"
+++#endif
++ 
++ // This file contains platform-independent assembler declarations.
++ 
++@@ -459,6 +463,9 @@ class AbstractAssembler : public ResourceObj  {
++ #ifdef TARGET_ARCH_ppc
++ # include "assembler_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.hpp"
+++#endif
++ 
++ 
++ #endif // SHARE_VM_ASM_ASSEMBLER_HPP
++diff --git openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
++index 685297a..002faef 100644
++--- openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp
+++++ openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp
++@@ -573,6 +573,9 @@ class CodeBuffer: public StackObj {
++ #ifdef TARGET_ARCH_ppc
++ # include "codeBuffer_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "codeBuffer_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
++index c95a23c..2ec31e5 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp
++@@ -877,6 +877,13 @@ static bool match(UnsafeRawOp* x,
++     return false;
++   }
++ 
+++// AARCH64 cannot handle shifts which are not either 0, or log2 of the type size
+++#ifdef AARCH64
+++  if (*log2_scale != 0 &&
+++	(1 << *log2_scale) != type2aelembytes(x->basic_type(), true))
+++    return false;
+++#endif
+++
++   // If the value is pinned then it will be always be computed so
++   // there's no profit to reshaping the expression.
++   return !root->is_pinned();
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
++index bebb3b0..ddaceb7 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "register_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "register_aarch64.hpp"
+++#endif
++ 
++ // set frame size and return address offset to these values in blobs
++ // (if the compiled frame uses ebp as link pointer on IA; otherwise,
++@@ -62,6 +65,9 @@ enum {
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_Defs_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_Defs_aarch64.hpp"
+++#endif
++ 
++ 
++ // native word offsets from memory address
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
++index a1e4c38..491b064 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp
++@@ -44,6 +44,9 @@ class FpuStackSim;
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_FpuStackSim_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_FpuStackSim_aarch64.hpp"
+++#endif
++ 
++ 
++ #endif // SHARE_VM_C1_C1_FPUSTACKSIM_HPP
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
++index ea50b27..6a3dc63 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
++index 288fc5c..e9a0250 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp
++@@ -93,6 +93,9 @@ class FrameMap : public CompilationResourceObj {
++ #endif
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_FrameMap_ppc.hpp"
+++#endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_FrameMap_aarch64.hpp"
++ #endif
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
++index 776a6a3..6e1a362 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp
++@@ -67,7 +67,7 @@ FloatRegister LIR_OprDesc::as_double_reg() const {
++ 
++ #endif
++ 
++-#ifdef ARM
+++#if defined(ARM) || defined (TARGET_ARCH_aarch64)
++ 
++ FloatRegister LIR_OprDesc::as_float_reg() const {
++   return as_FloatRegister(fpu_regnr());
++@@ -147,7 +147,11 @@ void LIR_Address::verify() const {
++ #endif
++ #ifdef _LP64
++   assert(base()->is_cpu_register(), "wrong base operand");
+++#ifndef TARGET_ARCH_aarch64
++   assert(index()->is_illegal() || index()->is_double_cpu(), "wrong index operand");
+++#else
+++  assert(index()->is_illegal() || index()->is_double_cpu() || index()->is_single_cpu(), "wrong index operand");
+++#endif
++   assert(base()->type() == T_OBJECT || base()->type() == T_LONG,
++          "wrong type for addresses");
++ #else
++@@ -545,7 +549,7 @@ void LIR_OpVisitState::visit(LIR_Op* op) {
++       assert(opConvert->_info == NULL, "must be");
++       if (opConvert->_opr->is_valid())       do_input(opConvert->_opr);
++       if (opConvert->_result->is_valid())    do_output(opConvert->_result);
++-#ifdef PPC
+++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
++       if (opConvert->_tmp1->is_valid())      do_temp(opConvert->_tmp1);
++       if (opConvert->_tmp2->is_valid())      do_temp(opConvert->_tmp2);
++ #endif
++@@ -1468,6 +1472,11 @@ void LIR_OprDesc::print(outputStream* out) const {
++     out->print("fpu%d", fpu_regnr());
++   } else if (is_double_fpu()) {
++     out->print("fpu%d", fpu_regnrLo());
+++#elif defined(AARCH64)
+++  } else if (is_single_fpu()) {
+++    out->print("fpu%d", fpu_regnr());
+++  } else if (is_double_fpu()) {
+++    out->print("fpu%d", fpu_regnrLo());
++ #elif defined(ARM)
++   } else if (is_single_fpu()) {
++     out->print("s%d", fpu_regnr());
++@@ -1836,7 +1845,7 @@ void LIR_OpConvert::print_instr(outputStream* out) const {
++   print_bytecode(out, bytecode());
++   in_opr()->print(out);                  out->print(" ");
++   result_opr()->print(out);              out->print(" ");
++-#ifdef PPC
+++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
++   if(tmp1()->is_valid()) {
++     tmp1()->print(out); out->print(" ");
++     tmp2()->print(out); out->print(" ");
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
++index f8589c3..eb3383f 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp
++@@ -437,8 +437,8 @@ class LIR_OprDesc: public CompilationResourceObj {
++   XMMRegister as_xmm_double_reg() const;
++   // for compatibility with RInfo
++   int fpu () const                                  { return lo_reg_half(); }
++-#endif // X86
++-#if defined(SPARC) || defined(ARM) || defined(PPC)
+++#endif
+++#if defined(SPARC) || defined(ARM) || defined(PPC) || defined(AARCH64)
++   FloatRegister as_float_reg   () const;
++   FloatRegister as_double_reg  () const;
++ #endif
++@@ -526,7 +526,7 @@ class LIR_Address: public LIR_OprPtr {
++      , _type(type)
++      , _disp(0) { verify(); }
++ 
++-#if defined(X86) || defined(ARM)
+++#if defined(X86) || defined(ARM) || defined(AARCH64)
++   LIR_Address(LIR_Opr base, LIR_Opr index, Scale scale, intx disp, BasicType type):
++        _base(base)
++      , _index(index)
++@@ -601,7 +601,7 @@ class LIR_OprFact: public AllStatic {
++                                                                              LIR_OprDesc::fpu_register         |
++                                                                              LIR_OprDesc::double_size); }
++ #endif
++-#ifdef X86
+++#if defined(X86) || defined(AARCH64)
++   static LIR_Opr double_fpu(int reg)            { return (LIR_Opr)(intptr_t)((reg  << LIR_OprDesc::reg1_shift) |
++                                                                              (reg  << LIR_OprDesc::reg2_shift) |
++                                                                              LIR_OprDesc::double_type          |
++@@ -1398,7 +1398,7 @@ class LIR_OpConvert: public LIR_Op1 {
++  private:
++    Bytecodes::Code _bytecode;
++    ConversionStub* _stub;
++-#ifdef PPC
+++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
++   LIR_Opr _tmp1;
++   LIR_Opr _tmp2;
++ #endif
++@@ -1413,7 +1413,7 @@ class LIR_OpConvert: public LIR_Op1 {
++ #endif
++      , _bytecode(code)                           {}
++ 
++-#ifdef PPC
+++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
++    LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result, ConversionStub* stub
++                  ,LIR_Opr tmp1, LIR_Opr tmp2)
++      : LIR_Op1(lir_convert, opr, result)
++@@ -1425,7 +1425,7 @@ class LIR_OpConvert: public LIR_Op1 {
++ 
++   Bytecodes::Code bytecode() const               { return _bytecode; }
++   ConversionStub* stub() const                   { return _stub; }
++-#ifdef PPC
+++#if defined(PPC) || defined(TARGET_ARCH_aarch64)
++   LIR_Opr tmp1() const                           { return _tmp1; }
++   LIR_Opr tmp2() const                           { return _tmp2; }
++ #endif
++@@ -1973,7 +1973,14 @@ class LIR_List: public CompilationResourceObj {
++ #ifdef PPC
++   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); }
++ #endif
+++#if defined (TARGET_ARCH_aarch64)
+++  void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst,
+++	       ConversionStub* stub = NULL, LIR_Opr tmp1 = LIR_OprDesc::illegalOpr()) {
+++    append(new LIR_OpConvert(code, left, dst, stub, tmp1, LIR_OprDesc::illegalOpr()));
+++  }
+++#else
++   void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); }
+++#endif
++ 
++   void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and,  left, right, dst)); }
++   void logical_or  (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or,   left, right, dst)); }
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
++index 528f21e..4d83fca 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
++@@ -50,6 +50,10 @@
++ # include "nativeInst_ppc.hpp"
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_code, Register obj, CodeEmitInfo* info) {
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
++index 58adf59..f4a49b3 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp
++@@ -261,6 +261,9 @@ class LIR_Assembler: public CompilationResourceObj {
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_LIRAssembler_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_LIRAssembler_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
++index aaae71d..93f9f5f 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp
++@@ -47,6 +47,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ #ifndef PRODUCT
++@@ -2190,7 +2193,7 @@ LIR_Opr LinearScan::color_lir_opr(LIR_Opr opr, int op_id, LIR_OpVisitState::OprM
++ 
++   LIR_Opr res = operand_for_interval(interval);
++ 
++-#ifdef X86
+++#if defined(X86) || defined(AARCH64)
++   // new semantic for is_last_use: not only set on definite end of interval,
++   // but also before hole
++   // This may still miss some cases (e.g. for dead values), but it is not necessary that the
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
++index 0c06f1b..a152328 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp
++@@ -985,6 +985,9 @@ class LinearScanTimers : public StackObj {
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_LinearScan_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_LinearScan_aarch64.hpp"
+++#endif
++ 
++ 
++ #endif // SHARE_VM_C1_C1_LINEARSCAN_HPP
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
++index 55d9803..eda2174 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "assembler_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.inline.hpp"
+++#endif
++ 
++ class CodeEmitInfo;
++ 
++@@ -73,6 +76,9 @@ class C1_MacroAssembler: public MacroAssembler {
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_MacroAssembler_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_MacroAssembler_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
++index 765dec4..f0b3aae 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp
++@@ -1103,6 +1103,7 @@ JRT_END
++ // completes we can check for deoptimization. This simplifies the
++ // assembly code in the cpu directories.
++ //
+++#ifndef TARGET_ARCH_aarch64
++ int Runtime1::move_klass_patching(JavaThread* thread) {
++ //
++ // NOTE: we are still in Java
++@@ -1150,6 +1151,7 @@ int Runtime1::access_field_patching(JavaThread* thread) {
++ 
++   return caller_is_deopted();
++ JRT_END
+++#endif
++ 
++ 
++ JRT_LEAF(void, Runtime1::trace_block_entry(jint block_id))
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
++index 2032564..19261be 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp
++@@ -159,6 +159,9 @@ class Runtime1: public AllStatic {
++   static int move_klass_patching(JavaThread* thread);
++ 
++   static void patch_code(JavaThread* thread, StubID stub_id);
+++#ifdef TARGET_ARCH_aarch64
+++  static void patch_code_aarch64(JavaThread* thread, StubID stub_id);
+++#endif
++ 
++  public:
++   // initialization
++diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
++index 15f3cc1..4143a87 100644
++--- openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp
+++++ openjdk/hotspot/src/share/vm/c1/c1_globals.hpp
++@@ -38,6 +38,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_globals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_globals_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "c1_globals_linux.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
++index cf6f0e5..b128b3a 100644
++--- openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp
+++++ openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ // Input stream for reading .class file
++ //
++diff --git openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
++index f876029..ac415b6 100644
++--- openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp
+++++ openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp
++@@ -46,6 +46,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ class StackMapReader;
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp openjdk/hotspot/src/share/vm/classfile/verifier.cpp
++index c5c5e11..9c22a21 100644
++--- openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp
+++++ openjdk/hotspot/src/share/vm/classfile/verifier.cpp
++@@ -60,6 +60,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ #define NOFAILOVER_MAJOR_VERSION 51
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp openjdk/hotspot/src/share/vm/code/codeBlob.cpp
++index 244c320..429e0be 100644
++--- openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp
+++++ openjdk/hotspot/src/share/vm/code/codeBlob.cpp
++@@ -54,6 +54,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ #ifdef COMPILER1
++ #include "c1/c1_Runtime1.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp openjdk/hotspot/src/share/vm/code/compiledIC.hpp
++index fe1cfb3..c9f6a2e 100644
++--- openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp
+++++ openjdk/hotspot/src/share/vm/code/compiledIC.hpp
++@@ -44,6 +44,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ 
++ //-----------------------------------------------------------------------------
++ // The CompiledIC represents a compiled inline cache.
++diff --git openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp openjdk/hotspot/src/share/vm/code/icBuffer.cpp
++index ed70457..d022482 100644
++--- openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp
+++++ openjdk/hotspot/src/share/vm/code/icBuffer.cpp
++@@ -52,6 +52,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "assembler_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ DEF_STUB_INTERFACE(ICStub);
++diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp openjdk/hotspot/src/share/vm/code/relocInfo.cpp
++index 4fd82df..78310e6 100644
++--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp
+++++ openjdk/hotspot/src/share/vm/code/relocInfo.cpp
++@@ -49,6 +49,10 @@
++ # include "assembler_ppc.inline.hpp"
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.inline.hpp"
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ 
++ 
++ const RelocationHolder RelocationHolder::none; // its type is relocInfo::none
++diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp openjdk/hotspot/src/share/vm/code/relocInfo.hpp
++index 1d14b44..3823889 100644
++--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp
+++++ openjdk/hotspot/src/share/vm/code/relocInfo.hpp
++@@ -435,6 +435,9 @@ class relocInfo VALUE_OBJ_CLASS_SPEC {
++ #endif
++ #ifdef TARGET_ARCH_ppc
++ # include "relocInfo_ppc.hpp"
+++#endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "relocInfo_aarch64.hpp"
++ #endif
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp openjdk/hotspot/src/share/vm/code/vmreg.hpp
++index d57e6f8..1c18e47 100644
++--- openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp
+++++ openjdk/hotspot/src/share/vm/code/vmreg.hpp
++@@ -42,6 +42,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "register_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "register_aarch64.hpp"
+++#endif
++ #ifdef COMPILER2
++ #include "opto/adlcVMDeps.hpp"
++ #include "utilities/ostream.hpp"
++@@ -63,6 +66,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/adGlobals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/adGlobals_aarch64.hpp"
+++#endif
++ #endif
++ 
++ //------------------------------VMReg------------------------------------------
++@@ -182,6 +188,9 @@ public:
++ #ifdef TARGET_ARCH_ppc
++ # include "vmreg_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmreg_aarch64.hpp"
+++#endif
++ 
++ 
++ };
++diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
++index 9603e86..3a67259 100644
++--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp
+++++ openjdk/hotspot/src/share/vm/compiler/disassembler.cpp
++@@ -47,6 +47,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "depChecker_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "depChecker_aarch64.hpp"
+++#endif
++ #ifdef SHARK
++ #include "shark/sharkEntry.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
++index a70b8cc..4c90c9a 100644
++--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp
+++++ openjdk/hotspot/src/share/vm/compiler/disassembler.hpp
++@@ -78,6 +78,9 @@ class Disassembler {
++ #endif
++ #ifdef TARGET_ARCH_ppc
++ # include "disassembler_ppc.hpp"
+++#endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "disassembler_aarch64.hpp"
++ #endif
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
++index d23f37a..24ca30e 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp
++@@ -44,6 +44,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "interp_masm_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "interp_masm_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "thread_linux.inline.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
++index 107161a..205d0f7 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ class ciBytecodeStream;
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
++index e637414..308ad3b 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp
++@@ -47,6 +47,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ #ifdef CC_INTERP
++ 
++@@ -618,6 +621,9 @@ void print();
++ #ifdef TARGET_ARCH_ppc
++ # include "bytecodeInterpreter_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytecodeInterpreter_aarch64.hpp"
+++#endif
++ 
++ 
++ }; // BytecodeInterpreter
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
++index 3715a52..0d6a8aa 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp
++@@ -58,6 +58,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytecodeInterpreter_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytecodeInterpreter_aarch64.inline.hpp"
+++#endif
++ 
++ #endif // CC_INTERP
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
++index 6106eac..f3dee0a 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ // A BytecodeStream is used for fast iteration over the bytecodes
++ // of a methodOop.
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
++index 04f3f64..48ef30e 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp
+++++ openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ 
++ #if defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER < 1600))
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
++index e3a9f2e..8347473 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp
++@@ -101,6 +101,9 @@ class CppInterpreter: public AbstractInterpreter {
++ #ifdef TARGET_ARCH_ppc
++ # include "cppInterpreter_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "cppInterpreter_aarch64.hpp"
+++#endif
++ 
++ 
++ };
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
++index c27805e..272f6e8 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp
++@@ -59,6 +59,9 @@ class CppInterpreterGenerator: public AbstractInterpreterGenerator {
++ #ifdef TARGET_ARCH_ppc
++ # include "cppInterpreterGenerator_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "cppInterpreterGenerator_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
++index 0ab0be7..6a6822f 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp
++@@ -158,6 +158,9 @@ class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateI
++ #ifdef TARGET_ARCH_ppc
++ # include "interpreter_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "interpreter_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
++index 7bc43ec..0434ca3 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp
++@@ -56,6 +56,9 @@ InterpreterGenerator(StubQueue* _code);
++ #ifdef TARGET_ARCH_ppc
++ # include "interpreterGenerator_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "interpreterGenerator_aarch64.hpp"
+++#endif
++ 
++ 
++ };
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
++index e451c04..37700fb 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
+++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
++@@ -71,6 +71,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vm_version_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vm_version_aarch64.hpp"
+++#endif
++ #ifdef COMPILER2
++ #include "opto/runtime.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
++index 93c1a9e..425400e 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp
++@@ -164,6 +164,9 @@ class InterpreterRuntime: AllStatic {
++ #endif
++ #ifdef TARGET_ARCH_ppc
++ # include "interpreterRT_ppc.hpp"
+++#endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "interpreterRT_aarch64.hpp"
++ #endif
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
++index 25d74f7..f78a16e 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp
++@@ -198,6 +198,9 @@ class TemplateInterpreter: public AbstractInterpreter {
++ #ifdef TARGET_ARCH_ppc
++ # include "templateInterpreter_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "templateInterpreter_aarch64.hpp"
+++#endif
++ 
++ 
++ };
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
++index fb7bdc5..6007630 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp
++@@ -101,6 +101,9 @@ class TemplateInterpreterGenerator: public AbstractInterpreterGenerator {
++ #ifdef TARGET_ARCH_ppc
++ # include "templateInterpreterGenerator_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "templateInterpreterGenerator_aarch64.hpp"
+++#endif
++ 
++ 
++ };
++diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
++index 5d2a7e8..c5e0f0a 100644
++--- openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp
+++++ openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "interp_masm_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "interp_masm_aarch64.hpp"
+++#endif
++ 
++ #ifndef CC_INTERP
++ // All the necessary definitions used for (bytecode) template generation. Instead of
++@@ -373,6 +376,9 @@ class TemplateTable: AllStatic {
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "templateTable_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "templateTable_aarch64.hpp"
+++#endif
++ 
++ };
++ #endif /* !CC_INTERP */
++diff --git openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
++index c2f985d..3d0d0fc 100644
++--- openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp
+++++ openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp
++@@ -45,6 +45,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ // A constantPool is an array containing class constants as described in the
++ // class file.
++diff --git openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
++index db14b2e..c8b326f 100644
++--- openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp
+++++ openjdk/hotspot/src/share/vm/oops/oop.inline.hpp
++@@ -58,6 +58,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ // Implementation of all inlined member functions defined in oop.hpp
++ // We need a separate file to avoid circular references
++diff --git openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
++index fc73160..2c5ec41 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp
+++++ openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp
++@@ -47,6 +47,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ 
++ // The functions in this file builds OopMaps after all scheduling is done.
++ //
++diff --git openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
++index f73dcbd..462c875 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp
+++++ openjdk/hotspot/src/share/vm/opto/c2_globals.hpp
++@@ -35,6 +35,9 @@
++ #ifdef TARGET_ARCH_arm
++ # include "c2_globals_arm.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c2_globals_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "c2_globals_linux.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
++index 713e3f1..948e447 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp
+++++ openjdk/hotspot/src/share/vm/opto/c2compiler.cpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ 
++ volatile int C2Compiler::_runtimes = uninitialized;
++diff --git openjdk.orig/hotspot/src/share/vm/opto/compile.cpp openjdk/hotspot/src/share/vm/opto/compile.cpp
++index a7ee07a..91dc290 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/compile.cpp
+++++ openjdk/hotspot/src/share/vm/opto/compile.cpp
++@@ -80,6 +80,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ 
++ // -------------------- Compile::mach_constant_base_node -----------------------
++diff --git openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp openjdk/hotspot/src/share/vm/opto/gcm.cpp
++index 8b8f311..4deb0b4 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp
+++++ openjdk/hotspot/src/share/vm/opto/gcm.cpp
++@@ -53,6 +53,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ // Portions of code courtesy of Clifford Click
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp openjdk/hotspot/src/share/vm/opto/lcm.cpp
++index aee6123..4b9aaed 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp
+++++ openjdk/hotspot/src/share/vm/opto/lcm.cpp
++@@ -48,6 +48,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ // Optimization - Graph Style
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp openjdk/hotspot/src/share/vm/opto/locknode.hpp
++index 91b99bc..665594f 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp
+++++ openjdk/hotspot/src/share/vm/opto/locknode.hpp
++@@ -46,6 +46,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ //------------------------------BoxLockNode------------------------------------
++ class BoxLockNode : public Node {
++diff --git openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp openjdk/hotspot/src/share/vm/opto/matcher.cpp
++index ca2d4e3..d0f55c5 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp
+++++ openjdk/hotspot/src/share/vm/opto/matcher.cpp
++@@ -55,6 +55,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ OptoReg::Name OptoReg::c_frame_pointer;
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/opto/output.hpp openjdk/hotspot/src/share/vm/opto/output.hpp
++index 50b6e76..6a920b2 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/output.hpp
+++++ openjdk/hotspot/src/share/vm/opto/output.hpp
++@@ -45,6 +45,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ class Arena;
++ class Bundle;
++diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp openjdk/hotspot/src/share/vm/opto/regmask.cpp
++index ce220f0..20c6028 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp
+++++ openjdk/hotspot/src/share/vm/opto/regmask.cpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ #define RM_SIZE _RM_SIZE /* a constant private to the class RegMask */
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp openjdk/hotspot/src/share/vm/opto/regmask.hpp
++index e50ff84..26c6854 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp
+++++ openjdk/hotspot/src/share/vm/opto/regmask.hpp
++@@ -46,6 +46,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/adGlobals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/adGlobals_aarch64.hpp"
+++#endif
++ 
++ // Some fun naming (textual) substitutions:
++ //
++diff --git openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp openjdk/hotspot/src/share/vm/opto/runtime.cpp
++index d315f10..11a58b1 100644
++--- openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp
+++++ openjdk/hotspot/src/share/vm/opto/runtime.cpp
++@@ -86,6 +86,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ 
++ 
++ // For debugging purposes:
++diff --git openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
++index 3bf4ecd..2ad9014 100644
++--- openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp
+++++ openjdk/hotspot/src/share/vm/prims/jniCheck.cpp
++@@ -51,6 +51,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "jniTypes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "jniTypes_aarch64.hpp"
+++#endif
++ 
++ 
++ // Heap objects are allowed to be directly referenced only in VM code,
++diff --git openjdk.orig/hotspot/src/share/vm/prims/jni_md.h openjdk/hotspot/src/share/vm/prims/jni_md.h
++index 7fa5829..3bd4e31 100644
++--- openjdk.orig/hotspot/src/share/vm/prims/jni_md.h
+++++ openjdk/hotspot/src/share/vm/prims/jni_md.h
++@@ -39,6 +39,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "jni_ppc.h"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "jni_aarch64.h"
+++#endif
++ 
++ 
++ /*
++diff --git openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
++index 97dd154..fd1fa43 100644
++--- openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
+++++ openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
++@@ -43,6 +43,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ // FIXME: add Deprecated, LVTT attributes
++ // FIXME: fix Synthetic attribute
++ // FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes()
++diff --git openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
++index 514ba6a..ea747d0 100644
++--- openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp
+++++ openjdk/hotspot/src/share/vm/prims/methodHandles.hpp
++@@ -738,6 +738,9 @@ public:
++ #ifdef TARGET_ARCH_ppc
++ # include "methodHandles_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "methodHandles_aarch64.hpp"
+++#endif
++ };
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp openjdk/hotspot/src/share/vm/runtime/atomic.cpp
++index 80780d7..5a34f15 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/atomic.cpp
++@@ -60,6 +60,9 @@
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "atomic_linux_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "atomic_linux_aarch64.inline.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "atomic_bsd_x86.inline.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
++index 4735588..4e7958a 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
++@@ -65,6 +65,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ #ifdef COMPILER2
++ #ifdef TARGET_ARCH_MODEL_x86_32
++ # include "adfiles/ad_x86_32.hpp"
++@@ -84,6 +87,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/ad_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/ad_aarch64.hpp"
+++#endif
++ #endif
++ 
++ bool DeoptimizationMarker::_is_active = false;
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
++index bff4310..1129cd6 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ 
++ class RegisteredProbes;
++ typedef jlong OpaqueProbes;
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp openjdk/hotspot/src/share/vm/runtime/frame.cpp
++index 7ae9aa8..6654714 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/frame.cpp
++@@ -59,6 +59,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ 
++ RegisterMap::RegisterMap(JavaThread *thread, bool update_map) {
++   _thread         = thread;
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp openjdk/hotspot/src/share/vm/runtime/frame.hpp
++index c55380e..c13caae 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/frame.hpp
++@@ -50,6 +50,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/adGlobals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/adGlobals_aarch64.hpp"
+++#endif
++ #endif
++ #ifdef ZERO
++ #ifdef TARGET_ARCH_zero
++@@ -491,6 +494,9 @@ class frame VALUE_OBJ_CLASS_SPEC {
++ #ifdef TARGET_ARCH_ppc
++ # include "frame_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "frame_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
++index b80b042..f6e1b0e 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp
++@@ -46,6 +46,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "jniTypes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "jniTypes_aarch64.hpp"
+++#endif
++ #ifdef ZERO
++ #ifdef TARGET_ARCH_zero
++ # include "entryFrame_zero.hpp"
++@@ -100,6 +103,9 @@ inline bool frame::is_first_frame() const {
++ #ifdef TARGET_ARCH_ppc
++ # include "frame_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "frame_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ #endif // SHARE_VM_RUNTIME_FRAME_INLINE_HPP
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
++index 10d74cd..4cc5dfb 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/globals.hpp
++@@ -52,6 +52,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "globals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "globals_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "globals_linux.hpp"
++ #endif
++@@ -88,6 +91,9 @@
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "globals_linux_ppc.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "globals_linux_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "globals_bsd_x86.hpp"
++ #endif
++@@ -107,6 +113,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "c1_globals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c1_globals_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "c1_globals_linux.hpp"
++ #endif
++@@ -130,6 +139,9 @@
++ #ifdef TARGET_ARCH_arm
++ # include "c2_globals_arm.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "c2_globals_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "c2_globals_linux.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp openjdk/hotspot/src/share/vm/runtime/icache.hpp
++index d460a0f..9a3b9c8 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/icache.hpp
++@@ -83,6 +83,9 @@ class AbstractICache : AllStatic {
++ #ifdef TARGET_ARCH_ppc
++ # include "icache_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "icache_aarch64.hpp"
+++#endif
++ 
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/java.cpp openjdk/hotspot/src/share/vm/runtime/java.cpp
++index fc3b67a..46794b0 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/java.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/java.cpp
++@@ -78,6 +78,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vm_version_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vm_version_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "thread_linux.inline.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
++index d4f8595..bc2ca9b 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp
++@@ -45,6 +45,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "jniTypes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "jniTypes_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "thread_linux.inline.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
++index 8374aa2..6be5f79 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp
++@@ -47,6 +47,9 @@
++ #ifdef TARGET_OS_ARCH_linux_arm
++ # include "orderAccess_linux_arm.inline.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "orderAccess_linux_aarch64.inline.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "orderAccess_linux_ppc.inline.hpp"
++ #endif
++@@ -121,6 +124,9 @@ friend class JavaCallWrapper;
++ #ifdef TARGET_ARCH_ppc
++ # include "javaFrameAnchor_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "javaFrameAnchor_aarch64.hpp"
+++#endif
++ 
++ 
++ public:
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/os.hpp openjdk/hotspot/src/share/vm/runtime/os.hpp
++index 5867deb..0f1fbb4 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/os.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/os.hpp
++@@ -719,6 +719,9 @@ class os: AllStatic {
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "os_linux_ppc.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "os_linux_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "os_bsd_x86.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
++index 5dd677a..7bd425f 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/registerMap.hpp
++@@ -42,6 +42,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "register_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "register_aarch64.hpp"
+++#endif
++ 
++ class JavaThread;
++ 
++@@ -150,6 +153,9 @@ class RegisterMap : public StackObj {
++ #ifdef TARGET_ARCH_ppc
++ # include "registerMap_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "registerMap_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp openjdk/hotspot/src/share/vm/runtime/relocator.hpp
++index c34866f..790bd80 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/relocator.hpp
++@@ -42,6 +42,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "bytes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "bytes_aarch64.hpp"
+++#endif
++ 
++ // This code has been converted from the 1.1E java virtual machine
++ // Thanks to the JavaTopics group for using the code
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
++index c29d257..a842bb3 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/safepoint.cpp
++@@ -70,6 +70,10 @@
++ # include "nativeInst_ppc.hpp"
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "thread_linux.inline.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
++index c25dcfe..aa7caff 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp
++@@ -76,6 +76,10 @@
++ # include "nativeInst_ppc.hpp"
++ # include "vmreg_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++# include "vmreg_aarch64.inline.hpp"
+++#endif
++ #ifdef COMPILER1
++ #include "c1/c1_Runtime1.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
++index 110f712..779f994 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp
++@@ -39,6 +39,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "jniTypes_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "jniTypes_aarch64.hpp"
+++#endif
++ 
++ jint StackValueCollection::int_at(int slot) const {
++   intptr_t val =  at(slot)->get_int();
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
++index 0b24def..c82a214 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/statSampler.cpp
++@@ -48,6 +48,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vm_version_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vm_version_aarch64.hpp"
+++#endif
++ 
++ // --------------------------------------------------------
++ // StatSamplerTask
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
++index b6068a5..4ef7e38 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp
++@@ -42,6 +42,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "assembler_ppc.inline.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "assembler_aarch64.inline.hpp"
+++#endif
++ 
++ 
++ // Implementation of StubCodeDesc
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
++index 8481dce..f233b56 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp
++@@ -46,6 +46,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "nativeInst_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "nativeInst_aarch64.hpp"
+++#endif
++ 
++ // StubRoutines provides entry points to assembly routines used by
++ // compiled code and the run-time system. Platform-specific entry
++@@ -116,6 +119,9 @@ class StubRoutines: AllStatic {
++ #endif
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "stubRoutines_ppc.hpp"
+++#endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "stubRoutines_aarch64.hpp"
++ #endif
++ 
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp openjdk/hotspot/src/share/vm/runtime/thread.hpp
++index 7846cc0..6964c22 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/thread.hpp
++@@ -1651,6 +1651,9 @@ public:
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "thread_linux_ppc.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "thread_linux_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "thread_bsd_x86.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
++index c2f7a9e..26ef559 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
+++++ openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp
++@@ -68,6 +68,9 @@ class ThreadLocalStorage : AllStatic {
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "threadLS_linux_ppc.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "threadLS_linux_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "threadLS_bsd_x86.hpp"
++ #endif
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
++index 8afd933..359f9fc 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp
++@@ -125,6 +125,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vmStructs_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vmStructs_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_FAMILY_linux
++ # include "thread_linux.inline.hpp"
++ #endif
++@@ -161,6 +164,9 @@
++ #ifdef TARGET_OS_ARCH_linux_ppc
++ # include "vmStructs_linux_ppc.hpp"
++ #endif
+++#ifdef TARGET_OS_ARCH_linux_aarch64
+++# include "vmStructs_linux_aarch64.hpp"
+++#endif
++ #ifdef TARGET_OS_ARCH_bsd_x86
++ # include "vmStructs_bsd_x86.hpp"
++ #endif
++@@ -221,6 +227,9 @@
++ #ifdef TARGET_ARCH_MODEL_ppc
++ # include "adfiles/adGlobals_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_MODEL_aarch64
+++# include "adfiles/adGlobals_aarch64.hpp"
+++#endif
++ #endif
++ 
++ // Note: the cross-product of (c1, c2, product, nonproduct, ...),
++diff --git openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
++index 2d51b67..bba9b01 100644
++--- openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp
+++++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
++@@ -41,6 +41,9 @@
++ #ifdef TARGET_ARCH_ppc
++ # include "vm_version_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "vm_version_aarch64.hpp"
+++#endif
++ 
++ const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
++ const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
++@@ -185,6 +188,7 @@ const char* Abstract_VM_Version::jre_release_version() {
++                  AMD64_ONLY("amd64")             \
++                  ARM_ONLY("arm")                 \
++                  PPC_ONLY("ppc")                 \
+++                 AARCH64_ONLY("aarch64")         \
++                  SPARC_ONLY("sparc")
++ #endif // ZERO
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp openjdk/hotspot/src/share/vm/utilities/copy.hpp
++index 3dcbfee..198590f 100644
++--- openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp
+++++ openjdk/hotspot/src/share/vm/utilities/copy.hpp
++@@ -337,6 +337,9 @@ class Copy : AllStatic {
++ #ifdef TARGET_ARCH_ppc
++ # include "copy_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "copy_aarch64.hpp"
+++#endif
++ 
++ };
++ 
++diff --git openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
++index b55b0ac..5d11e26 100644
++--- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp
+++++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp
++@@ -346,6 +346,9 @@ extern int LogMinObjAlignmentInBytes;
++ #ifdef TARGET_ARCH_ppc
++ # include "globalDefinitions_ppc.hpp"
++ #endif
+++#ifdef TARGET_ARCH_aarch64
+++# include "globalDefinitions_aarch64.hpp"
+++#endif
++ 
++ 
++ // The byte alignment to be used by Arena::Amalloc.  See bugid 4169348.
++diff --git openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp openjdk/hotspot/src/share/vm/utilities/macros.hpp
++index 003f2af..2aa7f87 100644
++--- openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp
+++++ openjdk/hotspot/src/share/vm/utilities/macros.hpp
++@@ -261,6 +261,14 @@
++ #define NOT_ARM(code) code
++ #endif
++ 
+++#ifdef AARCH64
+++#define AARCH64_ONLY(code) code
+++#define NOT_AARCH64(code)
+++#else
+++#define AARCH64_ONLY(code)
+++#define NOT_AARCH64(code) code
+++#endif
+++
++ #ifdef JAVASE_EMBEDDED
++ #define EMBEDDED_ONLY(code) code
++ #define NOT_EMBEDDED(code)
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch b/gnu/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch
deleted file mode 100644
index ef090e0ec9..0000000000
--- a/gnu/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-# HG changeset patch
-# User Gábor Boskovits <boskovits@gmail.com>
-# Date 1530519413 -7200
-#      Mon Jul 02 10:16:53 2018 +0200
-# Node ID 77e5bc9e238a28d17e097647badc04ed67a6a452
-# Parent  1ae05a34e052d1672b4a7894ddf5fc2f662eb861
-Fix gcc segfault.
-
-diff -r 1ae05a34e052 -r 77e5bc9e238a src/share/vm/opto/output.cpp
---- a/src/share/vm/opto/output.cpp	Sun Dec 25 23:52:13 2016 +0000
-+++ b/src/share/vm/opto/output.cpp	Mon Jul 02 10:16:53 2018 +0200
-@@ -1758,6 +1758,8 @@
- 
- // Initializer for class Scheduling
- 
-+volatile const void *eePointer = Pipeline_Use::elaborated_elements;
-+
- Scheduling::Scheduling(Arena *arena, Compile &compile)
-   : _arena(arena),
-     _cfg(compile.cfg()),
-@@ -1802,8 +1804,8 @@
- 
-   // Clear the bundling information
-   memcpy(_bundle_use_elements,
--    Pipeline_Use::elaborated_elements,
--    sizeof(Pipeline_Use::elaborated_elements));
-+	 (void *)eePointer,
-+    11*sizeof(Pipeline_Use_Element));
- 
-   // Get the last node
-   Block *bb = _cfg->_blocks[_cfg->_blocks.size()-1];
-@@ -1854,8 +1856,8 @@
-   _bundle_use.reset();
- 
-   memcpy(_bundle_use_elements,
--    Pipeline_Use::elaborated_elements,
--    sizeof(Pipeline_Use::elaborated_elements));
-+	 (void *)eePointer,
-+    11*sizeof(Pipeline_Use_Element));
- }
- 
- //------------------------------ScheduleAndBundle------------------------------
diff --git a/gnu/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch b/gnu/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch
new file mode 100644
index 0000000000..7ad215f975
--- /dev/null
+++ b/gnu/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch
@@ -0,0 +1,33 @@
+From 919dd016be1abd213b3a7d0e9a3b79e3286ef6ad Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Wed, 10 Jun 2020 13:02:09 -0400
+Subject: [PATCH] aarch64: Use only C++98
+
+This patch removes an unneeded C++ template that causes the build to
+fail for aarch64 using gcc 7.5.0 and its default support for only the
+C++98 standard.
+
+It is based on original work by Severin Gehwolf <sgehwolf@redhat.com>.
+See: https://bugzilla.redhat.com/show_bug.cgi?id=1307224
+---
+ src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
+index 0bc0a2b..6f73ca0 100644
+--- a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
++++ b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
+@@ -194,10 +194,6 @@ static int reg2offset_out(VMReg r) {
+   return (r->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size;
+ }
+ 
+-template <class T> static const T& min (const T& a, const T& b) {
+-  return (a > b) ? b : a;
+-}
+-
+ // ---------------------------------------------------------------------------
+ // Read the array of BasicTypes from a signature, and compute where the
+ // arguments should go.  Values in the VMRegPair regs array refer to 4-byte
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch b/gnu/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch
deleted file mode 100644
index 35cfe38152..0000000000
--- a/gnu/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 2f0ef2c69e99e1096a2a72c7a29025a736b044b4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
-Date: Mon, 2 Jul 2018 23:37:25 +0200
-Subject: [PATCH] Fix gcc segfault.
-
----
- src/share/vm/opto/output.cpp | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/share/vm/opto/output.cpp b/src/share/vm/opto/output.cpp
-index d46cb87..0eb9eda 100644
---- a/src/share/vm/opto/output.cpp
-+++ b/src/share/vm/opto/output.cpp
-@@ -1787,6 +1787,8 @@ uint Scheduling::_total_instructions_per_bundle[Pipeline::_max_instrs_per_cycle+
- 
- // Initializer for class Scheduling
- 
-+volatile const void *eePointer = Pipeline_Use::elaborated_elements;
-+
- Scheduling::Scheduling(Arena *arena, Compile &compile)
-   : _arena(arena),
-     _cfg(compile.cfg()),
-@@ -1829,7 +1831,7 @@ Scheduling::Scheduling(Arena *arena, Compile &compile)
-   memset(_current_latency,    0, node_max * sizeof(unsigned short));
- 
-   // Clear the bundling information
--  memcpy(_bundle_use_elements, Pipeline_Use::elaborated_elements, sizeof(Pipeline_Use::elaborated_elements));
-+  memcpy(_bundle_use_elements, (void *)eePointer, 11*sizeof(Pipeline_Use_Element));
- 
-   // Get the last node
-   Block* block = _cfg->get_block(_cfg->number_of_blocks() - 1);
-@@ -1880,8 +1882,8 @@ void Scheduling::step_and_clear() {
-   _bundle_use.reset();
- 
-   memcpy(_bundle_use_elements,
--    Pipeline_Use::elaborated_elements,
--    sizeof(Pipeline_Use::elaborated_elements));
-+	 (void *)eePointer,
-+    11*sizeof(Pipeline_Use_Element));
- }
- 
- // Perform instruction scheduling and bundling over the sequence of
--- 
-2.18.0
-
diff --git a/gnu/packages/patches/jamvm-1.5.1-aarch64-support.patch b/gnu/packages/patches/jamvm-1.5.1-aarch64-support.patch
new file mode 100644
index 0000000000..8867d4f191
--- /dev/null
+++ b/gnu/packages/patches/jamvm-1.5.1-aarch64-support.patch
@@ -0,0 +1,572 @@
+From 9c83c3d3f443eb92f87dc87c7dcfe95577b95621 Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Thu, 28 May 2020 14:29:55 -0400
+Subject: [PATCH] Add support for aarch64 on GNU/Linux
+
+---
+ configure.ac                      |  10 +-
+ src/arch/Makefile.am              |   2 +-
+ src/arch/aarch64.h                | 110 ++++++++++++++++
+ src/os/linux/Makefile.am          |   2 +-
+ src/os/linux/aarch64/Makefile.am  |  28 ++++
+ src/os/linux/aarch64/callNative.S | 212 ++++++++++++++++++++++++++++++
+ src/os/linux/aarch64/dll_md.c     |  59 +++++++++
+ src/os/linux/aarch64/init.c       |  51 +++++++
+ 8 files changed, 469 insertions(+), 5 deletions(-)
+ create mode 100644 src/arch/aarch64.h
+ create mode 100644 src/os/linux/aarch64/Makefile.am
+ create mode 100644 src/os/linux/aarch64/callNative.S
+ create mode 100644 src/os/linux/aarch64/dll_md.c
+ create mode 100644 src/os/linux/aarch64/init.c
+
+diff --git a/configure.ac b/configure.ac
+index ccd530f..707f281 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -43,6 +43,7 @@ amd64-*-freebsd*) host_os=bsd libdl_needed=no ;;
+ arm*-*-linux*) host_cpu=arm host_os=linux ;;
+ arm*-*-openbsd*) host_cpu=arm host_os=bsd libdl_needed=no ;;
+ arm*-*-freebsd*) host_cpu=arm host_os=bsd libdl_needed=no ;;
++aarch64*-*-linux*) host_cpu=aarch64 host_os=linux ;;
+ powerpc*-*-linux*) host_cpu=powerpc host_os=linux ;;
+ powerpc*-*-openbsd*) host_cpu=powerpc host_os=bsd libdl_needed=no ;;
+ powerpc*-*-freebsd*) host_cpu=powerpc host_os=bsd libdl_needed=no ;;
+@@ -149,9 +150,11 @@ AC_ARG_ENABLE(runtime-reloc-checks,
+ 
+ AC_ARG_ENABLE(int-inlining,
+     [AS_HELP_STRING(--enable-int-inlining,enable inline threaded version of the interpreter
+-                   (by default enabled on x86_64, i386 and powerpc, disabled otherwise))],,
+-    [if test "$host_cpu" = x86_64 -o "$host_cpu" = i386 -o "$host_cpu" = powerpc && \
+-        test "$cross_compiling" = no -o "$enable_runtime_reloc_checks" != no; then
++                   (by default enabled on x86_64, i386, powerpc and aarch64,
++                   disabled otherwise))],,
++    [if test "$host_cpu" = x86_64 -o "$host_cpu" = i386 -o "$host_cpu" = powerpc -o \
++             "$host_cpu" = aarch64 && test "$cross_compiling" = no -o \
++             "$enable_runtime_reloc_checks" != no; then
+          enable_int_inlining=yes
+        else
+          enable_int_inlining=no
+@@ -298,6 +301,7 @@ AC_CONFIG_FILES(
+     src/os/linux/x86_64/Makefile \
+     src/os/linux/parisc/Makefile \
+     src/os/linux/mips/Makefile \
++    src/os/linux/aarch64/Makefile \
+     src/os/darwin/i386/Makefile \
+     src/os/darwin/arm/Makefile \
+     src/os/darwin/powerpc/Makefile \
+diff --git a/src/arch/Makefile.am b/src/arch/Makefile.am
+index 078c1de..afb26d1 100644
+--- a/src/arch/Makefile.am
++++ b/src/arch/Makefile.am
+@@ -19,4 +19,4 @@
+ ## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ##
+ 
+-EXTRA_DIST = powerpc.h arm.h i386.h x86_64.h parisc.h mips.h
++EXTRA_DIST = powerpc.h arm.h i386.h x86_64.h parisc.h mips.h aarch64.h
+diff --git a/src/arch/aarch64.h b/src/arch/aarch64.h
+new file mode 100644
+index 0000000..c96aa9f
+--- /dev/null
++++ b/src/arch/aarch64.h
+@@ -0,0 +1,110 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
++ * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include <stdint.h>
++
++#define OS_ARCH "aarch64"
++
++#define HANDLER_TABLE_T static const void
++#define DOUBLE_1_BITS 0x3ff0000000000000LL
++
++#define READ_DBL(v,p,l) v = ((u8)p[0]<<56)|((u8)p[1]<<48)|((u8)p[2]<<40) \
++                            |((u8)p[3]<<32)|((u8)p[4]<<24)|((u8)p[5]<<16) \
++                            |((u8)p[6]<<8)|(u8)p[7]; p+=8
++
++/* Needed for i386 -- empty here */
++#define FPU_HACK
++
++#define COMPARE_AND_SWAP_64(addr, old_val, new_val)             \
++({                                                              \
++    int result, read_val;                                       \
++    __asm__ __volatile__ ("                                     \
++        1:      ldaxr %2, %1;                                   \
++                cmp %2, %3;                                     \
++                b.ne 2f;                                        \
++                stlxr %w0, %4, %1;                              \
++                cmp %w0, wzr;                                   \
++                b.ne 1b;                                        \
++        2:      cset %w0, eq;"                                  \
++    : "=&r" (result), "+Q" (*addr), "=&r" (read_val)            \
++    : "r" (old_val), "r" (new_val)                              \
++    : "cc");                                                    \
++    result;                                                     \
++})
++
++#define COMPARE_AND_SWAP(addr, old_val, new_val)                \
++        COMPARE_AND_SWAP_64(addr, old_val, new_val)
++
++#define LOCKWORD_READ(addr)                                     \
++({                                                              \
++    uintptr_t result;                                           \
++    __asm__ __volatile__ ("                                     \
++                ldar %0, %1;"                                   \
++    : "=r" (result)                                             \
++    : "Q" (*addr)                                               \
++    : "cc");                                                    \
++    result;                                                     \
++})
++
++#define LOCKWORD_WRITE(addr, value)                             \
++({                                                              \
++    __asm__ __volatile__ ("                                     \
++                stlr %1, %0;"                                   \
++    : "=Q" (*addr)                                              \
++    : "r" (value)                                               \
++    : "cc");                                                    \
++})
++
++#define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val)       \
++        COMPARE_AND_SWAP_64(addr, old_val, new_val)
++
++#define FLUSH_CACHE(addr, length)                               \
++{                                                               \
++    uintptr_t start = (uintptr_t) (addr);                       \
++    uintptr_t end = start + length;                             \
++    uintptr_t i;                                                \
++                                                                \
++    for(i = start & aarch64_data_cache_line_mask;               \
++        i < end;                                                \
++        i += aarch64_data_cache_line_len)                       \
++        __asm__ ("dc cvau, %0" :: "r" (i));                     \
++                                                                \
++    __asm__ ("dsb ish");                                        \
++                                                                \
++    for(i = start & aarch64_instruction_cache_line_mask;        \
++        i < end;                                                \
++        i += aarch64_instruction_cache_line_len)                \
++        __asm__ ("ic ivau, %0" :: "r" (i));                     \
++                                                                \
++    __asm__ ("dsb ish; isb");                                   \
++}
++
++#define MBARRIER() __asm__ ("dmb ish" ::: "memory")
++#define UNLOCK_MBARRIER() __asm__ ("dmb ish" ::: "memory")
++#define JMM_LOCK_MBARRIER() __asm__ ("dmb ish" ::: "memory")
++#define JMM_UNLOCK_MBARRIER() JMM_LOCK_MBARRIER()
++
++/* Defined in src/os/linux/aarch64/init.c */
++extern unsigned char aarch64_data_cache_line_len;
++extern uintptr_t aarch64_data_cache_line_mask;
++extern unsigned char aarch64_instruction_cache_line_len;
++extern uintptr_t aarch64_instruction_cache_line_mask;
+diff --git a/src/os/linux/Makefile.am b/src/os/linux/Makefile.am
+index aa29be1..d582b97 100644
+--- a/src/os/linux/Makefile.am
++++ b/src/os/linux/Makefile.am
+@@ -20,7 +20,7 @@
+ ##
+ 
+ SUBDIRS = @arch@
+-DIST_SUBDIRS = powerpc arm i386 x86_64 parisc mips
++DIST_SUBDIRS = powerpc arm i386 x86_64 parisc mips aarch64
+ 
+ noinst_LTLIBRARIES = libos.la
+ libos_la_SOURCES = os.c
+diff --git a/src/os/linux/aarch64/Makefile.am b/src/os/linux/aarch64/Makefile.am
+new file mode 100644
+index 0000000..1024c3a
+--- /dev/null
++++ b/src/os/linux/aarch64/Makefile.am
+@@ -0,0 +1,28 @@
++##
++## Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012
++## Robert Lougher <rob@lougher.org.uk>.
++##
++## File added by Simon South <simon@simonsouth.net>.
++##
++## This file is part of JamVM.
++##
++## This program is free software; you can redistribute it and/or
++## modify it under the terms of the GNU General Public License
++## as published by the Free Software Foundation; either version 2,
++## or (at your option) any later version.
++##
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++##
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++##
++
++noinst_LTLIBRARIES = libnative.la
++libnative_la_SOURCES = init.c dll_md.c callNative.S
++
++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src
++AM_CCASFLAGS = -I$(top_builddir)/src
+diff --git a/src/os/linux/aarch64/callNative.S b/src/os/linux/aarch64/callNative.S
+new file mode 100644
+index 0000000..e067c4f
+--- /dev/null
++++ b/src/os/linux/aarch64/callNative.S
+@@ -0,0 +1,212 @@
++/*
++ * Copyright (C) 2008, 2009, 2011, 2012 Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "config.h"
++
++#ifndef USE_FFI
++        .text
++        .arch armv8-a
++        .align 2
++        .global callJNIMethod
++        .type callJNIMethod,function
++
++/*
++ * Arguments passed in:
++ *
++ * x0 JNIEnv
++ * x1 class or NULL
++ * x2 sig
++ * w3 extra arg
++ * x4 ostack
++ * x5 function pntr
++ * w6 args count
++ */
++
++/* Register usage:
++ *
++ * x20 ostack
++ * x19 sig pntr
++ * x16 function pntr
++ * x15 ostack pntr
++ * x14 args pntr
++ * x13 float/double handler
++ * x12 int/long handler
++ * w11 fp regs remaining
++ * w10 int regs remaining
++ * x9 scratch
++ * x2-x7 outgoing int args
++ * x1 outgoing class or this pntr
++ * x0 outgoing JNIEnv (as passed in)
++ *
++ * d0 - d7 outgoing float args
++ */
++
++callJNIMethod:
++        stp     x29, x30, [sp, #-32]!
++        mov     x29, sp
++        stp     x19, x20, [x29, #16]
++
++        sub     sp, sp, w3              /* allocate room for stacked args */
++        mov     x14, sp
++
++        mov     x20, x4                 /* preserve ostack */
++        add     x19, x2, #1             /* init sig pntr -- skipping '(' */
++
++        mov     x16, x5                 /* save function pntr */
++        mov     x15, x20                /* init ostack pntr */
++
++        adr     x13, fp_reg_handlers-8
++        adr     x12, int_reg_handlers-8
++
++        mov     w11, #8                 /* fp regs remaining */
++        mov     w10, #6                 /* int regs remaining */
++
++        cbnz    x1, scan_sig            /* is method non-static? */
++        ldr     x1, [x15], #8           /* yes, load x1 with "this" */
++
++scan_sig:
++        ldrb    w9, [x19], #1           /* get next sig char */
++
++        cmp     w9, #41                 /* ')' */
++        b.eq    done
++
++        cmp     w9, #74                 /* 'J' */
++        b.eq    long
++
++        cmp     w9, #70                 /* 'F' */
++        b.eq    float
++
++        cmp     w9, #68                 /* 'D' */
++        b.eq    double
++
++skip_brackets:
++        cmp     w9, #91                 /* '[' */
++        b.ne    1f
++        ldrb    w9, [x19], #1
++        b       skip_brackets
++1:
++        cmp     w9, #76                 /* 'L' */
++        b.ne    int
++
++skip_ref:
++        ldrb    w9, [x19], #1
++        cmp     w9, #59                 /* ';' */
++        b.ne    skip_ref
++
++int:
++        ldr     x9, [x15], #8
++        cbz     w10, stack_push
++
++load_int_reg:
++        sub     w10, w10, #1
++        add     x12, x12, #8
++        br      x12
++
++int_reg_handlers:
++        mov     x2, x9
++        b       scan_sig
++        mov     x3, x9
++        b       scan_sig
++        mov     x4, x9
++        b       scan_sig
++        mov     x5, x9
++        b       scan_sig
++        mov     x6, x9
++        b       scan_sig
++        mov     x7, x9
++        b       scan_sig
++
++long:
++        ldr     x9, [x15], #16
++        cbz     w10, stack_push
++        b       load_int_reg
++
++float:
++        ldr     w9, [x15], #8
++        cbz     w11, stack_push
++        b       load_fp_reg
++
++double:
++        ldr     x9, [x15], #16
++        cbz     w11, stack_push
++
++load_fp_reg:
++        sub     w11, w11, #1
++        add     x13, x13, #8
++        br      x13
++
++fp_reg_handlers:
++        fmov    d0, x9
++        b       scan_sig
++        fmov    d1, x9
++        b       scan_sig
++        fmov    d2, x9
++        b       scan_sig
++        fmov    d3, x9
++        b       scan_sig
++        fmov    d4, x9
++        b       scan_sig
++        fmov    d5, x9
++        b       scan_sig
++        fmov    d6, x9
++        b       scan_sig
++        fmov    d7, x9
++        b       scan_sig
++
++stack_push:
++        str     x9, [x14], #8
++        b       scan_sig
++
++done:
++        /* Call the function */
++        blr     x16
++
++        mov     sp, x29                 /* Pop argument area */
++
++        ldrb    w9, [x19]               /* Return type */
++
++        cmp     w9, #86                 /* 'V' */
++        b.eq    return
++
++        cmp     w9, #68                 /* 'D' */
++        b.ne    2f
++        str     d0, [x20], #16
++        b       return
++2:
++        cmp     w9, #70                 /* 'F' */
++        b.ne    3f
++        str     s0, [x20], #8
++        b       return
++3:
++        cmp     w9, #74                 /* 'J' */
++        b.ne    4f
++        str     x0, [x20], #16
++        b       return
++4:
++        str     x0, [x20], #8
++
++return:
++        mov     x0, x20                 /* return ostack */
++
++        ldp     x19, x20, [x29, #16]
++        ldp     x29, x30, [sp], #32
++        ret
++#endif
+diff --git a/src/os/linux/aarch64/dll_md.c b/src/os/linux/aarch64/dll_md.c
+new file mode 100644
+index 0000000..189f8a8
+--- /dev/null
++++ b/src/os/linux/aarch64/dll_md.c
+@@ -0,0 +1,59 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
++ * Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "jam.h"
++
++#ifndef USE_FFI
++
++int nativeExtraArg(MethodBlock *mb) {
++    char *sig = mb->type;
++    int stack_args = 0;
++    int int_args = 6;
++    int fp_args = 8;
++
++    while(*++sig != ')')
++        switch(*sig) {
++        case 'F':
++        case 'D':
++            if(fp_args == 0)
++                stack_args += 8;
++            else
++                fp_args--;
++
++        default:
++            if(int_args == 0)
++                stack_args += 8;
++            else
++                int_args--;
++
++            if(*sig == '[')
++                while(*++sig == '[');
++            if(*sig == 'L')
++                while(*++sig != ';');
++            break;
++        }
++
++    /* Ensure the stack remains 16 byte aligned. */
++    return (stack_args + 15) & ~15;
++}
++
++#endif
+diff --git a/src/os/linux/aarch64/init.c b/src/os/linux/aarch64/init.c
+new file mode 100644
+index 0000000..e03b446
+--- /dev/null
++++ b/src/os/linux/aarch64/init.c
+@@ -0,0 +1,51 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007
++ * Robert Lougher <rob@lougher.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "arch/aarch64.h"
++
++/* Length in bytes of the smallest line in the host system's data cache */
++unsigned char aarch64_data_cache_line_len;
++
++/* Mask used to align a virtual address to a line in the data cache */
++uintptr_t aarch64_data_cache_line_mask;
++
++/* Length in bytes of the smallest line in the host system's instruction
++   cache */
++unsigned char aarch64_instruction_cache_line_len;
++
++/* Mask used to align a virtual address to a line in the instruction cache */
++uintptr_t aarch64_instruction_cache_line_mask;
++
++void initialisePlatform() {
++    unsigned int cache_type;
++
++    /* Extract information from the cache-type register, which describes aspects
++       of the host's cache configuration */
++    __asm__ ("mrs %0, ctr_el0" : "=r" (cache_type));
++
++    aarch64_data_cache_line_len = 4 << ((cache_type >> 16) & 0x0f);
++    aarch64_data_cache_line_mask = ~(aarch64_data_cache_line_len - 1);
++
++    aarch64_instruction_cache_line_len = 4 << (cache_type & 0x0f);
++    aarch64_instruction_cache_line_mask =
++        ~(aarch64_instruction_cache_line_len - 1);
++}
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/jamvm-arm.patch b/gnu/packages/patches/jamvm-1.5.1-armv7-support.patch
index 9e998e18db..9e998e18db 100644
--- a/gnu/packages/patches/jamvm-arm.patch
+++ b/gnu/packages/patches/jamvm-1.5.1-armv7-support.patch
diff --git a/gnu/packages/patches/jamvm-2.0.0-aarch64-support.patch b/gnu/packages/patches/jamvm-2.0.0-aarch64-support.patch
new file mode 100644
index 0000000000..b67d8b4584
--- /dev/null
+++ b/gnu/packages/patches/jamvm-2.0.0-aarch64-support.patch
@@ -0,0 +1,645 @@
+From a44154f7a18496cc3e5fc0b1b2ea69523ebc623a Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Mon, 1 Jun 2020 07:09:34 -0400
+Subject: [PATCH] Add support for aarch64 on GNU/Linux
+
+---
+ AUTHORS                           |   1 +
+ README                            |   2 +-
+ configure.ac                      |   7 +-
+ src/arch/Makefile.am              |   2 +-
+ src/arch/aarch64.h                | 147 +++++++++++++++++++++
+ src/jam.c                         |   3 +-
+ src/os/linux/Makefile.am          |   2 +-
+ src/os/linux/aarch64/Makefile.am  |  28 ++++
+ src/os/linux/aarch64/callNative.S | 212 ++++++++++++++++++++++++++++++
+ src/os/linux/aarch64/dll_md.c     |  59 +++++++++
+ src/os/linux/aarch64/init.c       |  51 +++++++
+ 11 files changed, 508 insertions(+), 6 deletions(-)
+ create mode 100644 src/arch/aarch64.h
+ create mode 100644 src/os/linux/aarch64/Makefile.am
+ create mode 100644 src/os/linux/aarch64/callNative.S
+ create mode 100644 src/os/linux/aarch64/dll_md.c
+ create mode 100644 src/os/linux/aarch64/init.c
+
+diff --git a/AUTHORS b/AUTHORS
+index e1334fe..6fd0eeb 100644
+--- a/AUTHORS
++++ b/AUTHORS
+@@ -1 +1,2 @@
+ Robert Lougher <rob@jamvm.org.uk>
++Simon South <simon@simonsouth.net>
+diff --git a/README b/README
+index c9d80bb..0e93d00 100644
+--- a/README
++++ b/README
+@@ -77,7 +77,7 @@ versions of JamVM also includes stubs for common method signatures.
+ The following platforms/architectures are recognised by configure.  Those
+ marked with * must be configured to use libffi.
+ 
+-- Linux: x86, x86_64, ARM, PowerPC, PowerPC64(*), MIPS, HPPA
++- Linux: x86, x86_64, ARM, ARM64, PowerPC, PowerPC64(*), MIPS, HPPA
+ - FreeBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)
+ - OpenBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)
+ - Mac OS X/Darwin: x86, x86_64, ARM, PowerPC, PowerPC64
+diff --git a/configure.ac b/configure.ac
+index 138b7e6..e7051d7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -46,6 +46,7 @@ x86_64-*-freebsd*) host_os=bsd libdl_needed=no ;;
+ arm*-*-linux*) host_cpu=arm host_os=linux interp_cflags=-marm ;;
+ arm*-*-openbsd*) host_cpu=arm host_os=bsd libdl_needed=no ;;
+ arm*-*-freebsd*) host_cpu=arm host_os=bsd libdl_needed=no ;;
++aarch64*-*-linux*) host_cpu=aarch64 host_os=linux ;;
+ powerpc*-*-linux*) host_cpu=powerpc host_os=linux ;;
+ powerpc*-*-openbsd*) host_cpu=powerpc host_os=bsd libdl_needed=no ;;
+ powerpc*-*-freebsd*) host_cpu=powerpc host_os=bsd libdl_needed=no ;;
+@@ -155,10 +156,11 @@ AC_ARG_ENABLE(runtime-reloc-checks,
+ 
+ AC_ARG_ENABLE(int-inlining,
+     [AS_HELP_STRING(--enable-int-inlining,enable inline threaded version of the interpreter
+-                   (by default enabled on x86_64, i386, powerpc, mips and arm, 
++                   (by default enabled on x86_64, i386, powerpc, mips, arm and aarch64,
+                     disabled otherwise))],,
+     [if test "$host_cpu" = x86_64 -o "$host_cpu" = i386 -o "$host_cpu" = x86 -o \
+-             "$host_cpu" = powerpc -o "$host_cpu" = arm -o "$host_cpu" = mips; then
++             "$host_cpu" = powerpc -o "$host_cpu" = arm -o "$host_cpu" = mips -o \
++             "$host_cpu" = aarch64; then
+          enable_int_inlining=yes
+        else
+          enable_int_inlining=no
+@@ -407,6 +409,7 @@ AC_CONFIG_FILES(
+     src/os/linux/x86_64/Makefile \
+     src/os/linux/parisc/Makefile \
+     src/os/linux/mips/Makefile \
++    src/os/linux/aarch64/Makefile \
+     src/os/darwin/i386/Makefile \
+     src/os/darwin/arm/Makefile \
+     src/os/darwin/powerpc/Makefile \
+diff --git a/src/arch/Makefile.am b/src/arch/Makefile.am
+index 7580a1b..4e2a4f9 100644
+--- a/src/arch/Makefile.am
++++ b/src/arch/Makefile.am
+@@ -19,4 +19,4 @@
+ ## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ##
+ 
+-EXTRA_DIST = powerpc.h arm.h i386.h x86_64.h parisc.h mips.h sparc.h
++EXTRA_DIST = powerpc.h arm.h i386.h x86_64.h parisc.h mips.h sparc.h aarch64.h
+diff --git a/src/arch/aarch64.h b/src/arch/aarch64.h
+new file mode 100644
+index 0000000..1912e79
+--- /dev/null
++++ b/src/arch/aarch64.h
+@@ -0,0 +1,147 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
++ * Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include <stdint.h>
++
++#define OS_ARCH "aarch64"
++
++#define HANDLER_TABLE_T static const void
++#define DOUBLE_1_BITS 0x3ff0000000000000LL
++
++#define READ_DBL(v,p,l) v = ((u8)p[0]<<56)|((u8)p[1]<<48)|((u8)p[2]<<40) \
++                            |((u8)p[3]<<32)|((u8)p[4]<<24)|((u8)p[5]<<16) \
++                            |((u8)p[6]<<8)|(u8)p[7]; p+=8
++
++/* Needed for i386 -- empty here */
++#define FPU_HACK
++
++#define COMPARE_AND_SWAP_64(addr, old_val, new_val)             \
++({                                                              \
++    int result, read_val;                                       \
++    __asm__ __volatile__ ("                                     \
++        1:      ldaxr %2, %1;                                   \
++                cmp %2, %3;                                     \
++                b.ne 2f;                                        \
++                stlxr %w0, %4, %1;                              \
++                cmp %w0, wzr;                                   \
++                b.ne 1b;                                        \
++        2:      cset %w0, eq;"                                  \
++    : "=&r" (result), "+Q" (*addr), "=&r" (read_val)            \
++    : "r" (old_val), "r" (new_val)                              \
++    : "cc");                                                    \
++    result;                                                     \
++})
++
++#define COMPARE_AND_SWAP_32(addr, old_val, new_val)             \
++({                                                              \
++    int result, read_val;                                       \
++    __asm__ __volatile__ ("                                     \
++        1:      ldaxr %w2, %1;                                  \
++                cmp %w2, %w3;                                   \
++                b.ne 2f;                                        \
++                stlxr %w0, %w4, %1;                             \
++                cmp %w0, wzr;                                   \
++                b.ne 1b;                                        \
++        2:      cset %w0, eq;"                                  \
++    : "=&r" (result), "+Q" (*addr), "=&r" (read_val)            \
++    : "r" (old_val), "r" (new_val)                              \
++    : "cc");                                                    \
++    result;                                                     \
++})
++
++#define COMPARE_AND_SWAP(addr, old_val, new_val)                \
++        COMPARE_AND_SWAP_64(addr, old_val, new_val)
++
++#define LOCKWORD_READ(addr)                                     \
++({                                                              \
++    uintptr_t result;                                           \
++    __asm__ __volatile__ ("                                     \
++                ldar %0, %1;"                                   \
++    : "=r" (result)                                             \
++    : "Q" (*addr)                                               \
++    : "cc");                                                    \
++    result;                                                     \
++})
++
++#define LOCKWORD_WRITE(addr, value)                             \
++({                                                              \
++    __asm__ __volatile__ ("                                     \
++                stlr %1, %0;"                                   \
++    : "=Q" (*addr)                                              \
++    : "r" (value)                                               \
++    : "cc");                                                    \
++})
++
++#define LOCKWORD_COMPARE_AND_SWAP(addr, old_val, new_val)       \
++        COMPARE_AND_SWAP_64(addr, old_val, new_val)
++
++#define FLUSH_CACHE(addr, length)                               \
++{                                                               \
++    uintptr_t start = (uintptr_t) (addr);                       \
++    uintptr_t end = start + length;                             \
++    uintptr_t i;                                                \
++                                                                \
++    for(i = start & aarch64_data_cache_line_mask;               \
++        i < end;                                                \
++        i += aarch64_data_cache_line_len)                       \
++        __asm__ ("dc cvau, %0" :: "r" (i));                     \
++                                                                \
++    __asm__ ("dsb ish");                                        \
++                                                                \
++    for(i = start & aarch64_instruction_cache_line_mask;        \
++        i < end;                                                \
++        i += aarch64_instruction_cache_line_len)                \
++        __asm__ ("ic ivau, %0" :: "r" (i));                     \
++                                                                \
++    __asm__ ("dsb ish; isb");                                   \
++}
++
++#define GEN_REL_JMP(target_addr, patch_addr, patch_size)        \
++({                                                              \
++    int patched = FALSE;                                        \
++                                                                \
++    if(patch_size >= 4) {                                       \
++        /* Guard against the pointer difference being           \
++           larger than the signed range */                      \
++        long long offset = (uintptr_t)(target_addr) -           \
++                           (uintptr_t)(patch_addr);             \
++                                                                \
++        if(offset >= -1<<28 && offset < 1<<28) {                \
++            *(uint32_t*)(patch_addr) = offset>>2 & 0x03ffffff   \
++                                                 | 0x14000000;  \
++            patched = TRUE;                                     \
++        }                                                       \
++    }                                                           \
++    patched;                                                    \
++})
++
++#define MBARRIER() __asm__ ("dmb ish" ::: "memory")
++#define RMBARRIER() __asm__ ("dmb ishld" ::: "memory")
++#define WMBARRIER() __asm__ ("dmb ishst" ::: "memory")
++#define JMM_LOCK_MBARRIER() __asm__ ("dmb ish" ::: "memory")
++#define JMM_UNLOCK_MBARRIER() JMM_LOCK_MBARRIER()
++
++/* Defined in src/os/linux/aarch64/init.c */
++extern unsigned char aarch64_data_cache_line_len;
++extern uintptr_t aarch64_data_cache_line_mask;
++extern unsigned char aarch64_instruction_cache_line_len;
++extern uintptr_t aarch64_instruction_cache_line_mask;
+diff --git a/src/jam.c b/src/jam.c
+index 052f84a..c97524a 100644
+--- a/src/jam.c
++++ b/src/jam.c
+@@ -98,7 +98,8 @@ void showUsage(char *name) {
+ void showVersionAndCopyright() {
+     printf("java version \"%s\"\n", JAVA_COMPAT_VERSION);
+     printf("JamVM version %s\n", VERSION);
+-    printf("Copyright (C) 2003-2014 Robert Lougher <rob@jamvm.org.uk>\n\n");
++    printf("Copyright (C) 2003-2014 Robert Lougher <rob@jamvm.org.uk>\n");
++    printf("Portions Copyright (C) 2020 Simon South <simon@simonsouth.net>\n\n");
+     printf("This program is free software; you can redistribute it and/or\n");
+     printf("modify it under the terms of the GNU General Public License\n");
+     printf("as published by the Free Software Foundation; either version 2,\n");
+diff --git a/src/os/linux/Makefile.am b/src/os/linux/Makefile.am
+index 542094e..83e7dfe 100644
+--- a/src/os/linux/Makefile.am
++++ b/src/os/linux/Makefile.am
+@@ -20,7 +20,7 @@
+ ##
+ 
+ SUBDIRS = @arch@
+-DIST_SUBDIRS = powerpc arm i386 x86_64 parisc mips
++DIST_SUBDIRS = powerpc arm i386 x86_64 parisc mips aarch64
+ 
+ noinst_LTLIBRARIES = libos.la
+ libos_la_SOURCES = os.c
+diff --git a/src/os/linux/aarch64/Makefile.am b/src/os/linux/aarch64/Makefile.am
+new file mode 100644
+index 0000000..0e5134f
+--- /dev/null
++++ b/src/os/linux/aarch64/Makefile.am
+@@ -0,0 +1,28 @@
++##
++## Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012
++## Robert Lougher <rob@jamvm.org.uk>.
++##
++## File added by Simon South <simon@simonsouth.net>.
++##
++## This file is part of JamVM.
++##
++## This program is free software; you can redistribute it and/or
++## modify it under the terms of the GNU General Public License
++## as published by the Free Software Foundation; either version 2,
++## or (at your option) any later version.
++##
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++##
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++##
++
++noinst_LTLIBRARIES = libnative.la
++libnative_la_SOURCES = init.c dll_md.c callNative.S
++
++AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src
++AM_CCASFLAGS = -I$(top_builddir)/src
+diff --git a/src/os/linux/aarch64/callNative.S b/src/os/linux/aarch64/callNative.S
+new file mode 100644
+index 0000000..e067c4f
+--- /dev/null
++++ b/src/os/linux/aarch64/callNative.S
+@@ -0,0 +1,212 @@
++/*
++ * Copyright (C) 2008, 2009, 2011, 2012 Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "config.h"
++
++#ifndef USE_FFI
++        .text
++        .arch armv8-a
++        .align 2
++        .global callJNIMethod
++        .type callJNIMethod,function
++
++/*
++ * Arguments passed in:
++ *
++ * x0 JNIEnv
++ * x1 class or NULL
++ * x2 sig
++ * w3 extra arg
++ * x4 ostack
++ * x5 function pntr
++ * w6 args count
++ */
++
++/* Register usage:
++ *
++ * x20 ostack
++ * x19 sig pntr
++ * x16 function pntr
++ * x15 ostack pntr
++ * x14 args pntr
++ * x13 float/double handler
++ * x12 int/long handler
++ * w11 fp regs remaining
++ * w10 int regs remaining
++ * x9 scratch
++ * x2-x7 outgoing int args
++ * x1 outgoing class or this pntr
++ * x0 outgoing JNIEnv (as passed in)
++ *
++ * d0 - d7 outgoing float args
++ */
++
++callJNIMethod:
++        stp     x29, x30, [sp, #-32]!
++        mov     x29, sp
++        stp     x19, x20, [x29, #16]
++
++        sub     sp, sp, w3              /* allocate room for stacked args */
++        mov     x14, sp
++
++        mov     x20, x4                 /* preserve ostack */
++        add     x19, x2, #1             /* init sig pntr -- skipping '(' */
++
++        mov     x16, x5                 /* save function pntr */
++        mov     x15, x20                /* init ostack pntr */
++
++        adr     x13, fp_reg_handlers-8
++        adr     x12, int_reg_handlers-8
++
++        mov     w11, #8                 /* fp regs remaining */
++        mov     w10, #6                 /* int regs remaining */
++
++        cbnz    x1, scan_sig            /* is method non-static? */
++        ldr     x1, [x15], #8           /* yes, load x1 with "this" */
++
++scan_sig:
++        ldrb    w9, [x19], #1           /* get next sig char */
++
++        cmp     w9, #41                 /* ')' */
++        b.eq    done
++
++        cmp     w9, #74                 /* 'J' */
++        b.eq    long
++
++        cmp     w9, #70                 /* 'F' */
++        b.eq    float
++
++        cmp     w9, #68                 /* 'D' */
++        b.eq    double
++
++skip_brackets:
++        cmp     w9, #91                 /* '[' */
++        b.ne    1f
++        ldrb    w9, [x19], #1
++        b       skip_brackets
++1:
++        cmp     w9, #76                 /* 'L' */
++        b.ne    int
++
++skip_ref:
++        ldrb    w9, [x19], #1
++        cmp     w9, #59                 /* ';' */
++        b.ne    skip_ref
++
++int:
++        ldr     x9, [x15], #8
++        cbz     w10, stack_push
++
++load_int_reg:
++        sub     w10, w10, #1
++        add     x12, x12, #8
++        br      x12
++
++int_reg_handlers:
++        mov     x2, x9
++        b       scan_sig
++        mov     x3, x9
++        b       scan_sig
++        mov     x4, x9
++        b       scan_sig
++        mov     x5, x9
++        b       scan_sig
++        mov     x6, x9
++        b       scan_sig
++        mov     x7, x9
++        b       scan_sig
++
++long:
++        ldr     x9, [x15], #16
++        cbz     w10, stack_push
++        b       load_int_reg
++
++float:
++        ldr     w9, [x15], #8
++        cbz     w11, stack_push
++        b       load_fp_reg
++
++double:
++        ldr     x9, [x15], #16
++        cbz     w11, stack_push
++
++load_fp_reg:
++        sub     w11, w11, #1
++        add     x13, x13, #8
++        br      x13
++
++fp_reg_handlers:
++        fmov    d0, x9
++        b       scan_sig
++        fmov    d1, x9
++        b       scan_sig
++        fmov    d2, x9
++        b       scan_sig
++        fmov    d3, x9
++        b       scan_sig
++        fmov    d4, x9
++        b       scan_sig
++        fmov    d5, x9
++        b       scan_sig
++        fmov    d6, x9
++        b       scan_sig
++        fmov    d7, x9
++        b       scan_sig
++
++stack_push:
++        str     x9, [x14], #8
++        b       scan_sig
++
++done:
++        /* Call the function */
++        blr     x16
++
++        mov     sp, x29                 /* Pop argument area */
++
++        ldrb    w9, [x19]               /* Return type */
++
++        cmp     w9, #86                 /* 'V' */
++        b.eq    return
++
++        cmp     w9, #68                 /* 'D' */
++        b.ne    2f
++        str     d0, [x20], #16
++        b       return
++2:
++        cmp     w9, #70                 /* 'F' */
++        b.ne    3f
++        str     s0, [x20], #8
++        b       return
++3:
++        cmp     w9, #74                 /* 'J' */
++        b.ne    4f
++        str     x0, [x20], #16
++        b       return
++4:
++        str     x0, [x20], #8
++
++return:
++        mov     x0, x20                 /* return ostack */
++
++        ldp     x19, x20, [x29, #16]
++        ldp     x29, x30, [sp], #32
++        ret
++#endif
+diff --git a/src/os/linux/aarch64/dll_md.c b/src/os/linux/aarch64/dll_md.c
+new file mode 100644
+index 0000000..189f8a8
+--- /dev/null
++++ b/src/os/linux/aarch64/dll_md.c
+@@ -0,0 +1,59 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
++ * Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "jam.h"
++
++#ifndef USE_FFI
++
++int nativeExtraArg(MethodBlock *mb) {
++    char *sig = mb->type;
++    int stack_args = 0;
++    int int_args = 6;
++    int fp_args = 8;
++
++    while(*++sig != ')')
++        switch(*sig) {
++        case 'F':
++        case 'D':
++            if(fp_args == 0)
++                stack_args += 8;
++            else
++                fp_args--;
++
++        default:
++            if(int_args == 0)
++                stack_args += 8;
++            else
++                int_args--;
++
++            if(*sig == '[')
++                while(*++sig == '[');
++            if(*sig == 'L')
++                while(*++sig != ';');
++            break;
++        }
++
++    /* Ensure the stack remains 16 byte aligned. */
++    return (stack_args + 15) & ~15;
++}
++
++#endif
+diff --git a/src/os/linux/aarch64/init.c b/src/os/linux/aarch64/init.c
+new file mode 100644
+index 0000000..b21dc55
+--- /dev/null
++++ b/src/os/linux/aarch64/init.c
+@@ -0,0 +1,51 @@
++/*
++ * Copyright (C) 2003, 2004, 2005, 2006, 2007
++ * Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2020 Simon South <simon@simonsouth.net>.
++ *
++ * This file is part of JamVM.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#include "arch/aarch64.h"
++
++/* Length in bytes of the smallest line in the host system's data cache */
++unsigned char aarch64_data_cache_line_len;
++
++/* Mask used to align a virtual address to a line in the data cache */
++uintptr_t aarch64_data_cache_line_mask;
++
++/* Length in bytes of the smallest line in the host system's instruction
++   cache */
++unsigned char aarch64_instruction_cache_line_len;
++
++/* Mask used to align a virtual address to a line in the instruction cache */
++uintptr_t aarch64_instruction_cache_line_mask;
++
++void initialisePlatform() {
++    unsigned int cache_type;
++
++    /* Extract information from the cache-type register, which describes aspects
++       of the host's cache configuration */
++    __asm__ ("mrs %0, ctr_el0" : "=r" (cache_type));
++
++    aarch64_data_cache_line_len = 4 << ((cache_type >> 16) & 0x0f);
++    aarch64_data_cache_line_mask = ~(aarch64_data_cache_line_len - 1);
++
++    aarch64_instruction_cache_line_len = 4 << (cache_type & 0x0f);
++    aarch64_instruction_cache_line_mask =
++        ~(aarch64_instruction_cache_line_len - 1);
++}
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/jamvm-2.0.0-opcode-guard.patch b/gnu/packages/patches/jamvm-2.0.0-opcode-guard.patch
new file mode 100644
index 0000000000..5415c27a62
--- /dev/null
+++ b/gnu/packages/patches/jamvm-2.0.0-opcode-guard.patch
@@ -0,0 +1,35 @@
+From ca11b53896365c948426974cb90e8f71c70d123b Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Sun, 31 May 2020 20:36:43 -0400
+Subject: [PATCH] Guard floating-point opcodes with explicit memory barrier
+
+---
+ src/interp/engine/interp-inlining.h | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/src/interp/engine/interp-inlining.h b/src/interp/engine/interp-inlining.h
+index 3339b0e..4ee5c5a 100644
+--- a/src/interp/engine/interp-inlining.h
++++ b/src/interp/engine/interp-inlining.h
+@@ -78,8 +78,17 @@
+    4.3, we need to insert a label, and ensure its address
+    is taken (to stop it being optimised out).  However,
+    this reduces performance on PowerPC by approx 1 - 2%.
++
++   With gcc 5 and newer an asm statement with a "memory"
++   clobber argument explicitly sets a memory barrier for the
++   compiler, preventing it from reordering memory accesses
++   in a way that breaks decaching.
+ */
+-#if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)
++#if (__GNUC__ > 4)
++#define DEF_GUARD_TABLE(level) /* none */
++#define GUARD(opcode, level)   __asm__("" ::: "memory");
++#define GUARD_TBLS             /* none */
++#elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)
+ #define DEF_GUARD_TABLE(level) DEF_HANDLER_TABLE(level, GUARD)
+ #define GUARD(opcode, level)   label(opcode, level, GUARD)
+ #define GUARD_TBLS             , HNDLR_TBLS(GUARD)
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch b/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch
new file mode 100644
index 0000000000..7bdf05eb9c
--- /dev/null
+++ b/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch
@@ -0,0 +1,87 @@
+From 56ae699a27eca52cc0bb14cbc9944b62136be52b Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sun, 20 Sep 2020 21:07:29 +0200
+Subject: [PATCH] Separate addPropertyAliases in two methods
+
+The quantity of data used to generate addPropertyAliases creates a big
+method, that is too big for java and results in "error: code too large".
+This is most likely due to added data between the expected version of
+icu and the actual version of icu in Guix.
+---
+ .../org/antlr/v4/tool/templates/unicodedata.st | 15 ++++++++++++---
+ .../unicode/UnicodeDataTemplateController.java | 18 ++++++++++--------
+ 2 files changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+index f5052b7..125d15b 100644
+--- a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
++++ b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+@@ -1,4 +1,4 @@
+-unicodedata(propertyCodePointRanges, propertyAliases) ::= <<
++unicodedata(propertyCodePointRanges, propertyAliasesA, propertyAliasesB) ::= <<
+ package org.antlr.v4.unicode;
+ 
+ import java.util.Arrays;
+@@ -17,7 +17,7 @@ public enum UnicodeData {
+ 	;
+ 
+ 	private static final Map\<String, IntervalSet\> propertyCodePointRanges = new HashMap\<String, IntervalSet\>(<length(propertyCodePointRanges)>);
+-	private static final Map\<String, String\> propertyAliases = new HashMap\<String, String\>(<length(propertyAliases)>);
++	private static final Map\<String, String\> propertyAliases = new HashMap\<String, String\>(<length(propertyAliasesA)> + <length(propertyAliasesB)>);
+ 
+ 	// Work around Java 64k bytecode method limit by splitting up static
+ 	// initialization into one method per Unicode property
+@@ -33,8 +33,17 @@ static private void addProperty<i>() {
+ \}}; separator="\n\n">
+ 
+ 	// Property aliases
++	static private void addPropertyAliasesA() {
++		<propertyAliasesA.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesA.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++	}
++
++	static private void addPropertyAliasesB() {
++		<propertyAliasesB.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesB.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++	}
++
+ 	static private void addPropertyAliases() {
+-		<propertyAliases.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliases.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++        addPropertyAliasesA();
++        addPropertyAliasesB();
+ 	}
+ 
+ 	// Put it all together
+diff --git a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+index 570190c..692cee0 100644
+--- a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
++++ b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+@@ -74,17 +74,19 @@ public abstract class UnicodeDataTemplateController {
+ 		addTR35ExtendedPictographicPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 		addEmojiPresentationPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 
+-		Map<String, String> propertyAliases = new LinkedHashMap<String, String>();
+-		addUnicodeCategoryCodesToNames(propertyAliases);
+-		addUnicodeBinaryPropertyCodesToNames(propertyAliases);
+-		addUnicodeScriptCodesToNames(propertyAliases);
+-		addUnicodeBlocksToNames(propertyAliases);
+-		addUnicodeIntPropertyCodesToNames(propertyAliases);
+-		propertyAliases.put("EP", "Extended_Pictographic");
++		Map<String, String> propertyAliasesA = new LinkedHashMap<String, String>();
++		Map<String, String> propertyAliasesB = new LinkedHashMap<String, String>();
++		addUnicodeCategoryCodesToNames(propertyAliasesA);
++		addUnicodeBinaryPropertyCodesToNames(propertyAliasesA);
++		addUnicodeScriptCodesToNames(propertyAliasesA);
++		addUnicodeBlocksToNames(propertyAliasesB);
++		addUnicodeIntPropertyCodesToNames(propertyAliasesB);
++		propertyAliasesB.put("EP", "Extended_Pictographic");
+ 
+ 		Map<String, Object> properties = new LinkedHashMap<String, Object>();
+ 		properties.put("propertyCodePointRanges", propertyCodePointRanges);
+-		properties.put("propertyAliases", propertyAliases);
++		properties.put("propertyAliasesA", propertyAliasesA);
++		properties.put("propertyAliasesB", propertyAliasesB);
+ 		return properties;
+ 	}
+ 
+-- 
+2.28.0
+
diff --git a/gnu/packages/patches/libcyaml-libyaml-compat.patch b/gnu/packages/patches/libcyaml-libyaml-compat.patch
new file mode 100644
index 0000000000..dcb8cb51b8
--- /dev/null
+++ b/gnu/packages/patches/libcyaml-libyaml-compat.patch
@@ -0,0 +1,51 @@
+Fix build against libyaml 0.2.5.
+
+Taken from upstream:
+https://github.com/tlsa/libcyaml/commit/0e947264b947f51f7ea785068637c4bfce5d4171
+
+diff --git a/test/units/save.c b/test/units/save.c
+--- a/test/units/save.c
++++ b/test/units/save.c
+@@ -3476,7 +3476,7 @@ static bool test_save_sequence_null_values_int(
+ 		ttest_report_ctx_t *report,
+ 		const cyaml_config_t *config)
+ {
+-	static const unsigned char ref[] =
++	static const unsigned char ref1[] =
+ 		"---\n"
+ 		"- 7\n"
+ 		"- 6\n"
+@@ -3487,6 +3487,18 @@ static bool test_save_sequence_null_values_int(
+ 		"- \n"
+ 		"- 0\n"
+ 		"...\n";
++	/* As of libyaml 0.2.5, trailing spaces are not emitted. */
++	static const unsigned char ref2[] =
++		"---\n"
++		"- 7\n"
++		"- 6\n"
++		"- 5\n"
++		"-\n"
++		"- 3\n"
++		"- 2\n"
++		"-\n"
++		"- 0\n"
++		"...\n";
+ 	static const int d[] = { 7, 6, 5, 4, 3, 2, 1, 0 };
+ 	static const int *data[] = { d + 0, d + 1, d + 2, NULL,
+ 	                             d + 4, d + 5, NULL, d + 7, };
+@@ -3515,11 +3527,12 @@ static bool test_save_sequence_null_values_int(
+ 		return ttest_fail(&tc, cyaml_strerror(err));
+ 	}
+ 
+-	if (len != YAML_LEN(ref) || memcmp(ref, buffer, len) != 0) {
++	if ((len != YAML_LEN(ref1) || memcmp(ref1, buffer, len) != 0) &&
++	    (len != YAML_LEN(ref2) || memcmp(ref2, buffer, len) != 0)) {
+ 		return ttest_fail(&tc, "Bad data:\n"
+ 				"EXPECTED (%zu):\n\n%.*s\n\n"
+ 				"GOT (%zu):\n\n%.*s\n",
+-				YAML_LEN(ref), YAML_LEN(ref), ref,
++				YAML_LEN(ref1), YAML_LEN(ref1), ref1,
+ 				len, len, buffer);
+ 	}
+ 
diff --git a/gnu/packages/patches/libdrm-realpath-virtio.patch b/gnu/packages/patches/libdrm-realpath-virtio.patch
deleted file mode 100644
index b7d85160b4..0000000000
--- a/gnu/packages/patches/libdrm-realpath-virtio.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Only check for for relative path on virtio devices.  Otherwise it could
-break driver loading in some circumstances, notably the IceCat sandbox.
-
-https://gitlab.freedesktop.org/mesa/drm/-/issues/39
-
-Taken from upstream:
-https://gitlab.freedesktop.org/mesa/drm/-/commit/57df07572ce45a1b60bae6fb89770388d3abd6dd
-
-diff --git a/xf86drm.c b/xf86drm.c
---- a/xf86drm.c
-+++ b/xf86drm.c
-@@ -3103,15 +3103,18 @@ static int drmParseSubsystemType(int maj, int min)
-     int subsystem_type;
- 
-     snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
--    if (!realpath(path, real_path))
--        return -errno;
--    snprintf(path, sizeof(path), "%s", real_path);
- 
-     subsystem_type = get_subsystem_type(path);
-+    /* Try to get the parent (underlying) device type */
-     if (subsystem_type == DRM_BUS_VIRTIO) {
-+        /* Assume virtio-pci on error */
-+        if (!realpath(path, real_path))
-+            return DRM_BUS_VIRTIO;
-         strncat(path, "/..", PATH_MAX);
-         subsystem_type = get_subsystem_type(path);
--    }
-+        if (subsystem_type < 0)
-+            return DRM_BUS_VIRTIO;
-+     }
-     return subsystem_type;
- #elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__)
-     return DRM_BUS_PCI;
-@@ -3920,6 +3923,7 @@ process_device(drmDevicePtr *device, const char *d_name,
- 
-     switch (subsystem_type) {
-     case DRM_BUS_PCI:
-+    case DRM_BUS_VIRTIO:
-         return drmProcessPciDevice(device, node, node_type, maj, min,
-                                    fetch_deviceinfo, flags);
-     case DRM_BUS_USB:
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-12562.patch b/gnu/packages/patches/libsndfile-CVE-2017-12562.patch
deleted file mode 100644
index 58cb242b10..0000000000
--- a/gnu/packages/patches/libsndfile-CVE-2017-12562.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Fix CVE-2017-12562:
-
-https://github.com/erikd/libsndfile/issues/292
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12562
-
-Patch copied from upstream source repository:
-
-https://github.com/erikd/libsndfile/commit/cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8
-
-From cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?J=C3=B6rn=20Heusipp?= <osmanx@problemloesungsmaschine.de>
-Date: Wed, 14 Jun 2017 12:25:40 +0200
-Subject: [PATCH] src/common.c: Fix heap buffer overflows when writing strings
- in binheader
-
-Fixes the following problems:
- 1. Case 's' only enlarges the buffer by 16 bytes instead of size bytes.
- 2. psf_binheader_writef() enlarges the header buffer (if needed) prior to the
-    big switch statement by an amount (16 bytes) which is enough for all cases
-    where only a single value gets added. Cases 's', 'S', 'p' however
-    additionally write an arbitrary length block of data and again enlarge the
-    buffer to the required amount. However, the required space calculation does
-    not take into account the size of the length field which gets output before
-    the data.
- 3. Buffer size requirement calculation in case 'S' does not account for the
-    padding byte ("size += (size & 1) ;" happens after the calculation which
-    uses "size").
- 4. Case 'S' can overrun the header buffer by 1 byte when no padding is
-    involved
-    ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;" while
-    the buffer is only guaranteed to have "size" space available).
- 5. "psf->header.ptr [psf->header.indx] = 0 ;" in case 'S' always writes 1 byte
-    beyond the space which is guaranteed to be allocated in the header buffer.
- 6. Case 's' can overrun the provided source string by 1 byte if padding is
-    involved ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;"
-    where "size" is "strlen (strptr) + 1" (which includes the 0 terminator,
-    plus optionally another 1 which is padding and not guaranteed to be
-    readable via the source string pointer).
-
-Closes: https://github.com/erikd/libsndfile/issues/292
----
- src/common.c | 15 +++++++--------
- 1 file changed, 7 insertions(+), 8 deletions(-)
-
-diff --git a/src/common.c b/src/common.c
-index 1a6204ca..6b2a2ee9 100644
---- a/src/common.c
-+++ b/src/common.c
-@@ -681,16 +681,16 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- 					/* Write a C string (guaranteed to have a zero terminator). */
- 					strptr = va_arg (argptr, char *) ;
- 					size = strlen (strptr) + 1 ;
--					size += (size & 1) ;
- 
--					if (psf->header.indx + (sf_count_t) size >= psf->header.len && psf_bump_header_allocation (psf, 16))
-+					if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
- 						return count ;
- 
- 					if (psf->rwf_endian == SF_ENDIAN_BIG)
--						header_put_be_int (psf, size) ;
-+						header_put_be_int (psf, size + (size & 1)) ;
- 					else
--						header_put_le_int (psf, size) ;
-+						header_put_le_int (psf, size + (size & 1)) ;
- 					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;
-+					size += (size & 1) ;
- 					psf->header.indx += size ;
- 					psf->header.ptr [psf->header.indx - 1] = 0 ;
- 					count += 4 + size ;
-@@ -703,16 +703,15 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- 					*/
- 					strptr = va_arg (argptr, char *) ;
- 					size = strlen (strptr) ;
--					if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
-+					if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
- 						return count ;
- 					if (psf->rwf_endian == SF_ENDIAN_BIG)
- 						header_put_be_int (psf, size) ;
- 					else
- 						header_put_le_int (psf, size) ;
--					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;
-+					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + (size & 1)) ;
- 					size += (size & 1) ;
- 					psf->header.indx += size ;
--					psf->header.ptr [psf->header.indx] = 0 ;
- 					count += 4 + size ;
- 					break ;
- 
-@@ -724,7 +723,7 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
- 					size = (size & 1) ? size : size + 1 ;
- 					size = (size > 254) ? 254 : size ;
- 
--					if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
-+					if (psf->header.indx + 1 + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, 1 + size))
- 						return count ;
- 
- 					header_put_byte (psf, size) ;
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch b/gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch
deleted file mode 100644
index 5f63231af0..0000000000
--- a/gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-Fix CVE-2017-{8361,8363,8365}:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8361
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8363
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8365
-
-Patch copied from upstream source repository:
-
-https://github.com/erikd/libsndfile/commit/fd0484aba8e51d16af1e3a880f9b8b857b385eb3
-
-From fd0484aba8e51d16af1e3a880f9b8b857b385eb3 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Wed, 12 Apr 2017 19:45:30 +1000
-Subject: [PATCH] FLAC: Fix a buffer read overrun
-
-Buffer read overrun occurs when reading a FLAC file that switches
-from 2 channels to one channel mid-stream. Only option is to
-abort the read.
-
-Closes: https://github.com/erikd/libsndfile/issues/230
----
- src/common.h  |  1 +
- src/flac.c    | 13 +++++++++++++
- src/sndfile.c |  1 +
- 3 files changed, 15 insertions(+)
-
-diff --git a/src/common.h b/src/common.h
-index 0bd810c3..e2669b6a 100644
---- a/src/common.h
-+++ b/src/common.h
-@@ -725,6 +725,7 @@ enum
- 	SFE_FLAC_INIT_DECODER,
- 	SFE_FLAC_LOST_SYNC,
- 	SFE_FLAC_BAD_SAMPLE_RATE,
-+	SFE_FLAC_CHANNEL_COUNT_CHANGED,
- 	SFE_FLAC_UNKOWN_ERROR,
- 
- 	SFE_WVE_NOT_WVE,
-diff --git a/src/flac.c b/src/flac.c
-index 84de0e26..986a7b8f 100644
---- a/src/flac.c
-+++ b/src/flac.c
-@@ -434,6 +434,19 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
- 
- 	switch (metadata->type)
- 	{	case FLAC__METADATA_TYPE_STREAMINFO :
-+			if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
-+			{	psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
-+									"Nothing to be but to error out.\n" ,
-+									psf->sf.channels, metadata->data.stream_info.channels) ;
-+				psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
-+				return ;
-+				} ;
-+
-+			if (psf->sf.channels > 0 && psf->sf.samplerate != (int) metadata->data.stream_info.sample_rate)
-+			{	psf_log_printf (psf, "Warning: FLAC stream changed sample rates from %d to %d.\n"
-+									"Carrying on as if nothing happened.",
-+									psf->sf.samplerate, metadata->data.stream_info.sample_rate) ;
-+				} ;
- 			psf->sf.channels = metadata->data.stream_info.channels ;
- 			psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
- 			psf->sf.frames = metadata->data.stream_info.total_samples ;
-diff --git a/src/sndfile.c b/src/sndfile.c
-index 41875610..e2a87be8 100644
---- a/src/sndfile.c
-+++ b/src/sndfile.c
-@@ -245,6 +245,7 @@ ErrorStruct SndfileErrors [] =
- 	{	SFE_FLAC_INIT_DECODER	, "Error : problem with initialization of the flac decoder." },
- 	{	SFE_FLAC_LOST_SYNC		, "Error : flac decoder lost sync." },
- 	{	SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." },
-+	{	SFE_FLAC_CHANNEL_COUNT_CHANGED, "Error : flac channel changed mid stream." },
- 	{	SFE_FLAC_UNKOWN_ERROR	, "Error : unknown error in flac decoder." },
- 
- 	{	SFE_WVE_NOT_WVE			, "Error : not a WVE file." },
--- 
-2.12.2
-
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-8362.patch b/gnu/packages/patches/libsndfile-CVE-2017-8362.patch
deleted file mode 100644
index 5fc52a377a..0000000000
--- a/gnu/packages/patches/libsndfile-CVE-2017-8362.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-Fix CVE-2017-8362:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8362
-
-Patch copied from upstream source repository:
-
-https://github.com/erikd/libsndfile/commit/ef1dbb2df1c0e741486646de40bd638a9c4cd808
-
-From ef1dbb2df1c0e741486646de40bd638a9c4cd808 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Fri, 14 Apr 2017 15:19:16 +1000
-Subject: [PATCH] src/flac.c: Fix a buffer read overflow
-
-A file (generated by a fuzzer) which increased the number of channels
-from one frame to the next could cause a read beyond the end of the
-buffer provided by libFLAC. Only option is to abort the read.
-
-Closes: https://github.com/erikd/libsndfile/issues/231
----
- src/flac.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/flac.c b/src/flac.c
-index 5a4f8c21..e4f9aaa0 100644
---- a/src/flac.c
-+++ b/src/flac.c
-@@ -169,6 +169,14 @@ flac_buffer_copy (SF_PRIVATE *psf)
- 	const int32_t* const *buffer = pflac->wbuffer ;
- 	unsigned i = 0, j, offset, channels, len ;
- 
-+	if (psf->sf.channels != (int) frame->header.channels)
-+	{	psf_log_printf (psf, "Error: FLAC frame changed from %d to %d channels\n"
-+									"Nothing to do but to error out.\n" ,
-+									psf->sf.channels, frame->header.channels) ;
-+		psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
-+		return 0 ;
-+		} ;
-+
- 	/*
- 	**	frame->header.blocksize is variable and we're using a constant blocksize
- 	**	of FLAC__MAX_BLOCK_SIZE.
-@@ -202,7 +210,6 @@ flac_buffer_copy (SF_PRIVATE *psf)
- 		return 0 ;
- 		} ;
- 
--
- 	len = SF_MIN (pflac->len, frame->header.blocksize) ;
- 
- 	if (pflac->remain % channels != 0)
-@@ -436,7 +443,7 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
- 	{	case FLAC__METADATA_TYPE_STREAMINFO :
- 			if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
- 			{	psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
--									"Nothing to be but to error out.\n" ,
-+									"Nothing to do but to error out.\n" ,
- 									psf->sf.channels, metadata->data.stream_info.channels) ;
- 				psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
- 				return ;
--- 
-2.12.2
-
diff --git a/gnu/packages/patches/libsndfile-armhf-type-checks.patch b/gnu/packages/patches/libsndfile-armhf-type-checks.patch
deleted file mode 100644
index 7e0c71c3f6..0000000000
--- a/gnu/packages/patches/libsndfile-armhf-type-checks.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-This is a regression in 1.0.28 that causes a test failure on armhf.
-
-Upstream bug URL:
-
-https://github.com/erikd/libsndfile/issues/229
-
-Patch copied from upstream source repository:
-
-https://github.com/erikd/libsndfile/commit/9d470ee5577d3ccedb1c28c7e0a7295ba17feaf5
-
-From 9d470ee5577d3ccedb1c28c7e0a7295ba17feaf5 Mon Sep 17 00:00:00 2001
-From: Erik de Castro Lopo <erikd@mega-nerd.com>
-Date: Sun, 16 Apr 2017 17:54:17 +1000
-Subject: [PATCH] src/rf64.c: Fix varargs related bug
-
-C's <stargs.h> functionality isn't type checked so that passing an
-`sf_count_t` (64 bits) by mistake in place of a `unit32_t` can cause
-errors. This would be fine if it was an error on every architecture
-and platform, but its not. This particular problem only manifested
-on armhf and some other Arm architectures. It was not an issue on
-32 bit x86.
-
-I have now fixed variants of this same bug several times.
-
-Closes: https://github.com/erikd/libsndfile/issues/229
----
- src/rf64.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/rf64.c b/src/rf64.c
-index b3d637f..02dd904 100644
---- a/src/rf64.c
-+++ b/src/rf64.c
-@@ -742,7 +742,7 @@ rf64_write_header (SF_PRIVATE *psf, int calc_length)
- 
- 	pad_size = psf->dataoffset - 16 - psf->header.indx ;
- 	if (pad_size >= 0)
--		psf_binheader_writef (psf, "m4z", PAD_MARKER, pad_size, make_size_t (pad_size)) ;
-+		psf_binheader_writef (psf, "m4z", PAD_MARKER, (unsigned int) pad_size, make_size_t (pad_size)) ;
- 
- 	if (wpriv->rf64_downgrade && (psf->filelength < RIFF_DOWNGRADE_BYTES))
- 		psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ;
diff --git a/gnu/packages/patches/mariadb-client-test-32bit.patch b/gnu/packages/patches/mariadb-client-test-32bit.patch
deleted file mode 100644
index 02017e324d..0000000000
--- a/gnu/packages/patches/mariadb-client-test-32bit.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 93efa48a7b972fc463406603574a4d508eefe792 Mon Sep 17 00:00:00 2001
-From: Sergei Golubchik <serg@mariadb.org>
-Date: Sun, 13 May 2018 18:50:21 +0200
-Subject: [PATCH] fix failing main.mysql_client_test test on 32bit
-
-in `ulonglong=ulong*uint` multiplication
-is done in ulong, wrapping around on 32bit.
-
-This became visible after C/C changed the
-default charset to utf8, thus changing
-mbmaxlem from 1 to 3.
----
- tests/mysql_client_fw.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c
-index f69eb28a2871..4d036887629a 100644
---- a/tests/mysql_client_fw.c
-+++ b/tests/mysql_client_fw.c
-@@ -768,7 +768,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
- {
-   MYSQL_FIELD *field;
-   CHARSET_INFO *cs;
--  ulonglong expected_field_length;
-+  ulonglong expected_field_length= length;
- 
-   if (!(field= mysql_fetch_field_direct(result, no)))
-   {
-@@ -777,7 +777,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
-   }
-   cs= get_charset(field->charsetnr, 0);
-   DIE_UNLESS(cs);
--  if ((expected_field_length= length * cs->mbmaxlen) > UINT_MAX32)
-+  if ((expected_field_length*= cs->mbmaxlen) > UINT_MAX32)
-     expected_field_length= UINT_MAX32;
-   if (!opt_silent)
-   {
diff --git a/gnu/packages/patches/nss-pkgconfig.patch b/gnu/packages/patches/nss-pkgconfig.patch
deleted file mode 100644
index e3145aa4cf..0000000000
--- a/gnu/packages/patches/nss-pkgconfig.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-Description: Create nss.pc and nss-config
-Author: Lars Wendler <polynomial-c@gentoo.org>
-Source: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/nss/files/nss-3.17.1-gentoo-fixups.patch
-
-Modifications:
-  Change libdir from ${prefix}/lib64 to ${prefix}/lib/nss.
-  Remove optional patching in nss/Makefile.
-  Include -L$libdir in output from "nss-config --libs".
-
-Later adapted to apply cleanly to nss-3.21.
-
---- nss-3.21/nss/config/Makefile
-+++ nss-3.21/nss/config/Makefile
-@@ -0,0 +1,40 @@
-+CORE_DEPTH = ..
-+DEPTH      = ..
-+
-+include $(CORE_DEPTH)/coreconf/config.mk
-+
-+NSS_MAJOR_VERSION = `grep "NSS_VMAJOR" ../lib/nss/nss.h | awk '{print $$3}'`
-+NSS_MINOR_VERSION = `grep "NSS_VMINOR" ../lib/nss/nss.h | awk '{print $$3}'`
-+NSS_PATCH_VERSION = `grep "NSS_VPATCH" ../lib/nss/nss.h | awk '{print $$3}'`
-+PREFIX = /usr
-+
-+all: export libs
-+
-+export:
-+	# Create the nss.pc file
-+	mkdir -p $(DIST)/lib/pkgconfig
-+	sed -e "s,@prefix@,$(PREFIX)," \
-+	    -e "s,@exec_prefix@,\$${prefix}," \
-+	    -e "s,@libdir@,\$${prefix}/lib/nss," \
-+	    -e "s,@includedir@,\$${prefix}/include/nss," \
-+	    -e "s,@NSS_MAJOR_VERSION@,$(NSS_MAJOR_VERSION),g" \
-+	    -e "s,@NSS_MINOR_VERSION@,$(NSS_MINOR_VERSION)," \
-+	    -e "s,@NSS_PATCH_VERSION@,$(NSS_PATCH_VERSION)," \
-+	    nss.pc.in > nss.pc
-+	chmod 0644 nss.pc
-+	cp nss.pc $(DIST)/lib/pkgconfig
-+
-+	# Create the nss-config script
-+	mkdir -p $(DIST)/bin
-+	sed -e "s,@prefix@,$(PREFIX)," \
-+	    -e "s,@NSS_MAJOR_VERSION@,$(NSS_MAJOR_VERSION)," \
-+	    -e "s,@NSS_MINOR_VERSION@,$(NSS_MINOR_VERSION)," \
-+	    -e "s,@NSS_PATCH_VERSION@,$(NSS_PATCH_VERSION)," \
-+	    nss-config.in > nss-config
-+	chmod 0755 nss-config
-+	cp nss-config $(DIST)/bin
-+
-+libs:
-+
-+dummy: all export libs
-+
---- nss-3.21/nss/config/nss-config.in
-+++ nss-3.21/nss/config/nss-config.in
-@@ -0,0 +1,145 @@
-+#!/bin/sh
-+
-+prefix=@prefix@
-+
-+major_version=@NSS_MAJOR_VERSION@
-+minor_version=@NSS_MINOR_VERSION@
-+patch_version=@NSS_PATCH_VERSION@
-+
-+usage()
-+{
-+	cat <<EOF
-+Usage: nss-config [OPTIONS] [LIBRARIES]
-+Options:
-+	[--prefix[=DIR]]
-+	[--exec-prefix[=DIR]]
-+	[--includedir[=DIR]]
-+	[--libdir[=DIR]]
-+	[--version]
-+	[--libs]
-+	[--cflags]
-+Dynamic Libraries:
-+	nss
-+	ssl
-+	smime
-+	nssutil
-+EOF
-+	exit $1
-+}
-+
-+if test $# -eq 0; then
-+	usage 1 1>&2
-+fi
-+
-+lib_ssl=yes
-+lib_smime=yes
-+lib_nss=yes
-+lib_nssutil=yes
-+
-+while test $# -gt 0; do
-+  case "$1" in
-+  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-+  *) optarg= ;;
-+  esac
-+
-+  case $1 in
-+    --prefix=*)
-+      prefix=$optarg
-+      ;;
-+    --prefix)
-+      echo_prefix=yes
-+      ;;
-+    --exec-prefix=*)
-+      exec_prefix=$optarg
-+      ;;
-+    --exec-prefix)
-+      echo_exec_prefix=yes
-+      ;;
-+    --includedir=*)
-+      includedir=$optarg
-+      ;;
-+    --includedir)
-+      echo_includedir=yes
-+      ;;
-+    --libdir=*)
-+      libdir=$optarg
-+      ;;
-+    --libdir)
-+      echo_libdir=yes
-+      ;;
-+    --version)
-+      echo ${major_version}.${minor_version}.${patch_version}
-+      ;;
-+    --cflags)
-+      echo_cflags=yes
-+      ;;
-+    --libs)
-+      echo_libs=yes
-+      ;;
-+    ssl)
-+      lib_ssl=yes
-+      ;;
-+    smime)
-+      lib_smime=yes
-+      ;;
-+    nss)
-+      lib_nss=yes
-+      ;;
-+    nssutil)
-+      lib_nssutil=yes
-+      ;;
-+    *)
-+      usage 1 1>&2
-+      ;;
-+  esac
-+  shift
-+done
-+
-+# Set variables that may be dependent upon other variables
-+if test -z "$exec_prefix"; then
-+    exec_prefix=`pkg-config --variable=exec_prefix nss`
-+fi
-+if test -z "$includedir"; then
-+    includedir=`pkg-config --variable=includedir nss`
-+fi
-+if test -z "$libdir"; then
-+    libdir=`pkg-config --variable=libdir nss`
-+fi
-+
-+if test "$echo_prefix" = "yes"; then
-+    echo $prefix
-+fi
-+
-+if test "$echo_exec_prefix" = "yes"; then
-+    echo $exec_prefix
-+fi
-+
-+if test "$echo_includedir" = "yes"; then
-+    echo $includedir
-+fi
-+
-+if test "$echo_libdir" = "yes"; then
-+    echo $libdir
-+fi
-+
-+if test "$echo_cflags" = "yes"; then
-+    echo -I$includedir
-+fi
-+
-+if test "$echo_libs" = "yes"; then
-+      libdirs=-L$libdir
-+      if test -n "$lib_ssl"; then
-+	libdirs="$libdirs -lssl${major_version}"
-+      fi
-+      if test -n "$lib_smime"; then
-+	libdirs="$libdirs -lsmime${major_version}"
-+      fi
-+      if test -n "$lib_nss"; then
-+	libdirs="$libdirs -lnss${major_version}"
-+      fi
-+      if test -n "$lib_nssutil"; then
-+       libdirs="$libdirs -lnssutil${major_version}"
-+      fi
-+      echo $libdirs
-+fi
-+
---- nss-3.21/nss/config/nss.pc.in
-+++ nss-3.21/nss/config/nss.pc.in
-@@ -0,0 +1,12 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+includedir=@includedir@
-+
-+Name: NSS
-+Description: Network Security Services
-+Version: @NSS_MAJOR_VERSION@.@NSS_MINOR_VERSION@.@NSS_PATCH_VERSION@
-+Requires: nspr >= 4.8
-+Libs: -L${libdir} -lssl3 -lsmime3 -lnss3 -lnssutil3
-+Cflags: -I${includedir}
-+
---- nss-3.21/nss/manifest.mn
-+++ nss-3.21/nss/manifest.mn
-@@ -10,4 +10,4 @@
- 
- RELEASE = nss
- 
--DIRS = coreconf lib cmd cpputil gtests
-+DIRS = coreconf lib cmd cpputil gtests config
diff --git a/gnu/packages/patches/python-gst-fix-build-with-python-3.8.patch b/gnu/packages/patches/python-gst-fix-build-with-python-3.8.patch
deleted file mode 100644
index affa0e1317..0000000000
--- a/gnu/packages/patches/python-gst-fix-build-with-python-3.8.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix build with Python 3.8 by also checking for python-3.X-embed.pc. Since
-Python 3.8 the normal checks don't include the Python libraries anymore and
-linking of the gst-python module would fail.
-
-See also https://github.com/mesonbuild/meson/issues/5629
-Fixes https://gitlab.freedesktop.org/gstreamer/gst-python/issues/28
-
-Patch based on upstream commit:
-
-https://gitlab.freedesktop.org/gstreamer/gst-python/-/commit/10707f437f2fc3632067c6a0efa4432f7ebaf362
-
-diff --git a/meson.build b/meson.build
-index 5f13b48..d7c7e66 100644
---- a/meson.build
-+++ b/meson.build
-@@ -23,7 +23,17 @@ pygobject_dep = dependency('pygobject-3.0', fallback: ['pygobject', 'pygobject_d
- 
- pymod = import('python')
- python = pymod.find_installation(get_option('python'))
--python_dep = python.dependency(required : true)
-+pythonver = python.language_version()
-+if pythonver.version_compare('<3.0')
-+   error('Python2 is not supported anymore, please port your code to python3 (@0@ specified)'.format(python.language_version()))
-+endif
-+
-+# Workaround for https://github.com/mesonbuild/meson/issues/5629
-+# https://gitlab.freedesktop.org/gstreamer/gst-python/issues/28
-+python_dep = dependency('python-@0@-embed'.format(pythonver), version: '>=3', required: false)
-+if not python_dep.found()
-+  python_dep = python.dependency(required : true)
-+endif
- 
- python_abi_flags = python.get_variable('ABIFLAGS', '')
- pylib_loc = get_option('libpython-dir')
--- 
-2.26.2
diff --git a/gnu/packages/patches/sbcl-graph-asdf-definitions.patch b/gnu/packages/patches/sbcl-graph-asdf-definitions.patch
deleted file mode 100644
index ec17949675..0000000000
--- a/gnu/packages/patches/sbcl-graph-asdf-definitions.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-commit 52ebece1243ae6900e414b6248b5145a28348eef
-Author: Guillaume Le Vaillant <glv@posteo.net>
-Date:   Fri Oct 18 15:41:23 2019 +0200
-
-    Use basic ASDF system definitions instead of package-inferred-system
-
-diff --git a/graph.asd b/graph.asd
-index 193b6e3..56afc8f 100644
---- a/graph.asd
-+++ b/graph.asd
-@@ -3,12 +3,10 @@
-   :version "0.0.0"
-   :author ("Eric Schulte <schulte.eric@gmail.com>" "Thomas Dye")
-   :licence "GPL V3"
--  :class :package-inferred-system
--  :defsystem-depends-on (:asdf-package-system)
-+  :in-order-to ((test-op (test-op graph-test)))
-   :depends-on (alexandria
-                metabang-bind
-                named-readtables
-                curry-compose-reader-macros
--               graph/graph))
--
--(register-system-packages "femlisp-matlisp" '(:fl.matlisp))
-+               cl-heap)
-+  :components ((:file "graph")))
-diff --git a/graph-dot.asd b/graph-dot.asd
-new file mode 100644
-index 0000000..12aec7e
---- /dev/null
-+++ b/graph-dot.asd
-@@ -0,0 +1,8 @@
-+(defsystem :graph-dot
-+  :depends-on (alexandria
-+               metabang-bind
-+               named-readtables
-+               curry-compose-reader-macros
-+               cl-ppcre
-+               graph)
-+  :components ((:file "dot")))
-diff --git a/graph-json.asd b/graph-json.asd
-new file mode 100644
-index 0000000..e7d091f
---- /dev/null
-+++ b/graph-json.asd
-@@ -0,0 +1,8 @@
-+(defsystem :graph-json
-+  :depends-on (alexandria
-+               metabang-bind
-+               named-readtables
-+               curry-compose-reader-macros
-+               yason
-+               graph)
-+  :components ((:file "json")))
-diff --git a/graph-test.asd b/graph-test.asd
-new file mode 100644
-index 0000000..1e811e1
---- /dev/null
-+++ b/graph-test.asd
-@@ -0,0 +1,10 @@
-+(defsystem :graph-test
-+  :depends-on (alexandria
-+               metabang-bind
-+               named-readtables
-+               curry-compose-reader-macros
-+               graph
-+               stefil)
-+  :perform (test-op (o s)
-+             (uiop:symbol-call :graph/test 'test))
-+  :components ((:file "test")))
diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm
index c992988437..a5ed121c85 100644
--- a/gnu/packages/pciutils.scm
+++ b/gnu/packages/pciutils.scm
@@ -36,7 +36,7 @@
 (define-public pciutils
   (package
     (name "pciutils")
-    (version "3.6.4")
+    (version "3.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -45,7 +45,7 @@
               (patches (search-patches "pciutils-hurd-configure.patch"))
               (sha256
                (base32
-                "0mb0f2phdcmp4kfiqsszn2k6nlln0w160ffzrjjv4bbfjwrgfzzn"))))
+                "1ss0rnfsx8gvqjxaji4mvbhf9xyih4cadmgadbwwv8mnx1xvjh4x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index df80f12077..11d2b1827d 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -59,27 +59,23 @@ line syntax.")
 (define-public popt
   (package
     (name "popt")
-    (version "1.16")
+    (version "1.18")
     (source (origin
              (method url-fetch)
-             ;; The original rpm5.org domain is not accessible since
-             ;; 2019-06-13, so use Debians copy of the tarball.
-             (uri (string-append "https://deb.debian.org/debian/pool/main"
-                                 "/p/popt/popt_" version ".orig.tar.gz"))
-             ;; Ensure the file name stays the same to prevent rebuilds.
-             (file-name (string-append "popt-" version ".tar.gz"))
+             (uri (string-append "http://ftp.rpm.org/popt/releases"
+                                 "/popt-1.x/popt-" version ".tar.gz"))
              (sha256
               (base32
-               "1j2c61nn2n351nhj4d25mnf3vpiddcykq005w2h6kw79dwlysa77"))))
+               "1lf5zlj5rbg6s4bww7hbhpca97prgprnarx978vcwa0bl81vqnai"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-test
            (lambda _
-             (substitute* "test-poptrc.in"
+             (substitute* "tests/test-poptrc.in"
                (("/bin/echo") (which "echo")))
-             (substitute* "testit.sh"   ; don't expect old libtool names
+             (substitute* "tests/testit.sh"   ;don't expect old libtool names
                (("lt-test1") "test1"))
              #t)))))
     (home-page "http://rpm5.org/files/popt/")
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 2fb636bca6..d9e9488484 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -71,45 +71,6 @@
 (define-public libsndfile
   (package
     (name "libsndfile")
-    (version "1.0.28")
-    (replacement libsndfile-1.0.30)
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "http://www.mega-nerd.com/libsndfile/files/libsndfile-"
-                                 version ".tar.gz"))
-             (patches (search-patches "libsndfile-armhf-type-checks.patch"
-                                      "libsndfile-CVE-2017-8361-8363-8365.patch"
-                                      "libsndfile-CVE-2017-8362.patch"
-                                      "libsndfile-CVE-2017-12562.patch"))
-             (sha256
-              (base32
-               "1afzm7jx34jhqn32clc5xghyjglccam2728yxlx37yj2y0lkkwqz"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("libvorbis" ,libvorbis)
-       ("libogg" ,libogg)
-       ("flac" ,flac)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (home-page "http://www.mega-nerd.com/libsndfile/")
-    (synopsis "Reading and writing files containing sampled sound")
-    (description
-     "Libsndfile is a C library for reading and writing files containing
-sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format) through
-one standard library interface.
-
-It was designed to handle both little-endian (such as WAV) and
-big-endian (such as AIFF) data, and to compile and run correctly on
-little-endian (such as Intel and DEC/Compaq Alpha) processor systems as well
-as big-endian processor systems such as Motorola 68k, Power PC, MIPS and
-SPARC.  Hopefully the design of the library will also make it easy to extend
-for reading and writing new sound file formats.")
-    (license l:gpl2+)))
-
-;; Replacement package to fix multiple security vulnerabilities.
-(define libsndfile-1.0.30
-  (package
-    (inherit libsndfile)
     (version "1.0.30")
     (source (origin
              (method url-fetch)
@@ -137,9 +98,28 @@ for reading and writing new sound file formats.")
                  (substitute* "tests/test_wrapper.sh.in"
                    (("^/usr/bin/env") "env"))
                  #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libvorbis" ,libvorbis)
+       ("libogg" ,libogg)
+       ("flac" ,flac)))
     (native-inputs
-     `(("python" ,python)
-       ,@(package-native-inputs libsndfile)))))
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python)))
+    (home-page "http://www.mega-nerd.com/libsndfile/")
+    (synopsis "Reading and writing files containing sampled sound")
+    (description
+     "Libsndfile is a C library for reading and writing files containing
+sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format) through
+one standard library interface.
+
+It was designed to handle both little-endian (such as WAV) and
+big-endian (such as AIFF) data, and to compile and run correctly on
+little-endian (such as Intel and DEC/Compaq Alpha) processor systems as well
+as big-endian processor systems such as Motorola 68k, Power PC, MIPS and
+SPARC.  Hopefully the design of the library will also make it easy to extend
+for reading and writing new sound file formats.")
+    (license l:gpl2+)))
 
 (define-public libsamplerate
   (package
@@ -261,7 +241,7 @@ rates.")
 
        ("eudev" ,eudev)))         ;for the detection of hardware audio devices
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("m4" ,m4)
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index b294613a5b..228dd594b1 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -498,14 +498,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "2.9.2")
+    (version "3.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "1d4iykcv7cn9j399hczlxm5pzxmqy6d80h3j16dkjwlmv3293b4r"))))
+         "1xp2j79c1y8qj4b97ygx451gzp8l4cp830hnvg3zw8j134bcaaam"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -520,14 +520,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "2.9.2")
+    (version "3.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "0af25w5mkd6vwns3r6ai1w5ip9xp0ms9s261zzssbpadzdr05hx0"))))
+         "0z81q4d1nangw3r0v5f41mfl4d9r04qnbayl5ll5v5jpcfhwd7wx"))))
     (build-system python-build-system)
     (inputs
      `(("openssl" ,openssl)))
@@ -742,18 +742,23 @@ ECB and OFB).")
 (define-public python-asn1crypto
   (package
     (name "python-asn1crypto")
-    (version "0.24.0")
+    (version "1.4.0")
     (source
-      (origin
+     (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/wbond/asn1crypto")
-              (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "10lai2cs5mnz3gpaffbw1m7b885ls8328q5wxm35vfmcip1f0xmb"))))
+             (url "https://github.com/wbond/asn1crypto")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "19abibn6jw20mzi1ln4n9jjvpdka8ygm4m439hplyrdfqbvgm01r"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "python" "run.py" "tests"))))))
     (home-page "https://github.com/wbond/asn1crypto")
     (synopsis "ASN.1 parser and serializer in Python")
     (description "asn1crypto is an ASN.1 parser and serializer with definitions
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index cf71a64e7c..384caddd6b 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -1992,13 +1992,13 @@ APIs.")
 (define-public python-requests
   (package
     (name "python-requests")
-    (version "2.23.0")
+    (version "2.24.0")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "requests" version))
              (sha256
               (base32
-               "1rhpg0jb08v0gd7f19jjiwlcdnxpmqi1fhvw7r4s9avddi4kvx5k"))))
+               "06r3017hz0hzxv42gpg73l8xvdjbzw7q904ljvp36b5p3l9rlmdk"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-certifi" ,python-certifi)
@@ -2245,7 +2245,6 @@ authenticated session objects providing things like keep-alive.")
        ("python-certifi" ,python-certifi)
        ("python-cryptography" ,python-cryptography)
        ("python-idna" ,python-idna)
-       ("python-ipaddress" ,python-ipaddress)
        ("python-pyopenssl" ,python-pyopenssl)
        ("python-pysocks" ,python-pysocks)))
     (home-page "https://urllib3.readthedocs.io/")
@@ -2254,6 +2253,7 @@ authenticated session objects providing things like keep-alive.")
      "Urllib3 supports features left out of urllib and urllib2 libraries.  It
 can reuse the same socket connection for multiple requests, it can POST files,
 supports url redirection and retries, and also gzip and deflate decoding.")
+    (properties `((python2-variant . ,(delay python2-urllib3))))
     (license license:expat)))
 
 ;; Some software requires an older version of urllib3, notably Docker.
@@ -2269,7 +2269,12 @@ supports url redirection and retries, and also gzip and deflate decoding.")
 
 
 (define-public python2-urllib3
-  (package-with-python2 python-urllib3))
+  (let ((base (package-with-python2 (strip-python2-variant python-urllib3))))
+    (package/inherit
+     base
+     (propagated-inputs
+      `(("python-ipaddress" ,python2-ipaddress)
+        ,@(package-propagated-inputs base))))))
 
 (define-public awscli
   (package
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index ee1f9acda0..7170b867a7 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -3552,14 +3552,14 @@ text styles of documentation.")
 (define-public python-pygments
   (package
     (name "python-pygments")
-    (version "2.5.2")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Pygments" version))
        (sha256
         (base32
-         "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
+         "0i4gnd4q0mgkq0dp5wymn7ca8zjd8fgp63139svs6jf2c6h48wv4"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: Tests require sphinx, which depends on this.
@@ -3568,10 +3568,21 @@ text styles of documentation.")
     (synopsis "Syntax highlighting")
     (description
      "Pygments is a syntax highlighting package written in Python.")
-    (license license:bsd-2)))
+    (license license:bsd-2)
+    (properties `((python2-variant . ,(delay python2-pygments))))))
 
+;; Pygments 2.6 and later does not support Python 2.
 (define-public python2-pygments
-  (package-with-python2 python-pygments))
+  (let ((base (package-with-python2 (strip-python2-variant python-pygments))))
+    (package
+      (inherit base)
+      (version "2.5.2")
+      (source (origin
+                (method url-fetch)
+                (uri (pypi-uri "Pygments" version))
+                (sha256
+                 (base32
+                  "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q")))))))
 
 (define-public python-bumpversion
   (package
@@ -4291,14 +4302,14 @@ provides additional functionality on the produced Mallard documents.")
 (define-public python-cython
   (package
     (name "python-cython")
-    (version "0.29.17")
+    (version "0.29.21")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cython" version))
        (sha256
         (base32
-         "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
+         "1bcwpra7c6k30yvic3sw2v3rq2dr40ypc4zqif6kr52mpn4wnyp5"))))
     (build-system python-build-system)
     ;; we need the full python package and not just the python-wrapper
     ;; because we need libpython3.3m.so
@@ -9297,14 +9308,14 @@ versions of Python.")
 (define-public python-idna
   (package
     (name "python-idna")
-    (version "2.9")
+    (version "2.10")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "idna" version))
        (sha256
         (base32
-         "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
+         "1xmk3s92d2vq42684p61wixfmh3qpr2mw762w0n6662vhlpqf1xk"))))
     (build-system python-build-system)
     (home-page "https://github.com/kjd/idna")
     (synopsis "Internationalized domain names in applications")
@@ -11160,14 +11171,14 @@ python-xdo for newer bindings.)")
 (define-public python-mako
   (package
     (name "python-mako")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Mako" version))
        (sha256
         (base32
-         "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
+         "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -16642,14 +16653,14 @@ requirements is not met.")
 (define-public python-pysocks
   (package
     (name "python-pysocks")
-    (version "1.7.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "PySocks" version))
        (sha256
         (base32
-         "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
+         "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))
     (home-page "https://github.com/Anorov/PySocks")
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 25f811ac70..aabbdc308f 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -195,7 +195,6 @@ system, and the core design of Django is reused in Grantlee.")
        ("libxslt" ,libxslt)
        ("libxtst" ,libxtst)
        ("mtdev" ,mtdev)
-       ("mariadb" ,mariadb "lib")
        ("mariadb-dev" ,mariadb "dev")
        ("nss" ,nss)
        ("postgresql" ,postgresql)
@@ -346,7 +345,6 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtbase
   (package
     (name "qtbase")
-    ;; TODO Remove ((gnu packages kde) qtbase-for-krita) when upgrading qtbase.
     (version "5.14.2")
     (source (origin
              (method url-fetch)
@@ -359,7 +357,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                "12mjsahlma9rw3vz9a6b5h2s6ylg8b34hxc2vnlna5ll429fgfa8"))
              ;; Use TZDIR to avoid depending on package "tzdata".
              (patches (search-patches "qtbase-use-TZDIR.patch"
-                                      "qtbase-moc-ignore-gcc-macro.patch"))
+                                      "qtbase-moc-ignore-gcc-macro.patch"
+                                      "qtbase-absolute-runpath.patch"
+                                      "qtbase-fix-krita-deadlock.patch"))
              (modules '((guix build utils)))
              (snippet
                ;; corelib uses bundled harfbuzz, md4, md5, sha3
@@ -371,6 +371,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                   "zlib"))
                   #t)))))
     (build-system gnu-build-system)
+    (outputs '("out" "debug"))
     (propagated-inputs
      `(("mesa" ,mesa)
        ;; Use which the package, not the function
@@ -404,7 +405,6 @@ developers using C++ or QML, a CSS & JavaScript like language.")
        ("libxslt" ,libxslt)
        ("libxtst" ,libxtst)
        ("mtdev" ,mtdev)
-       ("mariadb" ,mariadb "lib")
        ("mariadb-dev" ,mariadb "dev")
        ("nss" ,nss)
        ("openssl" ,openssl)
@@ -477,6 +477,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                  "-opensource"
                  "-confirm-license"
 
+                 ;; Later stripped into the :debug output.
+                 "-force-debug-info"
+
                  ;; These features require higher versions of Linux than the
                  ;; minimum version of the glibc.  See
                  ;; src/corelib/global/minimum-linux_p.h.  By disabling these
@@ -601,27 +604,6 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 ;; qt used to refer to the monolithic Qt 5.x package
 (define-deprecated qt qtbase)
 
-;; This variable is required by 'python-pyside-2-tools', which copies some
-;; qtbase executables that fail to run because RUNPATH refers to the
-;; wrong $ORIGIN.  TODO: Merge with qtbase in the next rebuild cycle.
-(define qtbase/next
-  (package
-    (inherit qtbase)
-    (source
-     (origin
-       (inherit (package-source qtbase))
-       (patches (append (origin-patches (package-source qtbase))
-                        (search-patches "qtbase-absolute-runpath.patch")))))))
-
-(define-public qtbase-for-krita
-  (hidden-package
-    (package
-      (inherit qtbase)
-      (source (origin
-                (inherit (package-source qtbase))
-                (patches (append (origin-patches (package-source qtbase))
-                                 (search-patches "qtbase-fix-krita-deadlock.patch"))))))))
-
 (define-public qtsvg
   (package (inherit qtbase)
     (name "qtsvg")
@@ -2779,7 +2761,7 @@ generate Python bindings for your C or C++ code.")
     (inputs
      `(("python-pyside-2" ,python-pyside-2)
        ("python-shiboken-2" ,python-shiboken-2)
-       ("qtbase" ,qtbase/next)))
+       ("qtbase" ,qtbase)))
     (native-inputs
      `(("python" ,python-wrapper)))
     (arguments
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 73bf85241c..2bef683b4a 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -3797,8 +3797,7 @@ specs for Ruby implementations in ruby/spec.")
                (invoke "rspec"))
              #t)))))
     (inputs
-     `(("mariadb" ,mariadb "lib")
-       ("mariadb-dev" ,mariadb "dev")
+     `(("mariadb-dev" ,mariadb "dev")
        ("zlib" ,zlib)))
     (native-inputs
      `(("ruby-rspec" ,ruby-rspec)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 05404de1d8..35a96b5754 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
-;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
@@ -422,7 +422,9 @@ test = { path = \"../libtest\" }
      `(("bison" ,bison) ; For the tests
        ("cmake" ,cmake-minimal)
        ("flex" ,flex) ; For the tests
-       ("gdb" ,gdb)   ; For the tests
+       ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.
+       ;; See <https://bugs.gnu.org/37810>.  Use it on all Rusts for simplicity.
+       ("gdb" ,gdb-8.2) ; For the tests
        ("procps" ,procps) ; For the tests
        ("python-2" ,python-2)
        ("rustc-bootstrap" ,mrustc)
@@ -758,6 +760,9 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
           (patches (search-patches
                      "rust-coresimd-doctest.patch"
                      "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
+      (inputs
+       (alist-replace "openssl" (list openssl)
+                      (package-inputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
@@ -800,7 +805,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                    (("fn finds_author_git") "#[ignore]\nfn finds_author_git")
                    (("fn finds_local_author_git") "#[ignore]\nfn finds_local_author_git"))
                  #t))
-             ;; TODO(rebuild-rust): Remove this phase in rust-1.28 when rebuilding.
              (add-after 'patch-cargo-tests 'disable-cargo-test-for-nightly-channel
                (lambda* _
                  ;; This test failed to work on "nightly" channel builds
@@ -829,11 +833,6 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                                    "rust-bootstrap-stage0-test.patch"
                                    "rust-1.25-accept-more-detailed-gdb-lines.patch"
                                    "rust-reproducible-builds.patch"))))
-      (native-inputs
-       ;; FIXME: Rust 1.27 and some later versions require GDB 8.2 specifically.
-       ;; See <https://bugs.gnu.org/37810>.
-       (alist-replace "gdb" (list gdb-8.2)
-                      (package-native-inputs base-rust)))
       (arguments
        (substitute-keyword-arguments (package-arguments base-rust)
          ((#:phases phases)
@@ -885,6 +884,8 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                  (substitute* "src/test/run-pass/issue-44056.rs"
                    (("only-x86_64") "ignore-test"))
                  #t))
+             ;; This is no longer needed as of 1.28
+             (delete 'disable-cargo-test-for-nightly-channel)
              ;; The thinlto test should pass with llvm 6.
              (delete 'disable-thinlto-test))))))))
 
@@ -1147,14 +1148,13 @@ move around."
                    (setenv "CARGO_HOME" cargo-home)
                    #t))))))))))
 
-;; TODO(rebuild-rust): Switch to LLVM 9 in 1.38 instead of 1.40.
 (define-public rust-1.38
   (let ((base-rust
          (rust-bootstrapped-package rust-1.37 "1.38.0"
            "101dlpsfkq67p0hbwx4acqq6n90dj4bbprndizpgh1kigk566hk4")))
     (package
       (inherit base-rust)
-      #;(inputs
+      (inputs
         (alist-replace "llvm" (list llvm-9)
                        (package-inputs base-rust)))
       (arguments
@@ -1197,9 +1197,6 @@ move around."
            "1ba9llwhqm49w7sz3z0gqscj039m53ky9wxzhaj11z6yg1ah15yx")))
     (package
       (inherit base-rust)
-      (inputs
-        (alist-replace "llvm" (list llvm-9)
-                       (package-inputs base-rust)))
       (source
         (origin
           (inherit (package-source base-rust))
@@ -1254,8 +1251,6 @@ move around."
                  ,(patch-command-exec-tests-phase
                     '(match (find-files "src/test" "command-exec\\.rs")
                        ((file) file))))
-               ;; TODO(rebuild-rust): The test in question got fixed long ago.
-               (delete 'disable-cargo-test-for-nightly-channel)
                ;; The test got removed in commit 000fe63b6fc57b09828930cacbab20c2ee6e6d15
                ;; "Remove painful test that is not pulling its weight"
                (delete 'remove-unsupported-tests)))))))))
@@ -1324,4 +1319,4 @@ move around."
     "0a17jby2pd050s24cy4dfc0gzvgcl585v3vvyfilniyvjrqknsid"))
 
 ;; TODO(staging): Bump this variable to the latest packaged rust.
-(define-public rust rust-1.39)
+(define-public rust rust-1.45)
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index cf6bf18373..96e23518ec 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -197,14 +197,14 @@ with a PKCS #11 Cryptographic Token Interface.")
 (define-public pcsc-lite
   (package
     (name "pcsc-lite")
-    (version "1.8.26")
+    (version "1.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pcsclite.apdu.fr/files/"
                                   "pcsc-lite-" version ".tar.bz2"))
               (sha256
                (base32
-                "1ndvvz0fgqwz70pijymsxmx25mzryb0zav1i8jjc067ndryvxdry"))))
+                "1y9f9zipnrmgiw0mxrvcgky8vfrcmg6zh40gbln5a93i2c1x8j01"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers"
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index ac506ecbe5..12d739c384 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -48,14 +48,14 @@
 (define-public python-sphinx
   (package
     (name "python-sphinx")
-    (version "2.3.1")
+    (version "3.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Sphinx" version))
        (sha256
         (base32
-         "19a28nsb0w4bs6k8rdfyk6vzrcwdpvhs2wq77rgpmww59yvndrz6"))))
+         "1zd8l4dh0v4p8m7s51xr001k09cq2023dd0953ygw7xa76dypnmr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -99,52 +99,7 @@
 for Python projects or other documents consisting of multiple reStructuredText
 sources.")
     (license license:bsd-2)
-    (properties `((python2-variant . ,(delay python2-sphinx))))))
-
-;; Sphinx 2 does not support Python 2, so we stick with this older version here.
-;; Remove this package once python2-pbcore no longer requires it.
-(define-public python2-sphinx
-  (let ((base (package-with-python2 (strip-python2-variant python-sphinx))))
-    (package
-      (inherit base)
-      (version "1.7.7")
-      (source (origin
-                (method url-fetch)
-                (uri (pypi-uri "Sphinx" version))
-                (sha256
-                 (base32
-                  "0pkkbfj7cl157q550gcs45am5y78ps0h7q6455d64s1zmw01jlvi"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments base)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-before 'check 'disable-broken-tests
-               (lambda _
-                 ;; These tests are broken when using Python2:
-                 ;; <https://github.com/sphinx-doc/sphinx/issues/4710>.
-                 (for-each delete-file '("tests/test_api_translator.py"
-                                         "tests/test_setup_command.py"))
-                 #t))))))
-      (native-inputs `(("python2-mock" ,python2-mock)
-                       ("python2-enum34" ,python2-enum34)
-                       ,@(package-native-inputs base)))
-      ;; Sphinx 2 has some dependencies that do not support Python 2, so
-      ;; we keep our own propagated-inputs here instead of inheriting.
-      (propagated-inputs `(("python2-pytz" ,python2-pytz)
-                           ("python2-typing" ,python2-typing)
-                           ("python2-imagesize" ,python2-imagesize)
-                           ("python2-sphinx-alabaster-theme"
-                            ,python2-sphinx-alabaster-theme)
-                           ("python2-babel" ,python2-babel-2.6)
-                           ("python2-snowballstemmer" ,python2-snowballstemmer)
-                           ("python2-docutils" ,python2-docutils-0.14)
-                           ("python2-jinja2" ,python2-jinja2)
-                           ("python2-packaging" ,python2-packaging)
-                           ("python2-pygments" ,python2-pygments)
-                           ("python2-requests" ,python2-requests)
-                           ("python2-six" ,python2-six)
-                           ("python2-sphinxcontrib-websupport"
-                            ,python2-sphinxcontrib-websupport))))))
+    (properties `((python2-variant . ,(delay python-sphinx))))))
 
 (define-public python-sphinxcontrib-applehelp
   (package
diff --git a/gnu/packages/sssd.scm b/gnu/packages/sssd.scm
index aa91424b4d..b2b5da96f8 100644
--- a/gnu/packages/sssd.scm
+++ b/gnu/packages/sssd.scm
@@ -164,7 +164,7 @@ fundamental object types for C.")
        ("tdb" ,tdb)
        ("tevent" ,tevent)))
     (native-inputs
-     `(("check" ,check)
+     `(("check" ,check-0.14)
        ("docbook-xsl" ,docbook-xsl)
        ("docbook-xml" ,docbook-xml)
        ("libxml2" ,libxml2)             ; for xmllint
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 75e852915e..4036bd461b 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,9 @@
 (define-public valgrind
   (package
     (name "valgrind")
-    (version "3.15.0")
+    ;; Note: check "guix refresh -l -e '(@ (gnu packages valgrind) valgrind)'"
+    ;; when updating this package to find which branch it should go to.
+    (version "3.16.1")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -41,7 +44,7 @@
                                         "/valgrind-" version ".tar.bz2")))
               (sha256
                (base32
-                "1ccawxrni8brcvwhygy12iprkvz409hbr9xkk1bd03gnm2fplz21"))
+                "1jik19rcd34ip8a5c9nv5wfj8k8maqb8cyclr4xhznq2gcpkl7y9"))
               (patches (search-patches "valgrind-enable-arm.patch"))))
     (build-system gnu-build-system)
     (outputs '("doc"                              ;16 MB
@@ -70,9 +73,6 @@
                (mkdir-p dest)
                (rename-file orig dest)
                #t))))))
-    (inputs
-     ;; GDB is needed to provide a sane default for `--db-command'.
-     `(("gdb" ,gdb)))
     (native-inputs
      `(("perl" ,perl)))
     (home-page "https://www.valgrind.org/")
@@ -82,4 +82,15 @@
 tools.  There are Valgrind tools that can automatically detect many memory
 management and threading bugs, and profile your programs in detail.  You can
 also use Valgrind to build new tools.")
-    (license gpl2+)))
+    (license gpl2+)
+
+    ;; Hide this variant so end users get the "interactive" Valgrind below.
+    (properties '((hidden? . #t)))))
+
+(define-public valgrind/interactive
+  (package/inherit
+   valgrind
+   (inputs
+    ;; GDB is needed to provide a sane default for `--db-command'.
+    `(("gdb" ,gdb)))
+   (properties '())))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 472a5eb38c..c17e105fd5 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1323,7 +1323,7 @@ libebml is a C++ library to read and write EBML files.")
 (define-public libva
   (package
     (name "libva")
-    (version "2.7.1")
+    (version "2.9.0")
     (source
      (origin
        (method url-fetch)
@@ -1335,7 +1335,7 @@ libebml is a C++ library to read and write EBML files.")
              (string-append "https://www.freedesktop.org/software/vaapi/releases/"
                             "libva/libva-" version "/libva-" version ".tar.bz2")))
        (sha256
-        (base32 "014av7ayyc624xfmr63xhbgg7nw8fynsswj1g2wmk4lnkyfz23x0"))))
+        (base32 "0jsq6ia3fzyzvq7lxsrn4a8kn2kx4z3v777xkxn6k4ny5lww2i73"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -3070,7 +3070,7 @@ and JACK.")
 (define-public libvdpau
   (package
     (name "libvdpau")
-    (version "1.3")
+    (version "1.4")
     (source
       (origin
         (method git-fetch)
@@ -3080,7 +3080,7 @@ and JACK.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "1fb1nh5apr9kzx9bm2lysjwpyva1s60b2l2p230nqgvb11q25hd2"))))
+          "1hc4mcrbr1yhfiy4zfd8wc2iiqbp90z6jswap0jia20vmyk5lqld"))))
     (build-system meson-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index fe37b59e26..7e622946e9 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -183,7 +183,7 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-headers
   (package
     (name "vulkan-headers")
-    (version "1.2.141")
+    (version "1.2.148")
     (source
      (origin
        (method git-fetch)
@@ -193,7 +193,7 @@ interpretation of the specifications for these languages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "10nmx6y4llllfcczyfz76amd0vkqv09dj952d19zkzmmgcval7zq"))))
+         "1c877npvmkv2qxac308m3x0ij3il7hy5xk3fwsfi7s9dcsaxi63j"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; No tests.
@@ -207,7 +207,7 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-loader
   (package
     (name "vulkan-loader")
-    (version "1.2.140")
+    (version "1.2.148")
     (source
      (origin
        (method git-fetch)
@@ -217,7 +217,7 @@ interpretation of the specifications for these languages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0rhyz0qgp0i7pcx6wlvgwy7j33d4cs0xx39f0b6igpfk0vk70r1w"))))
+         "0rxh4q09k0pdl3xlvxdv5qkak4d7az25gijxr5w170fjnd8yfrhk"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -261,7 +261,7 @@ and the ICD.")
 (define-public vulkan-tools
   (package
     (name "vulkan-tools")
-    (version "1.2.140")
+    (version "1.2.148")
     (source
      (origin
        (method git-fetch)
@@ -271,7 +271,7 @@ and the ICD.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "08dk0q77kpycn4vv19jh3ig73gbq3psan246a7fss0nfxpiddg0j"))))
+         "1908fw4rvg5iaim8ph0c0bzhac6jplg8dhfs6dpxd1dapzwqllkf"))))
     (build-system cmake-build-system)
     (inputs
      `(("glslang" ,glslang)
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index eb49a8fdea..b2209cbb2a 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -536,47 +536,44 @@ driven and does not detract you from your daily work.")
      `(("prove" ,sbcl-prove)
        ("sbcl" ,sbcl)))
     (inputs
-     ;; We need to avoid sbcl-* inputs (sbcl-cl-cffi-gtk in particular) as they
-     ;; seem to cause Nyxt to hang into a hogging process in about 10 minutes.
-     ;; Probably an issue between CFFI and how we build SBCL packages.
-     ;; See https://github.com/atlas-engineer/nyxt/issues/680.
-     `(("alexandria" ,cl-alexandria)
-       ("bordeaux-threads" ,cl-bordeaux-threads)
-       ("cl-chanl" ,cl-chanl)
-       ("cl-containers" ,cl-containers)
-       ("cl-css" ,cl-css)
-       ("cl-json" ,cl-json)
-       ("cl-markup" ,cl-markup)
-       ("cl-ppcre" ,cl-ppcre)
-       ("cl-prevalence" ,cl-prevalence)
-       ("closer-mop" ,cl-closer-mop)
-       ("cluffer" ,cl-cluffer)
-       ("dexador" ,cl-dexador)
-       ("enchant" ,cl-enchant)
-       ("fset" ,cl-fset)
-       ("hu.dwim.defclass-star" ,cl-hu.dwim.defclass-star)
-       ("iolib" ,cl-iolib)
-       ("local-time" ,cl-local-time)
-       ("log4cl" ,cl-log4cl)
-       ("mk-string-metrics" ,cl-mk-string-metrics)
-       ("moptilities" ,cl-moptilities)
-       ("osicat" ,sbcl-osicat)         ; SBCL version needed for libosicat.so.
-       ("parenscript" ,cl-parenscript)
-       ("plump" ,cl-plump)
-       ("quri" ,cl-quri)
-       ("serapeum" ,cl-serapeum)
-       ("str" ,cl-str)
-       ("swank" ,cl-slime-swank)
-       ("trivia" ,cl-trivia)
-       ("trivial-clipboard" ,cl-trivial-clipboard)
-       ("trivial-features" ,cl-trivial-features)
-       ("trivial-package-local-nicknames" ,cl-trivial-package-local-nicknames)
-       ("trivial-types" ,cl-trivial-types)
-       ("unix-opts" ,cl-unix-opts)
-       ("usocket" ,cl-usocket)
+     `(("alexandria" ,sbcl-alexandria)
+       ("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("cl-chanl" ,sbcl-chanl)
+       ("cl-containers" ,sbcl-cl-containers)
+       ("cl-css" ,sbcl-cl-css)
+       ("cl-json" ,sbcl-cl-json)
+       ("cl-markup" ,sbcl-cl-markup)
+       ("cl-ppcre" ,sbcl-cl-ppcre)
+       ("cl-prevalence" ,sbcl-cl-prevalence)
+       ("closer-mop" ,sbcl-closer-mop)
+       ("cluffer" ,sbcl-cluffer)
+       ("dexador" ,sbcl-dexador)
+       ("enchant" ,sbcl-enchant)
+       ("fset" ,sbcl-fset)
+       ("hu.dwim.defclass-star" ,sbcl-hu.dwim.defclass-star)
+       ("iolib" ,sbcl-iolib)
+       ("local-time" ,sbcl-local-time)
+       ("log4cl" ,sbcl-log4cl)
+       ("lparallel" ,sbcl-lparallel)
+       ("mk-string-metrics" ,sbcl-mk-string-metrics)
+       ("moptilities" ,sbcl-moptilities)
+       ("osicat" ,sbcl-osicat)
+       ("parenscript" ,sbcl-parenscript)
+       ("plump" ,sbcl-plump)
+       ("quri" ,sbcl-quri)
+       ("serapeum" ,sbcl-serapeum)
+       ("str" ,sbcl-cl-str)
+       ("swank" ,sbcl-slime-swank)
+       ("trivia" ,sbcl-trivia)
+       ("trivial-clipboard" ,sbcl-trivial-clipboard)
+       ("trivial-features" ,sbcl-trivial-features)
+       ("trivial-package-local-nicknames" ,sbcl-trivial-package-local-nicknames)
+       ("trivial-types" ,sbcl-trivial-types)
+       ("unix-opts" ,sbcl-unix-opts)
+       ("usocket" ,sbcl-usocket)
        ;; WebKitGTK deps
-       ("cl-cffi-gtk" ,cl-cffi-gtk)
-       ("cl-webkit" ,cl-webkit)
+       ("cl-cffi-gtk" ,sbcl-cl-cffi-gtk)
+       ("cl-webkit" ,sbcl-cl-webkit)
        ("glib-networking" ,glib-networking)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
     (synopsis "Extensible web-browser in Common Lisp")
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 0e80f23bb2..b07f9e4d44 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -1348,15 +1348,15 @@ perform the opening handshake in HTTP.")
 (define-public libpsl
   (package
     (name "libpsl")
-    (version "0.21.0")
+    (version "0.21.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rockdaboot/libpsl/"
-                                  "releases/download/libpsl-" version
+                                  "releases/download/" version
                                   "/libpsl-" version ".tar.gz"))
               (sha256
                (base32
-                "04pfagb7ppq3yibx4lhazd1v9nwkxdfkyy2rgcrmrf3mldsirga1"))))
+                "0k0d46bbh1jj2ll369f134vciplrzbqkg7fv9m62bl6lzghy2v5c"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1622,15 +1622,18 @@ hash/signatures.")
 (define-public libyaml
   (package
     (name "libyaml")
-    (version "0.2.4")
+    (version "0.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://pyyaml.org/download/libyaml/yaml-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0mq5wf17ifcwwxq3kbimhi53jn3fg23vcynqpzxjcz3vfjlfs2nq"))))
+        (base32
+         "1x4fcw13r3lqy8ndydr3ili87wicplw2awbcv6r21qgyfndswhn6"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--disable-static")))
     (home-page "https://pyyaml.org/wiki/LibYAML")
     (synopsis "YAML 1.1 parser and emitter written in C")
     (description
@@ -5103,7 +5106,7 @@ commenting.")
     (native-inputs
      `(("netsurf-buildsystem" ,netsurf-buildsystem)
        ("pkg-config" ,pkg-config)
-       ("check" ,check)))               ;for tests
+       ("check" ,check-0.14)))          ;for tests
     (arguments netsurf-buildsystem-arguments)
     (home-page "https://www.netsurf-browser.org/projects/libwapcaplet/")
     (synopsis "String internment library")
@@ -5152,6 +5155,7 @@ written in C.  It is developed as part of the NetSurf project.")
              (url "https://github.com/tlsa/libcyaml")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
+       (patches (search-patches "libcyaml-libyaml-compat.patch"))
        (sha256
         (base32 "0428p0rwq71nhh5nzcbapsbrjxa0x5l6h6ns32nxv7j624f0zd93"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 7950b3b729..1092237a03 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,10 +57,10 @@
     (inputs
      `(("gnutls" ,gnutls)
        ("libidn2" ,libidn2)
-       ("libpsl" ,libpsl)
-       ("lzip" ,lzip)))
+       ("libpsl" ,libpsl)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("lzip" ,lzip)
+       ("pkg-config" ,pkg-config)
        ("perl" ,perl)
        ("python" ,python)               ;for testenv suite
        ("perl-http-daemon" ,perl-http-daemon)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 3bb7f7e8e8..6cba0ad0fd 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -1608,10 +1608,10 @@ compositors that support the layer-shell protocol.")
               ("alexandria" ,sbcl-alexandria)))
     (outputs '("out" "lib"))
     (arguments
-     '(#:asd-system-name "stumpwm"
+     '(#:asd-systems '("stumpwm")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'create-symlinks 'build-program
+         (add-after 'create-asdf-configuration 'build-program
            (lambda* (#:key outputs #:allow-other-keys)
              (build-program
               (string-append (assoc-ref outputs "out") "/bin/stumpwm")
@@ -1679,20 +1679,15 @@ productive, customizable lisp based systems.")
                       (program (string-append out "/bin/stumpwm")))
                  (build-program program outputs
                                 #:entry-program '((stumpwm:stumpwm) 0)
-                                #:dependencies '("stumpwm"
-                                                 ,@(@@ (gnu packages lisp-xyz) slynk-systems))
+                                #:dependencies '("stumpwm" "slynk")
                                 #:dependency-prefixes
                                 (map (lambda (input) (assoc-ref inputs input))
                                      '("stumpwm" "slynk")))
-                 ;; Remove unneeded file.
-                 (delete-file (string-append out "/bin/stumpwm-exec.fasl"))
                  #t)))
            (delete 'copy-source)
            (delete 'build)
            (delete 'check)
-           (delete 'create-asd-file)
-           (delete 'cleanup)
-           (delete 'create-symlinks)))))))
+           (delete 'cleanup)))))))
 
 (define stumpwm-contrib
   (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d63")
@@ -1757,7 +1752,7 @@ productive, customizable lisp based systems.")
      `(("stumpwm" ,stumpwm "lib")
        ("clx-truetype" ,sbcl-clx-truetype)))
     (arguments
-     '(#:asd-system-name "ttf-fonts"
+     '(#:asd-systems '("ttf-fonts")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1774,7 +1769,7 @@ rendering.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-pass")
     (arguments
-     '(#:asd-system-name "pass"
+     '(#:asd-systems '("pass")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1791,7 +1786,7 @@ password-store into StumpWM.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-globalwindows")
     (arguments
-     '(#:asd-system-name "globalwindows"
+     '(#:asd-systems '("globalwindows")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1808,7 +1803,7 @@ windows in the current X session.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-swm-gaps")
     (arguments
-     '(#:asd-system-name "swm-gaps"
+     '(#:asd-systems '("swm-gaps")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1825,7 +1820,7 @@ between windows.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-net")
     (arguments
-     '(#:asd-system-name "net"
+     '(#:asd-systems '("net")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1843,7 +1838,7 @@ between windows.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-wifi")
     (arguments
-     '(#:asd-system-name "wifi"
+     '(#:asd-systems '("wifi")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1861,7 +1856,7 @@ between windows.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-stumptray")
     (arguments
-     '(#:asd-system-name "stumptray"
+     '(#:asd-systems '("stumptray")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -1883,7 +1878,7 @@ between windows.")
     (inherit stumpwm-contrib)
     (name "sbcl-stumpwm-kbd-layouts")
     (arguments
-     '(#:asd-system-name "kbd-layouts"
+     '(#:asd-systems '("kbd-layouts")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index ccfab58777..be8d0234f9 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -324,18 +324,19 @@ avoiding password prompts when X11 forwarding has already been setup.")
 (define-public libxkbcommon
   (package
     (name "libxkbcommon")
-    (version "0.10.0")
+    (version "1.0.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://xkbcommon.org/download/libxkbcommon-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1wmnl0hngn6vrqrya4r8hvimlkr4jag39yjprls4gyrqvh667hsp"))))
+               "13bcdf2xpjxwbghas0cr448z89qqki2ssgfgswc257y9859v4s5b"))))
     (build-system meson-build-system)
     (inputs
      `(("libx11" ,libx11)
        ("libxcb" ,libxcb)
+       ("libxml2" ,libxml2)
        ("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)
        ("xkeyboard-config" ,xkeyboard-config)))
@@ -501,7 +502,7 @@ rasterisation.")
 (define-public libdrm
   (package
     (name "libdrm")
-    (version "2.4.101")
+    (version "2.4.102")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -509,8 +510,7 @@ rasterisation.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "19vqbhqljhln0lrpnv3s7y3lkhsdcp76dl8bhqj3cis9ism1pwyx"))
-              (patches (search-patches "libdrm-realpath-virtio.patch"))))
+                "0nx0bd9dhymdsd99v4ifib77yjirkvkxf5hzdkbr7qr8dhrzkjwb"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 8e18c0649d..2d80496330 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -86,14 +86,14 @@ periodic timestamps for seeking.")
 (define libvorbis
   (package
    (name "libvorbis")
-   (version "1.3.6")
+   (version "1.3.7")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://downloads.xiph.org/releases/vorbis/"
                                 "libvorbis-" version ".tar.xz"))
             (sha256
              (base32
-              "05dlzjkdpv46zb837wysxqyn8l636x3dw8v8ymlrwz2fg1dbn05g"))))
+              "0jwmf87x5sdis64rbv0l87mdpah1rbilkkxszipbzg128f9w8g5k"))))
    (build-system gnu-build-system)
    (propagated-inputs `(("libogg" ,libogg)))
    (arguments `(#:configure-flags '("LDFLAGS=-lm"
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index e912eb1be9..f7b2cd7ab4 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -2466,7 +2466,7 @@ XC-APPGROUP, XTEST.")
 (define-public libevdev
   (package
     (name "libevdev")
-    (version "1.8.0")
+    (version "1.9.1")
     (source
      (origin
        (method url-fetch)
@@ -2474,21 +2474,10 @@ XC-APPGROUP, XTEST.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "04a2klvii0in9ln8r85mk2cm73jq8ry2m3yzmf2z8xyjxzjcmlr0"))))
+         "1jvsphdrs1i54ccjcn6ll26jy42am7h28lbsvwa6pmxgqm43qq7m"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--disable-static")
-       #:phases (modify-phases %standard-phases
-                  (add-before 'configure 'pedantry
-                    (lambda _
-                      ;; XXX: libevdev includes kernel headers, which causes this
-                      ;; compile test to fail with:
-                      ;; ...-headers-4.14.67/include/asm-generic/posix_types.h:88:14:
-                      ;;error: ISO C90 does not support ‘long long’ [-Werror=long-long]
-                      (substitute* "test/Makefile.in"
-                        (("-pedantic -Werror -std=c89")
-                         "-pedantic -Werror -std=c99"))
-                      #t)))))
+     `(#:configure-flags '("--disable-static")))
     (native-inputs `(("python" ,python)))
     (home-page "https://www.freedesktop.org/wiki/Software/libevdev/")
     (synopsis "Wrapper library for evdev devices")
@@ -4032,7 +4021,7 @@ extension to the X11 protocol.  It includes:
 (define-public xkeyboard-config
   (package
     (name "xkeyboard-config")
-    (version "2.29")
+    (version "2.31")
     (source
       (origin
         (method url-fetch)
@@ -4042,7 +4031,7 @@ extension to the X11 protocol.  It includes:
               ".tar.bz2"))
         (sha256
           (base32
-            "00hqc8nykvy8c09b8vab64dcd0ij3n5klxjn6rl00q7hickpah8x"))))
+            "18xddaxh83zm698syh50w983jg6b7b8zgv0dfaf7ha485hgihi6s"))))
     (build-system gnu-build-system)
     (inputs
       `(("libx11" ,libx11)
@@ -5320,8 +5309,7 @@ over Xlib, including:
 (define-public xorg-server
   (package
     (name "xorg-server")
-    (version "1.20.8")
-    (replacement xorg-server/fixed)
+    (version "1.20.9")
     (source
       (origin
         (method url-fetch)
@@ -5329,7 +5317,7 @@ over Xlib, including:
                             "xorg-server-" version ".tar.bz2"))
         (sha256
          (base32
-          "0ih15m7gh1z1ly6z7g82bkni719yisqmbk61a1wgp82bxrmn8yyi"))
+          "0w9mrnffvjgmwi50kln15i8rpdskxv97r78l75wlcmg4vzhg46g2"))
         (patches
          (list
           ;; See:
@@ -5445,35 +5433,13 @@ communicates with the user via graphical controls such as buttons and
 draggable titlebars and borders.")
     (license license:x11)))
 
-(define xorg-server/fixed  ; security fixes
-  (package
-    (inherit xorg-server)
-    (version "1.20.9")
-    (source
-     (origin
-       (inherit (package-source xorg-server))
-       (uri (string-append "mirror://xorg/individual/xserver/"
-                           "xorg-server-" version ".tar.bz2"))
-       (sha256
-        (base32
-         "0w9mrnffvjgmwi50kln15i8rpdskxv97r78l75wlcmg4vzhg46g2"))))))
-
 ;; This package is intended to be used when building GTK+.
 ;; Note: It's currently marked as "hidden" to avoid having two non-eq?
 ;; packages with the same name and version.
-;; TODO: Update this in the next rebuild cycle.
 (define-public xorg-server-for-tests
   (hidden-package
    (package
-     (inherit xorg-server)
-     (version "1.20.7")
-     (source (origin
-               (inherit (package-source xorg-server))
-               (uri (string-append "mirror://xorg/individual/xserver/"
-                                   "xorg-server-" version ".tar.bz2"))
-               (sha256
-                (base32
-                 "18bfl04ihw1jr3h0fs522nnxxq5ixjay77y9dcymnkzk23q8cndx")))))))
+     (inherit xorg-server))))
 
 (define-public xorg-server-xwayland
   (package/inherit xorg-server