unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Andy Patterson <ajpatter@uwaterloo.ca>
To: guix-devel@gnu.org
Subject: [PATCH v2 12/13] gnu: Add cl-slynk.
Date: Sun,  2 Oct 2016 22:41:38 -0400	[thread overview]
Message-ID: <20161003024139.19975-13-ajpatter@uwaterloo.ca> (raw)
In-Reply-To: <20161003024139.19975-1-ajpatter@uwaterloo.ca>

* gnu/packages/lisp.scm (cl-slynk, sbcl-slynk, ecl-slynk): New
  variables.
---
 gnu/packages/lisp.scm | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 283 insertions(+)

diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 3a59c86..05c3101 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -849,3 +849,286 @@ productive, customizable lisp based systems.")
       (inherit base)
       (outputs '("out"))
       (arguments '()))))
+
+(define slynk-change-directory
+  '(lambda _
+     (chdir "slynk")
+     #t))
+
+(define sbcl-slynk-boot0
+  (package
+    (name "sbcl-slynk")
+    (version "1.0.0-beta")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/capitaomorte/sly/archive/"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0mc3w6afgx97y2bh3pjv29dndidm016adpd11zn86kp7zq6xf8sv"))
+       (file-name (string-append "slynk-" version ".tar.gz"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Move the contribs into the main source directory for easier
+           ;; access
+           (substitute* "slynk/slynk.asd"
+             (("\\.\\./contrib")
+              "contrib"))
+           (substitute* "contrib/slynk-trace-dialog.lisp"
+             (("\\(slynk::reset-inspector\\)") ; Causes problems on load
+              "nil"))
+           (mkdir-p "slynk/contrib")
+           (copy-recursively "contrib" "slynk/contrib")))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     `(#:tests? #f ; No test suite
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'copy-source 'change-directory
+           ,slynk-change-directory)
+         (delete 'cleanup))))
+    (synopsis "Common Lisp IDE for Emacs")
+    (description "SLY is a fork of SLIME.  It also featrues a completely
+redesigned REPL based on Emacs's own full-featured comint.el, live code
+annotations, and a consistent interactive button interface.  Everything can be
+copied to the REPL.  One can create multiple inspectors with independent
+history.")
+    (home-page "https://github.com/capitaomorte/sly")
+    (license license:public-domain)
+    (properties `((cl-source-variant . ,(delay cl-slynk))))))
+
+(define-public cl-slynk
+  (let ((base (sbcl-package->cl-source-package sbcl-slynk-boot0)))
+    (package
+      (inherit base)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases/source
+           (add-before 'install 'change-directory
+             ,slynk-change-directory)))))))
+
+(define ecl-slynk-boot0
+  (sbcl-package->ecl-package sbcl-slynk-boot0))
+
+(define sbcl-slynk-arglists
+  (package
+    (inherit sbcl-slynk-boot0)
+    (name "sbcl-slynk-arglists")
+    (inputs `(("sbcl-slynk" ,sbcl-slynk-boot0)))
+    (arguments
+     (substitute-keyword-arguments
+         `(#:compile-dependencies '("slynk")
+           #:modules ((ice-9 match)
+                      ,@%asdf-build-modules)
+           ,@(package-arguments sbcl-slynk-boot0))
+       ((#:phases phases)
+        `(modify-phases %standard-phases
+           (add-before 'copy-source 'change-directory
+             (assoc-ref ,phases 'change-directory))
+           (add-before 'build 'copy-output
+             ;; Copy in slynk's output, so it doesn't have to be re-compiled
+             ;; in each contrib package.
+             (lambda* (#:key outputs inputs lisp #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (slynk (assoc-ref inputs
+                                       (string-append lisp "-slynk"))))
+                 (copy-recursively slynk out)
+                 ;; Hide all asd files providing slynk other than the source
+                 (for-each delete-file
+                           (append (find-files
+                                    (string-append out "/lib/") "\\.asd$")
+                                   (find-files
+                                    (string-append out
+                                                   "/share/common-lisp/"
+                                                   lisp "-bundle-systems/"))))
+                 (unsetenv "XDG_DATA_DIRS")
+                 #t)))
+           (add-after 'copy-output 'delete-bundle
+             ;; Ensure only one system is provided
+             (lambda* (#:key outputs lisp #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (match lisp
+                   ("sbcl"
+                    (delete-file
+                     (string-append out "/lib/" lisp "/slynk--system.fasl")))
+                   ("ecl"
+                    (begin
+                      (delete-file
+                       (string-append out "/lib/" lisp "/slynk.fasb"))
+                      (delete-file
+                       (string-append out "/lib/" lisp "/slynk.a")))))
+                 #t)))))))))
+
+(define ecl-slynk-arglists
+  (sbcl-package->ecl-package sbcl-slynk-arglists))
+
+(define sbcl-slynk-util
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-util")))
+
+(define ecl-slynk-util
+  (sbcl-package->ecl-package sbcl-slynk-util))
+
+(define sbcl-slynk-fuzzy
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-fuzzy")
+    (inputs `(("sbcl-slynk-util" ,sbcl-slynk-util)
+              ,@(package-inputs sbcl-slynk-arglists)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-slynk-arglists)
+       ((#:compile-dependencies _)
+        ''("slynk" "slynk-util"))))))
+
+(define ecl-slynk-fuzzy
+  (sbcl-package->ecl-package sbcl-slynk-fuzzy))
+
+(define sbcl-slynk-c-p-c
+  (package
+    (inherit sbcl-slynk-fuzzy)
+    (name "sbcl-slynk-c-p-c")))
+
+(define ecl-slynk-c-p-c
+  (sbcl-package->ecl-package sbcl-slynk-c-p-c))
+
+(define sbcl-slynk-fancy-inspector
+  (package
+    (inherit sbcl-slynk-fuzzy)
+    (name "sbcl-slynk-fancy-inspector")))
+
+(define ecl-slynk-fancy-inspector
+  (sbcl-package->ecl-package sbcl-slynk-fancy-inspector))
+
+(define sbcl-slynk-package-fu
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-package-fu")))
+
+(define ecl-slynk-package-fu
+  (sbcl-package->ecl-package sbcl-slynk-package-fu))
+
+(define sbcl-slynk-mrepl
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-mrepl")))
+
+(define ecl-slynk-mrepl
+  (sbcl-package->ecl-package sbcl-slynk-mrepl))
+
+(define sbcl-slynk-trace-dialog
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-trace-dialog")))
+
+(define ecl-slynk-trace-dialog
+  (sbcl-package->ecl-package sbcl-slynk-trace-dialog))
+
+(define sbcl-slynk-profiler
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-profiler")))
+
+(define ecl-slynk-profiler
+  (sbcl-package->ecl-package sbcl-slynk-profiler))
+
+(define sbcl-slynk-stickers
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-stickers")))
+
+(define ecl-slynk-stickers
+  (sbcl-package->ecl-package sbcl-slynk-stickers))
+
+(define sbcl-slynk-indentation
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-indentation")))
+
+(define ecl-slynk-indentation
+  (sbcl-package->ecl-package sbcl-slynk-indentation))
+
+(define sbcl-slynk-retro
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-retro")))
+
+(define ecl-slynk-retro
+  (sbcl-package->ecl-package sbcl-slynk-retro))
+
+(define-public sbcl-slynk
+  (let ((dependencies
+         '("slynk-util"
+           "slynk-arglists"
+           "slynk-c-p-c"
+           "slynk-fuzzy"
+           "slynk-fancy-inspector"
+           "slynk-package-fu"
+           "slynk-mrepl"
+           "slynk-profiler"
+           "slynk-trace-dialog"
+           "slynk-stickers"
+           "slynk-indentation"
+           "slynk-retro")))
+    (package
+      (inherit sbcl-slynk-boot0)
+      (name "sbcl-slynk")
+      (inputs `(("slynk" ,sbcl-slynk-boot0)
+                ("slynk-util" ,sbcl-slynk-util)
+                ("slynk-arglists" ,sbcl-slynk-arglists)
+                ("slynk-c-p-c" ,sbcl-slynk-c-p-c)
+                ("slynk-fuzzy" ,sbcl-slynk-fuzzy)
+                ("slynk-fancy-inspector" ,sbcl-slynk-fancy-inspector)
+                ("slynk-package-fu" ,sbcl-slynk-package-fu)
+                ("slynk-mrepl" ,sbcl-slynk-mrepl)
+                ("slynk-profiler" ,sbcl-slynk-profiler)
+                ("slynk-trace-dialog" ,sbcl-slynk-trace-dialog)
+                ("slynk-stickers" ,sbcl-slynk-stickers)
+                ("slynk-indentation" ,sbcl-slynk-indentation)
+                ("slynk-retro" ,sbcl-slynk-retro)))
+      (outputs '("out" "image"))
+      (arguments
+       (substitute-keyword-arguments
+           `(#:image-dependencies ',dependencies
+             ,@(package-arguments sbcl-slynk-boot0))
+         ((#:phases _)
+          `(modify-phases %standard-phases
+             (add-before 'build 'copy-slynk
+               (lambda* (#:key outputs inputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out"))
+                       (slynk (assoc-ref inputs "slynk")))
+                   (copy-recursively slynk out))))
+             (add-after 'generate-image 'link-contribs
+               (lambda* (#:key outputs inputs lisp #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (asd-file (string-append out "/lib/" lisp "/slynk.asd"))
+                        (link-file (string-append
+                                    out "/share/common-lisp/" lisp
+                                    "-bundle-systems/slynk.asd")))
+                   ;; Patch the asd file for slynk so that it can find
+                   ;; contribs, but doesn't load them. Avoids circular
+                   ;; loading.
+                   (patch-asd-file
+                    asd-file
+                    (map
+                     (lambda (dependency)
+                       `(,dependency
+                         . ,(string-append
+                             (assoc-ref inputs dependency))))
+                     ',dependencies)
+                    lisp
+                    '())
+                   (delete-file link-file)
+                   (symlink asd-file link-file))))
+             (delete 'copy-source)
+             (delete 'build)
+             (delete 'check)
+             (delete 'link-dependencies)
+             (delete 'create-symlinks)))))
+      (properties `((ecl-variant . ,(delay ecl-slynk)))))))
+
+(define-public ecl-slynk
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-slynk))
+    (outputs '("out"))))
-- 
2.10.0

  parent reply	other threads:[~2016-10-03  2:42 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-27  4:15 [PATCH 0/12]: Add asdf-build-system Andy Patterson
2016-09-27  4:15 ` [PATCH 01/12] build-system: " Andy Patterson
2016-09-27  4:15 ` [PATCH 02/12] gnu: Add alexandria Andy Patterson
2016-10-08 12:43   ` Ludovic Courtès
2016-09-27  4:15 ` [PATCH 03/12] gnu: Add fiveam Andy Patterson
2016-10-08 12:48   ` Ludovic Courtès
2016-09-27  4:15 ` [PATCH 04/12] gnu: Add bordeaux-threads Andy Patterson
2016-09-27  4:15 ` [PATCH 05/12] gnu: Add trivial-gray-streams Andy Patterson
2016-09-27  4:15 ` [PATCH 06/12] gnu: Add flexi-streams Andy Patterson
2016-09-27  4:15 ` [PATCH 07/12] gnu: Add cl-ppcre Andy Patterson
2016-09-27  4:15 ` [PATCH 08/12] gnu: Add clx Andy Patterson
2016-09-27  4:15 ` [PATCH 09/12] gnu: Add stumpwm Andy Patterson
2016-09-27  4:15 ` [PATCH 10/12] gnu: Add slynk Andy Patterson
2016-10-08 12:59   ` Ludovic Courtès
2016-09-27  4:15 ` [PATCH 11/12] gnu: Add stumpwm-with-slynk-sbcl Andy Patterson
2016-09-27  4:15 ` [PATCH 12/12] gnu: Add stumpwm-with-slynk-image-sbcl Andy Patterson
2016-09-27 12:51 ` [PATCH 0/12]: Add asdf-build-system James Richardson
2016-09-29  2:30 ` Andy Patterson
2016-09-30 11:45   ` 宋文武
2016-10-03  2:41     ` Andy Patterson
2016-10-03  2:41 ` [PATCH v2 00/13]: " Andy Patterson
2016-10-03  2:41   ` [PATCH v2 01/13] build-system: " Andy Patterson
2016-10-05  4:55     ` 宋文武
2016-10-05 20:59       ` Andy Patterson
2016-10-07  8:07         ` Andy Patterson
2016-10-07  8:07     ` Andy Patterson
2016-10-07 12:44       ` Ludovic Courtès
2016-10-07 21:57         ` Andy Patterson
2016-10-08 12:39           ` Ludovic Courtès
2016-10-03  2:41   ` [PATCH v2 02/13] gnu: sbcl: Honour XDG_DATA_DIRS Andy Patterson
2016-10-03  2:41   ` [PATCH v2 03/13] gnu: ecl: " Andy Patterson
2016-10-03  2:41   ` [PATCH v2 04/13] gnu: Add cl-alexandria Andy Patterson
2016-10-03  2:41   ` [PATCH v2 05/13] gnu: Add cl-fiveam Andy Patterson
2016-10-03  2:41   ` [PATCH v2 06/13] gnu: Add cl-bordeaux-threads Andy Patterson
2016-10-03  2:41   ` [PATCH v2 07/13] gnu: Add cl-trivial-gray-streams Andy Patterson
2016-10-03  2:41   ` [PATCH v2 08/13] gnu: Add cl-flexi-streams Andy Patterson
2016-10-03  2:41   ` [PATCH v2 09/13] gnu: Add cl-ppcre Andy Patterson
2016-10-03  2:41   ` [PATCH v2 10/13] gnu: Add cl-clx Andy Patterson
2016-10-03  2:41   ` [PATCH v2 11/13] gnu: Add cl-stumpwm Andy Patterson
2016-10-07  8:07     ` Andy Patterson
2016-10-03  2:41   ` Andy Patterson [this message]
2016-10-07  8:07     ` [PATCH v2 12/13] gnu: Add cl-slynk Andy Patterson
2016-10-03  2:41   ` [PATCH v2 13/13] gnu: Add sbcl-stumpwm-with-slynk Andy Patterson
2016-10-07  8:07     ` Andy Patterson
2016-10-06 21:04   ` [PATCH v2 00/13]: Add asdf-build-system Ludovic Courtès
2016-10-07  0:59     ` 宋文武
2016-10-08 13:30   ` 宋文武
2016-10-08 13:00 ` [PATCH 0/12]: " Ludovic Courtès
2016-10-08 13:28   ` 宋文武
2016-10-10 17:54     ` Andy Patterson
2016-10-10 17:47   ` Andy Patterson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161003024139.19975-13-ajpatter@uwaterloo.ca \
    --to=ajpatter@uwaterloo.ca \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).