On 25 Jan 2011, at 18:57, Robert Goldman wrote:
On 1/25/11 Jan 25 -7:30 AM, Pascal Costanza wrote:
On 23 Jan 2011, at 15:27, Pascal Costanza wrote:
Hi,
I have encountered two more issues when trying to use ASDF 2 with logical pathnames in Allegro and clisp. I have the following logical pathname translations in Allegro and clisp respectively:
#+allegro (setf (logical-pathname-translations "costanza") `(("**;*.fasl.*" ,(format nil "/Users/costanza/.cache/common-lisp/~A ~A/**/*.fasl" (lisp-implementation-type) (read-from-string (lisp-implementation-version)))) ("**;*.*.*" "/Users/costanza/**/*.*")))
#+clisp (progn (setq custom:*parse-namestring-ansi* t)
(setf (logical-pathname-translations "costanza") `(("**;*.lib.*" ,(format nil "/Users/costanza/.cache/common-lisp/~A ~A/**/*.lib" (lisp-implementation-type) (read-from-string (lisp-implementation-version)))) ("**;*.fas.*" ,(format nil "/Users/costanza/.cache/common-lisp/~A ~A/**/*.fas" (lisp-implementation-type) (read-from-string (lisp-implementation-version)))) ("**;*.*.*" "/Users/costanza/**/*.*"))))
When compiling systems with ASDF, however, the fasl, lib and fas files don't end up in the folders designated by these logical pathname translations, but rather in the locations as specified with ASDF output translations. (In CMUCL, Clozure, ECL, LispWorks, RMCL, and SBCL, similar logical pathname translations work as expected.)
I have found the bug that causes this for Allegro, and am relatively sure what problem in clisp causes this.
For Allegro, the following patch fixes the problem:
(defun* resolve-symlinks (path) #-allegro (truenamize path) #+allegro (if (typep path 'logical-pathname) path (excl:pathname-resolve-symbolic-links path)))
Will you please provide some commenting to explain why this is the right thing to do here? To the extent that I understand this, it says "resolve symlinks should not do anything to a logical pathname."
Is that the correct behavior for RESOLVE-SYMLINKS? If so,
- is it what automagically happens for the other lisp implementations.
Yes. The first thing truenamize does is check whether it's argument is a logical pathname, and if that's the case, it returns it unchanged.
how about adding a doc string that reflects this or possibly better:
how about checking for a logical pathname /upstream/ of
resolve-symlinks and, if it's senseless to do RESOLVE-SYMLINKS to a logical pathname, fix it so that logical-pathnames trigger an error?
I don't know the ASDF 2 source well enough to be able to tell what's best here.
Pascal