Skip to content

Commit 56b56d0

Browse files
fix autoloading :defsystem-depends-on dependencies
1 parent 690b3a0 commit 56b56d0

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

quicklisp/setup.lisp

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -166,34 +166,43 @@ Quicklisp-provided systems first, and catching ASDF missing
166166
dependencies too if possible."
167167
(setf name (string-downcase name))
168168
(with-simple-restart (abort "Give up on ~S" name)
169-
(let ((strategy (compute-load-strategy name))
170-
(tried-so-far (make-hash-table :test 'equalp)))
171-
(show-load-strategy strategy)
172-
(when (or (not prompt)
173-
(press-enter-to-continue))
174-
(tagbody
175-
retry
176-
(handler-case (apply-load-strategy strategy)
177-
(asdf:missing-dependency-of-version (c)
178-
;; Nothing Quicklisp can do to recover from this, so just
179-
;; resignal
180-
(error c))
181-
(asdf:missing-dependency (c)
182-
(let ((parent (asdf::missing-required-by c))
183-
(missing (asdf::missing-requires c)))
184-
(typecase parent
185-
(asdf:system
186-
(if (gethash missing tried-so-far)
187-
(error "Dependency looping -- already tried to load ~
169+
(let ((tried-so-far (make-hash-table :test 'equalp)))
170+
(tagbody
171+
retry
172+
(flet ((handle-missing-component-error (c)
173+
(let ((parent (asdf::missing-required-by c))
174+
(missing (asdf::missing-requires c)))
175+
(typecase parent
176+
((or null
177+
asdf:system)
178+
(if (gethash missing tried-so-far)
179+
(error "Dependency looping -- already tried to load ~
188180
~A" missing)
189-
(setf (gethash missing tried-so-far) missing))
190-
(autoload-system-and-dependencies missing
191-
:prompt prompt)
192-
(go retry))
193-
(t
194-
;; Error isn't from a system dependency, so there's
195-
;; nothing to autoload
196-
(error c)))))))))
181+
(setf (gethash missing tried-so-far) missing))
182+
(autoload-system-and-dependencies missing
183+
:prompt prompt)
184+
(go retry))
185+
(t
186+
;; Error isn't from a system dependency, so there's
187+
;; nothing to autoload
188+
(error c))))))
189+
(handler-case
190+
(let ((strategy (compute-load-strategy name)))
191+
(show-load-strategy strategy)
192+
(when (or (not prompt)
193+
(press-enter-to-continue))
194+
(apply-load-strategy strategy)))
195+
(asdf:missing-dependency-of-version (c)
196+
;; Nothing Quicklisp can do to recover from this, so just
197+
;; resignal
198+
(error c))
199+
(asdf:load-system-definition-error (c)
200+
(let ((original-error (asdf::error-condition c)))
201+
(if (typep original-error 'asdf:missing-component)
202+
(handle-missing-component-error original-error)
203+
(error c))))
204+
(asdf:missing-component (c)
205+
(handle-missing-component-error c))))))
197206
name))
198207

199208
(defvar *initial-dist-url*

0 commit comments

Comments
 (0)