[asdf-devel] ASDF traverse changed behavior?

Robert Goldman rpgoldman at sift.info
Thu Mar 18 00:36:44 UTC 2010


On 3/17/10 Mar 17 -6:47 PM, Juan Jose Garcia-Ripoll wrote:
> On Thu, Mar 18, 2010 at 12:25 AM, Juan Jose Garcia-Ripoll
> <juanjose.garciaripoll at googlemail.com
> <mailto:juanjose.garciaripoll at googlemail.com>> wrote:
> 
>     On Thu, Mar 18, 2010 at 12:21 AM, Juan Jose Garcia-Ripoll
>     <juanjose.garciaripoll at googlemail.com
>     <mailto:juanjose.garciaripoll at googlemail.com>> wrote:
> 
>         Narrowing down the problem, TRAVERSE now adds the LIB-OP
>         operation to all components of a system. I added a method
> 
>         (defmethod perform ((operation lib-op) (c component))
>           nil)
> 
>         but this method gets overriden by a more specific one which is
>         provided by asdf.lisp
> 
>         (defmethod perform ((operation operation) (c source-file))
>           (sysdef-error
>            "~@<required method PERFORM not implemented ~
>             for operation ~A, component ~A~@:>"
>            (class-of operation) (class-of c)))
> 
>         This method was the cause of all problems.
> 
> 
>     There is obviously something awry going on here because now I
>     realize that this is not more specific, but less -- lib-op <=
>     operation Anyway, I will leave this for tomorrow as I am obviously
>     not fit for this anymore.
> 
> 
> This time I leave for bed, but while looking at the screen I think I
> found the problem: packages. The two symbols, PERFORM in one and in
> another file are different. I think this has to do with the way symbols
> are interned / uninterned during the compilation phase itself. A symptom
> is that loading the sources *.lisp everything works just fine. Another
> one is that the debugger prints the offending method as #:PERFORM

Is there any chance that you could somehow have run afoul of the package
surgery at the top of asdf.lisp?  I.e., could you have compiled /your/
PERFORM method into the ASDF package somehow before the package magic at
the head of asdf.lisp destroyed it?

I confess that I can't say I understand how that package surgery in the
eval-when will work.  I believe it's going to be something like this:

1.  compile asdf.lisp --- original ASDF package, if any, is destroyed by
ENSURE-PACKAGE

2.  compile asdf-ecl.lisp

3.  load asdf.fasl --- package destroyed again

4.  load asdf-ecl.fasl

Is it possible that somehow the compilation of asdf-ecl is recording
some information about the package that is somehow damaged by the
package surgery?

Just a wild guess.




More information about the asdf-devel mailing list