use std::{path::Path, process::Command};
use build_cfg::{build_cfg, build_cfg_main};
#[build_cfg_main]
fn main() {
println!("cargo:rustc-rerun-if-changed=build.rs");
println!("cargo:rustc-rerun-if-changed=src/wrapper.cpp");
println!("cargo:rustc-rerun-if-changed=src/wrapper.hpp");
let out = std::env::var("OUT_DIR").unwrap();
let out = Path::new(&out);
let out = out.join("clippers-clip-git");
if !out.is_dir() {
let output = Command::new("git")
.args(&["clone", "https://github.com/WilliamVenner/clip.git"])
.arg(&out)
.output()
.unwrap();
if !output.status.success() {
panic!("Failed to clone clip (code {:?})\n\n============= STDOUT =============\n{}\n============= STDERR =============\n{}", output.status, String::from_utf8_lossy(&output.stdout), String::from_utf8_lossy(&output.stderr));
}
}
if build_cfg!(target_os = "linux") {
if build_cfg!(target_pointer_width = "64") {
println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu");
} else if build_cfg!(target_pointer_width = "32") {
println!("cargo:rustc-link-search=native=/usr/lib/i686-linux-gnu");
}
println!("cargo:rustc-link-lib=static=z");
println!("cargo:rustc-link-lib=static=png");
println!("cargo:rustc-link-lib=static=Xdmcp");
println!("cargo:rustc-link-lib=static=Xau");
println!("cargo:rustc-link-lib=static=xcb");
} else if build_cfg!(target_os = "windows") {
println!("cargo:rustc-link-lib=User32");
println!("cargo:rustc-link-lib=Ole32");
println!("cargo:rustc-link-lib=Shlwapi");
} else if build_cfg!(target_os = "macos") {
println!("cargo:rustc-link-lib=framework=AppKit");
}
let dst = cmake::Config::new(&out)
.define("CLIP_EXAMPLES", "OFF")
.define("CLIP_TESTS", "OFF")
.build_target("clip")
.build();
if build_cfg!(target_os = "windows") {
if cfg!(debug_assertions) {
println!(
"cargo:rustc-link-search=native={}/build/Debug",
dst.display()
);
} else {
println!(
"cargo:rustc-link-search=native={}/build/Release",
dst.display()
);
}
} else {
println!("cargo:rustc-link-search=native={}/build", dst.display());
}
println!("cargo:rustc-link-lib=static=clip");
let mut cc = cc::Build::new();
if build_cfg!(target_os = "macos") {
cc.flag("-std=c++14");
}
cc.cpp(true)
.static_flag(true)
.shared_flag(false)
.warnings_into_errors(true)
.cargo_metadata(true)
.file("src/wrapper.cpp")
.include("src")
.include(&out)
.compile("clippers_wrapper");
}