guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: guix: Restore profile hook for TeX Live font maps


From: guix-commits
Subject: branch master updated: guix: Restore profile hook for TeX Live font maps.
Date: Mon, 07 Feb 2022 15:38:32 -0500

This is an automated email from the git hooks/post-receive script.

rekado pushed a commit to branch master
in repository guix.

The following commit(s) were added to refs/heads/master by this push:
     new 805af862c6 guix: Restore profile hook for TeX Live font maps.
805af862c6 is described below

commit 805af862c6f0f6c54b74125bff8d348ae8f8e6f8
Author: Ricardo Wurmus <rekado@elephly.net>
AuthorDate: Fri Jan 28 19:18:01 2022 +0100

    guix: Restore profile hook for TeX Live font maps.
    
    Long ago we had a profile hook, called “texlive-configuration”, which would
    operate on the texlive-* packages that have actually been installed in the
    profile, build a union directory, and then install a texmf.cnf file that
    declared the prefix of the TeX Live tree to be the union directory.  It then
    generated font maps based on the fonts that had actually been installed.
    
    This approach had multiple disadvantages, the worst of which was that you
    could only really have one TeX Live tree.  Commit
    04a0b1e09abce99857e7930336421ca6d15ae630 addressed this, where texmf.cnf was
    modified *once* and for all in texlive-bin to reference the GUIX_TEXMF
    variable to determine the root of the tree.  This made much of
    “texlive-configuration” obsolete, because we didn’t need to have any union
    directories at all, because we had no need for a customized per-profile
    variant of texmf.cnf.
    
    Unfortunately, with the loss of the profile hook we would no longer build 
font
    maps.  This patch resurrects the profile hook: we’re again generating font
    maps (such as pdftex.map) based on the contents of the profile.
    
    * gnu/packages/tex.scm (texlive-default-updmap.cfg): New variable.
    * guix/profiles.scm (texlive-configuration): Rename this...
    (texlive-font-maps): ...to this; update to run updmap-sys on the contents of
    the profile to generate only font maps.
    (%default-profile-hooks): Add texlive-font-maps.
    * guix/status.scm (hook-message): Rename unused texlive-configuration to
    texlive-font-maps.
---
 gnu/packages/tex.scm | 12 +++++++
 guix/profiles.scm    | 99 ++++++++++++++++++++++------------------------------
 guix/status.scm      |  4 +--
 3 files changed, 56 insertions(+), 59 deletions(-)

diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index a68c42096b..5d5e875a51 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -4422,6 +4422,18 @@ It includes little more than the required set of LaTeX 
packages.")
                      '()
                      default-packages)))))
 
