Function: package--dependencies
package--dependencies is a byte-compiled function defined in
package.el.gz.
Signature
(package--dependencies PKG)
Documentation
Return a list of all transitive dependencies of PKG.
Each element of the resulting list is a cons-cell (NAME VERSION-LIST),
where NAME is a symbol designating the package name and VERSION-LIST
designates the least version number that any dependency of PKG requires.
This format is intentionally meant to mirror that of
package-desc-reqs, which see. PKG is either a symbol designating a
package name known in the archives or a package-desc object, or a list
of package names.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/package.el.gz
(defun package--dependencies (pkg)
"Return a list of all transitive dependencies of PKG.
Each element of the resulting list is a cons-cell (NAME VERSION-LIST),
where NAME is a symbol designating the package name and VERSION-LIST
designates the least version number that any dependency of PKG requires.
This format is intentionally meant to mirror that of
`package-desc-reqs', which see. PKG is either a symbol designating a
package name known in the archives or a `package-desc' object, or a list
of package names."
(cl-loop for desc in (mapcar (lambda (d) (package-get-descriptor d t))
(ensure-list pkg))
when desc
append (named-let rec ((pkg-desc desc) (min-version nil) (seen '()))
(let ((deps '()))
(pcase-dolist (`(,name ,vlist) (package-desc-reqs pkg-desc))
(cond*
((bind* (pred (lambda (d) (version-list-<= vlist (package-desc-version d))))))
((memq name seen))
((eq name 'emacs) (push (list name vlist) deps))
((bind-and* (desc (package-get-descriptor name t pred)))
(setq deps (nconc (rec desc vlist (cons name seen)) deps)))
(t (push (list name vlist) deps))))
(cons (list (package-desc-name pkg-desc) min-version) deps)))
into all
finally return
(mapcar
(lambda (ent)
(list (car ent) (seq-reduce (lambda (acc vlist)
(if (version-list-< acc vlist) vlist acc))
(mapcar #'cadr (cdr ent)) '())))
(seq-group-by #'car (delete-dups (cdr all))))))