about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/analysis/kcov/default.nix
blob: 473dc9d7a4bb15178c52abca0a750eab8bd94185 (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
{ lib
, stdenv
, fetchFromGitHub
, cmake
, pkg-config
, zlib
, curl
, elfutils
, python3
, libiberty
, libopcodes
, runCommandCC
, rustc
}:

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

      src = fetchFromGitHub {
        owner = "SimonKagstrom";
        repo = "kcov";
        rev = "v${version}";
        sha256 = "sha256-8/182RjuNuyFzSyCgyyximGaveDyhStwIQg29S5U/pI=";
      };

      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