@@ -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.
289286fn 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`.
309306fn 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}
0 commit comments