diff --git a/bundle.lisp b/bundle.lisp index d85bdb4b48d56ea90f57251be60ea115fe972fb2..6c64647c2945a6666561b94b03a1414db4c61bac 100644 --- a/bundle.lisp +++ b/bundle.lisp @@ -528,8 +528,13 @@ which is probably not what you want; you probably need to tweak your output tran :static-library (resolve-symlinks* pathname)))) (defmethod component-depends-on :around ((o image-op) (c system)) - (destructuring-bind ((lib-op . deps)) (call-next-method) - (labels ((has-it-p (x) (find x deps :test 'equal :key 'coerce-name)) + (let ((next (call-next-method)) + (deps (make-hash-table :test 'equal))) + (loop* :for (do . dcs) :in next :do + (loop :for dc :in dcs + :for dep = (and dc (resolve-dependency-spec c dc)) + :when dep :do (setf (gethash (coerce-name (component-system dep)) deps) t))) + (labels ((has-it-p (x) (gethash x deps)) (ensure-linkable-system (x) (unless (has-it-p x) (or (if-let (s (find-system x)) @@ -537,12 +542,12 @@ which is probably not what you want; you probably need to tweak your output tran (list s))) (if-let (p (system-module-pathname x)) (list (make-prebuilt-system x p))))))) - `((,lib-op + `((lib-op ,@(unless (no-uiop c) (append (ensure-linkable-system "cmp") (or (ensure-linkable-system "uiop") - (ensure-linkable-system "asdf")))) - ,@deps))))) + (ensure-linkable-system "asdf"))))) + ,@next)))) (defmethod perform ((o link-op) (c system)) (let* ((object-files (input-files o c))