From 0c86d6d4da1dd563340be511a7c8fe1c3a6ba388 Mon Sep 17 00:00:00 2001 From: Daniel Dulaney Date: Sat, 30 Nov 2019 01:07:33 -0500 Subject: [PATCH] build: upgrade bindgen to 0.51.1 The preivous bindgen version (0.32.0) fails on Rust 1.39 (see https://github.com/rust-lang/rust-bindgen/pull/1627), so an upgrade is needed. However, the new version also breaks when enum values are also defined as macros. Previously, this could be handled with blacklist_type, but the recommended method is by implementing will_parse_macro and returning Ignore for problematic enum variants. This commit implements that method and removes the old method. --- Cargo.toml | 2 +- build.rs | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1703d2f5..fc6c208a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ libc = "0.2" num_cpus = "1.0" cc = "1.0" pkg-config = "0.3" -bindgen = "0.32" +bindgen = "0.51.1" regex = "0.2" [features] diff --git a/build.rs b/build.rs index f570032e..ae329a1a 100644 --- a/build.rs +++ b/build.rs @@ -12,7 +12,7 @@ use std::process::Command; use std::str; use regex::Regex; -use bindgen::callbacks::{IntKind, ParseCallbacks}; +use bindgen::callbacks::{IntKind, ParseCallbacks, MacroParsingBehavior}; #[derive(Debug)] struct Library { @@ -71,6 +71,20 @@ impl ParseCallbacks for IntCallbacks { None } } + + // https://github.com/rust-lang/rust-bindgen/issues/687#issuecomment-388277405 + fn will_parse_macro(&self, name: &str) -> MacroParsingBehavior { + use MacroParsingBehavior::*; + + match name { + "FP_INFINITE" => Ignore, + "FP_NAN" => Ignore, + "FP_NORMAL" => Ignore, + "FP_SUBNORMAL" => Ignore, + "FP_ZERO" => Ignore, + _ => Default, + } + } } fn version() -> String { @@ -902,12 +916,6 @@ fn main() { let mut builder = bindgen::Builder::default() .clang_args(clang_includes) .ctypes_prefix("libc") - // https://github.com/servo/rust-bindgen/issues/687 - .blacklist_type("FP_NAN") - .blacklist_type("FP_INFINITE") - .blacklist_type("FP_ZERO") - .blacklist_type("FP_SUBNORMAL") - .blacklist_type("FP_NORMAL") // https://github.com/servo/rust-bindgen/issues/550 .blacklist_type("max_align_t") .rustified_enum("*")