From 5080a331b88fcd3fc85938c89df5fe27af956e2e Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 7 Jul 2022 08:53:20 -0700 Subject: [PATCH] rust: fix build on nixos Running into these issues: https://github.com/rust-lang/rust-bindgen/issues/687 Signed-off-by: William Casarin --- build.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/build.rs b/build.rs index d2e5926..90f339d 100644 --- a/build.rs +++ b/build.rs @@ -3,8 +3,20 @@ extern crate bindgen; use std::env; use std::path::PathBuf; -fn main() { +#[derive(Debug)] +struct IgnoreMacros(String); + +impl bindgen::callbacks::ParseCallbacks for IgnoreMacros { + fn will_parse_macro(&self, name: &str) -> bindgen::callbacks::MacroParsingBehavior { + if name == self.0 { + bindgen::callbacks::MacroParsingBehavior::Ignore + } else { + bindgen::callbacks::MacroParsingBehavior::Default + } + } +} +fn main() { // Tell cargo to look for shared libraries in the specified directory let lib_path = PathBuf::from(env::current_dir().unwrap()); println!("cargo:rustc-link-search={}", lib_path.display()); @@ -14,6 +26,8 @@ fn main() { println!("cargo:rustc-link-lib=secp256k1"); println!("cargo:rustc-link-lib=sodium"); + let ignored_macros = IgnoreMacros("IPPORT_RESERVED".to_string()); + // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. @@ -25,6 +39,7 @@ fn main() { .clang_arg("-Ideps/secp256k1/include") .clang_arg("-Ideps/libsodium/src/libsodium/include") .header("deps/secp256k1/include/secp256k1.h") + .parse_callbacks(Box::new(ignored_macros)) .trust_clang_mangling(false) // Finish the builder and generate the bindings. .generate()