gnu: Add emacs-typit.
[jackhill/guix/guix.git] / gnu / packages / lisp-xyz.scm
index d0e7524..9bda4af 100644 (file)
@@ -10,7 +10,7 @@
 ;;; Copyright © 2017, 2019 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>
+;;; Copyright © 2018, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019, 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2019 Jesse Gildersleve <jessejohngildersleve@protonmail.com>
@@ -18,6 +18,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Dimakis Dimakakos <me@bendersteed.tech>
+;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,6 +53,7 @@
   #:use-module (gnu packages c)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages enchant)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages imagemagick)
@@ -619,6 +621,43 @@ from other CLXes around the net.")
 (define-public ecl-clx
   (sbcl-package->ecl-package sbcl-clx))
 
+(define-public sbcl-clx-truetype
+  (let ((commit "c6e10a918d46632324d5863a8ed067a83fc26de8")
+        (revision "1"))
+    (package
+      (name "sbcl-clx-truetype")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/l04m33/clx-truetype")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "079hyp92cjkdfn6bhkxsrwnibiqbz4y4af6nl31lzw6nm91j5j37"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             (substitute* "package.lisp"
+               ((":export") ":export\n   :+font-cache-filename+"))
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("clx" ,sbcl-clx)
+         ("zpb-ttf" ,sbcl-zpb-ttf)
+         ("cl-vectors" ,sbcl-cl-vectors)
+         ("cl-paths-ttf" ,sbcl-cl-paths-ttf)
+         ("cl-fad" ,sbcl-cl-fad)
+         ("cl-store" ,sbcl-cl-store)
+         ("trivial-features" ,sbcl-trivial-features)))
+      (home-page "https://github.com/l04m33/clx-truetype")
+      (synopsis "Antialiased TrueType font rendering using CLX and XRender")
+      (description "CLX-TrueType is pure common lisp solution for
+antialiased TrueType font rendering using CLX and XRender extension.")
+      (license license:expat))))
+
 (define-public sbcl-cl-ppcre-unicode
   (package (inherit sbcl-cl-ppcre)
     (name "sbcl-cl-ppcre-unicode")
@@ -926,7 +965,7 @@ multiple inspectors with independent history.")
           (base32
            "1wddrnr5kiya5s3gp4cdq6crbfy9fqcz7fr44p81502sj3bvdv39"))))
       (build-system asdf-build-system/sbcl)
-      (home-page "http://marijnhaverbeke.nl/parse-js/")
+      (home-page "https://marijnhaverbeke.nl/parse-js/")
       (synopsis "Parse JavaScript")
       (description "Parse-js is a Common Lisp package for parsing
 JavaScript (ECMAScript 3).  It has basic support for ECMAScript 5.")
@@ -950,7 +989,7 @@ JavaScript (ECMAScript 3).  It has basic support for ECMAScript 5.")
         (base32
          "0sk06ib1bhqv9y39vwnnw44vmbc4b0kvqm37xxmkxd4dwchq82d7"))))
     (build-system asdf-build-system/sbcl)
