|
119 | 119 | ;;(check-attribute 'asdf:system-license :license) |
120 | 120 | (check-attribute 'asdf:system-author :author)))) |
121 | 121 |
|
| 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 | + |
122 | 154 | (defun compute-dependencies (system-file system-name) |
123 | 155 | (let* ((asdf:*system-definition-search-functions* |
124 | 156 | (list #-asdf3 'asdf::sysdef-find-asdf |
|
135 | 167 | (when (equalp system-file system-name) |
136 | 168 | (setf dependencies *implied-dependencies*))) |
137 | 169 | (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*))) |
138 | 174 | (setf dependencies |
139 | 175 | (remove-duplicates (append *direct-dependencies* dependencies) |
140 | 176 | :test #'equalp)) |
|
0 commit comments