Is it just me, or is the :FEATURE dependency-def form undocumented in the manual? It is *mentioned* in the grammar, but I don't see it documented -- except for the misleading mention that the :FEATURE *requirement* has been removed from ASDF.
# This is used in :depends-on, as opposed to ``dependency,'' # which is used in :in-order-to dependency-def := simple-component-name | ( :feature FEATURE-EXPRESSION dependency-def ) | ( :version simple-component-name version-specifier ) | ( :require module-name )
I'm actually not sure what the semantics of this should be:
1. if the FEATURE is present, include dependency-def and 2a. If the FEATURE is absent FAIL or 2b. If the FEATURE is absent, quietly succeed.
If the semantics is intended to be the latter -- and that's how I read the relevant code in find-component.lisp -- how does a programmer say "if this feature is not present, my system should not compile"?
I stubbed my toe on this absent-mindedly compiling Didier's decLt system on Allegro Common Lisp.
That system doesn't, and cannot, function on ACL, but ASDF tells us it has compiled successfully.
Instead, what seems to happen is that the net.didierverna.declt.core system depends on (:feature :sbcl :sb-introspect) which simply seems to fail quietly on ACL, in what looks like the worst possible way: the attempt to laod net.didierverna.declt returns T, the guts of the system is not loaded (seems like this feature system somehow keeps core from continuing to load), and no error message is issued.
Actually, I don't claim to understand why this happens -- it looks to me like RESOLVE-DEPENDENCY-SPEC should return NIL, and the load should continue (trying to load the :net.didierverna.declt.core system and succeeding -- or more likely choking when it hits a reference to :SB-INTROSPECT). But somehow it's failing to load.
I'll see if I can make a minimal test case and file a bug, but I could use some guidance about what was intended. If the semantics of :FEATURE are like those of :IF-FEATURE, as I suspect, it seems like they aren't working here. And, if that's what's intended, how do we get the "fail if this feture is absent" behavior that a programmer might like?
thanks, r