use std::env;
use std::io;
use std::iter::FromIterator;
use std::path::{Path, PathBuf};
use std::process::{Command, Stdio};
fn compile<P: AsRef<Path>>(path: P) -> io::Result<bool> {
let path = path.as_ref();
if let Some(s) = path.to_str() {
println!("cargo:rerun-if-changed={}", s);
}
let mut out = PathBuf::from(env::var_os("OUT_DIR").unwrap());
out.push("feature-test");
Ok(Command::new(env::var_os("RUSTC").unwrap())
.arg(path)
.arg("-o")
.arg(out)
.arg("--crate-type=lib")
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::null())
.status()?
.success())
}
fn main() -> io::Result<()> {
let dir = PathBuf::from_iter(&["misc", "feature-test"]);
if compile(dir.join("unsafe_op_in_unsafe_fn.rs"))? {
println!("cargo:rustc-cfg=has_unsafe_op_in_unsafe_fn");
}
if compile(dir.join("const_assert.rs"))? {
println!("cargo:rustc-cfg=has_const_assert");
}
Ok(())
}