From a1534b2158c97986e1048379661ee9d250ad6c02 Mon Sep 17 00:00:00 2001 From: Andrew Tropin Date: Thu, 18 Aug 2022 17:43:14 +0300 Subject: [PATCH v2 1/2] build-system: emacs: Add documentation-files argument. Allows to build info files from texinfo or org. * guix/build-system/emacs.scm (default-texinfo): New variable. * guix/build-system/emacs.scm (lower): New arguments. * guix/build/emacs-build-system.scm (generate-docs): New variable. --- guix/build-system/emacs.scm | 16 ++++++++++++++-- guix/build/emacs-build-system.scm | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm index 3df68789ff..02379ee54c 100644 --- a/guix/build-system/emacs.scm +++ b/guix/build-system/emacs.scm @@ -56,8 +56,16 @@ (define (default-emacs) (let ((emacs-mod (resolve-interface '(gnu packages emacs)))) (module-ref emacs-mod 'emacs-minimal))) +(define (default-texinfo) + "Return the default texinfo package." + ;; Lazily resolve the binding to avoid a circular dependency. + (let ((texinfo-mod (resolve-interface '(gnu packages texinfo)))) + (module-ref texinfo-mod 'texinfo))) + (define* (lower name #:key source inputs native-inputs outputs system target + documentation-files + (texinfo (default-texinfo)) (emacs (default-emacs)) #:allow-other-keys #:rest arguments) @@ -76,8 +84,10 @@ (define private-keywords ;; Keep the standard inputs of 'gnu-build-system'. ,@(standard-packages))) - (build-inputs `(("emacs" ,emacs) - ,@native-inputs)) + (build-inputs `(,@native-inputs + ("emacs" ,emacs) + ;; ,@(if (null? documentation-files) '() ) + ("texinfo" ,texinfo))) (outputs outputs) (build emacs-build) (arguments (strip-keyword-arguments private-keywords arguments))))) @@ -87,6 +97,7 @@ (define* (emacs-build name inputs (tests? #f) (parallel-tests? #t) (test-command ''("make" "check")) + (documentation-files ''()) (phases '%standard-phases) (outputs '("out")) (include (quote %default-include)) @@ -109,6 +120,7 @@ (define builder #:test-command #$test-command #:tests? #$tests? #:parallel-tests? #$parallel-tests? + #:documentation-files #$documentation-files #:phases #$phases #:outputs #$(outputs->gexp outputs) #:include #$include diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index 6a6918bfdd..3ffa196862 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -274,6 +274,27 @@ (define (match-stripped-file action regex) (install-file? file stat #:verbose? #t))) #f)))) +(define* (generate-documentation + #:key outputs documentation-files + #:allow-other-keys) + "Convert texinfo or org files specified in DOCUMENTATION-FILES argument to +info files. And move info files site-lisp directory." + (for-each (lambda (f) + (if (regexp-exec + (make-regexp "\\.(txi|texi|texinfo)" regexp/icase) + f) + (invoke "makeinfo" f) + (emacs-batch-script ; else org file + `(progn + (require 'ox-texinfo) + (find-file ,f) + (org-texinfo-export-to-info))))) + documentation-files) + (for-each (lambda (f) + (install-file f (string-append (assoc-ref outputs "out") + %install-dir))) + (find-files "." "\\.info$"))) + (define* (move-doc #:key outputs #:allow-other-keys) "Move info files from the ELPA package directory to the info directory." (let* ((out (assoc-ref outputs "out")) @@ -343,6 +364,7 @@ (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) (add-after 'unpack 'expand-load-path expand-load-path) + (add-after 'expand-load-path 'generate-documentation generate-documentation) (delete 'bootstrap) (delete 'configure) (delete 'build) -- 2.37.2