diff --git a/pkgs/build-support/ocaml/default.nix b/pkgs/build-support/ocaml/default.nix new file mode 100644 index 000000000000..87bfa6cea120 --- /dev/null +++ b/pkgs/build-support/ocaml/default.nix @@ -0,0 +1,36 @@ +{ stdenv, writeText, ocaml, findlib, camlp4 }: + +{ name, version, buildInputs ? [], + createFindlibDestdir ? true, + dontStrip ? true, + minimumSupportedOcamlVersion ? null, + hasSharedObjects ? false, + setupHook ? null, + meta ? {}, ... +}@args: +let + ocaml_version = (builtins.parseDrvName ocaml.name).version; + defaultMeta = { + platforms = ocaml.meta.platforms; + }; +in + assert minimumSupportedOcamlVersion != null -> + stdenv.lib.versionOlder minimumSupportedOcamlVersion ocaml_version; + +stdenv.mkDerivation (args // { + name = "ocaml-${name}-${version}"; + + buildInputs = [ ocaml findlib camlp4 ] ++ buildInputs; + + setupHook = if setupHook == null && hasSharedObjects + then writeText "setupHook.sh" '' + export CAML_LD_LIBRARY_PATH="''${CAML_LD_LIBRARY_PATH}''${CAML_LD_LIBRARY_PATH:+:}''$1/lib/ocaml/${ocaml_version}/site-lib/${name}/" + '' + else setupHook; + + inherit ocaml_version; + inherit createFindlibDestdir; + inherit dontStrip; + + meta = defaultMeta // meta; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 40a77f8a623d..438629e93cb0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4039,6 +4039,7 @@ let ocaml_version = (builtins.parseDrvName ocaml.name).version; in rec { inherit ocaml; + buildOcaml = callPackage ../build-support/ocaml { }; acgtk = callPackage ../applications/science/logic/acgtk { };