{
  runCommand,
  pkg-config,
  gdk-pixbuf,
  lib,
  stdenv,
  buildPackages,
}:

{
  extraLoaders,
}:

let
  # Get packages to generate the cache for. We always include gdk-pixbuf.
  loaderPackages = [
    gdk-pixbuf
  ] ++ extraLoaders;
in

# Generate the cache file by running gdk-pixbuf-query-loaders for each
# package and concatenating the results.
runCommand "gdk-pixbuf-loaders.cache" {
  preferLocalBuild = true;
} ''
  (
    for package in ${lib.escapeShellArgs loaderPackages}; do
      module_dir="$package/${gdk-pixbuf.moduleDir}"
      if [[ ! -d "$module_dir" ]]; then
        echo "Error: gdkPixbufCacheBuilder: Passed package â€œ''${package}â€� does not contain GdkPixbuf loaders in â€œ${gdk-pixbuf.moduleDir}â€�." 1>&2
        exit 1
      fi
      GDK_PIXBUF_MODULEDIR="$module_dir" \
        ${stdenv.hostPlatform.emulator buildPackages} ${gdk-pixbuf.dev}/bin/gdk-pixbuf-query-loaders
    done
  ) > "$out"
''
