Files
2026-04-24 13:11:34 +02:00

133 lines
3.4 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
gradle,
jre,
runtimeShell,
# Generating the usage instructions for script
htmlq,
html2text,
txt2man,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "simple-binary-encoding";
version = "1.37.1";
src = fetchFromGitHub {
owner = "aeron-io";
repo = "simple-binary-encoding";
tag = finalAttrs.version;
hash = "sha256-BYS1rkNPuECEs4Cjt8revUOcd/tCUUghR9JmYMfwqUw=";
};
nativeBuildInputs = [
gradle
htmlq
html2text
txt2man
];
mitmCache = gradle.fetchDeps {
pname = "simple-binary-encoding";
pkg = finalAttrs.finalPackage;
data = ./deps.json;
};
gradleBuildTask = "build";
doCheck = true;
gradleCheckTask = "runJavaExamples";
outputs = [
"out"
"benchmarks"
"samples"
"tool"
];
installPhase = ''
runHook preInstall
for output in $outputs; do
if [[ "$output" != "out" ]]; then
mkdir -p "''${!output}"/share/sbe
cp "sbe-$output"/build/libs/*.jar "''${!output}/share/sbe"
if [[ -d "sbe-$output"/build/docs/javadoc ]]; then
cp -r "sbe-$output"/build/docs/javadoc "''${!output}/share/javadoc"
fi
fi
if [[ "$output" == "tool" ]]; then
cp sbe-all/build/libs/*.jar "$tool/share/sbe"
fi
done
mkdir -p "$out/"{bin,share/doc,share/man}
# Generate the usage file from the javadoc
shopt -s globstar
cat "$tool/share/javadoc"/**/sbe/SbeTool.html \
| htmlq '.class-description .block' \
| html2text \
| sed -e 's/[$] java/$ sbetool/' -e 's/ -jar sbe.jar//' -e 's/System Properties:/Available Options:/' \
> "$out/share/doc/sbetool.txt"
echo >> "$out/share/doc/sbetool.txt"
echo "All other arguments will be interpreted by java(1)." >> "$out/share/doc/sbetool.txt"
# Generate a manpage
sed \
-e '1i\NAME\nsbetool - ' \
-e 's/Usage:/\nSYNOPSIS\n/' \
-e 's/Available Options:/\nOPTIONS\n/' \
< "$out/share/doc/sbetool.txt" \
| txt2man \
-P simple-binary-encoding \
-t "sbetool" -s1 \
-r "$pname $verison" \
-v "Simple Binary Encoding" \
> "$out/share/man/sbetool.1"
runtimeShell="${runtimeShell}" java="${lib.getExe jre}" \
substituteAll ${./sbetool.sh} "$out/bin/sbetool"
chmod +x "$out/bin/sbetool"
runHook postInstall
'';
doInstallCheck = true;
installCheckPhase = ''
# Check that we have some usage documentation
"$out"/bin/sbetool --help 2>&1 | grep -q Usage
# Check that the script can pass arguments to the underlying jar
tmpdir="$(mktemp -d)"
"$out"/bin/sbetool \
sbe-tool/src/test/resources/example-schema.xml \
-Dsbe.target.language=golang \
-Dsbe.output.dir="$tmpdir"
find "$tmpdir/baseline" | grep -q '.*[.]go'
# Check that -- passes as files
tmpdir="$(mktemp -d)"
cp sbe-tool/src/test/resources/example-schema.xml -- -e.xml
"$out"/bin/sbetool \
-Dsbe.target.language=golang \
-Dsbe.output.dir="$tmpdir" \
-- \
-e.xml
find "$tmpdir/baseline" | grep -q '.*[.]go'
'';
passthru.updateScript = ./update.sh;
meta = {
homepage = "https://github.com/aeron-io/simple-binary-encoding";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ balsoft ];
description = "OSI layer 6 presentation for encoding and decoding binary application messages for low-latency financial applications";
};
})