ASDF 2, initially released on May 31st 2010, is the current successor to Daniel Barlow's ASDF, made more portable and more robust, with a somewhat improved API. It has since been widely adopted by the CL community, and is actively maintained.
ASDF is a tool for describing how source files are organized: what depends on which and when.
It is roughly what Common Lisp hackers use to build software where C hackers would use say GNU Make.
ASDF stands for Another System Definition Facility, in the continuity of the Lisp DEFSYSTEM of yore.
ASDF will not download missing software components for you. For that, you want Quicklisp, that builds upon ASDF, and is great for pulling and installing tarballs of packages you may depend upon; we also recommend clbuild, that now builds upon Quicklisp, as a great tool for pulling from version control packages you need to modify or want to contribute to. We recommend you should not use ASDF-Install anymore, as it is an older similar piece of software that is both unmaintained and obsolete.
If you're unsatisfied with ASDF, other actively maintained build systems for Common-Lisp that may or may not satisfy you include: François-René Rideau's XCVB (trying to build object and image files deterministically and in parallel), or its polar opposite, Drew McDermott's YTools (trying maintain coherence of the current Lisp image at a fine grain), or the newcomer ASDlite (a somewhat improved incompatible variant of ASDF 1). Older systems that are not maintained anymore include Mark Kantrowitz's mk-defsystem (free software successor of the old proprietary DEFSYSTEM's and predecessor of ASDF), Sean Ross's mudballs (aborted attempt at making things cleaner than in ASDF), Peter Jetter's faslpath (a much simpler system establishing a mapping between packages and files), Alexander Kahl's evol (a reimplementation of the GNU autotools stack in Lisp), and probably more. However, none of these systems seems to ever have had the traction of ASDF.
ASDF 2 now supports all CL implementations that seem to have any current user base.
Most implementations provide ASDF 2 as a module, and you can simply (require "asdf"). (All of them but CLISP also accept :asdf, "ASDF" or 'asdf as an argument.)
A few implementations don't provide ASDF yet, but have announced they will in their next release. As for remaining implementations, they are obsolete and/or mostly unmaintained; still ASDF 2 supports them if you load it manually, though there might never be a next release to provide it through require.
Provide "asdf" | Will provide it | Obsolete | |
---|---|---|---|
Free | abcl ccl clisp cmucl ecl sbcl xcl | gcl mcl | |
Proprietary | allegro lispworks | scl | cormanlisp genera |
If there is an old or new implementation that we are missing, it shouldn't be hard to adapt ASDF to support it. Ask us!
Download any of the many packages available through Quicklisp to see as many examples.
You can read our manual:
Regarding the internal design of ASDF in general, and the work we did on ASDF 2, see the last draft version of our paper for ILC 2010, Evolving ASDF: More Cooperation, Less Coordination
Finally, while the manual covers all the basics, some advanced or new features remain underdocumented. Please contact our mailing-list (see below) for any issue that isn't well-documented enough.
Though they may lag behind the version here, ASDF comes bundled with most Lisps. To get the greatest and latest, you can:
git clone git://common-lisp.net/projects/asdf/asdf.git(note that our "master" branch is for current development; get our "release" branch for the latest stable release.);
Known extensions to ASDF include:
Join our mailing list, check the code out from git, send questions, ideas and patches!
To report bugs, you can use our launchpad project. If you're unsure about the bug or want to discuss how to fix it, you can send email to the project mailing-list below.
Join our mailing list, check the code out from git, send questions, ideas and patches!