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)))
In clisp, cl:load binds cl:*load-pathname* to a physical pathname, while the HyperSec asks for binding it to the first parameter to load. (Hard to tell whether that's causing the rest of the problems, but it's a start.)
I will file a bug report to the clisp maintainers.
Best, Pascal