{ lib, stdenv, fetchurl, fetchpatch
, libtool, bison, groff, ghostscript, gettext
, acl, libcap, lsof }:
stdenv.mkDerivation rec {
  pname = "explain";
  version = "1.4";

  src = fetchurl {
    url = "mirror://sourceforge/libexplain/libexplain-${version}.tar.gz";
    hash = "sha256-KIY7ZezMdJNOI3ysQTZMs8GALDbJ4jGO0EF0YP7oP4A=";
  };

  patches = let
    debian-src = "https://sources.debian.org/data/main";
    debian-ver = "${version}.D001-12";
    debian-patch = fname: hash: fetchpatch {
      name = fname;
      url = "${debian-src}/libe/libexplain/${debian-ver}/debian/patches/${fname}";
      hash = hash;
    };
  in [
    (debian-patch "sanitize-bison.patch"
      "sha256-gU6JG32j2yIOwehZTUSvIr4TSDdlg+p1U3bhfZHMEDY=")
    (debian-patch "03_fsflags-4.5.patch"
      "sha256-ML7Qvf85vEBp+iwm6PSosMAn/frYdEOSHRToEggmR8M=")
    (debian-patch "linux5.11.patch"
      "sha256-N7WwnTfwOxBfIiKntcFOqHTH9r2gd7NMEzic7szzR+Y=")
    (debian-patch "termiox-no-more-exists-since-kernel-5.12.patch"
      "sha256-cocgEYKoDMDnGk9VNQDtgoVxMGnnNpdae0hzgUlacOw=")
    (debian-patch "gcc-10.patch"
      "sha256-YNcYGyOOqPUuwpUpXGcR7zsWbepVg8SAqcVKlxENSQk=")
  ];

  nativeBuildInputs = [ libtool bison groff ghostscript gettext ];
  buildInputs = [ acl libcap lsof ];

  outputs = [ "bin" "dev" "out" "man" "doc" ];

  meta = with lib; {
    description = "Library and utility to explain system call errors";
    mainProgram = "explain";
    homepage = "https://libexplain.sourceforge.net";
    license = licenses.lgpl3Plus;
    maintainers = with maintainers; [ McSinyx ];
    platforms = platforms.unix;
    # never built on aarch64-linux since first introduction in nixpkgs
    broken = stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64;
  };
}
