From 2140791f9b2be837880a4e8cd03378f835cc94be Mon Sep 17 00:00:00 2001 From: sterni <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Sun, 11 Apr 2021 12:26:10 +0200 Subject: ocamlPackages.janeStreet{,_0_9_0}: join the ocamlPackages fix point, allowing overriding to work as expected (#113696) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ocamlPackages.janeStreet_0_9_0: join the ocamlPackages fix point Internal dependencies in the janeStreet sets were always taken from the own rec attribute set. While this is pretty simple and convenient, it has the disadvantage that it doesn't play nice with overriding: If you'd override an attribute in a janeStreet set previously, it would be changed when referenced directly, but the other packages in that janeStreet set still would use the original, non-overridden version of the derivation. This is easily fixed by passing janeStreet_0_9_0 itself from the fix point of ocamlPackages and using it to reference the dependencies. Example showing it now works as expected: test-overlay.nix: self: super: { ocamlPackages = super.ocamlPackages.overrideScope (old: _: { janeStreet_0_9_0 = old.janeStreet_0_9_0 // { base = old.janeStreet_0_9_0.base.overrideAttrs (_: { meta.broken = true; }); }; }); } nix-repl> (import ./. { overlays = [ (import ./test-overlay.nix) ]; }).ocamlPackages.janeStreet_0_9_0.stdio error: Package ‘ocaml4.10.0-base-0.9.4’ in /home/lukas/src/nix/nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage.nix:6 is marked as broken, refusing to evaluate. a) To temporarily allow broken packages, you can use an environment variable for a single invocation of the nix tools. $ export NIXPKGS_ALLOW_BROKEN=1 b) For `nixos-rebuild` you can set { nixpkgs.config.allowBroken = true; } in configuration.nix to override this. c) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add { allowBroken = true; } to ~/.config/nixpkgs/config.nix. * ocamlPackages.janeStreet: take part in fixpoint for OCaml >= 4.08 This change makes overrides to the janeStreet set work as expected by making the janeStreet set take part in the ocamlPackages fixpoint for janeStreet 0.14, i. e. OCaml >= 4.08 * ocamlPackages.janeStreet: take part in fixpoint for OCaml == 4.07 This change makes overrides to the janeStreet set work as expected by making the janeStreet set take part in the ocamlPackages fixpoint for janeStreet 0.12, i. e. OCaml == 4.07 * ocamlPackages.janeStreet: take part in fixpoint for OCaml < 4.07 This change makes overrides to the janeStreet set work as expected by making the janeStreet set take part in the ocamlPackages fixpoint for janeStreet 0.11, i. e. OCaml < 4.07 * ocamlPackages.janeStreet: remove self - super distinction Previously, we inherited non-janestreet ocaml dependencies from super and janestreet dependencies from self which always was super.janeStreet. This behavior is however not really what we want due to liftJaneStreet: Users and other packages will use ocamlPackages.base etc. instead of ocamlPackages.janeStreet.base and the like. Consequently they also would override the top-level attributes which would mean that other janestreet packages would not pick up on it however. As a consequence however, overriding ocamlPackages.janeStreet.base doesn't work. Since this was never possible, I don't think this is an issue. It is probably a good idea to deprecate that set anyways and printing a warning when it is used via trace. janeStreet_0_9_0 is unchanged as the disticniton between self and super makes sense for it. Below is an example showing how overriding would work from an user's perspective: test-overlay.nix: self: super: { ocamlPackages = super.ocamlPackages.overrideScope (old: _: { base = old.base.overrideAttrs (_: { meta.broken = true; }); }); } nix-repl> (import ./. { overlays = [ (import ./test-overlay.nix) ]; }).ocamlPackages. stdio error: Package ‘ocaml4.10.0-base-0.14.0’ in /home/lukas/src/nix/nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage_0_14.nix:12 is marked as broken, refusing to evaluate. a) To temporarily allow broken packages, you can use an environment variable for a single invocation of the nix tools. $ export NIXPKGS_ALLOW_BROKEN=1 b) For `nixos-rebuild` you can set { nixpkgs.config.allowBroken = true; } in configuration.nix to override this. c) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add { allowBroken = true; } to ~/.config/nixpkgs/config.nix. --- pkgs/top-level/ocaml-packages.nix | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'pkgs/top-level/ocaml-packages.nix') diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index 87d4d52d388..790f9c465f9 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -1255,32 +1255,31 @@ let janeStreet = if lib.versionOlder "4.08" ocaml.version then import ../development/ocaml-modules/janestreet/0.14.nix { - inherit alcotest angstrom angstrom-async base64 cryptokit ctypes - dune-configurator faraday inotify janePackage js_of_ocaml - js_of_ocaml-ppx lambdasoup magic-mime num octavius ounit - ppxlib re tyxml uri-sexp zarith; + inherit self; inherit (pkgs) openssl zstd; } else if lib.versionOlder "4.07" ocaml.version then import ../development/ocaml-modules/janestreet/0.12.nix { - inherit ctypes janePackage num octavius re; + self = self // { + ppxlib = ppxlib.override { version = "0.8.1"; }; + }; inherit (pkgs) openssl; - ppxlib = ppxlib.override { version = "0.8.1"; }; } else import ../development/ocaml-modules/janestreet { - inherit janePackage ocamlbuild angstrom ctypes cryptokit; - inherit magic-mime num ocaml-migrate-parsetree octavius ounit; - inherit ppx_deriving re; + self = self // { + ppxlib = ppxlib.override { version = "0.8.1"; }; + }; inherit (pkgs) openssl; - ppxlib = ppxlib.override { version = "0.8.1"; }; }; janeStreet_0_9_0 = import ../development/ocaml-modules/janestreet/old.nix { - janePackage = callPackage ../development/ocaml-modules/janestreet/janePackage.nix { defaultVersion = "0.9.0"; }; - inherit lib ocaml ocamlbuild ctypes cryptokit; - inherit magic-mime num ocaml-migrate-parsetree octavius ounit; - inherit ppx_deriving re zarith; - inherit (pkgs) stdenv openssl; + self = self.janeStreet_0_9_0; + super = self // { + janePackage = callPackage ../development/ocaml-modules/janestreet/janePackage.nix { + defaultVersion = "0.9.0"; + }; + }; + inherit (pkgs) stdenv lib openssl; }; js_build_tools = callPackage ../development/ocaml-modules/janestreet/js-build-tools.nix {}; -- cgit 1.4.1