107 lines
2.2 KiB
Nix
107 lines
2.2 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[@]}"
|
|
|
|
# Skip "Totals" and "Function Coverage", get "Line Coverage"
|
|
TOTAL_COVERAGE="$(
|
|
htmlq 'td > pre' <coverage-html/index.html \
|
|
| sed -e '0,/^<pre>Totals<\/pre>$/d' \
|
|
| sed -n -e '2,1p' \
|
|
| sed -e 's/<pre>[[:space:]]*//' \
|
|
| sed -e 's/%.*$/%/'
|
|
)"
|
|
|
|
if [[ "$TOTAL_COVERAGE" == *% ]]; then
|
|
COVERAGE_VALUE="$(printf "%.0f" "''${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";
|
|
};
|
|
}
|