From 2ea2643b13530b53384adf664e4d6af459e8db30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Thu, 1 Aug 2019 10:44:04 +0200 Subject: [PATCH 1/6] OCaml build support: add oasis build system --- pkgs/build-support/ocaml/oasis.nix | 31 ++++++++++++++++++++++++++++++ pkgs/top-level/ocaml-packages.nix | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 pkgs/build-support/ocaml/oasis.nix diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix new file mode 100644 index 00000000000..2ada920338e --- /dev/null +++ b/pkgs/build-support/ocaml/oasis.nix @@ -0,0 +1,31 @@ +{ buildOcaml, ocaml_oasis }: + +{ name, version, buildInputs ? [], ... +}@args: + +buildOcaml (args // { + buildInputs = [ ocaml_oasis ] ++ buildInputs; + + buildPhase = '' + runHook preBuild + oasis setup + ocaml setup.ml -configure + ocaml setup.ml -build + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + ocaml setup.ml -test + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out + sed -i s+/usr/local+$out+g setup.ml + sed -i s+/usr/local+$out+g setup.data + prefix=$OCAMLFIND_DESTDIR ocaml setup.ml -install + runHook postInstall + ''; +}) diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index 949c5b6a308..bac8e411bbd 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -12,6 +12,8 @@ let buildOcaml = callPackage ../build-support/ocaml { }; + buildOasisPackage = callPackage ../build-support/ocaml/oasis.nix { buildOcaml = buildOcaml; }; + buildDunePackage = callPackage ../build-support/ocaml/dune.nix {}; alcotest = callPackage ../development/ocaml-modules/alcotest {}; From d940b4413794f85435ccb02be40d288faefedf36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Sun, 4 Aug 2019 18:16:16 +0200 Subject: [PATCH 2/6] tcslib: init at version v0.3 build for tcslib as contribution as well as usage example for the new buildOasisPackage --- .../ocaml-modules/tcslib/default.nix | 25 +++++++++++++++++++ pkgs/top-level/ocaml-packages.nix | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/development/ocaml-modules/tcslib/default.nix diff --git a/pkgs/development/ocaml-modules/tcslib/default.nix b/pkgs/development/ocaml-modules/tcslib/default.nix new file mode 100644 index 00000000000..40481c89937 --- /dev/null +++ b/pkgs/development/ocaml-modules/tcslib/default.nix @@ -0,0 +1,25 @@ +{ stdenv, fetchFromGitHub, ocamlPackages, buildOasisPackage }: + +buildOasisPackage rec { + name = "tcslib"; + version = "v0.3"; + + minimumSupportedOCamlVersion = "4.03.0"; + + src = fetchFromGitHub { + owner = "tcsprojects"; + repo = "tcslib"; + rev = version; + sha256 = "05g6m82blsccq8wx8knxv6a5fzww7hi624jx91f9h87nk2fsplhi"; + }; + + buildInputs = with ocamlPackages; [ ounit ]; + propagatedBuildInputs = with ocamlPackages; [ ocaml_extlib num ]; + + meta = { + homepage = https://github.com/tcsprojects/tcslib; + description = "A multi-purpose library for OCaml"; + license = stdenv.lib.licenses.bsd3; + maintainers = with stdenv.lib.maintainers; [ mgttlinger ]; + }; +} diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index bac8e411bbd..1ca56235c65 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -721,6 +721,8 @@ let stringext = callPackage ../development/ocaml-modules/stringext { }; + tcslib = callPackage ../development/ocaml-modules/tcslib { }; + toml = callPackage ../development/ocaml-modules/toml { }; topkg = callPackage ../development/ocaml-modules/topkg { }; From 6ef367a5e8cdad4e9195d027b51c534b0a8d7c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Tue, 6 Aug 2019 06:46:03 +0200 Subject: [PATCH 3/6] Suggested changes --- pkgs/build-support/ocaml/oasis.nix | 2 +- pkgs/development/ocaml-modules/tcslib/default.nix | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix index 2ada920338e..7ad761bde28 100644 --- a/pkgs/build-support/ocaml/oasis.nix +++ b/pkgs/build-support/ocaml/oasis.nix @@ -1,6 +1,6 @@ { buildOcaml, ocaml_oasis }: -{ name, version, buildInputs ? [], ... +{ buildInputs ? [], ... }@args: buildOcaml (args // { diff --git a/pkgs/development/ocaml-modules/tcslib/default.nix b/pkgs/development/ocaml-modules/tcslib/default.nix index 40481c89937..7eafb2e6993 100644 --- a/pkgs/development/ocaml-modules/tcslib/default.nix +++ b/pkgs/development/ocaml-modules/tcslib/default.nix @@ -1,25 +1,25 @@ -{ stdenv, fetchFromGitHub, ocamlPackages, buildOasisPackage }: +{ lib, fetchFromGitHub, ocamlPackages, buildOasisPackage, ounit, ocaml_extlib, num }: buildOasisPackage rec { name = "tcslib"; - version = "v0.3"; + version = "0.3"; minimumSupportedOCamlVersion = "4.03.0"; src = fetchFromGitHub { owner = "tcsprojects"; repo = "tcslib"; - rev = version; + rev = "v${version}"; sha256 = "05g6m82blsccq8wx8knxv6a5fzww7hi624jx91f9h87nk2fsplhi"; }; - buildInputs = with ocamlPackages; [ ounit ]; - propagatedBuildInputs = with ocamlPackages; [ ocaml_extlib num ]; + buildInputs = [ ounit ]; + propagatedBuildInputs = [ ocaml_extlib num ]; meta = { homepage = https://github.com/tcsprojects/tcslib; description = "A multi-purpose library for OCaml"; - license = stdenv.lib.licenses.bsd3; - maintainers = with stdenv.lib.maintainers; [ mgttlinger ]; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ mgttlinger ]; }; } From 961b83a99de37e31530272cce066ecd2a32a58c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Tue, 6 Aug 2019 17:54:09 +0200 Subject: [PATCH 4/6] Don't use buildOcaml --- pkgs/build-support/ocaml/oasis.nix | 29 ++++++++++++++++--- .../ocaml-modules/tcslib/default.nix | 2 +- pkgs/top-level/ocaml-packages.nix | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix index 7ad761bde28..ad1ba065ef7 100644 --- a/pkgs/build-support/ocaml/oasis.nix +++ b/pkgs/build-support/ocaml/oasis.nix @@ -1,10 +1,24 @@ -{ buildOcaml, ocaml_oasis }: +{ stdenv, ocaml_oasis, ocaml, findlib, ocamlbuild, camlp4 }: -{ buildInputs ? [], ... +{ name, version, buildInputs ? [], meta ? { platforms = ocaml.meta.platforms or []; }, + minimumOcamlVersion ? null, + createFindlibDestdir ? true, + dontStrip ? true, + hasSharedObjects ? false, + setupHook ? null, + ... }@args: -buildOcaml (args // { - buildInputs = [ ocaml_oasis ] ++ buildInputs; + assert minimumOcamlVersion != null -> + stdenv.lib.versionOlder minimumOcamlVersion ocaml.version; + +stdenv.mkDerivation (args // { + name = "ocaml-${name}-${version}"; + + buildInputs = [ ocaml findlib ocamlbuild camlp4 ocaml_oasis ] ++ buildInputs; + + inherit createFindlibDestdir; + inherit dontStrip; buildPhase = '' runHook preBuild @@ -28,4 +42,11 @@ buildOcaml (args // { prefix=$OCAMLFIND_DESTDIR ocaml setup.ml -install runHook postInstall ''; + + setupHook = if setupHook == null && hasSharedObjects + then stdenv.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; + }) diff --git a/pkgs/development/ocaml-modules/tcslib/default.nix b/pkgs/development/ocaml-modules/tcslib/default.nix index 7eafb2e6993..5e7a7864462 100644 --- a/pkgs/development/ocaml-modules/tcslib/default.nix +++ b/pkgs/development/ocaml-modules/tcslib/default.nix @@ -4,7 +4,7 @@ buildOasisPackage rec { name = "tcslib"; version = "0.3"; - minimumSupportedOCamlVersion = "4.03.0"; + minimumOCamlVersion = "4.03.0"; src = fetchFromGitHub { owner = "tcsprojects"; diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index 1ca56235c65..8eed3e74092 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -12,7 +12,7 @@ let buildOcaml = callPackage ../build-support/ocaml { }; - buildOasisPackage = callPackage ../build-support/ocaml/oasis.nix { buildOcaml = buildOcaml; }; + buildOasisPackage = callPackage ../build-support/ocaml/oasis.nix { }; buildDunePackage = callPackage ../build-support/ocaml/dune.nix {}; From 6e6c1448faaf4d8fd131ac1cde221eeb3813573d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Wed, 7 Aug 2019 06:51:36 +0200 Subject: [PATCH 5/6] Suggested edits --- pkgs/build-support/ocaml/oasis.nix | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix index ad1ba065ef7..00f75c76597 100644 --- a/pkgs/build-support/ocaml/oasis.nix +++ b/pkgs/build-support/ocaml/oasis.nix @@ -1,11 +1,9 @@ -{ stdenv, ocaml_oasis, ocaml, findlib, ocamlbuild, camlp4 }: +{ stdenv, ocaml_oasis, ocaml, findlib, ocamlbuild }: { name, version, buildInputs ? [], meta ? { platforms = ocaml.meta.platforms or []; }, minimumOcamlVersion ? null, createFindlibDestdir ? true, dontStrip ? true, - hasSharedObjects ? false, - setupHook ? null, ... }@args: @@ -13,9 +11,9 @@ stdenv.lib.versionOlder minimumOcamlVersion ocaml.version; stdenv.mkDerivation (args // { - name = "ocaml-${name}-${version}"; + name = "ocaml${ocaml.version}-${name}-${version}"; - buildInputs = [ ocaml findlib ocamlbuild camlp4 ocaml_oasis ] ++ buildInputs; + buildInputs = [ ocaml findlib ocamlbuild ocaml_oasis ] ++ buildInputs; inherit createFindlibDestdir; inherit dontStrip; @@ -43,10 +41,4 @@ stdenv.mkDerivation (args // { runHook postInstall ''; - setupHook = if setupHook == null && hasSharedObjects - then stdenv.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; - }) From b1f0e3ebc55ea8bde2806d83896e0f14db73a410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20G=C3=B6ttlinger?= Date: Wed, 7 Aug 2019 09:50:46 +0200 Subject: [PATCH 6/6] Suggested edits --- pkgs/build-support/ocaml/oasis.nix | 12 +++++++----- pkgs/development/ocaml-modules/tcslib/default.nix | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix index 00f75c76597..74977486f2f 100644 --- a/pkgs/build-support/ocaml/oasis.nix +++ b/pkgs/build-support/ocaml/oasis.nix @@ -1,17 +1,19 @@ { stdenv, ocaml_oasis, ocaml, findlib, ocamlbuild }: -{ name, version, buildInputs ? [], meta ? { platforms = ocaml.meta.platforms or []; }, - minimumOcamlVersion ? null, +{ pname, version, buildInputs ? [], meta ? { platforms = ocaml.meta.platforms or []; }, + minimumOCamlVersion ? null, createFindlibDestdir ? true, dontStrip ? true, ... }@args: - assert minimumOcamlVersion != null -> - stdenv.lib.versionOlder minimumOcamlVersion ocaml.version; +if args ? minimumOCamlVersion && + ! stdenv.lib.versionAtLeast ocaml.version args.minimumOCamlVersion +then throw "${pname}-${version} is not available for OCaml ${ocaml.version}" +else stdenv.mkDerivation (args // { - name = "ocaml${ocaml.version}-${name}-${version}"; + name = "ocaml${ocaml.version}-${pname}-${version}"; buildInputs = [ ocaml findlib ocamlbuild ocaml_oasis ] ++ buildInputs; diff --git a/pkgs/development/ocaml-modules/tcslib/default.nix b/pkgs/development/ocaml-modules/tcslib/default.nix index 5e7a7864462..9d1d5a8096c 100644 --- a/pkgs/development/ocaml-modules/tcslib/default.nix +++ b/pkgs/development/ocaml-modules/tcslib/default.nix @@ -1,7 +1,7 @@ { lib, fetchFromGitHub, ocamlPackages, buildOasisPackage, ounit, ocaml_extlib, num }: buildOasisPackage rec { - name = "tcslib"; + pname = "tcslib"; version = "0.3"; minimumOCamlVersion = "4.03.0";