summary refs log tree commit diff
path: root/pkgs/development/interpreters
diff options
context:
space:
mode:
authorYury G. Kudryashov <urkud.urkud@gmail.com>2011-01-21 08:25:11 +0000
committerYury G. Kudryashov <urkud.urkud@gmail.com>2011-01-21 08:25:11 +0000
commit08a1b617168dd5073492bf0959459bf51f0798f1 (patch)
tree4059b60a021d0991ddfaebc63a6ac5984f35c270 /pkgs/development/interpreters
parente76aee9d2f529848c60d2d91339074d46f395ebb (diff)
downloadnixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar.gz
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar.bz2
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar.lz
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar.xz
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.tar.zst
nixlib-08a1b617168dd5073492bf0959459bf51f0798f1.zip
Make it possible to override system ruby gems
svn path=/nixpkgs/trunk/; revision=25658
Diffstat (limited to 'pkgs/development/interpreters')
-rw-r--r--pkgs/development/interpreters/ruby/gem.nix13
-rw-r--r--pkgs/development/interpreters/ruby/libs.nix39
-rw-r--r--pkgs/development/interpreters/ruby/overrides.nix (renamed from pkgs/development/interpreters/ruby/overwrites.nix)1
-rw-r--r--pkgs/development/interpreters/ruby/patches.nix3
4 files changed, 38 insertions, 18 deletions
diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix
index 9a9650f163cb..289f840aa04b 100644
--- a/pkgs/development/interpreters/ruby/gem.nix
+++ b/pkgs/development/interpreters/ruby/gem.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overwrites}:
+{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overrides}:
 
 let
   gemDefaults = { name, basename, requiredGems, sha256, meta }:
@@ -42,10 +42,11 @@ let
     '';
   };
   mb = stdenv.lib.maybeAttr;
+  patchedGem = a: stdenv.mkDerivation (removeAttrs (stdenv.lib.mergeAttrsByFuncDefaults
+      ([ (gemDefaults a) ]
+      ++ (stdenv.lib.concatMap (p: [(mb a.basename {} p) (mb a.name {} p)] )
+      patches)))
+    [ "mergeAttrBy" ]);
 in
 aName: a@{ name, basename, requiredGems, sha256, meta }:
-  mb name (mb basename (
-    stdenv.mkDerivation (removeAttrs (stdenv.lib.mergeAttrsByFuncDefaults
-      [ (gemDefaults a) (mb name {} patches) (mb basename {} patches) ]
-    ) ["mergeAttrBy"])
-  ) overwrites) overwrites
+  stdenv.lib.foldl (d: o: mb name (mb basename d o) o) (patchedGem a) overrides
diff --git a/pkgs/development/interpreters/ruby/libs.nix b/pkgs/development/interpreters/ruby/libs.nix
index 57daafaef408..d0b6401abc29 100644
--- a/pkgs/development/interpreters/ruby/libs.nix
+++ b/pkgs/development/interpreters/ruby/libs.nix
@@ -1,12 +1,33 @@
-{stdenv, config, fetchurl, callPackage}:
+{stdenv, getConfig, fetchurl, callPackage}:
 
 let
-  generated = stdenv.lib.attrByPath [ "gems" "generated" ] (import ./generated.nix) config;
-  auto = generated merged;
-  patches = callPackage ./patches.nix { } gems;
-  overwrites = callPackage ./overwrites.nix { } gems;
-  merged = stdenv.lib.mapAttrs gem auto.gems;
-  gem = callPackage ./gem.nix { inherit patches overwrites; };
-  gems = merged // auto.aliases;
+  inherit (stdenv.lib) fold optional;
+  gemsMergeableFun = { generatedFuns ? [], patchFuns ? [], overrideFuns ? [] }:
+  let
+    generatedAttrs = map (f: f customGems) generatedFuns;
+    generatedGems = map (a: a.gems) generatedAttrs;
+    gem = callPackage ./gem.nix {
+      patches = map (f: callPackage f { inherit gems; }) patchFuns;
+      overrides = map (f: callPackage f { }) overrideFuns;
+    };
+    customGems = stdenv.lib.mapAttrs gem (fold (x: y: x // y) { } generatedGems);
+    gems = fold (x: y: x // y) customGems (map (a: a.aliases) generatedAttrs);
+  in
+  gems // {
+    merge = { generated ? null, patches ? null, overrides ? null }:
+      gemsMergeableFun {
+        generatedFuns = generatedFuns ++ optional (generated != null) generated;
+        patchFuns = patchFuns ++ optional (patches != null) patches;
+        overrideFuns = overrideFuns ++ optional (overrides != null) overrides;
+      };
+  };
 in
-gems
+((gemsMergeableFun { }).merge {
+  generated = import ./generated.nix;
+  patches = import ./patches.nix;
+  overrides = import ./overrides.nix;
+}).merge {
+  generated = getConfig [ "gems" "generated" ] null;
+  patches = getConfig [ "gems" "patches" ] null;
+  overrides = getConfig [ "gems" "overrides" ] null;
+}
diff --git a/pkgs/development/interpreters/ruby/overwrites.nix b/pkgs/development/interpreters/ruby/overrides.nix
index 9c3ebf75c318..01d73a19d64b 100644
--- a/pkgs/development/interpreters/ruby/overwrites.nix
+++ b/pkgs/development/interpreters/ruby/overrides.nix
@@ -1,5 +1,4 @@
 { xapianBindings }:
-gems:
 
 {
   xapian_full = xapianBindings.merge { cfg = { rubySupport = true; }; };
diff --git a/pkgs/development/interpreters/ruby/patches.nix b/pkgs/development/interpreters/ruby/patches.nix
index 923217cc1f9b..abcb1d0dfe4a 100644
--- a/pkgs/development/interpreters/ruby/patches.nix
+++ b/pkgs/development/interpreters/ruby/patches.nix
@@ -1,6 +1,5 @@
 {fetchurl, writeScript, ruby, ncurses, sqlite, libxml2, libxslt, libffi, zlib,
-  libuuid}:
-gems:
+  libuuid, gems}:
 
 let
   patchUsrBinEnv = writeScript "path-usr-bin-env" ''