From d7978f46c5beb6261822d13b6f6154e34658a02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 7 Jul 2012 18:14:24 +0200 Subject: [PATCH] distro: Add Lout. * distro/base.scm (lout): New variable. --- distro/base.scm | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/distro/base.scm b/distro/base.scm index d193b4a169..cd3ac6e306 100644 --- a/distro/base.scm +++ b/distro/base.scm @@ -156,6 +156,114 @@ extensible. It supports many SRFIs.") (home-page "http://www.gnu.org/software/guile/") (license "LGPLv2+"))) +(define-public lout + ;; This one is a bit tricky, because it doesn't follow the GNU Build System + ;; rules. Instead, it has a makefile that has to be patched to set the + ;; prefix, etc., and it has no makefile rules to build its doc. + (let ((configure-phase + '(lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (substitute* "makefile" + (("^PREFIX[[:blank:]]*=.*$") + (string-append "PREFIX = " out "\n")) + (("^LOUTLIBDIR[[:blank:]]*=.*$") + (string-append "LOUTLIBDIR = " out "/lib/lout\n")) + (("^LOUTDOCDIR[[:blank:]]*=.*$") + (string-append "LOUTDOCDIR = " doc "/doc/lout\n")) + (("^MANDIR[[:blank:]]*=.*$") + (string-append "MANDIR = " out "/man\n"))) + (mkdir out) + (mkdir (string-append out "/bin")) ; TODO: use `mkdir-p' + (mkdir (string-append out "/lib")) + (mkdir (string-append out "/man")) + (mkdir doc) + (mkdir (string-append doc "/doc")) + (mkdir (string-append doc "/doc/lout"))))) + (install-man-phase + '(lambda* (#:key outputs #:allow-other-keys) + (zero? (system* "make" "installman")))) + (doc-phase + '(lambda* (#:key outputs #:allow-other-keys) + (define out + (assoc-ref outputs "doc")) + + (setenv "PATH" + (string-append (assoc-ref outputs "out") + "/bin:" (getenv "PATH"))) + (chdir "doc") + (every (lambda (doc) + (format #t "doc: building `~a'...~%" doc) + (with-directory-excursion doc + (let ((file (string-append out "/doc/lout/" + doc ".ps"))) + (and (or (file-exists? "outfile.ps") + (zero? (system* "lout" "-r4" "-o" + "outfile.ps" "all"))) + (begin + (copy-file "outfile.ps" file) + #t) + (zero? (system* "ps2pdf" + "-dPDFSETTINGS=/prepress" + "-sPAPERSIZE=a4" + file + (string-append out "/doc/lout/" + doc ".pdf"))))))) + '("design" "expert" "slides" "user"))))) + (package + (name "lout") + (version "3.39") + (source (origin + (method http-fetch) + ;; FIXME: `http-get' doesn't follow redirects, hence the URL. + (uri (string-append + "http://download-mirror.savannah.gnu.org/releases/lout/lout-" + version ".tar.gz")) + (sha256 + (base32 + "12gkyqrn0kaa8xq7sc7v3wm407pz2fxg9ngc75aybhi5z825b9vq")))) + (build-system gnu-build-system) ; actually, just a makefile + (outputs '("out" "doc")) + (inputs `(("ghostscript" ,(nixpkgs-derivation "ghostscript")))) + (arguments `(#:modules ((guix build utils) + (guix build gnu-build-system) + (srfi srfi-1)) ; we need SRFI-1 + #:tests? #f ; no "check" target + + ;; Customize the build phases. + #:phases (alist-replace + 'configure ,configure-phase + + (alist-cons-after + 'install 'install-man-pages + ,install-man-phase + + (alist-cons-after + 'install 'install-doc + ,doc-phase + %standard-phases))))) + (description "Lout, a document layout system similar in style to LaTeX") + (long-description +"The Lout document formatting system is now reads a high-level description of +a document similar in style to LaTeX and produces a PostScript or plain text +output file. + +Lout offers an unprecedented range of advanced features, including optimal +paragraph and page breaking, automatic hyphenation, PostScript EPS file +inclusion and generation, equation formatting, tables, diagrams, rotation and +scaling, sorted indexes, bibliographic databases, running headers and +odd-even pages, automatic cross referencing, multilingual documents including +hyphenation (most European languages are supported), formatting of computer +programs, and much more, all ready to use. Furthermore, Lout is easily +extended with definitions which are very much easier to write than troff of +TeX macros because Lout is a high-level, purely functional language, the +outcome of an eight-year research project that went back to the +beginning.") + (license "GPLv3+") + (home-page "http://savannah.nongnu.org/projects/lout/")))) + ;;; Local Variables: ;;; eval: (put 'lambda* 'scheme-indent-function 1) +;;; eval: (put 'substitute* 'scheme-indent-function 1) +;;; eval: (put 'with-directory-excursion 'scheme-indent-function 1) ;;; End: