emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] elpa-admin 500f66b16f 1/2: Run makeinfo in the Texinfo file's dir


From: Stefan Monnier
Subject: [elpa] elpa-admin 500f66b16f 1/2: Run makeinfo in the Texinfo file's directory
Date: Thu, 15 Sep 2022 16:22:17 -0400 (EDT)

branch: elpa-admin
commit 500f66b16ff50a5566884d6a1a228c240bfe0612
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Run makeinfo in the Texinfo file's directory
    
    This fixes the build of Texinfo file with `@include ../foo`, such as ESS's.
    
    * elpa-admin.el (elpaa--makeinfo): New function, extracted from
    `elpaa--html-build-doc`.
    (elpaa--html-build-doc, elpaa--build-Info-1): Use it.
---
 elpa-admin.el | 44 +++++++++++++++++++++++++++++---------------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/elpa-admin.el b/elpa-admin.el
index eab88bd8d4..4e3c831c91 100644
--- a/elpa-admin.el
+++ b/elpa-admin.el
@@ -2096,22 +2096,39 @@ directory; one of archive, archive-devel."
     (dolist (f docfiles)
       (elpaa--build-Info-1 pkg-spec f dir html-dir))))
 
+(defun elpaa--makeinfo (input output &optional extraargs)
+  (let* ((input-dir (file-name-directory input))
+         (input-name (file-name-nondirectory input))
+         (output-ext (file-name-extension output))
+        ;; The sandbox may not allow write access to the output,
+         ;; so we first create the file inside the sandbox and then
+         ;; move it to its intended destination.
+        (tmpfile
+         (concat (make-temp-name (expand-file-name "doc" input-dir))
+                 (if output-ext (concat "." output-ext)))))
+    (elpaa--temp-file tmpfile)
+    (with-temp-buffer
+      ;; We change directory to that of the input file, because
+      ;; `@include' searches for the files relative to PWD rather than
+      ;; relative to the includer-file's location (this apparently
+      ;; only applies to files whose name starts with `.' or `..'), so
+      ;; we make the two dirs the same, to reduce the risk of problems.
+      (let ((default-directory
+             (if input-dir (expand-file-name input-dir)
+               default-directory)))
+        (apply #'elpaa--call-sandboxed
+               t "makeinfo" "--no-split" input-name "-o" tmpfile extraargs))
+      (message "%s" (buffer-string)))
+    (elpaa--message "Renaming %S => %S" tmpfile output)
+    (rename-file tmpfile output t)))
+
 (defun elpaa--html-build-doc (pkg-spec docfile html-dir)
   (setq html-dir (directory-file-name html-dir))
   (let* ((destname (elpaa--doc-html-file docfile))
         (html-file (expand-file-name destname html-dir))
         (html-xref-file
-         (expand-file-name destname (file-name-directory html-dir)))
-        ;; The sandbox doesn't allow write access to the `html-dir',
-         ;; so we first create the file inside the sandbox and then
-         ;; we move it to its intended destination.
-        (tmpfile
-         (concat (make-temp-name (expand-file-name "doc")) ".html")))
-    (with-temp-buffer
-      (elpaa--call-sandboxed
-       t "makeinfo" "--no-split" "--html" docfile "-o" tmpfile)
-      (message "%s" (buffer-string)))
-    (rename-file tmpfile html-file t)
+         (expand-file-name destname (file-name-directory html-dir))))
+    (elpaa--makeinfo docfile html-file '("--html"))
     ;; FIXME: Use `push' in Emacsā‰„28
     (plist-put (cdr pkg-spec)
                :internal--html-docs
@@ -2164,10 +2181,7 @@ relative to elpa root."
                          (file-name-nondirectory docfile))
                         ".info")))
         (elpaa--temp-file info-file)
-        (with-temp-buffer
-          (elpaa--call-sandboxed
-           t "makeinfo" "--no-split" docfile "-o" info-file)
-          (message "%s" (buffer-string)))
+        (elpaa--makeinfo docfile info-file)
 
        (when html-dir (elpaa--html-build-doc pkg-spec docfile html-dir))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]