Skip to content

Commit

Permalink
fontconfig: patch and document
Browse files Browse the repository at this point in the history
  • Loading branch information
vcunat committed Nov 5, 2014
1 parent dcd2590 commit c0e2ace
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 11 deletions.
6 changes: 4 additions & 2 deletions nixos/modules/config/fonts/fontconfig.nix
Expand Up @@ -49,8 +49,10 @@ with lib;
</fontconfig>
'';

# Versioned fontconfig > 2.10. Only specify font directories.

# Versioned fontconfig > 2.10. Take shared fonts.conf from fontconfig.
# Otherwise specify only font directories.
environment.etc."fonts/${pkgs.fontconfig.configVersion}/fonts.conf".source =

This comment has been minimized.

Copy link
@lucabrunox

lucabrunox Nov 5, 2014

Contributor

I wouldn't add this at all unless we handle older fontconfig versions as well. I'd initially let the users manage version-specific configuration in case the find any problem.

This comment has been minimized.

Copy link
@vcunat

vcunat Nov 5, 2014

Author Member

This file is needed, IMHO. Otherwise fontconfig wouldn't know it it's on non-NixOS, where it's supposed to use /etc/fonts/fonts.conf.

This comment has been minimized.

Copy link
@lucabrunox

lucabrunox Nov 5, 2014

Contributor

If on nixos /etc/fonts/fonts.conf works, I don't see reason to make it use the versioned conf. After all, it has the same source.

This comment has been minimized.

Copy link
@vcunat

vcunat Nov 5, 2014

Author Member

It isn't the same. /etc/fonts/fonts.conf is the 2.10 config. (We would break older packages if that got replaced.)

This comment has been minimized.

Copy link
@lucabrunox

lucabrunox Nov 5, 2014

Contributor

I mean the user can write /etc/fonts/2.11/fonts.conf when she needs to, instead of doing it preemptively.

This comment has been minimized.

Copy link
@vcunat

vcunat Nov 5, 2014

Author Member

I meant that the config differs from 2.10: we changed some font paths, included /etc/fonts/2.11/conf.d/, etc. When using /etc/fonts/fonts.conf, you won't get those changes.

This comment has been minimized.

Copy link
@vcunat

vcunat Nov 5, 2014

Author Member

Ah, no, my bad, these changes were shared.

This comment has been minimized.

Copy link
@vcunat

vcunat Nov 5, 2014

Author Member

If some semantics changed in the upstream files, it's likely negligible. That's probably the only difference.

This comment has been minimized.

Copy link
@lucabrunox

lucabrunox Nov 5, 2014

Contributor

Can't understand sorry. In the nixos module you are setting the 2.11 fonts.conf to be the 2.10 fonts.conf. I'm just asking to remove this and let the user define it in case.

This comment has been minimized.

Copy link
@lucabrunox

lucabrunox Nov 5, 2014

Contributor

Sorry, misread ${pkgs.fontconfig}/etc/fonts/fonts.conf with /etc/fonts/fonts.conf

"${pkgs.fontconfig}/etc/fonts/fonts.conf";
environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/00-nixos.conf".text =
''
<?xml version='1.0'?>
Expand Down
28 changes: 28 additions & 0 deletions pkgs/development/libraries/fontconfig/config-compat.patch
@@ -0,0 +1,28 @@
commit 05c6adf8104b4321d3a3716a7b9feb6bf223ed0c (HEAD, nixpkgs)
Author: Vladimír Čunát <vcunat@gmail.com>
Date: Tue Nov 4 12:24:25 2014 +0100

add check for /etc/fonts/@configVersion@/fonts.conf

It's checked between FONTCONFIG_FILE and the usual /etc/fonts/fonts.conf.
Also, hardcode /etc/fonts/fonts.conf to prevent accidental override.

diff --git a/src/fccfg.c b/src/fccfg.c
index 6377fd7..e9eb10a 100644
--- a/src/fccfg.c
+++ b/src/fccfg.c
@@ -2070,8 +2070,13 @@ FcConfigFilename (const FcChar8 *url)
if (!url || !*url)
{
url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
+ if (!url) {
+ static const FcChar8 *cfPath = "/etc/fonts/@configVersion@/fonts.conf";
+ if (access (cfPath, R_OK) == 0)
+ url = cfPath;
+ }
if (!url)
- url = (FcChar8 *) FONTCONFIG_FILE;
+ url = (FcChar8 *) "/etc/fonts/fonts.conf";
}
file = 0;

36 changes: 27 additions & 9 deletions pkgs/development/libraries/fontconfig/default.nix
@@ -1,4 +1,16 @@
{ stdenv, fetchurl, fetchpatch, pkgconfig, freetype, expat, libxslt, fontbhttf }:
{ stdenv, fetchurl, fetchpatch, pkgconfig, freetype, expat, libxslt, fontbhttf
, substituteAll }:

/** Font configuration scheme
- ./config-compat.patch makes fontconfig try the following root configs, in order:
$FONTCONFIG_FILE, /etc/fonts/${configVersion}/fonts.conf, /etc/fonts/fonts.conf
This is done not to override config of pre-2.11 versions (which just blow up)
and still use *global* font configuration at both NixOS or non-NixOS.
- NixOS creates /etc/fonts/${configVersion}/fonts.conf link to $out/etc/fonts/fonts.conf,
and other modifications should go to /etc/fonts/${configVersion}/conf.d
- See ./make-fonts-conf.xsl for config details.
*/

let
configVersion = "2.11"; # bump whenever fontconfig breaks compatibility with older configurations
Expand All @@ -19,17 +31,24 @@ stdenv.mkDerivation rec {
}
;

patches = [(fetchpatch {
url = "http://cgit.freedesktop.org/fontconfig/patch/?id=f44157c809d280e2a0ce87fb078fc4b278d24a67";
sha256 = "19s5irclg4irj2yxd7xw9yikbazs9263px8qbv4r21asw06nfalv";
})];
patches = [
(fetchpatch {
url = "http://cgit.freedesktop.org/fontconfig/patch/?id=f44157c809d280e2a0ce87fb078fc4b278d24a67";
sha256 = "19s5irclg4irj2yxd7xw9yikbazs9263px8qbv4r21asw06nfalv";
})
(substituteAll {
src = ./config-compat.patch;
inherit configVersion;
})
];

propagatedBuildInputs = [ freetype ];
buildInputs = [ pkgconfig libxslt expat ];
buildInputs = [ pkgconfig expat ];

configureFlags = [
"--with-cache-dir=/var/cache/fontconfig"
"--with-cache-dir=/var/cache/fontconfig" # otherwise the fallback is in $out/
"--disable-docs"
# just ~1MB; this is what you get when loading config fails for some reason
"--with-default-fonts=${fontbhttf}"
];

Expand All @@ -49,11 +68,10 @@ stdenv.mkDerivation rec {
# Don't try to write to /var/cache/fontconfig at install time.
installFlags = "fc_cachedir=$(TMPDIR)/dummy RUN_FC_CACHE_TEST=false";

# Add a default font for non-nixos systems. fontbhttf is only about 1mb.
postInstall = ''
cd "$out/etc/fonts" && tar xvf ${infinality_patch}
rm conf.d/{50-user,51-local}.conf
xsltproc --stringparam fontDirectories "${fontbhttf}" \
"${libxslt}/bin/xsltproc" --stringparam fontDirectories "${fontbhttf}" \
--stringparam fontconfig "$out" \
--stringparam fontconfigConfigVersion "${configVersion}" \
--path $out/share/xml/fontconfig \
Expand Down

0 comments on commit c0e2ace

Please sign in to comment.