mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-30 16:10:36 +00:00
There's not really any reason for bindgen to dlopen libclang at all in Nixpkgs. Moving this out of the wrapper means that it will still work even when we don't want all the standard Nixpkgs cflags behavior, like in the Linux kernel build.
54 lines
1.9 KiB
Nix
54 lines
1.9 KiB
Nix
{
|
|
rust-bindgen-unwrapped,
|
|
zlib,
|
|
bash,
|
|
runCommand,
|
|
runCommandCC,
|
|
}:
|
|
let
|
|
clang = rust-bindgen-unwrapped.clang;
|
|
self =
|
|
runCommand "rust-bindgen-${rust-bindgen-unwrapped.version}"
|
|
{
|
|
#for substituteAll
|
|
inherit bash;
|
|
unwrapped = rust-bindgen-unwrapped;
|
|
meta = rust-bindgen-unwrapped.meta // {
|
|
longDescription = rust-bindgen-unwrapped.meta.longDescription + ''
|
|
This version of bindgen is wrapped with the required compiler flags
|
|
required to find the c and c++ standard library, as well as the libraries
|
|
specified in the buildInputs of your derivation.
|
|
'';
|
|
};
|
|
passthru.tests = {
|
|
simple-c = runCommandCC "simple-c-bindgen-tests" { } ''
|
|
echo '#include <stdlib.h>' > a.c
|
|
${self}/bin/bindgen a.c --allowlist-function atoi | tee output
|
|
grep atoi output
|
|
touch $out
|
|
'';
|
|
simple-cpp = runCommandCC "simple-cpp-bindgen-tests" { } ''
|
|
echo '#include <cmath>' > a.cpp
|
|
${self}/bin/bindgen a.cpp --allowlist-function erf -- -xc++ | tee output
|
|
grep erf output
|
|
touch $out
|
|
'';
|
|
with-lib = runCommandCC "zlib-bindgen-tests" { buildInputs = [ zlib ]; } ''
|
|
echo '#include <zlib.h>' > a.c
|
|
${self}/bin/bindgen a.c --allowlist-function compress | tee output
|
|
grep compress output
|
|
touch $out
|
|
'';
|
|
};
|
|
}
|
|
# if you modify the logic to find the right clang flags, also modify rustPlatform.bindgenHook
|
|
''
|
|
mkdir -p $out/bin
|
|
export cincludes="$(< ${clang}/nix-support/cc-cflags) $(< ${clang}/nix-support/libc-cflags)"
|
|
export cxxincludes="$(< ${clang}/nix-support/libcxx-cxxflags)"
|
|
substituteAll ${./wrapper.sh} $out/bin/bindgen
|
|
chmod +x $out/bin/bindgen
|
|
'';
|
|
in
|
|
self
|