GNU bug report logs - #39602
Generate font catalogues for the X server

Previous Next

Package: guix-patches;

Reported by: Ivan Kozlov <kanichos <at> yandex.ru>

Date: Fri, 14 Feb 2020 17:18:01 UTC

Severity: normal

To reply to this bug, email your comments to 39602 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#39602; Package guix-patches. (Fri, 14 Feb 2020 17:18:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ivan Kozlov <kanichos <at> yandex.ru>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 14 Feb 2020 17:18:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ivan Kozlov <kanichos <at> yandex.ru>
To: guix-patches <guix-patches <at> gnu.org>
Subject: Generate font catalogues for the X server
Date: Fri, 14 Feb 2020 20:17:05 +0300
Actually, I am sending this as a patch.

This should produce a "share/fontpath.d" directory in the profile which is a font catalogue as described in Xserver(1). Then the X server font path can be set to include this catalogue and it will find the installed fonts. This concerns all legacy X11 applications using the core fonts system, and most importantly xterm.

The hook ‘fonts-dir-file’ was originally added for this purpose as the comments can tell; you would include e. g. "share/fonts/X11/misc" from the profile in the font path, which is a union directory with symbolic links to fonts that want to install there and a fonts.dir file describing all of them. This has not been working for ages, since the X.org server stopped following symbolic links to font files for security reasons. It should be removed.

