1{
2 lib,
3 stdenv,
4 fetchurl,
5 ocaml,
6 findlib,
7 ocamlbuild,
8 topkg,
9 result,
10 lwt,
11 cmdliner,
12 fmt,
13 fmtSupport ? lib.versionAtLeast ocaml.version "4.08",
14 js_of_ocaml-compiler,
15 jsooSupport ? true,
16 lwtSupport ? true,
17 cmdlinerSupport ? true,
18}:
19let
20 pname = "logs";
21 webpage = "https://erratique.ch/software/${pname}";
22
23 optional_deps = [
24 {
25 pkg = js_of_ocaml-compiler;
26 enable_flag = "--with-js_of_ocaml-compiler";
27 enabled = jsooSupport;
28 }
29 {
30 pkg = fmt;
31 enable_flag = "--with-fmt";
32 enabled = fmtSupport;
33 }
34 {
35 pkg = lwt;
36 enable_flag = "--with-lwt";
37 enabled = lwtSupport;
38 }
39 {
40 pkg = cmdliner;
41 enable_flag = "--with-cmdliner";
42 enabled = cmdlinerSupport;
43 }
44 ];
45 enable_flags = lib.concatMap (d: [
46 d.enable_flag
47 (lib.boolToString d.enabled)
48 ]) optional_deps;
49 optional_buildInputs = map (d: d.pkg) (lib.filter (d: d.enabled) optional_deps);
50in
51
52if lib.versionOlder ocaml.version "4.03" then
53 throw "logs is not available for OCaml ${ocaml.version}"
54else
55
56 stdenv.mkDerivation rec {
57 name = "ocaml${ocaml.version}-${pname}-${version}";
58 version = "0.8.0";
59
60 src = fetchurl {
61 url = "${webpage}/releases/${pname}-${version}.tbz";
62 hash = "sha256-mmFRQJX6QvMBIzJiO2yNYF1Ce+qQS2oNF3+OwziCNtg=";
63 };
64
65 nativeBuildInputs = [
66 ocaml
67 findlib
68 ocamlbuild
69 topkg
70 ];
71 buildInputs = [ topkg ] ++ optional_buildInputs;
72 propagatedBuildInputs = [ result ];
73
74 strictDeps = true;
75
76 buildPhase = "${topkg.run} build ${lib.escapeShellArgs enable_flags}";
77
78 inherit (topkg) installPhase;
79
80 meta = with lib; {
81 description = "Logging infrastructure for OCaml";
82 homepage = webpage;
83 inherit (ocaml.meta) platforms;
84 maintainers = [ maintainers.sternenseemann ];
85 license = licenses.isc;
86 };
87 }