Skip to content

Commit 01bc49f

Browse files
committed
Improve error handling in targetted_env_var
1 parent 37a51cd commit 01bc49f

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

src/lib.rs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,8 @@ impl Config {
313313
}
314314

315315
pub fn target_supported(&self) -> bool {
316-
let target = env::var("TARGET").unwrap_or_default();
317-
let host = env::var("HOST").unwrap_or_default();
316+
let target = env::var_os("TARGET").unwrap_or_default();
317+
let host = env::var_os("HOST").unwrap_or_default();
318318

319319
// Only use pkg-config in host == target situations by default (allowing an
320320
// override).
@@ -344,19 +344,25 @@ impl Config {
344344
}
345345

346346
fn targetted_env_var(&self, var_base: &str) -> Option<OsString> {
347-
// Typically both `TARGET` and `HOST` will be valid utf-8, so we implicitly ignore the
348-
// possiblity of them having that failure mode.
349-
if let Ok(target) = env::var("TARGET") {
350-
let host = env::var("HOST").ok()?;
351-
let kind = if host == target { "HOST" } else { "TARGET" };
352-
let target_u = target.replace("-", "_");
353-
354-
self.env_var_os(&format!("{}_{}", var_base, target))
355-
.or_else(|| self.env_var_os(&format!("{}_{}", var_base, target_u)))
356-
.or_else(|| self.env_var_os(&format!("{}_{}", kind, var_base)))
357-
.or_else(|| self.env_var_os(var_base))
358-
} else {
359-
self.env_var_os(var_base)
347+
match (env::var("TARGET"), env::var("HOST")) {
348+
(Ok(target), Ok(host)) => {
349+
let kind = if host == target { "HOST" } else { "TARGET" };
350+
let target_u = target.replace("-", "_");
351+
352+
self.env_var_os(&format!("{}_{}", var_base, target))
353+
.or_else(|| self.env_var_os(&format!("{}_{}", var_base, target_u)))
354+
.or_else(|| self.env_var_os(&format!("{}_{}", kind, var_base)))
355+
.or_else(|| self.env_var_os(var_base))
356+
}
357+
(Err(env::VarError::NotPresent), _) | (_, Err(env::VarError::NotPresent)) => {
358+
self.env_var_os(var_base)
359+
}
360+
(Err(env::VarError::NotUnicode(s)), _) | (_, Err(env::VarError::NotUnicode(s))) => {
361+
panic!(
362+
"HOST or TARGET environment variable is not valid unicode: {:?}",
363+
s
364+
)
365+
}
360366
}
361367
}
362368

0 commit comments

Comments
 (0)