summary refs log tree commit diff
path: root/pkgs/development/tools/analysis/kcov/default.nix
blob: a708c88ee9eebe1a3e5dff6983306ff4b8c77053 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{ lib
, stdenv
, fetchFromGitHub
, cmake
, pkg-config
, zlib
, curl
, elfutils
, python3
, libiberty
, libopcodes
, runCommand
, gcc
, rustc
}:

let
  self =
    stdenv.mkDerivation rec {
      pname = "kcov";
      version = "38";

      src = fetchFromGitHub {
        owner = "SimonKagstrom";
        repo = "kcov";
        rev = "v${version}";
        sha256 = "sha256-6LoIo2/yMUz8qIpwJVcA3qZjjF+8KEM1MyHuyHsQD38=";
      };

      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 = runCommand "works-on-c" {} ''
          set -ex
          cat - > a.c <<EOF
          int main() {}
          EOF
          ${gcc}/bin/gcc 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 = runCommand "works-on-rust" {} ''
          set -ex
          cat - > a.rs <<EOF
          fn main() {}
          EOF
          # Put gcc in the path so that `cc` is found
          PATH=${gcc}/bin:$PATH ${rustc}/bin/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