{ lib, stdenv, fetchFromGitHub, fetchpatch, gnulib, perl, autoconf, automake }:

stdenv.mkDerivation rec {
  pname = "lbzip2";
  version = "2.5";

  src = fetchFromGitHub {
    owner = "kjn";
    repo = "lbzip2";
    rev = "v${version}";
    sha256 = "1h321wva6fp6khz6x0i6rqb76xh327nw6v5jhgjpcckwdarj5jv8";
  };

  patches = [
    # This avoids an implicit function declaration when building gnulib's
    # xmalloc.c, addressing a build failure with future compiler version.
    # https://github.com/kjn/lbzip2/pull/33
    (fetchpatch {
      name = "GNULIB_XALLOC_DIE.patch";
      url = "https://github.com/kjn/lbzip2/commit/32b5167940ec817e454431956040734af405a9de.patch";
      hash = "sha256-YNgmkh4bksIq5kBgZP+8o97aMm9CzFZldfUW6L5DGXk=";
    })
  ];

  buildInputs = [ gnulib perl ];
  nativeBuildInputs = [ autoconf automake ];

  preConfigure = ''
    substituteInPlace configure.ac --replace 'AC_PREREQ([2.63])' 'AC_PREREQ(2.64)'
    ./build-aux/autogen.sh
  '';

  meta = with lib; {
    homepage = "https://github.com/kjn/lbzip2"; # Formerly http://lbzip2.org/
    description = "Parallel bzip2 compression utility";
    license = licenses.gpl3;
    maintainers = with maintainers; [ abbradar ];
    platforms = platforms.unix;
  };
}
