[asdf-devel] Issues with logical pathnames in Allegro and clisp

Robert Goldman rpgoldman at sift.info
Tue Jan 25 17:57:46 UTC 2011

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,

1.  is it what automagically happens for the other lisp implementations.

2.  how about adding a doc string that reflects this or possibly better:

3.  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?


More information about the asdf-devel mailing list