Regarding the original question, take a look at cl-pdf.asd. CL projects needing configuration capabilities have devised various approaches; but the current standard is to have a user-editable asd file, and cl-pdf is one of the more sophisticated examples.
On Tue, 28 Jun 2011, Zach Beane wrote:
Faré fahree@gmail.com writes:
What's so special about Lisp here? How do other languages do it?
./configure --with-foo=/bar/baz
The specialness about CL is that people want an all-in-one solution. Download, configure, build, install, and load all in one step.
Unfortunately, this doesn't leave natural breaks for humans to oversee the process.
In a way, user-editable asd files remind me of pre-autoconf makefiles...
C users have download, configure, make, make install, compile with headers, link with objects, and run with loader all as separate steps. Sometimes tedious, but remarkably flexible and robust. Distributions of precompiled code hide the tedium from end users.
A while ago, I was toying with a more decoupled build system for CL. It consisted of three components based on experience with the GNU autotools. (Yes, they're built on a terrible foundation of m4 and portable shell and portable make, but they're light years ahead of the competition in terms of good engineering.)
coli - configure lisp (including user inputs and automated probes) buli - build and install lisp (and trace what was built/required) loli - load lisp (a well-defined REQUIRE with hooks for versioning)
The idea was that the components are designed to work together, but there are public APIs so they can be swapped out or used individually. Put hooks and restarts in loli so buli can (re)compile as needed. Another user may disable these hooks and delete the sources after each install. Add hooks in buli to (re)run coli. With a public API, loli's hooks could be redirected to booli which could emulate buli's hook points -- people could rewrite and swap pieces without forking the whole build system. etc.
Like so many things, this was shelved due to a perceived lack of community interest and a definite shunting of personal energy.
- Daniel