Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at release-18.03 77 lines 2.2 kB view raw
1{ lib, gemConfig, ... }: 2rec { 3 bundlerFiles = { 4 gemfile ? null 5 , lockfile ? null 6 , gemset ? null 7 , gemdir ? null 8 , ... 9 }: { 10 inherit gemdir; 11 12 gemfile = 13 if gemfile == null then assert gemdir != null; gemdir + "/Gemfile" 14 else gemfile; 15 16 lockfile = 17 if lockfile == null then assert gemdir != null; gemdir + "/Gemfile.lock" 18 else lockfile; 19 20 gemset = 21 if gemset == null then assert gemdir != null; gemdir + "/gemset.nix" 22 else gemset; 23 }; 24 25 filterGemset = {ruby, groups,...}@env: gemset: lib.filterAttrs (name: attrs: platformMatches ruby attrs && groupMatches groups attrs) gemset; 26 27 platformMatches = {rubyEngine, version, ...}@ruby: attrs: ( 28 !(attrs ? "platforms") || 29 builtins.length attrs.platforms == 0 || 30 builtins.any (platform: 31 platform.engine == rubyEngine && 32 (!(platform ? "version") || platform.version == version.majMin) 33 ) attrs.platforms 34 ); 35 36 groupMatches = groups: attrs: ( 37 !(attrs ? "groups") || 38 builtins.any (gemGroup: builtins.any (group: group == gemGroup) groups) attrs.groups 39 ); 40 41 applyGemConfigs = attrs: 42 (if gemConfig ? "${attrs.gemName}" 43 then attrs // gemConfig."${attrs.gemName}" attrs 44 else attrs); 45 46 genStubsScript = { lib, ruby, confFiles, bundler, groups, binPaths, ... }: '' 47 ${ruby}/bin/ruby ${./gen-bin-stubs.rb} \ 48 "${ruby}/bin/ruby" \ 49 "${confFiles}/Gemfile" \ 50 "$out/${ruby.gemPath}" \ 51 "${bundler}/${ruby.gemPath}" \ 52 ${lib.escapeShellArg binPaths} \ 53 ${lib.escapeShellArg groups} 54 ''; 55 56 pathDerivation = { gemName, version, path, ... }: 57 let 58 res = { 59 type = "derivation"; 60 bundledByPath = true; 61 name = gemName; 62 version = version; 63 outPath = path; 64 outputs = [ "out" ]; 65 out = res; 66 outputName = "out"; 67 }; 68 in res; 69 70 composeGemAttrs = ruby: gems: name: attrs: ((removeAttrs attrs ["platforms"]) // { 71 inherit ruby; 72 inherit (attrs.source) type; 73 source = removeAttrs attrs.source ["type"]; 74 gemName = name; 75 gemPath = map (gemName: gems."${gemName}") (attrs.dependencies or []); 76 }); 77}