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"); if build_cfg!(target_os = "linux") { // No idea why Linux needs this, I gave up caring. 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 mut cmake = cmake::Config::new("clip"); cmake .define("CLIP_EXAMPLES", "OFF") .define("CLIP_TESTS", "OFF") .build_target("clip"); let profile = cmake.get_profile().to_string(); let dst = cmake.build(); if build_cfg!(target_os = "windows") { println!( "cargo:rustc-link-search=native={}/build/{profile}", 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("clip") .compile("clippers_wrapper"); }