[Asdf-devel] Moving MKCL's bundled version to ASDF 3.1.2

Faré fahree at gmail.com
Fri Jun 20 23:53:56 UTC 2014


Dear Jean-Claude,

that's a pretty embarrassing bootstrap bug in ASDF indeed, that I
introduced in 3.1.0.4. Interesting that the test suite didn't find it.
Oops.

Bisecting things a bit, it seems to be a bug introduced in 3.1.0.104.
To test things:
v=3.1.0.103; ASDF_UPGRADE_TEST_TAGS=$v ./test/run-tests.sh -H ; \rm
build/asdf.lisp ; rlwrap sbcl --load build/asdf-$v.lisp --eval '(progn
(format t "~A~%~S~%~S~%~S~%" (asdf:asdf-version) (asdf:traverse
`asdf:load-op `asdf)
(asdf:input-files `asdf:monolithic-concatenate-source-op "asdf/defsystem")
(asdf:component-depends-on `asdf:prepare-op :asdf)) (quit))'

When it works, such as with v=3.1.0.103, it prints
ASDF/CONCATENATE-SOURCE:MONOLITHIC-CONCATENATE-SOURCE-OP as the first
operation, because indeed prepare-op asdf has the correct dependency.
When it doesn't work, such as with v=3.1.0.104, the dependency is
missing. Oops.

A further git bisect between 3.1.0.103 and 3.1.0.104 using
make ; /bin/mv -f build/asdf.lisp build/asdf-x.lisp ; rlwrap sbcl
--load build/asdf-x.lisp --eval '(progn (format t "~A~%~S~%~S~%~S~%"
(asdf:asdf-version) (asdf:traverse `asdf:load-op `asdf)
(asdf:input-files `asdf:monolithic-concatenate-source-op
"asdf/defsystem") (asdf:component-depends-on `asdf:prepare-op :asdf))
(quit))'
reveals:
ae3b26b18ec33a570752bbfb584171781210f97c is the first bad commit

Problem: the component-depends-on method being introduced
is missing a ,@(call-next-method). Oops.
Although — no, the call-next-method would defeat the purpose,
since it's about overriding load-op (as obtained by sideway-operation
superclass)
by a *load-system-operation*. If we want this effect, we need
something more like:
  (defmethod component-depends-on ((o prepare-op) (s system))
    (loop :for (o . cs) :in (call-next-method)
          :collect (cons (if (eq o 'load-op) *load-system-operation* o) cs)))

Indeed this change makes the test command above succeed when it otherwise fails.

The other component-depends-on method in this file is also suspiciously missing
a call-next-method. Should be a simple ,@(call-next-method).

Jean-Claude: thanks *A LOT* for your bug report!

Robert, I took the liberty of committing this fix as 3.1.2.5.
You might want a different fix, or to scratch this feature, etc.

Issue: That means that ASDF 3.1.2 is unfit to bootstrap further
variants of ASDF, and they must be bootstrapped with make,
or their asdf.asd modified in a yet-to-be-determined way
to compensate for that bug.
The bug is probably worth releasing a 3.1.3 at some point
and encouraging implementations to ship 3.1.3 instead of 3.1.2.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Suppose 2/3 Congress were incinerated, what would we lose to offset our gain
of their salaries and the salaries of their parasites?  — H. L. Mencken




More information about the asdf-devel mailing list