Subject: Update ASDF Version to 3.3.3.

From: Katherine Cox-Buday <[email-masked]>
Date: Tue, 16 Apr 2019 21:34:26 -0500

This patch overwrites the ASDF version vendored into SBCL with the
newest version. The SBCL devs have stated[1] that they are not planning
on keeping their version of ASDF up to date. This will allow our SBCL
packages to use the newest ASDF going forward so.

[1] - https://bugs.launchpad.net/sbcl/+bug/1823442

>From cfefce666df7a5fbc0f3ab4e771ccc8c28620bdd Mon Sep 17 00:00:00 2001
From: Katherine Cox-Buday <[email-masked]>
Date: Mon, 15 Apr 2019 22:33:27 -0500
Subject: [PATCH 1/2] gnu: Add cl-clack.

* gnu/packages/lisp.scm (cl-clack): New variable.
---
 gnu/packages/lisp.scm | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 5549f7ddc8..449bcc856f 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -5246,3 +5246,41 @@ Python's WSGI and Ruby's Rack.")
 
 (define-public cl-clack
   (sbcl-package->cl-source-package sbcl-clack))
+
+(define-public cl-asdf
+  (let ((version "3.3.3"))
+    (package
+      (name "cl-asdf")
+      (version version)
+      (source
+       (origin
+         (method url-fetch)
+         (uri
+          (string-append
+           "https://common-lisp.net/project/asdf/archives/asdf-"
+           version ".lisp"))
+         (sha256
+          (base32 "18lr6kxvzhr79c9rx3sdricz30aby866fj0m24w27zxsqlyvn3rd"))))
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils)
+                    (guix build lisp-utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils)
+                        (guix build lisp-utils))
+           (let* ((out (string-append (assoc-ref %outputs "out")))
+                  (asdf-install
+                   (format #f "~a~a/source/asdf/" out %source-install-prefix))
+                  (asdf (string-append (assoc-ref %build-inputs "source"))))
+             (mkdir-p asdf-install)
+             (copy-file asdf
+                        (string-append asdf-install "asdf.lisp"))))))
+      (home-page "https://common-lisp.net/project/asdf/")
+      (synopsis "Another System Definition Facility")
+      (description
+       "ASDF is what Common Lisp hackers use to build and load software. It is
+the successor of the Lisp DEFSYSTEM of yore. ASDF stands for Another System
+Definition Facility.")
+      ;; MIT License
+      (license license:expat))))
-- 
2.20.1

>From a3b9985c46e2dbc9ce472ed5522cc5f1e8763c6e Mon Sep 17 00:00:00 2001
From: Katherine Cox-Buday <[email-masked]>
Date: Mon, 15 Apr 2019 22:38:55 -0500
Subject: [PATCH 2/2] gnu: sbcl: Update ASDF Version to 3.3.3.

* gnu/packages/lisp.scm (sbcl): Update ASDF Version to 3.3.3.
---
 gnu/packages/lisp.scm | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 449bcc856f..419ff1d2eb 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -328,14 +328,10 @@ an interpreter, a compiler, a debugger, and much more.")
                            version "-source.tar.bz2"))
        (sha256
         (base32 "08z62qba0kmm15k93s2rq7ipi769895g8iwigcp20qjh6amwnwph"))
-       (modules '((guix build utils)))
-       (snippet
-        ;; Add sbcl-bundle-systems to 'default-system-source-registry'.
-        `(begin
-           (substitute* "contrib/asdf/asdf.lisp"
-             ,@(asdf-substitutions name))
-           #t))))
+       (modules '((guix build utils)))))
     (build-system gnu-build-system)
+    (inputs
+     `(("cl-asdf" ,cl-asdf)))
     (outputs '("out" "doc"))
     (native-inputs
      ;; From INSTALL:
@@ -415,6 +411,22 @@ an interpreter, a compiler, a debugger, and much more.")
          ;; them in HOME, so it needs to be writeable.
          (add-before 'build 'set-HOME
            (lambda _ (setenv "HOME" "/tmp") #t))
+         (add-after 'unpack 'replace-asdf
+           ;; SBCL developers have not committed to keeping ASDF up to date
+           ;; due to breaking changes. Guix can handle this situation easily,
+           ;; and it behooves us to have more control over what version of
+           ;; ASDF we use to build software; therefore, replace the contrib
+           ;; ASDF with the version packaged into Guix.
+           (lambda* (#:key build-inputs #:allow-other-keys)
+             (let* ((cl-asdf (assoc-ref %build-inputs "cl-asdf"))
+                    (guix-asdf
+                     (format #f "~a/share/common-lisp/source/asdf/asdf.lisp"
+                             cl-asdf))
+                    (out (string-append (assoc-ref %outputs "out")))
+                    (contrib-asdf (format #f "./contrib/asdf/asdf.lisp")))
+               (copy-file guix-asdf contrib-asdf)
+               (substitute* "contrib/asdf/asdf.lisp"
+                 ,@(asdf-substitutions name)))))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
@@ -445,8 +457,8 @@ an interpreter, a compiler, a debugger, and much more.")
                                  new-doc/sbcl-dir)
                (delete-file-recursively old-doc-dir)
                #t))))
-         ;; No 'check' target, though "make.sh" (build phase) runs tests.
-         #:tests? #f))
+       ;; No 'check' target, though "make.sh" (build phase) runs tests.
+       #:tests? #f))
     (native-search-paths
      (list (search-path-specification
             (variable "XDG_DATA_DIRS")
-- 
2.20.1

-- 
Katherine