On Mon, Mar 29, 2010 at 4:43 PM, Tobias C. Rittweiler tcr@freebits.dewrote:
Juan Jose Garcia-Ripoll juanjose.garciaripoll@googlemail.com writes:
What is needed for any kind of standalone system building that relies on ASDF system definitions and is capable of incorporating all dependencies?
- A way to gather the list of files that form part of that system
(gather-components in asdf-ext.lisp)
- A way to compile the components (provided by asdf.lisp and extended by
asdf-{ecl,sbcl,...}.lisp if needed)
- A way to pack all the compiled files into a single output file
(implementation-dependent and thus in asdf-{ecl,sbcl...}).
The first part is very critical and it needs the expertise of ALL of ASDF maintainers to get it right. As a bonus the result will be applicable to
ALL
functions that kind of grovel through ASDF system definitions.
Another real life usage case: Slime's asdf contrib does that, too, to provide functionality such as running the Emacs command rgrep, or query-replace over all files defined in a system.
This is why I insist so often that the ASDF grovelling facility has to be part of the core. Right now ECL and the extensions above use a nasty trick: TRAVERSE is invoked using an operation COMPILE-OP and we wrap around LOAD-OP to inform ASDF that the operation was not done before. What this does is create a list of operations that ASDF would do assuming that absolutely no system was loaded. This has the advantage that one does not have to code special cases or traverse the tree manually looking for implicit or explicit dependencies, but I am afraid it is just as fragile.
Juanjo