[asdf-devel] clisp, logical pathnames, and ASDF
Robert P. Goldman
rpgoldman at sift.info
Mon Feb 3 16:24:38 UTC 2014
Faré wrote:
>>> BEWARE!
>>> ENSURE-PATHNAME uses PARSE-UNIX-NAMESTRING, not PARSE-NAMESTRING.
>>> In this case, you want PARSE-NAMESTRING (possibly through PATHNAME).
>>>
>>> (describe (uiop/pathname:ensure-pathname "home:lisp;asdf;"))
>>>
>>> #P"home:lisp;asdf;" is a pathname, with the following components:
>>> NAME = "home:lisp;asdf;"
>>> VERSION = :NEWEST
>> Thanks. But isn't this a bug:
>>
>> (uiop/pathname:ensure-pathname "home:lisp;asdf;" :namestring :lisp)
>> #P"home:lisp;asdf;"
>> [10]> (describe *)
>>
>> #P"home:lisp;asdf;" is a pathname, with the following components:
>> NAME = "home:lisp;asdf;"
>>
> That looks like a bug indeed, but after I
> (setf (logical-pathname-translations "home") '(("**;*.*"
> #p"/home/tunes/**/*.*")))
>
> it's working for me:
> (describe (uiop/pathname:ensure-pathname "home:lisp;asdf;" :namestring :lisp))
>
> #P"HOME:LISP;ASDF;" is a portable pathname, with the following components:
> HOST = "HOME"
> DIRECTORY = (:ABSOLUTE "LISP" "ASDF")
>
> It seems to me that either probe-asd or sysdef-central-registry-search
> before it calls probe-asd should indeed call ensure-pathname somehow
> and fails to, and that that's the problem.
>
>> Here I have explicitly told UIOP & clisp that the namestring is a LISP
>> namestring, so it should see this as a valid logical-pathname, not
>> garble the logical pathname into a PATHNAME's name field.
>>
> That sounds like a bug indeed; however, it doesn't happen on my recent
> checkout of CLISP (on Linux x64, but I suppose this part of the clisp
> code is portable.)
>
>> This seems to have to do with an oddity (I suspect it's conforming,
>> strictly speaking, but it's awkward at best, and impossible at worst) in
>> clisp's interpretation of PARSE-NAMESTRING for logical pathnames.
>>
> If parse-namestring was called, it's probably not conforming to not
> parse the : as a host separator. If parse-namestring was not called,
> it's a bug in ASDF and/or UIOP, and trace will hopefully tell you as
> much.
If I pass the :lisp value to the NAMESTRING, ENSURE-PATHNAME *does* call
PARSE-NAMESTRING.
Yes, looking at the spec for PARSE-NAMESTRING, this is a bug:
"If host is nil and thing is a syntactically valid logical pathname
namestring containing an explicit host, then it is parsed as a logical
pathname namestring."
So this is a clisp fail, 2.49 on Mac OS X (from Mac Ports).
If it works for you, perhaps this has already been fixed. I don't have
time to build and run clisp from the repo.
More information about the asdf-devel
mailing list