Commit 092fa218 authored by Francois-Rene Rideau's avatar Francois-Rene Rideau

Merge branch 'master' into minimakefile

parents bbc13614 8366db2e
......@@ -258,7 +258,7 @@ Issues with using and extending ASDF to define systems
ASDF development FAQs
* How do run the tests interactively in a REPL?::
* How do I run the tests interactively in a REPL?::
@end detailmenu
@end menu
......@@ -1112,7 +1112,10 @@ Only period-separated non-negative integers are accepted at present.
See below Version specifiers in @ref{The defsystem grammar}.
This file contains a single @code{defsystem} declaration.
This file contains a single form, the @code{defsystem} declaration.
No @code{in-package} form, no @code{asdf:} package prefix, no nothing.
Just the one naked @code{defsystem} form.
This is what we recommend.
More complex system definition files are possible with arbitrary Lisp code,
but we recommend that you keep it simple if you can.
This will make your system definitions more robust and more future-proof.
......@@ -4959,7 +4962,6 @@ plus many implementations that previously did not.
ASDF has been made to work with all actively maintained CL
implementations and even a few implementations that are @emph{not}
actively maintained.
@xref{FAQ,,``What has changed between ASDF 1 ASDF 2 and ASDF 3?''}.
Furthermore, it is possible to upgrade from ASDF 1 to ASDF 2 or ASDF 3 on the fly
(though we recommend instead upgrading your implementation or replacing its ASDF module).
......@@ -5461,12 +5463,12 @@ or the code of @url{,@code{cl-launch}}.
Note that in addition to the pitfalls and constraints above,
these heroic scripts (should you wish to write or modify one),
must take care to configure ASDF @emph{twice}.
One first time, right after you load the old ASDF 2 and before you upgrade to the new ASDF 3,
A first time, right after you load the old ASDF 2 and before you upgrade to the new ASDF 3,
so it may find where you put ASDF 3.
One second time, because some implementations can't handle a smooth upgrade to ASDF 3,
A second time, because some implementations can't handle a smooth upgrade to ASDF 3,
and lose configuration as they do.
(require "asdf")
(ignore-errors (funcall 'require "asdf")) ;; <--- try real hard
;; <--- insert heroics here, if that failed to provide ASDF 2 or 3
;; <--- insert configuration here, if that succeeded
(asdf:load-system "asdf")
......@@ -5495,7 +5497,6 @@ and lose configuration as they do.
@code{asdf-ecl} and its short-lived successor @code{asdf-bundle} are no more,
having been replaced by code now built into ASDF 3.
Moreover, the name of the bundle operations has changed since ASDF 3.1.3.
@xref{What happened to the bundle operations}.
And yet, the feature is not enabled to be used by @code{load-system} by default on ECL as originally intended,
because of a bug in ECL itself found during testing.
......@@ -5990,11 +5991,11 @@ Use from the @code{named-readtables} system the macro @code{named-readtables:def
@section ASDF development FAQs
* How do run the tests interactively in a REPL?::
* How do I run the tests interactively in a REPL?::
@end menu
@node How do run the tests interactively in a REPL?, , ASDF development FAQs, ASDF development FAQs
@subsection How do run the tests interactively in a REPL?
@node How do I run the tests interactively in a REPL?, , ASDF development FAQs, ASDF development FAQs
@subsection How do I run the tests interactively in a REPL?
This not-so-frequently asked question is primarily for ASDF developers,
but those who encounter an unexpected error in some test may be
......@@ -37,14 +37,14 @@
extensibility, configurability, internal consistency,
and the ability to deliver standalone executables.
Its notable versions include pre-release 2.27 on February 1st 2013,
first release 3.0.0 on May 15th 2013,
first stable release 3.0.1 on May 16th 2013,
major release 3.1.2 on May 6th 2014,
and latest release 3.1.4 on October 10th 2014.
and latest release 3.1.5 on July 21st 2015.
<a id="what_it_is"></a>
<h3>What it is</h3>
<p>ASDF stands for <em>A</em>nother <em>S</em>ystem <em>D</em>efinition <em>F</em>acility,
in the continuity of the Lisp <tt>DEFSYSTEM</tt> of yore.
the successor of the Lisp <tt>DEFSYSTEM</tt> of yore.
<p>ASDF 3 contains two parts: <tt>asdf/defsystem</tt> and <tt>uiop</tt>.
......@@ -60,7 +60,7 @@
And you must typically compile and load files that define packages, macros, variables,
before you may compile and load other files that use them.
<p>It is roughly what Common Lisp hackers use to build and load software
<p>ASDF is what Common Lisp hackers use to build and load software,
where C hackers might use GNU <tt>Make</tt> to build software and
<tt></tt> to load it.
......@@ -88,7 +88,7 @@
and the documentation as extracted from its docstrings by
<a href="">HEΛP</a>
(beware: you can, though it's not obvious, scroll the list of packages
with a scroll the right of the top-left pane, and then click on the one
with a scrollbar on the right of the top-left pane, and then click on the package
you're interested in to browse its symbols).
<p><tt>uiop</tt> is distributed as part of the <tt>ASDF</tt>,
......@@ -223,6 +223,8 @@ MKCL <>,
SBCL <>,
Scieneer CL (Douglas Crosher) <>,
XCL (Peter Graves) <>
Corman Common Lisp <>
If there is an old or new implementation that we are missing,
......@@ -310,6 +312,10 @@ XCL (Peter Graves) <>
<p>Known extensions to ASDF include:</p>
<a href="">
to compute the actual dependencies in a big ASDF system.</li>
<li><a href=""
to compile Lisp source files with character encodings other than UTF-8.</li>
......@@ -317,20 +323,22 @@ XCL (Peter Graves) <>
to allow macros to include code to be evaluated
at the end of a file being compiled.</li>
<a href="">
to compute the actual dependencies in a big ASDF system.</li>
<li><a href=""
to compile a system in parallel on a multiprocessor machine.</li>
<li><a href=""
to bind file-local variables around the compilation of some files.</li>
<li><a href=""
lets you specify systems that are automatically loaded when
two other systems are loaded, to connect them.</li>
<li><a href=""
to bind file-local variables around the compilation of some files.</li>
<li><a href=""
lets you interface between with functions and datastructures written in C
and functions written in Lisp,
including support for automatically detecting constants from C macros,
linking to dynamic libraries, and writing your own wrapper code in C.</li>
<li><a href=""
to compile a system in parallel on a multiprocessor machine.</li>
<p>Former extensions, now superseded, include:</p>
......@@ -423,14 +431,19 @@ XCL (Peter Graves) <>
<a id="news"></a>
<h3>What is happening</h3>
<dt>July 2015</dt>
<dd>An extensive bout of bug-fixing, notably on Windows, leads to
release of ASDF 3.1.5 on 21 July 2015. XDG handling has been improved to
be more compliant with the standard. <em>Preliminary</em> support for
immutable systems has been added.</dd>
<dt>May 2015</dt>
<dd>With the LispWorks 7.0 release, all actively maintained CL implementations
are now providind ASDF 3.0 or later, and
are now providing ASDF 3.0 or later, and
support for older variants is now officially dropped.</dd>
<dt>October 2014</dt>
<dd>More bug fixing leads to release of 3.1.4 on 10 October 2014.
There should be no incompatibilities. See the <a
href="changelog">Changelog</a> for more details.</dd>
There should be no incompatibilities.
See the <a href="changelog">Changelog</a> for more details.</dd>
<dt>August 2014</dt>
<dd>The ASDF mailing lists have been reestablished, in particular
asdf-announce, which should allow CL implementers better access to only
......@@ -505,7 +518,7 @@ XCL (Peter Graves) <>
<a class="nav" href="" title=""> <img src="" width="80" height="15" title="" alt=" button" /></a>
<p><span class="copyright"Copyright &copy; 2001-2015 Daniel Barlow and contributors</span></p>
<p>ASDF has an <a href="">MIT style</a> license</p>
<div id="timestamp">Last updated 2015-05-05</div>
<div id="timestamp">Last updated 2015-07-21</div>
FIXME: Attach the changelog!!!!
We would like to announce the release of ASDF 3.1.5, much later than expected, but also much more solid. As usual many thanks are due to Faré for many bug fixes, clean ups, explanations, etc. Thanks are also owed to Dave Cooper, for testing on the Windows platform, enabling the maintainers to test on Windows, and identifying many uncaught bugs. Thanks to Anton Vodonosov for testing the release candidate against Quicklisp on cl-test-grid. Finally, thanks to all who found bugs, provided patches, and used prerelease candidates.
Although ASDF 3.1.5 is primarily a bug fix release, it does add *experimental* support for immutable systems. Immutable systems will be loaded once, and then never updated, even if their definition changes. Immutable systems help support application delivery for Common Lisp, allowing programmers to bundle a version of a required library that will not be subject to change based on the environment into which it is installed. Thanks to Dave Cooper for the idea.
......@@ -9,3 +7,1584 @@ One thing that we have cleaned up that might affect some users is the treatment
We urge implementations that are currently bundling previous versions of ASDF to adopt 3.1.5. 3.1.5 does not introduce any API incompatibilities that we know of, and contains significant bug fixes on multiple platforms and implementations. See the Changelog (attached) for a list of the major bug fixes. Details on minor bugfixes can be found at
We hope that 3.1.5 will be the last 3.1.x release. We will now move to developing ASDF 3.2, which we expect will add new features.
Here is the changelog for 3.1.5:
cl-asdf (2:3.1.5-1) unstable; urgency=low
Bug fix and portability release:
* Add immutable-system support (thanks to Dave Cooper). This support
should be regarded as preliminary and subject to change.
* Substantially improved operation on Windows: many bugfixes and improve-
ments to UIOP functions that interface with the operating system.
* Add CLASP support.
* Many miscellaneous fixes for issues on individual implementations,
notably UIOP incompatibility introduced by SBCL 1.2.12, support for
LispWorks 7 character types, fixes to chdir on ABCL, improvements
to run-program on Windows.
* Added OS-COND to UIOP to paper over some incompatibilities about when
and how operating system can be detected on different implementations.
Made OS predicates run test at runtime so you can bind *features* from
a target system and determine its OS.
* Fixes to XDG configuration directory handling. Try to stick to the
XDG spec, rather than guessing what it should be on different platforms.
To recognize this, change UIOP functions about XDG files to "XDG-"
* Documentation improvements.
-- François-René Rideau <> Sat, 18 Jul 2015 16:51:50 -0500
cl-asdf (2:3.1.4-1) unstable; urgency=low
[ Robert P. Goldman ]
Bug fix release:
* Remove compatibility stubs for old bundle classes (not working
properly, anyway), these are now available in a contrib.
* Add INPUT-STRING function to UIOP.
* For developer and tester convenience, bring all the external
dependencies into the git repo as submodules. See target make ext
* Optionally speed up registry search by providing a cache for
the SOURCE-REGISTRY. See the cache-generating script in:
* Fixes to tests and documentation.
* Many minor bugfixes.
-- François-René Rideau <> Thu, 09 Oct 2014 21:18:21 -0400
cl-asdf (2:3.1.3-1) unstable; urgency=low
Bug fix release:
* A bug in 3.1.2 caused errors when hot-upgrading from 3.1.2 ASDF.
* Fix bugs in ASDF component search caching. In some circumstances,
aggressive caching (particularly of negative results) interfered with
error-handling through restarts. Also, in some cases use of caching
interfered with error-checking. Some of these issues are discussed in
ticket #1335323 on launchpad.
* Miscellaneous bug fixes and tweaks to UIOP.
* Documentation improvements.
-- Francois-Rene Rideau <> Mon, 14 Jul 2014 16:54:49 -0400
cl-asdf (2:3.1.2-2) unstable; urgency=low
New release:
* ~/common-lisp/ is now present by default in the source-registry, so
you don't need to configure anything if you put source code there.
* package-inferred-system implements the one-file, one-package, one-system
paradigm of quick-build and faslpath as an extension to ASDF 3.
* non-propagating-operation replaces OPERATION for operations as a base class
to inherit from for operations that do not propagate,
whereas for backward compatibility with ASDF 1 and 2,
subclasses of OPERATION implicitly propagate DOWNWARD and SIDEWAYs.
Failure to explicitly inherit from one of the explicitly propagating
or non-propagating classes will result in a WARNING for now.
* Accept strings as operation class designators in DEFSYSTEM, which
provides better integration of ASDF extensions loaded using
* force-not now takes precedence over force, and systems named in the
*immutable-systems* set (represented as an equal hash-table) are always
forced-not, and even their .asd is not refreshed from the filesystem.
* portability is much improved, with support for the latest GCL, and
fixes for ABCL, CLISP, ECL, LispWorks, MKCL, SBCL, XCL, etc.
* bundle support was refactored, with many fixes to previously uncommon cases.
ECL support is fixed, MKCL added, with a common extension to build programs
without pulling in UIOP and with it the compiler.
image-op was added to create heap images for use with e.g. cl-launch.
load-fasl-op was renamed to load-bundle-op, fasl-op to compile-bundle-op,
binary-op to deliver-asd-op, and so forth for the monolithic- variants;
previous names remain available for backward compatibility.
* robustness: Test improvements and new tests.
Added missing dependencies in asdf.asd itself(!).
Fixes to version-satisfies (thanks to stassats), to the file-stamp cache.
Fix to regression from whereby ASDF failed to avoid downgrading.
Many cleanups. Many explanatory updates to source code comments.
* run-program tweaked again, notably on Windows, on CLISP, and
on implementations without a native run-program. On Windows, we
punt on trying to ensure no final space is ever echo'ed by CMD.EXE " ".
* provide both "asdf" and "ASDF" to play nicer with various Lisps.
* upgrading from a sufficiently forward-compatible version (currently: 2.33)
will be less disruptive of ASDF data and enhancements in the current image:
previously loaded systems will not be cleared anymore,
variables defined with defparameter* will not be reset.
Punting on upgrades from ASDF 1 for more robust behavior.
* make is the new name for build-system, as an experimental alternative
interface to building software with ASDF — it operates with build-op,
which itself delegates to *load-system-operation* by default.
Prepare-op also delegates to *load-system-operation* on systems.
You might bind that variable to load-bundle-op instead of load-op.
* uiop much improved so as to be used with Google's build system blaze:
with-temporary-file, dump-image / restore-image, ensure-pathname,
compile-file*, with-saved-deferred-warnings.
* Added portable API to optimization settings.
* Refine detection of operating systems. os-macosx-p and os-unix-p no
longer mutually exclusive.
* asdf3.1 feature pushed, to signal the slew of significant improvements
in over a year since initial ASDF 3.0 pre-release (i.e. version 2.27).
* Substantially rewritten, updated, and expanded manual.
* TODO updated.
-- Francois-Rene Rideau <> Mon, 19 May 2014 20:07:40 -0400
cl-asdf (2:3.0.3-1) unstable; urgency=low
New release:
* Run-program much improved, with a slight backward incompatibility.
See the new documentation about it.
* Portability enhanced, with more robust Windows support,
plus patches for CCL, CLISP, LispWorks, XCL.
* UIOP improved, with a README, more docstrings, a few new functions
(println, writeln, stripln, ensure-gethash, vomit-output-stream),
and bugfixes (to ensure-function, with-temporary-file, split-string).
* Debian installations that don't export XDG_DATA_DIRS will benefit
from the fix to split-string, as the bug was basically disabling
the default source-registry entry for /usr/share/common-lisp/source//
Closes: #723977
* Minor tweaks to the defsystem, mostly to print more information
in some situations, less in other situations, but also to better
handle systems with secondary names like foo/bar, a fix for user
functions in output-translation, and to :version (:read-file-...)
* Documentation somewhat updated.
-- Francois-Rene Rideau <> Tue, 22 Oct 2013 22:30:12 -0500
cl-asdf (2: unstable; urgency=low
UIOP:DIRECTORY* fixed to NOT follow symbolic links on LispWorks.
Fix handling of :at key in :read-file-form.
Fix package issue for system-definition-error (lp #1206173).
Some docstring updates. Also documentation updates.
-- Francois-Rene Rideau <> Tue, 03 Sep 2013 12:17:21 -0500
cl-asdf (2:3.0.2-1) unstable; urgency=low
Improve support for CMUCL, ABCL, restore MCL support.
TRAVERSE is deprecated (moved to BACKWARD-INTERFACE), use
MAKE-PLAN instead.
-- Robert P. Goldman <> Tue, 02 Jul 2013 12:05:57 -0500
cl-asdf (2: unstable; urgency=low
Add some backward-compatibility to the debian package,
with a symlink from asdf.lisp to build/asdf.lisp.
-- Francois-Rene Rideau <> Sun, 02 Jun 2013 00:56:50 +0200
cl-asdf (2: unstable; urgency=low
ASDF fixes issues with the debian package itself.
It also includes fixes to run-program and run-shell-command.
-- Francois-Rene Rideau <> Mon, 27 May 2013 22:44:50 -0400
cl-asdf (2:3.0.1-1) unstable; urgency=low
ASDF 3.0.1 is an emergency release for better compatibility with Quicklisp.
* version-satisfies now uses uiop:version<= for comparison,
and does not check for a same major version number,
like version-compatible-p does, which was the
undocumented behavior since ASDF 1.
-- Francois-Rene Rideau <> Mon, 16 May 2013 19:20:28 -0400
cl-asdf (2:3.0.0-1) unstable; urgency=low
ASDF 3.0.0 is the first official release of ASDF 3;
ASDF 2.27 to 2.33 were pre-releases.
Since 2.33, the following changes were done:
* Portability: have *uninteresting-conditions* be empty by default.
Move stuff to *usual-uninteresting-conditions*, unused by default.
Will make the SBCL team happy. Also, fix tests on ABCL.
Fix regression of program-op on ECL, by implicitly linking in UIOP or ASDF.
* UIOP: improvements to slurp-input-stream and thus run-program,
notably accepting T as alias for *standard-output*,
for better backward-compatibility of the deprecated run-shell-command.
New macro with-output-file.
* POIU support enhanced with various tweaks.
* Build cleanup so make and concatenate-source-op create the same asdf.lisp
-- Francois-Rene Rideau <> Mon, 15 May 2013 23:57:22 -0400
cl-asdf (2:2.33-1) unstable; urgency=low
ASDF 2.33 is a set of cleanups since 2.32.
Since previous release 2.32, it includes the following changes:
* Portability tweaks for ABCL, Allegro, CCL, CLISP, ECL, LispWorks, SBCL.
* deferred-warning received yet more improvements for CCL.
* upgrade is made more robust in many cases, notably for ECL, SBCL,
or when using UIOP with an old ASDF<=2.26.
* Packages have been tweaked to pass more tests,
notably wrt what symbols are exported.
* Image lifecycle support is improved, thanks to deploying ASDF3 for QRes.
More options for dump-image on CCL; handle reentrance in restore-image.
* delete-directory-tree, delete-empty-directory, copy-file,
directory-exists-p, file-exists-p were added to UIOP,
also better strcat, with reduce/strcat, base-string-p, etc.
* Recompilation avoided for things already done by defsystem-depends-on.
* monolithic-fasl-op was fixed in cases when the main system has components.
* fasl-op and monolithic-fasl-op now work on ABCL trunk and upcoming 1.2.0,
and will eventually replace the ABCL-JAR contrib.
* *uninteresting-conditions* was added as a common list of conditions
shared between the compile-time and load-time muffled conditions.
-- Francois-Rene Rideau <> Thu, 04 Apr 2013 01:54:26 -0400
cl-asdf (2:2.32-1) unstable; urgency=low
ASDF 2.31 is yet another bug fix release in preparation of an upcoming ASDF 3.
Since previous release 2.31, it includes the following changes:
* deferred-warning checks are now disabled by default,
to enhance backward compatibility with ASDF 2.26 and earlier.
In the future, we will enable them by default,
but not until we implement a smoother transition plan.
* UIOP is the new official name for ASDF-DRIVER.
"Utilities for Implementation- and OS- Portability".
Old names remain as package and system nicknames:
* require-system so systems may depend on implementation-provided modules.
* auto-upgrade attempt in operate *before* the implicit find-system.
* class specification for components can now be a string to be read as a symbol.
* feature conditional dependencies are now debugged and tested:
. :depends-on ("some-system" (:feature :foo "other-system))
we only recommend them for dependencies between systems;
within systems, we recommend you use feature-conditional components with
. :if-feature :foo
and we only provide limited support for the deprecated legacy way of using
feature-conditionals with a module having :if-component-dep-fails :ignore
while its components specify things like:
. :in-order-to ((compile-op (feature :foo)))
* read-from-file for :version specification is made more useful by using
the ASDF-USER package rather than CL (into which interning is forbidden)
to read the files.
-- Francois-Rene Rideau <> Tue, 05 Mar 2013 19:35:43 -0500
cl-asdf (2:2.31-1) unstable; urgency=low
ASDF 2.31 is another bug fix release in preparation of an upcoming ASDF 3.
Since previous release 2.30, it includes the following changes:
* *default-encoding* is now UTF-8. As tested with cl-test-grid,
This is a boon for most programs,
that will compile in a more predictable way in a wider range of settings.
A handful of unmaintained outliers still need to be fixed.
* Downgrade is now explicitly avoided. ASDF will issue a warning
if your system is misconfigured in a way that specifies downgrade,
but will then ignore the specified ASDF downgrade.
* version specifications, when invalid, will lead only to a warning for now;
a future ASDF3 may restore the behavior of ASDF 2.27,
that raises an errors when there is a bad :version specification,
but for now, backward compatibility prevails.
* ECL support received several bug fixes.
* precompiled-system support was notably fixed, enabling single-fasl
deployment of SBCL contribs.
-- Francois-Rene Rideau <> Mon, 25 Feb 2013 19:02:14 -0500
cl-asdf (2:2.30-1) unstable; urgency=low
ASDF 2.30 is another bug fix release in preparation of an upcoming ASDF 3.
Since previous release 2.29, it includes:
* syntax around loading .asd files made more backward-compatible,
by *not* (for now) binding *readtable* and *print-pprint-dispatch*
to standard values, because it breaks some indelicate libraries.
We intend to reinstate these bindings at some point in the future,
but only after more implementations enforce the immutability
of these standard values like SBCL does,
and after fixed libraries have been released.
This notably unbreaks iolib 0.7.3 (for readtable) and
defdoc (for the pprint-dispatch table).
* portability fixes for CCL and CMUCL.
On CCL, punt on package upgrade, and on reify-simple-sexp.
On CMUCL, fix raw-print-backtrace and hostname.
* exported symbols cleaned up somewhat.
-- Francois-Rene Rideau <> Fri, 20 Feb 2013 17:53:32 -0500
cl-asdf (2:2.29-1) unstable; urgency=low
ASDF 2.29 is a bug fix release in preparation of an upcoming ASDF 3.
Since previous release 2.28, it includes:
* deferred-warnings support for Allegro, CMUCL, SCL;
fixes to the CCL support.
* Upgrade fixes regarding fallback system versions;
making it possible (via massive use of eval-when)
to compile ASDF without loading it first.
* Compatibility with private use of :D package nickname
by not claiming it for package ASDF/DRIVER anymore.
Also explicitly handle NIL in safe-file-write-date,
in case the implementation doesn't issue a file-error in that case;
make UTF-8 the default encoding for with-input-file.
Be portable to #+(and sbcl (not sb-eval)).
* Bugfixes to old bugs: inline-methods can now be unqualified (lp#485393),
defsystem-depends-on accepts arbitrary specs, not just names (lp#1027521).
-- Francois-Rene Rideau <> Fri, 16 Feb 2013 15:07:24 +0100
cl-asdf (2:2.28-1) unstable; urgency=low
ASDF 2.28 is a quick patch to ASDF 2.27 to make it work better with
systems that specify a relative pathname, then at runtime (e.g. in tests)
use merge-pathnames or merge-pathnames* against it expecting a directory.
-- Francois-Rene Rideau <> Fri, 01 Feb 2013 17:07:53 -0500
cl-asdf (2:2.27-1) unstable; urgency=low
ASDF 2.27 is actually an almost complete rewrite of ASDF, and
should be considered a pre-release for an upcoming ASDF 3.
It nevertheless maintains backward compatibility with the current practice,
and is tested against the software in Quicklisp.
* ASDF-BUNDLE was merged into ASDF.
This notably means fewer headaches for users of ECL;
it also means a new load-fasl-op feature for all users of a modern CL,
making it easier to deliver software as a single fasl.
After release, I plan to offer a patch so SBCL use that for its contrib's.
All remnants of asdf-bundle's predecessor asdf-ecl were removed.
* DECADES-OLD bugs of notable significance were fixed:
(a) changes in dependencies now trigger a rebuild across systems, and
(b) timestamps are now correctly propagated (they weren't at all!)
Fixing them required a complete rewrite of ASDF's dependency tracking.
In olden days, some have argued for not rebuilding systems that :depend-on
a modified one as a "feature". It really isn't. On the other hand,
it is now possible to explicitly prevent a system from being rebuilt, using
an actual feature, :force-not, which was released in 2.21 in April 2012.
* PREPARE-OP was introduced to fix a conceptual bug in the ASDF object model.
It corresponds to "loading the dependencies of a component and its parents"
and is explicitly depends-on'ed by LOAD-OP and COMPILE-OP of the component,
instead of their implicitly depending on it via the TRAVERSE algorithm,
which implicit dependency proved fatal in cases revealed by the above bugs.
It propagates upward in the component hierarchy, rather than downward,
like the TRAVERSE algorithm used to systematically propagate dependencies.
* TRAVERSE was gutted out and factored into reusable higher-order functions
and objects, which not only fixes the above conceptual bug, but makes for
semantics that are simpler to implement, possible to understand,
easier to extend, and less limited in expressivity.
TRAVERSE doesn't automatically propagate operations
downward the component hierarchy anymore;
propagation is now implemented through methods on COMPONENT-DEPENDS-ON.
* COMPONENT-DEPENDS-ON is now more powerful:
it can express dependencies on arbitrary operation objects
(i.e. operations of the same class can have different options)
acting on arbitrary component objects
(i.e. not necessarily siblings of the current component).
The ASDF object model can now express arbitrary build graphs, with
no more special magic for children components vs other dependencies.
* COMPONENT-DO-FIRST is no more. It used to specify some dependencies
that were skipped if no re-build was triggered based on local timestamps;
except that ASDF 1 didn't let the users control it,
and ASDF 2 only let you control it since 2.017 or so.
In ASDF 3, COMPONENT-DEPENDS-ON is used for all dependencies,
and all are consulted to correctly propagate timestamps.
However actions meant for in-image side-effects are included
only if needed, and might be visited twice by TRAVERSE,
first without the needed-in-image-p flag, another time with.
You can use :IN-ORDER-TO everywhere you used to use :DO-FIRST, if ever.
* FORCE and FORCE-NOT now correctly distinguish T from :ALL in addition to
a list of system name specifiers, as per the original specification
(which was never implemented in ASDF 1). Additionally,
builtin systems (such as SB-BSD-SOCKETS on SBCL) cannot be forced
(which doesn't work on SBCL).
* IF-FEATURE is a new attribute of components that accepts an arbitrary
feature expression such as (:and :sbcl (:or :x86 :x86-64)),
which when defined is a precondition to the component being enabled;
when the expression is false, the component is disabled,
and dependencies to it are removed.
It replaces the misguided :if-component-dep-fails attribute of modules
and the accompanying :feature feature, which were dropped.
They were not very expressive, clunky to use, and relied on baking
conceptually dubious non-local behavior in the old TRAVERSE algorithm,
which belied the object model and defeated other features.
Unhappily, this breaks backwards compatibility for the few who used it,
namely sb-grovel, nibbles and ironclad.
A minimal compatibility layer is included that allows ASDF 3 or later
to load the SB-GROVEL of old versions of SBCL; but it won't suffice
to load an old version of nibbles or ironclad; please upgrade them
a recent version that was updated to support ASDF 3.
* CONCATENATE-SOURCE-OP is a new operation that builds a single Lisp file
from all the source files in a system,
which allows you to develop in a structured way with many compact files,
yet deliver a large single file. Other related operations allow you
to load that source file, or compile and load it,
or do the same while including all other system dependencies.
ASDF was broken up into lots of small files, to be delivered that way.
* FOO/BAR/BAZ names will be recognized by defsystem as having to be located
in a file called foo.asd. This is backward compatible in the case where
you somehow arranged to load foo.asd before to use the other subsystems,
except now ASDF can find the subsystems by name without the main system
definition having been loaded. See uses of function PRIMARY-SYSTEM-NAME.
* BUILD-OP is a generic operation that can do the "right thing" for
each system, without users having to maintain the knowledge of
what the right thing is for each system they may indirectly depend on.
* Convenience methods were added to most exported generic functions,
so you can (input-files 'compile-op '(system1 "file1")) instead of
(input-files (make-instance 'compile-op) (find-component 'system1 "file1"))
This notably makes it much easier to interact with ASDF at the REPL
and debug your system definitions or ASDF extensions (or modifications).
* Packages were introduced as ASDF was broken up into small files.
Each file now has its own package, importing and exporting functionality,
following the style made popular by faslpath and quick-build.
ASDF does not yet include builtin support for quick-build or faslpath
systems and dependencies, however. Possibly in ASDF 2.28.
* ASDF-DRIVER is a separately-usable library for Common Lisp runtime support.
It is transcluded in asdf.lisp (i.e. when delivering ASDF as a separate
bootstrap file, the contents of ASDF-DRIVER have been included in it),
but can also be used as a separate ASDF system on top of an old ASDF