diff options
author | Rutger Broekhoff | 2025-07-07 21:52:08 +0200 |
---|---|---|
committer | Rutger Broekhoff | 2025-07-07 21:52:08 +0200 |
commit | ba61dfd69504ec6263a9dee9931d93adeb6f3142 (patch) | |
tree | d6c9b78e50eeab24e0c1c09ab45909a6ae3fd5db /test/testdata/eval-okay-functionargs.nix | |
download | verified-dyn-lang-interp-ba61dfd69504ec6263a9dee9931d93adeb6f3142.tar.gz verified-dyn-lang-interp-ba61dfd69504ec6263a9dee9931d93adeb6f3142.zip |
Initialize repository
Diffstat (limited to 'test/testdata/eval-okay-functionargs.nix')
-rw-r--r-- | test/testdata/eval-okay-functionargs.nix | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/test/testdata/eval-okay-functionargs.nix b/test/testdata/eval-okay-functionargs.nix new file mode 100644 index 0000000..68dca62 --- /dev/null +++ b/test/testdata/eval-okay-functionargs.nix | |||
@@ -0,0 +1,80 @@ | |||
1 | let | ||
2 | |||
3 | stdenvFun = { }: { name = "stdenv"; }; | ||
4 | stdenv2Fun = { }: { name = "stdenv2"; }; | ||
5 | fetchurlFun = { stdenv }: assert stdenv.name == "stdenv"; { name = "fetchurl"; }; | ||
6 | atermFun = { stdenv, fetchurl }: { name = "aterm-${stdenv.name}"; }; | ||
7 | aterm2Fun = { stdenv, fetchurl }: { name = "aterm2-${stdenv.name}"; }; | ||
8 | nixFun = { stdenv, fetchurl, aterm }: { name = "nix-${stdenv.name}-${aterm.name}"; }; | ||
9 | |||
10 | mplayerFun = | ||
11 | { stdenv, fetchurl, enableX11 ? false, xorg ? null, enableFoo ? true, foo ? null }: | ||
12 | assert stdenv.name == "stdenv2"; | ||
13 | assert enableX11 -> xorg.libXv.name == "libXv"; | ||
14 | assert enableFoo -> foo != null; | ||
15 | { name = "mplayer-${stdenv.name}.${xorg.libXv.name}-${xorg.libX11.name}"; }; | ||
16 | |||
17 | makeOverridable = f: origArgs: f origArgs // | ||
18 | { override = newArgs: | ||
19 | makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs)); | ||
20 | }; | ||
21 | |||
22 | callPackage_ = pkgs: f: args: | ||
23 | makeOverridable f ((builtins.intersectAttrs (builtins.functionArgs f) pkgs) // args); | ||
24 | |||
25 | allPackages = | ||
26 | { overrides ? (pkgs: pkgsPrev: { }) }: | ||
27 | let | ||
28 | callPackage = callPackage_ pkgs; | ||
29 | pkgs = pkgsStd // (overrides pkgs pkgsStd); | ||
30 | pkgsStd = { | ||
31 | inherit pkgs; | ||
32 | stdenv = callPackage stdenvFun { }; | ||
33 | stdenv2 = callPackage stdenv2Fun { }; | ||
34 | fetchurl = callPackage fetchurlFun { }; | ||
35 | aterm = callPackage atermFun { }; | ||
36 | xorg = callPackage xorgFun { }; | ||
37 | mplayer = callPackage mplayerFun { stdenv = pkgs.stdenv2; enableFoo = false; }; | ||
38 | nix = callPackage nixFun { }; | ||
39 | }; | ||
40 | in pkgs; | ||
41 | |||
42 | libX11Fun = { stdenv, fetchurl }: { name = "libX11"; }; | ||
43 | libX11_2Fun = { stdenv, fetchurl }: { name = "libX11_2"; }; | ||
44 | libXvFun = { stdenv, fetchurl, libX11 }: { name = "libXv"; }; | ||
45 | |||
46 | xorgFun = | ||
47 | { pkgs }: | ||
48 | let callPackage = callPackage_ (pkgs // pkgs.xorg); in | ||
49 | { | ||
50 | libX11 = callPackage libX11Fun { }; | ||
51 | libXv = callPackage libXvFun { }; | ||
52 | }; | ||
53 | |||
54 | in | ||
55 | |||
56 | let | ||
57 | |||
58 | pkgs = allPackages { }; | ||
59 | |||
60 | pkgs2 = allPackages { | ||
61 | overrides = pkgs: pkgsPrev: { | ||
62 | stdenv = pkgs.stdenv2; | ||
63 | nix = pkgsPrev.nix.override { aterm = aterm2Fun { inherit (pkgs) stdenv fetchurl; }; }; | ||
64 | xorg = pkgsPrev.xorg // { libX11 = libX11_2Fun { inherit (pkgs) stdenv fetchurl; }; }; | ||
65 | }; | ||
66 | }; | ||
67 | |||
68 | in | ||
69 | |||
70 | [ pkgs.stdenv.name | ||
71 | pkgs.fetchurl.name | ||
72 | pkgs.aterm.name | ||
73 | pkgs2.aterm.name | ||
74 | pkgs.xorg.libX11.name | ||
75 | pkgs.xorg.libXv.name | ||
76 | pkgs.mplayer.name | ||
77 | pkgs2.mplayer.name | ||
78 | pkgs.nix.name | ||
79 | pkgs2.nix.name | ||
80 | ] | ||