1{ lib, stdenv, fetchFromGitHub, buildDunePackage, ocaml, findlib, cppo }:
2
3let param =
4 let v6_6 = {
5 version = "6.6";
6 sha256 = "sha256-QhuaQ9346a3neoRM4GrOVzjR8fg9ysMZR1VzNgyIQtc=";
7 nativeBuildInputs = [cppo];
8 buildInputs = [cppo];
9 }; in
10{
11 "4.02" = {
12 version = "5.0+4.02.0";
13 sha256 = "16drjk0qafjls8blng69qiv35a84wlafpk16grrg2i3x19p8dlj8"; };
14 "4.03" = {
15 version = "5.0+4.03.0";
16 sha256 = "061v1fl5z7z3ywi4ppryrlcywnvnqbsw83ppq72qmkc7ma4603jg"; };
17 "4.04" = {
18 version = "unstable-20161114";
19 rev = "49c08e2e4ea8fef88692cd1dcc1b38a9133f17ac";
20 sha256 = "0ywzfkf5brj33nwh49k9if8x8v433ral25f3nbklfc9vqr06zrfl"; };
21 "4.05" = {
22 version = "5.0+4.05.0";
23 sha256 = "1jvvhk6wnkvm7b9zph309ihsc0hyxfpahmxxrq19vx8c674jsdm4"; };
24 "4.06" = {
25 version = "5.1+4.06.0";
26 sha256 = "1ww4cspdpgjjsgiv71s0im5yjkr3544x96wsq1vpdacq7dr7zwiw"; };
27 "4.07" = {
28 version = "5.1+4.06.0";
29 sha256 = "1ww4cspdpgjjsgiv71s0im5yjkr3544x96wsq1vpdacq7dr7zwiw"; };
30 "4.08" = v6_6;
31 "4.09" = v6_6;
32 "4.10" = v6_6;
33 "4.11" = v6_6;
34 "4.12" = v6_6;
35 "4.13" = v6_6;
36 "4.14" = v6_6;
37 "5.0" = v6_6;
38}.${ocaml.meta.branch};
39in
40
41let src = fetchFromGitHub {
42 owner = "alainfrisch";
43 repo = pname;
44 rev = param.rev or param.version;
45 inherit (param) sha256;
46 };
47 pname = "ppx_tools";
48 meta = with lib; {
49 description = "Tools for authors of ppx rewriters";
50 homepage = "https://www.lexifi.com/ppx_tools";
51 license = licenses.mit;
52 maintainers = with maintainers; [ vbgl ];
53 };
54in
55if lib.versionAtLeast param.version "6.0"
56then
57 buildDunePackage {
58 inherit pname src meta;
59 inherit (param) version buildInputs nativeBuildInputs;
60 duneVersion = "3";
61 }
62else
63 stdenv.mkDerivation {
64 name = "ocaml${ocaml.version}-${pname}-${param.version}";
65
66 inherit src;
67
68 nativeBuildInputs = [ ocaml findlib ];
69
70 strictDeps = true;
71
72 createFindlibDestdir = true;
73
74 dontStrip = true;
75
76 meta = meta // { inherit (ocaml.meta) platforms; };
77 }