diff --git a/pkgs/development/tools/clang-tools/default.nix b/pkgs/development/tools/clang-tools/default.nix index bfc00fb6e3d..b259b683dde 100644 --- a/pkgs/development/tools/clang-tools/default.nix +++ b/pkgs/development/tools/clang-tools/default.nix @@ -4,31 +4,44 @@ let unwrapped = llvmPackages.clang-unwrapped; in stdenv.mkDerivation { + inherit unwrapped; + pname = "clang-tools"; version = lib.getVersion unwrapped; - dontUnpack = true; - clang = llvmPackages.clang; - inherit unwrapped; installPhase = '' runHook preInstall mkdir -p $out/bin - substituteAll ${./wrapper} $out/bin/clangd - chmod +x $out/bin/clangd - for tool in \ - clang-apply-replacements \ - clang-check \ - clang-format \ - clang-rename \ - clang-tidy - do + for tool in $unwrapped/bin/clang-*; do + tool=$(basename "$tool") + + # Compilers have their own derivation, no need to include them here: + if [[ $tool == "clang-cl" || $tool == "clang-cpp" ]]; then + continue + fi + + # Clang's derivation produces a lot of binaries, but the tools we are + # interested in follow the `clang-something` naming convention - except + # for clang-$version (e.g. clang-13), which is the compiler again: + if [[ ! $tool =~ ^clang\-[a-zA-Z_\-]+$ ]]; then + continue + fi + ln -s $out/bin/clangd $out/bin/$tool done + if [[ -z "$(ls -A $out/bin)" ]]; then + echo "Found no binaries - maybe their location or naming convention changed?" + exit 1 + fi + + substituteAll ${./wrapper} $out/bin/clangd + chmod +x $out/bin/clangd + runHook postInstall '';