ASDF

Another System Definition Facility

ASDF 3

ASDF 3, pre-released as 2.28 on February 1st 2013, is the current successor to Daniel Barlow's ASDF. It was rewritten for improved portability, robustness, usability, extensibility, configurability, internal consistency, and the ability to create standalone executables.

What it is

ASDF 3 contains two parts: ASDF/DEFSYSTEM and ASDF/DRIVER.

ASDF/DEFSYSTEM, is a tool to describe how Lisp source code is organized in systems, and how to build a system in term of actions that depend on previous actions.

It is roughly what Common Lisp hackers use to build software where C hackers might use GNU Make.

ASDF stands for Another System Definition Facility, in the continuity of the Lisp DEFSYSTEM of yore.

ASDF/DRIVER is a Common Lisp portability library and runtime support system that helps you write Common Lisp software in a portable way.

In addition to many general-purpose Lisp utilities, it notably provides portable abstractions to gloss over implementation quirks, support hot-upgrade of code, manipulate pathnames, create programs, use command-line arguments, access the environment, use the filesystem, call other programs and parse their output, compile Lisp code, muffle conditions, or configure Lisp software.

What it is not

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 to maintain coherence of the current Lisp image at a fine grain), the newcomer ASDlite (a somewhat improved incompatible variant of ASDF 1, less featureful than ASDF 3), or Alastair Bridgewater's interesting quick-build (unreleased, similar to faslpath below). 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, obsolete), Sean Ross's mudballs (an attempt at making things cleaner than in ASDF, aborted), Peter Etter'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, abandoned), and probably more. However, none of these systems seems to ever have had the traction of ASDF.

Supported Implementations

ASDF 3 now supports all CL implementations that seem to have any current user base, and then some.

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.)

They will hopefully soon all provide ASDF 3, but in the meantime, you can download ASDF 3, and use (asdf:load-system :asdf) from a properly configured ASDF 2 to upgrade to the latest, which you should before you use ASDF for anything else.

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 3 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 mkcl 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!

Examples

Download any of the many packages available through Quicklisp to see as many examples.

Documentation

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.

Until we write more documentation on the further innovations of ASDF 3, the documentation strings, the source code, the changelog and the git log are unfortunately your best chances for discovering the available functionality.

Getting it

Though they may lag behind the version here, ASDF comes bundled with most Lisps. To get the greatest and latest, you can:

Extensions

Known extensions to ASDF include:

Former extensions, now superseded, include:

Contributing

Join our mailing list, check the code out from git, send questions, ideas and patches!

Reporting Bugs

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.

Mailing Lists

Contributing

Join our mailing list, check the code out from git, send questions, ideas and patches!

What is happening

In February 2013
ASDF 3 now includes both the traditional ASDF/DEFSYSTEM and a formalized portability library ASDF/DRIVER. ASDF/DEFSYSTEM is a backward-compatible reimplementation of ASDF with correct timestamp propagation based on a consistent dependency model, and featuring support for bundle output, deferred warnings, and more. ASDF/DRIVER provides many abstractions to write portable Common Lisp programs.
In April 2012
ASDF 2.21 now controls the character encoding used by Lisp source files. You can specify different encodings in your defsystem, e.g. :encoding :latin1, if you :defsystem-depends-on (:asdf-encodings). While the default will remain to load and compile file with the :default external-format, we encourage all library authors to adopt the de facto standard, UTF-8, for all their source files (.lisp and .asd). Our intent is to bless and enforce this standard encoding on all these files by default in a not-to-faraway future.
Since December 2009
François-René Rideau is de facto maintainer, with notable contributions from Robert P. Goldman, but also Juanjo Garcia-Ripoll and James Anderson. ASDF 2 released with many clean-ups, better configurability, some new features, and updated documentation.
May 2006 to November 2009
Gary King is de facto maintainer, with notable contributions from Robert P. Goldman, Nikodemus Siivola, Christophe Rhodes, Daniel Herring. Many small features and bug fixes, making the project more maintainable, moving to using git and common-lisp.net. Last version: 1.369.
May 2004 to April 2006
Christophe Rhodes is de facto maintainer, with notable contributions from Nikodemus Siivola, Peter Van Eynde, Edi Weitz, Kevin Rosenberg. The system made more robust, a few more features. Last version: 1.97.
August 2001 to May 2004
Developed by Daniel Barlow, with notable contributions from Christophe Rhodes, Kevin Rosenberg, Edi Weitz, Rahul Jain. Last version: 1.37.
August 2001
Created by Daniel Barlow