about summary refs log tree commit diff
path: root/pkgs/development/libraries/fontconfig
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2014-11-04 13:49:22 +0100
committerVladimír Čunát <vcunat@gmail.com>2014-11-05 12:12:30 +0100
commitc0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d (patch)
treec5406d4d167a91422d1cd280d4766a6f0a5b1213 /pkgs/development/libraries/fontconfig
parentdcd2590c98725f8d519605ac6f731073fee372ef (diff)
downloadnixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar.gz
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar.bz2
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar.lz
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar.xz
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.tar.zst
nixlib-c0e2aceef46033e43ab8b4f6aa0b36b25ba35f3d.zip
fontconfig: patch and document
Diffstat (limited to 'pkgs/development/libraries/fontconfig')
-rw-r--r--pkgs/development/libraries/fontconfig/config-compat.patch28
-rw-r--r--pkgs/development/libraries/fontconfig/default.nix36
2 files changed, 55 insertions, 9 deletions
diff --git a/pkgs/development/libraries/fontconfig/config-compat.patch b/pkgs/development/libraries/fontconfig/config-compat.patch
new file mode 100644
index 000000000000..e86f08fb553c
--- /dev/null
+++ b/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;
+ 
diff --git a/pkgs/development/libraries/fontconfig/default.nix b/pkgs/development/libraries/fontconfig/default.nix
index d98402e22354..72906232eff9 100644
--- a/pkgs/development/libraries/fontconfig/default.nix
+++ b/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
@@ -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}"
   ];
 
@@ -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 \