about summary refs log tree commit diff
path: root/pkgs/development/tools/misc
diff options
context:
space:
mode:
authorDmitry Kalinkin <dmitry.kalinkin@gmail.com>2016-08-30 21:55:43 -0400
committerDmitry Kalinkin <dmitry.kalinkin@gmail.com>2016-09-17 16:32:38 -0400
commitd3274e8ae3bd2c533e8b2d18f63282ff065562c9 (patch)
tree13db95785b356c7d8dd5bdfdcb11022cbe74d984 /pkgs/development/tools/misc
parentd7f22f96b08a440613b14c90bd382706101af934 (diff)
downloadnixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar.gz
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar.bz2
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar.lz
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar.xz
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.tar.zst
nixlib-d3274e8ae3bd2c533e8b2d18f63282ff065562c9.zip
ccache: support clang in ccache.links
Diffstat (limited to 'pkgs/development/tools/misc')
-rw-r--r--pkgs/development/tools/misc/ccache/default.nix37
1 files changed, 20 insertions, 17 deletions
diff --git a/pkgs/development/tools/misc/ccache/default.nix b/pkgs/development/tools/misc/ccache/default.nix
index 215d6ee2f0a2..c98e3a20813f 100644
--- a/pkgs/development/tools/misc/ccache/default.nix
+++ b/pkgs/development/tools/misc/ccache/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, runCommand, gcc, zlib }:
+{ stdenv, fetchurl, fetchpatch, runCommand, zlib }:
 
 let ccache = stdenv.mkDerivation rec {
   name = "ccache-${version}";
@@ -17,41 +17,44 @@ let ccache = stdenv.mkDerivation rec {
 
   doCheck = !stdenv.isDarwin;
 
-  passthru = {
+  passthru = let
+      cc = stdenv.cc.cc;
+      ccname = if stdenv.cc.cc.isClang or false then "clang" else "gcc";
+      cxxname = if stdenv.cc.cc.isClang or false then "clang++" else "g++";
+    in {
     # A derivation that provides gcc and g++ commands, but that
     # will end up calling ccache for the given cacheDir
     links = extraConfig: stdenv.mkDerivation rec {
       name = "ccache-links";
       passthru = {
-        inherit gcc;
-        isGNU = true;
+        inherit (cc) isGNU isClang;
       };
-      inherit (gcc.cc) lib;
+      inherit (cc) lib;
       buildCommand = ''
         mkdir -p $out/bin
-        if [ -x "${gcc.cc}/bin/gcc" ]; then
-          cat > $out/bin/gcc << EOF
+        if [ -x "${cc}/bin/${ccname}" ]; then
+          cat > $out/bin/${ccname} << EOF
           #!/bin/sh
           ${extraConfig}
-          exec ${ccache}/bin/ccache ${gcc.cc}/bin/gcc "\$@"
+          exec ${ccache}/bin/ccache ${cc}/bin/${ccname} "\$@"
         EOF
-          chmod +x $out/bin/gcc
+          chmod +x $out/bin/${ccname}
         fi
-        if [ -x "${gcc.cc}/bin/g++" ]; then
-          cat > $out/bin/g++ << EOF
+        if [ -x "${cc}/bin/${cxxname}" ]; then
+          cat > $out/bin/${cxxname} << EOF
           #!/bin/sh
           ${extraConfig}
-          exec ${ccache}/bin/ccache ${gcc.cc}/bin/g++ "\$@"
+          exec ${ccache}/bin/ccache ${cc}/bin/${cxxname} "\$@"
         EOF
-          chmod +x $out/bin/g++
+          chmod +x $out/bin/${cxxname}
         fi
-        for executable in $(ls ${gcc.cc}/bin); do
+        for executable in $(ls ${cc}/bin); do
           if [ ! -x "$out/bin/$executable" ]; then
-            ln -s ${gcc.cc}/bin/$executable $out/bin/$executable
+            ln -s ${cc}/bin/$executable $out/bin/$executable
           fi
         done
-        for file in $(ls ${gcc.cc} | grep -vw bin); do
-          ln -s ${gcc.cc}/$file $out/$file
+        for file in $(ls ${cc} | grep -vw bin); do
+          ln -s ${cc}/$file $out/$file
         done
       '';
     };