On 23 Jan 2011, at 01:50, Pascal Costanza wrote:
On 22 Jan 2011, at 22:05, Faré wrote:
2011/1/22 Pascal Costanza pc@p-cos.net:
The reason why I'm having problems is probably because I want to create a setup that works the same for all the Common Lisp implementations that I'm using. (I'm the maintainer of Closer to MOP, and this requires regular testing on several CL implementations, including RMCL, which is still in use by several parties.)
Uh, considering that RMCL has a different idea of what your user-homedir-pathname is than unix-aware Lisps, why not just have two sets of configuration files, one that works on Unix, and one that works for RMCL?
I prefer to have a single configuration file, so I don't have to maintain different configuration files in parallel.
I switched to a solution where the configuration file uses exclusively logical pathnames. In all CL implementations I set up logical pathnames translations both for source and fasl files, for example like this:
(setf (logical-pathname-translations "costanza") `(("**;*.xfasl.*" ,(format nil "/Users/costanza/.cache/common-lisp/~A ~A/**/*.xfasl" (lisp-implementation-type) (lisp-implementation-version))) ("**;*.*.*" "/Users/costanza/**/*.*")))
The configuration file consists of entries such as this:
(:directory "costanza:lisp;develop;closer;contextl")
In two implementations, I encountered problems, namely ECL and RMCL.
In ECL, there seems to be a problem with ensure-directories-exist when invoking it on logical pathnames. The following patch solved this issue for me:
(defmethod asdf:perform :before ((o asdf:compile-op) (c asdf:source-file)) (loop for file in (asdf:output-files o c) for pathname = (if (typep file 'logical-pathname) (translate-logical-pathname file) file) do (ensure-directories-exist pathname)))
My guess is this should be fixed in ECL rather than in ASDF.
In RMCL, I have to make sure that the home directory is never touched, because I can't get RMCL and ASDF to agree what the notion of a home directory actually means. The only way I seem to be able to make this work is by initializing the source registry explicitly as follows:
(asdf:initialize-source-registry (with-open-file (s "Macintosh HD:Users:costanza:.config:common-lisp:source-registry.conf") (read s)))
...and by having the configuration end in this:
#-mcl :inherit-configuration #+mcl :ignore-inherited-configuration
I have the feeling that this is all more complicated than strictly necessary.
Anyway, thanks a lot for the help.
Pascal