From 10b12020a84a5dcd211b6625674eb2a4f46a0ccc Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Wed, 28 Jan 2026 11:35:12 +0000 Subject: [PATCH 1/2] clang-tools: don't include C++ include paths in $CPATH --- .../compilers/llvm/common/clang-tools/wrapper | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/pkgs/development/compilers/llvm/common/clang-tools/wrapper b/pkgs/development/compilers/llvm/common/clang-tools/wrapper index fa74a18b3c9f..c4ec3ed764ca 100755 --- a/pkgs/development/compilers/llvm/common/clang-tools/wrapper +++ b/pkgs/development/compilers/llvm/common/clang-tools/wrapper @@ -1,6 +1,24 @@ #!/bin/sh buildcpath() { + local path after + while (( $# )); do + case $1 in + -isystem) + shift + path=$path${path:+':'}$1 + ;; + -idirafter) + shift + after=$after${after:+':'}$1 + ;; + esac + shift + done + echo $path${after:+':'}$after +} + +buildcpluspath() { local path after while (( $# )); do case $1 in @@ -32,9 +50,9 @@ if [ "$extendcpath" = true ]; then export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ $(<@clang@/nix-support/libc-cflags)) - export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ - $(<@clang@/nix-support/libcxx-cxxflags) \ - $(<@clang@/nix-support/libc-cflags)) + export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpluspath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libcxx-cxxflags) \ + $(<@clang@/nix-support/libc-cflags)) fi @out@/bin/$(basename $0)-unwrapped "$@" From 0273d9cedf93e6a98142d97f6a8d0cabcf2287a1 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Wed, 28 Jan 2026 11:36:01 +0000 Subject: [PATCH 2/2] clang-tools: use $C_INCLUDE_PATH for C includes $CPATH is taken to mean the same thing as -I by clang, whereas $C_INCLUDE_PATH is -isystem. Using $CPATH means tools like clangd will generate warnings for problems in system headers, which is undesirable. See llvm/llvm-project#154015 --- pkgs/development/compilers/llvm/common/clang-tools/wrapper | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/llvm/common/clang-tools/wrapper b/pkgs/development/compilers/llvm/common/clang-tools/wrapper index c4ec3ed764ca..bfd1da73cf61 100755 --- a/pkgs/development/compilers/llvm/common/clang-tools/wrapper +++ b/pkgs/development/compilers/llvm/common/clang-tools/wrapper @@ -47,8 +47,8 @@ for arg in "$@"; do done if [ "$extendcpath" = true ]; then - export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ - $(<@clang@/nix-support/libc-cflags)) + export C_INCLUDE_PATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libc-cflags)) export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpluspath ${NIX_CFLAGS_COMPILE} \ $(<@clang@/nix-support/libcxx-cxxflags) \