2009/9/30 Nick Levine ndl@ravenbrook.com:
Maybe what you want is #+frob (:file "foo")
Ideally not, as you'd have to remember to reload all your .asd files every time you messed with features.
If this isn't what :feature does, then what is it for?
I had never heard of it before. Looks like it's broken by design.
You can define your own :around method on output-files, and/or override default methods. See how ASDF-BINARY-LOCATIONS (now part of ASDF 1.366 and later) does it.
Hmm, that's an improvement. (Otoh writing about a rapidly moving target is tricky. Each time I review this it's changed.)
ASDF was a nice hack originally, but is lacking in many ways. Development has resumed, which is good, but it's not there yet. If you have feature requests, please present them.
Note that with XCVB, you can :depends-on (:when (:featurep :frob) "foo") and you can xcvb --object-directory obj-$(timestamp) ...
OK. So you still can't say: look for the :frob feature and decide whether to include this component?
Uh, that's what (:when (:featurep :frob) ...) does with XCVB, or #+frob in ASDF. As for reloading a system, you can probably manually (load "blah.asd") and try to re-operate with ASDF but that is not completely supported. Actually, re-compiling in general is not completely supported by the CL standard: changes to the package import tree, to the signature of generic functions, to the special or constant nature of variable bindings, to the class definition of structures being used, etc., are NOT supported and you have to manually clean things up if you're gonna do this (see the painful xcvb/no-asdf.lisp); and you also have to make sure the stuff you're layering on top of CL (compile-time dictionaries, etc.) does support the redefinitions you're going to make. That, and you have to recompile all the sites that use your redefined macros or inlined functions, recursively.
XCVB doesn't currently make at attempt to provide fake support in-image compilation, beside manually compiling and loading stuff including C-c C-k at your SLIME debug prompt. Because I think it's a failed concept in CL (for the reasons above). That said, the public seems to demand a bug-compatible upgrade path from ASDF, so I'll eventually give something to the public: it can't be guaranteed to work, but it just might if you didn't ask too much and you'll hopefully get an explicit error message if you did.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] (labels(({(] &rest [)(apply([ ])[))([(>)(elt(]())>))(](<)(do-external-symbols(] :cl)(push ] <))(sort <`string<`:key`string))(}({ + ^)({`816`1/5)({`688({`875({`398()"~{~A~^ ~}"(]())){(+ { +)))({`381)^))(do*(({`5248({`584 }`36063))([`874({`395 {`6))(]`4({`584 {`6))(}`#36RH4G6HUTA1NVC1ZHC({`395 }`36063)))((} [ ] ({`977 ]))({`902)({`381))))