On 4 Aug 2020, at 17:00, Ilya Perminov wrote:

I think there is a problem with the :around method approach - it is
not safe for an ASDF extension to define methods on ASDF's
operations/components, because other ASDF extensions may want to do
the same thing. Imagine there is CFFI* and I want to use both CFFI and
CFFI*.

That is true -- that's why I always try to have either my own operation class or my own component class, or both. So to do this, you would want to have your own subclass of system that you wish to have work this way (e.g., cffi-extended-system) -- you generally do not want to add methods to the standard classes in ASDF, both because of potential collisions, and because you don't know what else they might interfere with.

On Tue, Aug 4, 2020 at 2:35 PM Robert Goldman rpgoldman@gmail.com wrote:

On 4 Aug 2020, at 16:18, Ilya Perminov wrote:

The around method will look something like this

(defmethod input-files :around ((o asdf/bundle::gather-operation) (c system))
(unless (eq (asdf/bundle::bundle-type o) :no-output-file)
(append (call-next-method)
(remove-if-not
(asdf/bundle::pathname-type-equal-function
(asdf/bundle::bundle-pathname-type (asdf/bundle::gather-type o)))
(mappend (lambda (c) (output-files 'process-op c))
(asdf/component:sub-components c :type 'wrapper-file))))))

To my taste it knows too much about ASDF guts, but maybe it is not too bad.

I'm looking at the code now, and

bundle-type is exported from asdf/bundle (but not asdf) (it could use a docstring if you can propose one)

So is bundle-pathname-type

pathname-type-equal-function is not exported, but it's a trivial combination of pathname-type and equalp

gather-type is the only "really internal" function. (A block comment would be nice here, too.)

gather-operation is not exported, but I think that's probably wrong on our part: I don't believe there should be hidden operations. If I get around to it, I will probably export it from the asdf (really asdf/interface) package, unless someone has a good argument for it continuing to be internal.

So I don't think that is a lot of ASDF internals, especially not for customizing the ASDF protocol.