+(define-public texlive-default-updmap.cfg
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://tug.org/svn/texlive/tags/";
+                        %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
+                        "?revision=" (number->string %texlive-revision)))
+    (file-name (string-append "updmap.cfg-"
+                              (number->string %texlive-revision)))
+    (sha256
+     (base32
+      "0zhpyld702im6352fwp41f2hgfkpj2b4j1kfsjqbkijlcmvb6w2c"))))
+
 ;;; TODO: Add a TeX Live profile hook computing fonts maps (and others?)
 ;;; configuration from the packages in the profile, similar to what's done
 ;;; below.
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 96be421727..86926d6793 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1738,8 +1738,8 @@ MANIFEST contains the \"man-db\" package.  Otherwise, 
return #f."
         (manual-database manifest)
         (return #f))))
 
-(define (texlive-configuration manifest)
-  "Return a derivation that builds a TeXlive configuration for the entries in
+(define (texlive-font-maps manifest)
+  "Return a derivation that builds the TeX Live font maps for the entries in
 MANIFEST."
   (define entry->texlive-input
     (match-lambda
@@ -1768,72 +1768,56 @@ MANIFEST."
           ;; Build a modifiable union of all texlive inputs.  We do this so
           ;; that TeX live can resolve the parent and grandparent directories
           ;; correctly.  There might be a more elegant way to accomplish this.
-          (union-build #$output
+          (union-build "/tmp/texlive"
                        '#$(append-map entry->texlive-input
                                       (manifest-entries manifest))
                        #:create-all-directories? #t
                        #:log-port (%make-void-port "w"))
-          (let ((texmf.cnf (string-append
-                            #$output
-                            "/share/texmf-dist/web2c/texmf.cnf")))
-            (when (file-exists? texmf.cnf)
-              (substitute* texmf.cnf
-                (("^TEXMFROOT = .*")
-                 (string-append "TEXMFROOT = " #$output "/share\n"))
-                (("^TEXMF = .*")
-                 "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-
-              ;; XXX: This is annoying, but it's necessary because texlive-bin
-              ;; does not provide wrapped executables.
-              (setenv "PATH"
-                      (string-append #$(file-append coreutils "/bin")
-                                     ":"
-                                     #$(file-append sed "/bin")))
-              (setenv "PERL5LIB" #$(file-append texlive-bin "/share/tlpkg"))
-              (setenv "TEXMF" (string-append #$output "/share/texmf-dist"))
-
-              ;; Remove invalid maps from config file.
-              (let* ((web2c (string-append #$output 
"/share/texmf-config/web2c/"))
-                     (maproot (string-append #$output 
"/share/texmf-dist/fonts/map/"))
-                     (updmap.cfg (string-append web2c "updmap.cfg")))
-                (mkdir-p web2c)
-
-                ;; Some profiles may already have this file, which prevents us
-                ;; from copying it.  Since we need to generate it from scratch
-                ;; anyway, we delete it here.
-                (when (file-exists? updmap.cfg)
-                  (delete-file updmap.cfg))
-                (copy-file #$updmap.cfg updmap.cfg)
-                (make-file-writable updmap.cfg)
-                (let* ((port (open-pipe* OPEN_WRITE
-                                         #$(file-append texlive-bin 
"/bin/updmap-sys")
-                                         "--syncwithtrees"
-                                         "--nohash"
-                                         "--force"
-                                         (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 font maps.
-                (invoke #$(file-append texlive-bin "/bin/updmap-sys")
-                        (string-append "--cnffile=" web2c "updmap.cfg")
-                        (string-append "--dvipdfmxoutputdir="
-                                       maproot "updmap/dvipdfmx/")
-                        (string-append "--dvipsoutputdir="
-                                       maproot "updmap/dvips/")
-                        (string-append "--pdftexoutputdir="
-                                       maproot "updmap/pdftex/")))))
-          #t)))
+
+          ;; XXX: This is annoying, but it's necessary because texlive-bin
+          ;; does not provide wrapped executables.
+          (setenv "PATH"
+                  (string-append #$(file-append coreutils "/bin")
+                                 ":"
+                                 #$(file-append sed "/bin")))
+          (setenv "PERL5LIB" #$(file-append texlive-bin "/share/tlpkg"))
+          (setenv "GUIX_TEXMF" "/tmp/texlive/share/texmf-dist")
+
+          ;; Remove invalid maps from config file.
+          (let* ((web2c (string-append #$output "/share/texmf-dist/web2c/"))
+                 (maproot (string-append #$output 
"/share/texmf-dist/fonts/map/"))
+                 (updmap.cfg (string-append web2c "updmap.cfg")))
+            (mkdir-p web2c)
+            (copy-file #$updmap.cfg updmap.cfg)
+            (make-file-writable updmap.cfg)
+            (let* ((port (open-pipe* OPEN_WRITE
+                                     #$(file-append texlive-bin 
"/bin/updmap-sys")
+                                     "--syncwithtrees"
+                                     "--nohash"
+                                     "--force"
+                                     (string-append "--cnffile=" updmap.cfg))))
+              (display "Y\n" port)
+              (when (not (zero? (status:exit-val (close-pipe port))))
+                (error "failed to filter updmap.cfg")))
+
+            ;; Generate font maps.
+            (invoke #$(file-append texlive-bin "/bin/updmap-sys")
+                    (string-append "--cnffile=" updmap.cfg)
+                    (string-append "--dvipdfmxoutputdir="
+                                   maproot "dvipdfmx/updmap")
+                    (string-append "--dvipsoutputdir="
+                                   maproot "dvips/updmap")
+                    (string-append "--pdftexoutputdir="
+                                   maproot "pdftex/updmap"))))))
 
   (mlet %store-monad ((texlive-base (manifest-lookup-package manifest 
"texlive-base")))
     (if texlive-base
-        (gexp->derivation "texlive-configuration" build
+        (gexp->derivation "texlive-font-maps" build
                           #:substitutable? #f
                           #:local-build? #t
                           #:properties
                           `((type . profile-hook)
-                            (hook . texlive-configuration)))
+                            (hook . texlive-font-maps)))
         (return #f))))
 
 (define %default-profile-hooks
@@ -1849,6 +1833,7 @@ MANIFEST."
         glib-schemas
         gtk-icon-themes
         gtk-im-modules
+        texlive-font-maps
         xdg-desktop-database
         xdg-mime-database))
 
diff --git a/guix/status.scm b/guix/status.scm
index eefe18365f..fba28765df 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -395,8 +395,8 @@ the current build phase."
      (G_ "building XDG MIME database..."))
     ('fonts-dir
      (G_ "building fonts directory..."))
-    ('texlive-configuration
-     (G_ "building TeX Live configuration..."))
+    ('texlive-font-maps
+     (G_ "building TeX Live font maps..."))
     ('manual-database
      (G_ "building database for manual pages..."))
     ('package-cache                    ;package cache generated by 'guix pull'



reply via email to

[Prev in Thread] Current Thread [Next in Thread]