flips-sys 0.2.1

Raw FFI bindings to Flips, the Floating IPS patcher.
Documentation
extern crate cc;

fn main() {
    // get the current and output directories
    let cwd = std::env::current_dir().unwrap();
    let out = std::env::var("OUT_DIR").unwrap();
    let ref src = cwd.join("src");
    let ref flips = cwd.join("flips");
    let ref patched = std::path::PathBuf::from(out).join("flips");

    // copy C++ sources refering to `crc32.h` locally to a different folder
    // to force them to use the one we defined in `src`.
    std::fs::create_dir_all(patched).ok();
    for name in &["libups.cpp", "libbps.cpp", "libbps-suf.cpp"] {
        std::fs::copy(flips.join(name), patched.join(name)).unwrap();
    }

    // build `lipips`
    println!("cargo:rustc-link-lib=ips");
    cc::Build::new()
        .cpp(true)
        .include(flips)
        .warnings(true)
        .file(flips.join("libips.cpp"))
        .compile("ips");

    // build `lipups`
    println!("cargo:rustc-link-lib=ups");
    cc::Build::new()
        .cpp(true)
        .include(src)
        .include(flips)
        .warnings(false)
        .file(patched.join("libups.cpp"))
        .compile("libups.a");

    // build `lipbps`
    println!("cargo:rustc-link-lib=bps");
    cc::Build::new()
        .cpp(true)
        .include(src)
        .include(flips)
        .warnings(false)
        .file(flips.join("divsufsort.c"))
        .file(patched.join("libbps.cpp"))
        .file(patched.join("libbps-suf.cpp"))
        .compile("libbps.a");
}