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