{ stdenv, systemd, cryptsetup }:

assert stdenv.isLinux;

stdenv.lib.overrideDerivation systemd (p: {
  version = p.version;
  name = "systemd-cryptsetup-generator";

  nativeBuildInputs = p.nativeBuildInputs ++ [ cryptsetup ];
  outputs = [ "out" ];

  buildPhase = ''
    make $makeFlags built-sources
    make $makeFlags systemd-cryptsetup
    make $makeFlags systemd-cryptsetup-generator
  '';

  # For some reason systemd-cryptsetup-generator is a wrapper-script
  # with the current release of systemd. We want the real one.

  # TODO: Revert 3efadce when the wrapper-script is gone
  installPhase = ''
    mkdir -p $out/lib/systemd/
    cp systemd-cryptsetup $out/lib/systemd/systemd-cryptsetup
    cp .libs/*.so $out/lib/

    mkdir -p $out/lib/systemd/system-generators/
    cp .libs/systemd-cryptsetup-generator $out/lib/systemd/system-generators/systemd-cryptsetup-generator
  '';
})
