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