about summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorJules Aguillon <jules@j3s.fr>2023-07-04 15:54:16 +0200
committerJules Aguillon <jules@j3s.fr>2023-09-28 12:03:20 +0200
commit187d777aada735b5793f78b9b62726ce0752d739 (patch)
tree7d2158fb4fe7daebaf24190e2d958ce999e2fcd0 /pkgs/build-support
parent499149ef950c54c669e4a1d6cdf6f4cc121f543e (diff)
ocamlPackages.buildTopkgPackage: Added
This function helps building an OCaml package that builds with topkg.
There are currently many such packages in nixpkgs and this function
would greatly simplify adding more.

This is heavily inspired by `ocamlPackages.buildDunePackage`.
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/ocaml/topkg.nix28
1 files changed, 28 insertions, 0 deletions
diff --git a/pkgs/build-support/ocaml/topkg.nix b/pkgs/build-support/ocaml/topkg.nix
new file mode 100644
index 0000000000000..73be5815e44c7
--- /dev/null
+++ b/pkgs/build-support/ocaml/topkg.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, ocaml, findlib, topkg, ocamlbuild, cmdliner, odoc, b0
+}:
+
+{ pname, version, nativeBuildInputs ? [ ], buildInputs ? [ ], ... }@args:
+
+lib.throwIf (args ? minimalOCamlVersion
+  && lib.versionOlder ocaml.version args.minimalOCamlVersion)
+"${pname}-${version} is not available for OCaml ${ocaml.version}"
+
+stdenv.mkDerivation ({
+
+  dontAddStaticConfigureFlags = true;
+  configurePlatforms = [ ];
+  strictDeps = true;
+  inherit (topkg) buildPhase installPhase;
+
+} // (builtins.removeAttrs args [ "minimalOCamlVersion" ]) // {
+
+  name = "ocaml${ocaml.version}-${pname}-${version}";
+
+  nativeBuildInputs = [ ocaml findlib ocamlbuild topkg ] ++ nativeBuildInputs;
+  buildInputs = [ topkg ] ++ buildInputs;
+
+  meta = (args.meta or { }) // {
+    platforms = args.meta.platforms or ocaml.meta.platforms;
+  };
+
+})