{ lib, stdenv, fetchurl, autoreconfHook, subversion, fuse, apr, perl }:

stdenv.mkDerivation rec {
  pname = "svnfs";
  version = "0.4";

  src = fetchurl {
    url = "http://www.jmadden.eu/wp-content/uploads/svnfs/svnfs-${version}.tgz";
    sha256 = "1lrzjr0812lrnkkwk60bws9k1hq2iibphm0nhqyv26axdsygkfky";
  };

  nativeBuildInputs = [ autoreconfHook ];
  buildInputs = [ subversion fuse apr perl ];

  # autoconf's AC_CHECK_HEADERS and AC_CHECK_LIBS fail to detect libfuse on
  # Darwin if FUSE_USE_VERSION isn't set at configure time.
  #
  # NOTE: Make sure the value of FUSE_USE_VERSION specified here matches the
  # actual version used in the source code:
  #
  #     $ tar xf "$(nix-build -A svnfs.src)"
  #     $ grep -R FUSE_USE_VERSION
  configureFlags = lib.optionals stdenv.isDarwin [ "CFLAGS=-DFUSE_USE_VERSION=25" ];

  # why is this required?
  preConfigure=''
    export LD_LIBRARY_PATH=${subversion.out}/lib
  '';

  # -fcommon: workaround build failure on -fno-common toolchains like upstream
  # gcc-10. Otherwise build fails as:
  #   ld: svnclient.o:/build/svnfs-0.4/src/svnfs.h:40: multiple definition of
  #     `dirbuf'; svnfs.o:/build/svnfs-0.4/src/svnfs.h:40: first defined here
  env.NIX_CFLAGS_COMPILE = "-I ${subversion.dev}/include/subversion-1 -fcommon";
  NIX_LDFLAGS="-lsvn_client-1 -lsvn_subr-1";

  meta = {
    description = "FUSE filesystem for accessing Subversion repositories";
    homepage = "https://www.jmadden.eu/index.php/svnfs/";
    license = lib.licenses.gpl2Only;
    maintainers = [lib.maintainers.marcweber];
    platforms = lib.platforms.unix;
    mainProgram = "svnfs";
  };
}
