in cargo/cargo_build_script_runner/bin.rs [246:272]
fn parse_rustc_cfg_output(stdout: &str) -> BTreeMap<String, String> {
let mut values = BTreeMap::new();
for line in stdout.lines() {
if line.starts_with("target_") && line.contains('=') {
let mut parts = line.splitn(2, '=');
// UNWRAP: Verified that line contains = and split into exactly 2 parts.
let key = parts.next().unwrap();
let value = parts.next().unwrap();
if value.starts_with('"') && value.ends_with('"') && value.len() >= 2 {
values
.entry(key)
.or_insert_with(Vec::new)
.push(value[1..(value.len() - 1)].to_owned());
}
} else if ["windows", "unix"].contains(&line) {
// the 'windows' or 'unix' line received from rustc will be turned
// into eg. CARGO_CFG_WINDOWS='' below
values.insert(line, vec![]);
}
}
values
.into_iter()
.map(|(key, value)| (format!("CARGO_CFG_{}", key.to_uppercase()), value.join(",")))
.collect()
}