[asdf-devel] SBCL 1.0.49 / ASDF 2.015.3 doesn't load my asdf systems anymore

Faré fahree at gmail.com
Sat Jun 11 00:50:18 UTC 2011

>> Looks like a SBCL bug in how you setup logical pathnames,
>> that SBCL is catching:
> Not sure how to parse that sentence. Is this my bug, or an SBCL bug?
Thought at first your translations were fishy
(what with more wildcards on one side than the other),
I changed my mind after investigating, failed to rephrase it properly. Oops.
Now I believe it's a bug in SBCL, either in TRANSLATE-PATHNAME where
the error occurs, or in PATHNAME-INTERSECTIONS where the fishy path
is constructed, or maybe in DIRECTORY for not catching errors.

My previous message includes enough of a test case for SBCL implementors
to reproduce the error:

(setf (logical-pathname-translations "foo")
 `(("**;*.fasl.*" "/home/foo/faslcache/**/*.fasl")
 ("**;*.*.*" "/home/foo/**/*.*")))
 (directory #p"foo:cl;*.asd.newest")
;==> Pathname components from SOURCE and FROM args to

If we balance the wildcards, we still get an error, though a different one:

(setf (logical-pathname-translations "foo")
 `(("**;*.fasl.*" "/home/foo/faslcache/**/*.fasl")
 ("**;*.*.*" "/home/foo/**/*.*")))
(directory #p"foo:cl;*.asd.newest")
;;==> can't substitute this into the middle of a word: :WILD
;; also reported in TRANSLATE-PATHNAME

>> So logical-pathnames do not commute with directory in SBCL.
> I don't understand what you're talking about. I thought ASDF doesn't do anything with logical pathnames?
ASDF doesn't introduce logical pathnames, and when you provide them,
it makes sure to pass them through to the implementation.
Then SBCL tries to do clever things with DIRECTORY, and fails.

>> NB: why don't you just use the following?
>> (:source-registry
>>  (:tree #-mcl "/Users/costanza/lisp/"
>>         #+mcl "Macintosh HD:Users:costanza:lisp:"))
> Because I have to be able to switch between different versions of the same system, for example:
> "/Users/costanza/lisp/develop/cl-foo-version-a/cl-foo.asd" vs.
> "/Users/costanza/lisp/develop/cl-foo-version-b/cl-foo.asd"
> Feeding the whole tree doesn't do the trick for me.
You can feed the whole tree, except for the few files that you need:

    (defun asdf::probe-posix (posix-namestring)
      "If a file exists for the posix namestring, return the pathname"
      #.(read-from-string "
      (with-cstrs ((cpath posix-namestring))
         (rlet ((is-dir :boolean)
                (fsref :fsref))
           (when (eq #$noerr (#_fspathmakeref cpath fsref is-dir))
             (ccl::%path-from-fsref fsref is-dir))))"))
        ,(loop for i in
          collect `(:tree ,(probe-posix i)))

Or you can use a symlink farm
(assuming MCL can find the truename of an HFS alias).

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
I hold that America, Champion of the World is a betrayal of
its humble beginnings as One Nation Underdog.

More information about the asdf-devel mailing list