diff options
author | Dmitry Kalinkin <dmitry.kalinkin@gmail.com> | 2016-09-18 14:54:12 -0400 |
---|---|---|
committer | Dmitry Kalinkin <dmitry.kalinkin@gmail.com> | 2016-09-18 14:54:12 -0400 |
commit | 96d2a6c4348950eb29e26927cb08a45b415d484c (patch) | |
tree | 6cd6df77b574c23b7bf4a54eeddc1fc8567a5d99 /pkgs/development/tools/misc | |
parent | 3afe2061a2fada629c315c11947f419aaf895548 (diff) | |
download | nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar.gz nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar.bz2 nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar.lz nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar.xz nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.tar.zst nixlib-96d2a6c4348950eb29e26927cb08a45b415d484c.zip |
ccache: improve compiler wrapper
* move compiler detection logic from nix to bash * robust inheritance of isGNU/isClang Fixes: d3274e8ae3 ('ccache: support clang in ccache.links') Fixes: 634824d50b ('ccache: fix references to stdenv.cc.cc.isClang')
Diffstat (limited to 'pkgs/development/tools/misc')
-rw-r--r-- | pkgs/development/tools/misc/ccache/default.nix | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/pkgs/development/tools/misc/ccache/default.nix b/pkgs/development/tools/misc/ccache/default.nix index c90e356e044f..99348e907a94 100644 --- a/pkgs/development/tools/misc/ccache/default.nix +++ b/pkgs/development/tools/misc/ccache/default.nix @@ -18,44 +18,46 @@ let ccache = stdenv.mkDerivation rec { doCheck = !stdenv.isDarwin; passthru = let - cc = stdenv.cc.cc; - ccname = if stdenv.cc.isClang then "clang" else "gcc"; - cxxname = if stdenv.cc.isClang then "clang++" else "g++"; + unwrappedCC = stdenv.cc.cc; 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 (stdenv.cc) isClang; - inherit (cc) isGNU; + isClang = unwrappedCC.isClang or false; + isGNU = unwrappedCC.isGNU or false; }; - inherit (cc) lib; + inherit (unwrappedCC) lib; buildCommand = '' mkdir -p $out/bin - if [ -x "${cc}/bin/${ccname}" ]; then - cat > $out/bin/${ccname} << EOF - #!/bin/sh - ${extraConfig} - exec ${ccache}/bin/ccache ${cc}/bin/${ccname} "\$@" - EOF - chmod +x $out/bin/${ccname} - fi - if [ -x "${cc}/bin/${cxxname}" ]; then - cat > $out/bin/${cxxname} << EOF - #!/bin/sh - ${extraConfig} - exec ${ccache}/bin/ccache ${cc}/bin/${cxxname} "\$@" + + wrap() { + local cname="$1" + if [ -x "${unwrappedCC}/bin/$cname" ]; then + cat > $out/bin/$cname << EOF + #!/bin/sh + ${extraConfig} + exec ${ccache}/bin/ccache ${unwrappedCC}/bin/$cname "\$@" EOF - chmod +x $out/bin/${cxxname} - fi - for executable in $(ls ${cc}/bin); do + chmod +x $out/bin/$cname + fi + } + + wrap cc + wrap c++ + wrap gcc + wrap g++ + wrap clang + wrap clang++ + + for executable in $(ls ${unwrappedCC}/bin); do if [ ! -x "$out/bin/$executable" ]; then - ln -s ${cc}/bin/$executable $out/bin/$executable + ln -s ${unwrappedCC}/bin/$executable $out/bin/$executable fi done - for file in $(ls ${cc} | grep -vw bin); do - ln -s ${cc}/$file $out/$file + for file in $(ls ${unwrappedCC} | grep -vw bin); do + ln -s ${unwrappedCC}/$file $out/$file done ''; }; |