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

--
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://tream.dreamhosters.com