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