mirror of
https://github.com/NixOS/nix
synced 2025-06-24 22:11:15 +02:00
150 lines
2.8 KiB
Nix
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
|
|
]
|