From e2197465c16a3c04935eb892d6485b7551dd65f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 8 Jun 2017 19:00:40 +0100 Subject: [PATCH] cc-wrapper: externalize default_cxx_stdlib_compile This value is require to get c++ std include path for libclang based tools (vim plugins in my case). I currently extract it this with this rather command: ``` eval echo $(nix-instantiate --eval --expr 'with (import ) {}; clang.default_cxx_stdlib_compile') ``` it did not trigger any recompilation on my system. --- pkgs/build-support/cc-wrapper/default.nix | 12 ++++++------ pkgs/misc/vim-plugins/default.nix | 7 +++++++ .../vim2nix/additional-nix-code/clang_complete | 7 +++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 95c6bee3cc77..e56f1f9a7d4a 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -34,6 +34,9 @@ let binutils_bin = if nativeTools then "" else getBin binutils; # The wrapper scripts use 'cat' and 'grep', so we may need coreutils. coreutils_bin = if nativeTools then "" else getBin coreutils; + + default_cxx_stdlib_compile=optionalString (stdenv.isLinux && !(cc.isGNU or false)) + "-isystem $(echo -n ${cc.gcc}/include/c++/*) -isystem $(echo -n ${cc.gcc}/include/c++/*)/$(${cc.gcc}/bin/gcc -dumpmachine)"; in stdenv.mkDerivation { @@ -46,8 +49,9 @@ stdenv.mkDerivation { inherit cc shell libc_bin libc_dev libc_lib binutils_bin coreutils_bin; gnugrep_bin = if nativeTools then "" else gnugrep; + passthru = { - inherit libc nativeTools nativeLibc nativePrefix isGNU isClang; + inherit libc nativeTools nativeLibc nativePrefix isGNU isClang default_cxx_stdlib_compile; emacsBufferSetup = pkgs: '' ; We should handle propagation here too @@ -189,11 +193,7 @@ stdenv.mkDerivation { export real_cc=cc export real_cxx=c++ - export default_cxx_stdlib_compile="${ - if stdenv.isLinux && !(cc.isGNU or false) - then "-isystem $(echo -n ${cc.gcc}/include/c++/*) -isystem $(echo -n ${cc.gcc}/include/c++/*)/$(${cc.gcc}/bin/gcc -dumpmachine)" - else "" - }" + export default_cxx_stdlib_compile="${default_cxx_stdlib_compile}" if [ -e $ccPath/gcc ]; then wrap gcc ${./cc-wrapper.sh} $ccPath/gcc diff --git a/pkgs/misc/vim-plugins/default.nix b/pkgs/misc/vim-plugins/default.nix index 09e4d365f171..416262f9e1e9 100644 --- a/pkgs/misc/vim-plugins/default.nix +++ b/pkgs/misc/vim-plugins/default.nix @@ -293,6 +293,13 @@ rec { sha256 = "19zs03giv8h5xmv18y9zn85sxr8akphvbscclrqhs4cf88285cgl"; }; dependencies = []; + # In addition to the arguments you pass to your compiler, you also need to + # specify the path of the C++ std header (if you are using C++). + # These usually implicitly set by cc-wrapper around clang (pkgs/build-support/cc-wrapper). + # The linked ruby code shows generates the required '.clang_complete' for cmake based projects + # https://gist.github.com/Mic92/135e83803ed29162817fce4098dec144 + # as an alternative you can execute the following command: + # $ eval echo $(nix-instantiate --eval --expr 'with (import ) {}; clang.default_cxx_stdlib_compile') preFixup = '' substituteInPlace "$out"/share/vim-plugins/clang_complete/plugin/clang_complete.vim \ --replace "let g:clang_library_path = '' + "''" + ''" "let g:clang_library_path='${llvmPackages.clang.cc}/lib/libclang.so'" diff --git a/pkgs/misc/vim-plugins/vim2nix/additional-nix-code/clang_complete b/pkgs/misc/vim-plugins/vim2nix/additional-nix-code/clang_complete index 64e064e2a460..ed88e08742ed 100644 --- a/pkgs/misc/vim-plugins/vim2nix/additional-nix-code/clang_complete +++ b/pkgs/misc/vim-plugins/vim2nix/additional-nix-code/clang_complete @@ -1,3 +1,10 @@ + # In addition to the arguments you pass to your compiler, you also need to + # specify the path of the C++ std header (if you are using C++). + # These usually implicitly set by cc-wrapper around clang (pkgs/build-support/cc-wrapper). + # The linked ruby code shows generates the required '.clang_complete' for cmake based projects + # https://gist.github.com/Mic92/135e83803ed29162817fce4098dec144 + # as an alternative you can execute the following command: + # $ eval echo $(nix-instantiate --eval --expr 'with (import ) {}; clang.default_cxx_stdlib_compile') preFixup = '' substituteInPlace "$out"/share/vim-plugins/clang_complete/plugin/clang_complete.vim \ --replace "let g:clang_library_path = '' + "''" + ''" "let g:clang_library_path='${llvmPackages.clang.cc}/lib/libclang.so'"