{ lib , stdenv , fetchFromGitHub , cmake , pkg-config , zlib , curl , elfutils , python3 , libiberty , libopcodes , runCommandCC , rustc }: let self = stdenv.mkDerivation rec { pname = "kcov"; version = "43"; src = fetchFromGitHub { owner = "SimonKagstrom"; repo = "kcov"; rev = "v${version}"; sha256 = "sha256-hRJYuHNSXyRoUDBF/yIPXPcBBxZoTO5cgoB2tBhKPwY="; }; preConfigure = "patchShebangs src/bin-to-c-source.py"; nativeBuildInputs = [ cmake pkg-config python3 ]; buildInputs = [ curl zlib elfutils libiberty libopcodes ]; strictDeps = true; passthru.tests = { works-on-c = runCommandCC "works-on-c" { } '' set -ex cat - > a.c <<EOF int main() {} EOF $CC a.c -o a.out ${self}/bin/kcov /tmp/kcov ./a.out test -e /tmp/kcov/index.html touch $out set +x ''; works-on-rust = runCommandCC "works-on-rust" { nativeBuildInputs = [ rustc ]; } '' set -ex cat - > a.rs <<EOF fn main() {} EOF # Put gcc in the path so that `cc` is found rustc a.rs -o a.out ${self}/bin/kcov /tmp/kcov ./a.out test -e /tmp/kcov/index.html touch $out set +x ''; }; meta = with lib; { description = "Code coverage tester for compiled programs, Python scripts and shell scripts"; longDescription = '' Kcov is a code coverage tester for compiled programs, Python scripts and shell scripts. It allows collecting code coverage information from executables without special command-line arguments, and continuosly produces output from long-running applications. ''; homepage = "http://simonkagstrom.github.io/kcov/index.html"; license = licenses.gpl2; changelog = "https://github.com/SimonKagstrom/kcov/blob/master/ChangeLog"; maintainers = with maintainers; [ gal_bolle ekleog ]; platforms = platforms.linux; }; }; in self