[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