nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 ocaml,
5 findlib,
6 dune_2,
7 dune_3,
8}:
9
10lib.extendMkDerivation {
11 constructDrv = stdenv.mkDerivation;
12 excludeDrvArgNames = [
13 "minimalOCamlVersion"
14 "duneVersion"
15 ];
16 extendDrvArgs =
17 finalAttrs:
18 {
19 pname,
20 version,
21 nativeBuildInputs ? [ ],
22 enableParallelBuilding ? true,
23 ...
24 }@args:
25
26 let
27 Dune =
28 let
29 dune-version = args.duneVersion or "3";
30 in
31 {
32 "1" = throw "Support for dune version 1 has been removed";
33 "2" = dune_2;
34 "3" = dune_3;
35 }
36 ."${dune-version}";
37 in
38
39 if args ? minimalOCamlVersion && lib.versionOlder ocaml.version args.minimalOCamlVersion then
40 throw "${pname}-${version} is not available for OCaml ${ocaml.version}"
41 else
42 {
43 name = "ocaml${ocaml.version}-${pname}-${version}";
44
45 strictDeps = true;
46
47 inherit enableParallelBuilding;
48 dontAddStaticConfigureFlags = true;
49 configurePlatforms = [ ];
50
51 nativeBuildInputs = [
52 ocaml
53 Dune
54 findlib
55 ]
56 ++ nativeBuildInputs;
57
58 buildPhase =
59 args.buildPhase or ''
60 runHook preBuild
61 dune build -p ${pname} ''${enableParallelBuilding:+-j $NIX_BUILD_CORES}
62 runHook postBuild
63 '';
64
65 installPhase =
66 args.installPhase or ''
67 runHook preInstall
68 dune install --prefix $out --libdir $OCAMLFIND_DESTDIR ${pname} \
69 ${
70 if lib.versionAtLeast Dune.version "2.9" then
71 "--docdir $out/share/doc --mandir $out/share/man"
72 else
73 ""
74 }
75 runHook postInstall
76 '';
77
78 checkPhase =
79 args.checkPhase or ''
80 runHook preCheck
81 dune runtest -p ${pname} ''${enableParallelBuilding:+-j $NIX_BUILD_CORES}
82 runHook postCheck
83 '';
84
85 meta = (args.meta or { }) // {
86 platforms = args.meta.platforms or ocaml.meta.platforms;
87 };
88 };
89}