nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 89 lines 1.8 kB view raw
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 )