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