~ruther/guix-local

f6d9057ff274a67fd2bcf872a83993a92b7cf8e2 — Nicolas Goaziou 1 year, 5 months ago 4e04035
gnu: texlive-libkpathsea: Enforce ls-R usage by default.

Fixes: https://issues.guix.gnu.org/75893

* gnu/packages/tex.scm (texlive-libkpathsea): Set TEXMF so that ls-R database
is mandatory and must contain the file looked after in the TeX Live tree.
* guix/build/texlive-build-system.scm (configure-texmf): Relax requirements
for "ls-R" database.  Renamed from `set-texmfvar'.
(%standard-phases): Apply phase renaming.
* gnu/packages/python-xyz.scm (python-nbconvert)[native-inputs]: Add TeX Live
packages required for tests to pass since propagated packages are no longer
accessible during build.
* gnu/packages/books.scm (book-sparc)[inputs]: Move TeX Live related inputs
to...
[native-inputs]: ... here, and wrap them within texlive-local-tree for the
same reason as above.

Change-Id: I3430bc84ce35f4aa8f0537b512f472ef88f8e5e9
M gnu/packages/books.scm => gnu/packages/books.scm +62 -63
@@ 63,70 63,69 @@
           lilypond
           perl
           python-pygments
           (texlive-local-tree
            (list texlive-acronym
                  texlive-adjustbox
                  texlive-biblatex
                  texlive-bibtex
                  texlive-bibtexperllibs
                  texlive-bigfoot
                  texlive-chngcntr
                  texlive-circuitikz
                  texlive-collection-langcyrillic
                  texlive-csquotes
                  texlive-fancyvrb
                  texlive-fontspec
                  texlive-glossaries
                  texlive-glossaries-english
                  texlive-glossaries-extra
                  texlive-koma-script
                  texlive-lilyglyphs
                  texlive-minted
                  texlive-multirow
                  texlive-pgf
                  texlive-pgfplots
                  texlive-subfiles
                  texlive-svg
                  texlive-t1utils
                  texlive-textpos
                  texlive-transparent
                  texlive-trimspaces
                  texlive-upquote
                  texlive-xetex))
           which))
    (inputs
     (list font-liberation
           git
           texlive-acronym
           texlive-adjustbox
           texlive-biblatex
           texlive-bibtex
           texlive-bibtexperllibs
           texlive-bigfoot
           texlive-chngcntr
           texlive-circuitikz
           texlive-collection-langcyrillic
           texlive-csquotes
           texlive-fancyvrb
           texlive-fontspec
           texlive-glossaries
           texlive-glossaries-english
           texlive-glossaries-extra
           texlive-koma-script
           texlive-lilyglyphs
           texlive-minted
           texlive-multirow
           texlive-pgf
           texlive-pgfplots
           texlive-subfiles
           texlive-svg
           texlive-t1utils
           texlive-textpos
           texlive-transparent
           texlive-trimspaces
           texlive-upquote
           texlive-xetex))
   (arguments
    (list #:tests? #f                   ; no tests
          #:modules (append %default-gnu-imported-modules
                            '((ice-9 regex)
                              (srfi srfi-1)))
          #:phases #~(modify-phases %standard-phases
                       (add-before 'build 'configure-environment
                         (lambda* (#:key inputs make-flags parallel-build?
                                   #:allow-other-keys)
                           (let* ((src (assoc-ref inputs "source"))
                                  (rx  (make-regexp "/gnu/store/(.*)-book-sparc-.*"))
                                  (src-hash (match:substring (regexp-exec rx src) 1))
                                  (random-seed
                                   (fold (lambda (ch prev)
                                           (+ (char->integer ch)
                                              prev))
                                         0
                                         (string->list src-hash))))
                             (setenv "RANDOMSEED" (number->string random-seed))
                             (setenv "REPRODUCIBILITY" "yes"))))
                       (replace 'install
                         (lambda _
                           (let ((doc-dir (string-append #$output
                                                         "/share/doc/sparc/")))
                             (mkdir-p doc-dir)
                             (copy-file "sparc.ru.pdf"
                                        (string-append doc-dir
                                                       "sparc.ru.pdf"))
                             (copy-file "sparc.en.pdf"
                                        (string-append doc-dir
                                                       "sparc.en.pdf"))))))))
    (inputs (list font-liberation git))
    (arguments
     (list #:tests? #f                  ; no tests
           #:modules (append %default-gnu-imported-modules
                             '((ice-9 regex)
                               (srfi srfi-1)))
           #:phases #~(modify-phases %standard-phases
                        (add-before 'build 'configure-environment
                          (lambda* (#:key inputs make-flags parallel-build?
                                    #:allow-other-keys)
                            (let* ((src (assoc-ref inputs "source"))
                                   (rx  (make-regexp "/gnu/store/(.*)-book-sparc-.*"))
                                   (src-hash (match:substring (regexp-exec rx src) 1))
                                   (random-seed
                                    (fold (lambda (ch prev)
                                            (+ (char->integer ch)
                                               prev))
                                          0
                                          (string->list src-hash))))
                              (setenv "RANDOMSEED" (number->string random-seed))
                              (setenv "REPRODUCIBILITY" "yes"))))
                        (replace 'install
                          (lambda _
                            (let ((doc-dir (string-append #$output
                                                          "/share/doc/sparc/")))
                              (mkdir-p doc-dir)
                              (copy-file "sparc.ru.pdf"
                                         (string-append doc-dir
                                                        "sparc.ru.pdf"))
                              (copy-file "sparc.en.pdf"
                                         (string-append doc-dir
                                                        "sparc.en.pdf"))))))))
    (home-page "https://github.com/artyom-poptsov/SPARC")
    (synopsis "Book on combining art and technology")
    (description

M gnu/packages/python-xyz.scm => gnu/packages/python-xyz.scm +22 -1
@@ 19352,7 19352,28 @@ time.")
           ;; Adding ipywidgets would create a cycle.
           ;;python-ipywidgets
           python-pytest
           python-pytest-xdist))
           python-pytest-xdist
           (texlive-local-tree
            (list texlive-adjustbox
                  texlive-booktabs
                  texlive-caption
                  texlive-enumitem
                  texlive-eurosym
                  texlive-fancyvrb
                  texlive-float
                  texlive-fontspec
                  texlive-grffile
                  texlive-jknapltx
                  texlive-parskip
                  texlive-pdfcol
                  texlive-rsfs
                  texlive-soul
                  texlive-tcolorbox
                  texlive-titling
                  texlive-ulem
                  texlive-unicode-math
                  texlive-upquote
                  texlive-xetex))))
    (propagated-inputs
     (list python-beautifulsoup4
           python-bleach

M gnu/packages/tex.scm => gnu/packages/tex.scm +2 -5
@@ 326,12 326,9 @@ should not be installed in a profile.")
                (("^TEXMFROOT = .*") "TEXMFROOT = {$GUIX_TEXMF}/..\n")
                (("^TEXMFDIST = .*") "TEXMFDIST = {$GUIX_TEXMF}\n")
                ;; "ls-R" files are to be expected only in the TEXMFDIST
                ;; directories.  However, those are not always present, e.g.,
                ;; when building a package with `texlive-build-system' or when
                ;; generating a profile.  Since both situations need to be
                ;; handled, drop the "!!" prefixes.
                ;; directories.
                (("^TEXMF = .*")
                 "TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,$TEXMFSYSCONFIG,$TEXMFSYSVAR,$TEXMFDIST}\n")
                 "TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,$TEXMFSYSCONFIG,$TEXMFSYSVAR,!!$TEXMFDIST}\n")
                (("^TEXMFDBS = .*") "TEXMFDBS = {$TEXMFDIST}\n")
                ;; Ignore system-wide cache, which is not writable.  Use local
                ;; one instead, i.e. "$HOME/.texliveYYYY/texmf-var/".

