diff --git a/Cargo.toml b/Cargo.toml index 89261339..413212bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,3 +60,6 @@ version = "1.0" default = ["std"] i128 = ["num-integer/i128", "num-traits/i128"] std = ["num-integer/std", "num-traits/std"] + +[build-dependencies] +autocfg = "0.1.2" diff --git a/build.rs b/build.rs index fd608665..15590bbc 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!()); }