|
35 | 35 | // location inside spans is a performance hit.
|
36 | 36 |
|
37 | 37 | use std::env;
|
| 38 | +use std::iter; |
38 | 39 | use std::process::{self, Command};
|
39 | 40 | use std::str;
|
40 | 41 |
|
@@ -132,15 +133,33 @@ fn feature_allowed(feature: &str) -> bool {
|
132 | 133 | //
|
133 | 134 | // -Zallow-features=feature1,feature2
|
134 | 135 |
|
135 |
| - if let Some(rustflags) = env::var_os("RUSTFLAGS") { |
136 |
| - for mut flag in rustflags.to_string_lossy().split(' ') { |
137 |
| - if flag.starts_with("-Z") { |
138 |
| - flag = &flag["-Z".len()..]; |
139 |
| - } |
140 |
| - if flag.starts_with("allow-features=") { |
141 |
| - flag = &flag["allow-features=".len()..]; |
142 |
| - return flag.split(',').any(|allowed| allowed == feature); |
143 |
| - } |
| 136 | + let flags_var; |
| 137 | + let flags_var_string; |
| 138 | + let mut flags_var_split; |
| 139 | + let mut flags_none; |
| 140 | + let flags: &mut dyn Iterator<Item = &str> = |
| 141 | + if let Some(encoded_rustflags) = env::var_os("CARGO_ENCODED_RUSTFLAGS") { |
| 142 | + flags_var = encoded_rustflags; |
| 143 | + flags_var_string = flags_var.to_string_lossy(); |
| 144 | + flags_var_split = flags_var_string.split('\x1f'); |
| 145 | + &mut flags_var_split |
| 146 | + } else if let Some(rustflags) = env::var_os("RUSTFLAGS") { |
| 147 | + flags_var = rustflags; |
| 148 | + flags_var_string = flags_var.to_string_lossy(); |
| 149 | + flags_var_split = flags_var_string.split(' '); |
| 150 | + &mut flags_var_split |
| 151 | + } else { |
| 152 | + flags_none = iter::empty(); |
| 153 | + &mut flags_none |
| 154 | + }; |
| 155 | + |
| 156 | + for mut flag in flags { |
| 157 | + if flag.starts_with("-Z") { |
| 158 | + flag = &flag["-Z".len()..]; |
| 159 | + } |
| 160 | + if flag.starts_with("allow-features=") { |
| 161 | + flag = &flag["allow-features=".len()..]; |
| 162 | + return flag.split(',').any(|allowed| allowed == feature); |
144 | 163 | }
|
145 | 164 | }
|
146 | 165 |
|
|
0 commit comments