From 078e028b34497a928399151db1a5edd12d7c9196 Mon Sep 17 00:00:00 2001 From: "Paul A. Patience" Date: Sat, 10 Jul 2021 20:23:49 -0400 Subject: [PATCH 1/2] gnu: txr: Build documentation. * gnu/packages/lisp.scm (man-for-txr): New variable. (txr)[native-inputs]: New field. [inputs]: Move above the arguments field. [arguments]<#:phases>{inhibit-doc-syms-generation, build-doc} {install-doc}: New phases. {fix-tests}: Add after the unpack phase rather than after the configure phase so that all file-modifying phases are performed after unpacking. --- gnu/packages/lisp.scm | 95 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 6 deletions(-) diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 382f48beb1..8f3be7dafe 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -18,6 +18,7 @@ ;;; Copyright © 2020 Marius Bakke ;;; Copyright © 2020 Zhu Zihao ;;; Copyright © 2021 Sharlatan Hellseher +;;; Copyright © 2021 Paul A. Patience ;;; ;;; This file is part of GNU Guix. ;;; @@ -59,8 +60,10 @@ #:use-module (gnu packages fontutils) #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) #:use-module (gnu packages gl) #:use-module (gnu packages glib) + #:use-module (gnu packages groff) #:use-module (gnu packages m4) #:use-module (gnu packages maths) #:use-module (gnu packages multiprecision) @@ -846,6 +849,60 @@ enough to play the original mainframe Zork all the way through.") (home-page "http://www.russotto.net/git/mrussotto/confusion/src/master/src/README") (license license:gpl3+)))) +(define man-for-txr + (let ((commit "dfbf19b9a96474b8c1bacac85e43605e5691ceb2") + ;; Number of additional commits since the last tag (see the output of + ;; "git describe --tags"). + (revision "41")) + (package + (name "man-for-txr") + (version (git-version "1.6g" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "http://www.kylheku.com/git/man/") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1zy0g8fj9nsfwzvg88hyaiy94r8j14xhs8vy2ln2niqdm6x2lvy2")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; There are no tests. + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fix-man2html-makefile + (lambda _ + (substitute* "man2html/Makefile.in" + ;; It inadvertently ignores @bindir@. + (("^(bindir = \\$\\(DESTDIR\\)\\$\\(PREFIX\\)).*" _ prefix) + (string-append prefix "@bindir@\n"))) + #t)) + (add-after 'unpack 'delete-generated-files + (lambda _ + (for-each delete-file + (append + (list "conf_script") + (map (lambda (d) (string-append d "/Makefile")) + '("." "man" "man2html" "src")) + (map (lambda (f) (string-append "src/" f)) + '("makewhatis.in" "man.conf" + "paths.h" "version.h")))) + #t)) + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (setenv "CC" ,(cc-for-target)) + ;; Humor the manually written configure script. + (invoke "./configure" "+lang" "en" "+fhs" + (string-append "-prefix=" (assoc-ref outputs "out"))) + #t))))) + (home-page "http://www.kylheku.com/cgit/man/") + (synopsis "Modifications to the man utilities, specifically man2html") + (description + "This is a fork of the man utilities intended specifically for building +the HTML documentation of TXR.") + (license license:gpl2)))) + (define-public txr (package (name "txr") @@ -860,6 +917,13 @@ enough to play the original mainframe Zork all the way through.") (sha256 (base32 "14zaziymnbr2ld79x4h7sf88bzzzj82w3xpavmcx7mhwannb2swh")))) (build-system gnu-build-system) + (native-inputs + ;; Required to build the documentation. + `(("ghostscript" ,ghostscript) + ("groff" ,groff) + ("man2html" ,man-for-txr))) + (inputs + `(("libffi" ,libffi))) (arguments `(#:configure-flags (list ,(string-append "cc=" (cc-for-target)) @@ -867,6 +931,22 @@ enough to play the original mainframe Zork all the way through.") #:test-target "tests" #:phases (modify-phases %standard-phases + (add-after 'unpack 'inhibit-doc-syms-generation + (lambda _ + (substitute* "genman.txr" + ;; Exit from genman.txr before it tries to write to + ;; stdlib/doc-syms.tl, which is anyway kept up to date with + ;; each release (and is already compiled to stdlib/doc-syms.tlo + ;; when genman.txr is run). + (("^@\\(output \"share/txr/stdlib/doc-syms\\.tl\"\\).*" line) + (string-append "@(do (exit))\n" line))) + #t)) + (add-after 'unpack 'fix-tests + (lambda _ + (substitute* (list "tests/017/realpath.tl" + "tests/017/realpath.expected") + (("/usr/bin") "/")) + #t)) (replace 'configure ;; ./configure is a hand-written script that can't handle standard ;; autotools arguments like CONFIG_SHELL. @@ -874,14 +954,17 @@ enough to play the original mainframe Zork all the way through.") (setenv "txr_shell" (which "bash")) (apply invoke "./configure" configure-flags) #t)) - (add-after 'configure 'fix-tests + (add-after 'build 'build-doc (lambda _ - (substitute* (list "tests/017/realpath.tl" - "tests/017/realpath.expected") - (("/usr/bin") "/")) + (invoke "make" "txr-manpage.html" "txr-manpage.pdf") + #t)) + (add-after 'install 'install-doc + (lambda* (#:key outputs #:allow-other-keys) + (let ((doc (string-append (assoc-ref outputs "out") + "/share/doc/" ,name "-" ,version))) + (for-each (lambda (f) (install-file f doc)) + '("txr-manpage.html" "txr-manpage.pdf"))) #t))))) - (inputs - `(("libffi" ,libffi))) (synopsis "General-purpose, multi-paradigm programming language") (description "TXR is a general-purpose, multi-paradigm programming language. It -- 2.32.0