about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/clang-tools/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/clang-tools/default.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/clang-tools/default.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/clang-tools/default.nix b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
new file mode 100644
index 000000000000..b259b683dde7
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/clang-tools/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, llvmPackages }:
+
+let
+  unwrapped = llvmPackages.clang-unwrapped;
+
+in stdenv.mkDerivation {
+  inherit unwrapped;
+
+  pname = "clang-tools";
+  version = lib.getVersion unwrapped;
+  dontUnpack = true;
+  clang = llvmPackages.clang;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+
+    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
+  '';
+
+  meta = unwrapped.meta // {
+    description = "Standalone command line tools for C++ development";
+    maintainers = with lib.maintainers; [ patryk27 ];
+  };
+}