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.