git-subtree-dir: third_party/nix
git-subtree-mainline: cf8cd640c1
git-subtree-split: be66c7a6b24e3c3c6157fd37b86c7203d14acf10
		
	
			
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.5 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
 | |
|   ]
 |