diff options
Diffstat (limited to 'gnu/packages/tex.scm')
-rw-r--r-- | gnu/packages/tex.scm | 299 |
1 files changed, 131 insertions, 168 deletions
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index 6601a49c59..bd4c2461a2 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be> -;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org> ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> @@ -254,19 +254,17 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. (modules '((guix build utils) (ice-9 ftw))) (snippet - '(begin - (with-directory-excursion "libs" - (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf"))) - ;; Delete bundled software, except Lua which cannot easily be - ;; used as an external dependency, pplib and xpdf which aren't - ;; supported as system libraries (see m4/kpse-xpdf-flags.m4). - (for-each delete-file-recursively - (scandir "." - (lambda (file) - (and (not (member file preserved-directories)) - (eq? 'directory (stat:type (stat file))))))))) - ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too. - #t)))) + ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too. + '(with-directory-excursion "libs" + (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf"))) + ;; Delete bundled software, except Lua which cannot easily be + ;; used as an external dependency, pplib and xpdf which aren't + ;; supported as system libraries (see m4/kpse-xpdf-flags.m4). + (for-each delete-file-recursively + (scandir "." + (lambda (file) + (and (not (member file preserved-directories)) + (eq? 'directory (stat:type (stat file)))))))))))) (build-system gnu-build-system) (inputs `(("texlive-extra-src" ,texlive-extra-src) @@ -368,24 +366,21 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. (("gswin32c") "gs")) (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl" (("\"gs\"") - (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\""))) - #t)) + (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\""))))) (add-after 'unpack 'patch-dvisvgm-build-files (lambda _ ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so ;; the appropriate linker flags are not added. (substitute* "texk/dvisvgm/configure" (("^have_libgs=yes" all) - (string-append all "\nHAVE_LIBGS=1"))) - #t)) + (string-append all "\nHAVE_LIBGS=1"))))) (add-after 'unpack 'disable-failing-test (lambda _ ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28: ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>. (substitute* "texk/web2c/omegafonts/check.test" (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1") - "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77")) - #t)) + "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77")))) ,@(if (target-ppc32?) ;; Some mendex tests fail on some architectures. `((add-after 'unpack 'skip-mendex-tests @@ -430,9 +425,16 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. iso-8859-1-encoded-scripts)) (with-fluids ((%default-port-encoding "ISO-8859-1")) - (substitute-commands iso-8859-1-encoded-scripts)) - - #t))) + (substitute-commands iso-8859-1-encoded-scripts))))) + ;; When ST_NLINK_TRICK is set, kpathsea attempts to avoid work when + ;; searching files by assuming that a directory with exactly two + ;; links has no subdirectories. This assumption does not hold in our + ;; case, so some directories with symlinked subdirectories would not + ;; be traversed. + (add-after 'patch-scripts 'patch-directory-traversal + (lambda _ + (substitute* "texk/kpathsea/config.h" + (("#define ST_NLINK_TRICK") "")))) (add-after 'check 'customize-texmf.cnf ;; The default texmf.cnf is provided by this package, texlive-bin. ;; Every variable of interest is set relatively to the GUIX_TEXMF @@ -457,8 +459,7 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. ;; Don't truncate lines. (("^error_line = .*$") "error_line = 254\n") (("^half_error_line = .*$") "half_error_line = 238\n") - (("^max_print_line = .*$") "max_print_line = 1000\n"))) - #t)) + (("^max_print_line = .*$") "max_print_line = 1000\n"))))) (add-after 'install 'post-install (lambda* (#:key inputs outputs #:allow-other-keys #:rest args) (let* ((out (assoc-ref outputs "out")) @@ -480,11 +481,12 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. (config.guess (search-input-file inputs "/bin/config.guess"))) - ;; Create symbolic links for the latex variants and their - ;; man pages. + ;; Create symbolic links for the latex variants and their man + ;; pages. We link lualatex to luahbtex; see issue #51252 for + ;; details. (with-directory-excursion (string-append out "/bin/") (for-each symlink - '("pdftex" "pdftex" "xetex" "luatex") + '("pdftex" "pdftex" "xetex" "luahbtex") '("latex" "pdflatex" "xelatex" "lualatex"))) (with-directory-excursion (string-append share "/man/man1/") (symlink "luatex.1" "lualatex.1")) @@ -497,6 +499,14 @@ files from LOCATIONS with expected checksum HASH. CODE is not currently in use. source "/texlive-scripts/source/") scripts) + ;; Patch them. + (let ((dirs (map dirname (list (which "sed") (which "awk"))))) + (with-directory-excursion scripts + (substitute* '("mktexpk" "mktexmf" "mktexlsr") + (("^version=" m) + (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a" + dirs m))))) + ;; Make sure that fmtutil can find its Perl modules. (substitute* (string-append scripts "/fmtutil.pl") (("\\$TEXMFROOT/") @@ -2580,48 +2590,65 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.") (license license:lppl)))) (define-public texlive-kpathsea - (package - (inherit (simple-texlive-package - "texlive-kpathsea" - (list "/web2c/amiga-pl.tcx" - "/web2c/cp1250cs.tcx" - "/web2c/cp1250pl.tcx" - "/web2c/cp1250t1.tcx" - "/web2c/cp227.tcx" - "/web2c/cp852-cs.tcx" - "/web2c/cp852-pl.tcx" - "/web2c/cp8bit.tcx" - "/web2c/empty.tcx" - "/web2c/fmtutil.cnf" - "/web2c/il1-t1.tcx" - "/web2c/il2-cs.tcx" - "/web2c/il2-pl.tcx" - "/web2c/il2-t1.tcx" - "/web2c/kam-cs.tcx" - "/web2c/kam-t1.tcx" - "/web2c/macce-pl.tcx" - "/web2c/macce-t1.tcx" - "/web2c/maz-pl.tcx" - "/web2c/mktex.cnf" - "/web2c/mktex.opt" - "/web2c/mktexdir" - "/web2c/mktexdir.opt" - "/web2c/mktexnam" - "/web2c/mktexnam.opt" - "/web2c/mktexupd" - "/web2c/natural.tcx" - "/web2c/tcvn-t5.tcx" - "/web2c/viscii-t5.tcx") - (base32 - "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr") - #:trivial? #t)) - (home-page "https://www.tug.org/texlive/") - (synopsis "Files related to the path searching library for TeX") - (description "Kpathsea is a library and utility programs which provide + (let ((template (simple-texlive-package + "texlive-kpathsea" + (list "/web2c/amiga-pl.tcx" + "/web2c/cp1250cs.tcx" + "/web2c/cp1250pl.tcx" + "/web2c/cp1250t1.tcx" + "/web2c/cp227.tcx" + "/web2c/cp852-cs.tcx" + "/web2c/cp852-pl.tcx" + "/web2c/cp8bit.tcx" + "/web2c/empty.tcx" + "/web2c/fmtutil.cnf" + "/web2c/il1-t1.tcx" + "/web2c/il2-cs.tcx" + "/web2c/il2-pl.tcx" + "/web2c/il2-t1.tcx" + "/web2c/kam-cs.tcx" + "/web2c/kam-t1.tcx" + "/web2c/macce-pl.tcx" + "/web2c/macce-t1.tcx" + "/web2c/maz-pl.tcx" + "/web2c/mktex.cnf" + "/web2c/mktex.opt" + "/web2c/mktexdir" + "/web2c/mktexdir.opt" + "/web2c/mktexnam" + "/web2c/mktexnam.opt" + "/web2c/mktexupd" + "/web2c/natural.tcx" + "/web2c/tcvn-t5.tcx" + "/web2c/viscii-t5.tcx") + (base32 + "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr") + #:trivial? #t))) + (package + (inherit template) + (arguments + (substitute-keyword-arguments (package-arguments template) + ((#:phases phases '%standard-phases) + `(modify-phases ,phases + (add-after 'unpack 'patch-references + (lambda* (#:key inputs #:allow-other-keys) + (let ((dirs (map dirname (list (which "sed") + (which "awk"))))) + (substitute* '("web2c/mktexdir" + "web2c/mktexnam" + "web2c/mktexupd") + (("^version=" m) + (format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a" + dirs m)))))))))) + (inputs + (list sed gawk)) + (home-page "https://www.tug.org/texlive/") + (synopsis "Files related to the path searching library for TeX") + (description "Kpathsea is a library and utility programs which provide path searching facilities for TeX file types, including the self-locating feature required for movable installations, layered on top of a general search mechanism. This package provides supporting files.") - (license license:lgpl3+))) + (license license:lgpl3+)))) (define-public texlive-latexconfig (package @@ -2673,8 +2700,7 @@ formats.") (add-after 'unpack 'fix-lua-sources (lambda _ (substitute* "source/latex/base/ltluatex.dtx" - ((" ") " ")) - #t)) + ((" ") " ")))) (replace 'build (lambda* (#:key inputs #:allow-other-keys) ;; Find required fonts @@ -2746,8 +2772,7 @@ formats.") "--fmtdir=web2c" (string-append "--cnffile=web2c/fmtutil.cnf")) ;; We don't actually want to install it. - (delete-file "web2c/fmtutil.cnf") - #t)) + (delete-file "web2c/fmtutil.cnf"))) (add-after 'install 'install-more (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -2768,8 +2793,7 @@ formats.") (for-each (cut install-file <> target) (find-files "build" ".*")) (for-each (cut install-file <> web2c) - (find-files "web2c" ".*")) - #t))))))) + (find-files "web2c" ".*"))))))))) (native-inputs `(("texlive-bin" ,texlive-bin) ("texlive-tex-ini-files" ,texlive-tex-ini-files) @@ -3657,35 +3681,21 @@ releases. The bundle consists of a Lua script to run the tasks and a @code{.tex} file which provides the testing environment.") (license license:lppl1.3c+)))) -;; The SVN directory contains little more than a dtx file that generates three -;; of the many lua files that should be installed as part of this package. -;; This is why we take the release from GitHub instead. -(define-public texlive-luatex-lualibs - (package - (name "texlive-luatex-lualibs") - (version "2.5") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/lualatex/lualibs/" - "releases/download/v" - version "/lualibs.zip")) - (file-name (string-append name "-" version ".zip")) - (sha256 - (base32 - "1xx9blvrmx9hyhrl345lpai9m6xxnw997261a1ahn1bm5r2j5fqy")))) - (build-system gnu-build-system) - (arguments - `(#:make-flags - (list (string-append "DESTDIR=" - (assoc-ref %outputs "out") - "/share/texmf-dist")) - #:phases - (modify-phases %standard-phases - (delete 'configure)))) - (native-inputs - (list texlive-bin unzip zip)) - (home-page "https://github.com/lualatex/lualibs") - (synopsis "Lua modules for general programming (in the (La)TeX world)") +(define-public texlive-lualibs + (package + (inherit + (simple-texlive-package + "texlive-lualibs" + (list "doc/luatex/lualibs/" + "source/luatex/lualibs/" + "tex/luatex/lualibs/") + (base32 "0gf60vj9y75a7dlrmpbyqgsa00s1717r6if3lm5ldm41i9fm8ywz") + ;; The source dtx file only unpacks three files. This is why we + ;; install all the files as they are, because there is no clear + ;; way to generate them all. + #:trivial? #true)) + (home-page "https://ctan.org/macros/luatex/generic/lualibs") + (synopsis "Additional Lua functions for LuaTeX macro programmers") (description "Lualibs is a collection of Lua modules useful for general programming. The bundle is based on Lua modules shipped with ConTeXt, and made available in @@ -3693,6 +3703,23 @@ this bundle for use independent of ConTeXt.") ;; GPL version 2 only (license license:gpl2))) +(define-deprecated-package texlive-luatex-lualibs texlive-lualibs) + +(define-public texlive-lua-alt-getopt + (package + (inherit + (simple-texlive-package + "texlive-lua-alt-getopt" + (list "doc/support/lua-alt-getopt/" "scripts/lua-alt-getopt/") + (base32 "0cizxzn33n3pn98xkqnxb8s6vdwkar3xrwhraqrs05pjfdn9d4wz") + #:trivial? #t)) + (home-page "https://ctan.org/support/lualibs/lua-alt-getopt") + (synopsis "Process application arguments the same way as getopt_long") + (description + "This package provides a Lua module for processing application arguments +in the same way as BSD/GNU @code{getopt_long(3)} functions do.") + (license license:expat))) + ;; TODO: We should be able to build this from the sources on Github with ;; texlive-l3build, but I haven't been able to get it to work. (define-public texlive-luaotfload @@ -3711,7 +3738,8 @@ this bundle for use independent of ConTeXt.") (package (inherit template) (propagated-inputs - (list texlive-luatex-lualibs)) + (list texlive-lua-alt-getopt ;for luaotfload-tool + texlive-lualibs)) (home-page "https://github.com/lualatex/luaotfload") (synopsis "OpenType font loader for LuaTeX") (description @@ -3725,71 +3753,6 @@ loading fonts by their proper names instead of file names.") (define-deprecated-package texlive-luatex-luaotfload texlive-luaotfload) -;; FIXME: This package is a temporary workaround to provide ‘lualatex.fmt’ for -;; the LuaTeX engine. It is needed because it was discovered too late in the -;; core-updates-frozen cycle that texlive-latex-base only provides it for -;; LuaHBTeX. See https://issues.guix.gnu.org/51252. -(define-public texlive-latex-luatex - (package - (name "texlive-latex-luatex") - (version (number->string %texlive-revision)) - (source #f) - (build-system gnu-build-system) - (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (ice-9 rdelim) - (ice-9 string-fun)) - #:phases - (modify-phases %standard-phases - (delete 'unpack) - (delete 'bootstrap) - (delete 'configure) - (delete 'check) - (replace 'build - (lambda* (#:key inputs #:allow-other-keys) - (mkdir "web2c") - (let ((fmtutil.cnf-in (open-file - (string-append - (assoc-ref inputs "texlive-kpathsea") - "/share/texmf-dist/web2c/fmtutil.cnf") - "r")) - (fmtutil.cnf-out (open-file "web2c/fmtutil.cnf" "w"))) - - ;; Copy ‘lualatex’ format lines to the new fmtutil.cnf, changing - ;; the engine from ‘luahbtex’ to ‘luatex’. - (do ((line "" (read-line fmtutil.cnf-in 'concat))) - ((eof-object? line)) - (when (string-prefix? "lualatex" line) - (display (string-replace-substring line "luahbtex" "luatex") - fmtutil.cnf-out))) - (close-port fmtutil.cnf-out) - (close-port fmtutil.cnf-in) - - (invoke "fmtutil" "--sys" "--all" "--fmtdir=web2c" - "--cnffile=web2c/fmtutil.cnf") - - ;; Don't risk this file interfering with anything else. - (delete-file "web2c/fmtutil.cnf")))) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let ((web2c (string-append %output "/share/texmf-dist/web2c"))) - (mkdir-p web2c) - (copy-recursively "web2c" web2c))))))) - (native-inputs - (list texlive-bin - texlive-babel - texlive-cm - texlive-fonts-latex - texlive-kpathsea - texlive-latex-base - texlive-lm - texlive-tex-ini-files)) - (home-page (package-home-page texlive-latex-base)) - (synopsis "LuaLaTeX format files for LuaTeX") - (description "This package is necessary to use LaTeX with the LuaTeX engine.") - (license (package-license texlive-latex-base)))) - (define-public texlive-latex-amsmath (package (name "texlive-latex-amsmath") |