diff --git a/Cargo.toml b/Cargo.toml index 672b4c2..de3ee1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,6 @@ features = ["std"] default = ["std"] std = [] i128 = [] + +[build-dependencies] +autocfg = "0.1.2" diff --git a/build.rs b/build.rs index fd60866..15590bb 100644 --- a/build.rs +++ b/build.rs @@ -1,35 +1,14 @@ +extern crate autocfg; + use std::env; -use std::io::Write; -use std::process::{Command, Stdio}; fn main() { - if probe("fn main() { 0i128; }") { + let ac = autocfg::new(); + if ac.probe_type("i128") { println!("cargo:rustc-cfg=has_i128"); } else if env::var_os("CARGO_FEATURE_I128").is_some() { panic!("i128 support was not detected!"); } -} - -/// Test if a code snippet can be compiled -fn probe(code: &str) -> bool { - let rustc = env::var_os("RUSTC").unwrap_or_else(|| "rustc".into()); - let out_dir = env::var_os("OUT_DIR").expect("environment variable OUT_DIR"); - - let mut child = Command::new(rustc) - .arg("--out-dir") - .arg(out_dir) - .arg("--emit=obj") - .arg("-") - .stdin(Stdio::piped()) - .spawn() - .expect("rustc probe"); - - child - .stdin - .as_mut() - .expect("rustc stdin") - .write_all(code.as_bytes()) - .expect("write rustc stdin"); - - child.wait().expect("rustc probe").success() + + autocfg::rerun_path(file!()); }