diff --git a/Cargo.lock b/Cargo.lock index d681e77e3f..8f037f7fba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.32.2" +version = "0.32.3" dependencies = [ "cexpr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/Cargo.toml b/Cargo.toml index af51e2f63c..b2b5ce8997 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ name = "bindgen" readme = "README.md" repository = "https://github.com/rust-lang-nursery/rust-bindgen" documentation = "https://docs.rs/bindgen" -version = "0.32.2" +version = "0.32.3" build = "build.rs" include = [ diff --git a/src/lib.rs b/src/lib.rs index d7a1f2be96..c2315e056a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1079,6 +1079,12 @@ impl Builder { self } + /// Sets an explicit path to rustfmt, to be used when rustfmt is enabled. + pub fn with_rustfmt>(mut self, path: P) -> Self { + self.options.rustfmt_path = Some(path.into()); + self + } + /// Generate the Rust bindings using the options built up thus far. pub fn generate(mut self) -> Result { self.options.input_header = self.input_headers.pop(); @@ -1216,6 +1222,9 @@ struct BindgenOptions { /// generated code. opaque_types: RegexSet, + /// The explicit rustfmt path. + rustfmt_path: Option, + /// The set of types that we should have bindings for in the generated /// code. /// @@ -1441,6 +1450,7 @@ impl Default for BindgenOptions { rust_features: rust_target.into(), blacklisted_types: Default::default(), opaque_types: Default::default(), + rustfmt_path: Default::default(), whitelisted_types: Default::default(), whitelisted_functions: Default::default(), whitelisted_vars: Default::default(), @@ -1709,10 +1719,19 @@ impl Bindings { return Ok(Cow::Borrowed(source)); } - let rustfmt = which::which("rustfmt") - .map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_owned()))?; + let rustfmt = match self.options.rustfmt_path { + Some(ref p) => Cow::Borrowed(p), + None => { + let path = which::which("rustfmt") + .map_err(|e| { + io::Error::new(io::ErrorKind::Other, e.to_owned()) + })?; + + Cow::Owned(path) + } + }; - let mut cmd = Command::new(rustfmt); + let mut cmd = Command::new(&*rustfmt); cmd .stdin(Stdio::piped())