Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 lib, 3 ocaml, 4 buildDunePackage, 5 lsp, 6 xdg, 7 re, 8 fiber, 9 makeWrapper, 10 dot-merlin-reader, 11 spawn, 12 ocamlc-loc, 13 merlin, 14 merlin-lib, 15 astring, 16 camlp-streams, 17 base, 18}: 19 20# Freeze ocaml-lsp-version at 1.17.0 for OCaml 5.0 21# for which merlin 4.16 is not available 22let 23 lsp_v = 24 if lib.versions.majorMinor ocaml.version == "5.0" then 25 lsp.override { version = "1.17.0"; } 26 else 27 lsp; 28in 29 30let 31 lsp = lsp_v; 32in 33 34# Use merlin < 4.17 for OCaml < 5.2 35let 36 merlin-lib_v = 37 if lib.versions.majorMinor ocaml.version == "4.14" then 38 merlin-lib.override { 39 merlin = merlin.override { 40 version = "4.16-414"; 41 }; 42 } 43 else if lib.versions.majorMinor ocaml.version == "5.1" then 44 merlin-lib.override { 45 merlin = merlin.override { 46 version = "4.16-501"; 47 }; 48 } 49 else 50 merlin-lib; 51in 52let 53 merlin-lib = merlin-lib_v; 54in 55 56buildDunePackage rec { 57 pname = "ocaml-lsp-server"; 58 inherit (lsp) version src preBuild; 59 60 buildInputs = 61 lsp.buildInputs 62 ++ [ 63 lsp 64 re 65 ] 66 ++ lib.optional (lib.versionAtLeast version "1.9") spawn 67 ++ lib.optionals (lib.versionAtLeast version "1.10") [ 68 fiber 69 xdg 70 ] 71 ++ lib.optional (lib.versionAtLeast version "1.14.2") ocamlc-loc 72 ++ lib.optionals (lib.versionAtLeast version "1.17.0") [ 73 astring 74 camlp-streams 75 merlin-lib 76 ] 77 ++ lib.optional (lib.versionAtLeast version "1.18.0") base; 78 79 nativeBuildInputs = [ makeWrapper ]; 80 81 postInstall = '' 82 wrapProgram $out/bin/ocamllsp --prefix PATH : ${dot-merlin-reader}/bin 83 ''; 84 85 meta = lsp.meta // { 86 description = "OCaml Language Server Protocol implementation"; 87 mainProgram = "ocamllsp"; 88 }; 89}