diff --git a/asdf.asd b/asdf.asd index 5e307f508dde429e010a740e33637931ec10708f..8a13fd3aef63c500a410e996cb12c704c19b6564 100644 --- a/asdf.asd +++ b/asdf.asd @@ -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.33" ;; to be automatically updated by make bump-version + :version "2.32.34" ;; 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. diff --git a/defsystem.lisp b/defsystem.lisp index 87506eec13012e957ed76e2fc0a983eeda08b2bf..06a69170e2402f4da0ee9cc7b8c0ab2264629be1 100644 --- a/defsystem.lisp +++ b/defsystem.lisp @@ -11,7 +11,7 @@ #:defsystem #:register-system-definition #:class-for-type #:*default-component-class* #:determine-system-directory #:parse-component-form - #:duplicate-names #:sysdef-error-component #:check-component-input)) + #:duplicate-names #:non-toplevel-system #:sysdef-error-component #:check-component-input)) (in-package :asdf/defsystem) ;;; Pathname @@ -71,6 +71,13 @@ (format s (compatfmt "~@<Error while defining system: multiple components are given same name ~S~@:>") (duplicate-names-name c))))) + (define-condition non-toplevel-system (system-definition-error) + ((parent :initarg :parent :reader non-toplevel-system-parent) + (name :initarg :name :reader non-toplevel-system-name)) + (:report (lambda (c s) + (format s (compatfmt "~@<Error while defining system: component ~S claims to have a system ~S as a child~@:>") + (non-toplevel-system-parent c) (non-toplevel-system-name c))))) + (defun sysdef-error-component (msg type name value) (sysdef-error (strcat msg (compatfmt "~&~@<The value specified for ~(~A~) ~A is ~S~@:>")) type name value)) @@ -140,7 +147,8 @@ (class-for-type parent type)))) (error 'duplicate-names :name name)) (when do-first (error "DO-FIRST is not supported anymore as of ASDF 3")) - (let* ((args `(:name ,(coerce-name name) + (let* ((name (coerce-name name)) + (args `(:name ,name :pathname ,pathname ,@(when parent `(:parent ,parent)) ,@(remove-plist-keys @@ -148,16 +156,13 @@ :perform :explain :output-files :operation-done-p :weakly-depends-on :depends-on :serial) rest))) - (component (find-component parent name))) - (when weakly-depends-on - ;; ASDF4: deprecate this feature and remove it. - (appendf depends-on - (remove-if (complement #'(lambda (x) (find-system x nil))) weakly-depends-on))) - (when previous-serial-component - (push previous-serial-component depends-on)) + (component (find-component parent name)) + (class (class-for-type parent type))) + (when (and parent (subtypep class 'system)) + (error 'non-toplevel-system :parent parent :name name)) (if component ; preserve identity (apply 'reinitialize-instance component args) - (setf component (apply 'make-instance (class-for-type parent type) args))) + (setf component (apply 'make-instance class args))) (component-pathname component) ; eagerly compute the absolute pathname (let ((sysfile (system-source-file (component-system component)))) ;; requires the previous (when (and (typep component 'system) (not bspp)) @@ -177,6 +182,12 @@ :collect c :when serial :do (setf previous-component name))) (compute-children-by-name component)) + (when previous-serial-component + (push previous-serial-component depends-on)) + (when weakly-depends-on + ;; ASDF4: deprecate this feature and remove it. + (appendf depends-on + (remove-if (complement #'(lambda (x) (find-system x nil))) weakly-depends-on))) ;; Used by POIU. ASDF4: rename to component-depends-on? (setf (component-sideway-dependencies component) depends-on) (%refresh-component-inline-methods component rest) diff --git a/header.lisp b/header.lisp index bd1d42872295db41469365abbb10fcb3d0c0d36f..0729a2213d1473e3918886b627bdd4f41ce6d6d0 100644 --- a/header.lisp +++ b/header.lisp @@ -1,5 +1,5 @@ ;;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*- -;;; This is ASDF 2.32.33: Another System Definition Facility. +;;; This is ASDF 2.32.34: Another System Definition Facility. ;;; ;;; Feedback, bug reports, and patches are all welcome: ;;; please mail to <asdf-devel@common-lisp.net>. diff --git a/interface.lisp b/interface.lisp index 2aeed021f2a9bc8701bf047d00aaffb95a4ef69c..2939381bfc14c98e1c8e1d91ed3c117d93fa98e5 100644 --- a/interface.lisp +++ b/interface.lisp @@ -116,7 +116,7 @@ #:missing-dependency #:missing-dependency-of-version #:circular-dependency ; errors - #:duplicate-names + #:duplicate-names #:non-toplevel-system #:try-recompiling #:retry diff --git a/upgrade.lisp b/upgrade.lisp index 8ca3e1ff7b72bfe7958e3221abd8f60dec8e0ab9..b0ea15b4804c32e5d9097cb755780c2dd6ff9fc5 100644 --- a/upgrade.lisp +++ b/upgrade.lisp @@ -52,7 +52,7 @@ You can compare this string with e.g.: (ASDF:VERSION-SATISFIES (ASDF:ASDF-VERSIO ;; "3.4.5.67" would be a development version in the official upstream of 3.4.5. ;; "3.4.5.0.8" would be your eighth local modification of official release 3.4.5 ;; "3.4.5.67.8" would be your eighth local modification of development version 3.4.5.67 - (asdf-version "2.32.33") + (asdf-version "2.32.34") (existing-version (asdf-version))) (setf *asdf-version* asdf-version) (when (and existing-version (not (equal asdf-version existing-version))) diff --git a/version.lisp-expr b/version.lisp-expr index e40db9d5d68306a7e4e63218e33aeb4a5da83380..60a2c3b4803691358d514757d3e39b575fe11ec6 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -1 +1 @@ -"2.32.33" +"2.32.34"