Commit c5651786 authored by Robert Goldman's avatar Robert Goldman

Draft announcement.

parent 05ef8fea
Today we release ASDF 3.3. The most substantial change is to the build planning process, which has been reformed by François-René Rideau so that DEFSYSTEM-DEPENDS-ON now behaves correctly. There are a number of other improvements, and we are indebted to Daniel Kochmanski, Rommel Martinez, and Chun Tian for contributions. Thanks again to Anton Vodonosov and Dave Cooper for support in testing, and new thanks to Martti Halminen, Jens K. Loewe, and Jason Miller.
I would like to dedicate this ASDF release to the late Elias Pipping. On a technical level, Elias made great improvements in some of the most challenging ASDF internals, notably the RUN-PROGRAM component of UIOP, a place where implementations are not constrained by the language specification, diverge radically from each other, and are poorly documented. On a personal level, Elias was very supportive to me as ASDF maintainer, and while I was going through an illness. He did all these things despite being gravely ill with the cancer that eventually killed him. He will be greatly missed, Z'chrono L'vracha.
We urge implementations that are currently bundling previous versions of ASDF to adopt 3.3.0 at their earliest convenience. The improvements offered in this release will substantially improved the reliability and predictability of ASDF use. Details on bugfixes can be found at and in the discussions in merged branches of
Here is the changelog entry for 3.3:
cl-asdf (2:3.3.0-1) unstable; urgency=low
New milestone:
* Build-plan: Extensively revised the build plan process so that
:DEFSYSTEM-DEPENDS-ON would work correctly, even when depended on systems
change (which didn't work before). See our ELS demonstration about it:
"Delivering Common Lisp Applications with ASDF 3.3"
< >
* Internals: to support the above, many ASDF internals have changed.
ASDF now has the notion of multiple build phases to a common build session
(which generalizes the previous build cache). ASDF considers loading a .asd
file as an operation DEFINE-OP, and tracks as dependencies files mentioned
during in :LOAD-FILE-FORM statements, etc. Some code has moved to new
files or among old files, and between packages. Actions are now
uniformly represented as a CONS of an OPERATION and a COMPONENT, where
in some cases previously only the class of the operation was
preserved. Forcing is constrained to be uniform across all phases of a
top level ASDF operation invocation. Fixed the protocol for
resetting systems being (re)defined, allowing subclasses to define
default slot values. Remove *LOAD-SYSTEM-OPERATION*, as the current
maintainer of ECL, for which it was originally designed, decided
that it could never be made to work properly, after all.
* ASDF&UIOP: Tweak dependencies between ASDF and UIOP. To avoid DEFINE-OP
circularity, asdf.asd with no longer causes uiop.asd to be loaded.
A standalone UIOP won't be loaded at all unless it's strictly more recent
than ASDF.
* Tests: tests for new capabilities and bugs. Test backtraces can be disabled.
* Documentation: a number of improvements and clarifications.
* Feature: a new feature :asdf3.3
* ECL: restored the deprecated function MAKE-BUILD, removed in 3.2.0,
in a way that works on top of supported APIs (we still recommend you migrate
to these supported APIs). Also stop using the deprecated COMPUTE-INIT-NAME.
* Deprecation: starting to emit STYLE-WARNINGs for deprecated
functions. Will gradually escalate to true WARNINGs and then ERRORs.
-- Robert P. Goldman <> Sun, 20 August 2017 21:00:00 -0500
cl-asdf (2:3.2.1-1) unstable; urgency=low
New release:
* source-registry: resolve conflicts in a way compatible with Quicklisp.
* Upgrade: make the upgrade logic more robust, especially on CCL.
* Require-system: better normalize module vs system names on CMUCL MKCL SBCL.
* Logical pathnames: fix bad-system-name warning behavior when using LPNs.
* XDG: skip empty entries, for compatibility with Ubuntu
* Bundles: numerous fixes for bundles especially so for ECL and MKCL.
Don't try to combine .a's as it's not portable; only ever combine but .o's.
Getting rid of the *load-system-operation*, now it's always load-op.
* launch-program: more fixes, notably for ECL, clasp.
* Deprecation: fix issues with the deprecation schedule of some functions.
* Test and Release: fixes to the release process and to a few tests.
* Documentation: a document describing best practices when using ASDF.
-- Francois-Rene Rideau <> Sun, 03 Avril 2017 14:49:29 +0100
cl-asdf (2:3.2.0-1) unstable; urgency=low
New milestone:
* launch-program: new UIOP API for asynchronous subprocesses, now available
on: abcl allegro clozure cmucl ecl (and lispworks os-unix) mkcl sbcl scl.
Big thanks to Elias Pipping for this significant contribution!
* parameter-error, not-implemented-error: new UIOP functions to better signal
abuse of parameters in function calls, or lack of function implementation.
* with-deprecation macro in UIOP signals style-warnings, then warnings,
then errors when deprecated functions are used. This macro is now used
for all deprecated functions in ASDF.
* require-system, component-loaded-p fixed to not reload .asd files,
and to work in presence of preloaded-systems, that are now eagerly loaded.
* registered-system added as an abstraction for internals and extensions.
* make-operation is now the only supported way to create an operation;
calling make-instance directly will raise an error. Update your software!
* Removal of several obsolete backward-compatible internals:
if-component-dep-fails, operation-forced. Update SLIME!
* Robustness and portability fixes all around uiop, notably dealing with
directory access, bundles on ECL and MKCL or with cffi-toolchain,
dealing with a fatal-condition, surviving use of "logical" pathnames, etc.
* Tests improved and extensively run on Linux, macOS and, notably, Windows,
with recent versions of all the maintained CL implementations.
* Internals of ASDF systematically cleaned up and documented.
* Build, test, release infrastructure improved, both classic and asdf-tools.
* Documentation updated.
-- Francois-Rene Rideau <> Sun, 08 Jan 2017 20:45:29 -0500
cl-asdf (2:3.1.7-1) unstable; urgency=low
Bug fix and portability release:
* Fix compilation on Genera.
* Fix UIOP:FILE-EXISTS-P for dotfiles on CCL.
* Fix infinite loop in source registry configuration that can occur when
there are cycles in the filesystem (typically caused by symlinks)
on some CL implementations.
* Miscellaneous bug fixes.
* Documentation improvements.
* Restore original Makefile.
-- Robert P. Goldman <> Wed, 23 Mar 2016 09:34:14 -0500
cl-asdf (2:3.1.6-1) unstable; urgency=low
Bug fix and portability release:
* Fix backtrace on SBCL.
* Fix RUN-PROGRAM of string (shell command) on Windows SBCL (ticket
* Fix a number of issues with bundle operations (especially on
non-C-compiler-based implementations).
* Fix component-finding in package-inferred-system.
* Fix race condition between multiple concurrent lisp processes
doing ASDF builds (ticket #1483948).
* Fix misplaced fasl cache on Windows.
* Miscellaneous bug fixes.
* Documentation improvements.
-- Robert P. Goldman <> Sat, 17 Oct 2015 15:01:34 -0500
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
(within limits: CLISP and XCL still need a recent ASDF).
The package ASDF/DRIVER (with short nickname :D) re-exports
all the functions that ASDF needed to run portably.
* Pathnames are a notable part of ASDF-DRIVER, required to deal
portably with pathnames despite the many bugs and variations
from platform to platform. See notably in pathname.lisp,
* Pathname use by ASDF was also improved in countless small ways,
closing more buglets that appeared in as many corner cases.
For instance, system pathname defaulting was improved,
and systems not associated with a file will now have NIL as their pathname,
which will otherwise be correctly treated.
Many things that would vary depending on implementation will work better.
Also, although we cannot strongly enough disrecommend the use of so-called
"logical pathnames", especially where portability matters in any way, we
support them better than ever within the limitations of the implementation.
* Image lifecycle support is included in ASDF-DRIVER (and thus ASDF);
this standardizes things like access to *COMMAND-LINE-ARGUMENTS*,
declaring an entry-point to a program, hook functions and/or a prelude
to run before to start the main entry, and a postlude and/or hook functions
to run before to dump an image, dumping or creating an image, etc.
* PROGRAM-OP allows you to create standalone executables on implementations
that support it: CLISP, Clozure CL, CMUCL ECL, LispWorks, SBCL, SCL.
A hello-world-example system shows demonstrates how to use it.
* Run-program is a replacement for the old run-shell-command.
Unlike run-shell-command, it is portable to Windows as well as Unix,
it can avoid going through a shell and will sensibly escape arguments
when it does go through a shell, and it has a usable interface
to either capture program output or run the program interactively.
This supersedes run-program/ previously available from xcvb-driver,
including several improvements and portability fixes.
* Conditions can be selectively muffled around compilation thanks to
the an around-compile hook and the *UNINTERESTING-COMPILER-CONDITIONS*
parameter, and around loading with *UNINTERESTING-LOADER-CONDITIONS*
which is _appended_ to the former during loading.
This supersedes the functionality previously available from xcvb-driver
and its thin wrapper asdf-condition-control, which was retired.
* Deferred warnings for yet undefined functions, that in a single-session
build are usually signaled at the end of a compilation unit, will be
saved and reassembled to make each system a compilation unit of its own,
even when compilation of file happens across multiple sessions;
only CCL and SBCL support this feature at this time.
I welcome patches for other compilers, for which ASDF will _not_
wrap an implicit WITH-COMPILATION-UNIT around its operate method anymore.
* COMPILE-FILE* was beefed up to support all these features and more,
and the Right Thing(tm) on all implementations, including
support for their various extensions.
* Internals have been refactored, and some sorry features were excised.
The semantics of OPERATION-DONE-P is simplified and now well-specified.
FIND-COMPONENT will pass component objects through, and
a corresponding FIND-OPERATION replaces MAKE-SUB-OPERATION.
Many internal accessors were renamed, after checking on Quicklisp
that no one was using them.
* Portability updates were done for each and every implementation.
Working support for GCL 2.6 was restored, with notable limitations
including lack of support for output-translations or logical-pathnames.
* TRUENAME resolution can be reliably turned off in all cases where
ASDF was using them by setting the variable *RESOLVE-SYMLINKS* to NIL.