{ lib, stdenv, fetchFromGitHub, runCommand, inflow, diffutils }: stdenv.mkDerivation rec { pname = "inflow"; version = "1.0.1"; src = fetchFromGitHub { owner = "stephen-huan"; repo = "inflow"; rev = "v${version}"; sha256 = "sha256-xKUqkrPwITai8g6U1NiNieAip/AzISgFfFtvR30hLNk="; }; buildPhase = '' runHook preBuild $CXX -Wall -Wpedantic -Wextra -O3 -o inflow inflow.cpp runHook postBuild ''; installPhase = '' runHook preInstall install -Dm755 inflow -t $out/bin runHook postInstall ''; passthru.tests = { reflowWithLineLength = runCommand "${pname}-test" { nativeBuildInputs = [ inflow ]; buildInputs = [ diffutils ]; } '' cat < input.txt xxxxx xxx xxx xxxx xxxxxxxxx xx x xxxxxxxxx x xxxx xxxx xxxxxxx xxxxxxxx xxx xxxxxxxxx xxxxxxxx xx xx xxxxx xxxxx xxxx xx x xxxx xx xxxxxxxx xxxxxxxx xxxx xxx xxxx xxxx xxx xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx xxx xxxxx xx xxxx x xxxx xxxxxxxx xxxx xxxx xx xxxxx xxxx xxxxx xxxx xxxxxxxxx xxx xxxxxxxxxxx xxxxxx xxx xxxxxxxxx xxxx xxxx xx x xx xxxx xxx xxxx xx xxx xxx xxxxxxxxxxx xxxx xxxxx x xxxxx xxxxxxx xxxxxxx xx xx xxxxxx xx xxxxx EOF inflow 72 < input.txt > actual.txt cat < expected.txt xxxxx xxx xxx xxxx xxxxxxxxx xx x xxxxxxxxx x xxxx xxxx xxxxxxx xxxxxxxx xxx xxxxxxxxx xxxxxxxx xx xx xxxxx xxxxx xxxx xx x xxxx xx xxxxxxxx xxxxxxxx xxxx xxx xxxx xxxx xxx xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx xxx xxxxx xx xxxx x xxxx xxxxxxxx xxxx xxxx xx xxxxx xxxx xxxxx xxxx xxxxxxxxx xxx xxxxxxxxxxx xxxxxx xxx xxxxxxxxx xxxx xxxx xx x xx xxxx xxx xxxx xx xxx xxx xxxxxxxxxxx xxxx xxxxx x xxxxx xxxxxxx xxxxxxx xx xx xxxxxx xx xxxxx EOF if ! cmp --silent expected.txt actual.txt then echo "Error: actual.txt and expected.txt are different" diff actual.txt expected.txt exit 1 fi touch $out ''; }; meta = with lib; { description = "Variance-optimal paragraph formatter"; homepage = "https://github.com/stephen-huan/inflow"; license = licenses.unlicense; mainProgram = "inflow"; maintainers = with maintainers; [ fbrs ]; platforms = platforms.all; }; }