aboutsummaryrefslogtreecommitdiffstats
path: root/test/testdata/eval-okay-functionargs.nix
diff options
context:
space:
mode:
authorRutger Broekhoff2025-07-07 21:52:08 +0200
committerRutger Broekhoff2025-07-07 21:52:08 +0200
commitba61dfd69504ec6263a9dee9931d93adeb6f3142 (patch)
treed6c9b78e50eeab24e0c1c09ab45909a6ae3fd5db /test/testdata/eval-okay-functionargs.nix
downloadverified-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.nix80
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 @@
1let
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
54in
55
56let
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
68in
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 ]