On Mon, May 16, 2016 at 5:56 PM, Robert Goldman rpgoldman@sift.net wrote:
On 5/16/16 May 16 -4:36 PM, Faré wrote:
On Mon, May 16, 2016 at 3:35 PM, Robert Goldman rpgoldman@sift.net wrote: There were two :FEATURE features. One was braindead and I removed it in ASDF3, because it was badly breaking the object model.
Right. I believe that's the one documented as "feature requirement."
Indeed.
Some of this is a problem that arises because we don't have a DEFSYSTEM *Semantics* section, only a DEFSYSTEM *grammar*.
Yes.
OK. I will try to add a subsection about the semantics to the defsystem grammar page (per my earlier remarks, not ideal, but I'm not ready to plunge into the end-to-end rewrite and reorg that the manual requires!).
I won't cast the first stone.
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"?
(:feature (:not :foocl) "something_that_fails")
Would it be possible for us to either add something that fails as
(:feature (:not :foocl) :fail)
This should already fail... if there's no system or component named fail.
or perhaps better (the above smells uncomfortably like :IF-COMPONENT-DEP-FAILS):
(:required-feature <feature-expression>)
"require" is, perhaps unfortunately, a term of art for CL so perhaps
(:must-have-feature <feature-expression>)
would be better....
The traditional solution was to fail at compile-time and/or load-time with a #-(or clozure sbcl) (error "not supported implementation")
That's what asdf itself does, btw.
I recommend against failing while loading the .asd file, because that will break cross-compilation in the future (and/or on MOCL, which already does it with a gross hack).
One more query while I have you on the line:
the grammar still contains this rule:
component-dep-fail-option := :fail | :try-next | :ignore
The LHS of that rule is never referenced, so I propose to cut it.
Yes, that was part of the :if-component-dep-fail misfeature that I removed in ASDF3.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Beware of altruism. It is based on self-deception, the root of all evil. — Robert Heinlein, "Time Enough For Love"