-    (home-page "http://www.cliki.net/PARSE-NUMBER")
+    (home-page "https://www.cliki.net/PARSE-NUMBER")
     (synopsis "Parse numbers")
     (description "@code{parse-number} is a library of functions for parsing
 strings into one of the standard Common Lisp number types without using the
@@ -2573,6 +2612,19 @@ package.")
 (define-public cl-cffi
   (sbcl-package->cl-source-package sbcl-cffi))
 
+(define-public sbcl-cffi-uffi-compat
+  (package
+    (inherit sbcl-cffi-toolchain)
+    (name "sbcl-cffi-uffi-compat")
+    (native-inputs
+     `(,@(package-inputs sbcl-cffi-bootstrap))) ; For fix-paths phase
+    (inputs
+     `(("cffi" ,sbcl-cffi)))
+    (synopsis "UFFI Compatibility Layer for CFFI")))
+
+(define-public cl-cffi-uffi-compat
+  (sbcl-package->cl-source-package sbcl-cffi-uffi-compat))
+
 (define-public sbcl-cl-sqlite
   (let ((commit "c738e66d4266ef63a1debc4ef4a1b871a068c112"))
     (package
@@ -2734,8 +2786,8 @@ 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.")
+yourself.  Also, @command{unix-opts} doesn't depend on anything and
+precisely controls the behavior of the parser via Common Lisp restarts.")
     (license license:expat)))
 
 (define-public cl-unix-opts
@@ -2995,20 +3047,20 @@ is a library for creating graphical user interfaces.")
   (sbcl-package->cl-source-package sbcl-cl-cffi-gtk))
 
 (define-public sbcl-cl-webkit
-  (let ((commit "cd2a9008e0c152e54755e8a7f07b050fe36bab31"))
+  (let ((commit "d97115ca601838dfa60ea7afbb88641d7a526dba"))
     (package
       (name "sbcl-cl-webkit")
-      (version (git-version "2.4" "1" commit))
+      (version (git-version "2.4" "2" commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/jmercouris/cl-webkit")
+               (url "https://github.com/joachifm/cl-webkit")
                (commit commit)))
          (file-name (git-file-name "cl-webkit" version))
          (sha256
           (base32
-           "0f5lyn9i7xrn3g1bddga377mcbawkbxydijpg389q4n04gqj0vwf"))))
+           "0sdb2l2h5xv5c1m2mfq31i9yl6zjf512fvwwzlvk9nvisyhc4xi3"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("cffi" ,sbcl-cffi)
@@ -3025,7 +3077,7 @@ is a library for creating graphical user interfaces.")
                  (("libwebkit2gtk" all)
                   (string-append
                    (assoc-ref inputs "webkitgtk") "/lib/" all))))))))
-      (home-page "https://github.com/jmercouris/cl-webkit")
+      (home-page "https://github.com/joachifm/cl-webkit")
       (synopsis "Binding to WebKitGTK+ for Common Lisp")
       (description
        "@command{cl-webkit} is a binding to WebKitGTK+ for Common Lisp,
@@ -3491,7 +3543,7 @@ RFC 1321 by R. Rivest, published April 1992.")
          ("sbcl-trivial-garbage" ,sbcl-trivial-garbage)
          ("sbcl-alexandria" ,sbcl-alexandria)
          ("sbcl-trivial-features" ,sbcl-trivial-features)))
-      (home-page "http://common-lisp.net/project/cl-plus-ssl/")
+      (home-page "https://common-lisp.net/project/cl-plus-ssl/")
       (synopsis "Common Lisp bindings to OpenSSL")
       (description
        "This library is a fork of SSL-CMUCL.  The original SSL-CMUCL source
@@ -4268,7 +4320,7 @@ streams (though primarily the former, while wrapping the latter).")
         ("sbcl-fast-io" ,sbcl-fast-io)
         ("sbcl-proc-parse" ,sbcl-proc-parse)
         ("sbcl-cl-ppcre" ,sbcl-cl-ppcre)))
-     (home-page "http://rudolph-miller.github.io/jonathan/overview.html")
+     (home-page "https://rudolph-miller.github.io/jonathan/overview.html")
      (synopsis "JSON encoder and decoder")
      (description
       "High performance JSON encoder and decoder.  Currently support: SBCL,
@@ -4884,7 +4936,7 @@ port within a range.")
 to be easy to use so that you can quickly start testing.  CLUnit
 provides a rich set of features aimed at improving your unit testing
 experience.")
-      (home-page "http://tgutu.github.io/clunit/")
+      (home-page "https://tgutu.github.io/clunit/")
       ;; MIT License
       (license license:expat))))
 
