GNU bug report logs -
#53613
[PATCH] guix: Restore profile hook for TeX Live font maps.
Previous Next
Reported by: Ricardo Wurmus <rekado <at> elephly.net>
Date: Fri, 28 Jan 2022 18:19:02 UTC
Severity: normal
Tags: patch
Done: Ricardo Wurmus <rekado <at> elephly.net>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 53613 in the body.
You can then email your comments to 53613 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix-patches <at> gnu.org
:
bug#53613
; Package
guix-patches
.
(Fri, 28 Jan 2022 18:19:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Ricardo Wurmus <rekado <at> elephly.net>
:
New bug report received and forwarded. Copy sent to
guix-patches <at> gnu.org
.
(Fri, 28 Jan 2022 18:19:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
* 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 89f60f89d5..72437ce2f6 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -4314,6 +4314,18 @@ (define-public texlive-base
'()
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 1d354ecb78..403dbc18ed 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1738,8 +1738,8 @@ (define (manual-database/optional manifest)
(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 @@ (define build
;; 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 @@ (define %default-profile-hooks
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 @@ (define (hook-message hook-type)
(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'
--
2.34.0
Information forwarded
to
guix-patches <at> gnu.org
:
bug#53613
; Package
guix-patches
.
(Mon, 31 Jan 2022 23:03:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 53613 <at> debbugs.gnu.org (full text, mbox):
Hi!
Ricardo Wurmus <rekado <at> elephly.net> skribis:
> * 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.
Out of curiosity, what does it fix, and how does it relate to past
changes in this area (looks like ‘texlive-configuration’ was added, then
removed, then reintroduced)?
I’m asking for documentation purposes because I trust your judgment
anyway. :-)
Thanks,
Ludo’.
Information forwarded
to
guix-patches <at> gnu.org
:
bug#53613
; Package
guix-patches
.
(Mon, 31 Jan 2022 23:43:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 53613 <at> debbugs.gnu.org (full text, mbox):
Ludovic Courtès <ludo <at> gnu.org> writes:
> Ricardo Wurmus <rekado <at> elephly.net> skribis:
>
>> * 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.
>
> Out of curiosity, what does it fix, and how does it relate to past
> changes in this area (looks like ‘texlive-configuration’ was added, then
> removed, then reintroduced)?
>
> I’m asking for documentation purposes because I trust your judgment
> anyway. :-)
The profile hook was called “texlive-configuration” because it would
create a customized texmf.cnf, the main configuration file for the whole
TeX Live tree.
Back then I saw no other way to support a modular TeX Live tree than to
operate on the texlive-* packages that have actually been installed in
the profile, build a union directory (hence the procedure name
“texlive-union”, which did the same thing but for packages), and then
install a texmf.cnf file that declared the prefix of the TeX Live tree
to be the union directory.
This was what the “texlive-configuration” hook primarily accomplished:
build the union, patch and install texmf.cnf. It then proceeded to
operate on that union directory and 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. Maxim addressed this in
commit 04a0b1e09abce99857e7930336421ca6d15ae630, 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” (and “texlive-union”) 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, this change threw out the font-map-sized baby with the
texmf.cnf-infested bath water. The effect of that was barely noticeable
because font maps are weird and aren’t always used. Besides, we had a
couple of other font-related problems (e.g. invalid assumptions about
directory links in kpathsea), which masked this newly introduced
problem.
This patch pulls the baby out of the drain: we’re again generating font
maps (such as pdftex.map) based on the contents of the profile.
An alternative would be to install fully featured static font maps,
which would almost always be completely wrong, because they would refer
to fonts that haven’t been installed. The profile hook ensures a) that
the expected font map files exist and b) that they contain nothing
beyond valid entries that correspond to the profile contents.
Does this really solve problems? I don’t know. I think it’s the right
thing to do (and thus makes our modular TeX Live less wrong), but it
didn’t solve mysteries like that koma-script bug that seems to be
related to a missing font map file. The koma-script bug remains because
the font map file is ignored.
So … there’s more to fixing everything that’s wrong with fonts in our
modular TeX Live, but we’ve been chipping at it with commits like
4d2c861dfbd49f0e1619fda5dbf18e4cb5bca1d0,
2a5ed25c412e162505b2b371d00987fd158a91d4, and the like — this is
another one of these small things that should get us closer to the
platonic ideal of fonts with TeX Live. I hope.
--
Ricardo
Information forwarded
to
guix-patches <at> gnu.org
:
bug#53613
; Package
guix-patches
.
(Tue, 01 Feb 2022 09:23:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 53613 <at> debbugs.gnu.org (full text, mbox):
Howdy!
Ricardo Wurmus <rekado <at> elephly.net> skribis:
[...]
> Unfortunately, this change threw out the font-map-sized baby with the
> texmf.cnf-infested bath water. The effect of that was barely noticeable
> because font maps are weird and aren’t always used. Besides, we had a
> couple of other font-related problems (e.g. invalid assumptions about
> directory links in kpathsea), which masked this newly introduced
> problem.
>
> This patch pulls the baby out of the drain: we’re again generating font
> maps (such as pdftex.map) based on the contents of the profile.
Oh, I see, makes perfect sense.
Should some of this go in the commit log?
[...]
> Does this really solve problems? I don’t know. I think it’s the right
> thing to do (and thus makes our modular TeX Live less wrong), but it
> didn’t solve mysteries like that koma-script bug that seems to be
> related to a missing font map file. The koma-script bug remains because
> the font map file is ignored.
I didn’t see how the koma-script bug could relate to fonts but your
explanation at <https://issues.guix.gnu.org/33094> looks plausible to my
(untrained) eye.
Thanks for explaining and fixing this!
Ludo’.
Information forwarded
to
guix-patches <at> gnu.org
:
bug#53613
; Package
guix-patches
.
(Thu, 10 Feb 2022 21:21:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 53613 <at> debbugs.gnu.org (full text, mbox):
Hello!
Ludovic Courtès <ludo <at> gnu.org> skribis:
> Ricardo Wurmus <rekado <at> elephly.net> skribis:
>
> [...]
>
>> Unfortunately, this change threw out the font-map-sized baby with the
>> texmf.cnf-infested bath water. The effect of that was barely noticeable
>> because font maps are weird and aren’t always used. Besides, we had a
>> couple of other font-related problems (e.g. invalid assumptions about
>> directory links in kpathsea), which masked this newly introduced
>> problem.
>>
>> This patch pulls the baby out of the drain: we’re again generating font
>> maps (such as pdftex.map) based on the contents of the profile.
>
> Oh, I see, makes perfect sense.
>
> Should some of this go in the commit log?
To be clear, I think you can go ahead and commit it, possibly with an
extra comment if you feel so inclined.
Thanks again,
Ludo’.
Reply sent
to
Ricardo Wurmus <rekado <at> elephly.net>
:
You have taken responsibility.
(Thu, 10 Feb 2022 21:44:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Ricardo Wurmus <rekado <at> elephly.net>
:
bug acknowledged by developer.
(Thu, 10 Feb 2022 21:44:02 GMT)
Full text and
rfc822 format available.
Message #22 received at 53613-done <at> debbugs.gnu.org (full text, mbox):
Ludovic Courtès <ludo <at> gnu.org> writes:
> Hello!
>
> Ludovic Courtès <ludo <at> gnu.org> skribis:
>
>> Ricardo Wurmus <rekado <at> elephly.net> skribis:
>>
>> [...]
>>
>>> Unfortunately, this change threw out the font-map-sized baby with the
>>> texmf.cnf-infested bath water. The effect of that was barely noticeable
>>> because font maps are weird and aren’t always used. Besides, we had a
>>> couple of other font-related problems (e.g. invalid assumptions about
>>> directory links in kpathsea), which masked this newly introduced
>>> problem.
>>>
>>> This patch pulls the baby out of the drain: we’re again generating font
>>> maps (such as pdftex.map) based on the contents of the profile.
>>
>> Oh, I see, makes perfect sense.
>>
>> Should some of this go in the commit log?
>
> To be clear, I think you can go ahead and commit it, possibly with an
> extra comment if you feel so inclined.
That’s how I understood it. I did go ahead and pushed it with an
explanation in the commit message.
Thanks for the review!
--
Ricardo
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Fri, 11 Mar 2022 12:24:05 GMT)
Full text and
rfc822 format available.
This bug report was last modified 3 years and 157 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.