1 use std::env; 2 use std::process::Command; 3 use std::str; 4 use std::str::FromStr; 5 main()6fn main() { 7 if rustc_has_dyn_trait() { 8 println!("cargo:rustc-cfg=has_dyn_trait"); 9 } 10 } 11 rustc_has_dyn_trait() -> bool12fn rustc_has_dyn_trait() -> bool { 13 let rustc = match env::var_os("RUSTC") { 14 Some(rustc) => rustc, 15 None => return false, 16 }; 17 18 let output = match Command::new(rustc).arg("--version").output() { 19 Ok(output) => output, 20 Err(_) => return false, 21 }; 22 23 let version = match str::from_utf8(&output.stdout) { 24 Ok(version) => version, 25 Err(_) => return false, 26 }; 27 28 let mut pieces = version.split('.'); 29 if pieces.next() != Some("rustc 1") { 30 return true; 31 } 32 33 let next = match pieces.next() { 34 Some(next) => next, 35 None => return false, 36 }; 37 38 u32::from_str(next).unwrap_or(0) >= 27 39 } 40