gnu: Move most packages from guile.scm to new module.
[jackhill/guix/guix.git] / gnu / packages / guile.scm
dissimilarity index 79%
index f6f56d8..09f6676 100644 (file)
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
-;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
-;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2016 Eraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2016, 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
-;;; Copyright © 2016 Amirouche <amirouche@hypermove.net>
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2017 David Thompson <davet@gnu.org>
-;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
-;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages guile)
-  #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (gnu packages)
-  #:use-module (gnu packages aspell)
-  #:use-module (gnu packages bash)
-  #:use-module (gnu packages bdw-gc)
-  #:use-module (gnu packages compression)
-  #:use-module (gnu packages gawk)
-  #:use-module (gnu packages gperf)
-  #:use-module (gnu packages libffi)
-  #:use-module (gnu packages autotools)
-  #:use-module (gnu packages flex)
-  #:use-module (gnu packages libunistring)
-  #:use-module (gnu packages linux)
-  #:use-module (gnu packages m4)
-  #:use-module (gnu packages multiprecision)
-  #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages ed)
-  #:use-module (gnu packages base)
-  #:use-module (gnu packages texinfo)
-  #:use-module (gnu packages man)
-  #:use-module (gnu packages gettext)
-  #:use-module (gnu packages databases)
-  #:use-module (gnu packages python)
-  #:use-module (gnu packages tls)
-  #:use-module (gnu packages gl)
-  #:use-module (gnu packages sdl)
-  #:use-module (gnu packages maths)
-  #:use-module (gnu packages image)
-  #:use-module (gnu packages version-control)
-  #:use-module (gnu packages xdisorg)
-  #:use-module (gnu packages xorg)
-  #:use-module (gnu packages networking)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix git-download)
-  #:use-module (guix build-system gnu)
-  #:use-module (guix build-system trivial)
-  #:use-module (guix utils)
-  #:use-module (ice-9 match)
-  #:use-module ((srfi srfi-1) #:prefix srfi-1:))
-
-;;; Commentary:
-;;;
-;;; GNU Guile, and modules and extensions.
-;;;
-;;; Code:
-
-(define-public guile-1.8
-  (package
-   (name "guile")
-   (version "1.8.8")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnu/guile/guile-" version
-                                ".tar.gz"))
-            (sha256
-             (base32
-              "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
-            (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
-   (build-system gnu-build-system)
-   (arguments '(#:configure-flags '("--disable-error-on-warning")
-
-                ;; Insert a phase before `configure' to patch things up.
-                #:phases
-                (modify-phases %standard-phases
-                  (add-before 'configure 'patch-stuff
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      ;; Add a call to `lt_dladdsearchdir' so that
-                      ;; `libguile-readline.so' & co. are in the
-                      ;; loader's search path.
-                      (substitute* "libguile/dynl.c"
-                        (("lt_dlinit.*$" match)
-                         (format #f
-                                 "  ~a~%  lt_dladdsearchdir(\"~a/lib\");~%"
-                                 match
-                                 (assoc-ref outputs "out"))))
-
-                      ;; The usual /bin/sh...
-                      (substitute* "ice-9/popen.scm"
-                        (("/bin/sh") (which "sh")))
-                      #t)))))
-   (inputs `(("gawk" ,gawk)
-             ("readline" ,readline)))
-
-   ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
-   ;; propagated.
-   (propagated-inputs `(("gmp" ,gmp)
-                        ("libltdl" ,libltdl)))
-
-   ;; When cross-compiling, a native version of Guile itself is needed.
-   (self-native-input? #t)
-
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUILE_LOAD_PATH")
-           (files '("share/guile/site")))))
-
-   (synopsis "Scheme implementation intended especially for extensions")
-   (description
-    "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
-official extension language of the GNU system.  It is an implementation of
-the Scheme language which can be easily embedded in other applications to
-provide a convenient means of extending the functionality of the application
-without requiring the source code to be rewritten.")
-   (home-page "https://www.gnu.org/software/guile/")
-   (license license:lgpl2.0+)))
-
-(define-public guile-2.0
-  (package
-   (name "guile")
-   (version "2.0.14")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append "mirror://gnu/guile/guile-" version
-                                ".tar.xz"))
-            (sha256
-             (base32
-              "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78"))))
-   (build-system gnu-build-system)
-   (native-inputs `(("pkgconfig" ,pkg-config)))
-   (inputs `(("libffi" ,libffi)
-             ,@(libiconv-if-needed)
-
-             ;; We need Bash when cross-compiling because some of the scripts
-             ;; in bin/ refer to it.  Use 'bash-minimal' because we don't need
-             ;; an interactive Bash with Readline and all.
-             ,@(if (target-mingw?) '() `(("bash" ,bash-minimal)))))
-   (propagated-inputs
-    `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
-       ;; reads `-lltdl -lunistring', adding them here will add the needed
-       ;; `-L' flags.  As for why the `.la' file lacks the `-L' flags, see
-       ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
-      ("libunistring" ,libunistring)
-
-      ;; Depend on LIBLTDL, not LIBTOOL.  That way, we avoid some the extra
-      ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
-      ("libltdl" ,libltdl)
-
-      ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
-      ;; must be propagated.
-      ("bdw-gc" ,libgc)
-      ("gmp" ,gmp)))
-
-   (self-native-input? #t)
-
-   (outputs '("out" "debug"))
-
-   (arguments
-    `(#:configure-flags '("--disable-static") ; saves 3 MiB
-      #:phases
-      (modify-phases %standard-phases
-        (add-before 'configure 'pre-configure
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; Tell (ice-9 popen) the file name of Bash.
-            (let ((bash (assoc-ref inputs "bash")))
-              (substitute* "module/ice-9/popen.scm"
-                ;; If bash is #f allow fallback for user to provide
-                ;; "bash" in PATH.  This happens when cross-building to
-                ;; MinGW for which we do not have Bash yet.
-                (("/bin/sh")
-                 ,@(if (target-mingw?)
-                       '((if bash
-                             (string-append bash "/bin/bash")
-                             "bash"))
-                       '((string-append bash "/bin/bash")))))
-              #t))))))
-
-   (native-search-paths
-    (list (search-path-specification
-           (variable "GUILE_LOAD_PATH")
-           (files '("share/guile/site/2.0")))
-          (search-path-specification
-           (variable "GUILE_LOAD_COMPILED_PATH")
-           (files '("lib/guile/2.0/site-ccache"
-                    "share/guile/site/2.0")))))
-
-   (synopsis "Scheme implementation intended especially for extensions")
-   (description
-    "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
-official extension language of the GNU system.  It is an implementation of
-the Scheme language which can be easily embedded in other applications to
-provide a convenient means of extending the functionality of the application
-without requiring the source code to be rewritten.")
-   (home-page "https://www.gnu.org/software/guile/")
-   (license license:lgpl3+)))
-
-(define-public guile-2.2
-  (package (inherit guile-2.0)
-    (name "guile")
-    (version "2.2.3")
-    (source (origin
-              (method url-fetch)
-
-              ;; Note: we are limited to one of the compression formats
-              ;; supported by the bootstrap binaries, so no lzip here.
-              (uri (string-append "mirror://gnu/guile/guile-" version
-                                  ".tar.xz"))
-              (sha256
-               (base32
-                "11j01agvnci2cx32wwpqs9078856yxmvs15gcsz7ganpkj2ahlw3"))
-              (modules '((guix build utils)))
-
-              ;; Remove the pre-built object files.  Instead, build everything
-              ;; from source, at the expense of significantly longer build
-              ;; times (almost 3 hours on a 4-core Intel i5).
-              (snippet '(begin
-                          (for-each delete-file
-                                    (find-files "prebuilt" "\\.go$"))
-                          #t))))
-    (properties '((timeout . 72000)               ;20 hours
-                  (max-silent-time . 36000)))     ;10 hours (needed on ARM
-                                                  ;  when heavily loaded)
-    (native-search-paths
-     (list (search-path-specification
-            (variable "GUILE_LOAD_PATH")
-            (files '("share/guile/site/2.2")))
-           (search-path-specification
-            (variable "GUILE_LOAD_COMPILED_PATH")
-            (files '("lib/guile/2.2/site-ccache"
-                     "share/guile/site/2.2")))))
-
-    (arguments
-     (if (%current-target-system)
-         (substitute-keyword-arguments (package-arguments guile-2.0)
-           ((#:phases phases '%standard-phases)
-            `(modify-phases ,phases
-               (add-after 'unpack 'sacrifice-elisp-support
-                 (lambda _
-                   ;; Cross-compiling language/elisp/boot.el fails, so
-                   ;; sacrifice it.  See
-                   ;; <https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=988aa29238fca862c7e2cb55f15762a69b4c16ce>
-                   ;; for the upstream fix.
-                   (substitute* "module/Makefile.in"
-                     (("language/elisp/boot\\.el")
-                      "\n"))
-                   #t)))))
-         (package-arguments guile-2.0)))))
-
-(define-public guile-2.2/fixed
-  ;; A package of Guile 2.2 that's rarely changed.  It is the one used
-  ;; in the `base' module, and thus changing it entails a full rebuild.
-  (package
-    (inherit guile-2.2)
-    (properties '((hidden? . #t)            ;people should install 'guile-2.2'
-                  (timeout . 72000)             ;20 hours
-                  (max-silent-time . 36000))))) ;10 hours (needed on ARM
-                                                ;  when heavily loaded)
-
-(define-public guile-2.2.2
-  ;; Keep it so that, when 'guix' runs on 2.2.2, 'guix pull' compiles objects
-  ;; with 2.2.2, thereby avoiding the ABI incompatibility issues described in
-  ;; <https://bugs.gnu.org/29570>.
-  (package
-    (inherit guile-2.2)
-    (version "2.2.2")
-    (source (origin
-              (inherit (package-source guile-2.2))
-              (uri (string-append "mirror://gnu/guile/guile-" version
-                                  ".tar.xz"))
-              (sha256
-               (base32
-                "1azm25zcmxif0skxfrp11d2wc89nrzpjaann9yxdw6pvjxhs948w"))))))
-
-(define-public guile-next
-  (deprecated-package "guile-next" guile-2.2))
-
-(define (make-guile-readline guile)
-  (package
-    (name "guile-readline")
-    (version (package-version guile))
-    (source (package-source guile))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags '("--disable-silent-rules")
-       #:phases (modify-phases %standard-phases
-                  (add-before 'build 'chdir
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (invoke "make" "-C" "libguile" "scmconfig.h")
-                      (invoke "make" "-C" "lib")
-                      (chdir "guile-readline")
-
-                      (substitute* "Makefile"
-                        (("../libguile/libguile-[[:graph:]]+\\.la")
-                         ;; Remove dependency on libguile-X.Y.la.
-                         "")
-                        (("^READLINE_LIBS = (.*)$" _ libs)
-                         ;; Link against the provided libguile.
-                         (string-append "READLINE_LIBS = "
-                                        "-lguile-$(GUILE_EFFECTIVE_VERSION) "
-                                        libs "\n"))
-                        (("\\$\\(top_builddir\\)/meta/build-env")
-                         ;; Use the provided Guile, not the one from
-                         ;; $(builddir).
-                         "")
-
-                        ;; Install modules to the 'site' directories.
-                        (("^moddir = .*$")
-                         "moddir = $(pkgdatadir)/site/$(GUILE_EFFECTIVE_VERSION)\n")
-                        (("^ccachedir = .*$")
-                         "ccachedir = $(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/site-ccache\n"))
-
-                      ;; Load 'guile-readline.so' from the right place.
-                      (substitute* "ice-9/readline.scm"
-                        (("load-extension \"guile-readline\"")
-                         (format #f "load-extension \
- (string-append ~s \"/lib/guile/\" (effective-version) \"/extensions/guile-readline\")"
-                                 (assoc-ref outputs "out"))))
-                      #t)))))
-    (home-page (package-home-page guile))
-    (native-inputs (package-native-inputs guile))
-    (inputs
-     `(,@(package-inputs guile)                   ;to placate 'configure'
-       ,@(package-propagated-inputs guile)
-       ("guile" ,guile)
-       ("readline" ,readline)))
-    (synopsis "Line editing support for GNU Guile")
-    (description
-     "This module provides line editing support via the Readline library for
-GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
-@code{activate-readline} procedure to enable it.")
-    (license license:gpl3+)))
-
-(define-public guile-readline
-  (make-guile-readline guile-2.2))
-
-(define (guile-variant-package-name prefix)
-  (lambda (name)
-    "Return NAME with PREFIX instead of \"guile-\", when applicable."
-    (if (string-prefix? "guile-" name)
-        (string-append prefix "-"
-                       (string-drop name
-                                    (string-length "guile-")))
-        name)))
-
-(define package-for-guile-2.2
-  ;; A procedure that rewrites the dependency tree of the given package to use
-  ;; GUILE-2.2 instead of GUILE-2.0.
-  (package-input-rewriting `((,guile-2.0 . ,guile-2.2))
-                           (guile-variant-package-name "guile2.2")))
-
-(define package-for-guile-2.0
-  ;; Likewise, but the other way around.  :-)
-  (package-input-rewriting `((,guile-2.2 . ,guile-2.0))
-                           (guile-variant-package-name "guile2.0")))
-
-(define-public guile-for-guile-emacs
-  (package (inherit guile-2.2)
-    (name "guile-for-guile-emacs")
-    (version "20150510.d8d9a8d")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "git://git.hcoop.net/git/bpt/guile.git")
-                    (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
-    (arguments
-     (substitute-keyword-arguments `(;; Tests aren't passing for now.
-                                     ;; Obviously we should re-enable this!
-                                     #:tests? #f
-                                     ,@(package-arguments guile-2.2))
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'autogen
-                      (lambda _
-                        (zero? (system* "sh" "autogen.sh"))))
-           (add-before 'autogen 'patch-/bin/sh
-                       (lambda _
-                         (substitute* "build-aux/git-version-gen"
-                           (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                         #t))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("flex" ,flex)
-       ("texinfo" ,texinfo)
-       ("gettext" ,gettext-minimal)
-       ,@(package-native-inputs guile-2.2)))
-    ;; Same as in guile-2.0
-    (native-search-paths
-     (list (search-path-specification
-            (variable "GUILE_LOAD_PATH")
-            (files '("share/guile/site/2.0")))
-           (search-path-specification
-            (variable "GUILE_LOAD_COMPILED_PATH")
-            (files '("lib/guile/2.0/site-ccache"
-                     "share/guile/site/2.0")))))))
-
-;; There has not been any release yet.
-(define-public guildhall
-  (let ((commit "2fe2cc539f4b811bbcd69e58738db03eb5a2b778")
-        (revision "1"))
-    (package
-      (name "guildhall")
-      (version (string-append "0-" revision "." (string-take commit 9)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/ijp/guildhall.git")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "115bym7bg66h3gs399yb2vkzc2ygriaqsn4zbrg8f054mgy8wzn1"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           ;; Tests fail without this fix because they try to load the bash
-           ;; executable as a Scheme file.  See bug report at
-           ;; https://github.com/ijp/guildhall/issues/22
-           (add-after 'unpack 'fix-bug-22
-             (lambda _
-               (substitute* "Makefile.am"
-                 (("TESTS_ENVIRONMENT=.*")
-                  "AM_TESTS_ENVIRONMENT=srcdir=$(abs_top_srcdir)/tests/
-TEST_EXTENSIONS = .scm
-SCM_LOG_COMPILER= $(top_builddir)/env $(GUILE)
-AM_SCM_LOG_FLAGS =  --no-auto-compile -s")
-                 ;; FIXME: one of the database tests fails for unknown
-                 ;; reasons.  It does not fail when run outside of Guix.
-                 (("tests/database.scm") ""))
-               #t))
-           (add-after 'fix-bug-22 'autogen
-             (lambda _
-               (zero? (system* "sh" "autogen.sh")))))))
-      (inputs
-       `(("guile" ,guile-2.0)))
-      (native-inputs
-       `(("zip" ,zip) ; for tests
-         ("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)))
-      (synopsis "Package manager for Guile")
-      (description
-       "Guildhall is a package manager written for Guile Scheme.  A guild is
-an association of independent craftspeople.  A guildhall is where they meet.
-This Guildhall aims to make a virtual space for Guile wizards and journeyfolk
-to share code.
-
-On a practical level, Guildhall lets you share Scheme modules and programs
-over the internet, and install code that has been shared by others.  Guildhall
-can handle dependencies, so when a program requires several libraries, and
-each of those has further dependencies, all of the prerequisites for the
-program can be installed in one go.")
-      (home-page "https://github.com/ijp/guildhall")
-      (license license:gpl3+))))
-
-\f
-;;;
-;;; Extensions.
-;;;
-
-(define-public artanis
-  (let ((release "0.2.1")
-       (revision 3))
-    (package
-      (name "artanis")
-      (version (if (zero? revision)
-                   release
-                   (string-append release "-"
-                                  (number->string revision))))
-      (source (origin
-                (method url-fetch)
-                (uri (string-append "mirror://gnu/artanis/artanis-"
-                                    release ".tar.gz"))
-                (file-name (string-append name "-" version ".tar.gz"))
-                (sha256
-                 (base32
-                  "041ajcg2pz918kd9iqcj4inpzddc3impvz3r2nhlpbv8zrz011hn"))
-                (modules '((guix build utils)))
-                (snippet
-                 '(begin
-                    (delete-file-recursively "artanis/third-party/json.scm")
-                    (delete-file-recursively "artanis/third-party/json")
-                    (substitute* '("artanis/artanis.scm"
-                                   "artanis/oht.scm")
-                      (("(#:use-module \\()artanis third-party (json\\))" _
-                        use-module json)
-                       (string-append use-module json)))
-                    (substitute* "artanis/oht.scm"
-                      (("([[:punct:][:space:]]+)(->json-string)([[:punct:][:space:]]+)"
-                        _ pre json-string post)
-                       (string-append pre
-                                      "scm" json-string
-                                      post)))
-                    (substitute* "artanis/artanis.scm"
-                      (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
-                       ""))
-                    #t))))
-      (build-system gnu-build-system)
-      ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
-      (inputs `(("guile" ,guile-2.2)
-                ("guile-json" ,guile-json)))
-      (native-inputs `(("bash"       ,bash)         ;for the `source' builtin
-                       ("pkgconfig"  ,pkg-config)
-                       ("util-linux" ,util-linux))) ;for the `script' command
-      (arguments
-       '(#:make-flags
-         ;; TODO: The documentation must be built with the `docs' target.
-         (let* ((out (assoc-ref %outputs "out"))
-                (scm (string-append out "/share/guile/site/2.2"))
-                (go  (string-append out "/lib/guile/2.2/site-ccache")))
-           ;; Don't use (%site-dir) for site paths.
-           (list (string-append "MOD_PATH=" scm)
-                 (string-append "MOD_COMPILED_PATH=" go)))
-         #:test-target "test"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'install 'substitute-root-dir
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out  (assoc-ref outputs "out")))
-                 (substitute* "Makefile"   ;ignore the execution of bash.bashrc
-                   ((" /etc/bash.bashrc") " /dev/null"))
-                 (substitute* "Makefile"   ;set the root of config files to OUT
-                   ((" /etc") (string-append " " out "/etc")))
-                 (mkdir-p (string-append out "/bin")) ;for the `art' executable
-                 #t)))
-           (add-after 'install 'wrap-art
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (scm (string-append out "/share/guile/site/2.2"))
-                      (go  (string-append out "/lib/guile/2.2/site-ccache")))
-                 (wrap-program (string-append bin "/art")
-                   `("GUILE_LOAD_PATH" ":" prefix (,scm))
-                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,go)))
-                 #t))))))
-      (synopsis "Web application framework written in Guile")
-      (description "GNU Artanis is a web application framework written in Guile
-Scheme.  A web application framework (WAF) is a software framework that is
-designed to support the development of dynamic websites, web applications, web
-services and web resources.  The framework aims to alleviate the overhead
-associated with common activities performed in web development.  Artanis
-provides several tools for web development: database access, templating
-frameworks, session management, URL-remapping for RESTful, page caching, and
-more.")
-      (home-page "https://www.gnu.org/software/artanis/")
-      (license (list license:gpl3+ license:lgpl3+))))) ;dual license
-
-(define-public guile-reader
-  (package
-    (name "guile-reader")
-    (version "0.6.2")
-    (source  (origin
-               (method url-fetch)
-               (uri (string-append "mirror://savannah/guile-reader/guile-reader-"
-                                   version ".tar.gz"))
-               (sha256
-                (base32
-                 "0592s2s8ampqmqwilc4fvcild6rb9gy79di6vxv5kcdmv23abkgx"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkgconfig" ,pkg-config)
-                     ("gperf" ,gperf-3.0)))
-    (inputs `(("guile" ,guile-2.2)))
-    (synopsis "Framework for building readers for GNU Guile")
-    (description
-     "Guile-Reader is a simple framework for building readers for GNU Guile.
-
-The idea is to make it easy to build procedures that extend Guile’s read
-procedure.  Readers supporting various syntax variants can easily be written,
-possibly by re-using existing “token readers” of a standard Scheme
-readers.  For example, it is used to implement Skribilo’s R5RS-derived
-document syntax.
-
-Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
-hopefully more powerful and flexible (for instance, one may instantiate as
-many readers as needed).")
-    (home-page "https://www.nongnu.org/guile-reader/")
-    (license license:gpl3+)))
-
-(define-public guile2.0-reader
-  (package-for-guile-2.0 guile-reader))
-(define-public guile2.2-reader
-  (deprecated-package "guile2.2-reader" guile-reader))
-
-(define-public guile-ncurses
-  (package
-    (name "guile-ncurses")
-    (version "2.2")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnu/guile-ncurses/guile-ncurses-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "1wvggbr4xv8idh1hzd8caj4xfp4pln78a7w1wqzd4zgzwmnzxr2f"))))
-    (build-system gnu-build-system)
-    (inputs `(("ncurses" ,ncurses)
-              ("guile" ,guile-2.2)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (arguments
-     '(#:configure-flags (list "--with-ncursesw"  ; Unicode support
-                               "--with-gnu-filesystem-hierarchy")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-libguile-ncurses-file-name
-           (lambda* (#:key outputs #:allow-other-keys)
-             (and (zero? (system* "make" "install"
-                                  "-C" "src/ncurses"
-                                  "-j" (number->string
-                                        (parallel-job-count))))
-                  (let* ((out   (assoc-ref outputs "out"))
-                         (dir   "src/ncurses")
-                         (files (find-files dir ".scm")))
-                    (substitute* files
-                      (("\"libguile-ncurses\"")
-                       (format #f "\"~a/lib/guile/2.2/libguile-ncurses\""
-                               out)))
-                    #t)))))))
-    (home-page "https://www.gnu.org/software/guile-ncurses/")
-    (synopsis "Guile bindings to ncurses")
-    (description
-     "guile-ncurses provides Guile language bindings for the ncurses
-library.")
-    (license license:lgpl3+)))
-
-(define-public guile-ncurses/gpm
-  (package
-    (inherit guile-ncurses)
-    (name "guile-ncurses-with-gpm")
-    (inputs `(("ncurses" ,ncurses/gpm)
-              ("guile" ,guile-2.2)))))
-
-(define-public mcron
-  (package
-    (name "mcron")
-    (version "1.1.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/mcron/mcron-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1i9mcp6r6my61zfiydsm3n6my41mwvl7dfala4q29qx0zn1ynlm4"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'set-timezone
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      ;; 'tests/job-specifier.scm' expects to be running in
-                      ;; UTC-2 or something.
-                      ;; FIXME: This issue is being investigated upstream, for
-                      ;; now we'll just skip the tests (see below):
-                      ;; <https://lists.gnu.org/archive/html/bug-mcron/2018-04/msg00005.html>.
-                      (let ((tzdata (assoc-ref inputs "tzdata")))
-                        (setenv "TZDIR"
-                                (string-append tzdata
-                                               "/share/zoneinfo"))
-                        (setenv "TZ" "UTC-2")
-                        #t)))
-                  (add-before 'check 'adjust-tests
-                    (lambda _
-                      (substitute* "tests/job-specifier.scm"
-                        ;; (getpw) fails with "entry not found" in the build
-                        ;; environment, so pass an argument.
-                        (("\\(getpw\\)")
-                         "(getpwnam (getuid))")
-                        ;; The build environment lacks an entry for root in
-                        ;; /etc/passwd.
-                        (("\\(getpw 0\\)")
-                         "(getpwnam \"nobody\")")
-
-                        ;; FIXME: Skip the 4 faulty tests (see above).
-                        (("\\(test-equal \"next-year\"" all)
-                         (string-append "(test-skip 4)\n" all)))
-                      #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("tzdata" ,tzdata-for-tests)))
-    (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.2)))
-    (home-page "https://www.gnu.org/software/mcron/")
-    (synopsis "Run jobs at scheduled times")
-    (description
-     "GNU Mcron is a complete replacement for Vixie cron.  It is used to run
-tasks on a schedule, such as every hour or every Monday.  Mcron is written in
-Guile, so its configuration can be written in Scheme; the original cron
-format is also supported.")
-    (license license:gpl3+)))
-
-(define-public mcron2
-  ;; This was mthl's mcron development branch, and it became mcron 1.1.
-  (deprecated-package "mcron2" mcron))
-
-(define-public guile-ics
-  (package
-    (name "guile-ics")
-    (version "0.2.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/artyom-poptsov/guile-ics")
-                    (commit (string-append "v" version))))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0qjjvadr7gibdq9jvwkmlkb4afsw9n2shfj9phpiadinxk3p4m2g"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'autoreconf
-                    (lambda _
-                      ;; Repository comes with a broken symlink
-                      (delete-file "README")
-                      (symlink "README.org" "README")
-                      (zero? (system* "autoreconf" "-fi")))))))
-    (native-inputs
-     `(("autoconf" ,autoconf-wrapper)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2) ("which" ,which)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
-    (home-page "https://github.com/artyom-poptsov/guile-ics")
-    (synopsis "Guile parser library for the iCalendar format")
-    (description
-     "Guile-ICS is an iCalendar (RFC5545) format parser library written in
-pure Scheme.  The library can be used to read and write iCalendar data.
-
-The library is shipped with documentation in Info format and usage examples.")
-    (license license:gpl3+)))
-
-(define-public guile-lib
-  (package
-    (name "guile-lib")
-    (version "0.2.6")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://savannah/guile-lib/guile-lib-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0n1lf5bsr5s9gqi07sdfkl1hpin6dzvkcj1xa63jd1w8aglwv8r1"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; 'pre-inst-env' sets an incorrect load path, missing the
-                  ;; "/src" bit.  Add it.
-                  (substitute* "pre-inst-env.in"
-                    (("abs_top_(builddir|srcdir)=([[:graph:]]+)" _ dir value)
-                     (string-append "abs_top_" dir "=" value "/src")))
-                  #t))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:make-flags
-       '("GUILE_AUTO_COMPILE=0")        ;to prevent guild errors
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-module-dir
-           (lambda _
-             (substitute* "src/Makefile.in"
-               (("^moddir = ([[:graph:]]+)")
-                "moddir = $(datadir)/guile/site/@GUILE_EFFECTIVE_VERSION@\n")
-               (("^godir = ([[:graph:]]+)")
-                "godir = \
-$(libdir)/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n"))
-             #t)))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)))
-    (home-page "https://www.nongnu.org/guile-lib/")
-    (synopsis "Collection of useful Guile Scheme modules")
-    (description
-     "Guile-Lib is intended as an accumulation place for pure-scheme Guile
-modules, allowing for people to cooperate integrating their generic Guile
-modules into a coherent library.  Think \"a down-scaled, limited-scope CPAN
-for Guile\".")
-
-    ;; The whole is under GPLv3+, but some modules are under laxer
-    ;; distribution terms such as LGPL and public domain.  See `COPYING' for
-    ;; details.
-    (license license:gpl3+)))
-
-(define-public guile2.0-lib
-  (package-for-guile-2.0 guile-lib))
-
-(define-public guile2.2-lib
-  (deprecated-package "guile2.2-lib" guile-lib))
-
-(define-public guile-json
-  (package
-    (name "guile-json")
-    (version "1.0.1")
-    (home-page "https://github.com/aconchillo/guile-json")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append home-page "/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "16155dv30rhagz6dwv7xc87l386i8v0f1kgydqa2ajr166fi9qhr"))
-              (modules '((guix build utils)))
-              (snippet
-               ;; Make sure everything goes under .../site/X.Y, like Guile's
-               ;; search paths expects.
-               '(begin
-                  (substitute* "configure.ac"
-                    (("GUILE_PROGS")
-                     (string-append "GUILE_PROGS\n"
-                                    "AC_SUBST([GUILE_EFFECTIVE_VERSION])\n")))
-                  (substitute* '("Makefile.am" "json/Makefile.am")
-                    (("moddir[[:blank:]]*=.*/share/guile/site" all)
-                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
-                  #t))))
-    (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("guile" ,guile-2.2)))
-    (inputs `(("guile" ,guile-2.2)))
-    (synopsis "JSON module for Guile")
-    (description
-     "Guile-JSON supports parsing and building JSON documents according to the
-specification.  These are the main features:
-
-@itemize
-@item Strictly complies to @uref{http://json.org, specification}.
-@item Build JSON documents programmatically via macros.
-@item Unicode support for strings.
-@item Allows JSON pretty printing.
-@end itemize\n")
-    (license license:lgpl3+)))
-
-(define-public guile2.2-json
-  (deprecated-package "guile2.2-json" guile-json))
-
-(define-public guile2.0-json
-  (package-for-guile-2.0 guile-json))
-
-(define-public guile-minikanren
-  (package
-    (name "guile-minikanren")
-    (version "20150424.e844d85")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ijp/minikanren.git")
-                    (commit "e844d85512f8c055d3f96143ee506007389a25e3")))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match)
-                      (ice-9 popen)
-                      (ice-9 rdelim))
-
-         (let* ((out (assoc-ref %outputs "out"))
-                (guile (assoc-ref %build-inputs "guile"))
-                (effective (read-line
-                            (open-pipe* OPEN_READ
-                                        (string-append guile "/bin/guile")
-                                        "-c" "(display (effective-version))")))
-                (module-dir (string-append out "/share/guile/site/"
-                                           effective))
-                (source (assoc-ref %build-inputs "source"))
-                (doc (string-append out "/share/doc/guile-minikanren"))
-                (scm-files '("minikanren.scm"
-                             "minikanren/mkextraforms.scm"
-                             "minikanren/mkprelude.scm"
-                             "minikanren/mk.scm"))
-                (guild (string-append (assoc-ref %build-inputs "guile")
-                                      "/bin/guild")))
-           ;; Make installation directories.
-           (mkdir-p (string-append module-dir "/minikanren"))
-           (mkdir-p doc)
-
-           ;; Compile .scm files and install.
-           (chdir source)
-           (setenv "GUILE_AUTO_COMPILE" "0")
-           (for-each (lambda (file)
-                       (let* ((dest-file (string-append module-dir "/"
-                                                        file))
-                              (go-file (match (string-split file #\.)
-                                         ((base _)
-                                          (string-append module-dir "/"
-                                                         base ".go")))))
-                         ;; Install source module.
-                         (copy-file file dest-file)
-                         ;; Install compiled module.
-                         (invoke guild "compile"
-                                 "-L" source
-                                 "-o" go-file
-                                 file)))
-                     scm-files)
-
-           ;; Also copy over the README.
-           (install-file "README.org" doc)
-
-           #t))))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://github.com/ijp/minikanren")
-    (synopsis "MiniKanren declarative logic system, packaged for Guile")
-    (description
-     "MiniKanren is a relational programming extension to the Scheme
-programming Language, written as a smaller version of Kanren suitable for
-pedagogical purposes.  It is featured in the book, The Reasoned Schemer,
-written by Dan Friedman, William Byrd, and Oleg Kiselyov.
-
-This is Ian Price's r6rs packaged version of miniKanren, which deviates
-slightly from miniKanren mainline.
-
-See http://minikanren.org/ for more on miniKanren generally.")
-    (license license:expat)))
-
-(define-public guile2.0-minikanren
-  (package-for-guile-2.0 guile-minikanren))
-
-(define-public guile2.2-minikanren
-  (deprecated-package "guile2.2-minikanren" guile-minikanren))
-
-(define-public guile-miniadapton
-  (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
-        (revision "1"))
-    (package
-      (name "guile-miniadapton")
-      (version (string-append "0-" revision "." (string-take commit 9)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/fisherdj/miniAdapton.git")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:modules ((guix build utils)
-                    (ice-9 popen)
-                    (ice-9 rdelim)
-                    (srfi srfi-1)
-                    (guix build gnu-build-system))
-         #:tests? #f                    ; there is no test target
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (delete 'build)
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((cwd        (getcwd))
-                      (scm-files  (find-files "." "\\.scm$"))
-                      (effective  (read-line
-                                   (open-pipe* OPEN_READ
-                                               "guile" "-c"
-                                               "(display (effective-version))")))
-                      (module-dir (string-append (assoc-ref outputs "out")
-                                                 "/share/guile/site/"
-                                                 effective)))
-
-                 ;; Make installation directories.
-                 (mkdir-p module-dir)
-
-                 (setenv "GUILE_AUTO_COMPILE" "0")
-
-                 ;; Compile .scm files and install.
-                 (every (lambda (file)
-                          (let ((go-file (string-append module-dir "/"
-                                                        (basename file ".scm") ".go")))
-                            ;; Install source module.
-                            (install-file file module-dir)
-                            ;; Compile and install module.
-                            (zero? (system* "guild" "compile" "-L" cwd
-                                            "-o" go-file file))))
-                        scm-files)))))))
-      (inputs
-       `(("guile" ,guile-2.2)))
-      (home-page "https://github.com/fisherdj/miniAdapton")
-      (synopsis "Minimal implementation of incremental computation in Guile
-Scheme")
-      (description "This package provides a complete Scheme implementation of
-miniAdapton, which implements the core functionality of the Adapton system for
-incremental computation (also known as self-adjusting computation).  Like
-Adapton, miniAdapton allows programmers to safely combine mutation and
-memoization.  miniAdapton is built on top of an even simpler system,
-microAdapton.  Both miniAdapton and microAdapton are designed to be easy to
-understand, extend, and port to host languages other than Scheme.")
-      (license license:expat))))
-
-(define-public guile-irregex
-  (package
-    (name "guile-irregex")
-    (version "0.9.6")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://synthcode.com/scheme/irregex/irregex-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "1ia3m7dp3lcxa048q0gqbiwwsyvn99baw6xkhb4bhhzn4k7bwyqq"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (ice-9 match)
-                  (ice-9 rdelim)
-                  (ice-9 popen)
-                  (guix build gnu-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'build)
-         (delete 'check)
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (effective (read-line
-                                (open-pipe* OPEN_READ
-                                            "guile" "-c"
-                                            "(display (effective-version))")))
-                    (module-dir (string-append out "/share/guile/site/"
-                                               effective))
-                    (source (assoc-ref inputs "source"))
-                    (doc (string-append out "/share/doc/guile-irregex/"))
-                    (guild (string-append (assoc-ref %build-inputs "guile")
-                                          "/bin/guild")))
-               ;; Make installation directories.
-               (mkdir-p (string-append module-dir "/rx/source"))
-               (mkdir-p doc)
-
-               ;; Compile .scm files and install.
-               (setenv "GUILE_AUTO_COMPILE" "0")
-
-               (for-each (lambda (copy-info)
-                           (match copy-info
-                             ((src-file dest-file-basis)
-                              (let* ((dest-file (string-append
-                                                 module-dir dest-file-basis
-                                                 ".scm"))
-                                     (go-file (string-append
-                                               module-dir dest-file-basis
-                                               ".go")))
-                                ;; Install source module.
-                                (copy-file src-file
-                                           dest-file)
-                                ;; Install compiled module.
-                                (invoke guild "compile"
-                                        "-L" (getcwd)
-                                        "-o" go-file
-                                        src-file)))))
-                         '(("irregex-guile.scm" "/rx/irregex")
-                           ("irregex.scm" "/rx/source/irregex")
-                           ;; Not really reachable via guile's packaging system,
-                           ;; but nice to have around
-                           ("irregex-utils.scm" "/rx/source/irregex-utils")))
-
-               ;; Also copy over the README.
-               (install-file "irregex.html" doc)
-               #t))))))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "http://synthcode.com/scheme/irregex")
-    (synopsis "S-expression based regular expressions")
-    (description
-     "Irregex is an s-expression based alternative to your classic
-string-based regular expressions.  It implements SRFI 115 and is deeply
-inspired by the SCSH regular expression system.")
-    (license license:bsd-3)))
-
-(define-public guile2.0-irregex
-  (package-for-guile-2.0 guile-irregex))
-
-(define-public guile2.2-irregex
-  (deprecated-package "guile2.2-irregex" guile-irregex))
-
-;; There are two guile-gdbm packages, one using the FFI and one with
-;; direct C bindings, hence the verbose name.
-
-(define-public guile-gdbm-ffi
-  (package
-    (name "guile-gdbm-ffi")
-    (version "20120209.fa1d5b6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ijp/guile-gdbm.git")
-                    (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
-    (build-system trivial-build-system)
-    (inputs
-     `(("guile" ,guile-2.2)
-       ;; patch-and-repack doesn't work for git checkouts,
-       ;; so we must apply the patch manually.
-       ("patch" ,patch)
-       ("patch-file" ,(search-patch
-                       "guile-gdbm-ffi-support-gdbm-1.14.patch"))))
-    (propagated-inputs
-     `(("gdbm" ,gdbm)))
-    (arguments
-     `(#:modules
-       ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 rdelim)
-                      (ice-9 popen))
-
-         ;; Avoid warnings we can safely ignore
-         (setenv "GUILE_AUTO_COMPILE" "0")
-
-         (let* ((out (assoc-ref %outputs "out"))
-                (effective-version
-                 (read-line
-                  (open-pipe* OPEN_READ
-                              (string-append
-                               (assoc-ref %build-inputs "guile")
-                               "/bin/guile")
-                              "-c" "(display (effective-version))")))
-                (module-dir (string-append out "/share/guile/site/"
-                                           effective-version))
-                (source (assoc-ref %build-inputs "source"))
-                (doc (string-append out "/share/doc"))
-                (guild (string-append (assoc-ref %build-inputs "guile")
-                                      "/bin/guild"))
-                (gdbm.scm-dest
-                 (string-append module-dir "/gdbm.scm"))
-                (gdbm.go-dest
-                 (string-append module-dir "/gdbm.go"))
-                (compile-file
-                 (lambda (in-file out-file)
-                   (invoke guild "compile" "-o" out-file in-file))))
-           ;; Switch directory for compiling and installing
-           (chdir source)
-
-           ;; Install the documentation.
-           (install-file "README.md" doc)
-           (copy-recursively "examples" (string-append doc "/examples"))
-
-           ;; Make installation directories.
-           (mkdir-p module-dir)
-
-           ;; copy the source
-           (copy-file "gdbm.scm" gdbm.scm-dest)
-
-           ;; Patch the FFI
-           (substitute* gdbm.scm-dest
-             (("\\(dynamic-link \"libgdbm\"\\)")
-              (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
-                      (assoc-ref %build-inputs "gdbm"))))
-
-           ;; Apply the patch to add support for gdbm-1.14.
-           (let ((patch-command (string-append (assoc-ref %build-inputs "patch")
-                                               "/bin/patch"))
-                 (patch-file (assoc-ref %build-inputs "patch-file")))
-             (with-directory-excursion (dirname gdbm.scm-dest)
-               (format #t "applying '~a'...~%" patch-file)
-               (invoke patch-command "--force" "--input" patch-file)))
-
-           ;; compile to the destination
-           (compile-file gdbm.scm-dest gdbm.go-dest)
-
-           #t))))
-    (home-page "https://github.com/ijp/guile-gdbm")
-    (synopsis "Guile bindings to the GDBM library via Guile's FFI")
-    (description
-     "Guile bindings to the GDBM key-value storage system, using
-Guile's foreign function interface.")
-    (license license:gpl3+)))
-
-(define-public guile2.0-gdbm-ffi
-  (package-for-guile-2.0 guile-gdbm-ffi))
-
-(define-public guile2.2-gdbm-ffi
-  (deprecated-package "guile2.2-gdbm-ffi" guile-gdbm-ffi))
-
-(define-public guile-sqlite3
-  (package
-    (name "guile-sqlite3")
-    (version "0.1.0")
-    (home-page "https://notabug.org/civodul/guile-sqlite3.git")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "1nv8j7wk6b5n4p22szyi8lv8fs31rrzxhzz16gyj8r38c1fyp9qp"))
-              (file-name (string-append name "-" version "-checkout"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)
-       ("sqlite" ,sqlite)))
-    (synopsis "Access SQLite databases from Guile")
-    (description
-     "This package provides Guile bindings to the SQLite database system.")
-    (license license:gpl3+)))
-
-(define-public haunt
-  (package
-    (name "haunt")
-    (version "0.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://files.dthompson.us/haunt/haunt-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0nm00krmqq4zmqi2irh35dbf2cn6al58s620hijmhfvhgvdqznlp"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((ice-9 match) (ice-9 ftw)
-                  ,@%gnu-build-system-modules)
-       #:tests? #f ; test suite is non-deterministic :(
-       #:phases (modify-phases %standard-phases
-                  (add-after 'install 'wrap-haunt
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      ;; Wrap the 'haunt' command to refer to the right
-                      ;; modules.
-                      (let* ((out  (assoc-ref outputs "out"))
-                             (bin  (string-append out "/bin"))
-                             (site (string-append
-                                    out "/share/guile/site")))
-                        (match (scandir site)
-                          (("." ".." version)
-                           (let ((modules (string-append site "/" version))
-                                 (compiled-modules (string-append
-                                                    out "/lib/guile/" version
-                                                    "/site-ccache")))
-                             (wrap-program (string-append bin "/haunt")
-                               `("GUILE_LOAD_PATH" ":" prefix
-                                 (,modules))
-                               `("GUILE_LOAD_COMPILED_PATH" ":" prefix
-                                 (,compiled-modules)))
-                             #t)))))))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (propagated-inputs
-     `(("guile-reader" ,guile-reader)
-       ("guile-commonmark" ,guile-commonmark)))
-    (synopsis "Functional static site generator")
-    (description "Haunt is a static site generator written in Guile
-Scheme.  Haunt features a functional build system and an extensible
-interface for reading articles in any format.")
-    (home-page "http://haunt.dthompson.us")
-    (license license:gpl3+)))
-
-(define-public guile2.0-haunt
-  (package-for-guile-2.0
-   (package (inherit haunt) (name "guile2.0-haunt"))))
-(define-public guile2.2-haunt
-  (deprecated-package "guile2.2-haunt" haunt))
-
-(define-public guile-config
-  (package
-    (name "guile-config")
-    (version "0.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://gitlab.com/a-sassmannshausen/guile-config")
-             (commit "ce12de3f438c6b2b59c43ee21bcd58251835fdf3")))
-       (file-name "guile-config-0.3-checkout")
-       (sha256 (base32 "02zbpin0r9m2vxmr7mv68v3xdn247dcck56kbzjn0gj4c2rhih85"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-2.2)))
-    (synopsis
-     "Guile application configuration parsing library.")
-    (description
-     "Guile Config is a library providing a declarative approach to
-application configuration specification.  The library provides clean
-configuration declaration forms, and processors that take care of:
-configuration file creation; configuration file parsing; command-line
-parameter parsing using getopt-long; basic GNU command-line parameter
-generation (--help, --usage, --version); automatic output generation for the
-above command-line parameters.")
-    (home-page
-     "https://gitlab.com/a-sassmannshausen/guile-config")
-    (license license:gpl3+)))
-
-(define-public guile-redis
-  (package
-    (name "guile-redis")
-    (version "0.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://savannah/guile-redis/guile-redis-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0vx6if6b4r3kwx64vzbs6vpc0cpcr85x11w9vkzq27gw8n7isv56"))
-              (modules '((guix build utils)))
-              (snippet
-               ;; Make sure everything goes under .../site/X.Y, like Guile's
-               ;; search paths expects.
-               '(begin
-                  (substitute* "configure"
-                    (("ac_subst_vars='")
-                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
-                  (substitute* '("Makefile.in"
-                                 "redis/Makefile.in"
-                                 "redis/commands/Makefile.in")
-                    (("moddir =.*/share/guile/site" all)
-                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
-                  #t))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://savannah.nongnu.org/projects/guile-redis/")
-    (synopsis "Redis client library for Guile")
-    (description "Guile-redis provides a Scheme interface to the Redis
-key-value cache and store.")
-    (license license:lgpl3+)))
-
-(define-public guile2.0-redis
-  (package-for-guile-2.0 guile-redis))
-
-(define-public guile2.2-redis
-  (deprecated-package "guile2.2-redis" guile-redis))
-
-(define-public guile-wisp
-  (package
-    (name "guile-wisp")
-    (version "0.9.8")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://bitbucket.org/ArneBab/"
-                                  "wisp/downloads/wisp-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1f2bbicq1rxnwmiplrm4r75wj06w385mjkyvi7g4k740bgwcrzxr"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 rdelim)
-                  (ice-9 popen))
-
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'substitute-before-config
-
-          (lambda* (#:key inputs #:allow-other-keys)
-            (let ((bash (assoc-ref inputs "bash")))
-              ;; Puts together some test files with /bin/bash hardcoded
-              (substitute* "Makefile.in"
-                (("/usr/bin/env bash")
-                 (string-append bash "/bin/bash"))
-                (("\\$\\(GUILE_EFFECTIVE_VERSION\\)/site")
-                 "site/$(GUILE_EFFECTIVE_VERSION)")) ;use the right order
-              #t)))
-
-         ;; auto compilation breaks, but if we set HOME to /tmp,
-         ;; that works ok
-         (add-before
-          'check 'auto-compile-hacky-workaround
-          (lambda _
-            (setenv "HOME" "/tmp")
-            #t))
-         (add-after 'install 'install-go-files
-          (lambda* (#:key outputs inputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (effective (read-line
-                               (open-pipe* OPEN_READ
-                                           "guile" "-c"
-                                           "(display (effective-version))")))
-                   (module-dir (string-append out "/share/guile/site/"
-                                              effective))
-                   (object-dir (string-append out "/lib/guile/" effective
-                                              "/site-ccache"))
-                   (prefix     (string-length module-dir)))
-              ;; compile to the destination
-              (for-each (lambda (file)
-                          (let* ((base (string-drop (string-drop-right file 4)
-                                                    prefix))
-                                 (go   (string-append object-dir base ".go")))
-                           (invoke "guild" "compile" "-L" module-dir
-                                    file "-o" go)))
-                        (find-files module-dir "\\.scm$"))
-              #t))))))
-    (home-page "http://draketo.de/english/wisp")
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (native-inputs
-     `(("python" ,python)
-       ("pkg-config" ,pkg-config)))
-    (synopsis "Whitespace to lisp syntax for Guile")
-    (description "Wisp is a syntax for Guile which provides a Python-like
-whitespace-significant language.  It may be easier on the eyes for some
-users and in some situations.")
-    (license license:gpl3+)))
-
-(define-public guile-sly
-  (package
-    (name "guile-sly")
-    (version "0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://files.dthompson.us/sly/sly-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1svzlbz2vripmyq2kjh0rig16bsrnbkwbsm558pjln9l65mcl4qq"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "configure"
-                    (("_guile_required_version=\"2.0.11\"")
-                     "_guile_required_version=\"2\"")
-                    (("ac_subst_vars='")
-                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
-                  (substitute* (find-files "." "Makefile.in")
-                    (("moddir = .*$")
-                     (string-append
-                      "moddir = "
-                      "$(prefix)/share/guile/site/@GUILE_EFFECTIVE_VERSION@\n"))
-                    (("godir = .*$")
-                     (string-append
-                      "godir = "
-                      "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
-                  #t))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags
-       (list (string-append "--with-libfreeimage-prefix="
-                            (assoc-ref %build-inputs "freeimage"))
-             (string-append "--with-libgslcblas-prefix="
-                            (assoc-ref %build-inputs "gsl")))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (propagated-inputs
-     `(("guile-sdl" ,guile-sdl)
-       ("guile-opengl" ,guile-opengl)))
-    (inputs
-     `(("guile" ,guile-2.2)
-       ("gsl" ,gsl)
-       ("freeimage" ,freeimage)
-       ("mesa" ,mesa)))
-    (synopsis "2D/3D game engine for GNU Guile")
-    (description "Sly is a 2D/3D game engine written in Guile Scheme.  Sly
-features a functional reactive programming interface and live coding
-capabilities.")
-    (home-page "https://dthompson.us/projects/sly.html")
-    (license license:gpl3+)))
-
-(define-public g-wrap
-  (package
-    (name "g-wrap")
-    (version "1.9.15")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://savannah/g-wrap/g-wrap-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0ak0bha37dfpj9kmyw1r8fj8nva639aw5xr66wr5gd3l1rqf5xhg"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (propagated-inputs
-     `(("guile" ,guile-2.2)
-       ("guile-lib" ,guile-lib)))
-    (inputs
-     `(("libffi" ,libffi)))
-    (arguments
-     `(#:configure-flags '("--disable-Werror")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (substitute* (find-files "." "^Makefile.in$")
-                 (("guilemoduledir =.*guile/site" all)
-                  (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
-               #t))))))
-    (synopsis "Generate C bindings for Guile")
-    (description "G-Wrap is a tool and Guile library for generating function
-wrappers for inter-language calls.  It currently only supports generating Guile
-wrappers for C functions.  Given a definition of the types and prototypes for
-a given C interface, G-Wrap will automatically generate the C code that
-provides access to that interface and its types from the Scheme level.")
-    (home-page "https://www.nongnu.org/g-wrap/index.html")
-    (license license:lgpl2.1+)))
-
-(define-public guile-dbi
-  (package
-    (name "guile-dbi")
-    (version "2.1.6")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://download.gna.org/guile-dbi/guile-dbi-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "116njrprhgrsv1qm904sp3b02rq01fx639r433d657gyhw3x159n"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:configure-flags
-       (list (string-append
-              "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
-       #:make-flags
-       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib:"
-                            (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'patch-extension-path
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out     (assoc-ref outputs "out"))
-                    (dbi.scm (string-append
-                              out "/share/guile/site/2.2/dbi/dbi.scm"))
-                    (ext     (string-append out "/lib/libguile-dbi")))
-               (substitute* dbi.scm (("libguile-dbi") ext))
-               #t))))))
-    (inputs
-     `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3))) ; only shared library, no scheme files
-    (propagated-inputs
-     `(("guile" ,guile-2.2)))
-    (synopsis "Guile database abstraction layer")
-    (home-page "http://home.gna.org/guile-dbi/guile-dbi.html")
-    (description
-     "guile-dbi is a library for Guile that provides a convenient interface to
-SQL databases.  Database programming with guile-dbi is generic in that the same
-programming interface is presented regardless of which database system is used.
-It currently supports MySQL, Postgres and SQLite3.")
-    (license license:gpl2+)))
-
-(define guile-dbi-bootstrap
-  (package
-    (inherit guile-dbi)
-    (name "guile-dbi-bootstrap")
-    (inputs '())
-    (arguments
-     (substitute-keyword-arguments (package-arguments guile-dbi)
-       ((#:make-flags _) '(list))))))
-
-(define-public guile-dbd-sqlite3
-  (package
-    (name "guile-dbd-sqlite3")
-    (version "2.1.6")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://download.gna.org/guile-dbi/guile-dbd-sqlite3-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
-    (inputs
-     `(("sqlite" ,sqlite)
-       ("zlib" ,(@ (gnu packages compression) zlib))))
-    (synopsis "Guile DBI driver for SQLite")
-    (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
-    (description
-     "guile-dbi is a library for Guile that provides a convenient interface to
-SQL databases.  This package implements the interface for SQLite.")
-    (license license:gpl2+)))
-
-(define-public guile-dsv
-  (package
-    (name "guile-dsv")
-    (version "0.2.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/artyom-poptsov/guile-dsv")
-                    (commit "bdc5267d007478abc20ea96d7c459b7dd9560b3d")))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1irw6mz8998nwyhzrw9g94jcz60b9zljgqfmipaz1ybn8579qjx0"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-2.2)))
-    (propagated-inputs `(("guile-lib" ,guile-lib)))
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'configure 'set-guilesitedir
-                    (lambda _
-                      (substitute* "Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      (substitute* "modules/Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      (substitute* "modules/dsv/Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      #t))
-                  (add-after 'unpack 'autoreconf
-                    (lambda _
-                      (zero? (system* "autoreconf" "-vfi")))))))
-    (home-page "https://github.com/artyom-poptsov/guile-dsv")
-    (synopsis "DSV module for Guile")
-    (description
-     "Guile-DSV is a GNU Guile module for working with the
-delimiter-separated values (DSV) data format.  Guile-DSV supports the
-Unix-style DSV format and RFC 4180 format.")
-    (license license:gpl3+)))
-
-(define-public guile-xosd
-  (package
-    (name "guile-xosd")
-    (version "0.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/alezost/" name
-                                  "/releases/download/v" version
-                                  "/" name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1ri5065c16kmgrf2pysn2ymxjqi5302lhpb07wkl1jr75ym8fn8p"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)
-       ("xosd" ,xosd)))
-    (home-page "https://github.com/alezost/guile-xosd")
-    (synopsis "XOSD bindings for Guile")
-    (description
-     "Guile-XOSD provides Guile bindings for @code{libxosd},
-@uref{http://sourceforge.net/projects/libxosd/, the X On Screen Display
-library}.")
-    (license license:gpl3+)))
-
-(define-public guile-daemon
-  (package
-    (name "guile-daemon")
-    (version "0.1.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/alezost/" name
-                                  "/releases/download/v" version
-                                  "/" name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0hh6gq6b6phpxm0b1dkxyzj3f4sxdf7dji63609lzypa5v1ad2gv"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://github.com/alezost/guile-daemon")
-    (synopsis "Evaluate code in a running Guile process")
-    (description
-     "Guile-Daemon is a small Guile program that loads your initial
-configuration file, and then reads and evaluates Guile expressions that
-you send to a FIFO file.")
-    (license license:gpl3+)))
-
-(define-public guile-commonmark
-  (package
-    (name "guile-commonmark")
-    (version "0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/OrangeShark/" name
-                                  "/releases/download/v" version
-                                  "/" name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "12cb5fqvvgc87f5xp0ih5az305wnjia89l5jba83d0r2p8bfy0b0"))
-              (modules '((guix build utils)))
-              (snippet
-               ;; Use the real effective version of Guile in directory names
-               ;; instead of a hard-coded "/2.0".
-               '(begin
-                  (substitute* "configure"
-                    (("ac_subst_vars='")
-                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
-                  (substitute* "Makefile.in"
-                    (("/site/2.0")
-                     "/site/@GUILE_EFFECTIVE_VERSION@"))
-                  #t))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (synopsis "CommonMark parser for Guile")
-    (description
-     "guile-commonmark is a library for parsing CommonMark, a fully specified
-variant of Markdown.  The library is written in Guile Scheme and is designed
-to transform a CommonMark document to SXML.  guile-commonmark tries to closely
-follow the @uref{http://commonmark.org/, CommonMark spec}, the main difference
-is no support for parsing block and inline level HTML.")
-    (home-page "https://github.com/OrangeShark/guile-commonmark")
-    (license license:lgpl3+)))
-
-(define-public guile2.0-commonmark
-  (package-for-guile-2.0 guile-commonmark))
-(define-public guile2.2-commonmark
-  (deprecated-package "guile2.2-commonmark" guile-commonmark))
-
-(define-public guile-bytestructures
-  (package
-    (name "guile-bytestructures")
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/TaylanUB/scheme-bytestructures"
-                                  "/releases/download/v" version
-                                  "/bytestructures-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0xf6s8gd3656j8k2ar6y7i62r68azawyzxhsagsk8nvldnrs1r18"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://github.com/TaylanUB/scheme-bytestructures")
-    (synopsis "Structured access to bytevector contents for Guile")
-    (description
-     "Guile bytestructures offers a system imitating the type system
-of the C programming language, to be used on bytevectors.  C's type
-system works on raw memory, and Guile works on bytevectors which are
-an abstraction over raw memory.  It's also more powerful than the C
-type system, elevating types to first-class status.")
-    (license license:gpl3+)))
-
-(define-public guile2.0-bytestructures
-  (package-for-guile-2.0 guile-bytestructures))
-
-(define-public guile-aspell
-  (package
-    (name "guile-aspell")
-    (version "0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://lonelycactus.com/tarball/guile_aspell-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "0vpk5xj9m9qc702z3khmkwhgpb949qbsyz8kw2qycda6qnxk0077"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'configure 'set-guilesitedir
-                    (lambda _
-                      (substitute* "Makefile.in"
-                        (("^guilesitedir =.*$")
-                         "guilesitedir = \
-$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
-                      #t))
-                  (add-before 'build 'set-libaspell-file-name
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((aspell (assoc-ref inputs "aspell")))
-                        (substitute* "aspell.scm"
-                          (("\"libaspell\\.so\"")
-                           (string-append "\"" aspell
-                                          "/lib/libaspell\"")))
-                        #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("guile" ,guile-2.2)
-              ("aspell" ,aspell)))
-    (home-page "https://github.com/spk121/guile-aspell")
-    (synopsis "Spell-checking from Guile")
-    (description
-     "guile-aspell is a Guile Scheme library for comparing a string against a
-dictionary and suggesting spelling corrections.")
-    (license license:gpl3+)))
-
-(define-public guile-bash
-  ;; This project is currently retired.  It was initially announced here:
-  ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
-  (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
-        (revision "0"))
-    (package
-      (name "guile-bash")
-      (version (string-append "0.1.6-" revision "." (string-take commit 7)))
-      (home-page
-       "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (commit commit)
-                      (url home-page)))
-                (sha256
-                 (base32
-                  "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
-                (file-name (string-append name "-" version "-checkout"))))
-      (build-system gnu-build-system)
-      (arguments
-       '(#:configure-flags
-         ;; Add -I to match 'bash.pc' of Bash 4.4.
-         (list (string-append "CPPFLAGS=-I"
-                              (assoc-ref %build-inputs "bash:include")
-                              "/include/bash/include")
-
-               ;; The '.a' file is useless.
-               "--disable-static"
-
-               ;; Install 'lib/bash' as Bash 4.4 expects.
-               (string-append "--libdir=" (assoc-ref %outputs "out")
-                              "/lib/bash"))))
-      (native-inputs `(("pkg-config" ,pkg-config)
-                       ("autoconf" ,autoconf-wrapper)
-                       ("automake" ,automake)
-                       ("libtool" ,libtool)
-                       ;; Gettext brings 'AC_LIB_LINKFLAGS_FROM_LIBS'.
-                       ("gettext" ,gettext-minimal)
-
-                       ;; Bash with loadable module support, for the test
-                       ;; suite.
-                       ("bash-full" ,bash)))
-      (inputs `(("guile" ,guile-2.0)
-                ("bash:include" ,bash "include")))
-      (synopsis "Extend Bash using Guile")
-      (description
-       "Guile-Bash provides a shared library and set of Guile modules,
-allowing you to extend Bash in Scheme.  Scheme interfaces allow you to access
-the following aspects of Bash:
-
-@itemize
-@item aliases;
-@item setting and getting Bash variables;
-@item creating dynamic variables;
-@item creating Bash functions with a Scheme implementation;
-@item reader macro for output capturing;
-@item reader macro for evaluating raw Bash commands.
-@end itemize
-
-To enable it, run:
-
-@example
-enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
-@end example
-
-and then run @command{scm example.scm}.")
-      (license license:gpl3+))))
-
-(define-public guile-8sync
-  (package
-    (name "guile-8sync")
-    (version "0.4.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/8sync/8sync-" version
-                                  ".tar.gz"))
-              (sha256
-               (base32
-                "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("autoconf" ,autoconf)
-                     ("automake" ,automake)
-                     ("guile" ,guile-2.2)
-                     ("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)))
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'configure 'setenv
-                    (lambda _
-                      ;; quiet warnings
-                      (setenv "GUILE_AUTO_COMPILE" "0")
-                      #t)))))
-    (home-page "https://gnu.org/s/8sync/")
-    (synopsis "Asynchronous actor model library for Guile")
-    (description
-     "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
-library for GNU Guile based on the actor model.
-
-Note that 8sync is only available for Guile 2.2.")
-    (license license:lgpl3+)))
-
-(define-public guile-fibers
-  (package
-    (name "guile-fibers")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://wingolog.org/pub/fibers/fibers-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0vjkg72ghgdgphzbjz9ig8al8271rq8974viknb2r1rg4lz92ld0"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("texinfo" ,texinfo)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (synopsis "Lightweight concurrency facility for Guile")
-    (description
-     "Fibers is a Guile library that implements a a lightweight concurrency
-facility, inspired by systems like Concurrent ML, Go, and Erlang.  A fiber is
-like a \"goroutine\" from the Go language: a lightweight thread-like
-abstraction.  Systems built with Fibers can scale up to millions of concurrent
-fibers, tens of thousands of concurrent socket connections, and many parallel
-cores.  The Fibers library also provides Concurrent ML-like channels for
-communication between fibers.
-
-Note that Fibers makes use of some Guile 2.1/2.2-specific features and
-is not available for Guile 2.0.")
-    (home-page "https://github.com/wingo/fibers")
-    (license license:lgpl3+)))
-
-(define-public guile-git
-  (let ((revision "6")
-        (commit "36f93c174adc396c90ec3a6923487f0444fe5d69"))
-    (package
-      (name "guile-git")
-      (version (string-append "0.0-" revision "." (string-take commit 7)))
-      (home-page "https://gitlab.com/guile-git/guile-git.git")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference (url home-page) (commit commit)))
-                (sha256
-                 (base32
-                  "0z1dvn0scx59pbgjkpacam7p5n7630z4qm8fazim7ixq9xv3s8wx"))
-                (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ("pkg-config" ,pkg-config)))
-      (inputs
-       `(("guile" ,guile-2.2)
-         ("libgit2" ,libgit2)))
-      (propagated-inputs
-       `(("guile-bytestructures" ,guile-bytestructures)))
-      (synopsis "Guile bindings for libgit2")
-      (description
-       "This package provides Guile bindings to libgit2, a library to
-manipulate repositories of the Git version control system.")
-      (license license:gpl3+))))
-
-(define-public guile2.0-git
-  (package-for-guile-2.0 guile-git))
-
-(define-public guile-syntax-highlight
-  (package
-    (name "guile-syntax-highlight")
-    (version "0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://files.dthompson.us/"
-                                  "guile-syntax-highlight/"
-                                  "guile-syntax-highlight-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1p771kq15x83483m23bhah1sz6vkalg3drm7x279f4j1cxligkzi"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (synopsis "General-purpose syntax highlighter for GNU Guile")
-    (description "Guile-syntax-highlight is a general-purpose syntax
-highlighting library for GNU Guile.  It can parse code written in various
-programming languages into a simple s-expression that can be converted to
-HTML (via SXML) or any other format for rendering.")
-    (home-page "http://dthompson.us/projects/guile-syntax-highlight.html")
-    (license license:lgpl3+)))
-
-(define-public guile-sjson
-  (package
-    (name "guile-sjson")
-    (version "0.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://dustycloud.org/misc/sjson-" version
-                                  ".tar.gz"))
-              (sha256
-               (base32
-                "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://gitlab.com/dustyweb/guile-sjson")
-    (synopsis "S-expression based json reader/writer for Guile")
-    (description "guile-sjson is a json reader/writer for Guile.
-It has a nice, simple s-expression based syntax.")
-    (license license:lgpl3+)))
-
-(define-public guile-colorized
-  (package
-    (name "guile-colorized")
-    (version "0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/NalaGinrut/guile-colorized/"
-                                  "archive/v" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "16xhc3an6aglnca8xl3mvgi8hsqzqn68vsl5ga4bz8bvbap5fn4p"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((system base compile)
-                  ,@%gnu-build-system-modules)
-       #:tests? #f ;No tests included
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure) ;No configure script
-         (replace 'install
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (module-dir (string-append out "/share/guile/site/2.2"))
-                    (language-dir (string-append module-dir "/ice-9"))
-                    (guild (string-append (assoc-ref inputs "guile")
-                                          "/bin/guild")))
-               ;; The original 'make install' is too primitive.
-
-               ;; copy the source
-               (install-file "ice-9/colorized.scm" language-dir)
-
-               ;; compile to the destination
-               (compile-file "ice-9/colorized.scm"
-                             #:output-file (string-append
-                                            language-dir "/colorized.go"))
-               #t))))))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (home-page "https://github.com/NalaGinrut/guile-colorized")
-    (synopsis "Colorized REPL for Guile")
-    (description
-     "Guile-colorized provides you with a colorized REPL for GNU Guile.")
-    (license license:gpl3+)))
-
-(define-public guile-simple-zmq
-  (let ((commit "1f3b7c0b9b249c6fde8e8a632b252d8a1b794424")
-        (revision "1"))
-    (package
-      (name "guile-simple-zmq")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/jerry40/guile-simple-zmq")
-               (commit commit)))
-         (sha256
-          (base32
-           "0nj2pd5bsmmgd3c54wh4sixfhmsv1arsq7yam2d7487h3n9q57r7"))
-         (file-name (git-file-name name version))))
-      (build-system trivial-build-system)
-      (arguments
-       `(#:modules ((guix build utils))
-         #:builder
-         (begin
-           (use-modules (guix build utils)
-                        (srfi srfi-26)
-                        (ice-9 match)
-                        (ice-9 popen)
-                        (ice-9 rdelim))
-
-           (let* ((out (assoc-ref %outputs "out"))
-                  (guile (assoc-ref %build-inputs "guile"))
-                  (effective (read-line
-                              (open-pipe* OPEN_READ
-                                          (string-append guile "/bin/guile")
-                                          "-c" "(display (effective-version))")))
-                  (module-dir (string-append out "/share/guile/site/"
-                                             effective))
-                  (go-dir     (string-append out "/lib/guile/"
-                                             effective "/site-ccache/"))
-                  (source     (string-append (assoc-ref %build-inputs "source")
-                                             "/src"))
-                  (scm-file "simple-zmq.scm")
-                  (guild (string-append (assoc-ref %build-inputs "guile")
-                                        "/bin/guild"))
-                  (zmq  (assoc-ref %build-inputs "zeromq"))
-                  (deps (list zmq))
-                  (path (string-join
-                         (map (cut string-append <>
-                                   "/lib/")
-                              deps)
-                         ":")))
-             ;; Make installation directories.
-             (mkdir-p module-dir)
-             (mkdir-p go-dir)
-
-             ;; Compile .scm files and install.
-             (chdir source)
-             (setenv "GUILE_AUTO_COMPILE" "0")
-             (for-each (lambda (file)
-                         (let* ((dest-file (string-append module-dir "/"
-                                                          file))
-                                (go-file (match (string-split file #\.)
-                                           ((base _)
-                                            (string-append go-dir "/"
-                                                           base ".go")))))
-                           ;; Install source module.
-                           (copy-file file dest-file)
-                           (substitute* dest-file
-                             (("\\(dynamic-link \"libzmq\"\\)")
-                              (format #f "(dynamic-link \"~a/lib/libzmq.so\")"
-                                      (assoc-ref %build-inputs "zeromq"))))
-
-                           ;; Install and compile module.
-                           (unless (zero? (system* guild "compile"
-                                                   "-L" source
-                                                   "-o" go-file
-                                                   dest-file))
-                             (error (format #f "Failed to compile ~s to ~s!"
-                                            file go-file)))))
-                       (list scm-file))
-             #t))))
-      (inputs
-       `(("guile" ,guile-2.2)))
-      (propagated-inputs
-       `(("zeromq" ,zeromq)))
-      (home-page "https://github.com/jerry40/guile-simple-zmq")
-      (synopsis "Guile wrapper over ZeroMQ library")
-      (description
-       "This package provides a Guile programming interface to the ZeroMQ
-messaging library.")
-      (license license:gpl3+))))
-
-(define-public jupyter-guile-kernel
-  (let ((commit "a5c5f3ea3215b65e770bcb62f71117b0ec4575ed")
-        (revision "0"))
-    (package
-      (name "jupyter-guile-kernel")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/jerry40/guile-kernel")
-               (commit commit)))
-         (sha256
-          (base32
-           "0y5jr0f0dyskvsawqbf6n0bpg8jirw4mhqbarf2a6p9lxhqha9s9"))))
-      (build-system trivial-build-system)
-      (arguments
-       `(#:modules ((guix build utils))
-         #:builder
-         (begin
-           (use-modules (guix build utils)
-                        (srfi srfi-26)
-                        (ice-9 match)
-                        (ice-9 popen)
-                        (ice-9 rdelim))
-
-           (let* ((out (assoc-ref %outputs "out"))
-                  (guile (assoc-ref %build-inputs "guile"))
-                  (effective (read-line
-                              (open-pipe* OPEN_READ
-                                          (string-append guile "/bin/guile")
-                                          "-c" "(display (effective-version))")))
-                  (module-dir (string-append out "/share/guile/site/"
-                                             effective))
-                  (kernel-dir (string-append out "/share/jupyter/kernels/guile"))
-                  (go-dir     (string-append out "/lib/guile/"
-                                             effective
-                                             "/site-ccache"))
-                  (source     (string-append (assoc-ref %build-inputs "source")
-                                             "/src"))
-                  (scm-files '("hmac.scm"
-                               "tools.scm"
-                               "guile-jupyter-kernel.scm"))
-                  (kernel-file "kernel.json")
-                  (guild  (string-append (assoc-ref %build-inputs "guile")
-                                         "/bin/guild"))
-                  (g-szmq (assoc-ref %build-inputs "guile-simple-zmq"))
-                  (json   (assoc-ref %build-inputs "guile-json"))
-                  (deps   (list g-szmq json))
-                  (path   (string-join
-                           (map (cut string-append <>
-                                     "/share/guile/site/"
-                                     effective)
-                                deps)
-                           ":"))
-                  (gopath (string-join
-                           (map (cut string-append <>
-                                     "/lib/guile/" effective
-                                     "/site-ccache/")
-                                deps)
-                           ":")))
-
-             ;; Make installation directories.
-             (mkdir-p module-dir)
-             (mkdir-p kernel-dir)
-             (mkdir-p go-dir)
-
-             ;; Make a writable copy of SOURCE.
-             (copy-recursively source ".")
-
-             ;; Record the absolute file name of the 'openssl' command.
-             (substitute* "hmac.scm"
-               (("openssl")
-                (string-append (assoc-ref %build-inputs "openssl")
-                               "/bin/openssl")))
-
-             ;; Compile .scm files and install.
-             (setenv "GUILE_AUTO_COMPILE" "0")
-             (setenv "GUILE_LOAD_PATH" path)
-             (setenv "GUILE_LOAD_COMPILED_PATH" gopath)
-
-             (for-each (lambda (file)
-                         (let* ((dest-file (string-append module-dir "/"
-                                                          file))
-                                (go-file (match (string-split file #\.)
-                                           ((base _)
-                                            (string-append go-dir "/"
-                                                           base ".go")))))
-                           ;; Install source module.
-                           (copy-file file dest-file)
-
-                           ;; Install compiled module.
-                           (unless (zero? (system* guild "compile"
-                                                   "-L" source
-                                                   "-o" go-file
-                                                   file))
-                             (error (format #f "Failed to compile ~s to ~s!"
-                                            file go-file)))))
-                       scm-files)
-
-             ;; Install kernel
-             (copy-file kernel-file (string-append kernel-dir "/"
-                                                   kernel-file))
-             ;; Fix hard-coded file name in the kernel
-             (substitute* (string-append kernel-dir "/"
-                                         kernel-file)
-               (("/home/jerry/.local/share/jupyter/kernels/guile/guile-jupyter-kernel.scm")
-                (string-append module-dir "/guile-jupyter-kernel.scm"))
-               (("\"guile\"")
-                (string-append "\"" (assoc-ref %build-inputs "guile")
-                               "/bin/guile\""))
-               (("-s")
-                (string-append "--no-auto-compile\", \"-s")))
-
-             #t))))
-      (inputs
-       `(("openssl" ,openssl)
-         ("guile" ,guile-2.2)))
-      (propagated-inputs
-       `(("guile-json" ,guile-json)
-         ("guile-simple-zmq" ,guile-simple-zmq)))
-      (synopsis "Guile kernel for the Jupyter Notebook")
-      (description
-       "This package provides a Guile 2.x kernel for the Jupyter Notebook.  It
-allows users to interact with the Guile REPL through Jupyter.")
-      (home-page "https://github.com/jerry40/guile-kernel")
-      (license license:gpl3+))))
-
-(define-public guile-sparql
-  (package
-   (name "guile-sparql")
-   (version "0.0.7")
-   (source (origin
-            (method url-fetch)
-            (uri (string-append
-                  "https://github.com/roelj/guile-sparql/releases/download/"
-                  version "/guile-sparql-" version ".tar.gz"))
-            (sha256
-             (base32 "1drnvhsgl0gc5crmb16yyw1j98nkhwwcgssv9vgm36ng43nnzffd"))))
-   (build-system gnu-build-system)
-   (arguments `(#:tests? #f)) ; There are no tests.
-   (native-inputs
-    `(("pkg-config" ,pkg-config)))
-   (inputs
-    `(("guile" ,guile-2.2)))
-   (home-page "https://github.com/roelj/guile-sparql")
-   (synopsis "SPARQL module for Guile")
-   (description "This package provides the functionality to query a SPARQL
-endpoint.  Additionally, it provides an interface to write SPARQL queries
-using S-expressions.")
-   (license license:gpl3+)))
-
-;;; guile.scm ends here
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
+;;; Copyright © 2014, 2016, 2018 David Thompson <davet@gnu.org>
+;;; Copyright © 2014, 2017, 2018 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Amirouche <amirouche@hypermove.net>
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2019 Taylan Kammer <taylan.kammer@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages guile)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages dbm)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages hurd)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages libunistring)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages version-control)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system guile)
+  #:use-module (guix utils)
+  #:use-module (ice-9 match)
+  #:use-module ((srfi srfi-1) #:prefix srfi-1:))
+
+;;; Commentary:
+;;;
+;;; GNU Guile, and modules and extensions.
+;;;
+;;; Code:
+
+(define-public guile-1.8
+  (package
+   (name "guile")
+   (version "1.8.8")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/guile/guile-" version
+                                ".tar.gz"))
+            (sha256
+             (base32
+              "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))
+            (patches (search-patches "guile-1.8-cpp-4.5.patch"))))
+   (build-system gnu-build-system)
+   (arguments '(#:configure-flags '("--disable-error-on-warning")
+
+                ;; Insert a phase before `configure' to patch things up.
+                #:phases
+                (modify-phases %standard-phases
+                  (add-before 'configure 'patch-stuff
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Add a call to `lt_dladdsearchdir' so that
+                      ;; `libguile-readline.so' & co. are in the
+                      ;; loader's search path.
+                      (substitute* "libguile/dynl.c"
+                        (("lt_dlinit.*$" match)
+                         (format #f
+                                 "  ~a~%  lt_dladdsearchdir(\"~a/lib\");~%"
+                                 match
+                                 (assoc-ref outputs "out"))))
+
+                      ;; The usual /bin/sh...
+                      (substitute* "ice-9/popen.scm"
+                        (("/bin/sh") (which "sh")))
+                      #t)))))
+   (inputs `(("gawk" ,gawk)
+             ("readline" ,readline)))
+
+   ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
+   ;; propagated.
+   (propagated-inputs `(("gmp" ,gmp)
+                        ("libltdl" ,libltdl)))
+
+   ;; When cross-compiling, a native version of Guile itself is needed.
+   (self-native-input? #t)
+
+   (native-search-paths
+    (list (search-path-specification
+           (variable "GUILE_LOAD_PATH")
+           (files '("share/guile/site")))))
+
+   (synopsis "Scheme implementation intended especially for extensions")
+   (description
+    "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
+official extension language of the GNU system.  It is an implementation of
+the Scheme language which can be easily embedded in other applications to
+provide a convenient means of extending the functionality of the application
+without requiring the source code to be rewritten.")
+   (home-page "https://www.gnu.org/software/guile/")
+   (license license:lgpl2.0+)))
+
+(define-public guile-2.0
+  (package
+   (name "guile")
+   (version "2.0.14")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/guile/guile-" version
+                                ".tar.xz"))
+            (sha256
+             (base32
+              "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78"))))
+   (build-system gnu-build-system)
+   (native-inputs `(("pkgconfig" ,pkg-config)))
+   (inputs `(("libffi" ,libffi)
+             ,@(libiconv-if-needed)
+
+             ;; We need Bash when cross-compiling because some of the scripts
+             ;; in bin/ refer to it.  Use 'bash-minimal' because we don't need
+             ;; an interactive Bash with Readline and all.
+             ,@(if (target-mingw?) '() `(("bash" ,bash-minimal)))))
+   (propagated-inputs
+    `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
+       ;; reads `-lltdl -lunistring', adding them here will add the needed
+       ;; `-L' flags.  As for why the `.la' file lacks the `-L' flags, see
+       ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
+      ("libunistring" ,libunistring)
+
+      ;; Depend on LIBLTDL, not LIBTOOL.  That way, we avoid some the extra
+      ;; dependencies that LIBTOOL has, which is helpful during bootstrap.
+      ("libltdl" ,libltdl)
+
+      ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
+      ;; must be propagated.
+      ("bdw-gc" ,libgc)
+      ("gmp" ,gmp)))
+
+   (self-native-input? #t)
+
+   (outputs '("out" "debug"))
+
+   (arguments
+    `(#:configure-flags '("--disable-static") ; saves 3 MiB
+      #:phases
+      (modify-phases %standard-phases
+        (add-before 'configure 'pre-configure
+          (lambda* (#:key inputs #:allow-other-keys)
+            ;; Tell (ice-9 popen) the file name of Bash.
+            (let ((bash (assoc-ref inputs "bash")))
+              (substitute* "module/ice-9/popen.scm"
+                ;; If bash is #f allow fallback for user to provide
+                ;; "bash" in PATH.  This happens when cross-building to
+                ;; MinGW for which we do not have Bash yet.
+                (("/bin/sh")
+                 ,@(if (target-mingw?)
+                       '((if bash
+                             (string-append bash "/bin/bash")
+                             "bash"))
+                       '((string-append bash "/bin/bash")))))
+              #t))))))
+
+   (native-search-paths
+    (list (search-path-specification
+           (variable "GUILE_LOAD_PATH")
+           (files '("share/guile/site/2.0")))
+          (search-path-specification
+           (variable "GUILE_LOAD_COMPILED_PATH")
+           (files '("lib/guile/2.0/site-ccache")))))
+
+   (synopsis "Scheme implementation intended especially for extensions")
+   (description
+    "Guile is the GNU Ubiquitous Intelligent Language for Extensions, the
+official extension language of the GNU system.  It is an implementation of
+the Scheme language which can be easily embedded in other applications to
+provide a convenient means of extending the functionality of the application
+without requiring the source code to be rewritten.")
+   (home-page "https://www.gnu.org/software/guile/")
+   (license license:lgpl3+)))
+
+(define-public guile-2.0.13
+  ;; For testing a "minimal" Guix
+  (hidden-package
+   (package (inherit guile-2.0)
+     (name "guile")
+     (version "2.0.13")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append "mirror://gnu/guile/guile-" version
+                                   ".tar.xz"))
+               (sha256
+                (base32
+                 "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p")))))))
+
+(define-public guile-2.2
+  (package (inherit guile-2.0)
+    (name "guile")
+    (version "2.2.4")
+    (source (origin
+              (method url-fetch)
+
+              ;; Note: we are limited to one of the compression formats
+              ;; supported by the bootstrap binaries, so no lzip here.
+              (uri (string-append "mirror://gnu/guile/guile-" version
+                                  ".tar.xz"))
+              (sha256
+               (base32
+                "07p3g0v2ba2vlfbfidqzlgbhnzdx46wh2rgc5gszq1mjyx5bks6r"))
+              (modules '((guix build utils)))
+
+              ;; Remove the pre-built object files.  Instead, build everything
+              ;; from source, at the expense of significantly longer build
+              ;; times (almost 3 hours on a 4-core Intel i5).
+              (snippet '(begin
+                          (for-each delete-file
+                                    (find-files "prebuilt" "\\.go$"))
+                          #t))))
+    (properties '((timeout . 72000)               ;20 hours
+                  (max-silent-time . 36000)))     ;10 hours (needed on ARM
+                                                  ;  when heavily loaded)
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUILE_LOAD_PATH")
+            (files '("share/guile/site/2.2")))
+           (search-path-specification
+            (variable "GUILE_LOAD_COMPILED_PATH")
+            (files '("lib/guile/2.2/site-ccache")))))
+
+    (arguments
+     (if (%current-target-system)
+         (substitute-keyword-arguments (package-arguments guile-2.0)
+           ((#:phases phases '%standard-phases)
+            `(modify-phases ,phases
+               (add-after 'unpack 'sacrifice-elisp-support
+                 (lambda _
+                   ;; Cross-compiling language/elisp/boot.el fails, so
+                   ;; sacrifice it.  See
+                   ;; <https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=988aa29238fca862c7e2cb55f15762a69b4c16ce>
+                   ;; for the upstream fix.
+                   (substitute* "module/Makefile.in"
+                     (("language/elisp/boot\\.el")
+                      "\n"))
+                   #t))
+               ,@(if (hurd-target?)
+                     `((add-after 'unpack 'allow-madvise-ENOSYS
+                         (lambda _
+                           ;; Do not warn about ENOSYS on 'madvise'.  This is
+                           ;; what Guile commit
+                           ;; 45e4ace6603e00b297e6542362273041aebe7305 does.
+                           ;; TODO: Remove for Guile >= 2.2.5.
+                           (substitute* "libguile/vm.c"
+                             (("perror \\(\"madvise failed\"\\)")
+                              "if (errno != ENOSYS) perror (\"madvised failed\");"))
+                           #t)))
+                     '()))))
+         (package-arguments guile-2.0)))))
+
+(define-public guile-2.2/fixed
+  ;; A package of Guile 2.2 that's rarely changed.  It is the one used
+  ;; in the `base' module, and thus changing it entails a full rebuild.
+  (package
+    (inherit guile-2.2)
+    (properties '((hidden? . #t)            ;people should install 'guile-2.2'
+                  (timeout . 72000)             ;20 hours
+                  (max-silent-time . 36000))))) ;10 hours (needed on ARM
+                                                ;  when heavily loaded)
+
+(define-public guile-next
+  ;; This is the upcoming Guile 3.0, with JIT support.
+  (let ((commit "6f3357b0df64c4be17e72079864c09a542f1c779")
+        (revision "1"))
+    (package
+      (inherit guile-2.2)
+      (name "guile-next")
+      (version "2.9.1")
+      (source (origin
+                (inherit (package-source guile-2.2))
+                (uri (string-append "https://alpha.gnu.org/gnu/guile/guile-"
+                                    version ".tar.xz"))
+                (sha256
+                 (base32
+                  "0iba93yqn6mvgid0rfsrg4amym36pg9m8cqdplxsy222blrj9gh1"))))
+      (native-search-paths
+       (list (search-path-specification
+              (variable "GUILE_LOAD_PATH")
+              (files '("share/guile/site/3.0")))
+             (search-path-specification
+              (variable "GUILE_LOAD_COMPILED_PATH")
+              (files '("lib/guile/3.0/site-ccache"
+                       "share/guile/site/3.0")))))
+      (properties '((ftp-server . "alpha.gnu.org")
+                    (upstream-name . "guile"))))))
+
+(define (make-guile-readline guile)
+  (package
+    (name "guile-readline")
+    (version (package-version guile))
+    (source (package-source guile))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--disable-silent-rules")
+       #:phases (modify-phases %standard-phases
+                  (add-before 'build 'chdir
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (invoke "make" "-C" "libguile" "scmconfig.h")
+                      (invoke "make" "-C" "lib")
+                      (chdir "guile-readline")
+
+                      (substitute* "Makefile"
+                        (("../libguile/libguile-[[:graph:]]+\\.la")
+                         ;; Remove dependency on libguile-X.Y.la.
+                         "")
+                        (("^READLINE_LIBS = (.*)$" _ libs)
+                         ;; Link against the provided libguile.
+                         (string-append "READLINE_LIBS = "
+                                        "-lguile-$(GUILE_EFFECTIVE_VERSION) "
+                                        libs "\n"))
+                        (("\\$\\(top_builddir\\)/meta/build-env")
+                         ;; Use the provided Guile, not the one from
+                         ;; $(builddir).
+                         "")
+
+                        ;; Install modules to the 'site' directories.
+                        (("^moddir = .*$")
+                         "moddir = $(pkgdatadir)/site/$(GUILE_EFFECTIVE_VERSION)\n")
+                        (("^ccachedir = .*$")
+                         "ccachedir = $(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/site-ccache\n"))
+
+                      ;; Load 'guile-readline.so' from the right place.
+                      (substitute* "ice-9/readline.scm"
+                        (("load-extension \"guile-readline\"")
+                         (format #f "load-extension \
+ (string-append ~s \"/lib/guile/\" (effective-version) \"/extensions/guile-readline\")"
+                                 (assoc-ref outputs "out"))))
+                      #t)))))
+    (home-page (package-home-page guile))
+    (native-inputs (package-native-inputs guile))
+    (inputs
+     `(,@(package-inputs guile)                   ;to placate 'configure'
+       ,@(package-propagated-inputs guile)
+       ("guile" ,guile)
+       ("readline" ,readline)))
+    (synopsis "Line editing support for GNU Guile")
+    (description
+     "This module provides line editing support via the Readline library for
+GNU@tie{}Guile.  Use the @code{(ice-9 readline)} module and call its
+@code{activate-readline} procedure to enable it.")
+    (license license:gpl3+)))
+
+(define-public guile-readline
+  (make-guile-readline guile-2.2))
+
+(define (guile-variant-package-name prefix)
+  (lambda (name)
+    "Return NAME with PREFIX instead of \"guile-\", when applicable."
+    (if (string-prefix? "guile-" name)
+        (string-append prefix "-"
+                       (string-drop name
+                                    (string-length "guile-")))
+        name)))
+
+(define package-for-guile-2.2
+  ;; A procedure that rewrites the dependency tree of the given package to use
+  ;; GUILE-2.2 instead of GUILE-2.0.
+  (package-input-rewriting `((,guile-2.0 . ,guile-2.2))
+                           (guile-variant-package-name "guile2.2")))
+
+(define package-for-guile-2.0
+  ;; Likewise, but the other way around.  :-)
+  (package-input-rewriting `((,guile-2.2 . ,guile-2.0))
+                           (guile-variant-package-name "guile2.0")))
+
+(define-public guile-for-guile-emacs
+  (package (inherit guile-2.2)
+    (name "guile-for-guile-emacs")
+    (version "20150510.d8d9a8d")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "git://git.hcoop.net/git/bpt/guile.git")
+                    (commit "d8d9a8da05ec876acba81a559798eb5eeceb5a17")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "00sprsshy16y8pxjy126hr2adqcvvzzz96hjyjwgg8swva1qh6b0"))))
+    (arguments
+     `(;; Tests aren't passing for now.
+       ;; Obviously we should re-enable this!
+       #:tests? #f
+       ,@(package-arguments guile-2.2)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("flex" ,flex)
+       ("texinfo" ,texinfo)
+       ("gettext" ,gettext-minimal)
+       ,@(package-native-inputs guile-2.2)))
+    ;; Same as in guile-2.0
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUILE_LOAD_PATH")
+            (files '("share/guile/site/2.0")))
+           (search-path-specification
+            (variable "GUILE_LOAD_COMPILED_PATH")
+            (files '("lib/guile/2.0/site-ccache"
+                     "share/guile/site/2.0")))))))
+
+\f
+;;;
+;;; Extensions.
+;;;
+
+(define-public guile-json
+  (package
+    (name "guile-json")
+    (version "1.2.0")
+    (home-page "https://github.com/aconchillo/guile-json")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.savannah.nongnu.org/releases/"
+                                  name "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15gnb84d7hpazqhskkf3g9z4r6knw54wfj4ch5270kakz1lp70c9"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("guile" ,guile-2.2)))
+    (inputs `(("guile" ,guile-2.2)))
+    (synopsis "JSON module for Guile")
+    (description
+     "Guile-JSON supports parsing and building JSON documents according to the
+specification.  These are the main features:
+
+@itemize
+@item Strictly complies to @uref{http://json.org, specification}.
+@item Build JSON documents programmatically via macros.
+@item Unicode support for strings.
+@item Allows JSON pretty printing.
+@end itemize\n")
+
+    ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
+    (license license:gpl3+)))
+
+(define-public guile2.2-json
+  (deprecated-package "guile2.2-json" guile-json))
+
+(define-public guile2.0-json
+  (package-for-guile-2.0 guile-json))
+
+(define-public guile-json-3
+  ;; This version is incompatible with 1.x; see the 'NEWS' file.
+  (package
+    (inherit guile-json)
+    (name "guile-json")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.savannah.nongnu.org/releases/"
+                                  name "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1yfqscz74i4vxylabd3s9l0wbdp8bg9qxnv1ixdm3b1l7zdx00z3"))))))
+
+;; There are two guile-gdbm packages, one using the FFI and one with
+;; direct C bindings, hence the verbose name.
+
+(define-public guile-gdbm-ffi
+  (package
+    (name "guile-gdbm-ffi")
+    (version "20120209.fa1d5b6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ijp/guile-gdbm.git")
+                    (commit "fa1d5b6231d0e4d096687b378c025f2148c5f246")))
+              (file-name (string-append name "-" version "-checkout"))
+              (patches (search-patches
+                        "guile-gdbm-ffi-support-gdbm-1.14.patch"))
+              (sha256
+               (base32
+                "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
+    (build-system guile-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'move-examples
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Move examples where they belong.
+                      (let* ((out (assoc-ref outputs "out"))
+                             (doc (string-append out "/share/doc/"
+                                                 (strip-store-file-name out)
+                                                 "/examples")))
+                        (copy-recursively "examples" doc)
+                        (delete-file-recursively "examples")
+                        #t)))
+                  (add-after 'unpack 'set-libgdbm-file-name
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "gdbm.scm"
+                        (("\\(dynamic-link \"libgdbm\"\\)")
+                         (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
+                                 (assoc-ref inputs "gdbm"))))
+                      #t)))))
+    (native-inputs
+     `(("guile" ,guile-2.2)))
+    (inputs
+     `(("gdbm" ,gdbm)))
+    (home-page "https://github.com/ijp/guile-gdbm")
+    (synopsis "Guile bindings to the GDBM library via Guile's FFI")
+    (description
+     "Guile bindings to the GDBM key-value storage system, using
+Guile's foreign function interface.")
+    (license license:gpl3+)))
+
+(define-public guile2.0-gdbm-ffi
+  (package-for-guile-2.0 guile-gdbm-ffi))
+
+(define-public guile2.2-gdbm-ffi
+  (deprecated-package "guile2.2-gdbm-ffi" guile-gdbm-ffi))
+
+(define-public guile-sqlite3
+  (package
+    (name "guile-sqlite3")
+    (version "0.1.0")
+    (home-page "https://notabug.org/guile-sqlite3/guile-sqlite3.git")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1nv8j7wk6b5n4p22szyi8lv8fs31rrzxhzz16gyj8r38c1fyp9qp"))
+              (file-name (string-append name "-" version "-checkout"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-2.2)
+       ("sqlite" ,sqlite)))
+    (synopsis "Access SQLite databases from Guile")
+    (description
+     "This package provides Guile bindings to the SQLite database system.")
+    (license license:gpl3+)))
+
+(define-public guile2.0-sqlite3
+  (package-for-guile-2.0 guile-sqlite3))
+
+(define-public guile-bytestructures
+  (package
+    (name "guile-bytestructures")
+    (version "1.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/TaylanUB/scheme-bytestructures"
+                                  "/releases/download/v" version
+                                  "/bytestructures-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ibk7fjwpb450lnrva4bx45sgln3pbyb645az4ansvh1spgani43"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-2.2)))
+    (home-page "https://github.com/TaylanUB/scheme-bytestructures")
+    (synopsis "Structured access to bytevector contents for Guile")
+    (description
+     "Guile bytestructures offers a system imitating the type system
+of the C programming language, to be used on bytevectors.  C's type
+system works on raw memory, and Guile works on bytevectors which are
+an abstraction over raw memory.  It's also more powerful than the C
+type system, elevating types to first-class status.")
+    (license license:gpl3+)))
+
+(define-public guile2.0-bytestructures
+  (package-for-guile-2.0 guile-bytestructures))
+
+(define-public guile-git
+  (package
+    (name "guile-git")
+    (version "0.1.0")
+    (home-page "https://gitlab.com/guile-git/guile-git.git")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1z3awa3i5il08dl2swbnli2j7cawdpray11zx4844j27bxqddcs2"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("texinfo" ,texinfo)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-2.2)
+       ("libgit2" ,libgit2)))
+    (propagated-inputs
+     `(("guile-bytestructures" ,guile-bytestructures)))
+    (synopsis "Guile bindings for libgit2")
+    (description
+     "This package provides Guile bindings to libgit2, a library to
+manipulate repositories of the Git version control system.")
+    (license license:gpl3+)))
+
+(define-public guile2.0-git
+  (package-for-guile-2.0 guile-git))
+
+;;; guile.scm ends here
+