use std::env; use std::path::PathBuf; fn main() { println!("cargo:rustc-link-lib=xcb"); let mut headers = Vec::new(); headers.push("xcb"); #[cfg(feature = "bigreq")] headers.push("bigreq"); #[cfg(feature = "composite")] { headers.push("composite"); println!("cargo:rustc-link-lib=xcb-composite"); } #[cfg(feature = "cursor")] { headers.push("xcb_cursor"); println!("cargo:rustc-link-lib=xcb-cursor"); } #[cfg(feature = "damage")] { headers.push("damage"); println!("cargo:rustc-link-lib=xcb-damage"); } #[cfg(feature = "dpms")] { headers.push("dpms"); println!("cargo:rustc-link-lib=xcb-dpms"); } #[cfg(feature = "dri2")] { headers.push("dri2"); println!("cargo:rustc-link-lib=xcb-dri2"); } #[cfg(feature = "dri3")] { headers.push("dri3"); println!("cargo:rustc-link-lib=xcb-dri3"); } #[cfg(feature = "ewmh")] { headers.push("xcb_ewmh"); println!("cargo:rustc-link-lib=xcb-ewmh"); } #[cfg(feature = "ge")] { headers.push("ge"); println!("cargo:rustc-link-lib=xcb-ge"); } #[cfg(feature = "glx")] { headers.push("glx"); println!("cargo:rustc-link-lib=xcb-glx"); } #[cfg(feature = "icccm")] { headers.push("xcb_icccm"); println!("cargo:rustc-link-lib=xcb-icccm"); } #[cfg(feature = "image")] { headers.push("xcb_image"); println!("cargo:rustc-link-lib=xcb-image"); } #[cfg(feature = "keysyms")] { headers.push("xcb_keysyms"); println!("cargo:rustc-link-lib=xcb-keysyms"); } #[cfg(feature = "present")] { headers.push("present"); println!("cargo:rustc-link-lib=xcb-present"); } #[cfg(feature = "randr")] { headers.push("randr"); println!("cargo:rustc-link-lib=xcb-randr"); } #[cfg(feature = "record")] { headers.push("record"); println!("cargo:rustc-link-lib=xcb-record"); } #[cfg(feature = "render")] { headers.push("render"); println!("cargo:rustc-link-lib=xcb-render"); } #[cfg(feature = "res")] { headers.push("res"); println!("cargo:rustc-link-lib=xcb-res"); } #[cfg(feature = "screensaver")] { headers.push("screensaver"); println!("cargo:rustc-link-lib=xcb-screensaver"); } #[cfg(feature = "shape")] { headers.push("shape"); println!("cargo:rustc-link-lib=xcb-shape"); } #[cfg(feature = "shm")] { headers.push("shm"); println!("cargo:rustc-link-lib=xcb-shm"); } #[cfg(feature = "sync")] { headers.push("sync"); println!("cargo:rustc-link-lib=xcb-sync"); } #[cfg(feature = "xc_misc")] headers.push("xc_misc"); #[cfg(feature = "xf86dri")] { headers.push("xf86dri"); println!("cargo:rustc-link-lib=xcb-xf86dri"); } #[cfg(feature = "xfixes")] { headers.push("xfixes"); println!("cargo:rustc-link-lib=xcb-xfixes"); } #[cfg(feature = "xinerama")] { headers.push("xinerama"); println!("cargo:rustc-link-lib=xcb-xinerama"); } #[cfg(feature = "xinput")] { headers.push("xinput"); println!("cargo:rustc-link-lib=xcb-xinput"); } #[cfg(feature = "xkb")] { headers.push("xkb"); println!("cargo:rustc-link-lib=xcb-xkb"); } #[cfg(feature = "xprint")] headers.push("xprint"); #[cfg(feature = "xselinux")] { headers.push("xselinux"); println!("cargo:rustc-link-lib=xcb-xselinux"); } #[cfg(feature = "xtest")] { headers.push("xtest"); println!("cargo:rustc-link-lib=xcb-xtest"); } #[cfg(feature = "xv")] { headers.push("xv"); println!("cargo:rustc-link-lib=xcb-xv"); } #[cfg(feature = "xvmc")] { headers.push("xvmc"); println!("cargo:rustc-link-lib=xcb-xvmc"); } let mut wrapper = String::new(); for header in headers { wrapper.push_str(&format!("#include \n", header)); } let bindings = bindgen::Builder::default() .header_contents("wrapper.h", &wrapper) .whitelist_type("xcb_.*") .whitelist_function("xcb_.*") .whitelist_var("XCB_.*") .whitelist_var("X_.*") .prepend_enum_name(false) .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("Couldn't write bindings!"); }