@@ -5025,8 +5077,8 @@ high-level way.  This library provides such operators.")
   (sbcl-package->ecl-package sbcl-cl-quickcheck))
 
 (define-public sbcl-burgled-batteries3
-  (let ((commit "9c0f6667e1a71ddf77e21793a0bea524710fef6e")
-        (revision "1"))
+  (let ((commit "f65f454d13bb6c40e17e9ec62e41eb5069e09760")
+        (revision "2"))
     (package
       (name "sbcl-burgled-batteries3")
       (version (git-version "0.0.0" revision commit))
@@ -5039,33 +5091,33 @@ high-level way.  This library provides such operators.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0b726kz2xxcg5l930gz035rsdvhxrzmp05iwfwympnb4z4ammicb"))))
+           "1nzn7jawrfajyzwfnzrg2cmn9xxadcqh4szbpg0jggkhdkdzz4wa"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       '(#:tests? #f
+       `(#:tests? #f
+         #:modules (((guix build python-build-system) #:select (python-version))
+                    ,@%asdf-build-system-modules)
+         #:imported-modules ((guix build python-build-system)
+                             ,@%asdf-build-system-modules)
          #:phases
-         (modify-phases %standard-phases
+         (modify-phases (@ (guix build asdf-build-system) %standard-phases)
            (add-after 'unpack 'set-*cpython-include-dir*-var
              (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "grovel-include-dir.lisp"
-                 (("\\(defparameter \\*cpython-include-dir\\* \\(detect-python\\)\\)")
-                  (string-append
-                   "(defparameter *cpython-include-dir* \""
-                   (assoc-ref inputs "python")
-                   "/include/python3.7m"
-                   "\")")))
-               (substitute* "ffi-interface.lisp"
-                 (("\\*cpython-lib\\*")
-                  (format #f "'(\"~a/lib/libpython3.so\")"
-                          (assoc-ref inputs "python"))))
-               #t)))))
+               (let ((python (assoc-ref inputs "python")))
+                 (setenv "BB_PYTHON3_INCLUDE_DIR"
+                         (string-append python "/include/python"
+                                        (python-version python)
+                                        "m"))
+                 (setenv "BB_PYTHON3_DYLIB"
+                         (string-append python "/lib/libpython3.so"))
+                 #t))))))
       (native-inputs
-       `(("python" ,python)
-         ("sbcl-cl-fad" ,sbcl-cl-fad)
+       `(("sbcl-cl-fad" ,sbcl-cl-fad)
          ("sbcl-lift" ,sbcl-lift)
          ("sbcl-cl-quickcheck" ,sbcl-cl-quickcheck)))
       (inputs
-       `(("sbcl-cffi" ,sbcl-cffi)
+       `(("python" ,python)
+         ("sbcl-cffi" ,sbcl-cffi)
          ("sbcl-cffi-grovel" ,sbcl-cffi-grovel)
          ("sbcl-alexandria" , sbcl-alexandria)
          ("sbcl-parse-declarations-1.0" ,sbcl-parse-declarations)
@@ -5075,7 +5127,6 @@ high-level way.  This library provides such operators.")
        "This package provides a shim between Python3 (specifically, the
 CPython implementation of Python) and Common Lisp.")
       (home-page "https://github.com/snmsts/burgled-batteries3")
-      ;; MIT
       (license license:expat))))
 
 (define-public cl-burgled-batteries3
@@ -5344,10 +5395,10 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
              #t)))))
     (synopsis "CFFI Groveller for IOLib, a Common Lisp I/O library")))
 
-(define-public sbcl-iolib
+(define sbcl-iolib+syscalls
   (package
     (inherit sbcl-iolib.asdf)
-    (name "sbcl-iolib")
+    (name "sbcl-iolib+syscalls")
     (inputs
      `(("iolib.asdf" ,sbcl-iolib.asdf)
        ("iolib.conf" ,sbcl-iolib.conf)
@@ -5362,7 +5413,7 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
      `(("fiveam" ,sbcl-fiveam)))
     (arguments
      '(#:asd-file "iolib.asd"
-       #:asd-system-name "iolib"
+       #:asd-system-name "iolib/syscalls"
        #:test-asd-file "iolib.tests.asd"
        #:phases
        (modify-phases %standard-phases
@@ -5379,41 +5430,58 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
                 "")))))))
     (synopsis "Common Lisp I/O library")))
 
-(define-public cl-iolib
-  (sbcl-package->cl-source-package sbcl-iolib))
-
 (define sbcl-iolib+multiplex
   (package
-    (inherit sbcl-iolib)
+    (inherit sbcl-iolib+syscalls)
     (name "sbcl-iolib+multiplex")
+    (inputs
+     `(("iolib+syscalls" ,sbcl-iolib+syscalls)
+       ,@(package-inputs sbcl-iolib+syscalls)))
     (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
        ((#:asd-system-name _) "iolib/multiplex")))))
 
-(define sbcl-iolib+syscalls
-  (package
-    (inherit sbcl-iolib)
-    (name "sbcl-iolib+syscalls")
-    (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib)
-       ((#:asd-system-name _) "iolib/syscalls")))))
+
 
 (define sbcl-iolib+streams
   (package
-    (inherit sbcl-iolib)
+    (inherit sbcl-iolib+syscalls)
     (name "sbcl-iolib+streams")
+    (inputs
+     `(("iolib+multiplex" ,sbcl-iolib+multiplex)
+       ,@(package-inputs sbcl-iolib+syscalls)))
     (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
        ((#:asd-system-name _) "iolib/streams")))))
 
 (define sbcl-iolib+sockets
   (package
-    (inherit sbcl-iolib)
+    (inherit sbcl-iolib+syscalls)
     (name "sbcl-iolib+sockets")
+    (inputs
+     `(("iolib+syscalls" ,sbcl-iolib+syscalls)
+       ("iolib+streams" ,sbcl-iolib+streams)
+       ,@(package-inputs sbcl-iolib+syscalls)))
     (arguments
-     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
        ((#:asd-system-name _) "iolib/sockets")))))
 
+(define-public sbcl-iolib
+  (package
+    (inherit sbcl-iolib+syscalls)
+    (name "sbcl-iolib")
+    (inputs
+     `(("iolib+multiplex" ,sbcl-iolib+multiplex)
+       ("iolib+streams" ,sbcl-iolib+streams)
+       ("iolib+sockets" ,sbcl-iolib+sockets)
+       ,@(package-inputs sbcl-iolib+syscalls)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-iolib+syscalls)
+       ((#:asd-system-name _) "iolib")))))
+
+(define-public cl-iolib
+  (sbcl-package->cl-source-package sbcl-iolib))
+
 (define-public sbcl-ieee-floats
   (let ((commit "566b51a005e81ff618554b9b2f0b795d3b29398d")
         (revision "1"))
@@ -5435,7 +5503,7 @@ and @code{kqueue(2)}), a pathname library and file-system utilities.")
       (native-inputs
        `(("fiveam" ,sbcl-fiveam)))
       (synopsis "IEEE 754 binary representation for floats in Common Lisp")
-      (description "This is a Common Lisp library that allows to convert
+      (description "This is a Common Lisp library that converts
 floating point values to IEEE 754 binary representation.")
       (license license:bsd-3))))
 
@@ -6337,22 +6405,19 @@ power of CXML is available when necessary.")
          (sha256
           (base32
            "0fw2q866yddbf23nk9pxphm9gsasx35vjyss82xzvndnjmzlqfl5"))))
-      ;; Inputs must be propagated or else packages depending on this won't have the necessary packages.
+      ;; Inputs must be propagated or else packages depending on this won't
+      ;; have the necessary packages.
       (propagated-inputs
        `(("alexandria" ,sbcl-alexandria)
          ("trivial-garbage" ,sbcl-trivial-garbage)
          ("babel" ,sbcl-babel)
          ("iolib" ,sbcl-iolib)
-         ("iolib+multiplex" ,(@@ (gnu packages lisp-xyz) sbcl-iolib+multiplex))
-         ("iolib+syscalls" ,(@@ (gnu packages lisp-xyz) sbcl-iolib+syscalls))
-         ("iolib+streams" ,(@@ (gnu packages lisp-xyz) sbcl-iolib+streams))
-         ("iolib+sockets" ,(@@ (gnu packages lisp-xyz) sbcl-iolib+sockets))
          ("ieee-floats" ,sbcl-ieee-floats)
          ("flexi-streams" ,sbcl-flexi-streams)
          ("cl-xmlspam" ,sbcl-cl-xmlspam)
          ("ironclad" ,sbcl-ironclad)))
       (synopsis "D-Bus client library for Common Lisp")
-      (description "This is a Common Lisp library that allows to publish D-Bus
+      (description "This is a Common Lisp library that publishes D-Bus
 objects as well as send and notify other objects connected to a bus.")
       (license license:bsd-2))))
 
@@ -6616,8 +6681,8 @@ which implements a set of utilities.")
   (sbcl-package->ecl-package sbcl-metatilities-base))
 
 (define-public sbcl-cl-containers
-  (let ((commit "810927e19d933bcf38ffeb7a23ce521efc432d45")
-        (revision "1"))
+  (let ((commit "3d1df53c22403121bffb5d553cf7acb1503850e7")
+        (revision "3"))
     (package
       (name "sbcl-cl-containers")
       (version (git-version "0.12.1" revision commit))
@@ -6630,7 +6695,7 @@ which implements a set of utilities.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1s9faxw7svhbjpkhfrz2qxgjm3cvyjb8wpyb4m8dx4i5g7vvprkv"))))
+           "18s6jfq11n8nv9k4biz32pm1s7y9zl054ry1gmdbcf39nisy377y"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("lift" ,sbcl-lift)))
@@ -7177,8 +7242,8 @@ implementation specific equivalent.")
   (sbcl-package->ecl-package sbcl-trivial-macroexpand-all))
 
 (define-public sbcl-serapeum
-  (let ((commit "65837f8a0d65b36369ec8d000fff5c29a395b5fe")
-        (revision "0"))
+  (let ((commit "64f0c4a161bbbda7c275012ca1415b4293b9e169")
+        (revision "1"))
     (package
       (name "sbcl-serapeum")
       (version (git-version "0.0.0" revision commit))
@@ -7192,7 +7257,7 @@ implementation specific equivalent.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0clwf81r2lvk1rbfvk91s9zmbkas9imf57ilqclw12mxaxlfsnbw"))))
+           "0djnj0py8hdjnk5j6shjq2kbmyxqd5sw79cilcfmpfz4dzjdgkx9"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)
@@ -10924,3 +10989,366 @@ interface for MySQL, PostgreSQL and SQLite.")
 
 (define-public cl-dbd-mysql
   (sbcl-package->cl-source-package sbcl-dbd-mysql))
+
+(define-public sbcl-dbd-postgres
+  (package
+   (inherit sbcl-dbi)
+   (name "sbcl-dbd-postgres")
+   (inputs
+    `(("cl-postgres" ,sbcl-cl-postgres)
+      ("dbi" ,sbcl-dbi)
+      ("trivial-garbage" ,sbcl-trivial-garbage)))
+   (synopsis "Database driver for PostgreSQL")))
+
+(define-public cl-dbd-postgres
+  (sbcl-package->cl-source-package sbcl-dbd-postgres))
+
+(define-public sbcl-dbd-sqlite3
+  (package
+   (inherit sbcl-dbi)
+   (name "sbcl-dbd-sqlite3")
+   (inputs
+    `(("cl-sqlite" ,sbcl-cl-sqlite)
+      ("dbi" ,sbcl-dbi)
+      ("trivial-garbage" ,sbcl-trivial-garbage)))
+   (synopsis "Database driver for SQLite3")))
+
+(define-public cl-dbd-sqlite3
+  (sbcl-package->cl-source-package sbcl-dbd-sqlite3))
+
+(define-public sbcl-uffi
+  (package
+    (name "sbcl-uffi")
+    (version "2.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "http://git.kpe.io/uffi.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1hqszvz0a3wk4s9faa83sc3vjxcb5rxmjclyr17yzwg55z733kry"))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     `(#:tests? #f ; TODO: Fix use of deprecated ASDF functions
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-permissions
+           (lambda _
+             (make-file-writable "doc/html.tar.gz")
+             #t)))))
+    (synopsis "Universal foreign function library for Common Lisp")
+    (description
+     "UFFI provides a universal foreign function interface (FFI)
+ for Common Lisp.")
+    (home-page "http://quickdocs.org/uffi/")
+    (license license:llgpl)))
+
+(define-public cl-uffi
+  (package
+    (inherit (sbcl-package->cl-source-package sbcl-uffi))
+    (arguments
+     `(#:phases
+       ;; asdf-build-system/source has its own phases and does not inherit
+       ;; from asdf-build-system/sbcl phases.
+       (modify-phases %standard-phases/source
+         (add-after 'unpack 'fix-permissions
+           (lambda _
+             (make-file-writable "doc/html.tar.gz")
+             #t)))))))
+
+(define-public sbcl-clsql
+  (package
+    (name "sbcl-clsql")
+    (version "6.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "http://git.kpe.io/clsql.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1v1k3s5bsy3lgd9gk459bzpb1r0kdjda25s29samxw4gsgf1fqvp"))
+       (snippet
+        '(begin
+           ;; Remove precompiled libraries.
+           (delete-file "db-mysql/clsql_mysql.dll")
+           (delete-file "uffi/clsql_uffi.dll")
+           (delete-file "uffi/clsql_uffi.lib")
+           #t))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     `(("cffi-uffi-compat" ,sbcl-cffi-uffi-compat)
+       ("rt" ,sbcl-rt)
+       ("uffi" ,sbcl-uffi)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-permissions
+           (lambda _
+             (make-file-writable "doc/html.tar.gz")
+             #t))
+         (add-after 'unpack 'fix-tests
+           (lambda _
+             (substitute* "clsql.asd"
+               (("clsql-tests :force t")
+                "clsql-tests"))
+             #t)))))
+    (synopsis "Common Lisp SQL Interface library")
+    (description
+     "@code{clsql} is a Common Lisp interface to SQL RDBMS based on the
+Xanalys CommonSQL interface for Lispworks.  It provides low-level database
+interfaces as well as a functional and an object oriented interface.")
+    (home-page "http://clsql.kpe.io/")
+    (license license:llgpl)))
+
+(define-public cl-clsql
+  (package
+    (inherit (sbcl-package->cl-source-package sbcl-clsql))
+    (native-inputs
+     `(("rt" ,cl-rt)))
+    (inputs
+     `(("mysql" ,mysql)
+       ("postgresql" ,postgresql)
+       ("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
+    (propagated-inputs
+     `(("cl-postgres" ,cl-postgres)
+       ("cffi-uffi-compat" ,cl-cffi-uffi-compat)
+       ("md5" ,cl-md5)
+       ("uffi" ,cl-uffi)))
+    (arguments
+     `(#:phases
+       ;; asdf-build-system/source has its own phases and does not inherit
+       ;; from asdf-build-system/sbcl phases.
+       (modify-phases %standard-phases/source
+         (add-after 'unpack 'fix-permissions
+           (lambda _
+             (make-file-writable "doc/html.tar.gz")
+             #t)))))))
+
+(define-public sbcl-clsql-uffi
+  (package
+    (inherit sbcl-clsql)
+    (name "sbcl-clsql-uffi")
+    (inputs
+     `(("cffi-uffi-compat" ,sbcl-cffi-uffi-compat)
+       ("clsql" ,sbcl-clsql)
+       ("uffi" ,sbcl-uffi)))
+    (synopsis "UFFI helper functions for Common Lisp SQL interface library")))
+
+(define-public sbcl-clsql-sqlite3
+  (package
+    (inherit sbcl-clsql)
+    (name "sbcl-clsql-sqlite3")
+    (inputs
+     `(("clsql" ,sbcl-clsql)
+       ("clsql-uffi" ,sbcl-clsql-uffi)
+       ("sqlite" ,sqlite)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-clsql)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "db-sqlite3/sqlite3-loader.lisp"
+                 (("libsqlite3")
+                  (string-append (assoc-ref inputs "sqlite")
+                                 "/lib/libsqlite3")))
+               #t))))))
+    (synopsis "SQLite3 driver for Common Lisp SQL interface library")))
+
+(define-public sbcl-clsql-postgresql
+  (package
+    (inherit sbcl-clsql)
+    (name "sbcl-clsql-postgresql")
+    (inputs
+     `(("clsql" ,sbcl-clsql)
+       ("clsql-uffi" ,sbcl-clsql-uffi)
+       ("postgresql" ,postgresql)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-clsql)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "db-postgresql/postgresql-loader.lisp"
+                 (("libpq")
+                  (string-append (assoc-ref inputs "postgresql")
+                                 "/lib/libpq")))
+               #t))))))
+    (synopsis "PostgreSQL driver for Common Lisp SQL interface library")))
+
+(define-public sbcl-clsql-postgresql-socket3
+  (package
+    (inherit sbcl-clsql)
+    (name "sbcl-clsql-postgresql-socket3")
+    (inputs
+     `(("cl-postgres" ,sbcl-cl-postgres)
+       ("clsql" ,sbcl-clsql)
+       ("md5" ,sbcl-md5)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-clsql)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'create-asd-file 'fix-asd-file
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (lib (string-append out "/lib/" (%lisp-type)))
+                      (asd (string-append lib "/clsql-postgresql-socket3.asd")))
+                 (substitute* asd
+                   (("CLSQL-POSTGRESQL-SOCKET-SYSTEM::")
+                    "")))
+               #t))))))
+    (synopsis "PostgreSQL driver for Common Lisp SQL interface library")))
+
+(define-public sbcl-clsql-mysql
+  (package
+    (inherit sbcl-clsql)
+    (name "sbcl-clsql-mysql")
+    (inputs
+     `(("mysql" ,mysql)
+       ("sbcl-clsql" ,sbcl-clsql)
+       ("sbcl-clsql-uffi" ,sbcl-clsql-uffi)
+       ("zlib" ,zlib)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-clsql)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((lib (string-append "#p\""
+                                         (assoc-ref outputs "out")
+                                         "/lib/\"")))
+                 (substitute* "clsql-mysql.asd"
+                   (("#p\"/usr/lib/clsql/clsql_mysql\\.so\"")
+                    lib))
+                 (substitute* "db-mysql/mysql-loader.lisp"
+                   (("libmysqlclient" all)
+                    (string-append (assoc-ref inputs "mysql") "/lib/" all))
+                   (("clsql-mysql-system::\\*library-file-dir\\*")
+                    lib)))
+               #t))
+           (add-before 'build 'build-helper-library
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((mysql (assoc-ref inputs "mysql"))
+                      (inc-dir (string-append mysql "/include/mysql"))
+                      (lib-dir (string-append mysql "/lib"))
+                      (shared-lib-dir (string-append (assoc-ref outputs "out")
+                                                     "/lib"))
+                      (shared-lib (string-append shared-lib-dir
+                                                 "/clsql_mysql.so")))
+                 (mkdir-p shared-lib-dir)
+                 (invoke "gcc" "-fPIC" "-shared"
+                         "-I" inc-dir
+                         "db-mysql/clsql_mysql.c"
+                         "-Wl,-soname=clsql_mysql"
+                         "-L" lib-dir "-lmysqlclient" "-lz"
+                         "-o" shared-lib)
+                 #t)))))))
+    (synopsis "MySQL driver for Common Lisp SQL interface library")))
+
+(define-public sbcl-sycamore
+  (let ((commit "fd2820fec165ad514493426dea209728f64e6d18"))
+    (package
+      (name "sbcl-sycamore")
+      (version "0.0.20120604")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ndantam/sycamore/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00bv1aj89q5vldmq92zp2364jq312zjq2mbd3iyz1s2b4widzhl7"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-file "src/sycamore.asd"))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-ppcre" ,sbcl-cl-ppcre)))
+      (synopsis "Purely functional data structure library in Common Lisp")
+      (description
+       "Sycamore is a fast, purely functional data structure library in Common Lisp.
+If features:
+
+@itemize
+@item Fast, purely functional weight-balanced binary trees.
+@item Leaf nodes are simple-vectors, greatly reducing tree height.
+@item Interfaces for tree Sets and Maps (dictionaries).
+@item Ropes.
+@item Purely functional pairing heaps.
+@item Purely functional amortized queue.
+@end itemize\n")
+      (home-page "http://ndantam.github.io/sycamore/")
+      (license license:bsd-3))))
+
+(define-public cl-sycamore
+  (sbcl-package->cl-source-package sbcl-sycamore))
+
+(define-public sbcl-trivial-package-local-nicknames
+  (package
+    (name "sbcl-trivial-package-local-nicknames")
+    (version "0.2")
+    (home-page "https://github.com/phoe/trivial-package-local-nicknames")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit "16b7ad4c2b120f50da65154191f468ea5598460e")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18qc27xkjzdcqrilpk3pm7djldwq5rm3ggd5h9cr8hqcd54i2fqg"))))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "Common Lisp compatibility library for package local nicknames")
+    (description
+     "This library is a portable compatibility layer around package local nicknames (PLN).
+This was done so there is a portability library for the PLN API not included
+in DEFPACKAGE.")
+    (license license:unlicense)))
+
+(define-public cl-trivial-package-local-nicknames
+  (sbcl-package->cl-source-package sbcl-trivial-package-local-nicknames))
+
+(define-public sbcl-enchant
+  (let ((commit "6af162a7bf10541cbcfcfa6513894900329713fa"))
+    (package
+      (name "sbcl-enchant")
+      (version (git-version "0.0.0" "1" commit))
+      (home-page "https://github.com/tlikonen/cl-enchant")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "19yh5ihirzi1d8xqy1cjqipzd6ly3245cfxa5s9xx496rryz0s01"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("enchant" ,enchant)
+         ("cffi" ,sbcl-cffi)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "load-enchant.lisp"
+                 (("libenchant")
+                  (string-append
+                   (assoc-ref inputs "enchant") "/lib/libenchant-2"))))))))
+      (synopsis "Common Lisp interface for the Enchant spell-checker library")
+      (description
+       "Enchant is a Common Lisp interface for the Enchant spell-checker
+library.  The Enchant library is a generic spell-checker library which uses
+other spell-checkers transparently as back-end.  The library supports the
+multiple checkers, including Aspell and Hunspell.")
+      (license license:public-domain))))
+
+(define-public cl-enchant
+  (sbcl-package->cl-source-package sbcl-enchant))