Skip to content

Commit 124199d

Browse files
authored
Merge pull request #21 from daewok/improve-package-inferred-system-dependency-extraction
Improve package-inferred-system dependency extraction
2 parents 5608e75 + 120fde6 commit 124199d

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

depcheck.lisp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,38 @@
119119
;;(check-attribute 'asdf:system-license :license)
120120
(check-attribute 'asdf:system-author :author))))
121121

122+
(defun child-system-p (maybe-parent-name maybe-child-name)
123+
(and (not (equal maybe-parent-name maybe-child-name))
124+
(equal maybe-parent-name (asdf:primary-system-name maybe-child-name))))
125+
126+
(defun system-direct-dependencies (system-designator)
127+
(mapcar 'normalize-dependency
128+
(asdf:system-depends-on (asdf:find-system system-designator))))
129+
130+
(defun replace-inferred-system-deps-1 (system-name dependencies)
131+
(let* ((inferred-children-deps
132+
(remove-if-not (lambda (name) (child-system-p system-name name))
133+
dependencies))
134+
(deps-of-children
135+
(reduce 'append
136+
(mapcar 'system-direct-dependencies inferred-children-deps)
137+
:initial-value nil)))
138+
(values
139+
(append (set-difference dependencies inferred-children-deps)
140+
deps-of-children)
141+
(null inferred-children-deps))))
142+
143+
(defun replace-inferred-system-deps (system-name dependencies)
144+
(let ((external-deps dependencies))
145+
(loop
146+
(multiple-value-bind (new-dependencies donep)
147+
(replace-inferred-system-deps-1 system-name external-deps)
148+
(setf external-deps (remove-duplicates new-dependencies
149+
:test #'equal))
150+
(when donep
151+
(return))))
152+
external-deps))
153+
122154
(defun compute-dependencies (system-file system-name)
123155
(let* ((asdf:*system-definition-search-functions*
124156
(list #-asdf3 'asdf::sysdef-find-asdf
@@ -135,6 +167,10 @@
135167
(when (equalp system-file system-name)
136168
(setf dependencies *implied-dependencies*)))
137169
(asdf:oos 'asdf:load-op system-name)
170+
(when (and (typep (asdf:find-system system-name) 'asdf:package-inferred-system)
171+
(equalp system-name system-file))
172+
(setf *direct-dependencies*
173+
(replace-inferred-system-deps system-name *direct-dependencies*)))
138174
(setf dependencies
139175
(remove-duplicates (append *direct-dependencies* dependencies)
140176
:test #'equalp))

0 commit comments

Comments
 (0)