Support side-effects while building VC packages
* doc/emacs/package.texi (Specifying Package Sources): Document new specification attributes. * lisp/emacs-lisp/package-vc.el (package-vc-allow-side-effects): Add new user option. (package-vc--make): Add handler for processing :make and :shell-command. (package-vc--unpack-1): Check 'package-vc-allow-side-effects' and invoke 'package-vc--make'. * etc/NEWS: Mention change. (Bug#63336)
This commit is contained in:
parent
d3a17a58fb
commit
5ac08768aa
3 changed files with 54 additions and 0 deletions
|
@ -682,6 +682,15 @@ A string providing the repository-relative name of the documentation
|
|||
file from which to build an Info file. This can be a Texinfo file or
|
||||
an Org file.
|
||||
|
||||
@item :make
|
||||
A string or list of strings providing the target or targets defined in
|
||||
the repository Makefile which should run before building the Info
|
||||
file. Only takes effect when package-vc-allow-side-effects is non-nil.
|
||||
|
||||
@item :shell-command
|
||||
A string providing the shell command to run before building the Info
|
||||
file. Only takes effect when package-vc-allow-side-effects is non-nil.
|
||||
|
||||
@item :vc-backend
|
||||
A symbol naming the VC backend to use for downloading a copy of the
|
||||
package's repository (@pxref{Version Control Systems,,,emacs, The GNU
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -294,6 +294,11 @@ When non-nil, it will automatically register every package as a
|
|||
project, that you can quickly select using 'project-switch-project'
|
||||
('C-x p p').
|
||||
|
||||
---
|
||||
*** New user option 'package-vc-allow-side-effects'.
|
||||
When non-nil, package specifications with side-effects for building
|
||||
software will used when building a package.
|
||||
|
||||
** Flymake
|
||||
|
||||
+++
|
||||
|
|
|
@ -344,6 +344,40 @@ asynchronously."
|
|||
"\n")
|
||||
nil pkg-file nil 'silent))))
|
||||
|
||||
(defcustom package-vc-allow-side-effects nil
|
||||
"Whether to process :make and :shell-command spec arguments.
|
||||
|
||||
It may be necessary to run :make and :shell-command arguments in
|
||||
order to initialize a package or build its documentation, but
|
||||
please be careful when changing this option, as installing and
|
||||
updating a package can run potentially harmful code.
|
||||
|
||||
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 (const :tag "Run for all packages" t)
|
||||
(repeat :tag "Run only for selected packages" (symbol :tag "Package name"))
|
||||
(const :tag "Never run" nil))
|
||||
:version "30.1")
|
||||
|
||||
(defun package-vc--make (pkg-spec pkg-desc)
|
||||
"Process :make and :shell-command in PKG-SPEC.
|
||||
PKG-DESC is the package descriptor for the package that is being
|
||||
prepared."
|
||||
(let ((target (plist-get pkg-spec :make))
|
||||
(cmd (plist-get pkg-spec :shell-command))
|
||||
(buf (format " *package-vc make %s*" (package-desc-name pkg-desc))))
|
||||
(when (or cmd target)
|
||||
(with-current-buffer (get-buffer-create buf)
|
||||
(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 +520,12 @@ 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
|
||||
(when (or (eq package-vc-allow-side-effects t)
|
||||
(memq (package-desc-name pkg-desc)
|
||||
package-vc-allow-side-effects))
|
||||
(package-vc--make pkg-spec pkg-desc))
|
||||
|
||||
;; Detect a manual
|
||||
(when (executable-find "install-info")
|
||||
(dolist (doc-file (ensure-list (plist-get pkg-spec :doc)))
|
||||
|
|
Loading…
Add table
Reference in a new issue