{
  stdenv,
  lib,
  fetchurl,
  pkg-config,
  python3,
  freetype,
  expat,
  libxslt,
  gperf,
  dejavu_fonts,
  autoreconfHook,
  CoreFoundation,
# for passthru.tests
# , testers
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "fontconfig";
  version = "2.15.0";

  outputs = [
    "bin"
    "dev"
    "lib"
    "out"
  ]; # $out contains all the config

  src = fetchurl {
    url =
      with finalAttrs;
      "https://www.freedesktop.org/software/fontconfig/release/${pname}-${version}.tar.xz";
    hash = "sha256-Y6BljQ4G4PqIYQZFK1jvBPIfWCAuoCqUw53g0zNdfA4=";
  };

  nativeBuildInputs = [
    autoreconfHook
    gperf
    libxslt
    pkg-config
    python3
  ];

  buildInputs = [ expat ] ++ lib.optional stdenv.isDarwin CoreFoundation;

  propagatedBuildInputs = [ freetype ];

  postPatch = ''
    # Requires networking.
    sed -i '/check_PROGRAMS += test-crbug1004254/d' test/Makefile.am
  '';

  configureFlags =
    [
      "--sysconfdir=/etc"
      "--with-arch=${stdenv.hostPlatform.parsed.cpu.name}"
      "--with-cache-dir=/var/cache/fontconfig" # otherwise the fallback is in $out/
      # just <1MB; this is what you get when loading config fails for some reason
      "--with-default-fonts=${dejavu_fonts.minimal}"
    ]
    ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
      "--with-arch=${stdenv.hostPlatform.parsed.cpu.name}"
    ];

  enableParallelBuilding = true;

  doCheck = true;

  installFlags = [
    # Don't try to write to /var/cache/fontconfig at install time.
    "fc_cachedir=$(TMPDIR)/dummy"
    "RUN_FC_CACHE_TEST=false"
    "sysconfdir=${placeholder "out"}/etc"
  ];

  postInstall = ''
    cd "$out/etc/fonts"
    xsltproc --stringparam fontDirectories "${dejavu_fonts.minimal}" \
      --path $out/share/xml/fontconfig \
      ${./make-fonts-conf.xsl} $out/etc/fonts/fonts.conf \
      > fonts.conf.tmp
    mv fonts.conf.tmp $out/etc/fonts/fonts.conf
    # We don't keep section 3 of the manpages, as they are quite large and
    # probably not so useful.
    rm -r $bin/share/man/man3
  '';

  # passthru.tests = {
  #   pkg-config = testers.hasPkgConfigModules {
  #     package = finalAttrs.finalPackage;
  #   };
  # };

  meta = with lib; {
    description = "A library for font customization and configuration";
    homepage = "http://fontconfig.org/";
    license = licenses.bsd2; # custom but very bsd-like
    platforms = platforms.all;
    maintainers = with maintainers; [ ];
    pkgConfigModules = [ "fontconfig" ];
  };
})