A new implementation was just uploaded which implements the :logical-pathname argument for defsystem. It constructs four definitions, one using Faré's favourite no-namespace-clobbering scheme and three other ones that gives a bit more freedom to the developer, separating sources from "automatically" generated files.
The code does minimal collision checks. It will basically complain when there exists a translation that matches the one we are proposing but was not created by ASDF. If the user selects the CONTINUE restart, those translations will be deleted.
(defsystem :foo :logical-pathname "FOO:BASE" :components ((:file "faa")))
(let ((x "COMMON-LISP:SYSTEMS;FOO;FAA.LISP")) (format t "~&;;; Pathname ~S~%;;; translates into ~S" x (translate-logical-pathname x))) (let ((x "FOO:BASE;SOURCE;FAA.LISP")) ;; BASE;DATA;FAA.LISP is a synonym (format t "~&;;; Pathname ~S~%;;; translates into ~S" x (translate-logical-pathname x))) (let ((x "FOO:BASE;OUTPUT-FILES;FAA.LISP")) (format t "~&;;; Pathname ~S~%;;; translates into ~S" x (translate-logical-pathname x))) (terpri)
;;; Pathname "COMMON-LISP:SYSTEMS;FOO;FAA.LISP" ;;; translates into #P"/Users/jjgarcia/devel/asdf/faa.lisp" ;;; Pathname "FOO:BASE;SOURCE;FAA.LISP" ;;; translates into #P"/Users/jjgarcia/devel/asdf/faa.lisp" ;;; Pathname "FOO:BASE;OUTPUT-FILES;FAA.LISP" ;;; translates into #P"/Users/jjgarcia/devel/asdf/faa.lisp"
The attitude here is probably that this is useless and should be totally hidden in a contribution directory
Placing it in a "contrib" section means accepting it because of "politeness" or insistence of the submitter, but effectively making this useless, because then no library will be able to depend on it, for the :logical-pathname keyword will only be available when the user loads the appropriate extension.
Juanjo