summary refs log tree commit diff
path: root/gnu/packages/lisp.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/lisp.scm')
-rw-r--r--gnu/packages/lisp.scm2533
1 files changed, 2416 insertions, 117 deletions
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 720ac070cc..5e8b6fdd3d 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -8,6 +8,9 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
+;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,42 +31,45 @@
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages texinfo)
-  #:use-module (gnu packages tex)
-  #:use-module (gnu packages m4)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system asdf)
   #:use-module (guix build-system trivial)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages ed)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages bdw-gc)
-  #:use-module (gnu packages libffi)
   #:use-module (gnu packages libffcall)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages sdl)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages libsigsegv)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages admin)
-  #:use-module (gnu packages ed)
-  #:use-module (gnu packages gl)
-  #:use-module (gnu packages gcc)
-  #:use-module (gnu packages glib)
-  #:use-module (gnu packages gettext)
-  #:use-module (gnu packages m4)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages sdl)
+  #:use-module (gnu packages tex)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages webkit)
   #:use-module (ice-9 match)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-19))
 
 (define (asdf-substitutions lisp)
   ;; Prepend XDG_DATA_DIRS/LISP-bundle-systems to ASDF's
@@ -163,8 +169,7 @@
       (native-inputs
        `(("gcc" ,gcc-4.9)
          ("m4" ,m4)
-         ("texinfo" ,texinfo)
-         ("texlive" ,texlive)))
+         ("texinfo" ,texinfo)))
       (home-page "https://www.gnu.org/software/gcl/")
       (synopsis "A Common Lisp implementation")
       (description "GCL is an implementation of the Common Lisp language.  It
@@ -254,28 +259,31 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
 (define-public clisp
   (package
     (name "clisp")
-    (version "2.49-60")
+    (version "2.49-92")
     (source
      (origin
-       (method hg-fetch)
-       (uri (hg-reference
-             (url "http://hg.code.sf.net/p/clisp/clisp")
-             (changeset "clisp_2_49_60-2017-06-25")))
-       (file-name (string-append name "-" version "-checkout"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/gnu-clisp/clisp")
+             (commit "clisp-2.49.92-2018-02-18")))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0qjv3z274rbdmb941hy03hl63f4z7bmci234f8dyz4skgfr82d3i"))
-       (patches (search-patches "clisp-glibc-2.26.patch"
-                                "clisp-remove-failing-test.patch"))))
+        (base32 "0k2dmgl0miz3767iks4p0mvp6xw0ysyxhjpklyh11j010rmh6hqb"))
+       (patches (search-patches "clisp-remove-failing-test.patch"))))
     (build-system gnu-build-system)
     (inputs `(("libffcall" ,libffcall)
               ("ncurses" ,ncurses)
               ("readline" ,readline)
               ("libsigsegv" ,libsigsegv)))
     (arguments
-     '(#:configure-flags '("--enable-portability"
-                           "--with-dynamic-ffi"
-                           "--with-dynamic-modules"
-                           "--with-module=rawsock")
+     `(#:configure-flags '(,@(if (string-prefix? "armhf-linux"
+                                                 (or (%current-system)
+                                                     (%current-target-system)))
+                                 '("CFLAGS=-falign-functions=4")
+                                 '())
+                            "--with-dynamic-ffi"
+                            "--with-dynamic-modules"
+                            "--with-module=rawsock")
        #:build #f
        #:phases
        (modify-phases %standard-phases
@@ -286,6 +294,10 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
              ;; many places where our automatic patching misses them.  Therefore
              ;; we do the following, in this early (post-unpack) phase, to solve
              ;; the problem from its root.
+             (substitute* '("src/clisp-link.in"
+                            "src/unix.d"
+                            "src/makemake.in")
+               (("/bin/sh") (which "sh")))
              (substitute* (find-files "." "configure|Makefile")
                (("/bin/sh") "sh"))
              (substitute* '("src/clisp-link.in")
@@ -293,7 +305,7 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
              #t)))
        ;; Makefiles seem to have race conditions.
        #:parallel-build? #f))
-    (home-page "http://www.clisp.org/")
+    (home-page "https://clisp.sourceforge.io/")
     (synopsis "A Common Lisp implementation")
     (description
      "GNU CLISP is an implementation of ANSI Common Lisp.  Common Lisp is a
@@ -304,14 +316,14 @@ an interpreter, a compiler, a debugger, and much more.")
 (define-public sbcl
   (package
     (name "sbcl")
-    (version "1.4.4")
+    (version "1.4.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/sbcl/sbcl/" version "/sbcl-"
                            version "-source.tar.bz2"))
        (sha256
-        (base32 "1k6v5b8qv7vyxvh8asx6phf2hbapx5pp5p5j47hgnq123fwnh4fa"))
+        (base32 "120rnnz8367lk7ljqlf8xidm4b0d738xqsib4kq0q5ms5r7fzgvm"))
        (modules '((guix build utils)))
        (snippet
         ;; Add sbcl-bundle-systems to 'default-system-source-registry'.
@@ -321,16 +333,29 @@ an interpreter, a compiler, a debugger, and much more.")
            #t))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
-    ;; Bootstrap with CLISP.
     (native-inputs
-     `(("clisp" ,clisp)
+     ;; From INSTALL:
+     ;;     Supported build hosts are:
+     ;;       SBCL
+     ;;       CMUCL
+     ;;       CCL (formerly known as OpenMCL)
+     ;;       ABCL (recent versions only)
+     ;;       CLISP (only some versions: 2.44.1 is OK, 2.47 is not)
+     ;;       XCL
+     ;; CCL seems ideal then, but it unfortunately only builds reliably
+     ;; on some architectures.
+     `(,@(match (%current-system)
+           ((or "x86_64-linux" "i686-linux")
+            `(("ccl" ,ccl)))
+           (_
+            `(("clisp" ,clisp))))
        ("which" ,which)
        ("inetutils" ,inetutils)         ;for hostname(1)
        ("ed" ,ed)
-       ("texlive" ,texlive)
+       ("texlive" ,(texlive-union (list texlive-tex-texinfo)))
        ("texinfo" ,texinfo)))
     (arguments
-     '(#:modules ((guix build gnu-build-system)
+     `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-1))
        #:phases
@@ -382,20 +407,28 @@ an interpreter, a compiler, a debugger, and much more.")
                   (string-append "#+nil ;disabled by Guix\n" all))
                  (("\\(deftest grent\\.[12]" all)
                   (string-append "#+nil ;disabled by Guix\n" all))))))
+         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
+         ;; them in HOME, so it needs to be writeable.
+         (add-before 'build 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp") #t))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
-             (zero? (system* "sh" "make.sh" "clisp"
-                             (string-append "--prefix="
-                                            (assoc-ref outputs "out"))))))
+             (invoke "sh" "make.sh" ,@(match (%current-system)
+                                        ((or "x86_64-linux" "i686-linux")
+                                         `("ccl"))
+                                        (_
+                                         `("clisp")))
+                     (string-append "--prefix="
+                                    (assoc-ref outputs "out")))))
          (replace 'install
            (lambda _
-             (zero? (system* "sh" "install.sh"))))
+             (invoke "sh" "install.sh")))
          (add-after 'build 'build-doc
            (lambda _
              (with-directory-excursion "doc/manual"
-               (and  (zero? (system* "make" "info"))
-                     (zero? (system* "make" "dist"))))))
+               (and  (invoke "make" "info")
+                     (invoke "make" "dist")))))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -519,8 +552,13 @@ statistical profiler, a code coverage tool, and many other extensions.")
                (install-file kernel libdir)
                (install-file heap libdir)
 
