1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
{ 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.isDarwin ([
Accelerate
] ++ lib.optionals stdenv.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.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 <<EOD
set timeout 60
spawn ./kerf_test
expect {
"Passed" {}
"Failed" { exit 1 }
timeout { exit 1 }
}
expect {
"KeRF> " {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.isLinux && stdenv.isAarch64);
};
}
|