From b9ea8c225689c74af2f68c81e80a21bb61622a88 Mon Sep 17 00:00:00 2001 From: Eike Foede Date: Thu, 12 Mar 2026 08:42:00 +0100 Subject: [PATCH] clang-tools: Respect $CLANGD_FLAGS in wrapper clangd can take arguments also via environment variable CLANGD_FLAGS. This has to be respected in the wrapper, which checks whether a --query-driver was provided. --- .../llvm/common/clang-tools/default.nix | 36 +++++++++---------- .../compilers/llvm/common/clang-tools/wrapper | 2 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/pkgs/development/compilers/llvm/common/clang-tools/default.nix b/pkgs/development/compilers/llvm/common/clang-tools/default.nix index cae95a4a33ea..49d4c6c74ff0 100644 --- a/pkgs/development/compilers/llvm/common/clang-tools/default.nix +++ b/pkgs/development/compilers/llvm/common/clang-tools/default.nix @@ -50,7 +50,7 @@ stdenv.mkDerivation (finalAttrs: { runHook postInstall ''; - passthru.tests.smokeOk = + passthru.tests = let src = writeText "main.cpp" '' #include @@ -61,28 +61,24 @@ stdenv.mkDerivation (finalAttrs: { ''; in - runCommand "clang-tools-test-smoke-ok" { } '' - ${finalAttrs.finalPackage}/bin/clangd --check=${src} - touch $out - ''; - - passthru.tests.smokeErr = - let - src = writeText "main.cpp" '' - #include - - int main() { - std::cout << "Hi!"; - } + { + smokeOk = runCommand "clang-tools-test-smoke-ok" { } '' + ${finalAttrs.finalPackage}/bin/clangd --check=${src} + touch $out ''; + smokeErr = runCommand "clang-tools-test-smoke-err" { } '' + (${finalAttrs.finalPackage}/bin/clangd --query-driver='**' --check=${src} 2>&1 || true) \ + | grep 'use of undeclared identifier' - in - runCommand "clang-tools-test-smoke-err" { } '' - (${finalAttrs.finalPackage}/bin/clangd --query-driver='**' --check=${src} 2>&1 || true) \ - | grep 'use of undeclared identifier' + touch $out + ''; + environmentErr = runCommand "clang-tools-test-environment-err" { } '' + (CLANGD_FLAGS="--query-driver='**'" ${finalAttrs.finalPackage}/bin/clangd --check=${src} 2>&1 || true) \ + | grep 'use of undeclared identifier' - touch $out - ''; + touch $out + ''; + }; meta = llvm_meta // { description = "Standalone command line tools for C++ development"; diff --git a/pkgs/development/compilers/llvm/common/clang-tools/wrapper b/pkgs/development/compilers/llvm/common/clang-tools/wrapper index bfd1da73cf61..6601d6875f8e 100755 --- a/pkgs/development/compilers/llvm/common/clang-tools/wrapper +++ b/pkgs/development/compilers/llvm/common/clang-tools/wrapper @@ -40,7 +40,7 @@ buildcpluspath() { # don't want to infect user-specified toolchain and headers with our stuff. extendcpath=true -for arg in "$@"; do +for arg in "$@" $CLANGD_FLAGS; do if [[ "${arg}" == \-\-query\-driver* ]]; then extendcpath=false fi