{ lib, stdenv, fetchFromGitHub, cmake, openssl, sqlite, pkg-config
, systemd, tlsSupport ? false }:

assert tlsSupport -> openssl != null;

stdenv.mkDerivation rec {
  pname = "uhub";
  version = "unstable-2019-12-13";

  src = fetchFromGitHub {
    owner = "janvidar";
    repo = "uhub";
    rev = "35d8088b447527f56609b85b444bd0b10cd67b5c";
    hash = "sha256-CdTTf82opnpjd7I9TTY+JDEZSfdGFPE0bq/xsafwm/w=";
  };

  nativeBuildInputs = [ cmake pkg-config ];
  buildInputs = [ sqlite systemd ] ++ lib.optional tlsSupport openssl;

  postPatch = ''
    substituteInPlace CMakeLists.txt \
      --replace "/usr/lib/uhub/" "$out/plugins" \
      --replace "/etc/uhub" "$TMPDIR"
  '';

  cmakeFlags = [
    "-DSYSTEMD_SUPPORT=ON"
    "-DSSL_SUPPORT=${if tlsSupport then "ON" else "OFF"}"
  ];

  meta = with lib; {
    description = "High performance peer-to-peer hub for the ADC network";
    homepage = "https://www.uhub.org/";
    license = licenses.gpl3;
    maintainers = [ maintainers.ehmry ];
    platforms = platforms.unix;
  };
}
