Dave Cooper wrote:
Hi,
Is stuff like the following advised/recommended?
;;;;; (asdf:defsystem #:robot :description "The Gendlâ„¢ Simplified Android Robot example " ... :depends-on (#-gendl :gendl) ... ) ;;;;;;
The scenario is that we ship a pre-built Gendl image which has no asdf or Quicklisp in it (but does, of course, have :gendl included in *features).
Downstream user is then free to load Quicklisp and start pulling in libraries. But if they pull a library (or application, like :robot), which normally should depend-on :gendl, then we don't want it trying to reload the whole gendl system, since it's already built in.
I know this was discussed here briefly around the launch of 3.0.3 but I'm still not completely clear on how it should work. If we don't include ASDF and Quicklisp at all in our pre-built image, then I don't see any way for us to tamper with e.g. asdf's registry search functions. I guess the only way to do that would be to provide a custom function for installing Quicklisp and ASDF -- but we have no guarantee that the user will actually follow our function and not simply try to install Quicklisp according to the instructions at quicklisp.org http://quicklisp.org.
I think it's fair to say that there are differences of opinion about this.
One school of thought would deprecate these, favoring a declarative syntax for ASDF:DEFSYSTEM. They wouldn't like such use of reader macros because it "hides" information from ASDF.
I am of a more pragmatic school that thinks these are fine. While I like declarative systems when possible, I'm not convinced that they are always realizable. I have a case very similar to yours where I have done exactly the same thing and put a #-<system> <system> in :depends-on, because ASDF does not correctly detect that <system> need not be reloaded in the prebuilt image we have. It's particularly an issue for us since the system in question *cannot* be loaded twice: if you attempt to do so, it compromises the state of the lisp image so that it is no longer usable.
cheers, r