Make it possible to override system ruby gems
svn path=/nixpkgs/trunk/; revision=25658
This commit is contained in:
parent
e76aee9d2f
commit
08a1b61716
@ -1,4 +1,4 @@
|
|||||||
{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overwrites}:
|
{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overrides}:
|
||||||
|
|
||||||
let
|
let
|
||||||
gemDefaults = { name, basename, requiredGems, sha256, meta }:
|
gemDefaults = { name, basename, requiredGems, sha256, meta }:
|
||||||
@ -42,10 +42,11 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
mb = stdenv.lib.maybeAttr;
|
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
|
in
|
||||||
aName: a@{ name, basename, requiredGems, sha256, meta }:
|
aName: a@{ name, basename, requiredGems, sha256, meta }:
|
||||||
mb name (mb basename (
|
stdenv.lib.foldl (d: o: mb name (mb basename d o) o) (patchedGem a) overrides
|
||||||
stdenv.mkDerivation (removeAttrs (stdenv.lib.mergeAttrsByFuncDefaults
|
|
||||||
[ (gemDefaults a) (mb name {} patches) (mb basename {} patches) ]
|
|
||||||
) ["mergeAttrBy"])
|
|
||||||
) overwrites) overwrites
|
|
||||||
|
@ -1,12 +1,33 @@
|
|||||||
{stdenv, config, fetchurl, callPackage}:
|
{stdenv, getConfig, fetchurl, callPackage}:
|
||||||
|
|
||||||
let
|
let
|
||||||
generated = stdenv.lib.attrByPath [ "gems" "generated" ] (import ./generated.nix) config;
|
inherit (stdenv.lib) fold optional;
|
||||||
auto = generated merged;
|
gemsMergeableFun = { generatedFuns ? [], patchFuns ? [], overrideFuns ? [] }:
|
||||||
patches = callPackage ./patches.nix { } gems;
|
let
|
||||||
overwrites = callPackage ./overwrites.nix { } gems;
|
generatedAttrs = map (f: f customGems) generatedFuns;
|
||||||
merged = stdenv.lib.mapAttrs gem auto.gems;
|
generatedGems = map (a: a.gems) generatedAttrs;
|
||||||
gem = callPackage ./gem.nix { inherit patches overwrites; };
|
gem = callPackage ./gem.nix {
|
||||||
gems = merged // auto.aliases;
|
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
|
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;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{ xapianBindings }:
|
{ xapianBindings }:
|
||||||
gems:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
xapian_full = xapianBindings.merge { cfg = { rubySupport = true; }; };
|
xapian_full = xapianBindings.merge { cfg = { rubySupport = true; }; };
|
@ -1,6 +1,5 @@
|
|||||||
{fetchurl, writeScript, ruby, ncurses, sqlite, libxml2, libxslt, libffi, zlib,
|
{fetchurl, writeScript, ruby, ncurses, sqlite, libxml2, libxslt, libffi, zlib,
|
||||||
libuuid}:
|
libuuid, gems}:
|
||||||
gems:
|
|
||||||
|
|
||||||
let
|
let
|
||||||
patchUsrBinEnv = writeScript "path-usr-bin-env" ''
|
patchUsrBinEnv = writeScript "path-usr-bin-env" ''
|
||||||
|
Loading…
Reference in New Issue
Block a user