summaryrefslogtreecommitdiffstats
path: root/pkgs/development/libraries/fontconfig/make-fonts-cache.nix
blob: 9351a51792260c1f5dc71f32018b548c595d252e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
  buildPackages,
  writeText,
  fontconfig,
  lib,
  runCommand,
  stdenv,
}:
let
  fontconfig' = fontconfig;
in
{
  fontconfig ? fontconfig',
  fontDirectories,
}:

let
  fontDirsPath = writeText "font-dirs" ''
    <!-- Font directories -->
    ${lib.concatStringsSep "\n" (map (font: "<dir>${font}</dir>") fontDirectories)}
  '';
in
runCommand "fc-cache"
  {
    preferLocalBuild = true;
    allowSubstitutes = false;
  }
  ''
    export FONTCONFIG_FILE=$(pwd)/fonts.conf

    cat > fonts.conf << EOF
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'urn:fontconfig:fonts.dtd'>
    <fontconfig>
      <include>${fontconfig.out}/etc/fonts/fonts.conf</include>
      <cachedir>$out</cachedir>
    EOF
    cat "${fontDirsPath}" >> fonts.conf
    echo "</fontconfig>" >> fonts.conf

    # N.B.: fc-cache keys its cache entries by architecture.
    # We must invoke the host `fc-cache` (not the build fontconfig) if we want
    # the cache to be usable by the host.
    mkdir -p $out
    ${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe' fontconfig "fc-cache"} -sv

    # This is not a cache dir in the normal sense -- it won't be automatically
    # recreated.
    rm -f "$out/CACHEDIR.TAG"
  ''