[armedbear-devel] Using ASDF/BUNDLE for ABCL

Erik Huelsmann ehuels at gmail.com
Sun Mar 31 21:45:55 UTC 2013

Hi Fare,

On Sun, Mar 31, 2013 at 9:39 PM, Erik Huelsmann <ehuels at gmail.com> wrote:

> Hi,
> Some time ago Mark Evenson created ASDF-JAR on ABCL. It has some issues
> packaging ASD files which uses #. syntax to read e.g. version files
> (version.lisp-sexp) such as bordeaux-threads does.
> We know ECL started hooking into the ASDF/BUNDLE machinery for ASDF to
> overcome problems like these. Could you help me/us out and explain how we
> can plug ABCL into the same machinery? From what I've seen, it's most
> efficient if the resulting code be committed to ASDF. That's fine by me. At
> this point, I'd just be happy with an explanation on how to do the hooking
> up: the new ASDF/BUNDLE functionality doesn't seem to be documented in the
> manual yet.
> Thanks for any help you may be able to provide!

In the mean time, I've been digging around in ASDF/BUNDLE's code. It seems
ABCL is missing in the conditionals in BUNDLABLE-FILE-P, resulting in that
function always returning NIL no ABCL.

If I add abcl to the third conditional in that function, I'm being thrown a
much more useful error: ABCL does not support UIOP/LISP-BUILD:COMBINE-FASLS
which seems a much better error to run into.

[A few hours later]
Ok, so I've hacked together a COMBINE-FASLS function and I'm able to
generate a combined FASL. Case in point: bordeaux-threads--system.fasl. So
far so good.

The next step seems to be one of these:

1. Figure out how to generate system definition files for prebuilt systems
(with concatenated fasls)
2. Figure out how to unpack (packaged) fasls and package them into larger
combinations (--all-systems fasls)

To be honest, I think the former is more important than the latter as the
former seems to be the way to prevent ASDF to go looking for sources.

Still thanks for any help you may be able to provide!



PS: All I had to do to get to where I'm now is to create the
ASDF-2.32-based patch:

Index: src/org/armedbear/lisp/asdf.lisp
--- src/org/armedbear/lisp/asdf.lisp (revision 14453)
+++ src/org/armedbear/lisp/asdf.lisp (working copy)
@@ -4753,11 +4753,20 @@
 ;;; Links FASLs together
 (with-upgradability ()
   (defun combine-fasls (inputs output)
-    #-(or allegro clisp clozure cmu lispworks sbcl scl xcl)
+    #-(or abcl allegro clisp clozure cmu lispworks sbcl scl xcl)
     (error "~A does not support ~S~%inputs ~S~%output  ~S"
            (implementation-type) 'combine-fasls inputs output)
     #+clozure (ccl:fasl-concatenate output inputs :if-exists :supersede)
     #+(or allegro clisp cmu sbcl scl xcl) (concatenate-files inputs output)
+    #+abcl
+    (let ((fasls (make-hash-table :test #'equal)))
+      (loop :for fasl :in inputs
+         :do (setf (gethash fasl fasls)
+                   (make-pathname :host nil
+                                  :device nil
+                                  :directory nil
+                                  :defaults fasl)))
+      (sys:zip output fasls))
     (let (fasls)
@@ -8684,7 +8693,7 @@
       (or #+ecl (or (equalp type (compile-file-type :type :object))
                     (equalp type (compile-file-type :type
           #+mkcl (equalp type (compile-file-type :fasl-p nil))
-          #+(or allegro clisp clozure cmu lispworks sbcl scl xcl) (equalp
type (compile-file-type)))))
+          #+(or abcl allegro clisp clozure cmu lispworks sbcl scl xcl)
(equalp type (compile-file-type)))))

   (defgeneric* (trivial-system-p) (component))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20130331/8c58c6cd/attachment.html>

More information about the armedbear-devel mailing list