[asdf-devel] A dream for ASDF2
nuntius at strider2.example.org
nuntius at strider2.example.org
Wed Feb 3 04:33:51 UTC 2010
Tobias C. Rittweiler wrote:
Re: [asdf-devel] Is this necessary in this form? Re: ASDF 1.501
> Isn't asdf-output-locations somewhat like a CL pendant to `make install'
> if you squint your eyes?
>
> Shouldn't that be an integral part of ASDF?
Exactly yes and absolutely no. Not necessarily in that order.
My issue is that there is a great similarity; this similarity is driven by
a need inherent in the use of libraries; but ASDF (due to history) has
certain things absolutely backwards.
There are many users that a build system must support.
- developers do incremental compiles
- maintainer creates a release (builds sources, docs, etc. into a self-contained archive)
- maintainer checks that the release actually builds, cleans, installs, etc.
- user or system integrator configures the release for local needs
- the release is compiled (often into a separate directory or on a separate computer)
- the release is tested (before install)
- the release is installed (often to a read-only space, as root, or into a
temporary directory that will be archived for distribution)
- the release is loaded (often without sources)
- the release is uninstalled
ASDF needs a coherent story for the person doing each of these jobs.
Instead, the current model lumps most everything into a single "load-op",
and there is no principled way to perform or configure each of the above
phases separately.
My biggest concern with the recent changes is that they build a big
scaffold that institutionalizes a design in need of fundamental changes.
Some parts of .asd files may need incompatible changes; but I think most
uses are completely upgradeable. However, I do not think the recent
ASDF proposals will be.
I would like the ASDF architecture to look something like
- bootstrap a few (self-contained) core utils using a special install sequence (simple COMPILE, test, and install scripts)
- ASDF uses LOAD to pull these in; as each loads, more functionality becomes available (aka SBCL boostrap).
- All other packages can now be built with the full ASDF.
- (optional) ASDF may upgrade itself without the bootstrap sequence.
ASDF features I would like:
- Standard way to pass configuration options to ASDF for building a
specific system. For example, ASDF should let me configure which
compression backend cl-pdf uses, and ASDF should write these choices to
file for me. This should be a replayable config file that can be modified
for reconfiguration, or read in for compilation and install. I should be
able to have several builds at once, each with a different set of choices.
- Standard options for each system. For example, a popular one might
allow ASDF to autorecompile fasls when the sources change. Another would
be an install prefix. Another is to modify the installed system name
(e.g. add version info; asdf-1.5 would load the ASDF package, version
1.5). Another to enable the system config cache (below).
- Generic configuration cache, independent of use. In other words, a
simple configuration format where I can set key/value pairs. Some of
which may happen to control ASDF source locations, others may control ASDF
output locations, yet others may be defined by end-user ASDF files. This
cache should have three levels, one for the sysadmin, one for the user,
and one for inside the system configuration area (usually the source
tree).
Compare the autoconf site configuration mechanism.
http://www.gnu.org/software/autoconf/manual/html_node/Site-Configuration.html
- ASDF compile/install spits out a system.fasl. Semantically, loading
this causes the entire library to be loaded. On some CL's, it might
simply be the concatenation of the compiled source files; on others, it
might LOAD them all in order.
The above is a long-enough list for today. I think it covers most of the
bases. These things aren't problems I'm creating; they are lessons I have
gleaned from GNU autotools and other build systems. Whenever ASDF takes a
shortcut, we have issues.
For example,
""
# We still need to find a way to precompile libraries
# Because asdf is now taking care of placing the fasl file in the correct
place, we cannot remove fasls for a specific implementation or library,
so we nuke them all. Not optimal.
""
- http://pvaneynd.livejournal.com/133491.html
These are part of the standard autotools procedure; they represent a
couple use cases from the first list above.
Later,
Daniel
P.S. Here's a draft response I penned for an earlier post
Subject: Re: [asdf-devel] ASDF 1.501
> Next, comes a similar revamp of ASDF-BINARY-LOCATIONS configuration.
> Or maybe a wholesale replacement of ABL with something that's simpler
> and configured in a way similar to source-registry? What do YOU think?
What do I really think? Its great that ASDF is getting some TLC, but the
whole "register the sources" thing is fundamentally flawed.
>From the end-user's perspective, the whole purpose of a "defsystem"
(henceforth library loader) is to get one or more packages into the
running lisp.
More information about the asdf-devel
mailing list