nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 buildDunePackage,
3 lib,
4 cppo,
5 stdlib-shims,
6 ppx_yojson_conv_lib,
7 yojson_2,
8 ocaml-syntax-shims,
9 jsonrpc,
10 omd,
11 octavius,
12 dune-build-info,
13 dune-rpc,
14 uutf,
15 dyn,
16 re,
17 stdune,
18 chrome-trace,
19 csexp,
20 result,
21 pp,
22 cmdliner,
23 ordering,
24 ocamlformat-rpc-lib,
25 ocaml,
26 version ?
27 if lib.versionAtLeast ocaml.version "5.4" then
28 "1.25.0"
29 else if lib.versionAtLeast ocaml.version "5.3" then
30 "1.23.1"
31 else if lib.versionAtLeast ocaml.version "5.2" then
32 "1.21.0"
33 else if lib.versionAtLeast ocaml.version "4.14" then
34 "1.18.0"
35 else if lib.versionAtLeast ocaml.version "4.13" then
36 "1.10.5"
37 else if lib.versionAtLeast ocaml.version "4.12" then
38 "1.9.0"
39 else
40 "1.4.1",
41}:
42
43let
44 jsonrpc_v = jsonrpc.override {
45 inherit version;
46 };
47in
48buildDunePackage {
49 pname = "lsp";
50 inherit (jsonrpc_v) version src;
51 minimalOCamlVersion = if lib.versionAtLeast version "1.7.0" then "4.12" else "4.06";
52
53 # unvendor some (not all) dependencies.
54 # They are vendored by upstream only because it is then easier to install
55 # ocaml-lsp without messing with your opam switch, but nix should prevent
56 # this type of problems without resorting to vendoring.
57 preBuild = lib.optionalString (lib.versionOlder version "1.10.4") ''
58 rm -r ocaml-lsp-server/vendor/{octavius,uutf,omd,cmdliner}
59 '';
60
61 buildInputs =
62 if lib.versionAtLeast version "1.12.0" then
63 [
64 pp
65 re
66 octavius
67 dune-build-info
68 dune-rpc
69 omd
70 cmdliner
71 ocamlformat-rpc-lib
72 dyn
73 stdune
74 chrome-trace
75 ]
76 else if lib.versionAtLeast version "1.10.0" then
77 [
78 pp
79 re
80 octavius
81 dune-build-info
82 dune-rpc
83 omd
84 cmdliner
85 ocamlformat-rpc-lib
86 dyn
87 stdune
88 ]
89 else if lib.versionAtLeast version "1.7.0" then
90 [
91 re
92 octavius
93 dune-build-info
94 omd
95 cmdliner
96 ocamlformat-rpc-lib
97 ]
98 else
99 [
100 ppx_yojson_conv_lib
101 ocaml-syntax-shims
102 octavius
103 dune-build-info
104 omd
105 cmdliner
106 ];
107
108 nativeBuildInputs = lib.optional (lib.versionOlder version "1.7.0") cppo;
109
110 propagatedBuildInputs =
111 if lib.versionAtLeast version "1.23.1" then
112 [
113 jsonrpc
114 ppx_yojson_conv_lib
115 uutf
116 ]
117 else if lib.versionAtLeast version "1.14.0" then
118 [
119 jsonrpc
120 (ppx_yojson_conv_lib.override { yojson = yojson_2; })
121 uutf
122 ]
123 else if lib.versionAtLeast version "1.10.0" then
124 [
125 dyn
126 jsonrpc
127 ordering
128 (ppx_yojson_conv_lib.override { yojson = yojson_2; })
129 stdune
130 uutf
131 ]
132 else if lib.versionAtLeast version "1.9.0" then
133 [
134 csexp
135 jsonrpc
136 (pp.override { version = "1.2.0"; })
137 (ppx_yojson_conv_lib.override { yojson = yojson_2; })
138 result
139 uutf
140 ]
141 else if lib.versionAtLeast version "1.7.0" then
142 [
143 csexp
144 jsonrpc
145 (pp.override { version = "1.2.0"; })
146 ppx_yojson_conv_lib
147 result
148 uutf
149 ]
150 else
151 [
152 csexp
153 jsonrpc
154 ppx_yojson_conv_lib
155 stdlib-shims
156 uutf
157 ];
158
159 meta = jsonrpc.meta // {
160 description = "LSP protocol implementation in OCaml";
161 };
162}