[asdf-devel] dependency bug?
Robert Brown
robert.brown at gmail.com
Mon Jan 25 19:58:35 UTC 2010
Thanks again for responding to my questions. I've interleaved
a few comments below.
On 1/23/10, Robert Goldman <rpgoldman at sift.info> wrote:
> On 1/23/10 Jan 23 -1:13 PM, Robert Brown wrote:
>> Protocol description files (suffix .proto) need to be converted
>> into Lisp source, which is then compiled and loaded. I'm trying
>> to get the dependencies right in one of my COMPONENT-DEPENDS-ON
>> methods.
> I may be able to help with this --- I have some examples of cases where
> I have written preprocessors that turn some outside languages into lisp
> through preprocessing.
I believe I have something that works, but it's a bit suboptimal. For each
proto file I have 2 components, one that converts the proto file into a Lisp
source file, and a second that compiles and loads the Lisp code. It would
be nice to combine these two components into just one ASDF component.
>> Anyway, back to my simple example. When I use
>>
>> (:cl-source-file "bug2" :depends-on ("bug1"))
>>
>> the ASDF component for bug2 ends up with the following IN-ORDER-TO slot:
>>
>> ((ASDF:LOAD-OP (ASDF:LOAD-OP "bug1"))
>> (ASDF:COMPILE-OP (ASDF:COMPILE-OP "bug1")))
>>
>> I don't understand this. I believe it should be:
>>
>> ((ASDF:LOAD-OP (ASDF:LOAD-OP "bug1"))
>> (ASDF:COMPILE-OP (ASDF:LOAD-OP "bug1")))
> I suppose. I like to think that it means "load my code" and that the
> dependency ensures that the file is compiled first.
> Have you tried looking at component-do-first as well as in-order-to?
I think I see what's going on now. In addition to the IN-ORDER-TO
dependencies, ASDF records an additional dependency in the DO-FIRST
slot. When :depends-on is specified, the DO-FIRST slot is set:
(setf (slot-value ret 'do-first) `((compile-op (load-op , at depends-on))))
This is strange to me. Why put dependencies in two different places?
The DO-FIRST dependency cannot be supplied by providing a new
implementation of the COMPONENT-DEPENDS-ON method. It's
only set when :depends-on is used in the system definition.
I'm unfamiliar with ASDF internals, but I think the semantics of ASDF
dependencies would be more straightforward if DO-FIRST were removed and
IN-ORDER-TO used for all dependencies.
> Your test case is a good one, too, since I don't believe the manual
> actually clearly specifies how to create a new operation or component
> class, which methods must be defined, etc
Yes, it would be awesome to know without looking at the code what needs
to be done to add component build rules.
> Cheers,
> r
Thanks again.
bob
More information about the asdf-devel
mailing list