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 (collect sources, build 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.htm...
- 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.