On 24 Jan 2020, at 15:30, Phoebe Goldman wrote:

The impetus for this question is, I have subclassed cl-source-file with org-source-file and have defined tangle-op (as a subclass of both sideway-operation and upward-operation). my perform method is:

(defmethod perform ((op tangle-op) (file org-source-file))
(let* ((input-file (first (input-files op file)))
(output-file (first (output-files op file))))
(tangle input-file output-file)))

where (tangle input-file output-file) runs emacs in batch mode to produce a lisp source file.

How can I define my input-files and output-files methods to make the lisp source files appear in some build directory maintained by ASDF, rather than in my source tree?

If I understand Faré correctly, you define output files normally, but then I believe you need to do the following:

(defmethod input-files ((op compile-op) (file org-source-file))
    (output-files (asdf:make-operation 'tangle-op) file))

If I'm right, this will ensure that compile-op sees the translated pathnames for the lisp files, instead of looking in the source directory.