use std::env; use std::process::Command; use std::str::FromStr; fn main() { let minor = match rustc_minor_version() { Some(minor) => minor, None => return, }; if minor >= 22 { println!("cargo:rustc-cfg=derive_copy"); } if minor >= 28 { println!("cargo:rustc-cfg=repr_transparent"); } if minor >= 36 { println!("cargo:rustc-cfg=native_uninit"); } } fn rustc_minor_version() -> Option { let rustc = env::var_os("RUSTC"); let output = rustc.and_then(|rustc| { Command::new(rustc).arg("--version").output().ok() }); let version = output.and_then(|output| { String::from_utf8(output.stdout).ok() }); let version = if let Some(version) = version { version } else { return None; }; let mut pieces = version.split('.'); if pieces.next() != Some("rustc 1") { return None; } let next = match pieces.next() { Some(next) => next, None => return None, }; u32::from_str(next).ok() }