{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, boost, gtest, zlib }:

stdenv.mkDerivation rec {
  pname = "lucene++";
  version = "3.0.8";

  src = fetchFromGitHub {
    owner = "luceneplusplus";
    repo = "LucenePlusPlus";
    rev = "rel_${version}";
    sha256 = "12v7r62f7pqh5h210pb74sfx6h70lj4pgfpva8ya2d55fn0qxrr2";
  };

  nativeBuildInputs = [ cmake ];
  buildInputs = [ boost gtest zlib ];

  cmakeFlags = [ "-DCMAKE_INSTALL_LIBDIR=lib" ];

  patches = [
    (fetchpatch {
      name = "pkgconfig_use_correct_LIBDIR_for_destination_library";
      url = "https://github.com/luceneplusplus/LucenePlusPlus/commit/39cd44bd54e918d25ee464477992ad0dc234dcba.patch";
      sha256 = "sha256-PP6ENNhPJMWrYDlTnr156XV8d5aX/VNX8v4vvi9ZiWo";
    })
    (fetchpatch {
      name = "fix-visibility-on-mac.patch";
      url = "https://github.com/luceneplusplus/LucenePlusPlus/commit/bc436842227aea561b68c6ae89fbd1fdefcac7b3.patch";
      sha256 = "sha256-/S7tFZ4ht5p0cv036xF2NKZQwExbPaGINyWZiUg/lS4=";
    })
  ];

  # Don't use the built in gtest - but the nixpkgs one requires C++14.
  postPatch = ''
    substituteInPlace src/test/CMakeLists.txt \
      --replace "add_subdirectory(gtest)" ""
    substituteInPlace CMakeLists.txt \
      --replace "set(CMAKE_CXX_STANDARD 11)" "set(CMAKE_CXX_STANDARD 14)"
  '';

  doCheck = true;

  checkPhase = ''
    runHook preCheck
    LD_LIBRARY_PATH=$PWD/src/contrib:$PWD/src/core \
            src/test/lucene++-tester
    runHook postCheck
  '';

  postInstall = ''
    mv $out/include/pkgconfig $out/lib/
    cp $src/src/contrib/include/*h $out/include/lucene++/
  '';

  meta = {
    description = "C++ port of the popular Java Lucene search engine";
    homepage = "https://github.com/luceneplusplus/LucenePlusPlus";
    license = with lib.licenses; [ asl20 lgpl3Plus ];
    platforms = lib.platforms.unix;
  };
}
