]> git.eshelyaron.com Git - emacs.git/commitdiff
Build documentation like elpa-admin.el
authorPhilip Kaludercic <philipk@posteo.net>
Thu, 20 Oct 2022 19:34:48 +0000 (21:34 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Thu, 20 Oct 2022 19:34:48 +0000 (21:34 +0200)
* lisp/emacs-lisp/package-vc.el (package-vc-build-documentation): Add
function to build a documentation file.
(package-vc-unpack-1): Use 'package-vc-build-documentation'.

lisp/emacs-lisp/package-vc.el

index 830384185293d4be4df1f3301351cd363cb5d42b..e9f5f254d09e0a729c01002d28cc9934b72eb6a2 100644 (file)
@@ -242,6 +242,21 @@ The output is written out into PKG-FILE."
         "\n")
        nil pkg-file nil 'silent))))
 
+(declare-function org-export-to-file "ox" (backend file))
+
+(defun package-vc-build-documentation (pkg-desc file)
+  "Build documentation FILE for PKG-DESC."
+  (let ((pkg-dir (package-desc-dir pkg-desc)))
+    (when (string-match-p "\\.org\\'" file)
+      (require 'ox)
+      (require 'ox-texinfo)
+      (with-temp-buffer
+        (insert-file-contents file)
+        (setq file (make-temp-file "ox-texinfo-"))
+        (org-export-to-file 'texinfo file)))
+    (call-process "install-info" nil nil nil
+                  file pkg-dir)))
+
 (defun package-vc-unpack-1 (pkg-desc pkg-dir)
   "Install PKG-DESC that is already located in PKG-DIR."
   ;; In case the package was installed directly from source, the
@@ -273,14 +288,10 @@ The output is written out into PKG-FILE."
     (package-vc-generate-description-file pkg-desc pkg-file)
 
     ;; Detect a manual
-    (when (executable-find "install-info")
-      ;; Only proceed if we can find an unambiguous TeXinfo file
-      (let ((texi-files (directory-files pkg-dir t "\\.texi\\'"))
-            (dir-file (expand-file-name "dir" pkg-dir)))
-        (when (length= texi-files 1)
-          (call-process "install-info" nil nil nil
-                        (concat "--dir=" dir-file)
-                        (car texi-files))))))
+    (when-let ((pkg-spec (pacakge-vc-desc->spec pkg-desc))
+               ((executable-find "install-info")))
+      (dolist (doc-file (ensure-list (plist-get pkg-spec :doc)))
+        (package-vc-build-documentation pkg-desc doc-file))))
 
   ;; Update package-alist.
   (let ((new-desc (package-load-descriptor pkg-dir)))