{ lib, stdenv, fetchFromGitHub , useCoefficients ? false , indicateProgress ? false , useGoogleHashmap ? false, sparsehash ? null , fileFormat ? "lowerTriangularCsv" }: assert lib.assertOneOf "fileFormat" fileFormat ["lowerTriangularCsv" "upperTriangularCsv" "dipha"]; assert useGoogleHashmap -> sparsehash != null; let version = "1.2.1"; in stdenv.mkDerivation { pname = "ripser"; inherit version; src = fetchFromGitHub { owner = "Ripser"; repo = "ripser"; rev = "v${version}"; sha256 = "sha256-BxmkPQ/nl5cF+xwQMTjXnLgkLgdmT/39y7Kzl2wDfpE="; }; buildInputs = lib.optional useGoogleHashmap sparsehash; buildFlags = [ "-std=c++11" "-O3" "-D NDEBUG" ] ++ lib.optional useCoefficients "-D USE_COEFFICIENTS" ++ lib.optional indicateProgress "-D INDICATE_PROGRESS" ++ lib.optional useGoogleHashmap "-D USE_GOOGLE_HASHMAP" ++ lib.optional (fileFormat == "lowerTriangularCsv") "-D FILE_FORMAT_LOWER_TRIANGULAR_CSV" ++ lib.optional (fileFormat == "upperTriangularCsv") "-D FILE_FORMAT_UPPER_TRIANGULAR_CSV" ++ lib.optional (fileFormat == "dipha") "-D FILE_FORMAT_DIPHA" ; buildPhase = "c++ ripser.cpp -o ripser $buildFlags"; installPhase = '' mkdir -p $out/bin cp ripser $out/bin ''; meta = { description = "Lean C++ code for the computation of Vietoris–Rips persistence barcodes"; mainProgram = "ripser"; homepage = "https://github.com/Ripser/ripser"; license = lib.licenses.lgpl3; maintainers = with lib.maintainers; [erikryb]; platforms = lib.platforms.linux; }; }