Comment 2 for bug 1739514

Revision history for this message
Faré (fahree) wrote :

Note that if it were a simple circular dependency, it would have just
broken the build and be very visible and I'd have caught it last year.

Without having looked at the code or tried to debug it yet, my working
hypothesis is that having "foo" in "foo.asd" depend on "bar" also
defined in "foo.asd" causes dependency from (define-op "foo") to
(define-op . "bar"), which is always in need of build
(at least starting at the next rebuild) because
there is no "bar.asd" and the associated timestamp is therefore NIL.
If that is correct, the backward-compatible solution would be to make sure
that "bar" remembers that it was defined in "foo.asd", so that it gets the
timestamp from "foo.asd", and the next time around, if there is no
up-to-date "bar.asd", ASDF falls back on looking at the previously
loaded "foo.asd" or a more up-to-date version of it.

PS: Note that if "bar" is defined in both "foo.asd" and "bar.asd" you'll
still have a mighty bug. Therefore people should still fix their code
to properly name secondary system, ASDF should still issue a warning
when they are misnamed, and this warning should still be upgraded to a
cerror then an error when all of Quicklisp is fixed (>300 systems).