Author: viric
Date: Sat Jan 21 00:25:30 2012
New Revision: 31747
URL: https://nixos.org/websvn/nix/?rev=31747&sc=1
Log:
Modifying the all-packages stdenv changer, so it allows having a global stdenv
wrapper.
This will fail for crossStdenv, but it allows a wrapper that uses ccache for
example. That's so described in all-packages.nix around 'ccache'.
Modified:
nixpkgs/trunk/pkgs/development/tools/misc/ccache/default.nix
nixpkgs/trunk/pkgs/top-level/all-packages.nix
Modified: nixpkgs/trunk/pkgs/development/tools/misc/ccache/default.nix
==============================================================================
--- nixpkgs/trunk/pkgs/development/tools/misc/ccache/default.nix Fri Jan
20 18:08:54 2012 (r31746)
+++ nixpkgs/trunk/pkgs/development/tools/misc/ccache/default.nix Sat Jan
21 00:25:30 2012 (r31747)
@@ -1,10 +1,38 @@
-{stdenv, fetchurl}:
+{stdenv, fetchurl, runCommand, gcc}:
+let
+ ccache =
stdenv.mkDerivation {
- name = "ccache-3.0";
+ name = "ccache-3.1.7";
src = fetchurl {
- url = http://samba.org/ftp/ccache/ccache-3.0.tar.gz;
- sha256 = "0mi8sfnlcp2pmp7nzb7894rv85v13zxrj0v3qgnwhny3gx2p5pgk";
+ url = http://samba.org/ftp/ccache/ccache-3.1.7.tar.gz;
+ sha256 = "04ax6ks49b6rn57hx4v9wbvmsfmw6ipn0wyfqwhh4lzw70flv3r7";
+ };
+
+ passthru = {
+ # A derivation that provides gcc and g++ commands, but that
+ # will end up calling ccache for the given cacheDir
+ links = cacheDir : (runCommand "ccache-links"
+ { inherit (gcc) langC langCC; }
+ ''
+ mkdir -p $out/bin
+ if [ $langC -eq 1 ]; then
+ cat > $out/bin/gcc << EOF
+ #!/bin/sh
+ export CCACHE_DIR=${cacheDir}
+ exec ${ccache}/bin/ccache ${gcc.gcc}/bin/gcc "\$@"
+ EOF
+ chmod +x $out/bin/gcc
+ fi
+ if [ $langCC -eq 1 ]; then
+ cat > $out/bin/g++ << EOF
+ #!/bin/sh
+ export CCACHE_DIR=${cacheDir}
+ exec ${ccache}/bin/ccache ${gcc.gcc}/bin/g++ "\$@"
+ EOF
+ chmod +x $out/bin/g++
+ fi
+ '');
};
meta = {
@@ -12,4 +40,6 @@
homepage = http://ccache.samba.org/;
license = "GPL";
};
-}
+};
+in
+ccache
Modified: nixpkgs/trunk/pkgs/top-level/all-packages.nix
==============================================================================
--- nixpkgs/trunk/pkgs/top-level/all-packages.nix Fri Jan 20 18:08:54
2012 (r31746)
+++ nixpkgs/trunk/pkgs/top-level/all-packages.nix Sat Jan 21 00:25:30
2012 (r31747)
@@ -204,11 +204,15 @@
stdenv =
if bootStdenv != null then (bootStdenv // {inherit platform;}) else
- let changer = getConfig ["replaceStdenv"] null;
+ let
+ changer = getConfig ["replaceStdenv"] null;
in if changer != null then
changer {
- stdenv = stdenvCross;
- overrideSetup = overrideSetup;
+ # We import again all-packages to avoid recursivities.
+ pkgs = import ./all-packages.nix {
+ # We remove packageOverrides to avoid recursivities
+ config = removeAttrs config [ "replaceStdenv" ];
+ };
}
else if crossSystem != null then
stdenvCross
@@ -2888,6 +2892,13 @@
ccache = callPackage ../development/tools/misc/ccache { };
+ # Wrapper that works as gcc or g++
+ # It can be used by setting in nixpkgs config like this, for example:
+ # replaceStdenv = { pkgs }: (pkgs.ccacheStdenv "/var/ccache")
+ # But if you build in chroot, you should have that path in chroot
+ ccacheWrapper = cacheDir: wrapGCC (ccache.links cacheDir);
+ ccacheStdenv = cacheDir: overrideGCC stdenv (ccacheWrapper cacheDir);
+
complexity = callPackage ../development/tools/misc/complexity { };
ctags = callPackage ../development/tools/misc/ctags { };
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits