asdf 3.3.4 broken serial dependencies on files spec'd with :if-feature
The current asdf cannot properly (asdf:operate 'asdf:lib-op :bordeaux-threads) on the current ultralisp bordeaux-threads on any lisp.
The specific error is: "An error occurred during initialization: The function %MAKE-LOCK is undefined.."
%make-lock however, is defined just fine in a previous :file. The issue is that asdf did a prepare and compile op, but didn't load an important previously compiled file before continuing on with the build.
Normally, asdf marches down each file in a system prepare, compile, load sequence. However, when one of those files is only conditionally compiled via :if-feature :ecl for instance, it breaks the load dependency for the following unconditionally compiled file.
In the following .asd snippet of bordeaux-threads, see comments annotated as if compiling with ecl. Note that only one of those files "impl-ecl" is the feature matched.
(:module "api-v2" :pathname "apiv2/" :depends-on ("api-v1") :serial t :components ((:file "pkgdcl") (:file "bordeaux-threads") (:file "timeout-interrupt") (:file "impl-abcl" :if-feature :abcl) (:file "impl-allegro" :if-feature :allegro) (:file "impl-clasp" :if-feature :clasp) (:file "impl-clisp" :if-feature :clisp) (:file "impl-clozure" :if-feature :clozure) (:file "impl-cmucl" :if-feature :cmu) (:file "impl-corman" :if-feature :corman) (:file "impl-ecl" :if-feature :ecl) ;;;; THIS HAS ONLY A LOAD DEPENDENCY ON impl-corman, NOT timeout-interupt (:file "impl-genera" :if-feature :genera) (:file "impl-mezzano" :if-feature :mezzano) (:file "impl-mkcl" :if-feature :mkcl) (:file "impl-lispworks" :if-feature :lispworks) (:file "impl-mcl" :if-feature :digitool) (:file "impl-sbcl" :if-feature :sbcl) (:file "impl-scl" :if-feature :scl) (:file "atomics" :if-feature (:not :abcl)) ;;;; THIS DEPENDS on "impl-scl" even though it wont be built (:file "atomics-java" :if-feature :abcl) (:file "api-locks") ;;;; THIS HAS ONLY A LOAD DEPENDENCY on atomics-java, NOT "impl-ecl" or "atomics" (:file "api-threads") ;;;; THIS NEEDS impl-ecl loaded, but it never happens.. hence build failure. (:file "api-semaphores") (:file "impl-condition-variables-semaphores" :if-feature :ccl) (:file "api-condition-variables")))