summary refs log tree commit diff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2019-09-18 15:35:17 +0200
committerRicardo Wurmus <rekado@elephly.net>2019-09-18 15:35:17 +0200
commitcf48ea9539020bd6300033a8910ca951225582e6 (patch)
tree24c07af142050f275971339bdc06e17122b8c3a1
parent3c4f5ad7f403cc5ff0524d62a8612b0decaeaeb8 (diff)
parent993a4fbb7c3d1f9977e0789c21905fddd72241fd (diff)
downloadguix-cf48ea9539020bd6300033a8910ca951225582e6.tar.gz
Merge branch 'wip-texlive'
-rw-r--r--gnu/packages/guile-xyz.scm64
-rw-r--r--gnu/packages/tex.scm451
2 files changed, 299 insertions, 216 deletions
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 2f974ee63b..a5dfa55039 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -2554,3 +2554,67 @@ Emacsy.  It has a small C layer and most browser features are fully
 programmable in Guile.  It has hooks, keymaps, and self documentation
 features.")
     (license license:gpl3+)))
+
+(define-public guile-cv
+  (package
+    (name "guile-cv")
+    (version "0.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/guile-cv/guile-cv-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0qdf0s2h1xj5lbhnc1pfw69i3zg08pqy2y6869b92ydfis8r82j9"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'prepare-build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "configure"
+               (("SITEDIR=\"\\$datadir/guile-cv\"")
+                "SITEDIR=\"$datadir/guile/site/$GUILE_EFFECTIVE_VERSION\"")
+               (("SITECCACHEDIR=\"\\$libdir/guile-cv/")
+                "SITECCACHEDIR=\"$libdir/"))
+             (substitute* "cv/init.scm"
+               (("\\(dynamic-link \"libvigra_c\"\\)")
+                (string-append "(dynamic-link \""
+                               (assoc-ref inputs "vigra-c")
+                               "/lib/libvigra_c\")"))
+               (("\\(dynamic-link \"libguile-cv\"\\)")
+                (format #f "~s"
+                        `(dynamic-link
+                          (format #f "~alibguile-cv"
+                                  (if (getenv "GUILE_CV_UNINSTALLED")
+                                      ""
+                                      ,(format #f "~a/lib/"
+                                               (assoc-ref outputs "out"))))))))
+             (setenv "GUILE_CV_UNINSTALLED" "1")
+             ;; Only needed to satisfy the configure script.
+             (setenv "LD_LIBRARY_PATH"
+                     (string-append (assoc-ref inputs "vigra-c") "/lib"))
+             #t)))))
+    (inputs
+     `(("vigra" ,vigra)
+       ("vigra-c" ,vigra-c)
+       ("guile" ,guile-2.2)))
+    (native-inputs
+     `(("texlive" ,(texlive-union (list texlive-booktabs
+                                        texlive-lm
+                                        texlive-siunitx
+                                        texlive-standalone
+                                        texlive-xcolor
+                                        texlive-fonts-iwona)))
+       ("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("guile-lib" ,guile-lib)))
+    (home-page "https://www.gnu.org/software/guile-cv/")
+    (synopsis "Computer vision library for Guile")
+    (description "Guile-CV is a Computer Vision functional programming library
+for the Guile Scheme language.  It is based on Vigra (Vision with Generic
+Algorithms), a C++ image processing and analysis library.  Guile-CV contains
+bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is
+enriched with pure Guile Scheme algorithms, all accessible through a nice,
+clean and easy to use high level API.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index c293d2f661..913ff5157d 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -2508,214 +2508,213 @@ formats.")
     (license license:lppl)))
 
 (define-public texlive-latex-base
-  (package
-    (name "texlive-latex-base")
-    (version (number->string %texlive-revision))
-    (source (texlive-origin
-             name version
-             (list "/doc/latex/base/"
-                   "/source/latex/base/"
-                   ;; Almost all files in /tex/latex/base are generated, but
-                   ;; these are not:
-                   "/tex/latex/base/idx.tex"
-                   "/tex/latex/base/lablst.tex"
-                   "/tex/latex/base/lppl.tex"
-                   "/tex/latex/base/ltnews.cls"
-                   "/tex/latex/base/ltxcheck.tex"
-                   "/tex/latex/base/ltxguide.cls"
-                   "/tex/latex/base/minimal.cls"
-                   "/tex/latex/base/sample2e.tex"
-                   "/tex/latex/base/small2e.tex"
-                   "/tex/latex/base/source2e.tex"
-                   "/tex/latex/base/testpage.tex"
-                   "/tex/latex/base/texsys.cfg")
-             (base32
-              "0f8d41wk1gb7i6xq1a10drwhhayc50pg9nwzjkrqnxrv0pcc08w5")))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 match)
-                  (srfi srfi-26))
-       #:tests? #f                      ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Find required fonts
-             (setenv "TFMFONTS"
-                     (string-join
-                      (map (match-lambda
-                             ((pkg-name . dir)
-                              (string-append
-                               (assoc-ref inputs pkg-name)
-                               "/share/texmf-dist/fonts/tfm/public"
-                               dir)))
-                           '(("texlive-etex" . "/etex")
-                             ("texlive-cm" . "/cm")
-                             ("texlive-fonts-latex" . "/latex-fonts")
-                             ("texlive-fonts-knuth-lib" . "/knuth-lib")))
-                      ":"))
-             (let ((cwd (getcwd)))
-               (setenv "TEXINPUTS"
-                       (string-append
-                        cwd "//:"
-                        cwd "/source/latex/base//:"
-                        cwd "/build:"
-                        (string-join
-                         (map (match-lambda ((_ . dir) dir)) inputs)
-                         "//:"))))
-
-             ;; This is the actual build step.
-             (mkdir "build")
-             (invoke "tex" "-ini" "-interaction=scrollmode"
-                     "-output-directory=build" "unpack.ins")
-
-             ;; XXX: We can't build all formats at this point, nor are they
-             ;; part of the LaTeX base, so we disable them.  Actually, we
-             ;; should be running this all in a profile hook, so that only
-             ;; selected formats and hyphenation patterns are included, but it
-             ;; takes long and TeX Live isn't designed to be modular like
-             ;; that.  Everything operates on a shared directory, which we
-             ;; would only have at profile generation time.
-             (let ((disabled-formats
-                    '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
-                      "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
-                      "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
-                      "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
-                      "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
-                      "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
-                      "amstex pdftex" "pdfcslatex pdftex" "lollipop tex"
-                      "xmltex pdftex" "pdfjadetex pdftex" "eplain pdftex"
-                      "texsis pdftex" "mltex pdftex" "utf8mex pdftex")))
-               (mkdir "web2c")
-               (install-file (string-append
-                              (assoc-ref inputs "texlive-kpathsea")
-                              "/share/texmf-dist/web2c/fmtutil.cnf")
-                             "web2c")
-               (make-file-writable "web2c/fmtutil.cnf")
-               (substitute* "web2c/fmtutil.cnf"
-                 (((string-append "^(" (string-join disabled-formats "|") ")") m)
-                  (string-append "#! " m))))
-             (invoke "fmtutil-sys" "--all"
-                     "--fmtdir=web2c"
-                     (string-append "--cnffile=web2c/fmtutil.cnf"))
-             ;; We don't actually want to install it.
-             (delete-file "web2c/fmtutil.cnf")
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (root (string-append out "/share/texmf-dist"))
-                    (target (string-append root "/tex/latex/base"))
-                    (web2c (string-append root "/web2c"))
-                    (makeindex (string-append root "/makeindex/latex")))
-               (for-each delete-file (find-files "." "\\.(log|aux)$"))
-
-               ;; The usedir directive in docstrip.ins is ignored, so these
-               ;; two files end up in the wrong place.  Move them.
-               (mkdir-p makeindex)
-               (for-each (lambda (file)
-                           (install-file file makeindex)
-                           (delete-file file))
-                         '("build/gglo.ist"
-                           "build/gind.ist"))
-               (for-each (cut install-file <> target)
-                         (find-files "build" ".*"))
-               (for-each (cut install-file <> web2c)
-                         (find-files "web2c" ".*"))
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-tex-ini-files" ,texlive-tex-ini-files)
-       ("texlive-tex-plain" ,texlive-tex-plain)
-       ("texlive-kpathsea" ,texlive-kpathsea)
-       ("texlive-cm" ,texlive-cm)
-       ("texlive-fonts-latex" ,texlive-fonts-latex)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
-       ("texlive-luatexconfig"
-        ,(texlive-origin
-          "texlive-luatexconfig" (number->string %texlive-revision)
-          (list "/tex/generic/config/luatex-unicode-letters.tex"
-                "/tex/generic/config/luatexiniconfig.tex"
-                "/web2c/texmfcnf.lua")
-          (base32
-           "0cs67a8wwh4s5p5gn8l49jyccgy7glw8mfq5klgn3dfsl2fdlhk7")))))
-    (propagated-inputs
-     `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
-       ("texlive-etex" ,texlive-etex)
-       ("texlive-hyph-utf8" ,texlive-hyph-utf8)
-       ("texlive-hyphen-base" ,texlive-hyphen-base)
-       ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans)
-       ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek)
-       ("texlive-hyphen-armenian" ,texlive-hyphen-armenian)
-       ("texlive-hyphen-basque" ,texlive-hyphen-basque)
-       ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian)
-       ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian)
-       ("texlive-hyphen-catalan" ,texlive-hyphen-catalan)
-       ("texlive-hyphen-chinese" ,texlive-hyphen-chinese)
-       ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic)
-       ("texlive-hyphen-coptic" ,texlive-hyphen-coptic)
-       ("texlive-hyphen-croatian" ,texlive-hyphen-croatian)
-       ("texlive-hyphen-czech" ,texlive-hyphen-czech)
-       ("texlive-hyphen-danish" ,texlive-hyphen-danish)
-       ("texlive-hyphen-dutch" ,texlive-hyphen-dutch)
-       ("texlive-hyphen-english" ,texlive-hyphen-english)
-       ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto)
-       ("texlive-hyphen-estonian" ,texlive-hyphen-estonian)
-       ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic)
-       ("texlive-hyphen-finnish" ,texlive-hyphen-finnish)
-       ("texlive-hyphen-french" ,texlive-hyphen-french)
-       ("texlive-hyphen-friulan" ,texlive-hyphen-friulan)
-       ("texlive-hyphen-galician" ,texlive-hyphen-galician)
-       ("texlive-hyphen-georgian" ,texlive-hyphen-georgian)
-       ("texlive-hyphen-german" ,texlive-hyphen-german)
-       ("texlive-hyphen-greek" ,texlive-hyphen-greek)
-       ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian)
-       ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic)
-       ("texlive-hyphen-indic" ,texlive-hyphen-indic)
-       ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian)
-       ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua)
-       ("texlive-hyphen-irish" ,texlive-hyphen-irish)
-       ("texlive-hyphen-italian" ,texlive-hyphen-italian)
-       ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji)
-       ("texlive-hyphen-latin" ,texlive-hyphen-latin)
-       ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
-       ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
-       ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
-       ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
-       ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
-       ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese)
-       ("texlive-hyphen-polish" ,texlive-hyphen-polish)
-       ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese)
-       ("texlive-hyphen-romanian" ,texlive-hyphen-romanian)
-       ("texlive-hyphen-romansh" ,texlive-hyphen-romansh)
-       ("texlive-hyphen-russian" ,texlive-hyphen-russian)
-       ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit)
-       ("texlive-hyphen-serbian" ,texlive-hyphen-serbian)
-       ("texlive-hyphen-slovak" ,texlive-hyphen-slovak)
-       ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian)
-       ("texlive-hyphen-spanish" ,texlive-hyphen-spanish)
-       ("texlive-hyphen-swedish" ,texlive-hyphen-swedish)
-       ("texlive-hyphen-thai" ,texlive-hyphen-thai)
-       ("texlive-hyphen-turkish" ,texlive-hyphen-turkish)
-       ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen)
-       ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian)
-       ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian)
-       ("texlive-hyphen-welsh" ,texlive-hyphen-welsh)
-       ("texlive-unicode-data" ,texlive-unicode-data)
-       ("texlive-ukrhyph" ,texlive-ukrhyph)
-       ("texlive-ruhyphen" ,texlive-ruhyphen)
-       ("texlive-latexconfig" ,texlive-latexconfig)))
-    (home-page "https://www.ctan.org/pkg/latex-base")
-    (synopsis "Base sources of LaTeX")
-    (description
-     "This bundle comprises the source of LaTeX itself, together with several
+  (let ((template (simple-texlive-package
+                   "texlive-latex-base"
+                   (list "/doc/latex/base/"
+                         "/source/latex/base/"
+                         ;; Almost all files in /tex/latex/base are generated, but
+                         ;; these are not:
+                         "/tex/latex/base/idx.tex"
+                         "/tex/latex/base/lablst.tex"
+                         "/tex/latex/base/lppl.tex"
+                         "/tex/latex/base/ltnews.cls"
+                         "/tex/latex/base/ltxcheck.tex"
+                         "/tex/latex/base/ltxguide.cls"
+                         "/tex/latex/base/minimal.cls"
+                         "/tex/latex/base/sample2e.tex"
+                         "/tex/latex/base/small2e.tex"
+                         "/tex/latex/base/source2e.tex"
+                         "/tex/latex/base/testpage.tex"
+                         "/tex/latex/base/texsys.cfg")
+                   (base32
+                    "0f8d41wk1gb7i6xq1a10drwhhayc50pg9nwzjkrqnxrv0pcc08w5")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules modules '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (ice-9 match)
+            (srfi srfi-26)))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 ;; Find required fonts
+                 (setenv "TFMFONTS"
+                         (string-join
+                          (map (match-lambda
+                                 ((pkg-name . dir)
+                                  (string-append
+                                   (assoc-ref inputs pkg-name)
+                                   "/share/texmf-dist/fonts/tfm/public"
+                                   dir)))
+                               '(("texlive-etex" . "/etex")
+                                 ("texlive-cm" . "/cm")
+                                 ("texlive-fonts-latex" . "/latex-fonts")
+                                 ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                          ":"))
+                 (let ((cwd (getcwd)))
+                   (setenv "TEXINPUTS"
+                           (string-append
+                            cwd "//:"
+                            cwd "/source/latex/base//:"
+                            cwd "/build:"
+                            (string-join
+                             (map (match-lambda ((_ . dir) dir)) inputs)
+                             "//:"))))
+
+                 ;; This is the actual build step.
+                 (mkdir "build")
+                 (invoke "tex" "-ini" "-interaction=scrollmode"
+                         "-output-directory=build" "unpack.ins")
+
+                 ;; XXX: We can't build all formats at this point, nor are they
+                 ;; part of the LaTeX base, so we disable them.  Actually, we
+                 ;; should be running this all in a profile hook, so that only
+                 ;; selected formats and hyphenation patterns are included, but it
+                 ;; takes long and TeX Live isn't designed to be modular like
+                 ;; that.  Everything operates on a shared directory, which we
+                 ;; would only have at profile generation time.
+                 (let ((disabled-formats
+                        '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
+                          "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                          "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
+                          "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
+                          "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
+                          "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
+                          "amstex pdftex" "pdfcslatex pdftex" "lollipop tex"
+                          "xmltex pdftex" "pdfjadetex pdftex" "eplain pdftex"
+                          "texsis pdftex" "mltex pdftex" "utf8mex pdftex")))
+                   (mkdir "web2c")
+                   (install-file (string-append
+                                  (assoc-ref inputs "texlive-kpathsea")
+                                  "/share/texmf-dist/web2c/fmtutil.cnf")
+                                 "web2c")
+                   (make-file-writable "web2c/fmtutil.cnf")
+                   (substitute* "web2c/fmtutil.cnf"
+                     (((string-append "^(" (string-join disabled-formats "|") ")") m)
+                      (string-append "#! " m))))
+                 (invoke "fmtutil-sys" "--all"
+                         "--fmtdir=web2c"
+                         (string-append "--cnffile=web2c/fmtutil.cnf"))
+                 ;; We don't actually want to install it.
+                 (delete-file "web2c/fmtutil.cnf")
+                 #t))
+             (add-after 'install 'install-more
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (root (string-append out "/share/texmf-dist"))
+                        (target (string-append root "/tex/latex/base"))
+                        (web2c (string-append root "/web2c"))
+                        (makeindex (string-append root "/makeindex/latex")))
+                   (for-each delete-file (find-files "." "\\.(log|aux)$"))
+
+                   ;; The usedir directive in docstrip.ins is ignored, so these
+                   ;; two files end up in the wrong place.  Move them.
+                   (mkdir-p makeindex)
+                   (for-each (lambda (file)
+                               (install-file file makeindex)
+                               (delete-file file))
+                             '("build/gglo.ist"
+                               "build/gind.ist"))
+                   (for-each (cut install-file <> target)
+                             (find-files "build" ".*"))
+                   (for-each (cut install-file <> web2c)
+                             (find-files "web2c" ".*"))
+                   #t)))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-tex-ini-files" ,texlive-tex-ini-files)
+         ("texlive-tex-plain" ,texlive-tex-plain)
+         ("texlive-kpathsea" ,texlive-kpathsea)
+         ("texlive-cm" ,texlive-cm)
+         ("texlive-fonts-latex" ,texlive-fonts-latex)
+         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+         ("texlive-luatexconfig"
+          ,(texlive-origin
+            "texlive-luatexconfig" (number->string %texlive-revision)
+            (list "/tex/generic/config/luatex-unicode-letters.tex"
+                  "/tex/generic/config/luatexiniconfig.tex"
+                  "/web2c/texmfcnf.lua")
+            (base32
+             "0cs67a8wwh4s5p5gn8l49jyccgy7glw8mfq5klgn3dfsl2fdlhk7")))))
+      (propagated-inputs
+       `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
+         ("texlive-etex" ,texlive-etex)
+         ("texlive-hyph-utf8" ,texlive-hyph-utf8)
+         ("texlive-hyphen-base" ,texlive-hyphen-base)
+         ("texlive-hyphen-afrikaans" ,texlive-hyphen-afrikaans)
+         ("texlive-hyphen-ancientgreek" ,texlive-hyphen-ancientgreek)
+         ("texlive-hyphen-armenian" ,texlive-hyphen-armenian)
+         ("texlive-hyphen-basque" ,texlive-hyphen-basque)
+         ("texlive-hyphen-belarusian" ,texlive-hyphen-belarusian)
+         ("texlive-hyphen-bulgarian" ,texlive-hyphen-bulgarian)
+         ("texlive-hyphen-catalan" ,texlive-hyphen-catalan)
+         ("texlive-hyphen-chinese" ,texlive-hyphen-chinese)
+         ("texlive-hyphen-churchslavonic" ,texlive-hyphen-churchslavonic)
+         ("texlive-hyphen-coptic" ,texlive-hyphen-coptic)
+         ("texlive-hyphen-croatian" ,texlive-hyphen-croatian)
+         ("texlive-hyphen-czech" ,texlive-hyphen-czech)
+         ("texlive-hyphen-danish" ,texlive-hyphen-danish)
+         ("texlive-hyphen-dutch" ,texlive-hyphen-dutch)
+         ("texlive-hyphen-english" ,texlive-hyphen-english)
+         ("texlive-hyphen-esperanto" ,texlive-hyphen-esperanto)
+         ("texlive-hyphen-estonian" ,texlive-hyphen-estonian)
+         ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic)
+         ("texlive-hyphen-finnish" ,texlive-hyphen-finnish)
+         ("texlive-hyphen-french" ,texlive-hyphen-french)
+         ("texlive-hyphen-friulan" ,texlive-hyphen-friulan)
+         ("texlive-hyphen-galician" ,texlive-hyphen-galician)
+         ("texlive-hyphen-georgian" ,texlive-hyphen-georgian)
+         ("texlive-hyphen-german" ,texlive-hyphen-german)
+         ("texlive-hyphen-greek" ,texlive-hyphen-greek)
+         ("texlive-hyphen-hungarian" ,texlive-hyphen-hungarian)
+         ("texlive-hyphen-icelandic" ,texlive-hyphen-icelandic)
+         ("texlive-hyphen-indic" ,texlive-hyphen-indic)
+         ("texlive-hyphen-indonesian" ,texlive-hyphen-indonesian)
+         ("texlive-hyphen-interlingua" ,texlive-hyphen-interlingua)
+         ("texlive-hyphen-irish" ,texlive-hyphen-irish)
+         ("texlive-hyphen-italian" ,texlive-hyphen-italian)
+         ("texlive-hyphen-kurmanji" ,texlive-hyphen-kurmanji)
+         ("texlive-hyphen-latin" ,texlive-hyphen-latin)
+         ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
+         ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
+         ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
+         ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
+         ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
+         ("texlive-hyphen-piedmontese" ,texlive-hyphen-piedmontese)
+         ("texlive-hyphen-polish" ,texlive-hyphen-polish)
+         ("texlive-hyphen-portuguese" ,texlive-hyphen-portuguese)
+         ("texlive-hyphen-romanian" ,texlive-hyphen-romanian)
+         ("texlive-hyphen-romansh" ,texlive-hyphen-romansh)
+         ("texlive-hyphen-russian" ,texlive-hyphen-russian)
+         ("texlive-hyphen-sanskrit" ,texlive-hyphen-sanskrit)
+         ("texlive-hyphen-serbian" ,texlive-hyphen-serbian)
+         ("texlive-hyphen-slovak" ,texlive-hyphen-slovak)
+         ("texlive-hyphen-slovenian" ,texlive-hyphen-slovenian)
+         ("texlive-hyphen-spanish" ,texlive-hyphen-spanish)
+         ("texlive-hyphen-swedish" ,texlive-hyphen-swedish)
+         ("texlive-hyphen-thai" ,texlive-hyphen-thai)
+         ("texlive-hyphen-turkish" ,texlive-hyphen-turkish)
+         ("texlive-hyphen-turkmen" ,texlive-hyphen-turkmen)
+         ("texlive-hyphen-ukrainian" ,texlive-hyphen-ukrainian)
+         ("texlive-hyphen-uppersorbian" ,texlive-hyphen-uppersorbian)
+         ("texlive-hyphen-welsh" ,texlive-hyphen-welsh)
+         ("texlive-unicode-data" ,texlive-unicode-data)
+         ("texlive-ukrhyph" ,texlive-ukrhyph)
+         ("texlive-ruhyphen" ,texlive-ruhyphen)
+         ("texlive-latexconfig" ,texlive-latexconfig)))
+      (home-page "https://www.ctan.org/pkg/latex-base")
+      (synopsis "Base sources of LaTeX")
+      (description
+       "This bundle comprises the source of LaTeX itself, together with several
 packages which are considered \"part of the kernel\".  This bundle, together
 with the required packages, constitutes what every LaTeX distribution should
 contain.")
-    (license license:lppl1.3c+)))
+      (license license:lppl1.3c+))))
 
 (define-public texlive-latex-filecontents
   (package
@@ -3568,7 +3567,10 @@ standard LaTeX packages."
                ;; the updmap.cfg file)
                (match (filter (match-lambda
                                 ((name . _)
-                                 (not (member name '("bash" "updmap.cfg")))))
+                                 (not (member name '("bash"
+                                                     "coreutils"
+                                                     "sed"
+                                                     "updmap.cfg")))))
                               %build-inputs)
                  (((names . directories) ...)
                   (union-build (assoc-ref %outputs "out")
@@ -3588,6 +3590,7 @@ standard LaTeX packages."
                (setenv "PATH" (string-append
                                (assoc-ref %build-inputs "bash") "/bin:"
                                (assoc-ref %build-inputs "coreutils") "/bin:"
+                               (assoc-ref %build-inputs "sed") "/bin:"
                                (string-append out "/bin")))
                (for-each
                 (cut wrap-program <>
@@ -3596,16 +3599,32 @@ standard LaTeX packages."
                 (find-files (string-append out "/bin") ".*"))
 
                ;; Remove invalid maps from config file.
-               (let ((port (open-pipe* OPEN_WRITE "updmap-sys"
-                                       "--syncwithtrees"
-                                       "--nohash"
-                                       (assoc-ref %build-inputs "updmap.cfg"))))
-                 (display "Y\n" port)
-                 (when (not (zero? (status:exit-val (close-pipe port))))
-                   (error "failed to filter updmap.cfg")))
-               ;; Generate maps.
-               (invoke "updmap-sys" "--force"
-                       (string-append out "/share/texmf-config/web2c/updmap.cfg"))
+               (let ((web2c (string-append out "/share/texmf-config/web2c/"))
+                     (maproot (string-append out "/share/texmf-dist/fonts/map/")))
+                 (mkdir-p web2c)
+                 (copy-file
+                  (assoc-ref %build-inputs "updmap.cfg")
+                  (string-append web2c "updmap.cfg"))
+                 (make-file-writable (string-append web2c "updmap.cfg"))
+
+                 (let* ((port (open-pipe* OPEN_WRITE "updmap-sys"
+                                          "--syncwithtrees"
+                                          "--nohash"
+                                          (string-append "--cnffile=" web2c "updmap.cfg"))))
+                   (display "Y\n" port)
+                   (when (not (zero? (status:exit-val (close-pipe port))))
+                     (error "failed to filter updmap.cfg")))
+                 ;; Generate maps.
+                 (invoke "updmap-sys"
+                         (string-append "--cnffile=" web2c "updmap.cfg")
+                         (string-append "--dvipdfmxoutputdir="
+                                        maproot "dvipdfmx/updmap/")
+                         (string-append "--dvipsoutputdir="
+                                        maproot "dvips/updmap/")
+                         (string-append "--pdftexoutputdir="
+                                        maproot "pdftex/updmap/"))
+                 ;; Having this file breaks all file lookups later.
+                 (delete-file (string-append out "/share/texmf-dist/ls-R")))
                #t))))
         (inputs
          `(("bash" ,bash)