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