{ungoogled-,}chromium,chromedriver: 130.0.6723.58 -> 130.0.6723.69 (#351519)
[NixPkgs.git] / pkgs / development / ruby-modules / bundled-common / functions.nix
blob3f9e49fc53be82171b854b4846e97b92a8641b8e
1 { lib, gemConfig, ... }:
3 let
4   inherit (lib) attrValues concatMap converge filterAttrs getAttrs
5                 intersectLists;
7 in rec {
8   bundlerFiles = {
9     gemfile ? null
10   , lockfile ? null
11   , gemset ? null
12   , gemdir ? null
13   , ...
14   }: {
15     inherit gemdir;
17     gemfile =
18     if gemfile == null then assert gemdir != null; gemdir + "/Gemfile"
19     else gemfile;
21     lockfile =
22     if lockfile == null then assert gemdir != null; gemdir + "/Gemfile.lock"
23     else lockfile;
25     gemset =
26     if gemset == null then assert gemdir != null; gemdir + "/gemset.nix"
27     else gemset;
28   };
30   filterGemset = { ruby, groups, ... }: gemset:
31     let
32       platformGems = filterAttrs (_: platformMatches ruby) gemset;
33       directlyMatchingGems = filterAttrs (_: groupMatches groups) platformGems;
35       expandDependencies = gems:
36         let
37           depNames = concatMap (gem: gem.dependencies or []) (attrValues gems);
38           deps = getAttrs depNames platformGems;
39         in
40           gems // deps;
41     in
42       converge expandDependencies directlyMatchingGems;
44   platformMatches = {rubyEngine, version, ...}: attrs: (
45   !(attrs ? platforms) ||
46   builtins.length attrs.platforms == 0 ||
47     builtins.any (platform:
48       platform.engine == rubyEngine &&
49         (!(platform ? version) || platform.version == version.majMin)
50     ) attrs.platforms
51   );
53   groupMatches = groups: attrs:
54     groups == null || !(attrs ? groups) ||
55       (intersectLists (groups ++ [ "default" ]) attrs.groups) != [];
57   applyGemConfigs = attrs:
58     (if gemConfig ? ${attrs.gemName}
59     then attrs // gemConfig.${attrs.gemName} attrs
60     else attrs);
62   genStubsScript = { lib, runCommand, ruby, confFiles, bundler, groups, binPaths, ... }:
63     let
64       genStubsScript = runCommand "gen-bin-stubs"
65         {
66           strictDeps = true;
67           nativeBuildInputs = [ ruby ];
68         }
69         ''
70           cp ${./gen-bin-stubs.rb} $out
71           chmod +x $out
72           patchShebangs --build $out
73         '';
74     in
75     ''
76       ${genStubsScript} \
77         "${ruby}/bin/ruby" \
78         "${confFiles}/Gemfile" \
79         "$out/${ruby.gemPath}" \
80         "${bundler}/${ruby.gemPath}/gems/bundler-${bundler.version}" \
81         ${lib.escapeShellArg binPaths} \
82         ${lib.escapeShellArg groups}
83     '';
85   pathDerivation = { gemName, version, path, ...  }:
86     let
87       res = {
88           type = "derivation";
89           bundledByPath = true;
90           name = gemName;
91           version = version;
92           outPath = "${path}";
93           outputs = [ "out" ];
94           out = res;
95           outputName = "out";
96           suffix = version;
97           gemType = "path";
98         };
99     in res;
101   composeGemAttrs = ruby: gems: name: attrs: ((removeAttrs attrs ["platforms"]) // {
102     inherit ruby;
103     inherit (attrs.source) type;
104     source = removeAttrs attrs.source ["type"];
105     gemName = name;
106     gemPath = map (gemName: gems.${gemName}) (attrs.dependencies or []);
107   });