Commit c19a17d8 authored by Francois-Rene Rideau's avatar Francois-Rene Rideau

2.32.34: error non-toplevel-system when trying to define a system as a child.

parent 1d5ca36b
......@@ -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.
......
......@@ -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)
......
;;; -*- 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>.
......
......@@ -116,7 +116,7 @@
#:missing-dependency
#:missing-dependency-of-version
#:circular-dependency ; errors
#:duplicate-names
#:duplicate-names #:non-toplevel-system
#:try-recompiling
#:retry
......
......@@ -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)))
......
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