nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 gradle,
6 jre,
7 runtimeShell,
8
9 # Generating the usage instructions for script
10 htmlq,
11 html2text,
12 txt2man,
13}:
14stdenv.mkDerivation (finalAttrs: {
15 pname = "simple-binary-encoding";
16 version = "1.37.0";
17
18 src = fetchFromGitHub {
19 owner = "aeron-io";
20 repo = "simple-binary-encoding";
21 tag = finalAttrs.version;
22 hash = "sha256-vrXs0bZuIToBMDvWT6gp6xp8jcBUslF/6OvJWBnazu0=";
23 };
24
25 nativeBuildInputs = [
26 gradle
27 htmlq
28 html2text
29 txt2man
30 ];
31
32 mitmCache = gradle.fetchDeps {
33 pname = "simple-binary-encoding";
34 pkg = finalAttrs.finalPackage;
35 data = ./deps.json;
36 };
37
38 gradleBuildTask = "build";
39
40 doCheck = true;
41 gradleCheckTask = "runJavaExamples";
42
43 outputs = [
44 "out"
45 "benchmarks"
46 "samples"
47 "tool"
48 ];
49
50 installPhase = ''
51 runHook preInstall
52
53 for output in $outputs; do
54 if [[ "$output" != "out" ]]; then
55 mkdir -p "''${!output}"/share/sbe
56 cp "sbe-$output"/build/libs/*.jar "''${!output}/share/sbe"
57 if [[ -d "sbe-$output"/build/docs/javadoc ]]; then
58 cp -r "sbe-$output"/build/docs/javadoc "''${!output}/share/javadoc"
59 fi
60 fi
61 if [[ "$output" == "tool" ]]; then
62 cp sbe-all/build/libs/*.jar "$tool/share/sbe"
63 fi
64 done
65
66 mkdir -p "$out/"{bin,share/doc,share/man}
67
68 # Generate the usage file from the javadoc
69 shopt -s globstar
70 cat "$tool/share/javadoc"/**/sbe/SbeTool.html \
71 | htmlq '.class-description .block' \
72 | html2text \
73 | sed -e 's/[$] java/$ sbetool/' -e 's/ -jar sbe.jar//' -e 's/System Properties:/Available Options:/' \
74 > "$out/share/doc/sbetool.txt"
75
76 echo >> "$out/share/doc/sbetool.txt"
77 echo "All other arguments will be interpreted by java(1)." >> "$out/share/doc/sbetool.txt"
78
79 # Generate a manpage
80 sed \
81 -e '1i\NAME\nsbetool - ' \
82 -e 's/Usage:/\nSYNOPSIS\n/' \
83 -e 's/Available Options:/\nOPTIONS\n/' \
84 < "$out/share/doc/sbetool.txt" \
85 | txt2man \
86 -P simple-binary-encoding \
87 -t "sbetool" -s1 \
88 -r "$pname $verison" \
89 -v "Simple Binary Encoding" \
90 > "$out/share/man/sbetool.1"
91
92 runtimeShell="${runtimeShell}" java="${lib.getExe jre}" \
93 substituteAll ${./sbetool.sh} "$out/bin/sbetool"
94
95 chmod +x "$out/bin/sbetool"
96
97 runHook postInstall
98 '';
99
100 doInstallCheck = true;
101 installCheckPhase = ''
102 # Check that we have some usage documentation
103 "$out"/bin/sbetool --help 2>&1 | grep -q Usage
104
105 # Check that the script can pass arguments to the underlying jar
106 tmpdir="$(mktemp -d)"
107 "$out"/bin/sbetool \
108 sbe-tool/src/test/resources/example-schema.xml \
109 -Dsbe.target.language=golang \
110 -Dsbe.output.dir="$tmpdir"
111 find "$tmpdir/baseline" | grep -q '.*[.]go'
112
113 # Check that -- passes as files
114 tmpdir="$(mktemp -d)"
115 cp sbe-tool/src/test/resources/example-schema.xml -- -e.xml
116 "$out"/bin/sbetool \
117 -Dsbe.target.language=golang \
118 -Dsbe.output.dir="$tmpdir" \
119 -- \
120 -e.xml
121 find "$tmpdir/baseline" | grep -q '.*[.]go'
122 '';
123
124 passthru.updateScript = ./update.sh;
125
126 meta = {
127 homepage = "https://github.com/aeron-io/simple-binary-encoding";
128 license = lib.licenses.asl20;
129 maintainers = with lib.maintainers; [ balsoft ];
130 description = "OSI layer 6 presentation for encoding and decoding binary application messages for low-latency financial applications";
131 };
132})