in rust/ccommon-sys/build.rs [1:142]
fn main() {
let dst = cmake::build("../..");
println!("cargo:rustc-link-search=native={}/lib", dst.display());
println!("cargo:rustc-link-lib=static=ccommon-2.1.0");
if cfg!(target_os = "macos") {
println!("cargo:rustc-link-search=framework=/System/Library/Frameworks");
println!("cargo:rustc-link-lib=framework=Security");
}
let bindings = bindgen::Builder::default()
.clang_args(vec![
"-I",
"../../include",
"-I",
&format!("{}/build", dst.display()),
])
.header("wrapper.h")
.prepend_enum_name(false)
.whitelist_recursively(true)
// C stdlib types that we want to get from the libc crate
.blacklist_type("FILE")
.blacklist_type("addrinfo")
.blacklist_type("timespec")
// We provide a custom binding of metric with atomic types
.blacklist_type("metric")
// All public types, variables and, functions exported by ccommon
.whitelist_type("u?intmax_t")
.whitelist_type("u?int([0-9]+)_t")
.whitelist_type("cc_.*")
.whitelist_function("cc_.*")
.whitelist_var("CC_.*")
.whitelist_function("_cc_.*")
.whitelist_type("rstatus_i")
.whitelist_type("err_i")
.whitelist_type("buf_.*")
.whitelist_type("buf")
.whitelist_var("BUF_.*")
.whitelist_function("buf_.*")
.whitelist_type("dbuf_.*")
.whitelist_function("dbuf_.*")
.whitelist_var("DBUF_.*")
.whitelist_type("channel_.*")
.whitelist_var("CHANNEL_.*")
.whitelist_type("ch_id_i")
.whitelist_type("ch_level_e")
.whitelist_var("PIPE_.*")
.whitelist_type("pipe_.*")
.whitelist_function("pipe_.*")
.whitelist_var("TCP_.*")
.whitelist_type("tcp_.*")
.whitelist_function("tcp_.*")
.whitelist_function("hash_murmur3_.*")
.whitelist_type("log_.*")
.whitelist_function("log_.*")
.whitelist_var("LOG_.*")
.whitelist_type("sockio_.*")
.whitelist_function("sockio_.*")
.whitelist_type("duration")
.whitelist_type("duration_.*")
.whitelist_type("timeout")
.whitelist_function("duration_.*")
.whitelist_function("timeout_.*")
.whitelist_type("timing_wheel_.*")
.whitelist_type("timing_wheel")
.whitelist_function("timing_wheel_.*")
.whitelist_type("tevent_tqh")
.whitelist_type("timeout_.*")
.whitelist_var("NELEM_DELTA")
.whitelist_type("array_.*")
.whitelist_type("array")
.whitelist_function("array_.*")
.whitelist_type("bstring")
.whitelist_function("bstring_.*")
.whitelist_var("DEBUG_.*")
.whitelist_type("debug_.*")
.whitelist_function("debug_.*")
.whitelist_var("dlog")
.whitelist_function("_log")
.whitelist_function("_log_hexdump")
.whitelist_var("EVENT_.*")
.whitelist_type("event_.*")
.whitelist_function("event_.*")
.whitelist_type("logger")
.whitelist_type("log_.*")
.whitelist_function("log_.*")
.whitelist_function("_log_fd")
.whitelist_type("metric")
.whitelist_type("metric_.*")
.whitelist_function("metric_.*")
.whitelist_var("OPTLINE_MAXLEN")
.whitelist_var("OPTNAME_MAXLEN")
.whitelist_var("OPTVAL_MAXLEN")
.whitelist_type("option_.*")
.whitelist_var("option_.*")
.whitelist_type("option")
.whitelist_function("option_.*")
.whitelist_type("rbuf_.*")
.whitelist_type("rbuf")
.whitelist_function("rbuf_.*")
.whitelist_var("RING_ARRAY_.*")
.whitelist_type("ring_array")
.whitelist_function("ring_array_.*")
.whitelist_type("sig_fn")
.whitelist_type("signal")
.whitelist_var("signals")
.whitelist_function("signal_.*")
.whitelist_type("stats_.*")
.whitelist_function("stats_.*")
.whitelist_type("iobuf_p")
.whitelist_type("io_.*")
.whitelist_type("stream_.*")
.whitelist_type("address_p")
.whitelist_var("BUFSOCK_.*")
.derive_copy(true)
.derive_debug(true)
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file("src/bindings.rs")
.expect("Couldn't write bindings!");
let have_working_rustfmt = std::process::Command::new("rustup")
.args(&["run", "rustfmt", "--version"])
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.ok()
.map_or(false, |status| status.success());
if !have_working_rustfmt {
println!(
"
The latest `rustfmt` is required to format the generated bindings. Install
`rustfmt` with:
$ rustup component add rustfmt
$ rustup update
"
);
}
}