use bindgen::CargoCallbacks;
use std::env;
use std::path::PathBuf;
#[cfg(target_os = "linux")]
fn main() {
println!("cargo:rustc-link-lib=udev");
println!("cargo:rerun-if-changed=vendor/lib");
println!("cargo:rerun-if-changed=wrapper.h");
build_xwiimote();
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.allowlist_type("xwii_.*")
.allowlist_function("xwii_.*")
.allowlist_var("XWII_.*")
.derive_default(true)
.prepend_enum_name(false)
.parse_callbacks(Box::new(CargoCallbacks))
.generate()
.expect("unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("failed to write bindings");
}
fn build_xwiimote() {
println!("cargo:rerun-if-env-changed=XWIIMOTE_SYS_STATIC");
let want_static =
cfg!(feature = "static") || env::var("XWIIMOTE_SYS_STATIC").unwrap_or(String::new()) == "1";
if !want_static {
let xwiimote = pkg_config::Config::new()
.atleast_version("2")
.probe("libxwiimote");
match xwiimote {
Ok(_) => return,
Err(e) => {
println!("cargo-warning={}", e.to_string());
}
}
}
cc::Build::new()
.define("XWII__EXPORT", r#"__attribute__((visibility("default")))"#)
.file("vendor/lib/core.c")
.file("vendor/lib/monitor.c")
.flag("-Wno-override-init")
.compile("xwiimote");
}
#[cfg(not(target_os = "linux"))]
fn main() {
panic!("Cannot build xwiimote on non-Linux system");
}