forgejo-lts: 7.0.10 -> 7.0.11
[NixPkgs.git] / pkgs / development / ocaml-modules / ocaml-lsp / default.nix
blobd9a21225cbb1e70671af06a4b0f96150078e0038
1 { lib
2 , ocaml
3 , buildDunePackage
4 , lsp
5 , xdg
6 , re
7 , fiber
8 , makeWrapper
9 , dot-merlin-reader
10 , spawn
11 , ocamlc-loc
12 , merlin
13 , merlin-lib
14 , astring
15 , camlp-streams
16 , base
19 # Freeze ocaml-lsp-version at 1.17.0 for OCaml 5.0
20 #  for which merlin 4.16 is not available
21 let lsp_v =
22   if lib.versions.majorMinor ocaml.version == "5.0"
23   then lsp.override { version = "1.17.0"; }
24   else lsp
25 ; in
27 let lsp = lsp_v; in
29 # Use merlin < 4.17 for OCaml < 5.2
30 let merlin-lib_v =
31   if lib.versions.majorMinor ocaml.version == "4.14"
32   then merlin-lib.override {
33     merlin = merlin.override {
34       version = "4.16-414";
35     };
36   } else if lib.versions.majorMinor ocaml.version == "5.1"
37   then merlin-lib.override {
38     merlin = merlin.override {
39       version = "4.16-501";
40     };
41   } else merlin-lib
42 ; in
43 let merlin-lib = merlin-lib_v; in
45 buildDunePackage rec {
46   pname = "ocaml-lsp-server";
47   inherit (lsp) version src preBuild;
49   buildInputs = lsp.buildInputs ++ [ lsp re ]
50   ++ lib.optional (lib.versionAtLeast version "1.9") spawn
51   ++ lib.optionals (lib.versionAtLeast version "1.10") [ fiber xdg ]
52   ++ lib.optional (lib.versionAtLeast version "1.14.2") ocamlc-loc
53   ++ lib.optionals (lib.versionAtLeast version "1.17.0") [ astring camlp-streams merlin-lib ]
54   ++ lib.optional (lib.versionAtLeast version "1.18.0") base
55   ;
57   nativeBuildInputs = [ makeWrapper ];
59   postInstall = ''
60     wrapProgram $out/bin/ocamllsp --prefix PATH : ${dot-merlin-reader}/bin
61   '';
63   meta = lsp.meta // {
64     description = "OCaml Language Server Protocol implementation";
65     mainProgram = "ocamllsp";
66   };