M guix/build/texlive-build-system.scm => guix/build/texlive-build-system.scm +12 -7
@@ 2,7 2,7 @@
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
;;; Copyright © 2023, 2024 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2023-2025 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 91,11 91,16 @@ runfile to replace.  If a file has no matching runfile, it is ignored."
        ((command-regexp _ command)
         (which command))))))

(define* (set-texmfvar #:rest _)
  "Set TEXMFVAR to a writable location."
  ;; Default value is relative to $HOME, which is not set during build.  This
  ;; location is used for generating font metrics or building documentation.
  (setenv "TEXMFVAR" (string-append (getcwd) "/texmf-var")))
(define* (configure-texmf #:rest _)
  "Ensure TEXMFVAR is writable and \"ls-R\" database is not required."
  ;; Default TEXMFVAR value is relative to $HOME, which is not set during
  ;; build.  This location is used for generating font metrics or building
  ;; documentation.
  (setenv "TEXMFVAR" (string-append (getcwd) "/texmf-var"))
  ;; By default, a "ls-R" file must exist in TEXMFDIST.  However, it isn't
  ;; generated in the TeX Live tree used to build a package.  Consequently,
  ;; relax this requirement.
  (setenv "TEXMF" "{$TEXMFSYSVAR,$TEXMFDIST}"))

(define* (delete-drv-files #:rest _)
  "Delete pre-generated \".drv\" files in order to prevent build failures."


@@ 297,7 302,7 @@ runfile to replace.  If a file has no matching runfile, it is ignored."
    (delete 'bootstrap)
    (delete 'configure)
    (add-after 'unpack 'patch-shell-scripts patch-shell-scripts)
    (add-before 'build 'set-texmfvar set-texmfvar)
    (add-before 'build 'configure-texmf configure-texmf)
    (add-before 'build 'delete-drv-files delete-drv-files)
    (add-after 'delete-drv-files 'generate-font-metrics generate-font-metrics)
    (replace 'build build)