[asdf-devel] dependency bug?

Robert Goldman rpgoldman at sift.info
Sat Jan 23 23:12:35 UTC 2010


On 1/23/10 Jan 23 -1:13 PM, Robert Brown wrote:
> Thanks very much for the suggestions.
> 
> My example code was a simplification of a more complicated system
> definition, part of an project where I'm implementing Google's
> protocol buffers in Lisp.
> 
>    http://github.com/brown/protobuf/blob/master/protobuf.asd
> 
> 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.


> 
> 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")))
> 
> and in fact when do
> 
>    # touch bug1.lisp
>    (asdf:operate 'asdf:compile-op 'bug)
> 
> component bug1 is loaded (the source is compiled and then the fasl
> is loaded), not just compiled, before bug2 is compiled.
> 
> My goal is to understand what the ASDF operations mean.  LOAD-OP
> means "compile and load my code".  

I suppose.  I like to think that it means "load my code" and that the
dependency ensures that the file is compiled first.

I guess it depends on what you mean by "means" here --- how we attribute
meaning to the operation itself and how we attribute meaning to its
dependencies.

the core PERFORM method for load-op on a component loads the input files
for load-op on that component.  And the dependency means that the
compiled fasl files are loaded.

The PERFORM method for compile-op just does a compile-file, no loading.

Have you tried looking at component-do-first as well as in-order-to?

If we can disentangle your confusion into something I can add to the
manual, that would be great.  I believe the object model that's in the
manual right now is significantly more simple than what's in the code.

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.  I have done this a couple of
times but, because I'm a slob, I didn't take good enough notes on what I
did.

Cheers,
r




More information about the asdf-devel mailing list