Author: eelco
Date: Fri Sep 3 10:46:18 2010
New Revision: 23613
URL: https://svn.nixos.org/websvn/nix/?rev=23613&sc=1
Log:
* Added a function `applyGlobalOverrides' to return Nixpkgs with the
specified overrides applied. This does the same as the
`packageOverrides' attribute in ~/.nixpkgs/config.nix, but can be
used within all-packages.nix to do a "deep" override for some
specific package. For instance, to build Thunderbird with an older
version of Glib, you can say:
thunderbird3 =
let
pkgs = applyGlobalOverrides (pkgsOrig:
{ gtkLibs220 = pkgsOrig.gtkLibs220 //
{ glib = pkgsOrig.gtkLibs218.glib; };
});
in
pkgs.callPackage .../thunderbird/3.x.nix {
inherit (pkgs.gnome) libIDL;
};
Note that `pkgsFun' now has an argument `pkgs' to refer to its own
result.
* Moved callPackage etc. into pkgsFun so that it uses the right
overriden packages, if applicable. `defaultScope' isn't in the
result set because that causes nix-env to go into an apparently
infinite recursion.
* Dropped the optional pkgsOrig argument to ~/.nixpkgs/config.nix,
because it's probably not useful or used.
Modified:
nixpkgs/trunk/pkgs/top-level/all-packages.nix
Modified: nixpkgs/trunk/pkgs/top-level/all-packages.nix
==============================================================================
--- nixpkgs/trunk/pkgs/top-level/all-packages.nix Fri Sep 3 09:17:54
2010 (r23612)
+++ nixpkgs/trunk/pkgs/top-level/all-packages.nix Fri Sep 3 10:46:18
2010 (r23613)
@@ -65,9 +65,9 @@
in
# allow both:
# { /* the config */ } and
- # { pkgsOrig, pkgs, ... } : { /* the config */ }
+ # { pkgs, ... } : { /* the config */ }
if builtins.isFunction configExpr
- then configExpr { inherit pkgs pkgsOrig; }
+ then configExpr { inherit pkgs; }
else configExpr;
# Return an attribute from the Nixpkgs configuration file, or
@@ -87,21 +87,42 @@
# Allow packages to be overriden globally via the `packageOverrides'
# configuration option, which must be a function that takes `pkgs'
# as an argument and returns a set of new or overriden packages.
- # `__overrides' is a magic attribute that causes the attributes in
- # its value to be added to the surrounding `rec'. The
- # `packageOverrides' function is called with the *original*
+ # The `packageOverrides' function is called with the *original*
# (un-overriden) set of packages, allowing packageOverrides
# attributes to refer to the original attributes (e.g. "foo =
# ... pkgs.foo ...").
- # We don't want stdenv overrides in the case of cross-building, or
- # otherwise the basic overrided packages will not be built with the
- # crossStdenv adapter.
- overrides = (getConfig ["packageOverrides"] (pkgs: {})) pkgsOrig //
- (if pkgsOrig.stdenv ? overrides && crossSystem == null
- then pkgsOrig.stdenv.overrides else { });
+ pkgs = applyGlobalOverrides (getConfig ["packageOverrides"] (pkgs: {}));
+
- pkgsOrig = pkgsFun { }; # the un-overriden packages, passed to
packageOverrides
- pkgs = pkgsFun overrides; # the overriden, final packages
+ # Return the complete set of packages, after applying the overrides
+ # returned by the `overrider' function (see above).
+ applyGlobalOverrides = overrider:
+ let
+ # Call the overrider function. We don't want stdenv overrides
+ # in the case of cross-building, or otherwise the basic
+ # overrided packages will not be built with the crossStdenv
+ # adapter.
+ overrides = overrider pkgsOrig //
+ (lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem ==
null) pkgsOrig.stdenv.overrides);
+
+ # The un-overriden packages, passed to `overrider'.
+ pkgsOrig = pkgsFun pkgs {};
+
+ # The overriden, final packages.
+ pkgs = pkgsFun pkgs overrides;
+ in pkgs;
+
+
+ # The package compositions. Yes, this isn't properly indented.
+ pkgsFun = pkgs: __overrides:
+ with helperFunctions;
+ let defaultScope = pkgs // pkgs.xorg; in
+ helperFunctions // rec {
+
+ # `__overrides' is a magic attribute that causes the attributes in
+ # its value to be added to the surrounding `rec'. We'll remove this
+ # eventually.
+ inherit __overrides;
# We use `callPackage' to be able to omit function arguments that
@@ -112,26 +133,19 @@
newScope = extra: lib.callPackageWith (defaultScope // extra);
- defaultScope = pkgs // pkgs.xorg;
-
-
- # The package compositions. Yes, this isn't properly indented.
- pkgsFun = __overrides: with helperFunctions; helperFunctions // rec {
-
-
+
# Override system. This is useful to build i686 packages on x86_64-linux.
forceSystem = system: (import ./all-packages.nix) {
inherit system;
inherit bootStdenv noSysDirs gccWithCC gccWithProfiling config;
};
+
# Used by wine, firefox with debugging version of Flash, ...
pkgsi686Linux = forceSystem "i686-linux";
callPackage_i686 = lib.callPackageWith (pkgsi686Linux // pkgsi686Linux.xorg);
- inherit __overrides;
-
# For convenience, allow callers to get the path to Nixpkgs.
path = ../..;
@@ -853,7 +867,7 @@
nbd = callPackage ../tools/networking/nbd {
glib = gtkLibs.glib.override {
stdenv = makeStaticBinaries stdenv;
- };
+ };
};
nc6 = callPackage ../tools/networking/nc6 { };
@@ -2082,7 +2096,7 @@
python24 = lowPrio (callPackage ../development/interpreters/python/2.4 { });
python26Base = lowPrio (makeOverridable (import
../development/interpreters/python/2.6) {
- inherit fetchurl stdenv zlib bzip2 gdbm;
+ inherit (pkgs) fetchurl stdenv zlib bzip2 gdbm;
arch = if stdenv.isDarwin then darwinArchUtility else null;
sw_vers = if stdenv.isDarwin then darwinSwVersUtility else null;
});
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits