From 9e4202d273e05c4585466385bc383581ac74d142 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 19 Aug 2010 22:52:53 +0000 Subject: [PATCH] make makeOverridable noop for functions like a: b: c(a, b) svn path=/nixpkgs/trunk/; revision=23262 --- pkgs/lib/customisation.nix | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pkgs/lib/customisation.nix b/pkgs/lib/customisation.nix index e8946ddf743..f97b494ae92 100644 --- a/pkgs/lib/customisation.nix +++ b/pkgs/lib/customisation.nix @@ -49,13 +49,17 @@ rec { # let d = makeOverridable stdenv.mkDerivation { name = ..; buildInputs; } # noBuildInputs = d.override { buildInputs = []; } # additionalBuildInputs = d.override ( args : args // { buildInputs = args.buildInputs ++ [ additional ]; } ) - makeOverridable = f: origArgs: f origArgs // - { override = newArgs: - makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs)); - deepOverride = newArgs: - makeOverridable f (lib.overrideExisting (lib.mapAttrs (deepOverrider newArgs) origArgs) newArgs); - #origArgs = origArgs; - }; + makeOverridable = f: origArgs: + let + ff = f origArgs; + in + if builtins.isAttrs ff then (ff // + { override = newArgs: + makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs)); + deepOverride = newArgs: + makeOverridable f (lib.overrideExisting (lib.mapAttrs (deepOverrider newArgs) origArgs) newArgs); + }) + else ff; deepOverrider = newArgs: name: x: if builtins.isAttrs x then ( if x ? deepOverride then (x.deepOverride newArgs) else