diff options
author | oldmanmike <oldmanmike.dev@gmail.com> | 2016-11-01 17:10:55 -0500 |
---|---|---|
committer | oldmanmike <oldmanmike.dev@gmail.com> | 2016-11-01 17:10:55 -0500 |
commit | 3a6d82529afdbd90654ee12e458799dc1cd6d378 (patch) | |
tree | 08c0ac5c10de7f41f1d67ce0745bea392c196ddb | |
parent | ff53d7a02aced68d3bf64e1ca679061768183f69 (diff) |
Add logging of Clang version
-rwxr-xr-x | src/bin/bindgen.rs | 12 | ||||
-rwxr-xr-x | src/clang.rs | 6 | ||||
-rwxr-xr-x | src/lib.rs | 12 |
3 files changed, 29 insertions, 1 deletions
diff --git a/src/bin/bindgen.rs b/src/bin/bindgen.rs index 2a7995e7..c66a3744 100755 --- a/src/bin/bindgen.rs +++ b/src/bin/bindgen.rs @@ -8,7 +8,7 @@ extern crate log; extern crate clang_sys; extern crate rustc_serialize; -use bindgen::{BindgenOptions, Bindings, LinkType}; +use bindgen::{BindgenOptions, Bindings, LinkType, clang_version}; use std::default::Default; use std::env; use std::fs; @@ -217,6 +217,16 @@ pub fn main() { let mut bind_args: Vec<_> = env::args().collect(); + let clang_version = clang_version(); + + if cfg!(feature = "llvm_stable") { + assert_eq!(clang_version, "3.8.0"); + } else { + assert_eq!(clang_version, "3.9.0"); + } + + debug!("Using Clang Version: {}", clang_version); + if let Some(clang) = clang_sys::support::Clang::find(None) { let has_clang_args = bind_args.iter().rposition(|arg| *arg == "--").is_some(); diff --git a/src/clang.rs b/src/clang.rs index d69c8b14..a8e4fdf2 100755 --- a/src/clang.rs +++ b/src/clang.rs @@ -1426,3 +1426,9 @@ pub fn ast_dump(c: &Cursor, depth: isize) -> Enum_CXVisitorResult { print_indent(depth, ")"); CXChildVisit_Continue } + +pub fn extract_clang_version() -> Option<String> { + let s: String = + unsafe { clang_getClangVersion().into() }; + if s.is_empty() { None } else { Some(s) } +} @@ -448,3 +448,15 @@ fn parse(context: &mut BindgenContext) { assert!(context.current_module() == context.root_module(), "How did this happen?"); } + +/// Get the version number (e.g. 3.9.0) of Clang in String form +pub fn clang_version() -> String { + clang::extract_clang_version() + .expect("Could not retrieve Clang version!") + .split(' ') + .nth(2) + .expect("Could not parse Clang version!") + .to_string() +} + + |