From f536b42492e1520cc8da4e92b5bb65552ba39e6a Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Sat, 6 May 2023 13:44:32 -0700 Subject: [PATCH] package-vc: Process :make and :shell-command spec args --- lisp/emacs-lisp/package-vc.el | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index 421947b528d..476c38916a8 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -344,6 +344,31 @@ asynchronously." "\n") nil pkg-file nil 'silent)))) +(defcustom package-vc-process-make nil + "Whether to process :make and :shell-command spec arguments. + +When set to a list of symbols (packages), run commands for only +packages in the list. When `nil', never run commands. Otherwise +when non-`nil', run commands for any package with :make or +:shell-command specified. + +Package specs are loaded from trusted package archives." + :type '(choice (boolean :tag "Run for all packages") + (repeat (symbol :tag "Run for only selected packages"))) + :version "30.1") + +(defun package-vc--make (pkg-spec) + "Process :make and :shell-command PKG-SPEC arguments." + (let ((target (plist-get pkg-spec :make)) + (cmd (plist-get pkg-spec :shell-command))) + (when (or cmd target) + (with-current-buffer (get-buffer-create " *package-vc make*") + (erase-buffer) + (when (and cmd (/= 0 (call-process shell-file-name nil t nil shell-command-switch cmd))) + (warn "Failed to run %s, see buffer %S" cmd (buffer-name))) + (when (and target (/= 0 (apply #'call-process "make" nil t nil (if (consp target) target (list target))))) + (warn "Failed to make %s, see buffer %S" target (buffer-name))))))) + (declare-function org-export-to-file "ox" (backend file)) (defun package-vc--build-documentation (pkg-desc file) @@ -486,6 +511,16 @@ documentation and marking the package as installed." ;; Generate package file (package-vc--generate-description-file pkg-desc pkg-file) + ;; Process :make and :shell-command arguments before building documentation + (pcase package-vc-process-make + ((pred consp) ; When non-`nil' list, check if package is on the list. + (when (memq (package-desc-name pkg-desc) package-vc-process-make) + (package-vc--make pkg-spec))) + ('nil ; When `nil', do nothing. + nil) + (_ ; When otherwise non-`nil', run commands. + (package-vc--make pkg-spec))) + ;; Detect a manual (when (executable-find "install-info") (dolist (doc-file (ensure-list (plist-get pkg-spec :doc))) -- 2.39.2