summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroldmanmike <oldmanmike.dev@gmail.com>2016-11-01 17:10:55 -0500
committeroldmanmike <oldmanmike.dev@gmail.com>2016-11-01 17:10:55 -0500
commit3a6d82529afdbd90654ee12e458799dc1cd6d378 (patch)
tree08c0ac5c10de7f41f1d67ce0745bea392c196ddb
parentff53d7a02aced68d3bf64e1ca679061768183f69 (diff)
Add logging of Clang version
-rwxr-xr-xsrc/bin/bindgen.rs12
-rwxr-xr-xsrc/clang.rs6
-rwxr-xr-xsrc/lib.rs12
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) }
+}
diff --git a/src/lib.rs b/src/lib.rs
index 1592c275..5124c417 100755
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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()
+}
+
+