From 44d36ade84a27cb91cea080cb6526ab46fbdda1d Mon Sep 17 00:00:00 2001 From: Eric Timmons Date: Sun, 21 Feb 2021 12:36:08 -0500 Subject: [PATCH 1/9] Add test case for issue 39 Issue 39 concerned failure to propagate serial dependencies when an :if-feature option is not satisfied. --- test/test-serial-dependencies.asd | 10 ++++++++++ test/test-serial-dependencies.script | 14 ++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 test/test-serial-dependencies.asd create mode 100644 test/test-serial-dependencies.script diff --git a/test/test-serial-dependencies.asd b/test/test-serial-dependencies.asd new file mode 100644 index 00000000..33b4c328 --- /dev/null +++ b/test/test-serial-dependencies.asd @@ -0,0 +1,10 @@ +;;; This test example shows a failure in propagating serial dependencies across :if-feature +;;; conditionalization. + +(asdf:defsystem test-serial-dependencies + :serial t + :components ((:file "file1") + (:file "file4" :if-feature :undef) + (:file "file3" :if-feature :undef) + ;; we expect an error loading here, because file1 won't be loaded + (:file "file2"))) diff --git a/test/test-serial-dependencies.script b/test/test-serial-dependencies.script new file mode 100644 index 00000000..d4703684 --- /dev/null +++ b/test/test-serial-dependencies.script @@ -0,0 +1,14 @@ +;;; -*- mode: common-lisp; -*- + +(in-package :asdf-test) + +(configure-asdf) + +;;; According to Gitlab issue 39, this should cause an error. We can't use +;;; LOAD-SYSTEM because LOAD-OP is a downward operation. Therefore the plan +;;; will always have a LOAD-OP on every source file of the system (in serial +;;; order). +;;; +(asdf:operate 'asdf:load-op + (asdf:find-component (asdf:find-system "test-serial-dependencies") + (list "file2"))) -- GitLab From 795f6e02f7861f26637e183f77c093a3c640865d Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Mon, 22 Feb 2021 17:39:37 -0600 Subject: [PATCH 2/9] Modify :serial dependency handling. Per @etimmons, interpret serial dependency as requiring links to all previous components, not just the immediately last one. --- parse-defsystem.lisp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index 083f9082..5e371f83 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -268,7 +268,7 @@ Please only define ~S and secondary systems with a name starting with ~S (e.g. ~ system names contained using COERCE-NAME. Return the result." (mapcar 'parse-dependency-def dd-list)) - (defun* (parse-component-form) (parent options &key previous-serial-component) + (defun* (parse-component-form) (parent options &key previous-serial-components) (destructuring-bind (type name &rest rest &key (builtin-system-p () bspp) @@ -322,16 +322,16 @@ system names contained using COERCE-NAME. Return the result." (when (typep component 'parent-component) (setf (component-children component) (loop - :with previous-component = nil + :with previous-components = nil :for c-form :in components :for c = (parse-component-form component c-form - :previous-serial-component previous-component) + :previous-serial-components previous-components) :for name = (component-name c) :collect c - :when serial :do (setf previous-component name))) + :when serial :do (push name previous-components))) (compute-children-by-name component)) - (when previous-serial-component - (push previous-serial-component depends-on)) + (when previous-serial-components + (setf depends-on (union depends-on previous-serial-components))) (when weakly-depends-on ;; ASDF4: deprecate this feature and remove it. (appendf depends-on -- GitLab From 964ad8d54e3d66eaf17acd80aac9938951d531df Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Sat, 27 Feb 2021 10:08:09 -0600 Subject: [PATCH 3/9] Repair and refactor previous fix. Apply optimization suggested by @frideau. Pull out `compute-component-children` into separate function for easier debugging. --- parse-defsystem.lisp | 169 ++++++++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 75 deletions(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index 5e371f83..8ed26378 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -268,83 +268,102 @@ Please only define ~S and secondary systems with a name starting with ~S (e.g. ~ system names contained using COERCE-NAME. Return the result." (mapcar 'parse-dependency-def dd-list)) - (defun* (parse-component-form) (parent options &key previous-serial-components) - (destructuring-bind - (type name &rest rest &key - (builtin-system-p () bspp) - ;; the following list of keywords is reproduced below in the - ;; remove-plist-keys form. important to keep them in sync - components pathname perform explain output-files operation-done-p - weakly-depends-on depends-on serial - do-first if-component-dep-fails version - ;; list ends - &allow-other-keys) options - (declare (ignore perform explain output-files operation-done-p builtin-system-p)) - (check-component-input type name weakly-depends-on depends-on components) - (when (and parent - (find-component parent name) - (not ;; ignore the same object when rereading the defsystem - (typep (find-component parent name) - (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* ((name (coerce-name name)) - (args `(:name ,name - :pathname ,pathname - ,@(when parent `(:parent ,parent)) - ,@(remove-plist-keys - '(:components :pathname :if-component-dep-fails :version - :perform :explain :output-files :operation-done-p - :weakly-depends-on :depends-on :serial) - rest))) - (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 args))) - (component-pathname component) ; eagerly compute the absolute pathname - (when (typep component 'system) - ;; cache information for introspection - (setf (slot-value component 'depends-on) - (parse-dependency-defs depends-on) - (slot-value component 'weakly-depends-on) - ;; these must be a list of systems, cannot be features or versioned systems - (mapcar 'coerce-name weakly-depends-on))) - (let ((sysfile (system-source-file (component-system component)))) ;; requires the previous - (when (and (typep component 'system) (not bspp)) - (setf (builtin-system-p component) (lisp-implementation-pathname-p sysfile))) - (setf version (normalize-version version :component name :parent parent :pathname sysfile))) - ;; Don't use the accessor: kluge to avoid upgrade issue on CCL 1.8. - ;; A better fix is required. - (setf (slot-value component 'version) version) - (when (typep component 'parent-component) - (setf (component-children component) - (loop - :with previous-components = nil - :for c-form :in components - :for c = (parse-component-form component c-form - :previous-serial-components previous-components) - :for name = (component-name c) - :collect c - :when serial :do (push name previous-components))) - (compute-children-by-name component)) - (when previous-serial-components - (setf depends-on (union depends-on previous-serial-components))) - (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) - (when if-component-dep-fails - (error "The system definition for ~S uses deprecated ~ + ;;; Helper function for parse-component-form. Sets the CHILDREN slot of + ;;; COMPONENT, using COMPONENTS list, and adds dependency links if + ;;; the COMPONENT is a serial component. Should ONLY be called on a + ;;; PARENT-COMPONENT. + (declaim (ftype (function (parent-component list (or t nil)) (values)) + compute-component-children)) + (with-compilation-unit () + (defun* compute-component-children (component components serial-p) + (setf (component-children component) + (loop + :with previous-components = nil + :for c-form :in components + :for c = (parse-component-form component c-form + :previous-serial-components previous-components) + :for name = (component-name c) + :collect c + :when serial-p + ;; if this is an if-feature component, we need to make a serial link + ;; from previous components to following components -- otherwise should + ;; the IF-FEATURE component drop out, the chain of serial dependencies will be + ;; broken. + :unless (component-if-feature c) + :do (setf previous-components nil) + :end + :and :do (push name previous-components))) + (compute-children-by-name component) + (values)) + + (defun* (parse-component-form) (parent options &key previous-serial-components) + (destructuring-bind + (type name &rest rest &key + (builtin-system-p () bspp) + ;; the following list of keywords is reproduced below in the + ;; remove-plist-keys form. important to keep them in sync + components pathname perform explain output-files operation-done-p + weakly-depends-on depends-on serial + do-first if-component-dep-fails version + ;; list ends + &allow-other-keys) options + (declare (ignore perform explain output-files operation-done-p builtin-system-p)) + (check-component-input type name weakly-depends-on depends-on components) + (when (and parent + (find-component parent name) + (not ;; ignore the same object when rereading the defsystem + (typep (find-component parent name) + (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* ((name (coerce-name name)) + (args `(:name ,name + :pathname ,pathname + ,@(when parent `(:parent ,parent)) + ,@(remove-plist-keys + '(:components :pathname :if-component-dep-fails :version + :perform :explain :output-files :operation-done-p + :weakly-depends-on :depends-on :serial) + rest))) + (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 args))) + (component-pathname component) ; eagerly compute the absolute pathname + (when (typep component 'system) + ;; cache information for introspection + (setf (slot-value component 'depends-on) + (parse-dependency-defs depends-on) + (slot-value component 'weakly-depends-on) + ;; these must be a list of systems, cannot be features or versioned systems + (mapcar 'coerce-name weakly-depends-on))) + (let ((sysfile (system-source-file (component-system component)))) ;; requires the previous + (when (and (typep component 'system) (not bspp)) + (setf (builtin-system-p component) (lisp-implementation-pathname-p sysfile))) + (setf version (normalize-version version :component name :parent parent :pathname sysfile))) + ;; Don't use the accessor: kluge to avoid upgrade issue on CCL 1.8. + ;; A better fix is required. + (setf (slot-value component 'version) version) + (when (typep component 'parent-component) + (compute-component-children component components serial)) + (when previous-serial-components + (setf depends-on (union depends-on previous-serial-components))) + (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) + (when if-component-dep-fails + (error "The system definition for ~S uses deprecated ~ ASDF option :IF-COMPONENT-DEP-FAILS. ~ Starting with ASDF 3, please use :IF-FEATURE instead" - (coerce-name (component-system component)))) - component))) + (coerce-name (component-system component)))) + component)))) ;; the following are all systems that Stas Boukarev maintains and refuses to fix, ;; hoping instead to make my life miserable. Instead, I just make ASDF ignore them. -- GitLab From 12e5306693bb4dba8124b473be3761483ee9e220 Mon Sep 17 00:00:00 2001 From: Robert Goldman Date: Sun, 28 Feb 2021 15:48:36 +0000 Subject: [PATCH 4/9] Apply 1 suggestion(s) to 1 file(s) --- parse-defsystem.lisp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index 8ed26378..4c0fff14 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -350,7 +350,7 @@ system names contained using COERCE-NAME. Return the result." (when (typep component 'parent-component) (compute-component-children component components serial)) (when previous-serial-components - (setf depends-on (union depends-on previous-serial-components))) + (setf depends-on (union depends-on previous-serial-components :test #'equal))) (when weakly-depends-on ;; ASDF4: deprecate this feature and remove it. (appendf depends-on -- GitLab From 448b6d3ea50de0fb6baa2f68bbcad8dba7ee82cb Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Sun, 28 Feb 2021 11:13:07 -0600 Subject: [PATCH 5/9] COMPUTE-COMPONENT-CHILDREN returns list. This will enable tracing, for debugging system definitions. --- parse-defsystem.lisp | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index 4c0fff14..f803165a 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -272,29 +272,31 @@ system names contained using COERCE-NAME. Return the result." ;;; COMPONENT, using COMPONENTS list, and adds dependency links if ;;; the COMPONENT is a serial component. Should ONLY be called on a ;;; PARENT-COMPONENT. - (declaim (ftype (function (parent-component list (or t nil)) (values)) + ;;; Returns the list of child components -- it's not entirely clear to me + ;;; what is the set of possible values for elements of this list. + (declaim (ftype (function (parent-component list (or t nil)) t) compute-component-children)) (with-compilation-unit () (defun* compute-component-children (component components serial-p) - (setf (component-children component) - (loop - :with previous-components = nil - :for c-form :in components - :for c = (parse-component-form component c-form - :previous-serial-components previous-components) - :for name = (component-name c) - :collect c - :when serial-p - ;; if this is an if-feature component, we need to make a serial link - ;; from previous components to following components -- otherwise should - ;; the IF-FEATURE component drop out, the chain of serial dependencies will be - ;; broken. - :unless (component-if-feature c) - :do (setf previous-components nil) - :end - :and :do (push name previous-components))) - (compute-children-by-name component) - (values)) + (prog1 + (setf (component-children component) + (loop + :with previous-components = nil ; list of strings + :for c-form :in components + :for c = (parse-component-form component c-form + :previous-serial-components previous-components) + :for name :of-type string = (component-name c) + :collect c + :when serial-p + ;; if this is an if-feature component, we need to make a serial link + ;; from previous components to following components -- otherwise should + ;; the IF-FEATURE component drop out, the chain of serial dependencies will be + ;; broken. + :unless (component-if-feature c) + :do (setf previous-components nil) + :end + :and :do (push name previous-components))) + (compute-children-by-name component))) (defun* (parse-component-form) (parent options &key previous-serial-components) (destructuring-bind -- GitLab From 37f67a6a52702426aed449b53c8d6a9d4119055d Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Sun, 28 Feb 2021 18:16:04 -0600 Subject: [PATCH 6/9] Remove unnecessary WITH-COMPILATION-UNIT. --- parse-defsystem.lisp | 178 ++++++++++++++++++++++--------------------- 1 file changed, 90 insertions(+), 88 deletions(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index f803165a..ca5ca7ed 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -275,97 +275,99 @@ system names contained using COERCE-NAME. Return the result." ;;; Returns the list of child components -- it's not entirely clear to me ;;; what is the set of possible values for elements of this list. (declaim (ftype (function (parent-component list (or t nil)) t) - compute-component-children)) - (with-compilation-unit () - (defun* compute-component-children (component components serial-p) - (prog1 - (setf (component-children component) - (loop - :with previous-components = nil ; list of strings - :for c-form :in components - :for c = (parse-component-form component c-form - :previous-serial-components previous-components) - :for name :of-type string = (component-name c) - :collect c - :when serial-p - ;; if this is an if-feature component, we need to make a serial link - ;; from previous components to following components -- otherwise should - ;; the IF-FEATURE component drop out, the chain of serial dependencies will be - ;; broken. - :unless (component-if-feature c) - :do (setf previous-components nil) - :end - :and :do (push name previous-components))) - (compute-children-by-name component))) + compute-component-children) + (ftype (function (parent-component list &key (:previous-serial-components list))) + parse-component-form)) - (defun* (parse-component-form) (parent options &key previous-serial-components) - (destructuring-bind - (type name &rest rest &key - (builtin-system-p () bspp) - ;; the following list of keywords is reproduced below in the - ;; remove-plist-keys form. important to keep them in sync - components pathname perform explain output-files operation-done-p - weakly-depends-on depends-on serial - do-first if-component-dep-fails version - ;; list ends - &allow-other-keys) options - (declare (ignore perform explain output-files operation-done-p builtin-system-p)) - (check-component-input type name weakly-depends-on depends-on components) - (when (and parent - (find-component parent name) - (not ;; ignore the same object when rereading the defsystem - (typep (find-component parent name) - (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* ((name (coerce-name name)) - (args `(:name ,name - :pathname ,pathname - ,@(when parent `(:parent ,parent)) - ,@(remove-plist-keys - '(:components :pathname :if-component-dep-fails :version - :perform :explain :output-files :operation-done-p - :weakly-depends-on :depends-on :serial) - rest))) - (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 args))) - (component-pathname component) ; eagerly compute the absolute pathname - (when (typep component 'system) - ;; cache information for introspection - (setf (slot-value component 'depends-on) - (parse-dependency-defs depends-on) - (slot-value component 'weakly-depends-on) - ;; these must be a list of systems, cannot be features or versioned systems - (mapcar 'coerce-name weakly-depends-on))) - (let ((sysfile (system-source-file (component-system component)))) ;; requires the previous - (when (and (typep component 'system) (not bspp)) - (setf (builtin-system-p component) (lisp-implementation-pathname-p sysfile))) - (setf version (normalize-version version :component name :parent parent :pathname sysfile))) - ;; Don't use the accessor: kluge to avoid upgrade issue on CCL 1.8. - ;; A better fix is required. - (setf (slot-value component 'version) version) - (when (typep component 'parent-component) - (compute-component-children component components serial)) - (when previous-serial-components - (setf depends-on (union depends-on previous-serial-components :test #'equal))) - (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) - (when if-component-dep-fails - (error "The system definition for ~S uses deprecated ~ + (defun* compute-component-children (component components serial-p) + (prog1 + (setf (component-children component) + (loop + :with previous-components = nil ; list of strings + :for c-form :in components + :for c = (parse-component-form component c-form + :previous-serial-components previous-components) + :for name :of-type string = (component-name c) + :collect c + :when serial-p + ;; if this is an if-feature component, we need to make a serial link + ;; from previous components to following components -- otherwise should + ;; the IF-FEATURE component drop out, the chain of serial dependencies will be + ;; broken. + :unless (component-if-feature c) + :do (setf previous-components nil) + :end + :and :do (push name previous-components))) + (compute-children-by-name component))) + + (defun* (parse-component-form) (parent options &key previous-serial-components) + (destructuring-bind + (type name &rest rest &key + (builtin-system-p () bspp) + ;; the following list of keywords is reproduced below in the + ;; remove-plist-keys form. important to keep them in sync + components pathname perform explain output-files operation-done-p + weakly-depends-on depends-on serial + do-first if-component-dep-fails version + ;; list ends + &allow-other-keys) options + (declare (ignore perform explain output-files operation-done-p builtin-system-p)) + (check-component-input type name weakly-depends-on depends-on components) + (when (and parent + (find-component parent name) + (not ;; ignore the same object when rereading the defsystem + (typep (find-component parent name) + (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* ((name (coerce-name name)) + (args `(:name ,name + :pathname ,pathname + ,@(when parent `(:parent ,parent)) + ,@(remove-plist-keys + '(:components :pathname :if-component-dep-fails :version + :perform :explain :output-files :operation-done-p + :weakly-depends-on :depends-on :serial) + rest))) + (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 args))) + (component-pathname component) ; eagerly compute the absolute pathname + (when (typep component 'system) + ;; cache information for introspection + (setf (slot-value component 'depends-on) + (parse-dependency-defs depends-on) + (slot-value component 'weakly-depends-on) + ;; these must be a list of systems, cannot be features or versioned systems + (mapcar 'coerce-name weakly-depends-on))) + (let ((sysfile (system-source-file (component-system component)))) ;; requires the previous + (when (and (typep component 'system) (not bspp)) + (setf (builtin-system-p component) (lisp-implementation-pathname-p sysfile))) + (setf version (normalize-version version :component name :parent parent :pathname sysfile))) + ;; Don't use the accessor: kluge to avoid upgrade issue on CCL 1.8. + ;; A better fix is required. + (setf (slot-value component 'version) version) + (when (typep component 'parent-component) + (compute-component-children component components serial)) + (when previous-serial-components + (setf depends-on (union depends-on previous-serial-components :test #'equal))) + (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) + (when if-component-dep-fails + (error "The system definition for ~S uses deprecated ~ ASDF option :IF-COMPONENT-DEP-FAILS. ~ Starting with ASDF 3, please use :IF-FEATURE instead" - (coerce-name (component-system component)))) - component)))) + (coerce-name (component-system component)))) + component))) ;; the following are all systems that Stas Boukarev maintains and refuses to fix, ;; hoping instead to make my life miserable. Instead, I just make ASDF ignore them. -- GitLab From e1cc2f3fbff7e158c23aaa2d4cb6fa30be2d1067 Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Sun, 28 Feb 2021 18:25:07 -0600 Subject: [PATCH 7/9] Replaced UNION with STABLE-UNION. This keeps the automatic addition of dependencies predictable. --- parse-defsystem.lisp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index ca5ca7ed..2818e809 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -300,6 +300,10 @@ system names contained using COERCE-NAME. Return the result." :and :do (push name previous-components))) (compute-children-by-name component))) + (defun* stable-union (s1 s2 &key (test #'eql) (key 'identity)) + (append s1 + (remove-if #'(lambda (e2) (member (funcall key e2) (funcall key s1) :test test)) s2))) + (defun* (parse-component-form) (parent options &key previous-serial-components) (destructuring-bind (type name &rest rest &key @@ -354,7 +358,7 @@ system names contained using COERCE-NAME. Return the result." (when (typep component 'parent-component) (compute-component-children component components serial)) (when previous-serial-components - (setf depends-on (union depends-on previous-serial-components :test #'equal))) + (setf depends-on (stable-union depends-on previous-serial-components :test #'equal))) (when weakly-depends-on ;; ASDF4: deprecate this feature and remove it. (appendf depends-on -- GitLab From d235e756d36adaa68b0a974078b17ff519ab1a5c Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Sun, 28 Feb 2021 19:15:10 -0600 Subject: [PATCH 8/9] Fix erroneous type declaration. --- parse-defsystem.lisp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse-defsystem.lisp b/parse-defsystem.lisp index 2818e809..fa6170be 100644 --- a/parse-defsystem.lisp +++ b/parse-defsystem.lisp @@ -276,7 +276,7 @@ system names contained using COERCE-NAME. Return the result." ;;; what is the set of possible values for elements of this list. (declaim (ftype (function (parent-component list (or t nil)) t) compute-component-children) - (ftype (function (parent-component list &key (:previous-serial-components list))) + (ftype (function ((or parent-component null) list &key (:previous-serial-components list))) parse-component-form)) (defun* compute-component-children (component components serial-p) -- GitLab From 3c4fb0aaebdb771ef36e9cc0a80dfb39611e11cb Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" Date: Mon, 1 Mar 2021 10:31:17 -0600 Subject: [PATCH 9/9] Changelog entry. --- doc/Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/Changelog b/doc/Changelog index 942b513c..6a2c48ea 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ cl-asdf (2:3.3.5-1) unstable; urgency=low IN PROGRESS +* Fix bug in handling combination of :serial and :if-feature dependencies. * Add support for package local nicknames to UIOP:DEFINE-PACKAGE and ASDF's package-inferred systems. Extend support for package local nicknames to more lisp implementations. -- GitLab