Add doom-get-package-alist
New function returns a list of (NAME . DESC) cons cells in the order they were declared (in module packages.el files). Fixes a load-order issue where autoloads from one package would depend on the autoloads of another package, but was inserted into doom-package-autoload-file *before* the depended package, causing void-variable errors. Also allows for a big refactor of the :plugins byte-compile target.
This commit is contained in:
parent
08a4701774
commit
69c6e0b8fb
2 changed files with 22 additions and 15 deletions
|
@ -188,6 +188,23 @@ files."
|
||||||
((equal (plist-get plist :pin) pinned)))))
|
((equal (plist-get plist :pin) pinned)))))
|
||||||
collect (cons sym plist)))
|
collect (cons sym plist)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun doom-get-package-alist ()
|
||||||
|
"Returns a list of all desired packages, their dependencies and their desc
|
||||||
|
objects, in the order of their `package! blocks.'"
|
||||||
|
(doom-initialize-packages)
|
||||||
|
(cl-remove-duplicates
|
||||||
|
(let (packages)
|
||||||
|
(dolist (name (append (mapcar #'car doom-packages) doom-core-packages))
|
||||||
|
(when-let* ((desc (cadr (assq name package-alist))))
|
||||||
|
(push (cons name desc) packages)
|
||||||
|
(cl-loop for dep in (package--get-deps name)
|
||||||
|
if (assq dep package-alist)
|
||||||
|
do (push (cons dep (cadr it)) packages))))
|
||||||
|
packages)
|
||||||
|
:key #'car
|
||||||
|
:from-end t))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun doom-get-depending-on (name)
|
(defun doom-get-depending-on (name)
|
||||||
"Return a list of packages that depend on the package named NAME."
|
"Return a list of packages that depend on the package named NAME."
|
||||||
|
|
|
@ -501,9 +501,9 @@ This should be run whenever your `doom!' block or update your packages."
|
||||||
(current-buffer))
|
(current-buffer))
|
||||||
(print! (green "✓ Cached package state"))
|
(print! (green "✓ Cached package state"))
|
||||||
;; insert package autoloads
|
;; insert package autoloads
|
||||||
(dolist (spec package-alist)
|
(dolist (spec (doom-get-package-alist))
|
||||||
(if-let* ((pkg (car spec))
|
(if-let* ((pkg (car spec))
|
||||||
(desc (cadr spec)))
|
(desc (cdr spec)))
|
||||||
(unless (memq pkg doom-autoload-excluded-packages)
|
(unless (memq pkg doom-autoload-excluded-packages)
|
||||||
(let ((file (concat (package--autoloads-file-name desc) ".el")))
|
(let ((file (concat (package--autoloads-file-name desc) ".el")))
|
||||||
(when (file-exists-p file)
|
(when (file-exists-p file)
|
||||||
|
@ -561,18 +561,8 @@ If RECOMPILE-P is non-nil, only recompile out-of-date files."
|
||||||
(":core" (push doom-core-dir targets))
|
(":core" (push doom-core-dir targets))
|
||||||
(":private" (push doom-private-dir targets))
|
(":private" (push doom-private-dir targets))
|
||||||
(":plugins"
|
(":plugins"
|
||||||
(doom-initialize-packages)
|
(cl-loop for (name . desc) in (doom-get-package-alist)
|
||||||
(let (visited)
|
do (package--compile desc))
|
||||||
(dolist (name (append doom-core-packages (mapcar #'car doom-packages)))
|
|
||||||
(unless (memq name visited)
|
|
||||||
(when-let* ((desc (cadr (assq name package-alist))))
|
|
||||||
(cl-loop for dep in (package--get-deps name)
|
|
||||||
if (and (not (memq dep visited))
|
|
||||||
(assq dep package-alist))
|
|
||||||
do (package--compile (cadr it))
|
|
||||||
and do (push dep visited))
|
|
||||||
(package--compile desc)
|
|
||||||
(push name visited)))))
|
|
||||||
(setq compile-plugins-p t
|
(setq compile-plugins-p t
|
||||||
modules (delete ":plugins" modules)))
|
modules (delete ":plugins" modules)))
|
||||||
((pred file-directory-p)
|
((pred file-directory-p)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue