From 57a681a6262cc529de3a5b1ec52e52d346a4003d Mon Sep 17 00:00:00 2001 From: Pogobanane Date: Tue, 28 May 2024 12:18:08 +0000 Subject: [PATCH 1/2] nix package: add wrapper from nixpkgs#clang-tools --- packaging/nix/default.nix | 9 +++++++++ packaging/nix/wrapper | 31 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 packaging/nix/wrapper diff --git a/packaging/nix/default.nix b/packaging/nix/default.nix index b66794fb..2c133dec 100644 --- a/packaging/nix/default.nix +++ b/packaging/nix/default.nix @@ -4,13 +4,20 @@ pkg-config, installShellFiles, libclang, + clang, + llvmPackages, libllvm, yaml-cpp, + enableLibcxx ? false, }: stdenv.mkDerivation { name = "clang-uml"; src = ../..; + # variables for substituteAll + unwrapped = llvmPackages.clang-unwrapped; + clang = if enableLibcxx then llvmPackages.libcxxClang else llvmPackages.clang; + nativeBuildInputs = [ cmake pkg-config @@ -18,12 +25,14 @@ stdenv.mkDerivation { ]; buildInputs = [ + clang libclang libllvm yaml-cpp ]; postInstall = '' + substituteAll ${./wrapper} $out/bin/clang-uml-wrapped installShellCompletion --bash $src/packaging/autocomplete/clang-uml installShellCompletion --zsh $src/packaging/autocomplete/_clang-uml ''; diff --git a/packaging/nix/wrapper b/packaging/nix/wrapper new file mode 100644 index 00000000..96c8ccae --- /dev/null +++ b/packaging/nix/wrapper @@ -0,0 +1,31 @@ +#!/bin/sh +# This file is copied from https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/clang-tools/wrapper +# The clang-tools wrapper is commonly used together with the clang package on +# nix, because without the wrapper, clang tools fail to find stdlib includes on +# nix. + +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 +} + +export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include +export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libcxx-cxxflags) \ + $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include + +exec -a "$0" @unwrapped@/bin/$(basename $0) "$@" From d82c2e4acfdb57bc34a7e5cd74a31f9a7431f673 Mon Sep 17 00:00:00 2001 From: Pogobanane Date: Tue, 28 May 2024 14:22:42 +0000 Subject: [PATCH 2/2] nix package: adjust wrapper for clang-uml --- packaging/nix/default.nix | 11 +++++++---- packaging/nix/wrapper | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packaging/nix/default.nix b/packaging/nix/default.nix index 2c133dec..56fa5594 100644 --- a/packaging/nix/default.nix +++ b/packaging/nix/default.nix @@ -14,10 +14,6 @@ stdenv.mkDerivation { name = "clang-uml"; src = ../..; - # variables for substituteAll - unwrapped = llvmPackages.clang-unwrapped; - clang = if enableLibcxx then llvmPackages.libcxxClang else llvmPackages.clang; - nativeBuildInputs = [ cmake pkg-config @@ -31,8 +27,15 @@ stdenv.mkDerivation { yaml-cpp ]; + clang = if enableLibcxx then llvmPackages.libcxxClang else llvmPackages.clang; + postInstall = '' + export unwrapped_clang_uml="$out/bin/clang-uml" + + # inject clang and unwrapp_clang_uml variables into wrapper substituteAll ${./wrapper} $out/bin/clang-uml-wrapped + chmod +x $out/bin/clang-uml-wrapped + installShellCompletion --bash $src/packaging/autocomplete/clang-uml installShellCompletion --zsh $src/packaging/autocomplete/_clang-uml ''; diff --git a/packaging/nix/wrapper b/packaging/nix/wrapper index 96c8ccae..cc02db18 100644 --- a/packaging/nix/wrapper +++ b/packaging/nix/wrapper @@ -28,4 +28,4 @@ export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(build $(<@clang@/nix-support/libcxx-cxxflags) \ $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include -exec -a "$0" @unwrapped@/bin/$(basename $0) "$@" +exec @unwrapped_clang_uml@ "$@"