Good day folks,
The patch below rectifies the swank.asd, making the
ASDF load flow more natural.
The per-implementation file constellation definition is
moved into a separate file, used by both the ASDF and
slime-loader methods.
Tested both ways on SBCL with CVSly fresh Swank.
regards, Samium Gromoff
diff a/file-constellation.lisp-expr b/file-constellation.lisp-expr
--- /dev/null
+++ b/file-constellation.lisp-expr
@@ -0,0 +1,10 @@
+#+cmu ("swank-source-path-parser" "swank-source-file-cache" "swank-cmucl")
+#+scl ("swank-source-path-parser" "swank-source-file-cache" "swank-scl")
+#+sbcl ("swank-source-path-parser" "swank-source-file-cache" "swank-sbcl" "swank-gray")
+#+openmcl ("metering" "swank-openmcl" "swank-gray")
+#+lispworks ("swank-lispworks" "swank-gray")
+#+allegro ("swank-allegro" "swank-gray")
+#+clisp ("xref" "metering" "swank-clisp" "swank-gray")
+#+armedbear ("swank-abcl")
+#+cormanlisp ("swank-corman" "swank-gray")
+#+ecl ("swank-ecl" "swank-gray")
diff a/swank-loader.lisp b/swank-loader.lisp
--- a/swank-loader.lisp
+++ b/swank-loader.lisp
@@ -32,20 +32,10 @@
"The directory where to look for the source.")
(defparameter *sysdep-files*
- (append
- '()
- #+cmu '("swank-source-path-parser" "swank-source-file-cache" "swank-cmucl")
- #+scl '("swank-source-path-parser" "swank-source-file-cache" "swank-scl")
- #+sbcl '("swank-source-path-parser" "swank-source-file-cache"
- "swank-sbcl" "swank-gray")
- #+openmcl '("metering" "swank-openmcl" "swank-gray")
- #+lispworks '("swank-lispworks" "swank-gray")
- #+allegro '("swank-allegro" "swank-gray")
- #+clisp '("xref" "metering" "swank-clisp" "swank-gray")
- #+armedbear '("swank-abcl")
- #+cormanlisp '("swank-corman" "swank-gray")
- #+ecl '("swank-ecl" "swank-gray")
- ))
+ '#.(with-open-file (s (make-pathname :directory (pathname-directory *load-truename*)
+ :name "file-constellation" :type "lisp-expr")
+ :direction :input)
+ (read s)))
(defparameter *implementation-features*
'(:allegro :lispworks :sbcl :openmcl :cmu :clisp :ccl :corman :cormanlisp
diff a/swank-sbcl.lisp b/swank-sbcl.lisp
--- a/swank-sbcl.lisp
+++ b/swank-sbcl.lisp
@@ -22,7 +22,8 @@
(declaim (optimize (debug 2) (sb-c:insert-step-conditions 0)))
-(import-from :sb-gray *gray-stream-symbols* :swank-backend)
+(unless (find-symbol (symbol-name (first *gray-stream-symbols*)) :swank-backend)
+ (import-from :sb-gray *gray-stream-symbols* :swank-backend))
;;; backwards compability tests
diff a/swank.asd b/swank.asd
--- a/swank.asd
+++ b/swank.asd
@@ -24,24 +24,16 @@
(in-package :swank-loader)
-(defclass cl-script-file (asdf:source-file) ())
-
-(defmethod asdf:perform ((o asdf:compile-op) (f cl-script-file))
- t)
-(defmethod asdf:perform ((o asdf:load-op) (f cl-script-file))
- (mapcar #'load (asdf:input-files o f)))
-(defmethod asdf:output-files ((o asdf:compile-op) (f cl-script-file))
- nil)
-(defmethod asdf:input-files ((o asdf:load-op) (c cl-script-file))
- (list (asdf:component-pathname c)))
-(defmethod asdf:operation-done-p ((o asdf:compile-op) (c cl-script-file))
- t)
-(defmethod asdf:source-file-type ((c cl-script-file) (s asdf:module))
- "lisp")
-
(asdf:defsystem :swank
- :default-component-class cl-script-file
- :components ((:file "swank-loader")))
+ :serial t
+ :components #.(append
+ '((:file "swank-backend"))
+ (mapcar (lambda (file) `(:file ,file))
+ (with-open-file (s (make-pathname :directory (pathname-directory *load-truename*)
+ :name "file-constellation" :type "lisp-expr")
+ :direction :input)
+ (read s)))
+ '((:file "swank"))))
(defparameter *source-directory*
(asdf:component-pathname (asdf:find-system :swank)))