Files
where-are-my-friends/nix/coverage-html.nix
T

105 lines
2.1 KiB
Nix

{
lib,
src,
stdenv,
cmocka,
libllvm,
pkg-config,
htmlq,
anybadge,
}:
stdenv.mkDerivation {
pname = "where-are-my-friends-coverage-html";
version = "0.1.0";
inherit src;
makeFlags = [
"prefix=$(out)"
"CC=${stdenv.cc.targetPrefix}cc"
];
hardeningDisable = [ "fortify" ];
env = {
CMOCKA_MESSAGE_OUTPUT = "XML";
LLVM_PROFILE_FILE = "output/prof/wamf-%p-%m.profraw";
};
nativeBuildInputs = [
pkg-config
libllvm
htmlq
anybadge
];
buildInputs = [ cmocka ];
buildPhase = ''
runHook preBuild
mkdir -p "$(dirname "$LLVM_PROFILE_FILE")"
make check
llvm-profdata merge -sparse output/prof/wamf-*.profraw -o wamf.profdata
LLVM_COV_ARGS=(
-format=html
-output-dir=coverage-html
-instr-profile=wamf.profdata
-object=output/test/test
# -show-line-counts-or-regions
# -show-expansions
# -show-instantiations
-use-color
-Xdemangler=c++filt
-ignore-filename-regex='.*(test/).*'
-ignore-filename-regex='.*\.h'
-compilation-dir=.
)
llvm-cov show "''${LLVM_COV_ARGS[@]}"
TOTAL_COVERAGE="$(
htmlq 'td > pre' <coverage-html/index.html \
| sed '0,/^<pre>Totals<\/pre>$/d' \
| head -n 1 \
| sed -e 's/<pre>[[:space:]]*//' -e 's/%.*$/%/' \
)"
if [[ "$TOTAL_COVERAGE" == *% ]]; then
COVERAGE_VALUE="''${TOTAL_COVERAGE%\%}"
if [[ "$COVERAGE_VALUE" -ge 80 ]]; then
COLOR="green"
elif [[ "$COVERAGE_VALUE" -ge 50 ]]; then
COLOR="yellow"
else
COLOR="red"
fi
else
COLOR="lightgrey"
fi
anybadge --label "coverage" --value "$TOTAL_COVERAGE" --color "$COLOR" > coverage-html/coverage.svg
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$(dirname "$out")"
cp -r coverage-html "$out"
runHook postInstall
'';
doCheck = false;
meta = {
description = "RCON -> Bluemap player position API converter";
homepage = "https://git.pvv.ntnu.no/Projects/where-are-my-friends";
platforms = lib.platforms.unix;
mainProgram = "wamf";
};
}