Commit fefea18b authored by Francois-Rene Rideau's avatar Francois-Rene Rideau
Browse files

2.32.10: Patch a subtle issue causing multiple compilations + more

If system-a :depends-on (system-c ... system-b) and
system-b :defsystem-depends-on (system-c), then
system-c would have been loaded twice, first via the defsystem-depends-on,
second via the plan for system-a which would have
included the items from system-c before system-c was loaded.

Also, allow an arbitrary number of qualifiers in inline-methods,
not just 1 or 0.

On CCL, don't punt on upgrade anymore: all tests are passing.

Make UIOP compile on versions of ASDF older than 2.018.

Finally, yet another tweak for run-program on Allegro on Windows.
parent 1750c17a
......@@ -74,7 +74,7 @@
:licence "MIT"
:description "Another System Definition Facility"
:long-description "ASDF builds Common Lisp software organized into defined systems."
:version "2.32.9" ;; to be automatically updated by make bump-version
:version "2.32.10" ;; to be automatically updated by make bump-version
:depends-on ()
#+asdf3 :encoding #+asdf3 :utf-8
;; For most purposes, asdf itself specially counts as a builtin system.
......@@ -31,23 +31,18 @@
(component-inline-methods component) nil)
(defun %define-component-inline-methods (ret rest)
(dolist (name +asdf-methods+)
(let ((keyword (intern (symbol-name name) :keyword)))
(loop :for data = rest :then (cddr data)
:for key = (first data)
:for value = (second data)
:while data
:when (eq key keyword) :do
(destructuring-bind (op qual? &rest rest) value
(multiple-value-bind (qual args-and-body)
(if (symbolp qual?)
(values (list qual?) rest)
(values nil (cons qual? rest)))
(destructuring-bind ((o c) &body body) args-and-body
(eval `(defmethod ,name ,@qual ((,o ,op) (,c (eql ,ret)))
(component-inline-methods ret)))))))))
(loop* :for (key value) :on rest :by #'cddr
:for name = (and (keywordp key) (find key +asdf-methods+ :test 'string=))
:when name :do
(destructuring-bind (op &rest body) value
(loop :for arg = (pop body)
:while (atom arg)
:collect arg :into qualifiers
(destructuring-bind (o c) arg
(eval `(defmethod ,name ,@qualifiers ((,o ,op) (,c (eql ,ret))) ,@body))
(component-inline-methods ret)))))))
(defun %refresh-component-inline-methods (component rest)
;; clear methods, then add the new ones
;;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*-
;;; This is ASDF 2.32.9: Another System Definition Facility.
;;; This is ASDF 2.32.10: Another System Definition Facility.
;;; Feedback, bug reports, and patches are all welcome:
;;; please mail to <>.
......@@ -54,7 +54,7 @@
(declaim (optimize (speed 1) (safety 3) (debug 3)))
(setf ext:*gc-verbose* nil))
#+(or abcl clisp clozure cmu ecl xcl)
#+(or abcl clisp cmu ecl xcl)
(eval-when (:load-toplevel :compile-toplevel :execute)
(unless (member :asdf3 *features*)
(let* ((existing-version
......@@ -74,5 +74,5 @@
(or #+abcl 2.25 #+cmu 2.018 2.27)))
(rename-package :asdf away)
(when *load-verbose*
(format t "; Renamed old ~A package away to ~A~%" :asdf away))))))
(format t "~&; Renamed old ~A package away to ~A~%" :asdf away))))))
......@@ -88,7 +88,7 @@ The :FORCE or :FORCE-NOT argument to OPERATE can be:
(defmethod operate ((operation operation) (component component)
&rest keys &key &allow-other-keys)
(let ((plan (apply 'traverse operation component keys)))
(perform-plan plan)
(apply 'perform-plan plan keys)
(values operation plan)))
(defun oos (operation component &rest args &key &allow-other-keys)
......@@ -386,9 +386,10 @@ processed in order by OPERATE."))
(with-compilation-unit () ;; backward-compatibility.
(call-next-method)))) ;; Going forward, see deferred-warning support in lisp-build.
(defmethod perform-plan ((steps list) &key)
(loop* :for (op . component) :in steps :do
(perform-with-restarts op component)))
(defmethod perform-plan ((steps list) &key force &allow-other-keys)
(loop* :for (o . c) :in steps
:when (or force (not (nth-value 1 (compute-action-stamp nil o c))))
:do (perform-with-restarts o c)))
(defmethod plan-operates-on-p ((plan list) (component-path list))
(find component-path (mapcar 'cdr plan)
......@@ -2,13 +2,14 @@
(in-package :asdf)
#+gcl2.6 (leave-test "GCL 2.6 sucks. Skipping test." 0)
(assert (handler-case
(let ((*compile-file-failure-behaviour* :warn))
(load-system 'test-compile-file-failure :force t)
(compile-file-error () nil)))
(assert (handler-case
(let ((*compile-file-failure-behaviour* :error))
(load-system 'test-compile-file-failure :force t)
......@@ -354,7 +354,9 @@ Use ELEMENT-TYPE and EXTERNAL-FORMAT for the stream passed to the OUTPUT process
(declare (ignorable interactive))
#+(or abcl xcl) (ext:run-shell-command command)
(excl:run-shell-command command :input interactive :output interactive :wait t)
command :input interactive :output interactive :wait t
#+os-windows :show-window #+os-windows (unless (or interactive (eq output t)) :hide))
#+(or clisp clozure cmu (and lispworks os-unix) sbcl scl)
(process-result (run-program command :pipe nil :interactive interactive) nil)
#+ecl (ext:system command)
......@@ -362,7 +364,7 @@ Use ELEMENT-TYPE and EXTERNAL-FORMAT for the stream passed to the OUTPUT process
#+gcl (lisp:system command)
#+(and lispworks os-windows)
command :show-cmd interactive :prefix "" :output-stream nil)
command :show-cmd (or interactive (eq output t)) :prefix "" :output-stream nil)
#+mcl (ccl::with-cstrs ((%command command)) (_system %command))
#+mkcl (nth-value 2
(mkcl:run-program #+windows command #+windows ()
......@@ -17,7 +17,7 @@ UIOP is also known as ASDF/DRIVER or ASDF-UTILS,
being transcluded into asdf.lisp together with ASDF/DEFSYSTEM."
#+asdf3 :version #+asdf3 (:read-file-form "version.lisp-expr")
#+asdf-encoding :encoding #+asdf-encoding :utf-8
:around-compile call-without-redefinition-warnings
#+asdf3 :around-compile #+asdf3 call-without-redefinition-warnings
((:static-file "version.lisp-expr")
(:static-file "contrib/debug.lisp")
......@@ -52,7 +52,7 @@ You can compare this string with e.g.: (ASDF:VERSION-SATISFIES (ASDF:ASDF-VERSIO
;; "" would be a development version in the official upstream of 3.4.5.
;; "" would be your eighth local modification of official release 3.4.5
;; "" would be your eighth local modification of development version
(asdf-version "2.32.9")
(asdf-version "2.32.10")
(existing-version (asdf-version)))
(setf *asdf-version* asdf-version)
(when (and existing-version (not (equal asdf-version existing-version)))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment