1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-24 22:11:15 +02:00
nix/tests/functional/lang/eval-okay-functionargs.nix
Robert Hensing 96e550efc5 Format .nix files
... with nixfmt (rfc style)
2025-01-24 17:04:02 +01:00

150 lines
2.8 KiB
Nix

let
stdenvFun =
{ }:
{
name = "stdenv";
};
stdenv2Fun =
{ }:
{
name = "stdenv2";
};
fetchurlFun =
{ stdenv }:
assert stdenv.name == "stdenv";
{
name = "fetchurl";
};
atermFun =
{ stdenv, fetchurl }:
{
name = "aterm-${stdenv.name}";
};
aterm2Fun =
{ stdenv, fetchurl }:
{
name = "aterm2-${stdenv.name}";
};
nixFun =
{
stdenv,
fetchurl,
aterm,
}:
{
name = "nix-${stdenv.name}-${aterm.name}";
};
mplayerFun =
{
stdenv,
fetchurl,
enableX11 ? false,
xorg ? null,
enableFoo ? true,
foo ? null,
}:
assert stdenv.name == "stdenv2";
assert enableX11 -> xorg.libXv.name == "libXv";
assert enableFoo -> foo != null;
{
name = "mplayer-${stdenv.name}.${xorg.libXv.name}-${xorg.libX11.name}";
};
makeOverridable =
f: origArgs:
f origArgs
// {
override =
newArgs:
makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs));
};
callPackage_ =
pkgs: f: args:
makeOverridable f ((builtins.intersectAttrs (builtins.functionArgs f) pkgs) // args);
allPackages =
{
overrides ? (pkgs: pkgsPrev: { }),
}:
let
callPackage = callPackage_ pkgs;
pkgs = pkgsStd // (overrides pkgs pkgsStd);
pkgsStd = {
inherit pkgs;
stdenv = callPackage stdenvFun { };
stdenv2 = callPackage stdenv2Fun { };
fetchurl = callPackage fetchurlFun { };
aterm = callPackage atermFun { };
xorg = callPackage xorgFun { };
mplayer = callPackage mplayerFun {
stdenv = pkgs.stdenv2;
enableFoo = false;
};
nix = callPackage nixFun { };
};
in
pkgs;
libX11Fun =
{ stdenv, fetchurl }:
{
name = "libX11";
};
libX11_2Fun =
{ stdenv, fetchurl }:
{
name = "libX11_2";
};
libXvFun =
{
stdenv,
fetchurl,
libX11,
}:
{
name = "libXv";
};
xorgFun =
{ pkgs }:
let
callPackage = callPackage_ (pkgs // pkgs.xorg);
in
{
libX11 = callPackage libX11Fun { };
libXv = callPackage libXvFun { };
};
in
let
pkgs = allPackages { };
pkgs2 = allPackages {
overrides = pkgs: pkgsPrev: {
stdenv = pkgs.stdenv2;
nix = pkgsPrev.nix.override { aterm = aterm2Fun { inherit (pkgs) stdenv fetchurl; }; };
xorg = pkgsPrev.xorg // {
libX11 = libX11_2Fun { inherit (pkgs) stdenv fetchurl; };
};
};
};
in
[
pkgs.stdenv.name
pkgs.fetchurl.name
pkgs.aterm.name
pkgs2.aterm.name
pkgs.xorg.libX11.name
pkgs.xorg.libXv.name
pkgs.mplayer.name
pkgs2.mplayer.name
pkgs.nix.name
pkgs2.nix.name
]