gnu: texlive-bin: Do not install all linked scripts.
* gnu/packages/tex.scm (texlive-scripts): Include only core scripts along with their man pages and their dependencies. Also patch them for use in Guix. (texlive-bin): Simplify package. [inputs]: Remove "texlive-extra-src" and "texlive-scripts" inputs. Remove labels from other inputs. [propagated-inputs]: Add TEXLIVE-SCRIPTS. [arguments]: Use G-expressions. <#:configure-flags>: Add "--disable-linked-scripts". <#:phases>: Remove phases relative to scripts. * guix/profiles.scm (texlive-font-maps): Fetch executables from both TEXLIVE-SCRIPTS and TEXLIVE-BIN. * guix/import/texlive.scm (tlpdb-file): Grab file from TEXLIVE-SCRIPTS instead of TEXLIVE-BIN.
parent
ec97cf1569
commit
9fadbf759c
|
@ -108,15 +108,145 @@
|
|||
(define-deprecated/public old-name name
|
||||
(deprecated-package (symbol->string 'old-name) name)))
|
||||
|
||||
(define texlive-scripts
|
||||
(texlive-origin
|
||||
"texlive-scripts" (number->string %texlive-revision)
|
||||
(list "dvips/tetex/"
|
||||
"fonts/enc/dvips/tetex/"
|
||||
"fonts/map/dvips/tetex/"
|
||||
"scripts/texlive/")
|
||||
(base32
|
||||
"0y571gddch111r2chjfkyjsm4zk24xxiv2rcczb5apf6d0g211b9")))
|
||||
(define-public texlive-scripts
|
||||
(package
|
||||
(name "texlive-scripts")
|
||||
(version (number->string %texlive-revision))
|
||||
;; We cannot use `texlive-origin' because its locations start out in
|
||||
;; "texmf-dist" directory which is one level below "tlpkg" that we also
|
||||
;; need to pull here.
|
||||
(source (origin
|
||||
(method svn-multi-fetch)
|
||||
(uri (svn-multi-reference
|
||||
(url (string-append "svn://www.tug.org/texlive/tags/"
|
||||
%texlive-tag "/Master/"))
|
||||
(locations
|
||||
(list "texmf-dist/doc/man/man1/fmtutil-sys.1"
|
||||
"texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/fmtutil-user.1"
|
||||
"texmf-dist/doc/man/man1/fmtutil-user.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/fmtutil.1"
|
||||
"texmf-dist/doc/man/man1/fmtutil.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/install-tl.1"
|
||||
"texmf-dist/doc/man/man1/install-tl.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/mktexfmt.1"
|
||||
"texmf-dist/doc/man/man1/mktexfmt.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/mktexlsr.1"
|
||||
"texmf-dist/doc/man/man1/mktexlsr.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/mktexmf.1"
|
||||
"texmf-dist/doc/man/man1/mktexmf.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/mktexpk.1"
|
||||
"texmf-dist/doc/man/man1/mktexpk.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/mktextfm.1"
|
||||
"texmf-dist/doc/man/man1/mktextfm.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/texhash.1"
|
||||
"texmf-dist/doc/man/man1/texhash.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/tlmgr.1"
|
||||
"texmf-dist/doc/man/man1/tlmgr.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/updmap-sys.1"
|
||||
"texmf-dist/doc/man/man1/updmap-sys.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/updmap-user.1"
|
||||
"texmf-dist/doc/man/man1/updmap-user.man1.pdf"
|
||||
"texmf-dist/doc/man/man1/updmap.1"
|
||||
"texmf-dist/doc/man/man1/updmap.man1.pdf"
|
||||
"texmf-dist/doc/man/man5/fmtutil.cnf.5"
|
||||
"texmf-dist/doc/man/man5/fmtutil.cnf.man5.pdf"
|
||||
"texmf-dist/doc/man/man5/updmap.cfg.5"
|
||||
"texmf-dist/doc/man/man5/updmap.cfg.man5.pdf"
|
||||
"texmf-dist/dvips/tetex/"
|
||||
"texmf-dist/fonts/enc/dvips/tetex/"
|
||||
"texmf-dist/fonts/map/dvips/tetex/"
|
||||
"texmf-dist/scripts/texlive/fmtutil-sys.sh"
|
||||
"texmf-dist/scripts/texlive/fmtutil-user.sh"
|
||||
"texmf-dist/scripts/texlive/fmtutil.pl"
|
||||
"texmf-dist/scripts/texlive/mktexlsr.pl"
|
||||
"texmf-dist/scripts/texlive/mktexmf"
|
||||
"texmf-dist/scripts/texlive/mktexpk"
|
||||
"texmf-dist/scripts/texlive/mktextfm"
|
||||
"texmf-dist/scripts/texlive/tlmgr.pl"
|
||||
"texmf-dist/scripts/texlive/updmap-sys.sh"
|
||||
"texmf-dist/scripts/texlive/updmap-user.sh"
|
||||
"texmf-dist/scripts/texlive/updmap.pl"
|
||||
"texmf-dist/web2c/fmtutil-hdr.cnf"
|
||||
"texmf-dist/web2c/updmap-hdr.cfg"
|
||||
"tlpkg/gpg/"
|
||||
"tlpkg/installer/config.guess"
|
||||
"tlpkg/installer/curl/curl-ca-bundle.crt"
|
||||
"tlpkg/TeXLive/"
|
||||
"tlpkg/texlive.tlpdb"))
|
||||
(revision %texlive-revision)))
|
||||
(sha256
|
||||
"1igdbnp37c5ajdp17bmcdgkm5s2fyph5v9gk8svhwaamwazk7xg5")))
|
||||
(outputs '("out" "doc"))
|
||||
(build-system copy-build-system)
|
||||
(arguments
|
||||
(list
|
||||
#:imported-modules `(,@%copy-build-system-modules
|
||||
(guix build texlive-build-system)
|
||||
(guix build union))
|
||||
#:modules '((guix build copy-build-system)
|
||||
((guix build texlive-build-system) #:prefix tex:)
|
||||
(guix build utils))
|
||||
#:install-plan
|
||||
#~'(("texmf-dist/dvips/" "share/texmf-dist/dvips")
|
||||
("texmf-dist/fonts/" "share/texmf-dist/fonts")
|
||||
("texmf-dist/scripts/" "share/texmf-dist/scripts")
|
||||
("texmf-dist/web2c/" "share/texmf-dist/web2c")
|
||||
("tlpkg/" "share/tlpkg"))
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-scripts
|
||||
(lambda _
|
||||
;; First patch shell scripts with ".sh" extension.
|
||||
(with-directory-excursion "texmf-dist"
|
||||
((assoc-ref tex:%standard-phases 'patch-shell-scripts)))
|
||||
;; Then patch scripts without such extension.
|
||||
(let ((dirs (map (compose dirname which)
|
||||
(list "awk" "cat" "grep" "sed"))))
|
||||
(substitute*
|
||||
(find-files "texmf-dist/scripts/" "^mktex(mf|pk|tfm)$")
|
||||
(("^version=" m)
|
||||
(format #false "PATH=\"~{~a:~}$PATH\"; export PATH~%~a"
|
||||
dirs m))))
|
||||
;; Make sure that fmtutil can find its Perl modules.
|
||||
(substitute* "texmf-dist/scripts/texlive/fmtutil.pl"
|
||||
(("\\$TEXMFROOT/")
|
||||
(string-append #$output "/share/")))
|
||||
;; Likewise for updmap.pl.
|
||||
(substitute* "texmf-dist/scripts/texlive/updmap.pl"
|
||||
(("\\$TEXMFROOT/tlpkg")
|
||||
(string-append #$output "/share/tlpkg")))
|
||||
;; Likewise for the tlmgr.
|
||||
(substitute* "texmf-dist/scripts/texlive/tlmgr.pl"
|
||||
((".*\\$::installerdir = \\$Master.*" all)
|
||||
(format #f " $Master = ~s;~%~a"
|
||||
(string-append #$output "/share")
|
||||
all)))))
|
||||
(add-after 'unpack 'fix-fmtutil
|
||||
;; The line below generates an error when running "fmtutil".
|
||||
(lambda _
|
||||
(substitute* "texmf-dist/scripts/texlive/fmtutil.pl"
|
||||
(("require TeXLive::TLWinGoo if .*") ""))))
|
||||
(add-after 'install 'install-doc
|
||||
(lambda _
|
||||
(let ((doc (string-append #$output:doc "/share/texmf-dist/doc")))
|
||||
(mkdir-p doc)
|
||||
(copy-recursively "texmf-dist/doc/" doc))))
|
||||
(add-after 'install-doc 'link-scripts
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(with-directory-excursion "texmf-dist"
|
||||
(apply (assoc-ref tex:%standard-phases 'link-scripts)
|
||||
(list #:outputs outputs
|
||||
#:link-scripts
|
||||
(find-files "scripts")))))))))
|
||||
(inputs (list perl))
|
||||
(home-page "https://www.tug.org/texlive/")
|
||||
(synopsis "TeX Live infrastructure programs")
|
||||
(description
|
||||
"This package provides core TeX Live scripts such as @code{updmap},
|
||||
@code{fmtutil}, and @code{tlmgr}. It is is automatically installed alongside
|
||||
@code{texlive-bin}.")
|
||||
(license (license:fsf-free "https://www.tug.org/texlive/copying.html"))))
|
||||
|
||||
(define-public texlive-hyphen-complete
|
||||
(package
|
||||
|
@ -359,337 +489,197 @@ and should be preferred to it whenever a package would otherwise depend on
|
|||
(ice-9 ftw)))
|
||||
(snippet
|
||||
;; 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))))))))))))
|
||||
#~(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)
|
||||
(native-inputs (list pkg-config))
|
||||
(inputs
|
||||
`(("texlive-extra-src"
|
||||
,(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "ftp://tug.org/historic/systems/texlive/"
|
||||
(string-take version 4)
|
||||
"/texlive-" version "-extra.tar.xz"))
|
||||
(sha256
|
||||
(base32
|
||||
"1hiqvdg679yadygf23f37b3dz5ick258k1qcam9nhkhprkx7d9l0"))))
|
||||
("config" ,config)
|
||||
("texlive-scripts" ,texlive-scripts)
|
||||
("cairo" ,cairo)
|
||||
("fontconfig" ,fontconfig)
|
||||
("fontforge" ,fontforge)
|
||||
("freetype" ,freetype)
|
||||
("gd" ,gd)
|
||||
("gmp" ,gmp)
|
||||
("ghostscript" ,ghostscript)
|
||||
("graphite2" ,graphite2)
|
||||
("harfbuzz" ,harfbuzz)
|
||||
("icu4c" ,icu4c)
|
||||
("libpaper" ,libpaper)
|
||||
("libpng" ,libpng)
|
||||
("libxaw" ,libxaw)
|
||||
("libxt" ,libxt)
|
||||
("mpfr" ,mpfr)
|
||||
("perl" ,perl)
|
||||
("pixman" ,pixman)
|
||||
("potrace" ,potrace)
|
||||
("python" ,python)
|
||||
("ruby" ,ruby-2.7)
|
||||
("tcsh" ,tcsh)
|
||||
("teckit" ,teckit)
|
||||
("zlib" ,zlib)
|
||||
("zziplib" ,zziplib)))
|
||||
(native-inputs
|
||||
(list pkg-config))
|
||||
(list config
|
||||
cairo
|
||||
fontconfig
|
||||
fontforge
|
||||
freetype
|
||||
gd
|
||||
gmp
|
||||
ghostscript
|
||||
graphite2
|
||||
harfbuzz
|
||||
icu4c
|
||||
libpaper
|
||||
libpng
|
||||
libxaw
|
||||
libxt
|
||||
mpfr
|
||||
perl
|
||||
pixman
|
||||
potrace
|
||||
python
|
||||
ruby-2.7
|
||||
tcsh
|
||||
teckit
|
||||
zlib
|
||||
zziplib))
|
||||
(propagated-inputs (list texlive-scripts))
|
||||
(arguments
|
||||
`(#:modules ((guix build gnu-build-system)
|
||||
(list
|
||||
#:modules '((guix build gnu-build-system)
|
||||
(guix build utils)
|
||||
(ice-9 ftw)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
#:out-of-source? #t
|
||||
#:parallel-tests? #f ;bibtex8.test fails otherwise
|
||||
#:configure-flags
|
||||
'("--disable-static"
|
||||
"--disable-native-texlive-build"
|
||||
"--enable-shared"
|
||||
"--with-banner-add=/GNU Guix"
|
||||
"--with-system-cairo"
|
||||
"--with-system-freetype2"
|
||||
"--with-system-gd"
|
||||
"--with-system-gmp"
|
||||
"--with-system-graphite2"
|
||||
"--with-system-harfbuzz"
|
||||
"--with-system-icu"
|
||||
"--with-system-libgs"
|
||||
"--with-system-libpaper"
|
||||
"--with-system-libpng"
|
||||
"--with-system-mpfr"
|
||||
"--with-system-pixman"
|
||||
"--with-system-potrace"
|
||||
"--with-system-teckit"
|
||||
"--with-system-zlib"
|
||||
"--with-system-zziplib"
|
||||
;; LuaJIT is not ported to some architectures yet.
|
||||
,@(if (or (target-ppc64le?)
|
||||
(target-riscv64?))
|
||||
'("--disable-luajittex"
|
||||
"--disable-luajithbtex"
|
||||
"--disable-mfluajit")
|
||||
'()))
|
||||
|
||||
#:out-of-source? #t
|
||||
#:parallel-tests? #f ;bibtex8.test fails otherwise
|
||||
#:configure-flags
|
||||
#~(list "--disable-static"
|
||||
;; "Linked scripts" are taken care of in their respective
|
||||
;; packages.
|
||||
"--disable-linked-scripts"
|
||||
"--disable-native-texlive-build"
|
||||
"--enable-shared"
|
||||
"--with-banner-add=/GNU Guix"
|
||||
"--with-system-cairo"
|
||||
"--with-system-freetype2"
|
||||
"--with-system-gd"
|
||||
"--with-system-gmp"
|
||||
"--with-system-graphite2"
|
||||
"--with-system-harfbuzz"
|
||||
"--with-system-icu"
|
||||
"--with-system-libgs"
|
||||
"--with-system-libpaper"
|
||||
"--with-system-libpng"
|
||||
"--with-system-mpfr"
|
||||
"--with-system-pixman"
|
||||
"--with-system-potrace"
|
||||
"--with-system-teckit"
|
||||
"--with-system-zlib"
|
||||
"--with-system-zziplib"
|
||||
;; LuaJIT is not ported to some architectures yet.
|
||||
#$@(if (or (target-ppc64le?)
|
||||
(target-riscv64?))
|
||||
'("--disable-luajittex"
|
||||
"--disable-luajithbtex"
|
||||
"--disable-mfluajit")
|
||||
'()))
|
||||
;; Disable tests on some architectures to cope with a failure of
|
||||
;; luajiterr.test.
|
||||
;;
|
||||
;; XXX FIXME fix luajit properly on these architectures.
|
||||
#:tests? ,(let ((s (or (%current-target-system)
|
||||
(%current-system))))
|
||||
(not (or (string-prefix? "aarch64" s)
|
||||
(string-prefix? "mips64" s)
|
||||
(string-prefix? "powerpc64le" s))))
|
||||
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-psutils-test
|
||||
(lambda _
|
||||
;; This test fails due to a rounding difference with libpaper 1.2:
|
||||
;; https://github.com/rrthomas/libpaper/issues/23
|
||||
;; Adjust the expected outcome to account for the minute difference.
|
||||
(substitute* "texk/psutils/tests/playres.ps"
|
||||
(("844\\.647799")
|
||||
"844.647797"))))
|
||||
(add-after 'unpack 'configure-ghostscript-executable
|
||||
;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
|
||||
;; and the "gs" ghostscript executable on Unix. It detects Unix by
|
||||
;; checking for the existence of the /usr/bin directory. Since
|
||||
;; Guix System does not have /usr/bin, it is also detected as Windows.
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
|
||||
(("gswin32c") "gs"))
|
||||
(substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
|
||||
(("\"gs\"")
|
||||
(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")))))
|
||||
(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"))))
|
||||
,@(if (or (target-ppc32?)
|
||||
(target-riscv64?))
|
||||
;; Some mendex tests fail on some architectures.
|
||||
`((add-after 'unpack 'skip-mendex-tests
|
||||
(lambda _
|
||||
(substitute* '("texk/mendexk/tests/mendex.test"
|
||||
"texk/upmendex/tests/upmendex.test")
|
||||
(("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1")
|
||||
"srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77")))))
|
||||
'())
|
||||
(add-after 'unpack 'unpack-texlive-extra
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(mkdir "texlive-extra")
|
||||
(with-directory-excursion "texlive-extra"
|
||||
(apply (assoc-ref %standard-phases 'unpack)
|
||||
(list #:source (assoc-ref inputs "texlive-extra-src"))))))
|
||||
(add-after 'unpack-texlive-extra 'copy-texlive-scripts
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(mkdir "texlive-scripts")
|
||||
(with-directory-excursion "texlive-scripts"
|
||||
(let ((scripts (string-append
|
||||
(assoc-ref inputs "texlive-scripts")
|
||||
"/scripts/texlive")))
|
||||
(copy-recursively scripts "."))
|
||||
;; Configure the version string for some scripts.
|
||||
;; Normally this would be done by Subversion.
|
||||
;; See <https://issues.guix.gnu.org/43442#15>.
|
||||
(for-each (lambda (file)
|
||||
(substitute* file
|
||||
(("\\$Id\\$")
|
||||
(format #f "$Id: ~a ~a ~a nobody $"
|
||||
file
|
||||
,%texlive-revision
|
||||
,%texlive-date))
|
||||
(("\\$Revision\\$")
|
||||
(format #f "$Revision: ~a $"
|
||||
,%texlive-revision))
|
||||
(("\\$Date\\$")
|
||||
(format #f "$Date: ~a $"
|
||||
,%texlive-date))))
|
||||
'("fmtutil.pl"
|
||||
"mktexlsr"
|
||||
"mktexlsr.pl"
|
||||
"mktexmf"
|
||||
"mktexpk"
|
||||
"mktextfm"
|
||||
"tlmgr.pl"
|
||||
"tlmgrgui.pl"
|
||||
"updmap.pl")))))
|
||||
(add-after 'copy-texlive-scripts 'patch-scripts
|
||||
(lambda _
|
||||
(let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
|
||||
(find-files "texk/texlive/linked_scripts"
|
||||
"\\.sh$")
|
||||
(find-files "texlive-scripts" "\\.sh$")))
|
||||
(commands '("awk" "basename" "cat" "grep" "mkdir" "rm"
|
||||
"sed" "sort" "uname"))
|
||||
(command-regexp (format #f "\\b(~a)\\b"
|
||||
(string-join commands "|")))
|
||||
(iso-8859-1-encoded-scripts
|
||||
'("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh"
|
||||
"texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh")))
|
||||
|
||||
(define (substitute-commands scripts)
|
||||
(substitute* scripts
|
||||
((command-regexp dummy command)
|
||||
(which command))))
|
||||
|
||||
(substitute-commands (lset-difference string= scripts
|
||||
iso-8859-1-encoded-scripts))
|
||||
|
||||
(with-fluids ((%default-port-encoding "ISO-8859-1"))
|
||||
(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") ""))))
|
||||
|
||||
,@(if (target-arm32?)
|
||||
`((add-after 'unpack 'skip-faulty-test
|
||||
(lambda _
|
||||
;; Skip this faulty test on armhf-linux:
|
||||
;; https://issues.guix.gnu.org/54055
|
||||
(substitute* '("texk/mendexk/tests/mendex.test"
|
||||
"texk/upmendex/tests/upmendex.test")
|
||||
(("^TEXMFCNF=" all)
|
||||
(string-append "exit 77 # skip\n" all))))))
|
||||
'())
|
||||
|
||||
(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
|
||||
;; environment variable defined via a search path specification
|
||||
;; further below. The configuration file is patched after the test
|
||||
;; suite has run, as it relies on the default configuration to find
|
||||
;; its paths (and the GUIX_TEXMF variable isn't set yet).
|
||||
(lambda _
|
||||
;; The current directory is build/ because of the out-of-tree
|
||||
;; build.
|
||||
(let* ((source (first (scandir ".." (cut string-suffix?
|
||||
"source" <>))))
|
||||
(texmf.cnf (string-append "../" source
|
||||
"/texk/kpathsea/texmf.cnf")))
|
||||
(substitute* texmf.cnf
|
||||
(("^TEXMFROOT = .*")
|
||||
"TEXMFROOT = {$GUIX_TEXMF}/..\n")
|
||||
(("^TEXMF = .*")
|
||||
"TEXMF = {$GUIX_TEXMF}\n")
|
||||
(("^%TEXMFCNF = .*")
|
||||
"TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
|
||||
;; 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")))))
|
||||
(add-after 'install 'post-install
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(patch-source-shebangs (assoc-ref %standard-phases
|
||||
'patch-source-shebangs))
|
||||
(share (string-append out "/share"))
|
||||
(scripts (string-append share
|
||||
"/texmf-dist/scripts/texlive"))
|
||||
(source (string-append
|
||||
"../" (first (scandir ".." (cut string-suffix?
|
||||
"source" <>)))))
|
||||
(tl-extra-root (string-append source "/texlive-extra"))
|
||||
(tl-extra-dir (first
|
||||
(scandir tl-extra-root
|
||||
(negate
|
||||
(cut member <> '("." ".."))))))
|
||||
(tlpkg-src (string-append tl-extra-root "/" tl-extra-dir
|
||||
"/tlpkg"))
|
||||
(config.guess (search-input-file inputs
|
||||
"/bin/config.guess")))
|
||||
|
||||
;; Create symbolic links for the latex variants. We link
|
||||
;; lualatex to luahbtex; see issue #51252 for details.
|
||||
(with-directory-excursion (string-append out "/bin/")
|
||||
(for-each symlink
|
||||
'("pdftex" "pdftex" "xetex" "luahbtex")
|
||||
'("latex" "pdflatex" "xelatex" "lualatex")))
|
||||
|
||||
;; Install tlpkg.
|
||||
(copy-recursively tlpkg-src (string-append share "/tlpkg"))
|
||||
|
||||
;; Install texlive-scripts and associated files.
|
||||
(copy-recursively (string-append source "/texlive-scripts")
|
||||
scripts)
|
||||
(for-each
|
||||
(lambda (dir)
|
||||
(mkdir-p dir)
|
||||
(copy-recursively (string-append
|
||||
(assoc-ref inputs "texlive-scripts")
|
||||
"/" dir)
|
||||
(string-append share "/texmf-dist/" dir)))
|
||||
'("dvips" "fonts"))
|
||||
|
||||
;; 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/")
|
||||
(string-append share "/")))
|
||||
|
||||
;; Likewise for updmap.pl.
|
||||
(substitute* (string-append scripts "/updmap.pl")
|
||||
(("\\$TEXMFROOT/tlpkg")
|
||||
(string-append share "/tlpkg")))
|
||||
|
||||
;; Likewise for the tlmgr.
|
||||
(substitute* (string-append scripts "/tlmgr.pl")
|
||||
((".*\\$::installerdir = \\$Master.*" all)
|
||||
(format #f " $Master = ~s;~%~a" share all)))
|
||||
|
||||
;; Install the config.guess script, required by tlmgr.
|
||||
(with-directory-excursion share
|
||||
(mkdir-p "tlpkg/installer/")
|
||||
(symlink config.guess "tlpkg/installer/config.guess"))
|
||||
|
||||
;; texlua shebangs are not patched by the patch-source-shebangs
|
||||
;; phase because the texlua executable does not exist at that
|
||||
;; time.
|
||||
(setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
|
||||
(with-directory-excursion out
|
||||
(patch-source-shebangs))
|
||||
|
||||
;; The line below generates an error when running "fmtutil".
|
||||
(substitute*
|
||||
(string-append share "/texmf-dist/scripts/texlive/fmtutil.pl")
|
||||
(("require TeXLive::TLWinGoo if .*") ""))))))))
|
||||
#:tests? (let ((s (or (%current-target-system)
|
||||
(%current-system))))
|
||||
(not (or (string-prefix? "aarch64" s)
|
||||
(string-prefix? "mips64" s)
|
||||
(string-prefix? "powerpc64le" s))))
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-psutils-test
|
||||
(lambda _
|
||||
;; This test fails due to a rounding difference with libpaper
|
||||
;; 1.2: <https://github.com/rrthomas/libpaper/issues/23>.
|
||||
;;
|
||||
;; Adjust the expected outcome to account for the minute
|
||||
;; difference.
|
||||
(substitute* "texk/psutils/tests/playres.ps"
|
||||
(("844\\.647799") "844.647797"))))
|
||||
(add-after 'unpack 'configure-ghostscript-executable
|
||||
;; ps2eps.pl uses the "gswin32c" ghostscript executable on
|
||||
;; Windows, and the "gs" ghostscript executable on Unix. It
|
||||
;; detects Unix by checking for the existence of the /usr/bin
|
||||
;; directory. Since Guix System does not have /usr/bin, it is
|
||||
;; also detected as Windows.
|
||||
(lambda _
|
||||
(substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
|
||||
(("gswin32c") "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")))))
|
||||
(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"))))
|
||||
#$@(if (or (target-ppc32?)
|
||||
(target-riscv64?))
|
||||
;; Some mendex tests fail on some architectures.
|
||||
`((add-after 'unpack 'skip-mendex-tests
|
||||
(lambda _
|
||||
(substitute* '("texk/mendexk/tests/mendex.test"
|
||||
"texk/upmendex/tests/upmendex.test")
|
||||
(("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1")
|
||||
"srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77")))))
|
||||
'())
|
||||
;; 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 'unpack 'patch-directory-traversal
|
||||
(lambda _
|
||||
(substitute* "texk/kpathsea/config.h"
|
||||
(("#define ST_NLINK_TRICK") ""))))
|
||||
#$@(if (target-arm32?)
|
||||
`((add-after 'unpack 'skip-faulty-test
|
||||
(lambda _
|
||||
;; Skip this faulty test on armhf-linux:
|
||||
;; https://issues.guix.gnu.org/54055
|
||||
(substitute* '("texk/mendexk/tests/mendex.test"
|
||||
"texk/upmendex/tests/upmendex.test")
|
||||
(("^TEXMFCNF=" all)
|
||||
(string-append "exit 77 # skip\n" all))))))
|
||||
'())
|
||||
(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
|
||||
;; environment variable defined via a search path specification
|
||||
;; further below. The configuration file is patched after the test
|
||||
;; suite has run, as it relies on the default configuration to find
|
||||
;; its paths (and the GUIX_TEXMF variable isn't set yet).
|
||||
(lambda _
|
||||
;; The current directory is build/ because of the out-of-tree
|
||||
;; build.
|
||||
(let* ((source (first (scandir ".." (cut string-suffix?
|
||||
"source" <>))))
|
||||
(texmf.cnf (string-append "../" source
|
||||
"/texk/kpathsea/texmf.cnf")))
|
||||
(substitute* texmf.cnf
|
||||
(("^TEXMFROOT = .*")
|
||||
"TEXMFROOT = {$GUIX_TEXMF}/..\n")
|
||||
(("^TEXMF = .*")
|
||||
"TEXMF = {$GUIX_TEXMF}\n")
|
||||
(("^%TEXMFCNF = .*")
|
||||
"TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
|
||||
;; 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")))))
|
||||
(add-after 'install 'post-install
|
||||
(lambda _
|
||||
;; Create symbolic links for the latex variants. We link
|
||||
;; lualatex to luahbtex; see issue #51252 for details.
|
||||
(with-directory-excursion (string-append #$output "/bin/")
|
||||
(for-each symlink
|
||||
'("pdftex" "pdftex" "xetex" "luahbtex")
|
||||
'("latex" "pdflatex" "xelatex" "lualatex")))
|
||||
;; texlua shebangs are not patched by the patch-source-shebangs
|
||||
;; phase because the texlua executable does not exist at that
|
||||
;; time.
|
||||
(setenv "PATH"
|
||||
(string-append (getenv "PATH") ":" #$output "/bin"))
|
||||
(with-directory-excursion #$output
|
||||
(assoc-ref %standard-phases 'patch-source-shebangs)))))))
|
||||
(native-search-paths
|
||||
(list (search-path-specification
|
||||
(variable "GUIX_TEXMF")
|
||||
|
|
|
@ -153,20 +153,20 @@ When TEXLIVE-ONLY is true, only TeX Live packages are returned."
|
|||
depends)))
|
||||
|
||||
(define (tlpdb-file)
|
||||
(define texlive-bin
|
||||
(define texlive-scripts
|
||||
;; Resolve this variable lazily so that (gnu packages ...) does not end up
|
||||
;; in the closure of this module.
|
||||
(module-ref (resolve-interface '(gnu packages tex))
|
||||
'texlive-bin))
|
||||
'texlive-scripts))
|
||||
|
||||
(with-store store
|
||||
(run-with-store store
|
||||
(mlet* %store-monad
|
||||
((drv (lower-object texlive-bin))
|
||||
((drv (lower-object texlive-scripts))
|
||||
(built (built-derivations (list drv))))
|
||||
(match (derivation->output-paths drv)
|
||||
(((names . items) ...)
|
||||
(return (string-append (first items)
|
||||
(return (string-append (second items) ;"out"
|
||||
"/share/tlpkg/texlive.tlpdb"))))))))
|
||||
|
||||
(define tlpdb
|
||||
|
|
|
@ -1789,6 +1789,8 @@ MANIFEST."
|
|||
'()))))
|
||||
(define texlive-inputs
|
||||
(append-map entry->texlive-input (manifest-entries manifest)))
|
||||
(define texlive-scripts
|
||||
(module-ref (resolve-interface '(gnu packages tex)) 'texlive-scripts))
|
||||
(define texlive-bin
|
||||
(module-ref (resolve-interface '(gnu packages tex)) 'texlive-bin))
|
||||
(define coreutils
|
||||
|
@ -1823,8 +1825,10 @@ MANIFEST."
|
|||
":"
|
||||
#$(file-append grep "/bin")
|
||||
":"
|
||||
#$(file-append sed "/bin")))
|
||||
(setenv "PERL5LIB" #$(file-append texlive-bin "/share/tlpkg"))
|
||||
#$(file-append sed "/bin")
|
||||
":"
|
||||
#$(file-append texlive-bin "/bin")))
|
||||
(setenv "PERL5LIB" #$(file-append texlive-scripts "/share/tlpkg"))
|
||||
(setenv "GUIX_TEXMF" "/tmp/texlive/share/texmf-dist")
|
||||
|
||||
;; Remove invalid maps from config file.
|
||||
|
@ -1834,7 +1838,7 @@ MANIFEST."
|
|||
(install-file #$(file-append updmap.cfg "/web2c/updmap.cfg") web2c)
|
||||
(make-file-writable updmap.cfg)
|
||||
(let* ((port (open-pipe* OPEN_WRITE
|
||||
#$(file-append texlive-bin "/bin/updmap-sys")
|
||||
#$(file-append texlive-scripts "/bin/updmap-sys")
|
||||
"--syncwithtrees"
|
||||
"--nohash"
|
||||
"--force"
|
||||
|
@ -1844,7 +1848,7 @@ MANIFEST."
|
|||
(error "failed to filter updmap.cfg")))
|
||||
|
||||
;; Generate font maps.
|
||||
(invoke #$(file-append texlive-bin "/bin/updmap-sys")
|
||||
(invoke #$(file-append texlive-scripts "/bin/updmap-sys")
|
||||
(string-append "--cnffile=" updmap.cfg)
|
||||
(string-append "--dvipdfmxoutputdir="
|
||||
maproot "dvipdfmx/updmap")
|
||||
|
@ -1862,7 +1866,7 @@ MANIFEST."
|
|||
;; to /tmp and run mktexlsr only once.
|
||||
(let ((a (string-append #$output "/share/texmf-dist"))
|
||||
(b "/tmp/texlive/share/texmf-dist")
|
||||
(mktexlsr #$(file-append texlive-bin "/bin/mktexlsr")))
|
||||
(mktexlsr #$(file-append texlive-scripts "/bin/mktexlsr")))
|
||||
(copy-recursively a b)
|
||||
(invoke mktexlsr b)
|
||||
(install-file (string-append b "/ls-R") a))))))
|
||||
|
|
Reference in New Issue