--- a/guix/profiles.scm 2020-01-01 13:03:15.579056969 +0300
+++ b/guix/profiles.scm 2020-02-14 19:52:51.979902836 +0300
@@ -1293,6 +1293,37 @@
                     `((type . profile-hook)
                       (hook . fonts-dir))))
 
+(define (fontpath-file manifest)
+  (define build
+    #~(begin
+       (use-modules (srfi srfi-1) (srfi srfi-26) (guix build utils))
+       (let* ((top-font-dirs (filter file-exists?
+                                     (map (cut string-append <>
+                                               "/share/fonts")
+                                          '#$(manifest-inputs manifest))))
+              (font-dirs (append-map (lambda (dir)
+                                       (find-files dir
+                                                   (lambda (file stat)
+                                                     (and (eq? 'directory (stat:type stat))
+                                                          (file-exists? (string-append file "/fonts.dir"))))
+                                                   #:directories? #t)) top-font-dirs))
+              (fonpath-dir (string-append #$output "/share/fontpath.d")))
+         (mkdir-p fontpath-dir)
+         (chdir fontpath-dir)
+         (for-each (lambda (dir pri)
+                     (symlink dir (string-append (basename dir) ":pri=" (number->string pri))))
+                   font-dirs
+                   (iota (length font-dirs) 1)))))
+  (gexp->derivation "fontpath.d" build
+                    #:modules '((guix build utils)
+                                (srfi srfi-1)
+                               (srfi srfi-26))
+                    #:local-build? #t
+                    #:substitutable? #f
+                    #:properties
+                    `((type . profile-hook)
+                      (hook . fontpath-dir))))
+
 (define (manual-database manifest)
   "Return a derivation that builds the manual page database (\"mandb\") for
 the entries in MANIFEST."
@@ -1430,6 +1461,7 @@
   (list info-dir-file
         manual-database
         fonts-dir-file
+       fontpath-file
         ghc-package-cache-file
         ca-certificate-bundle
         glib-schemas





Information forwarded to guix-patches <at> gnu.org:
bug#39602; Package guix-patches. (Fri, 12 Jun 2020 18:51:01 GMT) Full text and rfc822 format available.

Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ivan Kozlov <kanichos <at> yandex.ru>
To: guix-patches <guix-patches <at> gnu.org>
Subject: Re: Generate font catalogues for the X server
Date: Fri, 12 Jun 2020 21:44:44 +0300
Is nobody interested in this? I don’t see any problems with the patch.

This must have been of concern at least once, judging by fonts-dir-file’s existence. The fontpath mechanism is the only way today to make the core (server-side) fonts work reasonably.

14.02.2020, 20:17, "Ivan Kozlov" <kanichos <at> yandex.ru>:
> Actually, I am sending this as a patch.
>
> This should produce a "share/fontpath.d" directory in the profile which is a font catalogue as described in Xserver(1). Then the X server font path can be set to include this catalogue and it will find the installed fonts. This concerns all legacy X11 applications using the core fonts system, and most importantly xterm.
>
> The hook ‘fonts-dir-file’ was originally added for this purpose as the comments can tell; you would include e. g. "share/fonts/X11/misc" from the profile in the font path, which is a union directory with symbolic links to fonts that want to install there and a fonts.dir file describing all of them. This has not been working for ages, since the X.org server stopped following symbolic links to font files for security reasons. It should be removed.
>
> --- a/guix/profiles.scm 2020-01-01 13:03:15.579056969 +0300
> +++ b/guix/profiles.scm 2020-02-14 19:52:51.979902836 +0300
> @@ -1293,6 +1293,37 @@
>                      `((type . profile-hook)
>                        (hook . fonts-dir))))
>
> +(define (fontpath-file manifest)
> + (define build
> + #~(begin
> + (use-modules (srfi srfi-1) (srfi srfi-26) (guix build utils))
> + (let* ((top-font-dirs (filter file-exists?
> + (map (cut string-append <>
> + "/share/fonts")
> + '#$(manifest-inputs manifest))))
> + (font-dirs (append-map (lambda (dir)
> + (find-files dir
> + (lambda (file stat)
> + (and (eq? 'directory (stat:type stat))
> + (file-exists? (string-append file "/fonts.dir"))))
> + #:directories? #t)) top-font-dirs))
> + (fonpath-dir (string-append #$output "/share/fontpath.d")))
> + (mkdir-p fontpath-dir)
> + (chdir fontpath-dir)
> + (for-each (lambda (dir pri)
> + (symlink dir (string-append (basename dir) ":pri=" (number->string pri))))
> + font-dirs
> + (iota (length font-dirs) 1)))))
> + (gexp->derivation "fontpath.d" build
> + #:modules '((guix build utils)
> + (srfi srfi-1)
> + (srfi srfi-26))
> + #:local-build? #t
> + #:substitutable? #f
> + #:properties
> + `((type . profile-hook)
> + (hook . fontpath-dir))))
> +
>  (define (manual-database manifest)
>    "Return a derivation that builds the manual page database (\"mandb\") for
>  the entries in MANIFEST."
> @@ -1430,6 +1461,7 @@
>    (list info-dir-file
>          manual-database
>          fonts-dir-file
> + fontpath-file
>          ghc-package-cache-file
>          ca-certificate-bundle
>          glib-schemas




Information forwarded to guix-patches <at> gnu.org:
bug#39602; Package guix-patches. (Mon, 22 Jun 2020 20:12:01 GMT) Full text and rfc822 format available.

Message #11 received at 39602 <at> debbugs.gnu.org (full text, mbox):

From: Marius Bakke <mbakke <at> fastmail.com>
To: Ivan Kozlov <kanichos <at> yandex.ru>, 39602 <at> debbugs.gnu.org
Subject: Re: [bug#39602] Generate font catalogues for the X server
Date: Mon, 22 Jun 2020 22:11:01 +0200
[Message part 1 (text/plain, inline)]
Ivan Kozlov <kanichos <at> yandex.ru> writes:

> Actually, I am sending this as a patch.
>
> This should produce a "share/fontpath.d" directory in the profile which is a font catalogue as described in Xserver(1). Then the X server font path can be set to include this catalogue and it will find the installed fonts. This concerns all legacy X11 applications using the core fonts system, and most importantly xterm.
>
> The hook ‘fonts-dir-file’ was originally added for this purpose as the comments can tell; you would include e. g. "share/fonts/X11/misc" from the profile in the font path, which is a union directory with symbolic links to fonts that want to install there and a fonts.dir file describing all of them. This has not been working for ages, since the X.org server stopped following symbolic links to font files for security reasons. It should be removed.

Thanks for this investigation, and the patch!

Overall it LGTM, but I wonder how useful it is, seeing as no one has
reported the issue.  Would it make sense to add hooks in the
configuration system instead for setting font path and a font union?

A patch to remove the legacy broken 'fonts-dir-file' generation from
(guix profiles) would be welcome, by the way.

Thanks,
Marius
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 4 years and 150 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.