Commit 3abb3e42 authored by Francois-Rene Rideau's avatar Francois-Rene Rideau

2.26.142: Update the system definitions.

A better asdf.asd.

Refactor the preloaded system mechanism, use it for cl-launch 3.21.2.

Rename bundle-pathname to build-pathname, move it from bundle-system to system.

Rename the gcl<2.7 feature gcl2.6. Die on gcl2.5 and earlier.
Don't even try to compile-file asdf using gcl 2.6, just load the .lisp.

Rename asdf/compatibility to asdf/common-lisp, exporting only CL symbols.
Fix define-package to correctly handle exporting of NIL.

Also, make it work with Genera, with #'(lambda instead of (lambda,
and using lisp:loop (via a macro loop*) when destructuring is required.

Document more 2.27 changes in changelog.

If there is no :pathname and no load-pathname,
do NOT have a system pathname take defaults from *default-pathname-defaults*,
but make it NIL.
parent 5f79b2a9
......@@ -37,7 +37,7 @@ XCL ?= xcl
# website, tag, install
header_lisp := header.lisp
driver_lisp := package.lisp compatibility.lisp utility.lisp pathname.lisp stream.lisp os.lisp image.lisp run-program.lisp lisp-build.lisp configuration.lisp backward-driver.lisp driver.lisp
driver_lisp := package.lisp common-lisp.lisp utility.lisp pathname.lisp stream.lisp os.lisp image.lisp run-program.lisp lisp-build.lisp configuration.lisp backward-driver.lisp driver.lisp
defsystem_lisp := upgrade.lisp component.lisp system.lisp find-system.lisp find-component.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp output-translations.lisp source-registry.lisp backward-internals.lisp defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp interface.lisp footer.lisp
# Making ASDF itself should be our first, default, target:
......@@ -4,9 +4,8 @@
(asdf/package:define-package :asdf/action
(:nicknames :asdf-action)
(:recycle :asdf/action :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system :asdf/find-system :asdf/find-component :asdf/operation)
#+gcl<2.7 (:shadowing-import-from :asdf/compatibility #:type-of)
(:intern #:stamp #:done-p)
#:action #:define-convenience-action-methods
......@@ -111,10 +110,10 @@ You can put together sentences using this phrase."))
(defmethod component-self-dependencies ((o operation) (c component))
;; NB: result in the same format as component-depends-on
(loop :for (o-spec . c-spec) :in (component-depends-on o c)
:unless (eq o-spec 'feature) ;; avoid the FEATURE "feature"
:when (find c c-spec :key #'(lambda (dep) (resolve-dependency-spec c dep)))
:collect (list o-spec c)))
(loop* :for (o-spec . c-spec) :in (component-depends-on o c)
:unless (eq o-spec 'feature) ;; avoid the FEATURE "feature"
:when (find c c-spec :key #'(lambda (dep) (resolve-dependency-spec c dep)))
:collect (list o-spec c)))
;;;; upward-operation, downward-operation
;; These together handle actions that propagate along the component hierarchy.
......@@ -194,8 +193,8 @@ You can put together sentences using this phrase."))
(defmethod input-files ((o operation) (c component))
(or (loop :for (dep-o) :in (component-self-dependencies o c)
:append (or (output-files dep-o c) (input-files dep-o c)))
(or (loop* :for (dep-o) :in (component-self-dependencies o c)
:append (or (output-files dep-o c) (input-files dep-o c)))
;; no non-trivial previous operations needed?
;; I guess we work with the original source file, then
(if-let ((pathname (component-pathname c)))
......@@ -7,17 +7,16 @@
(defsystem :asdf-driver
:licence "MIT"
:description "Basic general-purpose utilities used by ASDF"
:long-description "Basic general-purpose utilities that is in such a need
:description "Runtime support for Common Lisp programs"
:long-description "Basic general-purpose utilities that are in such a need
that you can't portably construct a complete program without using them."
#+asdf2.27 :version #+asdf2.27 (:read-file-form "version.lisp-expr")
:defsystem-depends-on (#+(and (not asdf2.27) (or clisp xcl)) :asdf)
:around-compile call-without-redefinition-warnings
((:static-file "version.lisp-expr")
(:file "package")
(:file "compatibility" :depends-on ("package"))
(:file "utility" :depends-on ("compatibility"))
(:file "common-lisp" :depends-on ("package"))
(:file "utility" :depends-on ("common-lisp"))
(:file "pathname" :depends-on ("utility"))
(:file "stream" :depends-on ("pathname"))
(:file "os" :depends-on ("stream"))
......@@ -11,6 +11,9 @@
(defsystem :asdf/header
;; Note that it's polite to sort the defsystem forms in dependency order,
;; and compulsory to sort them in defsystem-depends-on order.
:version (:read-file-form "version.lisp-expr")
((:static-file "header.lisp")))
......@@ -18,12 +21,11 @@
(defsystem :asdf/defsystem
:licence "MIT"
:description "The defsystem part of ASDF"
:description "Generate asdf.lisp based on this and monolithic-concatenate-source-op"
:long-description "Another System Definition Facility, the portable defsystem for Common Lisp"
:version (:read-file-form "version.lisp-expr")
:class :bundle-system
:build-operation monolithic-concatenate-source-op
:bundle-pathname "build/asdf"
:around-compile call-without-redefinition-warnings ;; be the same as asdf-driver
:build-pathname "build/asdf" ;; our target
:around-compile call-without-redefinition-warnings ;; we need be the same as asdf-driver
:depends-on (:asdf/header :asdf-driver)
((:file "upgrade")
......@@ -34,7 +36,7 @@
(:file "operation" :depends-on ("upgrade"))
(:file "action" :depends-on ("find-component" "operation"))
(:file "lisp-action" :depends-on ("action"))
(:file "plan" :depends-on ("action"))
(:file "plan" :depends-on ("lisp-action"))
(:file "operate" :depends-on ("plan"))
(:file "output-translations" :depends-on ("operate"))
(:file "source-registry" :depends-on ("find-system"))
......@@ -42,7 +44,7 @@
(:file "defsystem" :depends-on ("backward-internals"))
(:file "bundle" :depends-on ("lisp-action"))
(:file "concatenate-source" :depends-on ("bundle"))
(:file "backward-interface" :depends-on ("lisp-action"))
(:file "backward-interface" :depends-on ("operate" "output-translations"))
(:file "interface" :depends-on
("defsystem" "concatenate-source"
"backward-interface" "backward-internals"
......@@ -55,12 +57,14 @@
:licence "MIT"
:description "Another System Definition Facility"
:long-description "ASDF builds Common Lisp software organized into defined systems."
:version "2.26.141" ;; to be automatically updated by make bump-version
:version "2.26.142" ;; to be automatically updated by make bump-version
:depends-on ()
((:module "build"
((:file "asdf"
:in-order-to (#-asdf2.27 (compile-op (load-source-op "asdf")))))))
(:file "asdf"
#-asdf2.27 :do-first #-asdf2.27 ((compile-op (load-source-op "asdf")))
(#+asdf2.27 (compile-op (monolithic-load-concatenated-source-op asdf/defsystem))))
......@@ -3,8 +3,7 @@
(asdf/package:define-package :asdf/backward-driver
(:recycle :asdf/backward-driver :asdf)
(:use :common-lisp
:asdf/package :asdf/compatibility :asdf/utility
(:use :asdf/common-lisp :asdf/package :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image
:asdf/run-program :asdf/lisp-build
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/backward-interface
(:recycle :asdf/backward-interface :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system :asdf/operation :asdf/action
:asdf/lisp-build :asdf/operate :asdf/output-translations)
......@@ -39,8 +39,8 @@
(defgeneric* operation-on-warnings (operation))
(defgeneric* operation-on-failure (operation))
#-gcl<2.7 (defgeneric* (setf operation-on-warnings) (x operation))
#-gcl<2.7 (defgeneric* (setf operation-on-failure) (x operation))
#-gcl2.6 (defgeneric* (setf operation-on-warnings) (x operation))
#-gcl2.6 (defgeneric* (setf operation-on-failure) (x operation))
(defmethod operation-on-warnings ((o operation))
(declare (ignorable o)) *compile-file-warnings-behaviour*)
(defmethod operation-on-failure ((o operation))
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/backward-internals
(:recycle :asdf/backward-internals :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/system :asdf/component :asdf/find-system :asdf/action)
(:export ;; for internal use
......@@ -62,9 +62,9 @@
(unless (eq if-component-dep-fails :fail)
(loop :with o = (make-instance 'compile-op)
:for c :in (component-children component) :do
(loop :for (feature? feature) :in (component-depends-on o c)
:when (eq feature? 'feature) :do
(setf (component-if-feature c) feature)))))
(loop* :for (feature? feature) :in (component-depends-on o c)
:when (eq feature? 'feature) :do
(setf (component-if-feature c) feature)))))
(when-upgrade (:when (fboundp 'make-sub-operation))
(defun* make-sub-operation (c o dep-c dep-o)
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/bundle
(:recycle :asdf/bundle :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system :asdf/find-system :asdf/find-component :asdf/operation
:asdf/action :asdf/lisp-action :asdf/plan :asdf/operate)
......@@ -18,7 +18,6 @@
#+ecl #:make-build
#:build-args #:name-suffix #:prologue-code #:epilogue-code #:static-library
#:component-bundle-pathname #:bundle-pathname
#:component-entry-point #:entry-point))
(in-package :asdf/bundle)
......@@ -78,20 +77,14 @@
;; All: create an executable file from the system and its dependencies
((bundle-type :initform :program)))
(defgeneric* component-bundle-pathname (component))
(defgeneric* component-entry-point (component))
(defmethod component-bundle-pathname ((c component))
(declare (ignorable c))
(defmethod component-entry-point ((c component))
(declare (ignorable c))
(defclass bundle-system (system)
:initform nil :initarg :bundle-pathname :accessor component-bundle-pathname)
:initform nil :initarg :entry-point :accessor component-entry-point)))
(defun* bundle-pathname-type (bundle-type)
......@@ -110,7 +103,7 @@
(defun* bundle-output-files (o c)
(let ((bundle-type (bundle-type o)))
(unless (eq bundle-type :no-output-file) ;; NIL already means something regarding type.
(let ((name (or (component-bundle-pathname c)
(let ((name (or (component-build-pathname c)
(format nil "~A~@[~A~]" (component-name c) (slot-value o 'name-suffix))))
(type (bundle-pathname-type bundle-type)))
(values (list (subpathname (component-pathname c) name :type type))
......@@ -134,10 +127,10 @@
((type :initform #-(or ecl mkcl) (compile-file-type) #+(or ecl mkcl) "fasb")))
(defclass precompiled-system (system)
((bundle-pathname :initarg :fasl)))
((build-pathname :initarg :fasl)))
(defclass prebuilt-system (system)
((bundle-pathname :initarg :static-library :initarg :lib
((build-pathname :initarg :static-library :initarg :lib
:accessor prebuilt-system-static-library)))
......@@ -3,23 +3,25 @@
;;; This file is for papering over the deficiencies and peculiarities
;;; of various Common Lisp implementations.
;;; For implementation-specific access to the system, see os.lisp instead.
(asdf/package:define-package :asdf/compatibility
(:use :common-lisp :asdf/package)
(:recycle :asdf/compatibility :asdf)
;;; A few functions are defined here, but actually exported from utility;
;;; from this package only common-lisp symbols are exported.
(asdf/package:define-package :asdf/common-lisp
(:nicknames :asdf/cl)
(:use #-genera :common-lisp #+genera :future-common-lisp :asdf/package)
(:reexport :common-lisp)
(:recycle :asdf/common-lisp :asdf)
#+allegro (:intern #:*acl-warn-save*)
#:logical-pathname #:translate-logical-pathname
#:make-broadcast-stream #:file-namestring)
#+ecl (:export #:use-ecl-byte-compiler-p)
;;#+gcl (:shadow #:type-of #:with-standard-io-syntax) ; causes errors when loading fasl(!)
#+genera (:import-from :scl #:boolean)
#+gcl2.6 (:shadow #:type-of #:with-standard-io-syntax) ; causes errors when loading fasl(!)
#+gcl2.6 (:shadowing-import-from :system #:*load-pathname*)
#+genera (:shadowing-import-from :scl #:boolean)
#+genera (:export #:boolean #:ensure-directories-exist)
#+mcl (:export #:probe-posix #:current-user-homedir-pathname)
#:strcat #:compatfmt))
(in-package :asdf/compatibility)
#+mcl (:shadow #:user-homedir-pathname))
(in-package :asdf/common-lisp)
#-(or abcl allegro clisp clozure cmu cormanlisp ecl gcl genera lispworks mcl mkcl sbcl scl xcl)
(error "ASDF is not supported on your implementation. Please help us port it.")
......@@ -43,6 +45,15 @@
(setf excl:*warn-on-nested-reader-conditionals* nil))
(setf *print-readably* nil))
(deftype logical-pathname () nil)
(defun make-broadcast-stream () *error-output*)
(defun translate-logical-pathname (x) x)
(defun file-namestring (p)
(setf p (pathname p))
(format nil "~@[~A~]~@[.~A~]" (pathname-name p) (pathname-type p))))
(eval-when (:load-toplevel :compile-toplevel :execute)
(setf *load-verbose* nil)
......@@ -51,39 +62,24 @@
#+gcl ;; Debian's GCL 2.7 has bugs with compiling multiple-value stuff, but can run ASDF 2.011
(eval-when (:load-toplevel :compile-toplevel :execute)
(when (or (< system::*gcl-major-version* 2) ;; GCL 2.6 lacks output-translations and more.
(and (= system::*gcl-major-version* 2)
(< system::*gcl-minor-version* 7)))
(shadow 'type-of :asdf/compatibility)
;;(shadow 'with-standard-io-syntax :asdf/compatibility)
;;(format t "Detected an old GCL 2.6. Only limited functionality available.~%")
(pushnew 'ignorable pcl::*variable-declarations-without-argument*)
(pushnew :gcl<2.7 *features*))
(unless (member :ansi-cl *features*)
(error "ASDF only supports GCL in ANSI mode. Aborting.~%"))
(setf compiler::*compiler-default-type* (pathname "")
compiler::*lsp-ext* ""))
(eval-when (:load-toplevel :compile-toplevel :execute)
(require :cmp)
(setq clos::*redefine-class-in-place* t)) ;; Make sure we have strict ANSI class redefinition semantics
(eval-when (:compile-toplevel :load-toplevel :execute)
(shadow 'type-of :asdf/common-lisp)
(shadowing-import 'system:*load-pathname* :asdf/common-lisp))
;;;; Compatibility layers
(eval-when (:compile-toplevel :load-toplevel :execute)
(export 'type-of :asdf/common-lisp)
(export 'system:*load-pathname* :asdf/common-lisp))
(deftype logical-pathname () nil)
(defun make-broadcast-stream () *error-output*)
(defun translate-logical-pathname (x) x)
(defun file-namestring (p)
(setf p (pathname p))
(format nil "~@[~A~]~@[.~A~]" (pathname-name p) (pathname-type p))))
(progn ;; Doesn't support either logical-pathnames or output-translations.
(defvar *gcl<2.7* t)
(defvar *gcl2.6* t)
(deftype logical-pathname () nil)
(defun type-of (x) (class-name (class-of x)))
(defun wild-pathname-p (path) (declare (ignore path)) nil)
......@@ -121,7 +117,7 @@
;; the pathname of the current user's home directory, whereas
;; MCL by default provides the directory from which MCL was started.
;; See
(defun current-user-homedir-pathname ()
(defun user-homedir-pathname ()
(ccl::findfolder #$kuserdomain #$kCurrentUserFolderType))
(defun probe-posix (posix-namestring)
\"If a file exists for the posix namestring, return the pathname\"
......@@ -131,9 +127,17 @@
(when (eq #$noerr (#_fspathmakeref cpath fsref is-dir))
(ccl::%path-from-fsref fsref is-dir))))))"))
(eval-when (:load-toplevel :compile-toplevel :execute)
(require :cmp)
(setq clos::*redefine-class-in-place* t)) ;; Make sure we have strict ANSI class redefinition semantics
;;;; compatfmt: avoid fancy format directives when unsupported
;; Confirm (?) has to be inside an eval-when to make Lispworks happy
(defmacro loop* (&rest rest)
#-genera `(loop ,@rest)
#+genera `(lisp:loop ,@rest)) ;; In genera, CL:LOOP can't destructure, so we use LOOP*. Sigh.
(eval-when (:load-toplevel :compile-toplevel :execute)
(defun strcat (&rest strings)
......@@ -141,10 +145,10 @@
(defmacro compatfmt (format)
#+(or gcl genera)
(loop :for (unsupported . replacement)
:in (append
'(("~3i~_" . ""))
#+(or genera gcl<2.7) '(("~@<" . "") ("; ~@;" . "; ") ("~@:>" . "") ("~:>" . ""))) :do
(loop* :for (unsupported . replacement)
:in (append
'(("~3i~_" . ""))
#+(or genera gcl2.6) '(("~@<" . "") ("; ~@;" . "; ") ("~@:>" . "") ("~:>" . ""))) :do
(loop :for found = (search unsupported format) :while found :do
(setf format (strcat (subseq format 0 found) replacement
(subseq format (+ found (length unsupported)))))))
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/component
(:recycle :asdf/component :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade)
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade)
#:component #:component-find-path
#:component-name #:component-pathname #:component-relative-pathname
......@@ -50,7 +50,7 @@ Despite the function's name, the return value may be an absolute
pathname, because an absolute pathname may be interpreted relative to
another pathname in a degenerate way."))
(defgeneric* component-property (component property))
(defgeneric* (setf component-property) (new-value component property))
(defgeneric* component-external-format (component))
(defgeneric* component-encoding (component))
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/concatenate-source
(:recycle :asdf/concatenate-source :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/operation
:asdf/system :asdf/find-system :asdf/defsystem
:asdf/action :asdf/lisp-action :asdf/bundle)
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/configuration
(:recycle :asdf/configuration :asdf)
(:use :common-lisp :asdf/compatibility :asdf/utility
(:use :asdf/common-lisp :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image)
......@@ -243,7 +243,7 @@ directive.")
(when directory (setf ensure-directory t)) ;; :directory backward compatibility, until 2014-01-16.
(if (atom x)
(resolve-absolute-location x :ensure-directory ensure-directory :wilden wilden)
(loop :with (first . rest) = x
(loop* :with (first . rest) = x
:with path = (resolve-absolute-location
first :ensure-directory (and (or ensure-directory rest) t)
:wilden (and wilden (null rest)))
......@@ -84,12 +84,23 @@ cl-asdf (2:2.27-1) unstable; urgency=low
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.
* 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.
A macro DEFINE-PACKAGE was defined in replacement to DEFPACKAGE
to manage the same effects while making every effort to
Do The Right Thing(tm) in case of hot upgrade.
Do The Right Thing(tm) in case of hot upgrade. It also provides
new forms :MIX and :REEXPORT which can be quite practical.
* 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
......@@ -104,14 +115,41 @@ cl-asdf (2:2.27-1) unstable; urgency=low
from platform to platform. See notably in pathname.lisp,
Although we strongly disrecommended the use of logical pathnames
(so called), ASDF better supports them than ever;
the actual support also depends on your 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.
ASDF provides initial implementations of an operation program-op
to create standalone executables (if available on your implementation).
* 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, it has a usable interface
to either capture program output or run the program interactively.
This supersedes run-program/ previously available from xcvb-driver.
* Conditions can be selectively muffled around compilation
thanks to around-compile hook and the *UNINTERESTING-COMPILER-CONDITIONS*
parameter and the additional *UNINTERESTING-LOADER-CONDITIONS*.
This supersedes the functionality previously available from xcvb-driver.
* 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.
* COMPILE-FILE* was beefed up to support all these features and more,
doing the right thing 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.
......@@ -120,18 +158,47 @@ cl-asdf (2:2.27-1) unstable; urgency=low
Many internal accessors were renamed, after checking on Quicklisp
that no one was using them.
* Per-file packages are now used by ASDF internally, in the style of
quick-build or faslpath. ASDF does not yet include builtin support
for quick-build or faslpath systems and dependencies, however.
* Portability updates were done for
ABCL, CLISP, Clozure CL, CMUCL, ECL, LispWorks Personal Edition, MKCL, XCL.
Working support for GCL 2.6 was restored, with notable limitations
including lack of support for output-translations or logical-pathnames.
* Documentation received some small updates.
* Tests were updated, notably including support for bundles and encodings.
They were successfully run on ccl clisp sbcl ecl ecl_bytecodes
cmucl abcl scl allegro lispworks allegromodern xcl.
Manual tests were run on lispworks-personal-edition genera.
Untested were cormancl mkcl rmcl.
* TRUENAME resolution can be reliably turned off in all cases where
ASDF was using them by setting the variable *RESOLVE-SYMLINKS* to NIL.
This is useful if your operating system makes that operation slow,
or if your build system uses symlinks to content-addressed storage
in which case TRUENAME just does the wrong thing.
* VERSION strings can now be specified as having to be fetched
from a file using a (:read-file-form <path>) specification,
that can use an optional :at keyword argument to specify
a form or subform other than the first form in the file,
as per the utility asdf-driver:access-at.
This makes it easier for developers to manage versioning
of one or multiple systems with a single master version location.
* self-upgrage of ASDF will happen automatically as the first thing
before any attempt to build anything, as it was determined that
doing it in the midst of a build breaks everything, and it is not
otherwise possible to reliably detect in advance whether ASDF may
be needed in such midst. If you don't want an ASDF upgrade, just
don't configure your source-registry to include any copy of ASDF.
* Documentation received some updates.
* Tests were updated, notably including support for bundles, encodings,
run-program, and more. They were successfully run on
ccl clisp sbcl ecl ecl_bytecodes
cmucl abcl scl allegro lispworks allegromodern xcl
Manual tests were manually run on lispworks-personal-edition genera.
Untested remain cormancl mkcl rmcl.
* asdf-debug is a simple utility to make your favorite debugging primitives
available in the package you're debugging.
* POIU was updated. This extension is still distributed separately from ASDF.
It is now much simplified and made correct by construction by
......@@ -143,13 +210,12 @@ cl-asdf (2:2.27-1) unstable; urgency=low
* SLIME support for ASDF was significantly enhanced.
It is distributed separately from ASDF, with SLIME.
See latest checkin from 2012-12-26.
See latest checkin from 2013-01-20.
We recommend that in your ~/.swank.lisp you should:
(in-package :swank)
(defparameter *upgrade-asdf-p* t)
(pushnew 'try-compile-file-with-asdf *compile-file-for-emacs-hook*)
-- Francois-Rene Rideau <> Thu, 10 Jan 2012 22:59:44 -0500
-- Francois-Rene Rideau <> Thu, 22 Jan 2013 22:59:44 -0500
cl-asdf (2:2.26-1) unstable; urgency=low
......@@ -3,11 +3,10 @@
(asdf/package:define-package :asdf/defsystem
(:recycle :asdf/defsystem :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system
:asdf/find-system :asdf/find-component :asdf/lisp-action :asdf/operate
#+gcl<2.7 (:shadowing-import-from :asdf/compatibility #:type-of)
#:defsystem #:register-system-definition
#:class-for-type #:*default-component-class*
......@@ -32,9 +31,13 @@
;; and may be from within the EVAL-WHEN of a file compilation.
;; If no absolute pathname was found, we return NIL.
(check-type pathname (or null string pathname))
(list pathname (load-pathname) *default-pathname-defaults* (getcwd))
:type :directory :resolve-symlinks *resolve-symlinks*))
(let ((pathname (parse-unix-namestring pathname :type :directory))
(load-pathname (load-pathname)))
(when (or pathname load-pathname)
(list pathname load-pathname *default-pathname-defaults* (getcwd))
:resolve-symlinks *resolve-symlinks*)))))
;;; Component class
......@@ -3,13 +3,14 @@
(asdf/package:define-package :asdf/driver
(:nicknames :d :asdf-driver :asdf-utils)
(:use :common-lisp
:asdf/package :asdf/compatibility :asdf/utility
(:use :asdf/common-lisp :asdf/package :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image
:asdf/run-program :asdf/lisp-build
:asdf/configuration :asdf/backward-driver)
:asdf/package :asdf/compatibility :asdf/utility
;; NB: excluding asdf/common-lisp
;; which include all of CL with compatibility modifications on select platforms.
:asdf/package :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image
:asdf/run-program :asdf/lisp-build
......@@ -3,7 +3,8 @@
(asdf/package:define-package :asdf/find-component
(:recycle :asdf/find-component :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade :asdf/component :asdf/system :asdf/find-system)
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system :asdf/find-system)
#:resolve-dependency-name #:resolve-dependency-spec
......@@ -3,7 +3,8 @@
(asdf/package:define-package :asdf/find-system
(:recycle :asdf/find-system :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade :asdf/component :asdf/system)
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/component :asdf/system)
#:remove-entry-from-registry #:coerce-entry-to-directory
#:coerce-name #:primary-system-name
......@@ -15,8 +16,8 @@
#:*system-definition-search-functions* #:search-for-system-definition
#:*central-registry* #:probe-asd #:sysdef-central-registry-search
#:make-temporary-package #:find-system-if-being-defined #:*systems-being-defined*
#:find-system-fallback #:sysdef-find-asdf #:contrib-sysdef-search
#:system-find-pre-loaded-system #:*pre-loaded-systems*
#:contrib-sysdef-search #:sysdef-find-asdf ;; backward compatibility symbols, functions removed
#:system-find-preloaded-system #:register-preloaded-system #:*preloaded-systems*
#:make-defined-systems-table #:*defined-systems*
;; defined in source-registry, but specially mentioned here:
#:initialize-source-registry #:sysdef-source-registry-search))
......@@ -81,8 +82,8 @@ of which is a system object.")
(gethash (coerce-name name) *defined-systems*))
(defun* registered-systems ()
(loop :for (() . system) :being :the :hash-values :of *defined-systems*
:collect (coerce-name system)))
(loop :for registered :being :the :hash-values :of *defined-systems*
:collect (coerce-name (cdr registered))))
(defun* register-system (system)
(check-type system system)
......@@ -108,8 +109,8 @@ Note that this does NOT in any way cause the code of the system to be unloaded."
FN should be a function of one argument. It will be
called with an object of type asdf:system."
(loop :for (nil . system) :being :the hash-values :of *defined-systems*
:do (funcall fn system)))
(loop :for registered :being :the :hash-values :of *defined-systems*
:do (funcall fn (cdr registered))))
;;; for the sake of keeping things reasonably neat, we adopt a
;;; convention that functions in this list are prefixed SYSDEF-
......@@ -129,7 +130,7 @@ called with an object of type asdf:system."
(remove-if #'(lambda (x) (member x *system-definition-search-functions*))
(defun* search-for-system-definition (system)
......@@ -332,19 +333,19 @@ PREVIOUS-TIME when not null is the time at which the PREVIOUS system was loaded.
(format s (compatfmt "~@<Retry finding system ~A after reinitializing the source-registry.~@:>") name))
(defun* find-system-fallback (requested fallback &rest keys &key source-file &allow-other-keys)
(setf fallback (coerce-name fallback)
requested (coerce-name requested))
(when (equal requested fallback)
(let ((registered (cdr (gethash fallback *defined-systems*))))
(or registered
(apply 'make-instance 'system :name fallback :source-file source-file keys)))))
(defvar *preloaded-systems* (make-hash-table :test 'equal))
(defvar *pre-loaded-systems* `(("asdf") ("asdf-driver")))
(defun* sysdef-find-preloaded-systems (requested)
(let ((name (coerce-name requested)))
(multiple-value-bind (keys foundp) (gethash name *preloaded-systems*)
(when foundp
(apply 'make-instance 'system :name name :source-file (getf keys :source-file) keys)))))
(defun* sysdef-find-pre-loaded-systems (requested)
(loop :for (provided . keys) :in *pre-loaded-systems*
:thereis (apply 'find-system-fallback requested provided keys)))
(defun register-preloaded-system (system-name &rest keys)
(setf (gethash (coerce-name system-name) *preloaded-systems*) keys))
(register-preloaded-system "asdf")
(register-preloaded-system "asdf-driver")
;;;; Beware of builtin systems
(defmethod builtin-system-p ((s system))
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/footer
(:recycle :asdf/footer :asdf)
(:use :common-lisp :asdf/driver :asdf/upgrade
(:use :asdf/common-lisp :asdf/driver :asdf/upgrade
:asdf/find-system :asdf/find-component :asdf/operation :asdf/action :asdf/lisp-action
:asdf/operate :asdf/bundle :asdf/concatenate-source
:asdf/output-translations :asdf/source-registry
......@@ -59,7 +59,7 @@
(eval-when (:compile-toplevel :execute)
(when (boundp 'excl:*warn-on-nested-reader-conditionals*)
(setf excl:*warn-on-nested-reader-conditionals* asdf/compatibility::*acl-warn-save*)))
(setf excl:*warn-on-nested-reader-conditionals* asdf/common-lisp::*acl-warn-save*)))