Skip to content

Commit 461698b

Browse files
committed
build: Ensure more env is tracked in test
1 parent 8465371 commit 461698b

File tree

2 files changed

+63
-36
lines changed

2 files changed

+63
-36
lines changed

build.rs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ fn main() {
6565
//
6666
// On CI, we detect the actual FreeBSD version and match its ABI exactly,
6767
// running tests to ensure that the ABI is correct.
68-
println!("cargo:rerun-if-env-changed=RUST_LIBC_UNSTABLE_FREEBSD_VERSION");
69-
// Allow overriding the default version for testing
70-
let which_freebsd = if let Ok(version) = env::var("RUST_LIBC_UNSTABLE_FREEBSD_VERSION") {
68+
//
69+
// The env allows overriding the default version for testing
70+
let which_freebsd = if let Some(version) = env_value("RUST_LIBC_UNSTABLE_FREEBSD_VERSION") {
7171
let vers = version.parse().unwrap();
7272
println!("cargo:warning=setting FreeBSD version to {vers}");
7373
vers
@@ -100,14 +100,11 @@ fn main() {
100100
}
101101

102102
let musl_v1_2_3 = env_flag("RUST_LIBC_UNSTABLE_MUSL_V1_2_3");
103-
println!("cargo:rerun-if-env-changed=RUST_LIBC_UNSTABLE_MUSL_V1_2_3");
104103
// loongarch64 and ohos have already updated
105104
if musl_v1_2_3 || target_arch == "loongarch64" || target_env == "ohos" {
106105
// FIXME(musl): enable time64 api as well
107106
set_cfg("musl_v1_2_3");
108107
}
109-
println!("cargo:rerun-if-env-changed=RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS");
110-
println!("cargo:rerun-if-env-changed=RUST_LIBC_UNSTABLE_GNU_TIME_BITS");
111108
if target_env == "gnu"
112109
&& target_os == "linux"
113110
&& target_ptr_width == "32"
@@ -116,16 +113,16 @@ fn main() {
116113
{
117114
let defaultbits = "32".to_string();
118115
let (timebits, filebits) = match (
119-
env::var("RUST_LIBC_UNSTABLE_GNU_TIME_BITS"),
120-
env::var("RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
116+
env_value("RUST_LIBC_UNSTABLE_GNU_TIME_BITS"),
117+
env_value("RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
121118
) {
122-
(Ok(_), Ok(_)) => panic!("Do not set both RUST_LIBC_UNSTABLE_GNU_TIME_BITS and RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
123-
(Err(_), Err(_)) => (defaultbits.clone(), defaultbits.clone()),
124-
(Ok(tb), Err(_)) if tb == "64" => (tb.clone(), tb.clone()),
125-
(Ok(tb), Err(_)) if tb == "32" => (tb, defaultbits.clone()),
126-
(Ok(_), Err(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_TIME_BITS, must be 32 or 64"),
127-
(Err(_), Ok(fb)) if fb == "32" || fb == "64" => (defaultbits.clone(), fb),
128-
(Err(_), Ok(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS, must be 32 or 64"),
119+
(Some(_), Some(_)) => panic!("Do not set both RUST_LIBC_UNSTABLE_GNU_TIME_BITS and RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
120+
(None, None) => (defaultbits.clone(), defaultbits.clone()),
121+
(Some(tb), None) if tb == "64" => (tb.clone(), tb.clone()),
122+
(Some(tb), None) if tb == "32" => (tb, defaultbits.clone()),
123+
(Some(_), None) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_TIME_BITS, must be 32 or 64"),
124+
(None, Some(fb)) if fb == "32" || fb == "64" => (defaultbits.clone(), fb),
125+
(None, Some(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS, must be 32 or 64"),
129126
};
130127
let valid_bits = ["32", "64"];
131128
assert!(
@@ -287,7 +284,7 @@ fn emcc_version_code() -> Option<u64> {
287284
/// environment, in `(minor, patch)` form. Currently the only major version supported by Rust
288285
/// is 7.
289286
fn vxworks_version_code() -> Option<(u32, u32)> {
290-
let version = env::var("WIND_RELEASE_ID").ok()?;
287+
let version = env_value("WIND_RELEASE_ID")?;
291288

292289
let mut pieces = version.trim().split(['.']);
293290

@@ -305,12 +302,21 @@ fn set_cfg(cfg: &str) {
305302
println!("cargo:rustc-cfg={cfg}");
306303
}
307304

308-
/// Return true if the env is set to a value other than `0`.
305+
/// Return true if the env is set to a value other than `0`. Sets `rerun-if-changed`.
309306
fn env_flag(key: &str) -> bool {
307+
match env_value(key) {
308+
Some(x) if x == "0" => false,
309+
None => false,
310+
Some(_) => true,
311+
}
312+
}
313+
314+
/// Return the value if set. Sets `rerun-if-changed`.
315+
fn env_value(key: &str) -> Option<String> {
316+
println!("cargo:rerun-if-env-changed={key}");
310317
match env::var(key) {
311-
Ok(x) if x == "0" => false,
312-
Err(VarError::NotPresent) => false,
313-
Err(VarError::NotUnicode(_)) => panic!("non-unicode var for `{key}`"),
314-
Ok(_) => true,
318+
Ok(v) => Some(v),
319+
Err(VarError::NotPresent) => None,
320+
Err(VarError::NotUnicode(_)) => panic!("non-unicode env value `{key}`"),
315321
}
316322
}

libc-test/build.rs

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![deny(warnings)]
22
#![allow(clippy::match_like_matches_macro)]
33

4+
use std::env::VarError;
45
use std::fs::File;
56
use std::io::{
67
BufRead,
@@ -2295,7 +2296,7 @@ fn test_freebsd(target: &str) {
22952296
assert!(target.contains("freebsd"));
22962297
let mut cfg = ctest_cfg();
22972298

2298-
let freebsd_ver = if let Ok(version) = env::var("RUST_LIBC_UNSTABLE_FREEBSD_VERSION") {
2299+
let freebsd_ver = if let Some(version) = env_value("RUST_LIBC_UNSTABLE_FREEBSD_VERSION") {
22992300
let vers = version.parse().unwrap();
23002301
println!("cargo:warning=setting FreeBSD version to {vers}");
23012302
Some(vers)
@@ -3224,8 +3225,8 @@ fn test_neutrino(target: &str) {
32243225

32253226
let mut cfg = ctest_cfg();
32263227
if target.ends_with("_iosock") {
3227-
let qnx_target_val = env::var("QNX_TARGET")
3228-
.unwrap_or_else(|_| "QNX_TARGET_not_set_please_source_qnxsdp".into());
3228+
let qnx_target_val = env_value("QNX_TARGET")
3229+
.unwrap_or_else(|| "QNX_TARGET_not_set_please_source_qnxsdp".into());
32293230

32303231
cfg.include(qnx_target_val + "/usr/include/io-sock");
32313232
headers!(
@@ -3469,8 +3470,9 @@ fn test_neutrino(target: &str) {
34693470
}
34703471

34713472
fn which_vxworks() -> Option<(u32, u32)> {
3472-
let version = env::var("WIND_RELEASE_ID").ok()?; // When in VxWorks setup, WIND_RELEASE_ID is
3473-
// always set as the version of the release.
3473+
// When in VxWorks setup, WIND_RELEASE_ID is
3474+
// always set as the version of the release.
3475+
let version = env_value("WIND_RELEASE_ID")?;
34743476

34753477
let mut pieces = version.trim().split(['.']);
34763478

@@ -3627,16 +3629,16 @@ fn config_gnu_bits(target: &str, cfg: &mut ctest::TestGenerator) {
36273629
{
36283630
let defaultbits = "32".to_string();
36293631
let (timebits, filebits) = match (
3630-
env::var("RUST_LIBC_UNSTABLE_GNU_TIME_BITS"),
3631-
env::var("RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
3632+
env_value("RUST_LIBC_UNSTABLE_GNU_TIME_BITS"),
3633+
env_value("RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
36323634
) {
3633-
(Ok(_), Ok(_)) => panic!("Do not set both RUST_LIBC_UNSTABLE_GNU_TIME_BITS and RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
3634-
(Err(_), Err(_)) => (defaultbits.clone(), defaultbits.clone()),
3635-
(Ok(tb), Err(_)) if tb == "64" => (tb.clone(), tb.clone()),
3636-
(Ok(tb), Err(_)) if tb == "32" => (tb, defaultbits.clone()),
3637-
(Ok(_), Err(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_TIME_BITS, must be 32 or 64"),
3638-
(Err(_), Ok(fb)) if fb == "32" || fb == "64" => (defaultbits.clone(), fb),
3639-
(Err(_), Ok(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS, must be 32 or 64"),
3635+
(Some(_), Some(_)) => panic!("Do not set both RUST_LIBC_UNSTABLE_GNU_TIME_BITS and RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS"),
3636+
(None, None) => (defaultbits.clone(), defaultbits.clone()),
3637+
(Some(tb), None) if tb == "64" => (tb.clone(), tb.clone()),
3638+
(Some(tb), None) if tb == "32" => (tb, defaultbits.clone()),
3639+
(Some(_), None) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_TIME_BITS, must be 32 or 64"),
3640+
(None, Some(fb)) if fb == "32" || fb == "64" => (defaultbits.clone(), fb),
3641+
(None, Some(_)) => panic!("Invalid value for RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS, must be 32 or 64"),
36403642
};
36413643
let valid_bits = ["32", "64"];
36423644
assert!(
@@ -3692,7 +3694,7 @@ fn test_linux(target: &str) {
36923694
let uclibc = target.contains("uclibc");
36933695
let mips = target.contains("mips");
36943696

3695-
let musl_v1_2_3 = env::var("RUST_LIBC_UNSTABLE_MUSL_V1_2_3").is_ok();
3697+
let musl_v1_2_3 = env_flag("RUST_LIBC_UNSTABLE_MUSL_V1_2_3");
36963698
if musl_v1_2_3 {
36973699
assert!(musl);
36983700
}
@@ -5607,3 +5609,22 @@ fn try_command_output(cmd: &str, args: &[&str]) -> Option<String> {
56075609
.unwrap_or_else(|e| panic!("command {cmd} returned non-UTF-8 output: {e}"));
56085610
Some(res)
56095611
}
5612+
5613+
/// Return true if the env is set to a value other than `0`. Sets `rerun-if-changed`.
5614+
fn env_flag(key: &str) -> bool {
5615+
match env_value(key) {
5616+
Some(x) if x == "0" => false,
5617+
None => false,
5618+
Some(_) => true,
5619+
}
5620+
}
5621+
5622+
/// Return the value if set. Sets `rerun-if-changed`.
5623+
fn env_value(key: &str) -> Option<String> {
5624+
println!("cargo:rerun-if-env-changed={key}");
5625+
match env::var(key) {
5626+
Ok(v) => Some(v),
5627+
Err(VarError::NotPresent) => None,
5628+
Err(VarError::NotUnicode(_)) => panic!("non-unicode env value `{key}`"),
5629+
}
5630+
}

0 commit comments

Comments
 (0)