Re: ASDF vs. logical pathnames in CMUCL

"Christopher C. Stacy" <[email protected]>
Newsgroups gmane.lisp.cmucl.general,gmane.lisp.cclan.general
Message-ID <[email protected]>
>>>>> On Wed, 12 May 2004 14:00:38 -0400, Raymond Toy ("Raymond") writes:

>>>>> "Chris" == Christopher C Stacy <[email protected]> writes:
 Chris> In CMUCL 18e, ASDF 1.84:
 Chris> ASDF is not working for me at all, apparently because 
 Chris> I am defining my logical pathnames wrong.

 Raymond> Pathnames make my head hurt.  Add case, and I get a migraine.

 Chris> Here's a simple example:

 Chris> (setf (logical-pathname-translations "x") 
 Chris> `(("asdf;**;*.*.*"   "/home/cstacy/S/L/asdf/**/")
 Chris> ("uffi;**;*.*.*"   "/home/cstacy/L/uffi-1.4.12/**/")))

 Chris> But that didn't help me at all.  I suppose it had no effect because
 Chris> ASDF:SYSDEF-CENTRAL-REGISTRY-SEARCH makes the actual pathname like:

 Chris> (MAKE-PATHNAME :DEFAULTS DEFAULTS :VERSION :NEWEST
 Chris> :NAME NAME :TYPE "asd" :CASE :LOCAL)

 Raymond> What are the values of default and name here?
 Raymond> I'm trying to reproduce the problem, without having asdf.

(Raymond: Thanks!)

DEFAULTS is a pathname designator representing a directory; it's taken
from the list in ASDF::*CENTRAL-REGISTRY* so depends what you push
onto it.  Each element of *CENTRAL-REGISTRY* is run through EVAL, 
so you can put variable names there, too.  It comes initialized with
the symbol *DEFAULT-PATHNAME-DEFAULTS* on the list.

My entries are like "X:UFFI;" in either string or #P form, in either
upper or lower case. (CMUCL parses the #P syntax for logical pathnames
as being uppercase, so there's only one logical pathname to consider.)

Here's what ASDF is probing for:

Trying this one: "X:UFFI;"
Gives this pathname: #.(logical-pathname "X:UFFI;uffi.asd")
    HOST: #<COMMON-LISP::LOGICAL-HOST>.
    DEVICE: :UNSPECIFIC.
    DIRECTORY: (:ABSOLUTE "UFFI").
    NAME: "uffi".
    TYPE: "asd".
    VERSION: :NEWEST.

Trying this one: "x:uffi;"
Gives this pathname: #.(logical-pathname "X:UFFI;uffi.asd")
    HOST: #<COMMON-LISP::LOGICAL-HOST>.
    DEVICE: :UNSPECIFIC.
    DIRECTORY: (:ABSOLUTE "UFFI").
    NAME: "uffi".
    TYPE: "asd".
    VERSION: :NEWEST.

Trying this one: #.(logical-pathname "X:UFFI;")
    HOST: #<COMMON-LISP::LOGICAL-HOST>.
    DEVICE: :UNSPECIFIC.
    DIRECTORY: (:ABSOLUTE "UFFI").
    NAME: NIL.
    TYPE: NIL.
    VERSION: NIL.
Gives this pathname: #.(logical-pathname "X:UFFI;uffi.asd")
    HOST: #<COMMON-LISP::LOGICAL-HOST>.
    DEVICE: :UNSPECIFIC.
    DIRECTORY: (:ABSOLUTE "UFFI").
    NAME: "uffi".
    TYPE: "asd".
    VERSION: :NEWEST.

Trying this one: *DEFAULT-PATHNAME-DEFAULTS*
   #p"" is a structure of type PATHNAME.
   HOST: #<COMMON-LISP::UNIX-HOST>.
   DEVICE: NIL.
   DIRECTORY: NIL.
   NAME: NIL.
   TYPE: NIL.
   VERSION: :NEWEST.
Gives this pathname: #p"uffi.asd"
    HOST: #<COMMON-LISP::UNIX-HOST>.
    DEVICE: NIL.
    DIRECTORY: NIL.
    NAME: "uffi".
    TYPE: "asd".

The NAME is canonically lowercase; the function COERCE-NAME calls
STRING-DOWNCASE on the symbol (eg. :UFFI) that names the system.
I also tried to call ASDF on a system named "UFFI" (uppercase string)
in order to force the NAME component to uppercase (although I am not
sure if it's really supposed to work to name systems like that).

The TYPE is lowercase; hardwired into SYSDEF-CENTRAL-REGISTRY-SEARCH,

There seems to be some assumptions about the case of the pathname
components - lowercase is built into the code in various places.
It seems to me that this can't ever work, since logical pathnames
are parsed by CMUCL as uppercase.

At this point, I must repeat my call to anyone who is using ASDF.  
(So far only one person has answered, saying that they don't think it
works with logical pathnames!)  I was under the impression that many
people are actively using ASDF in CMUCL, and surely they must be using
logical pathnames.  I must be totally misunderstanding how logical
pathnames are supposed to be used, or how ASDF is supposed to be used.
It works for everyone but me, and I can't see how.

This does not seem to be a new issue.  In the ancient version of ASDF
that I was using for the last year or so, I see that I had hacked it up
to coerce the components to uppercase if they were logical pathnames.  
Apparently that's how I got around the problem before.  Now I am trying
to use the latest version of ASDF because I need to load the latest 
version of UFFI, so I can load the latest version of CL-SQL.  This ASDF
is considerably more complicated, and there isn't a single place where
I can put that same hack.

How is anyone else loading UFFI and CL-SQL ? I know there are users.
Won't someone please just recite the incantations they are using?
Surely the whole problem must be that I am doing something really stupid.

[Please note that I am not on the CCLAN-LIST mailing list, 
so I only see replies that are addressed to me.]

Chris
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.