summary refs log tree commit diff
path: root/pkgs/development/tools/clang-tools
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2019-11-13 14:38:22 +0000
committerJörg Thalheim <joerg@thalheim.io>2019-11-13 18:29:58 +0000
commita10ef1aa4fe62aa97859d24921f501183861b7b6 (patch)
tree66a3ee23b182113951663a0ca0f027e808026a55 /pkgs/development/tools/clang-tools
parent5d2dc6fd79291d3e46c186644b54e45adc09cfcb (diff)
downloadnixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar.gz
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar.bz2
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar.lz
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar.xz
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.tar.zst
nixpkgs-a10ef1aa4fe62aa97859d24921f501183861b7b6.zip
clang-tools: teach about nix's include path
By translating NIX_CFLAGS_COMPILE to CPATH,
all tools will now find c headers properly,
when run in a nix-shell.
Diffstat (limited to 'pkgs/development/tools/clang-tools')
-rw-r--r--pkgs/development/tools/clang-tools/default.nix11
-rw-r--r--pkgs/development/tools/clang-tools/wrapper20
2 files changed, 28 insertions, 3 deletions
diff --git a/pkgs/development/tools/clang-tools/default.nix b/pkgs/development/tools/clang-tools/default.nix
index 0abea99f64a..2e8f48901ab 100644
--- a/pkgs/development/tools/clang-tools/default.nix
+++ b/pkgs/development/tools/clang-tools/default.nix
@@ -13,15 +13,20 @@ in stdenv.mkDerivation {
     runHook preInstall
 
     mkdir -p $out/bin
+    export libc_includes="${stdenv.lib.getDev stdenv.cc.libc}/include"
+    export libcpp_includes="${llvmPackages.libcxx}/include/c++/v1"
+
+    export clang=${clang}
+    substituteAll ${./wrapper} $out/bin/clangd
+    chmod +x $out/bin/clangd
     for tool in \
       clang-apply-replacements \
       clang-check \
       clang-format \
       clang-rename \
-      clang-tidy \
-      clangd
+      clang-tidy
     do
-      ln -s ${clang}/bin/$tool $out/bin/$tool
+      ln -s $out/bin/clangd $out/bin/$tool
     done
 
     runHook postInstall
diff --git a/pkgs/development/tools/clang-tools/wrapper b/pkgs/development/tools/clang-tools/wrapper
new file mode 100644
index 00000000000..fe17880b07d
--- /dev/null
+++ b/pkgs/development/tools/clang-tools/wrapper
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+buildcpath() {
+  local path
+  while (( $# )); do
+    case $1 in
+        -isystem)
+            shift
+            path=$path${path':'}$1
+    esac
+    shift
+  done
+  echo $path
+}
+
+export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE})
+export CPATH=${CPATH}${CPATH:+':'}@libc_includes@
+export CPLUS_INCLUDE_PATH=${CPATH}${CPATH:+':'}@libcpp_includes@
+
+exec -a "$0" @clang@/bin/$(basename $0) "$@"