From 42454fede23c2cdd30ffabf0c2a41da900d48aeb Mon Sep 17 00:00:00 2001 From: Ryan Hunt <rhunt@eqrion.net> Date: Wed, 21 Jun 2017 03:33:45 -0400 Subject: [PATCH] Make build scripts more ergonomic Fixes #19 --- README.md | 14 +++++--------- src/bindgen/mod.rs | 2 +- src/lib.rs | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bb852f5..3d0c805 100644 --- a/README.md +++ b/README.md @@ -32,17 +32,13 @@ Here's an example build.rs script: extern crate cbindgen; use std::env; -use cbindgen::{Config, Library}; fn main() { - let root = env::var("CARGO_MANIFEST_DIR").unwrap(); - let config = Config::from_root_or_default(&root); - - Library::load_crate(Path::new(root), - "CRATE_NAME", - &config) - .generate().unwrap() - .write_to_file("bindings.h"); + let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + + cbindgen::generate(crate_dir) + .unwrap() + .write_to_file("bindings.h"); } ``` diff --git a/src/bindgen/mod.rs b/src/bindgen/mod.rs index decb4e3..a7b05d6 100644 --- a/src/bindgen/mod.rs +++ b/src/bindgen/mod.rs @@ -51,5 +51,5 @@ mod writer; pub use self::cargo::*; pub use self::config::*; -pub use self::library::Library; +pub use self::library::{GeneratedBindings, Library}; pub use self::cargo_toml::manifest; diff --git a/src/lib.rs b/src/lib.rs index 4b55740..6881b97 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,3 +14,19 @@ extern crate toml; mod bindgen; pub use bindgen::*; + +use std::path::Path; + +/// A utility function for build scripts to generate bindings for a crate, using +/// a `cbindgen.toml` if it exists. +pub fn generate(crate_dir: &str) -> Result<GeneratedBindings, String> { + let crate_dir = Path::new(crate_dir); + Library::load_crate(Cargo::load(crate_dir, None)?, + &Config::from_root_or_default(crate_dir))?.generate() +} + +/// A utility function for build scripts to generate bindings for a crate with a +/// custom config. +pub fn generate_config(crate_dir: &str, config: &Config) -> Result<GeneratedBindings, String> { + Library::load_crate(Cargo::load(Path::new(crate_dir), None)?, config)?.generate() +} -- GitLab