summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-01-23 01:24:08 -0800
committerGitHub <noreply@github.com>2017-01-23 01:24:08 -0800
commitab6117c6b486cfcbf65adf8702dbc8472b4eb8c0 (patch)
treea57c9fab0e4c5498247465cca69f9e0b0e3cad24 /src/main.rs
parent7373a4258f652c23e5fe00ad14740393caa40082 (diff)
parentaad93a81bb2ceeeeffc94c856a6d0d37c5ac6aec (diff)
Auto merge of #414 - emilio:crates-io, r=fitzgen,Yamakaky
Reorganize the crate and rename to bindgen. Fixes #398 Fixes #21 r? @fitzgen
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 00000000..a7bd9618
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,59 @@
+extern crate bindgen;
+extern crate env_logger;
+#[macro_use]
+extern crate log;
+extern crate clang_sys;
+extern crate clap;
+extern crate rustc_serialize;
+
+use bindgen::clang_version;
+use std::env;
+
+mod options;
+use options::builder_from_flags;
+
+pub fn main() {
+ log::set_logger(|max_log_level| {
+ use env_logger::Logger;
+ let env_logger = Logger::new();
+ max_log_level.set(env_logger.filter());
+ Box::new(env_logger)
+ })
+ .expect("Failed to set logger.");
+
+ let bind_args: Vec<_> = env::args().collect();
+
+ let version = clang_version();
+ let expected_version = if cfg!(feature = "llvm_stable") {
+ (3, 8)
+ } else {
+ (3, 9)
+ };
+
+ info!("Clang Version: {}", version.full);
+
+ match version.parsed {
+ None => warn!("Couldn't parse libclang version"),
+ Some(version) if version != expected_version => {
+ warn!("Using clang {:?}, expected {:?}",
+ version,
+ expected_version);
+ }
+ _ => {}
+ }
+
+ match builder_from_flags(bind_args.into_iter()) {
+ Ok((builder, output)) => {
+ let mut bindings = builder.generate()
+ .expect("Unable to generate bindings");
+ bindings.write(output)
+ .expect("Unable to write output");
+ bindings.write_dummy_uses()
+ .expect("Unable to write dummy uses to file.");
+ }
+ Err(error) => {
+ println!("{}", error);
+ std::process::exit(1);
+ }
+ };
+}