use std::env; use std::io::Write; use std::process::{Command, Stdio}; fn main() { if probe("fn main() { 0i128; }") { 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() }