-               (let ((dirs '("lib" "library" "examples" "contrib"
-                             "tools" "objc-bridge")))
+               (let ((dirs '("lib" "library" "examples" "tools" "objc-bridge"
+                             ,@(match (%current-system)
+                                ("x86_64-linux"
+                                 '("x86-headers64"))
+                                ("i686-linux"
+                                 '("x86-headers"))
+                                (_ '())))))
                  (for-each copy-recursively
                            dirs
                            (map (cut string-append libdir <>) dirs)))
@@ -531,13 +569,12 @@ statistical profiler, a code coverage tool, and many other extensions.")
                    (display
                     (string-append
                      "#!" bash "/bin/sh\n"
-                     "CCL_DEFAULT_DIRECTORY=" libdir "\n"
-                     "export CCL_DEFAULT_DIRECTORY\n"
-                     "exec " libdir kernel "\n"))))
+                     "export CCL_DEFAULT_DIRECTORY=" libdir "\n"
+                     "exec -a \"$0\" " libdir kernel " \"$@\"\n"))))
                (chmod wrapper #o755))
              #t)))))
     (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"))
-    (home-page "http://ccl.clozure.com/")
+    (home-page "https://ccl.clozure.com/")
     (synopsis "Common Lisp implementation")
     (description "Clozure CL (often called CCL for short) is a Common Lisp
 implementation featuring fast compilation speed, native threads, a precise,
@@ -548,56 +585,6 @@ interface.")
     (license (list license:lgpl2.1
                    license:clarified-artistic)))) ;TRIVIAL-LDAP package
 
-(define-public femtolisp
-  (let ((commit "68c5b1225572ecf2c52baf62f928063e5a30511b")
-        (revision "1"))
-    (package
-      (name "femtolisp")
-      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/JeffBezanson/femtolisp.git")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "04rnwllxnl86zw8c6pwxznn49bvkvh0f1lfliy085vjzvlq3rgja"))))
-      ;; See "utils.h" for supported systems. Upstream bug:
-      ;; https://github.com/JeffBezanson/femtolisp/issues/25
-      (supported-systems
-       (fold delete %supported-systems
-             '("armhf-linux" "mips64el-linux" "aarch64-linux")))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:make-flags '("CC=gcc" "release")
-         #:test-target "test"
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure) ; No configure script
-           (replace 'install ; Makefile has no 'install phase
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bin (string-append out "/bin")))
-                (install-file "flisp" bin)
-                #t)))
-           ;; The flisp binary is now available, run bootstrap to
-           ;; generate flisp.boot and afterwards runs make test.
-           (add-after 'install 'bootstrap-gen-and-test
-             (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bin (string-append out "/bin")))
-                (and
-                 (zero? (system* "./bootstrap.sh"))
-                 (install-file "flisp.boot" bin))))))))
-      (synopsis "Scheme-like lisp implementation")
-      (description
-       "@code{femtolisp} is a scheme-like lisp implementation with a
-simple, elegant Scheme dialect.  It is a lisp-1 with lexical scope.
-The core is 12 builtin special forms and 33 builtin functions.")
-      (home-page "https://github.com/JeffBezanson/femtolisp")
-      (license license:bsd-3))))
-
 (define-public lush2
   (package
     (name "lush2")
@@ -1009,8 +996,8 @@ productive, customizable lisp based systems.")
 ;; we expose the union of these as `sbcl-slynk'.  The following variable
 ;; describes the base module.
 (define sbcl-slynk-boot0
-  (let ((revision "1")
-        (commit "5706cd45d484a4f25795abe8e643509d31968aa2"))
+  (let ((revision "2")
+        (commit "cbf84c36c4eca8b032e3fd16177a7bc02df3ec4c"))
     (package
       (name "sbcl-slynk-boot0")
       (version (string-append "1.0.0-beta-" revision "." (string-take commit 7)))
@@ -1022,7 +1009,7 @@ productive, customizable lisp based systems.")
            (url "https://github.com/joaotavora/sly.git")
            (commit commit)))
          (sha256
-          (base32 "0h4gg3sndl2bf6jdnx9nrf14p9hhi43hagrl0f4v4l11hczl8w81"))
+          (base32 "13dyhsravn591p7g6is01mp2ynzjnnj7pwgi57r6xqmd4611y9vh"))
          (file-name (string-append "slynk-" version "-checkout"))
          (modules '((guix build utils)
                     (ice-9 ftw)))
@@ -1033,14 +1020,19 @@ productive, customizable lisp based systems.")
              (substitute* "slynk/slynk.asd"
                (("\\.\\./contrib")
                 "contrib")
-               (("\\(defsystem :slynk-util")
-                "(defsystem :slynk-util :depends-on (:slynk)"))
+               (("\\(defsystem :slynk/util")
+                "(defsystem :slynk/util :depends-on (:slynk)")
+               ((":depends-on \\(:slynk :slynk/util\\)")
+                ":depends-on (:slynk :slynk-util)"))
              (substitute* "contrib/slynk-trace-dialog.lisp"
                (("\\(slynk::reset-inspector\\)") ; Causes problems on load
                 "nil"))
              (substitute* "contrib/slynk-profiler.lisp"
                (("slynk:to-line")
                 "slynk-pprint-to-line"))
+             (substitute* "contrib/slynk-fancy-inspector.lisp"
+               (("slynk/util") "slynk-util")
+               ((":compile-toplevel :load-toplevel") ""))
              (rename-file "contrib" "slynk/contrib")
              ;; Move slynk's contents into the base directory for easier
              ;; access
@@ -1080,15 +1072,20 @@ multiple inspectors with independent history.")
     (arguments
      (substitute-keyword-arguments (package-arguments sbcl-slynk-boot0)
        ((#:asd-file _ "") "slynk.asd")
-       ((#:asd-system-name _ #f) #f)))))
+       ((#: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-arglists)
-    (name "sbcl-slynk-util")))
+    (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))
@@ -1098,7 +1095,10 @@ multiple inspectors with independent history.")
     (inherit sbcl-slynk-arglists)
     (name "sbcl-slynk-fancy-inspector")
     (inputs `(("slynk-util" ,sbcl-slynk-util)
-              ,@(package-inputs sbcl-slynk-arglists)))))
+              ,@(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))
@@ -1106,15 +1106,21 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-package-fu
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-package-fu")))
+    (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-arglists)
-    (name "sbcl-slynk-mrepl")))
+    (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))
@@ -1122,7 +1128,10 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-trace-dialog
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-trace-dialog")))
+    (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))
@@ -1130,7 +1139,10 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-profiler
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-profiler")))
+    (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))
@@ -1138,7 +1150,10 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-stickers
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-stickers")))
+    (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))
@@ -1146,7 +1161,10 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-indentation
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-indentation")))
+    (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))
@@ -1154,7 +1172,10 @@ multiple inspectors with independent history.")
 (define sbcl-slynk-retro
   (package
     (inherit sbcl-slynk-arglists)
-    (name "sbcl-slynk-retro")))
+    (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))
@@ -1442,3 +1463,2281 @@ compressor.  It works on data produced by @code{parse-js} to generate a
      `(("sbcl" ,sbcl)
        ("sbcl-cl-uglify-js" ,sbcl-cl-uglify-js)))
     (synopsis "JavaScript compressor")))
+
+(define-public confusion-mdl
+  (let* ((commit "12a055581fc262225272df43287dae48281900f5"))
+    (package
+      (name "confusion-mdl")
+      (version "0.2")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url (string-append "https://gitlab.com/emacsomancer/" name))
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1zi8kflzvwqg97ha1sa5xjisbjs5z1mvbpa772vfxiv5ksnpxp0d"))
+                (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                    ; there are no tests
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'build
+             (lambda* (#:key (make-flags '()) #:allow-other-keys)
+               (apply invoke "make" "CC=gcc" make-flags)))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin")))
+                 (install-file "mdli" bin)
+                 #t))))))
+      (native-inputs
+       `(("perl" ,perl)))
+      (inputs
+       `(("libgc" ,libgc)))
+      (synopsis "Interpreter for the MIT Design Language (MDL)")
+      (description "MDL (the MIT Design Language) is a descendant of Lisp.  It
+was originally developed in 1971 on the PDP-10 computer under the Incompatible
+Timesharing System (ITS) to provide high level language support for the
+Dynamic Modeling Group at MIT's Project MAC.  Infocom built the original
+PDP-10 Zork in MDL and their later ZIL (Zork Implementation Language) was
+based on a subset of MDL.  Confusion is a MDL interpreter that works just well
+enough to play the original mainframe Zork all the way through.")
+      (home-page "http://www.russotto.net/git/mrussotto/confusion/src/master/src/README")
+      (license license:gpl3+))))
+
+(define-public sbcl-cl-strings
+  (let ((revision "1")
+        (commit "c5c5cbafbf3e6181d03c354d66e41a4f063f00ae"))
+    (package
+      (name "sbcl-cl-strings")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/diogoalexandrefranco/cl-strings")
+               (commit commit)))
+         (sha256
+          (base32
+           "00754mfaqallj480lwd346nkfb6ra8pa8xcxcylf4baqn604zlmv"))
+         (file-name (string-append "cl-strings-" version "-checkout"))))
+      (build-system asdf-build-system/sbcl)
+      (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.")
+      (home-page "https://github.com/diogoalexandrefranco/cl-strings")
+      (license license:expat))))
+
+(define-public cl-strings
+  (sbcl-package->cl-source-package sbcl-cl-strings))
+
+(define-public ecl-cl-strings
+  (sbcl-package->ecl-package sbcl-cl-strings))
+
+(define-public sbcl-trivial-features
+  (package
+    (name "sbcl-trivial-features")
+    (version "0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/trivial-features/trivial-features/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0db1awn6jyhcfhyfvpjvfziprmq85cigf19mwbvaprhblydsag3c"))
+       (file-name (string-append "trivial-features-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (arguments '(#:tests? #f))
+    (home-page "http://cliki.net/trivial-features")
+    (synopsis "Ensures consistency of @code{*FEATURES*} in Common Lisp")
+    (description "Trivial-features ensures that @code{*FEATURES*} is
+consistent across multiple Common Lisp implementations.")
+    (license license:expat)))
+
+(define-public cl-trivial-features
+  (sbcl-package->cl-source-package sbcl-trivial-features))
+
+(define-public ecl-trivial-features
+  (sbcl-package->ecl-package sbcl-trivial-features))
+
+(define-public sbcl-hu.dwim.asdf
+  (let ((commit "170b0e4fdde3df0bc537327e7600575daac9e141"))
+    (package
+      (name "sbcl-hu.dwim.asdf")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/nixeagle/hu.dwim.asdf")
+           (commit commit)))
+         (sha256
+          (base32 "10ax7p8y6vjqxzcq125p62kf68zi455a65ysgk0kl1f2v839c33v"))
+         (file-name (git-file-name "hu.dwim.asdf" version))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://hub.darcs.net/hu.dwim/hu.dwim.asdf")
+      (synopsis "Extensions to ASDF")
+      (description "Various ASDF extensions such as attached test and
+documentation system, explicit development support, etc.")
+      (license license:public-domain))))
+
+(define-public cl-hu.dwim.asdf
+  (sbcl-package->cl-source-package sbcl-hu.dwim.asdf))
+
+(define-public ecl-hu.dwim.asdf
+  (sbcl-package->ecl-package sbcl-hu.dwim.asdf))
+
+(define-public sbcl-hu.dwim.stefil
+  (let ((commit "ab6d1aa8995878a1b66d745dfd0ba021090bbcf9"))
+    (package
+      (name "sbcl-hu.dwim.stefil")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://gitlab.common-lisp.net/xcvb/hu.dwim.stefil.git")
+           (commit commit)))
+         (sha256
+          (base32 "1d8yccw65zj3zh46cbi3x6nmn1dwdb76s9d0av035077mvyirqqp"))
+         (file-name (git-file-name "hu.dwim.stefil" version))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("asdf:cl-hu.dwim.asdf" ,sbcl-hu.dwim.asdf)))
+      (inputs
+       `(("sbcl-alexandria" ,sbcl-alexandria)))
+      (home-page "https://hub.darcs.net/hu.dwim/hu.dwim.stefil")
+      (synopsis "Simple test framework")
+      (description "Stefil is a simple test framework for Common Lisp,
+with a focus on interactive development.")
+      (license license:public-domain))))
+
+(define-public cl-hu.dwim.stefil
+  (sbcl-package->cl-source-package sbcl-hu.dwim.stefil))
+
+(define-public ecl-hu.dwim.stefil
+  (sbcl-package->ecl-package sbcl-hu.dwim.stefil))
+
+(define-public sbcl-babel
+  (package
+    (name "sbcl-babel")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/cl-babel/babel/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "189kgbmslh36xx0d2i1g6a7mcvjryvjzkdlnhilqy5xs7hkyqirq"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     `(("tests:cl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+    (inputs
+     `(("sbcl-alexandria" ,sbcl-alexandria)
+       ("sbcl-trivial-features" ,sbcl-trivial-features)))
+    (home-page "https://common-lisp.net/project/babel/")
+    (synopsis "Charset encoding and decoding library")
+    (description "Babel is a charset encoding and decoding library, not unlike
+GNU libiconv, but completely written in Common Lisp.")
+    (license license:expat)))
+
+(define-public cl-babel
+  (sbcl-package->cl-source-package sbcl-babel))
+
+(define-public ecl-babel
+  (sbcl-package->ecl-package sbcl-babel))
+
+(define-public sbcl-cl-yacc
+  (package
+    (name "sbcl-cl-yacc")
+    (version "0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jech/cl-yacc")
+             (commit (string-append "cl-yacc-" version))))
+       (sha256
+        (base32
+         "16946pzf8vvadnyfayvj8rbh4zjzw90h0azz2qk1mxrvhh5wklib"))
+       (file-name (string-append "cl-yacc-" version "-checkout"))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     `(#:asd-file "yacc.asd"
+       #:asd-system-name "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
+to AT&T Yacc, Berkeley Yacc, GNU Bison, Zebu, lalr.cl or lalr.scm.
+
+CL-Yacc uses the algorithm due to Aho and Ullman, which is the one also used
+by AT&T Yacc, Berkeley Yacc and Zebu.  It does not use the faster algorithm due
+to DeRemer and Pennello, which is used by Bison and lalr.scm (not lalr.cl).")
+    (home-page "https://www.irif.fr/~jch//software/cl-yacc/")
+    (license license:expat)))
+
+(define-public cl-yacc
+  (sbcl-package->cl-source-package sbcl-cl-yacc))
+
+(define-public ecl-cl-yacc
+  (sbcl-package->ecl-package sbcl-cl-yacc))
+
+(define-public sbcl-jpl-util
+  (let ((commit "0311ed374e19a49d43318064d729fe3abd9a3b62"))
+    (package
+      (name "sbcl-jpl-util")
+      (version "20151005")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               ;; Quicklisp uses this fork.
+               (url "https://github.com/hawkir/cl-jpl-util")
+               (commit commit)))
+         (file-name
+          (git-file-name "jpl-util" version))
+         (sha256
+          (base32
+           "0nc0rk9n8grkg3045xsw34whmcmddn2sfrxki4268g7kpgz0d2yz"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Collection of Common Lisp utility functions and macros")
+      (description
+       "@command{cl-jpl-util} is a collection of Common Lisp utility functions
+and macros, primarily for software projects written in CL by the author.")
+      (home-page "https://www.thoughtcrime.us/software/cl-jpl-util/")
+      (license license:isc))))
+
+(define-public cl-jpl-util
+  (sbcl-package->cl-source-package sbcl-jpl-util))
+
+(define-public ecl-jpl-util
+  (sbcl-package->ecl-package sbcl-jpl-util))
+
+(define-public sbcl-jpl-queues
+  (package
+    (name "sbcl-jpl-queues")
+    (version "0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://www.thoughtcrime.us/software/jpl-queues/jpl-queues-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1wvvv7j117h9a42qaj1g4fh4mji28xqs7s60rn6d11gk9jl76h96"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("jpl-util" ,sbcl-jpl-util)
+       ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+    (arguments
+     ;; Tests seem to be broken.
+     `(#:tests? #f))
+    (synopsis "Common Lisp library implementing a few different kinds of queues")
+    (description
+     "A Common Lisp library implementing a few different kinds of queues:
+
+@itemize
+@item Bounded and unbounded FIFO queues.
+@item Lossy bounded FIFO queues that drop elements when full.
+@item Unbounded random-order queues that use less memory than unbounded FIFO queues.
+@end itemize
+
+Additionally, a synchronization wrapper is provided to make any queue
+conforming to the @command{jpl-queues} API thread-safe for lightweight
+multithreading applications.  (See Calispel for a more sophisticated CL
+multithreaded message-passing library with timeouts and alternation among
+several blockable channels.)")
+    (home-page "https://www.thoughtcrime.us/software/jpl-queues/")
+    (license license:isc)))
+
+(define-public cl-jpl-queues
+  (sbcl-package->cl-source-package sbcl-jpl-queues))
+
+(define-public ecl-jpl-queues
+  (sbcl-package->ecl-package sbcl-jpl-queues))
+
+(define-public sbcl-eos
+  (let ((commit "b0faca83781ead9a588661e37bd47f90362ccd94"))
+    (package
+      (name "sbcl-eos")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/adlai/Eos")
+               (commit commit)))
+         (sha256
+          (base32
+           "1bq8cfg087iyxmxi1mwgx5cfgy3b8ydrf81xljcis8qbgb2vszph"))
+         (file-name (git-file-name "eos" version))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Unit Testing for Common Lisp")
+      (description
+       "Eos was a unit testing library for Common Lisp.
+It began as a fork of FiveAM; however, FiveAM development has continued, while
+that of Eos has not.  Thus, Eos is now deprecated in favor of FiveAM.")
+      (home-page "https://github.com/adlai/Eos")
+      (license license:expat))))
+
+(define-public cl-eos
+  (sbcl-package->cl-source-package sbcl-eos))
+
+(define-public ecl-eos
+  (sbcl-package->ecl-package sbcl-eos))
+
+(define-public sbcl-esrap
+  (let ((commit "133be8b05c2aae48696fe5b739eea2fa573fa48d"))
+    (package
+      (name "sbcl-esrap")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/nikodemus/esrap")
+               (commit commit)))
+         (sha256
+          (base32
+           "02d5clihsdryhf7pix8c5di2571fdsffh75d40fkzhws90r5mksl"))
+         (file-name (git-file-name "esrap" version))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("eos" ,sbcl-eos)))            ;For testing only.
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)))
+      (synopsis "Common Lisp packrat parser")
+      (description
+       "A packrat parser for Common Lisp.
+In addition to regular Packrat / Parsing Grammar / TDPL features ESRAP supports:
+
+@itemize
+@item dynamic redefinition of nonterminals
+@item inline grammars
+@item semantic predicates
+@item introspective facilities (describing grammars, tracing, setting breaks)
+@end itemize\n")
+      (home-page "https://nikodemus.github.io/esrap/")
+      (license license:expat))))
+
+(define-public cl-esrap
+  (sbcl-package->cl-source-package sbcl-esrap))
+
+(define-public ecl-esrap
+  (sbcl-package->ecl-package sbcl-esrap))
+
+(define-public sbcl-split-sequence
+  (package
+    (name "sbcl-split-sequence")
+    (version "1.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sharplispers/split-sequence")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "0c3zp6b7fmmp93sfhq112ind4zkld49ycw68z409xpnz3gc0wpf0"))
+       (file-name (git-file-name "split-sequence" version))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     ;; TODO: Tests seem to be broken.
+     ;; https://github.com/sharplispers/split-sequence/issues/8
+     `(#:tests? #f))
+    (synopsis "Member of the Common Lisp Utilities family of programs")
+    (description
+     "Splits sequence into a list of subsequences delimited by objects
+satisfying the test.")
+    (home-page "https://cliki.net/split-sequence")
+    (license license:expat)))
+
+(define-public cl-split-sequence
+  (sbcl-package->cl-source-package sbcl-split-sequence))
+
+(define-public ecl-split-sequence
+  (sbcl-package->ecl-package sbcl-split-sequence))
+
+(define-public sbcl-html-encode
+  (package
+    (name "sbcl-html-encode")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://beta.quicklisp.org/archive/html-encode/2010-10-06/html-encode-"
+             version ".tgz"))
+       (sha256
+        (base32
+         "06mf8wn95yf5swhmzk4vp0xr4ylfl33dgfknkabbkd8n6jns8gcf"))
+       (file-name (string-append "colorize" version "-checkout"))))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "Common Lisp library for encoding text in various web-savvy encodings")
+    (description
+     "A library for encoding text in various web-savvy encodings.")
+    (home-page "http://quickdocs.org/html-encode/")
+    (license license:expat)))
+
+(define-public cl-html-encode
+  (sbcl-package->cl-source-package sbcl-html-encode))
+
+(define-public ecl-html-encode
+  (sbcl-package->ecl-package sbcl-html-encode))
+
+(define-public sbcl-colorize
+  (let ((commit "ea676b584e0899cec82f21a9e6871172fe3c0eb5"))
+    (package
+      (name "sbcl-colorize")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kingcons/colorize")
+               (commit commit)))
+         (sha256
+          (base32
+           "1pdg4kiaczmr3ivffhirp7m3lbr1q27rn7dhaay0vwghmi31zcw9"))
+         (file-name (git-file-name "colorize" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("split-sequence" ,sbcl-split-sequence)
+         ("html-encode" ,sbcl-html-encode)))
+      (synopsis "Common Lisp for syntax highlighting")
+      (description
+       "@command{colorize} is a Lisp library for syntax highlighting
+supporting the following languages: Common Lisp, Emacs Lisp, Scheme, Clojure,
+C, C++, Java, Python, Erlang, Haskell, Objective-C, Diff, Webkit.")
+      (home-page "https://github.com/kingcons/colorize")
+      ;; TODO: Missing license?
+      (license license:expat))))
+
+(define-public cl-colorize
+  (sbcl-package->cl-source-package sbcl-colorize))
+
+(define-public ecl-colorize
+  (sbcl-package->ecl-package sbcl-colorize))
+
+(define-public sbcl-3bmd
+  (let ((commit "192ea13435b605a96ef607df51317056914cabbd"))
+    (package
+      (name "sbcl-3bmd")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/3b/3bmd")
+               (commit commit)))
+         (sha256
+          (base32
+           "1rgv3gi7wf963ikmmpk132wgn0icddf226gq3bmcnk1fr3v9gf2f"))
+         (file-name (git-file-name "3bmd" version))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; FIXME: We need to specify the name because the build-system thinks
+       ;; "3" is a version marker.
+       `(#:asd-system-name "3bmd"))
+      (inputs
+       `(("esrap" ,sbcl-esrap)
+         ("split-sequence" ,sbcl-split-sequence)))
+      (synopsis "Markdown processor in Command Lisp using esrap parser")
+      (description
+       "Common Lisp Markdown -> HTML converter, using @command{esrap} for
+parsing, and grammar based on @command{peg-markdown}.")
+      (home-page "https://github.com/3b/3bmd")
+      (license license:expat))))
+
+(define-public cl-3bmd
+  (sbcl-package->cl-source-package sbcl-3bmd))
+
+(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")
+    (version "0.7.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/edicl/cl-fad/")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "1l1qmk9z57q84bz5r04sxsksggsnd7dgkxlybzh9imz6ma7sm52m"))
+       (file-name (string-append "cl-fad" version "-checkout"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+    (synopsis "Portable pathname library for Common Lisp")
+    (description
+     "CL-FAD (for \"Files and Directories\") is a thin layer atop Common
+Lisp's standard pathname functions.  It is intended to provide some
+unification between current CL implementations on Windows, OS X, Linux, and
+Unix.  Most of the code was written by Peter Seibel for his book Practical
+Common Lisp.")
+    (home-page "https://edicl.github.io/cl-fad/")
+    (license license:bsd-2)))
+
+(define-public cl-fad
+  (sbcl-package->cl-source-package sbcl-cl-fad))
+
+(define-public ecl-cl-fad
+  (sbcl-package->ecl-package sbcl-cl-fad))
+
+(define-public sbcl-rt
+  (package
+    (name "sbcl-rt")
+    (version "1990.12.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://beta.quicklisp.org/archive/rt/2010-10-06/rt-"
+                           "20101006-git" ".tgz"))
+       (sha256
+        (base32
+         "1jncar0xwkqk8yrc2dln389ivvgzs7ijdhhs3zpfyi5d21f0qa1v"))))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "MIT Regression Tester")
+    (description
+     "RT provides a framework for writing regression test suites.")
+    (home-page "https://github.com/sharplispers/nibbles")
+    (license license:unlicense)))
+
+(define-public cl-rt
+  (sbcl-package->cl-source-package sbcl-rt))
+
+(define-public ecl-rt
+  (sbcl-package->ecl-package sbcl-rt))
+
+(define-public sbcl-nibbles
+  (package
+    (name "sbcl-nibbles")
+    (version "0.14")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sharplispers/nibbles/")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "1v7qfgpvdr6nz7v63dj69d26dis0kff3rd8xamr1llfdvza2pm8f"))
+       (file-name (git-file-name "nibbles" version))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     ;; Tests only.
+     `(("rt" ,sbcl-rt)))
+    (synopsis "Common Lisp library for accessing octet-addressed blocks of data")
+    (description
+     "When dealing with network protocols and file formats, it's common to
+have to read or write 16-, 32-, or 64-bit datatypes in signed or unsigned
+flavors.  Common Lisp sort of supports this by specifying :element-type for
+streams, but that facility is underspecified and there's nothing similar for
+read/write from octet vectors.  What most people wind up doing is rolling their
+own small facility for their particular needs and calling it a day.
+
+This library attempts to be comprehensive and centralize such
+facilities.  Functions to read 16-, 32-, and 64-bit quantities from octet
+vectors in signed or unsigned flavors are provided; these functions are also
+SETFable.  Since it's sometimes desirable to read/write directly from streams,
+functions for doing so are also provided.  On some implementations,
+reading/writing IEEE singles/doubles (i.e. single-float and double-float) will
+also be supported.")
+    (home-page "https://github.com/sharplispers/nibbles")
+    (license license:bsd-3)))
+
+(define-public cl-nibbles
+  (sbcl-package->cl-source-package sbcl-nibbles))
+
+(define-public ecl-nibbles
+  (sbcl-package->ecl-package sbcl-nibbles))
+
+(define-public sbcl-ironclad
+  (package
+    (name "sbcl-ironclad")
+    (version "0.42")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sharplispers/ironclad/")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "1wjcb9vpybxjrmch7f7s78a5abxmnknbd4fl49dl5lz8a3fc8vf0"))
+       (file-name (string-append "ironblad" version "-checkout"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     ;; Tests only.
+     `(("rt" ,sbcl-rt)))
+    (inputs
+     `(("flexi-streams" ,sbcl-flexi-streams)
+       ("nibbles" ,sbcl-nibbles)))
+    (synopsis "Cryptographic toolkit written in Common Lisp")
+    (description
+     "Ironclad is a cryptography library written entirely in Common Lisp.
+It includes support for several popular ciphers, digests, MACs and public key
+cryptography algorithms.  For several implementations that support Gray
+streams, support is included for convenient stream wrappers.")
+    (home-page "https://github.com/sharplispers/ironclad")
+    (license license:bsd-3)))
+
+(define-public cl-ironclad
+  (sbcl-package->cl-source-package sbcl-ironclad))
+
+(define-public ecl-ironclad
+  (sbcl-package->ecl-package sbcl-ironclad))
+
+(define-public sbcl-named-readtables
+  (let ((commit "4dfb89fa1af6b305b6492b8af042f5190c11e9fc")
+        (revision "1"))
+    (package
+      (name "sbcl-named-readtables")
+      (version (string-append "0.9-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/melisgl/named-readtables.git")
+               (commit commit)))
+         (sha256
+          (base32 "083kgh5462iqbb4px6kq8s7sggvpvkm36hx4qi9rnaw53b6ilqkk"))
+         (file-name (git-file-name "named-readtables" version))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; Tests seem to be broken.
+       `(#:tests? #f))
+      (home-page "https://github.com/melisgl/named-readtables/")
+      (synopsis "Library that creates a namespace for named readtables")
+      (description "Named readtables is a library that creates a namespace for
+named readtables, which is akin to package namespacing in Common Lisp.")
+      (license license:bsd-3))))
+
+(define-public cl-named-readtables
+  (sbcl-package->cl-source-package sbcl-named-readtables))
+
+(define-public ecl-named-readtables
+  (sbcl-package->ecl-package sbcl-named-readtables))
+
+(define-public sbcl-pythonic-string-reader
+  (let ((commit "47a70ba1e32362e03dad6ef8e6f36180b560f86a"))
+    (package
+      (name "sbcl-pythonic-string-reader")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/smithzvk/pythonic-string-reader/")
+               (commit commit)))
+         (sha256
+          (base32 "1b5iryqw8xsh36swckmz8rrngmc39k92si33fgy5pml3n9l5rq3j"))
+         (file-name (git-file-name "pythonic-string-reader" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("named-readtables" ,sbcl-named-readtables)))
+      (home-page "https://github.com/smithzvk/pythonic-string-reader")
+      (synopsis "Read table modification inspired by Python's three quote strings")
+      (description "This piece of code sets up some reader macros that make it
+simpler to input string literals which contain backslashes and double quotes
+This is very useful for writing complicated docstrings and, as it turns out,
+writing code that contains string literals that contain code themselves.")
+      (license license:bsd-3))))
+
+(define-public cl-pythonic-string-reader
+  (sbcl-package->cl-source-package sbcl-pythonic-string-reader))
+
+(define-public ecl-pythonic-string-reader
+  (sbcl-package->ecl-package sbcl-pythonic-string-reader))
+
+(define-public sbcl-slime-swank
+  (package
+    (name "sbcl-slime-swank")
+    (version "2.22")
+    (source
+     (origin
+       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             ;; (url "https://github.com/slime/slime/")
+             ;; (commit "841f61467c03dea9f38ff9d5af0e21a8aa29e8f7")
+             ;; REVIEW: Do we need sionescu's patch to package SWANK?
+             (url "https://github.com/sionescu/slime/")
+             ;; (commit "swank-asdf")
+             (commit "2f7c3fcb3ac7d50d844d5c6ca0e89b52a45e1d3a")))
+       (sha256
+        (base32
+         ;; "065bc4y6iskazdfwlhgcjlzg9bi2hyjbhmyjw3461506pgkj08vi"
+         "0pkmg94wn4ii1zhlrncn44mdc5i6c5v0i9gbldx4dwl2yy7ibz5c"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "contrib/swank-listener-hooks.lisp"
+             ((":compile-toplevel :load-toplevel ") ""))
+           (substitute* "contrib/swank-presentations.lisp"
+             ((":compile-toplevel :load-toplevel ") ""))
+           (substitute* "swank.asd"
+             ((":file \"packages\".*" all)
+              (string-append all "(:file \"swank-loader-asdf\")\n")))
+           (substitute* "swank-loader-asdf.lisp"
+             ((":common-lisp" all) (string-append all " #:asdf")))
+           #t))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     `(#:asd-file "swank.asd"
+       #:asd-system-name "swank"))
+    (home-page "https://github.com/slime/slime")
+    (synopsis "Common Lisp Swank server")
+    (description
+     "This is only useful if you want to start a Swank server in a Lisp
+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-mgl-pax
+  (let ((commit "818448418d6b9de74620f606f5b23033c6082769"))
+    (package
+      (name "sbcl-mgl-pax")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/melisgl/mgl-pax")
+               (commit commit)))
+         (sha256
+          (base32
+           "1p97zfkh130bdxqqxwaw2j9psv58751wakx7czbfpq410lg7dd7i"))
+         (file-name (git-file-name "mgl-pax" version))))
+      (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)
+         ("swank" ,sbcl-slime-swank)))
+      (synopsis "Exploratory programming environment and documentation generator")
+      (description
+       "PAX provides an extremely poor man's Explorable Programming
+environment.  Narrative primarily lives in so called sections that mix markdown
+docstrings with references to functions, variables, etc, all of which should
+probably have their own docstrings.
+
+The primary focus is on making code easily explorable by using SLIME's
+@command{M-.} (@command{slime-edit-definition}).  See how to enable some
+fanciness in Emacs Integration.  Generating documentation from sections and all
+the referenced items in Markdown or HTML format is also implemented.
+
+With the simplistic tools provided, one may accomplish similar effects as with
+Literate Programming, but documentation is generated from code, not vice versa
+and there is no support for chunking yet.  Code is first, code must look
+pretty, documentation is code.")
+      (home-page "http://quotenil.com/")
+      (license license:expat))))
+
+(define-public cl-mgl-pax
+  (sbcl-package->cl-source-package sbcl-mgl-pax))
+
+(define-public ecl-mgl-pax
+  (sbcl-package->ecl-package sbcl-mgl-pax))
+
+(define-public sbcl-lisp-unit
+  (let ((commit "89653a232626b67400bf9a941f9b367da38d3815"))
+    (package
+      (name "sbcl-lisp-unit")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/OdonataResearchLLC/lisp-unit")
+               (commit commit)))
+         (sha256
+          (base32
+           "0p6gdmgr7p383nvd66c9y9fp2bjk4jx1lpa5p09g43hr9y9pp9ry"))
+         (file-name (git-file-name "lisp-unit" version))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Common Lisp Test framework inspired by JUnit to be simple of use")
+      (description
+       "@command{lisp-unit} is a Common Lisp library that supports unit
+testing.  It is an extension of the library written by Chris Riesbeck.")
+      (home-page "https://github.com/OdonataResearchLLC/lisp-unit")
+      (license license:expat))))
+
+(define-public cl-lisp-unit
+  (sbcl-package->cl-source-package sbcl-lisp-unit))
+
+(define-public ecl-lisp-unit
+  (sbcl-package->ecl-package sbcl-lisp-unit))
+
+(define-public sbcl-anaphora
+  (package
+    (name "sbcl-anaphora")
+    (version "0.9.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tokenrove/anaphora")
+             (commit version)))
+       (sha256
+        (base32
+         "19wfrk3asimznkli0x2rfy637hwpdgqyvwj3vhq9x7vjvyf5vv6x"))
+       (file-name (git-file-name "anaphora" version))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     `(("rt" ,sbcl-rt)))
+    (synopsis "The anaphoric macro collection from Hell")
+    (description
+     "Anaphora is the anaphoric macro collection from Hell: it includes many
+new fiends in addition to old friends like @command{aif} and
+@command{awhen}.")
+    (home-page "https://github.com/tokenrove/anaphora")
+    (license license:public-domain)))
+
+(define-public cl-anaphora
+  (sbcl-package->cl-source-package sbcl-anaphora))
+
+(define-public ecl-anaphora
+  (sbcl-package->ecl-package sbcl-anaphora))
+
+(define-public sbcl-lift
+  (let ((commit "7d49a66c62759535624037826891152223d4206c"))
+    (package
+      (name "sbcl-lift")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gwkkwg/lift")
+               (commit commit)))
+         (sha256
+          (base32
+           "127v5avpz1i4m0lkaxqrq8hrl69rdazqaxf6s8awf0nd7wj2g4dp"))
+         (file-name (git-file-name "lift" version))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Don't keep the bundled website
+          `(begin
+             (delete-file-recursively "website")
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; The tests require a debugger, but we run with the debugger disabled.
+       '(#:tests? #f))
+      (synopsis "LIsp Framework for Testing")
+      (description
+       "The LIsp Framework for Testing (LIFT) is a unit and system test tool for LISP.
+Though inspired by SUnit and JUnit, it's built with Lisp in mind.  In LIFT,
+testcases are organized into hierarchical testsuites each of which can have
+its own fixture.  When run, a testcase can succeed, fail, or error.  LIFT
+supports randomized testing, benchmarking, profiling, and reporting.")
+      (home-page "https://github.com/gwkkwg/lift")
+      (license license:expat))))
+
+(define-public cl-lift
+  (sbcl-package->cl-source-package sbcl-lift))
+
+(define-public ecl-lift
+  (sbcl-package->ecl-package sbcl-lift))
+
+(define-public sbcl-let-plus
+  (let ((commit "5f14af61d501ecead02ec6b5a5c810efc0c9fdbb"))
+    (package
+      (name "sbcl-let-plus")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/let-plus")
+               (commit commit)))
+         (sha256
+          (base32
+           "0i050ca2iys9f5mb7dgqgqdxfnc3b0rnjdwv95sqd490vkiwrsaj"))
+         (file-name (git-file-name "let-plus" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("anaphora" ,sbcl-anaphora)))
+      (native-inputs
+       `(("lift" ,sbcl-lift)))
+      (synopsis "Destructuring extension of let*")
+      (description
+       "This library implements the let+ macro, which is a dectructuring
+extension of let*.  It features:
+
+@itemize
+@item Clean, consistent syntax and small implementation (less than 300 LOC,
+not counting tests)
+@item Placeholder macros allow editor hints and syntax highlighting
+@item @command{&ign} for ignored values (in forms where that makes sense)
+@item Very easy to extend
+@end itemize\n")
+      (home-page "https://github.com/sharplispers/let-plus")
+      (license license:boost1.0))))
+
+(define-public cl-let-plus
+  (sbcl-package->cl-source-package sbcl-let-plus))
+
+(define-public ecl-let-plus
+  (sbcl-package->ecl-package sbcl-let-plus))
+
+(define-public sbcl-cl-colors
+  (let ((commit "827410584553f5c717eec6182343b7605f707f75"))
+    (package
+      (name "sbcl-cl-colors")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tpapp/cl-colors")
+               (commit commit)))
+         (sha256
+          (base32
+           "0l446lday4hybsm9bq3jli97fvv8jb1d33abg79vbylpwjmf3y9a"))
+         (file-name (git-file-name "cl-colors" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("let-plus" ,sbcl-let-plus)))
+      (synopsis "Simple color library for Common Lisp")
+      (description
+       "This is a very simple color library for Common Lisp, providing
+
+@itemize
+@item Types for representing colors in HSV and RGB spaces.
+@item Simple conversion functions between the above types (and also
+hexadecimal representation for RGB).
+@item Some predefined colors (currently X11 color names – of course the
+library does not depend on X11).Because color in your terminal is nice.
+@end itemize
+
+This library is no longer supported by its author.")
+      (home-page "https://github.com/tpapp/cl-colors")
+      (license license:boost1.0))))
+
+(define-public cl-colors
+  (sbcl-package->cl-source-package sbcl-cl-colors))
+
+(define-public ecl-cl-colors
+  (sbcl-package->ecl-package sbcl-cl-colors))
+
+(define-public sbcl-cl-ansi-text
+  (let ((commit "53badf7878f27f22f2d4a2a43e6df458e43acbe9"))
+    (package
+      (name "sbcl-cl-ansi-text")
+      (version (git-version "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pnathan/cl-ansi-text")
+               (commit commit)))
+         (sha256
+          (base32
+           "11i27n0dbz5lmygiw65zzr8lx0rac6b6yysqranphn31wls6ja3v"))
+         (file-name (git-file-name "cl-ansi-text" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-colors" ,sbcl-cl-colors)))
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
+      (synopsis "ANSI terminal color implementation for Common Lisp")
+      (description
+       "@command{cl-ansi-text} provides utilities which enable printing to an
+ANSI terminal with colored text.  It provides the macro @command{with-color}
+which causes everything printed in the body to be displayed with the provided
+color.  It further provides functions which will print the argument with the
+named color.")
+      (home-page "https://github.com/pnathan/cl-ansi-text")
+      ;; REVIEW: The actual license is LLGPL.  Should we add it to Guix?
+      (license license:lgpl3+))))
+
+(define-public cl-ansi-text
+  (sbcl-package->cl-source-package sbcl-cl-ansi-text))
+
+(define-public ecl-cl-ansi-text
+  (sbcl-package->ecl-package sbcl-cl-ansi-text))
+
+(define-public sbcl-prove-asdf
+  (let ((commit "4f9122bd393e63c5c70c1fba23070622317cfaa0"))
+    (package
+      (name "sbcl-prove-asdf")
+      (version (git-version "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/prove")
+               (commit commit)))
+         (sha256
+          (base32
+           "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")
+      (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}.
+@command{prove} is yet another unit testing framework for Common Lisp.  The
+advantages of @command{prove} are:
+
+@itemize
+@item Various simple functions for testing and informative error messages
+@item ASDF integration
+@item Extensible test reporters
+@item Colorizes the report if it's available (note for SLIME)
+@item Reports test durations
+@end itemize\n")))
+
+(define-public cl-prove
+  (sbcl-package->cl-source-package sbcl-prove))
+
+(define-public ecl-prove
+  (sbcl-package->ecl-package sbcl-prove))
+
+(define-public sbcl-proc-parse
+  (let ((commit "ac3636834d561bdc2686c956dbd82494537285fd"))
+    (package
+      (name "sbcl-proc-parse")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/fukamachi/proc-parse")
+               (commit commit)))
+         (sha256
+          (base32
+           "06rnl0h4cx6xv2wj3jczmmcxqn2703inmmvg1s4npbghmijsybfh"))
+         (file-name (git-file-name "proc-parse" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("babel" ,sbcl-babel)))
+      (native-inputs
+       `(("prove" ,sbcl-prove)
+         ("prove-asdf" ,sbcl-prove-asdf)))
+      (arguments
+       ;; TODO: Tests don't find "proc-parse-test", why?
+       `(#:tests? #f))
+      (synopsis "Procedural vector parser")
+      (description
+       "This is a string/octets parser library for Common Lisp with speed and
+readability in mind.  Unlike other libraries, the code is not a
+pattern-matching-like, but a char-by-char procedural parser.")
+      (home-page "https://github.com/fukamachi/proc-parse")
+      (license license:bsd-2))))
+
+(define-public cl-proc-parse
+  (sbcl-package->cl-source-package sbcl-proc-parse))
+
+(define-public ecl-proc-parse
+  (sbcl-package->ecl-package sbcl-proc-parse))
+
+(define-public sbcl-parse-float
+  (let ((commit "2aae569f2a4b2eb3bfb5401a959425dcf151b09c"))
+    (package
+      (name "sbcl-parse-float")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/soemraws/parse-float")
+               (commit commit)))
+         (sha256
+          (base32
+           "08xw8cchhmqcc0byng69m3f5a2izc9y2290jzz2k0qrbibp1fdk7"))
+         (file-name (git-file-name "proc-parse" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("babel" ,sbcl-babel)))
+      (native-inputs
+       `(("prove" ,sbcl-prove)
+         ("prove-asdf" ,sbcl-prove-asdf)))
+      (arguments
+       ;; TODO: Tests don't find "proc-parse-test", why?
+       `(#:tests? #f))
+      (synopsis "Parse a floating point value from a string in Common Lisp")
+      (description
+       "This package exports the following function to parse floating-point
+values from a string in Common Lisp.")
+      (home-page "https://github.com/soemraws/parse-float")
+      (license license:public-domain))))
+
+(define-public cl-parse-float
+  (sbcl-package->cl-source-package sbcl-parse-float))
+
+(define-public ecl-parse-float
+  (sbcl-package->ecl-package sbcl-parse-float))
+
+(define-public sbcl-ascii-strings
+  (let ((revision "1")
+        (changeset "5048480a61243e6f1b02884012c8f25cdbee6d97"))
+    (package
+      (name "sbcl-ascii-strings")
+      (version (string-append "0-" revision "." (string-take changeset 7)))
+      (source
+       (origin
+         (method hg-fetch)
+         (uri (hg-reference
+               (url "https://bitbucket.org/vityok/cl-string-match/")
+               (changeset changeset)))
+         (sha256
+          (base32
+           "01wn5qx562w43ssy92xlfgv79w7p0nv0wbl76mpmba131n9ziq2y"))
+         (file-name (git-file-name "cl-string-match" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("babel" ,sbcl-babel)))
+      (arguments
+       `(#:asd-file "ascii-strings.asd"))
+      (synopsis "Operations on ASCII strings")
+      (description
+       "Operations on ASCII strings.  Essentially this can be any kind of
+single-byte encoded strings.")
+      (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))
+
+(define-public ecl-cl-string-match
+  (sbcl-package->ecl-package sbcl-cl-string-match))
+
+(define-public sbcl-ptester
+  (package
+    (name "sbcl-ptester")
+    (version "20160929")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://beta.quicklisp.org/archive/ptester/"
+                           (date->string (string->date version "~Y~m~d") "~Y-~m-~d")
+                           "/ptester-"
+                           version
+                           "-git.tgz"))
+       (sha256
+        (base32
+         "04rlq1zljhxc65pm31bah3sq3as24l0sdivz440s79qlnnyh13hz"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "http://quickdocs.org/ptester/")
+    (synopsis "Portable test harness package")
+    (description
+     "@command{ptester} is a portable testing framework based on Franz's
+tester module.")
+    (license license:lgpl3+)))
+
+(define-public cl-ptester
+  (sbcl-package->cl-source-package sbcl-ptester))
+
+(define-public ecl-ptester
+  (sbcl-package->ecl-package sbcl-ptester))
+
+(define-public sbcl-puri
+  (package
+    (name "sbcl-puri")
+    (version "20180228")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://beta.quicklisp.org/archive/puri/"
+                           (date->string (string->date version "~Y~m~d") "~Y-~m-~d")
+                           "/puri-"
+                           version
+                           "-git.tgz"))
+       (sha256
+        (base32
+         "1s4r5adrjy5asry45xbcbklxhdjydvf6n55z897nvyw33bigrnbz"))))
+    (build-system asdf-build-system/sbcl)
+    ;; REVIEW: Webiste down?
+    (native-inputs
+     `(("ptester" ,sbcl-ptester)))
+    (home-page "http://files.kpe.io/puri/")
+    (synopsis "Portable URI Library")
+    (description
+     "This is portable Universal Resource Identifier library for Common Lisp
+programs.  It parses URI according to the RFC 2396 specification")
+    (license license:lgpl3+)))
+
+(define-public cl-puri
+  (sbcl-package->cl-source-package sbcl-puri))
+
+(define-public ecl-puri
+  (sbcl-package->ecl-package sbcl-puri))
+
+(define-public sbcl-queues
+  (let ((commit "47d4da65e9ea20953b74aeeab7e89a831b66bc94"))
+    (package
+      (name "sbcl-queues")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/oconnore/queues")
+               (commit commit)))
+         (file-name (git-file-name "queues" version))
+         (sha256
+          (base32
+           "0wdhfnzi4v6d97pggzj2aw55si94w4327br94jrmyvwf351wqjvv"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/oconnore/queues")
+      (synopsis "Common Lisp queue library")
+      (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
+  (sbcl-package->cl-source-package sbcl-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
+  (package
+    (name "sbcl-cffi-bootstrap")
+    (version "0.19.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/cffi/cffi/archive/v"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "07bc3c1fbfx17wgrvx6bh9byilfzfwv5n597cfdllm0vzwvbmiyk"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("libffi" ,libffi)
+       ("alexandria" ,sbcl-alexandria)
+       ("babel" ,sbcl-babel)
+       ("trivial-features" ,sbcl-trivial-features)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "libffi/libffi.lisp"
+               (("libffi.so.6" all) (string-append
+                                     (assoc-ref inputs "libffi")
+                                     "/lib/" all)))
+             (substitute* "toolchain/c-toolchain.lisp"
+               (("\"cc\"") (format #f "~S" (which "gcc")))))))
+       #:asd-system-name "cffi"
+       #:tests? #f))
+    (home-page "https://common-lisp.net/project/cffi/")
+    (synopsis "Common Foreign Function Interface for Common Lisp")
+    (description "The Common Foreign Function Interface (CFFI)
+purports to be a portable foreign function interface for Common Lisp.
+The CFFI library is composed of a Lisp-implementation-specific backend
+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 sbcl-cl-sqlite
+  (let ((commit "c738e66d4266ef63a1debc4ef4a1b871a068c112"))
+    (package
+      (name "sbcl-cl-sqlite")
+      (version (git-version "0.2" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/dmitryvk/cl-sqlite")
+               (commit commit)))
+         (file-name (git-file-name "cl-sqlite" version))
+         (sha256
+          (base32
+           "1ng45k1hdb84sqjryrfx93g66bsbybmpy301wd0fdybnc5jzr36q"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("iterate" ,sbcl-iterate)
+         ("cffi" ,sbcl-cffi)
+         ("sqlite" ,sqlite)))
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)))
+      (arguments
+       `(#:tests? #f                    ; Upstream seems to have issues with tests: https://github.com/dmitryvk/cl-sqlite/issues/7
+         #:asd-file "sqlite.asd"
+         #:asd-system-name "sqlite"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "sqlite-ffi.lisp"
+                 (("libsqlite3" all) (string-append
+                                      (assoc-ref inputs "sqlite")"/lib/" all))))))))
+      (home-page "https://common-lisp.net/project/cl-sqlite/")
+      (synopsis "Common Lisp binding for SQLite")
+      (description
+       "The @command{cl-sqlite} package is an interface to the SQLite embedded
+relational database engine.")
+      (license license:public-domain))))
+
+(define-public sbcl-parenscript
+  (let ((commit "061d8e286c81c3f45c84fb2b11ee7d83f590a8f8"))
+    (package
+      (name "sbcl-parenscript")
+      (version (git-version "2.6" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.common-lisp.net/parenscript/parenscript")
+               (commit commit)))
+         (file-name (git-file-name "parenscript" version))
+         (sha256
+          (base32
+           "1kbhgsjbikc73m5cwdp4d4fdafyqcr1b7b630qjrziql0nh6mi3k"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cl-ppcre" ,sbcl-cl-ppcre)
+         ("anaphora" ,sbcl-anaphora)
+         ("named-readtables" ,sbcl-named-readtables)))
+      (home-page "https://common-lisp.net/project/parenscript/")
+      (synopsis "Translator from a subset of Common Lisp to JavaScript")
+      (description
+       "Parenscript is a translator from an extended subset of Common Lisp to
+JavaScript.  Parenscript code can run almost identically on both the
+browser (as JavaScript) and server (as Common Lisp).
+
+Parenscript code is treated the same way as Common Lisp code, making the full
+power of Lisp macros available for JavaScript.  This provides a web
+development environment that is unmatched in its ability to reduce code
+duplication and provide advanced meta-programming facilities to web
+developers.
+
+At the same time, Parenscript is different from almost all other \"language
+X\" to JavaScript translators in that it imposes almost no overhead:
+
+@itemize
+@item No run-time dependencies: Any piece of Parenscript code is runnable
+as-is.  There are no JavaScript files to include.
+@item Native types: Parenscript works entirely with native JavaScript data
+types.  There are no new types introduced, and object prototypes are not
+touched.
+@item Native calling convention: Any JavaScript code can be called without the
+need for bindings.  Likewise, Parenscript can be used to make efficient,
+self-contained JavaScript libraries.
+@item Readable code: Parenscript generates concise, formatted, idiomatic
+JavaScript code.  Identifier names are preserved.  This enables seamless
+debugging in tools like Firebug.
+@item Efficiency: Parenscript introduces minimal overhead for advanced Common
+Lisp features.  The generated code is almost as fast as hand-written
+JavaScript.
+@end itemize\n")
+      (license license:bsd-3))))
+
+(define-public cl-parenscript
+  (sbcl-package->cl-source-package sbcl-parenscript))
+
+(define-public ecl-parenscript
+  (sbcl-package->ecl-package sbcl-parenscript))
+
+(define-public sbcl-cl-json
+  (let ((commit "6dfebb9540bfc3cc33582d0c03c9ec27cb913e79"))
+    (package
+      (name "sbcl-cl-json")
+      (version (git-version "0.5" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hankhero/cl-json")
+               (commit commit)))
+         (file-name (git-file-name "cl-json" version))
+         (sha256
+          (base32
+           "0fx3m3x3s5ji950yzpazz4s0img3l6b3d6l3jrfjv0lr702496lh"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
+      (home-page "https://github.com/hankhero/cl-json")
+      (synopsis "JSON encoder and decoder for Common-Lisp")
+      (description
+       "@command{cl-json} provides an encoder of Lisp objects to JSON format
+and a corresponding decoder of JSON data to Lisp objects.  Both the encoder
+and the decoder are highly customizable; at the same time, the default
+settings ensure a very simple mode of operation, similar to that provided by
+@command{yason} or @command{st-json}.")
+      (license license:expat))))
+
+(define-public cl-json
+  (sbcl-package->cl-source-package sbcl-cl-json))
+
+(define-public ecl-cl-json
+  (sbcl-package->ecl-package sbcl-cl-json))
+
+(define-public sbcl-unix-opts
+  (package
+    (name "sbcl-unix-opts")
+    (version "0.1.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/libre-man/unix-opts")
+             (commit version)))
+       (file-name (git-file-name "unix-opts" version))
+       (sha256
+        (base32
+         "08djdi1ard09fijb7w9bdmhmwd98b1hzmcnjw9fqjiqa0g3b44rr"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://github.com/hankhero/cl-json")
+    (synopsis "Unix-style command line options parser")
+    (description
+     "This is a minimalistic parser of command line options.  The main
+advantage of the library is the ability to concisely define command line
+options once and then use this definition for parsing and extraction of
+command line arguments, as well as printing description of command line
+options (you get --help for free).  This way you don't need to repeat
+yourself.  Also, @command{unix-opts} doesn't depend on anything and allows to
+precisely control behavior of the parser via Common Lisp restarts.")
+    (license license:expat)))
+
+(define-public cl-unix-opts
+  (sbcl-package->cl-source-package sbcl-unix-opts))
+
+(define-public ecl-unix-opts
+  (sbcl-package->ecl-package sbcl-unix-opts))
+
+(define-public sbcl-trivial-garbage
+  (package
+    (name "sbcl-trivial-garbage")
+    (version "0.21")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/trivial-garbage/trivial-garbage/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0b244nlszkrqawsnp568clnx32xmvjmbbagbz7625w9n0yq7396y"))
+       (file-name (string-append "trivial-garbage-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     `(("rt" ,sbcl-rt)))
+    (home-page "https://common-lisp.net/project/trivial-garbage/")
+    (synopsis "Portable GC-related APIs for Common Lisp")
+    (description "@command{trivial-garbage} provides a portable API to
+finalizers, weak hash-tables and weak pointers on all major implementations of
+the Common Lisp programming language.")
+    (license license:public-domain)))
+
+(define-public cl-trivial-garbage
+  (sbcl-package->cl-source-package sbcl-trivial-garbage))
+
+(define-public ecl-trivial-garbage
+  (sbcl-package->ecl-package sbcl-trivial-garbage))
+
+(define-public sbcl-closer-mop
+  (let ((commit "fac29ce90e3a46e1fc6cf182190e193526fa9dbc"))
+    (package
+      (name "sbcl-closer-mop")
+      (version (git-version  "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pcostanza/closer-mop")
+               (commit commit)))
+         (sha256
+          (base32 "0hvh77y869h8fg9di5snyg85fxq6fdh9gj1igmx1g6j6j5x915dl"))
+         (file-name (git-file-name "closer-mop" version ))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/pcostanza/closer-mop")
+      (synopsis "Rectifies absent or incorrect CLOS MOP features")
+      (description "Closer to MOP is a compatibility layer that rectifies many
+of the absent or incorrect CLOS MOP features across a broad range of Common
+Lisp implementations.")
+      (license license:expat))))
+
+(define-public cl-closer-mop
+  (sbcl-package->cl-source-package sbcl-closer-mop))
+
+(define-public ecl-closer-mop
+  (sbcl-package->ecl-package sbcl-closer-mop))
+
+(define sbcl-cl-cffi-gtk-boot0
+  (let ((commit "29443c5aaca975709df8025c4649366d882033cb"))
+    (package
+      (name "sbcl-cl-cffi-gtk-boot0")
+      (version (git-version "0.11.2" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Ferada/cl-cffi-gtk/")
+               (commit commit)))
+         (file-name (git-file-name "cl-cffi-gtk" version))
+         (sha256
+          (base32
+           "0f6s92sf8xyzh1yksqx8bsy1sv0zmy0c13j3b8bavaba5hlxpxah"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("iterate" ,sbcl-iterate)
+         ("cffi" ,sbcl-cffi)
+         ("trivial-features" ,sbcl-trivial-features)))
+      (home-page "https://github.com/Ferada/cl-cffi-gtk/")
+      (synopsis "Common Lisp binding for GTK+3")
+      (description
+       "@command{cl-cffi-gtk} is a Lisp binding to GTK+ 3 (GIMP Toolkit) which
+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
+     `(("glib" ,glib)
+       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
+    (arguments
+     `(#:asd-file "glib/cl-cffi-gtk-glib.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "glib/glib.init.lisp"
+               (("libglib|libgthread" all) (string-append
+                                            (assoc-ref inputs "glib") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-gobject
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-gobject")
+    (inputs
+     `(("glib" ,glib)
+       ("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
+     `(#:asd-file "gobject/cl-cffi-gtk-gobject.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gobject/gobject.init.lisp"
+               (("libgobject" all) (string-append
+                                    (assoc-ref inputs "glib") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-gio
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-gio")
+    (inputs
+     `(("glib" ,glib)
+       ("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
+     `(#:asd-file "gio/cl-cffi-gtk-gio.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gio/gio.init.lisp"
+               (("libgio" all)
+                (string-append
+                 (assoc-ref inputs "glib") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-cairo
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-cairo")
+    (inputs
+     `(("cairo" ,cairo)
+       ("cl-cffi-gtk-glib" ,sbcl-cl-cffi-gtk-glib)
+       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
+    (arguments
+     `(#:asd-file "cairo/cl-cffi-gtk-cairo.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "cairo/cairo.init.lisp"
+               (("libcairo" all)
+                (string-append
+                 (assoc-ref inputs "cairo") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-pango
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-pango")
+    (inputs
+     `(("pango" ,pango)
+       ("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
+     `(#:asd-file "pango/cl-cffi-gtk-pango.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "pango/pango.init.lisp"
+               (("libpango" all)
+                (string-append
+                 (assoc-ref inputs "pango") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-gdk-pixbuf
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-gdk-pixbuf")
+    (inputs
+     `(("gdk-pixbuf" ,gdk-pixbuf)
+       ("cl-cffi-gtk-gobject" ,sbcl-cl-cffi-gtk-gobject)
+       ,@(package-inputs sbcl-cl-cffi-gtk-boot0)))
+    (arguments
+     `(#:asd-file "gdk-pixbuf/cl-cffi-gtk-gdk-pixbuf.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gdk-pixbuf/gdk-pixbuf.init.lisp"
+               (("libgdk_pixbuf" all)
+                (string-append
+                 (assoc-ref inputs "gdk-pixbuf") "/lib/" all))))))))))
+
+(define-public sbcl-cl-cffi-gtk-gdk
+  (package
+    (inherit sbcl-cl-cffi-gtk-boot0)
+    (name "sbcl-cl-cffi-gtk-gdk")
+    (inputs
+     `(("gtk" ,gtk+)
+       ("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
+     `(#:asd-file "gdk/cl-cffi-gtk-gdk.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gdk/gdk.init.lisp"
+               (("libgdk" all)
+                (string-append
+                 (assoc-ref inputs "gtk") "/lib/" all)))
+             (substitute* "gdk/gdk.package.lisp"
+               (("libgtk" all)
+                (string-append
+                 (assoc-ref inputs "gtk") "/lib/" all))))))))))
+
+(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
+     `(#: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))))
+
+(define-public sbcl-cl-webkit
+  (let ((commit "cd2a9008e0c152e54755e8a7f07b050fe36bab31"))
+    (package
+      (name "sbcl-cl-webkit")
+      (version (git-version "2.4" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jmercouris/cl-webkit")
+               (commit commit)))
+         (file-name (git-file-name "cl-webkit" version))
+         (sha256
+          (base32
+           "0f5lyn9i7xrn3g1bddga377mcbawkbxydijpg389q4n04gqj0vwf"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("cl-cffi-gtk" ,sbcl-cl-cffi-gtk)
+         ("webkitgtk" ,webkitgtk)))
+      (arguments
+       `(#:asd-file "webkit2/cl-webkit2.asd"
+         #:asd-system-name "cl-webkit2"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "webkit2/webkit2.init.lisp"
+                 (("libwebkit2gtk" all)
+                  (string-append
+                   (assoc-ref inputs "webkitgtk") "/lib/" all))))))))
+      (home-page "https://github.com/jmercouris/cl-webkit")
+      (synopsis "Binding to WebKitGTK+ for Common Lisp")
+      (description
+       "@command{cl-webkit} is a binding to WebKitGTK+ for Common Lisp,
+currently targeting WebKit version 2.  The WebKitGTK+ library adds web
+browsing capabilities to an application, leveraging the full power of the
+WebKit browsing engine.")
+      (license license:expat))))
+
+(define-public sbcl-lparallel
+  (package
+    (name "sbcl-lparallel")
+    (version "2.8.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lmj/lparallel/")
+             (commit (string-append "lparallel-" version))))
+       (file-name (git-file-name "lparallel" version))
+       (sha256
+        (base32
+         "0g0aylrbbrqsz0ahmwhvnk4cmc2931fllbpcfgzsprwnqqd7vwq9"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("alexandria" ,sbcl-alexandria)
+       ("bordeaux-threads" ,sbcl-bordeaux-threads)
+       ("trivial-garbage" ,sbcl-trivial-garbage)))
+    (home-page "https://lparallel.org/")
+    (synopsis "Parallelism for Common Lisp")
+    (description
+     "@command{lparallel} is a library for parallel programming in Common
+Lisp, featuring:
+
+@itemize
+@item a simple model of task submission with receiving queue,
+@item constructs for expressing fine-grained parallelism,
+@item asynchronous condition handling across thread boundaries,
+@item parallel versions of map, reduce, sort, remove, and many others,
+@item promises, futures, and delayed evaluation constructs,
+@item computation trees for parallelizing interconnected tasks,
+@item bounded and unbounded FIFO queues,
+@item high and low priority tasks,
+@item task killing by category,
+@item integrated timeouts.
+@end itemize\n")
+    (license license:expat)))
+
+(define-public cl-lparallel
+  (sbcl-package->cl-source-package sbcl-lparallel))
+
+(define-public ecl-lparallel
+  (sbcl-package->ecl-package sbcl-lparallel))
+
+(define-public sbcl-cl-markup
+  (let ((commit "e0eb7debf4bdff98d1f49d0f811321a6a637b390"))
+    (package
+      (name "sbcl-cl-markup")
+      (version (git-version "0.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/arielnetworks/cl-markup/")
+               (commit commit)))
+         (file-name (git-file-name "cl-markup" version))
+         (sha256
+          (base32
+           "10l6k45971dl13fkdmva7zc6i453lmq9j4xax2ci6pjzlc6xjhp7"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/arielnetworks/cl-markup/")
+      (synopsis "Markup generation library for Common Lisp")
+      (description
+       "A modern markup generation library for Common Lisp that features:
+
+@itemize
+@item Fast (even faster through compiling the code)
+@item Safety
+@item Support for multiple document types (markup, xml, html, html5, xhtml)
+@item Output with doctype
+@item Direct output to stream
+@end itemize\n")
+      (license license:lgpl3+))))
+
+(define-public cl-markup
+  (sbcl-package->cl-source-package sbcl-cl-markup))
+
+(define-public ecl-cl-markup
+  (sbcl-package->ecl-package sbcl-cl-markup))
+
+(define-public sbcl-cl-css
+  (let ((commit "8fe654c8f0cf95b300718101cce4feb517f78e2f"))
+    (package
+      (name "sbcl-cl-css")
+      (version (git-version "0.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/inaimathi/cl-css/")
+               (commit commit)))
+         (file-name (git-file-name "cl-css" version))
+         (sha256
+          (base32
+           "1lc42zi2sw11fl2589sc19nr5sd2p0wy7wgvgwaggxa5f3ajhsmd"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/inaimathi/cl-css/")
+      (synopsis "Non-validating, inline CSS generator for Common Lisp")
+      (description
+       "This is a dead-simple, non validating, inline CSS generator for Common
+Lisp.  Its goals are axiomatic syntax, simple implementation to support
+portability, and boilerplate reduction in CSS.")
+      (license license:expat))))
+
+(define-public cl-css
+  (sbcl-package->cl-source-package sbcl-cl-css))
+
+(define-public ecl-cl-markup
+  (sbcl-package->ecl-package sbcl-cl-css))
+
+(define-public sbcl-portable-threads
+  (let ((commit "c0e61a1faeb0583c80fd3f20b16cc4c555226920"))
+    (package
+      (name "sbcl-portable-threads")
+      (version (git-version "2.3" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/binghe/portable-threads/")
+               (commit commit)))
+         (file-name (git-file-name "portable-threads" version))
+         (sha256
+          (base32
+           "03fmxyarc0xf4kavwkfa0a2spkyfrz6hbgbi9y4q7ny5aykdyfaq"))))
+      (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")
+      (description
+       "Portable Threads (and Scheduled and Periodic Functions) API for Common
+Lisp (from GBBopen project).")
+      (license license:asl2.0))))
+
+(define-public cl-portable-threads
+  (sbcl-package->cl-source-package sbcl-portable-threads))
+
+(define-public ecl-portable-threada
+  (sbcl-package->ecl-package sbcl-portable-threads))
+
+(define-public 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.
+  (let ((commit "86e7efbfe50101931edf4b67cdcfa7e221ecfde9"))
+    (package
+      (name "sbcl-usocket-boot0")
+      (version (git-version "0.7.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/usocket/usocket/")
+               (commit commit)))
+         (file-name (git-file-name "usocket" version))
+         (sha256
+          (base32
+           "1lk6ipakrib7kdgzw44hrgmls9akp5pz4h35yynw0k5zwmmq6374"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("split-sequence" ,sbcl-split-sequence)))
+      (arguments
+       `(#:tests? #f
+         #:asd-system-name "usocket"))
+      (home-page "https://common-lisp.net/project/usocket/")
+      (synopsis "Universal socket library for Common Lisp (server side)")
+      (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
+     `(("usocket" ,sbcl-usocket-boot0)
+       ("portable-threads" ,sbcl-portable-threads)))
+    (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))
+
+(define-public ecl-socket
+  (sbcl-package->ecl-package sbcl-usocket))
+
+(define-public sbcl-s-xml
+  (package
+    (name "sbcl-s-xml")
+    (version "3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "https://common-lisp.net/project/s-xml/s-xml.tgz")
+       (sha256
+        (base32
+         "061qcr0dzshsa38s5ma4ay924cwak2nq9gy59dw6v9p0qb58nzjf"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://common-lisp.net/project/s-xml/")
+    (synopsis "Simple XML parser implemented in Common Lisp")
+    (description
+     "S-XML is a simple XML parser implemented in Common Lisp.  This XML
+parser implementation has the following features:
+
+@itemize
+@item It works (handling many common XML usages).
+@item It is very small (the core is about 700 lines of code, including
+comments and whitespace).
+@item It has a core API that is simple, efficient and pure functional, much
+like that from SSAX (see also http://ssax.sourceforge.net).
+@item It supports different DOM models: an XSML-based one, an LXML-based one
+and a classic xml-element struct based one.
+@item It is reasonably time and space efficient (internally avoiding garbage
+generatation as much as possible).
+@item It does support CDATA.
+@item It should support the same character sets as your Common Lisp
+implementation.
+@item It does support XML name spaces.
+@end itemize
+
+This XML parser implementation has the following limitations:
+
+@itemize
+@item It does not support any special tags (like processing instructions).
+@item It is not validating, even skips DTD's all together.
+@end itemize\n")
+    (license license:lgpl3+)))
+
+(define-public cl-s-xml
+  (sbcl-package->cl-source-package sbcl-s-xml))
+
+(define-public ecl-s-xml
+  (sbcl-package->ecl-package sbcl-s-xml))
+
+(define-public sbcl-s-xml-rpc
+  (package
+    (name "sbcl-s-xml-rpc")
+    (version "7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "https://common-lisp.net/project/s-xml-rpc/s-xml-rpc.tgz")
+       (sha256
+        (base32
+         "02z7k163d51v0pzk8mn1xb6h5s6x64gjqkslhwm3a5x26k2gfs11"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("s-xml" ,sbcl-s-xml)))
+    (home-page "https://common-lisp.net/project/s-xml-rpc/")
+    (synopsis "Implementation of XML-RPC in Common Lisp for both client and server")
+    (description
+     "S-XML-RPC is an implementation of XML-RPC in Common Lisp for both
+client and server.")
+    (license license:lgpl3+)))
+
+(define-public cl-s-xml-rpc
+  (sbcl-package->cl-source-package sbcl-s-xml-rpc))
+
+(define-public ecl-s-xml-rpc
+  (sbcl-package->ecl-package sbcl-s-xml-rpc))