libloading 0.3.4

A safer binding to platform’s dynamic library loading utilities
Documentation
extern crate target_build_utils;
use target_build_utils::TargetInfo;
use std::io::Write;
use std::env;

fn main(){
    let target = TargetInfo::new().expect("could not get target info");
    match target.target_os() {
        "linux" | "android" => println!("cargo:rustc-link-lib=dl"),
        "freebsd" | "dragonfly" => println!("cargo:rustc-link-lib=c"),
        // netbsd claims dl* will be available to any dynamically linked binary, but I haven’t
        // found any libraries that have to be linked to on other platforms.
        // What happens if the executable is not linked up dynamically?
        "openbsd" | "bitrig" | "netbsd" | "macos" | "ios" => {}
        // dependencies come with winapi
        "windows" => {}
        tos => {
            writeln!(::std::io::stderr(),
                     "Building for an unknown target_os=`{}`!\nPlease report an issue ",
                     tos).expect("could not report the error");
            ::std::process::exit(0xfc);
        }
    }
    maybe_test_helpers();
}

fn maybe_test_helpers() {
    if env::var("OPT_LEVEL").ok().and_then(|v| v.parse().ok()).unwrap_or(0u64) != 0 {
        // certainly not for testing, just skip.
        return;
    }
    let mut outpath = if let Some(od) = env::var_os("OUT_DIR") { od } else { return };
    let target = if let Some(t) = env::var_os("TARGET") { t } else { return };
    let rustc = env::var_os("RUSTC").unwrap_or_else(|| { "rustc".into() });
    outpath.push("/libtest_helpers.dll"); // extension for windows required, POSIX does not care.
    let _ = ::std::process::Command::new(rustc)
        .arg("src/test_helpers.rs")
        .arg("-o")
        .arg(outpath)
        .arg("-O")
        .arg("--target")
        .arg(target)
        .output();
    // Ignore the failures here. We do not want failures of this thing to inhibit people from
    // building and using the library. Might make it hard to debug why tests fail in case this
    // library does not get built, though.
}