[asdf-devel] ASDF2: Bug in merge-pathnames*

Jean-Claude Beaudoin jean.claude.beaudoin at gmail.com
Tue May 18 10:32:28 UTC 2010

Here is a patch against 1.720 that fixes a weakness in merge-pathnames*.
This was a show stopper in my system.

It seems that merge-pathnames* assumes that *default-pathname-defaults*
has some interesting value to contribute which is not always the case.
In my system and in a few others (clisp comes to mind) the usual value
of *default-pathname-defaults* is #P"" which ends up giving

(pathname-directory *default-pathname-defaults*) => nil

Then, (append nil (cdr directory)) is probably not a "valid pathname directory".
In clisp passing this not so "valid pathname directory" to make-pathname will
result in a visit in the debugger...

I want also to insist again on the issue of accessing the process current directory.
Assuming that *default-pathname-defaults* is a substitute for the process current
directory is not portable ANSI Common Lisp code. The following definition is very
likely to be wrong on at least one ANSI Common Lisp conforming implementation:

(defun current-directory ()
   (truenamize (pathname-directory-pathname *default-pathname-defaults*)))


Jean-Claude Beaudoin


 > diff asdf-1.720/asdf.lisp asdf.lisp
<                      (append (pathname-directory defaults) (cdr directory))
 > 		     (if (pathname-directory defaults)
 > 			 (append (pathname-directory defaults) (cdr directory))
 > 		       directory)

More information about the asdf-devel mailing list