blob: 9c9c86a732f27a672cc1dcf89027a43e1df694df [file] [log] [blame]
ThiƩbaud Weksteenae93c4c2020-08-17 11:51:58 +02001//! SQLite bindgen configuration
2
Matthew Maurer5856e852020-08-10 16:31:06 -07003use bindgen::callbacks::{IntKind, ParseCallbacks};
4
5#[derive(Debug)]
6struct SqliteTypeChooser;
7
8impl ParseCallbacks for SqliteTypeChooser {
9 fn int_macro(&self, _name: &str, value: i64) -> Option<IntKind> {
10 if value >= i32::min_value() as i64 && value <= i32::max_value() as i64 {
11 Some(IntKind::I32)
12 } else {
13 None
14 }
15 }
16}
17
18fn main() {
19 bindgen_cmd::build(|mut builder| {
20 builder = builder
21 .parse_callbacks(Box::new(SqliteTypeChooser))
22 .rustfmt_bindings(true)
23 .blacklist_function("sqlite3_vmprintf")
24 .blacklist_function("sqlite3_vsnprintf")
25 .blacklist_function("sqlite3_str_vappendf")
26 .blacklist_type("va_list")
27 .blacklist_type("__builtin_va_list")
28 .blacklist_type("__gnuc_va_list")
29 .blacklist_type("__va_list_tag")
30 .blacklist_item("__GNUC_VA_LIST");
31
32 if cfg!(feature = "unlock_notify") {
33 builder = builder.clang_arg("-DSQLITE_ENABLE_UNLOCK_NOTIFY");
34 }
35 if cfg!(feature = "preupdate_hook") {
36 builder = builder.clang_arg("-DSQLITE_ENABLE_PREUPDATE_HOOK");
37 }
38 if cfg!(feature = "session") {
39 builder = builder.clang_arg("-DSQLITE_ENABLE_SESSION");
40 }
41
42 builder
43 })
44}