Edi Weitz <[EMAIL PROTECTED]> writes:

> On 12 May 2004 16:05:07 -0400, "Christopher C. Stacy" <[EMAIL PROTECTED]> wrote:
> 
> > 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.
> >
> > [...]
> >
> > 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.
> 
> I don't use logical pathnames. My setup is very simple:
> 
> 1. I have a directory /usr/local/lisp/source where I unpack all the
>    source tarballs, so there is, e.g., 
> 
>      /usr/local/lisp/source/uffi-1.4.12
>      /usr/local/lisp/source/clsql-2.10.5
> 
> 2. I make symlinks to the names without versions, i.e.
> 
>      /usr/local/lisp/source/clsql -> clsql-2.10.5
>      /usr/local/lisp/source/uffi -> uffi-1.4.12
> 
> 3. From /usr/local/lisp/Registry I make symlinks to the symlinked .asd
>    files
>  
>      cd /usr/local/lisp/Registry
>      for i in ../source/{clsql,uffi}/*asd; do ln -s $i; done
> 
>    so I don't have to update them once I get new versions.
> 
> 4. My ~/.cmucl-init file contains this line:
> 
>      (pushnew "/usr/local/lisp/Registry/" asdf:*central-registry*)
> 
> That's it. Works fine for me, even with different Lisps as long as
> their FASL suffixes don't conflict as with SBCL and AllegroCL.[1][2]

I do the same thing, except for one difference which also solves the
FASL issue. I have the following in my startup script for CMUCL:

(in-package :asdf)

(pushnew "/home/bjorn/share/common-lisp/system/" *central-registry*)

(defvar *system-configuration-paths*
  '(("/home/bjorn/share/common-lisp/src/"
     "/home/bjorn/lib/common-lisp/cmucl/")))

(defun pathname-prefix-p (prefix pathname)
  "Tar tv� s�kv�gsnamn eller namnstr�ngar och returnerar sant om det
f�rsta �r ett prefix i det andra. :ABSOLUTE/:RELATIVE f�rst i
kataloglistan fungerar som ankare, vilket g�r att SEARCH inte kan
matcha en dellista mitt i."
  (not (equal (enough-namestring pathname prefix) (namestring pathname))))

(defmethod output-files :around ((operation compile-op) (c source-file))
  (let ((source (component-pathname c))
        (paths (call-next-method)))
    (mapcar #'(lambda (path)
                (loop for (from to) in *system-configuration-paths*
                      when (pathname-prefix-p from source)
                      do (return 
                           (merge-pathnames
                            (make-pathname :type (pathname-type path))
                            (merge-pathnames (enough-namestring source from)
                                             to)))
                      ;; Kommer bara hit om ingen s�kv�g matchade
                      finally (return path)))
            paths)))

So I have the following set-up:

  Library directories

    /home/bjorn/share/common-lisp/src/uffi-1.4.6/
    /home/bjorn/share/common-lisp/src/cl-ppcre-0.6.1/
    ...

  Symlinks to system definitions

    /home/bjorn/share/common-lisp/system/uffi.asd
    /home/bjorn/share/common-lisp/system/cl-ppcre.asd
    ...

  FASLs for CMUCL

    /home/bjorn/lib/common-lisp/cmucl/uffi-1.4.6/
    /home/bjorn/lib/common-lisp/cmucl/cl-ppcre-0.6.1/
    ...

The around method on asdf:output-files makes the FASLs and other
compiled files (eg. FFI C binaries, etc) go into the CMUCL specific
directory. I mainly use CMUCL for now, but the idea is that when I use
CLISP or SBCL, I would have the same output-files method, but change
the *system-configuration-paths* variable to target a directory
specific to each lisp. This would be done in the lisp startup file.

I don't see that this couldn't work equally well with logical
pathnames in *system-configuration-paths*, as long as ASDF in general
supports them.


Bj�rn


Reply via email to