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
{pkgs ? import <unstable> {}}:
let
  to-compare = {
    lattice-lib = {
      src = fetchTarball http://people.irisa.fr/David.Pichardie/ext/lattice/all.tgz;
      pre = "true";
      langs = ["Coq"];
    };
    value-analysis = {
      src = fetchTarball http://www.irisa.fr/celtique/ext/value-analysis/value-analysis.tgz;
      pre = "cd vanalysis";
      langs = ["Coq"];
    };
    jvm-iflow = {
      src = fetchTarball http://people.irisa.fr/David.Pichardie/ext/iflow/jvm_iflow_coq.tgz;
      pre = "true";
      langs = ["Coq"];
    };
    verasco = {
      src = fetchTarball http://compcert.inria.fr/verasco/release/verasco-1.3.tgz;
      pre = "cd verasco";
      langs = ["Coq"];
    };
    "ITP10:Cachera:Pichardie" = {
      src = fetchTarball https://people.irisa.fr/David.Pichardie/ext/itp10/certified_while.tgz;
      pre = "true";
      langs = ["Coq"];
    };
    dataflow-analyser = {
      src = fetchTarball https://web.archive.org/web/20051122093937if_/http://www.irisa.fr:80/lande/pichardie/CarmelCoq/SAS05/all.tgz;
      pre = "true";
      langs = ["Coq"];
    };
    self = {
      src = ../src/core;
      pre = "true";
      langs = ["F*"];
    };
  };
  stats = builtins.mapAttrs (name: {src, pre, langs}:
    pkgs.stdenv.mkDerivation {
      name = name + ".count";
      inherit src;
      buildInputs = [pkgs.tokei pkgs.jq];
      configurePhase = "true";
      buildPhase = "true";
      installPhase = ''
        ${pre}
        tokei -o json | jq -r '${pkgs.lib.concatMapStringsSep " + " (x: ''.["${x}"].code'') langs}' >> $out
      '';
    }
  ) to-compare;
  res = builtins.mapAttrs (_: d: pkgs.lib.toInt (builtins.readFile d)) stats;
in
pkgs.writeTextFile {
  name = "count.json";
  text = builtins.toJSON (
    pkgs.lib.mapAttrs (k: v: {lines = v; factor = v / (res.self + 0.0);}) res
  );
}