{ lib, stdenv, fetchFromGitHub , libedit, zlib, ncurses, expect # darwin only below , Accelerate, CoreGraphics, CoreVideo }: stdenv.mkDerivation rec { pname = "kerf"; version = "unstable-2022-08-05"; src = fetchFromGitHub { owner = "kevinlawler"; repo = "kerf1"; rev = "4ec5b592b310b96d33654d20d6a511e6fffc0f9d"; hash = "sha256-0sU2zOk5I69lQyrn1g0qsae7S/IBT6eA/911qp0GNkk="; }; sourceRoot = "${src.name}/src"; buildInputs = [ libedit zlib ncurses ] ++ lib.optionals stdenv.hostPlatform.isDarwin ([ Accelerate ] ++ lib.optionals stdenv.hostPlatform.isx86_64 /* && isDarwin */ [ CoreGraphics CoreVideo ]); nativeCheckInputs = [ expect ]; doCheck = true; makeFlags = [ "kerf" "kerf_test" ]; # avoid a huge amount of warnings to make failures clearer env.NIX_CFLAGS_COMPILE = toString (map (x: "-Wno-${x}") [ "void-pointer-to-int-cast" "format" "implicit-function-declaration" "gnu-variable-sized-type-not-at-end" "unused-result" ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ "-fcommon" ]); patchPhase = '' substituteInPlace ./Makefile \ --replace 'CPUS ?=' 'CPUS = $(NIX_BUILD_CORES) #' \ --replace 'termcap' 'ncurses' ''; # the kerf executable uses ncurses to create a fancy terminal for input and # reads terminal keystrokes directly, so it doesn't read from stdin as # expected, hence why we use this fancy expect script to run the test exe and # send 'quit' to the prompt after it finishes. checkPhase = '' expect < " {send "quit\r"} timeout { exit 1 } } expect { "\[DEBUG\] OK: Done OK." {} "\[DEBUG\] FAILED: Debug failure." { exit 1 } timeout { exit 1 } } exit 0 EOD ''; installPhase = "install -D kerf $out/bin/kerf"; meta = with lib; { description = "Columnar tick database and time-series language"; mainProgram = "kerf"; longDescription = '' Kerf is a columnar tick database and small programming language that is a superset of JSON and SQL. It can be used for local analytics, timeseries, logfile processing, and more. ''; license = with licenses; [ bsd2 ]; homepage = "https://github.com/kevinlawler/kerf1"; platforms = platforms.unix; maintainers = with maintainers; [ thoughtpolice ]; # aarch64-linux seems hopeless, with over 2,000 warnings # generated? broken = (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64); }; }