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
nix-comm...@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-commits

Reply via email to