{ stdenv, lib, fetchurl, skawarePackages }:

let
  pname = "fdtools";
  # When you update, check whether we can drop the skalibs pin.
  version = "2020.05.04";
  sha256 = "0lnafcp4yipi0dl8gh33zjs8wlpz0mim8mwmiz9s49id0b0fmlla";
  skalibs = skawarePackages.skalibs_2_10;

in stdenv.mkDerivation {
  inherit pname version;

  src = fetchurl {
    url = "https://code.dogmap.org/${pname}/releases/${pname}-${version}.tar.bz2";
    inherit sha256;
  };

  patches = [ ./new-skalibs.patch ];
  outputs = [ "bin" "lib" "dev" "doc" "out" ];

  buildInputs = [
    # temporary, until fdtools catches up to skalibs
    skalibs
  ];

  configurePhase = ''
    cd ${pname}-${version}
    sed -e 's|gcc|$CC|' \
      conf-compile/defaults/host_link.sh \
      > conf-compile/host_link.sh
    sed -e 's|gcc|$CC|' \
      conf-compile/defaults/host_compile.sh \
      > conf-compile/host_compile.sh

    echo "${skalibs.lib}/lib/skalibs/sysdeps" \
      > conf-compile/depend_skalibs_sysdeps
  '';

  buildPhase = ''
    bash package/build
  '';

  installPhase = ''
    mkdir -p $bin/bin
    tools=( grabconsole multitee pipecycle recvfd seek0 sendfd setblock setstate statfile vc-get vc-lock vc-switch )

    for t in "''${tools[@]}"; do
      mv "command/$t" "$bin/bin/$t"
    done

    mkdir -p $lib/lib
    mkdir -p $dev/include
    docdir=$doc/share/doc/${pname}
    mkdir -p $docdir

    mv library/fdtools.a $lib/lib/fdtools.a
    mv include/fdtools.h $dev/include/fdtools.h

    ${skawarePackages.cleanPackaging.commonFileActions {
       noiseFiles = [
         "conf-compile/**/*"
         "src/**/*"
         "src/.**/*"
         "compile/**/*"
         "package/{build,check,compile,elsewhere,install,install_commands,own,run,sharing,upgrade,upgrade_version,url_src,url_src_latest,versions}"
       ];
       docFiles = [
         "package/INSTALL"
         "package/LICENSE"
         "package/README"
       ];
    }} $docdir

    ${skawarePackages.cleanPackaging.checkForRemainingFiles}

    # we donâ€™t use this, but nixpkgs requires it
    touch $out
  '';

  meta = {
    homepage = "https://code.dogmap.org/fdtools/";
    description = "Set of utilities for working with file descriptors";
    license = lib.licenses.gpl2Only;
    platforms = lib.platforms.linux;
    maintainers = [ lib.maintainers.Profpatsch ];
  };
}
