[asdf-devel] possible clisp/win32 incompatibility
Pascal J. Bourguignon
pjb at informatimago.com
Mon Jan 25 11:05:13 UTC 2010
On 2010/01/25, at 05:07 , Robert Goldman wrote:
> On 1/24/10 Jan 24 -9:39 PM, dherring at tentpost.com wrote:
>> Robert Goldman wrote:
>>> On 1/24/10 Jan 24 -3:01 PM, Daniel Herring wrote:
>>>> Thanks for the ideas. Poking around a bit further, it appears
>>>> that in
>>>> the following snippet from output-files-using-mappings
>>>> (*centralize-lisp-binaries* is false), (pathname-directory path)
>>>> is nil.
>>>>
>>>> (make-pathname
>>>> :type (pathname-type path)
>>>> :directory (append
>>>> (pathname-directory path)
>>>> (implementation-specific-directory-
>>>> name))
>>>> :defaults path)))))
>>>>
>>>> Thus clisp is seeing ":directory (clisp)" without a
>>>> leading :relative or
>>>> :absolute. I don't know the cause and am focused on other issues
>>>> right
>>>> now (this one has a couple workarounds: use ccl or an older asdf).
>>>
>>> Can you trace pathname-type inside the invocation of
>>> output-files-using-mappings? This smells like a CLISP bug to me....
>>
>> Here's some relevant FORMAT ~S output. "p:" is the full path right
>> before
>> the error; p-d is the pathname-directory.
>>
>> ;; Loaded file #<INPUT BUFFERED FILE-STREAM CHARACTER C:\Documents
>> and
>> Settings\nuntius\Desktop\able-release\systems\ltk\ltk.asd @19>
>> p: #P"C:ltk.fas"
>> p-d: NIL
>> *** - MAKE-PATHNAME: Illegal :DIRECTORY argument ("clisp-2.48-win32-
>> i386")
>>
>> Something bad happened before this call; the paths list is screwed
>> up in
>> the output-files defmethod around compile-op (a few lines below the
>> above
>> snippet). It is merely (#P"C:ltk.fas").
>>
>> From a few TRACEs, it appears that *default-pathname-defaults* is
>> #P"C:",
>> and this is the value of component-parent-pathname.
>> Component-relative-pathname is "ltk.lisp".
>
> Hm. That looks like the *default-pathname-defaults* has only
> a :device
> (or possibly a :host) but no :directory component. I really don't
> have
> the foggiest idea how that could have happened. I'm afraid I am
> neither
> a windows nor a clisp user, so someone else will have to step in here.
>
> Looks like that :directory argument is simply the output of
> (implementation-specific-directory-name) and that agrees that
> pathname-directory of path NIL.
>
> No idea why this is happening, but I suspect it's a problem with the
> system pathname somehow.
If the *default-pathname-defaults* has a logical host, then all the
paths that are parsed (ie. by #P) must have the same logical host, if
it's a logical pathname syntax, or implementation dependant if it's a
physical pathname syntax.
My conclusion is that it is a very bad idea to put a logical host in
*default-pathname-defaults*.
In the case of MS-Windows, an additionnal problem is that the physical
device syntax is indistinguishable from a logical host syntax.
How does (let ((*default-pathname-defaults* (make-pathname :host
nil :device nil :directory nil
:name
nil :type nil :version nil)))
(values (make-pathname :host "C") and (make-
pathname :device "C")))
print in clisp on MS-Windows?
In the case of clisp on cygwin or macosx, :device "C" is illegal.
--
__Pascal Bourguignon__
http://www.informatimago.com
More information about the asdf-devel
mailing list