-
Notifications
You must be signed in to change notification settings - Fork 736
/
Copy pathmain.rs
74 lines (63 loc) · 1.97 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use std::env;
use bindgen::builder_from_flags;
#[cfg(feature = "logging")]
fn clang_version_check() {
let version = bindgen::clang_version();
let expected_version = if cfg!(feature = "__testing_only_libclang_16") {
Some((16, 0))
} else if cfg!(feature = "__testing_only_libclang_9") {
Some((9, 0))
} else {
None
};
log::info!(
"Clang Version: {}, parsed: {:?}",
version.full,
version.parsed
);
if expected_version.is_some() {
// assert_eq!(version.parsed, version.parsed);
}
}
pub fn main() {
#[cfg(feature = "logging")]
env_logger::init();
match builder_from_flags(env::args()) {
Ok((builder, output, verbose)) => {
#[cfg(feature = "logging")]
clang_version_check();
std::panic::set_hook(Box::new(move |info| {
if verbose {
print_verbose_err();
}
eprintln!("{info}");
}));
let bindings = match builder.generate() {
Ok(bindings) => bindings,
Err(err) => {
eprintln!("Unable to generate bindings: {err}");
std::process::exit(1)
}
};
let _ = std::panic::take_hook();
bindings.write(output).expect("Unable to write output");
}
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
};
}
fn print_verbose_err() {
eprintln!("Bindgen unexpectedly panicked");
eprintln!(
"This may be caused by one of the known-unsupported \
things (https://rust-lang.github.io/rust-bindgen/cpp.html), \
please modify the bindgen flags to work around it as \
described in https://rust-lang.github.io/rust-bindgen/cpp.html"
);
eprintln!(
"Otherwise, please file an issue at \
https://github.com/rust-lang/rust-bindgen/issues/new"
);
}