Skip to content

Commit 663c43c

Browse files
committed
Normalize dependency-defs before resolving inferred-system files
asdf-inferred-system-deps mapped find-system directly over the raw :depends-on list, but a list-form dependency such as (:version NAME VER), (:require NAME), or (:feature FEATURE DEP) is not a valid component designator on its own — ASDF only normalizes those during its own dependency resolution. Calling find-system on one signals a formatted-system-definition-error, so asdf-system-files threw for any package-inferred-system that version-pins a sibling system. Reduce each dependency-def to its plain system name first, and resolve with the non-erroring find-system so an unloadable :require/:feature entry is skipped rather than aborting the whole enumeration. 🄯 Brian O'Reilly <fade@deepsky.com>, 2026
1 parent 6f9d751 commit 663c43c

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

slynk-asdf.lisp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,11 +773,28 @@ Example:
773773
(mapcar #'dep-pathname (asdf-inferred-system-deps system)))))
774774

775775

776+
(defun dependency-def-name (dep)
777+
"Extract the plain system name from an ASDF dependency-def. A :depends-on entry
778+
may be a bare name or a list form — (:version NAME ...), (:require NAME), or
779+
(:feature FEATURE DEP) — none of which are valid component designators on their
780+
own, so they must be reduced to a name before FIND-SYSTEM is called on them."
781+
(if (consp dep)
782+
(case (first dep)
783+
((:version :require) (dependency-def-name (second dep)))
784+
(:feature (dependency-def-name (third dep)))
785+
(t dep))
786+
dep))
787+
788+
776789
(defun asdf-inferred-system-deps (system &optional (visited nil))
777790
;; A "proper-dep" is a dependency with the same primary system name (i.e., not an external library)
778791
(flet ((proper-dep-p (dep) (string-equal (asdf:primary-system-name dep) (asdf:primary-system-name system)))
779792
(recurse (prev dep) (asdf-inferred-system-deps dep prev)))
780-
(let* ((proper-deps (remove-if-not #'proper-dep-p (mapcar #'asdf:find-system (asdf:system-depends-on system))))
793+
(let* ((proper-deps (remove-if-not #'proper-dep-p
794+
(remove nil
795+
(mapcar (lambda (dep)
796+
(asdf:find-system (dependency-def-name dep) nil))
797+
(asdf:system-depends-on system)))))
781798
(unvisited-deps (set-difference proper-deps visited :test #'component-equal)))
782799
(reduce #'recurse unvisited-deps :initial-value (append unvisited-deps visited)))))
783800

0 commit comments

Comments
 (0)