diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/clang-tools/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/tools/clang-tools/default.nix | 52 |
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 ]; + }; +} |