{lib, mkCoqDerivation, coq, python27, version ? null }:

with lib; mkCoqDerivation rec {
  pname = "fiat";
  owner = "mit-plv";
  repo = "fiat";
  displayVersion = { fiat = v: "unstable-${v}"; };
  inherit version;
  defaultVersion = if coq.coq-version == "8.5" then "2016-10-24" else null;
  release."2016-10-24".rev    = "7feb6c64be9ebcc05924ec58fe1463e73ec8206a";
  release."2016-10-24".sha256 = "16y57vibq3f5i5avgj80f4i3aw46wdwzx36k5d3pf3qk17qrlrdi";

  mlPlugin = true;
  buildInputs = [ python27 ];

  prePatch = "patchShebangs etc/coq-scripts";

  doCheck = false;

  enableParallelBuilding = false;
  buildPhase = "make -j$NIX_BUILD_CORES";

  installPhase = ''
    COQLIB=$out/lib/coq/${coq.coq-version}/
    mkdir -p $COQLIB/user-contrib/Fiat
    cp -pR src/* $COQLIB/user-contrib/Fiat
  '';

  meta = {
    homepage = "http://plv.csail.mit.edu/fiat/";
    description = "A library for the Coq proof assistant for synthesizing efficient correct-by-construction programs from declarative specifications";
    maintainers = with maintainers; [ jwiegley ];
  };
}
