biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / ocaml / merlin / 4.x.nix
blob2a3eb8e52eec1c06fd83a8c335b50cb95f3f0197
1 { lib
2 , substituteAll
3 , fetchurl
4 , ocaml
5 , dune_3
6 , buildDunePackage
7 , yojson
8 , csexp
9 , merlin-lib
10 , dot-merlin-reader
11 , jq
12 , menhir
13 , menhirLib
14 , menhirSdk
17 let
18   # Each releases of Merlin support a limited range of versions of OCaml.
19   merlinVersions = {
20     "4.12.0" = "4.7-412";
21     "4.12.1" = "4.7-412";
22     "4.13.0" = "4.7-413";
23     "4.13.1" = "4.7-413";
24     "4.14.0" = "4.14-414";
25     "4.14.1" = "4.14-414";
26     "4.14.2" = "4.14-414";
27     "5.0.0" = "4.14-500";
28     "5.1.0" = "4.14-501";
29     "5.1.1" = "4.14-501";
30   };
32   hashes = {
33     "4.7-412" = "sha256-0U3Ia7EblKULNy8AuXFVKACZvGN0arYJv7BWiBRgT0Y=";
34     "4.7-413" = "sha256-aVmGWS4bJBLuwsxDKsng/n0A6qlyJ/pnDTcYab/5gyU=";
35     "4.14-414" = "sha256-eQGMyqN8FQHdXE1c94vDQg1kGx6CRDZimBxUctlzmT0=";
36     "4.14-500" = "sha256-7CPzJPh1UgzYiX8wPMbU5ZXz1wAJFNQQcp8WuGrR1w4=";
37     "4.14-501" = "sha256-t+npbpJAWMLOQpZCeIqi45ByDUQeIkU4vPSUplIDopI=";
38   };
40   version = lib.getAttr ocaml.version merlinVersions;
43 if !lib.hasAttr ocaml.version merlinVersions
44 then builtins.throw "merlin is not available for OCaml ${ocaml.version}"
45 else
47 buildDunePackage {
48   pname = "merlin";
49   inherit version;
50   duneVersion = "3";
52   src = fetchurl {
53     url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-${version}.tbz";
54     sha256 = hashes."${version}";
55   };
57   patches = [
58     (substituteAll {
59       src = ./fix-paths.patch;
60       dot_merlin_reader = "${dot-merlin-reader}/bin/dot-merlin-reader";
61       dune = "${dune_3}/bin/dune";
62     })
63   ];
65   strictDeps = true;
67   nativeBuildInputs = [
68     menhir
69     jq
70   ];
71   buildInputs = [
72     dot-merlin-reader
73     yojson
74     (if lib.versionAtLeast version "4.7-414"
75      then merlin-lib
76      else csexp)
77     menhirSdk
78     menhirLib
79   ];
81   doCheck = false;
82   checkPhase = ''
83     runHook preCheck
84     patchShebangs tests/merlin-wrapper
85     dune runtest # filtering with -p disables tests
86     runHook postCheck
87   '';
89   meta = with lib; {
90     description = "An editor-independent tool to ease the development of programs in OCaml";
91     homepage = "https://github.com/ocaml/merlin";
92     license = licenses.mit;
93     maintainers = [ maintainers.vbgl maintainers.sternenseemann ];
94   };