in quic/s2n-quic-platform/build.rs [57:126]
fn main() -> Result<(), Error> {
let mut features = Features::default();
// allow overriding the detected features with an env variable
if let Some(list) = option_env("S2N_QUIC_PLATFORM_FEATURES_OVERRIDE") {
// iterate twice in case there is dependence on another feature that comes later
for _ in 0..2 {
for feature in list.split(',').filter(|&s| !s.is_empty()) {
features.insert(feature.trim().into());
}
}
return Ok(());
}
let env = Env::new();
for feature in read_dir("features")? {
let path = feature?.path();
if let Some(name) = path.file_stem() {
println!("cargo:rerun-if-changed={}", path.display());
if env.check(&path)? {
features.insert(name.to_str().expect("valid feature name").into());
}
}
}
let is_miri = std::env::var("CARGO_CFG_MIRI").is_ok();
match env.target_os.as_str() {
"linux" => {
// miri doesn't support the way we detect syscall support so override it
if is_miri {
features.insert(SocketMessage);
features.insert(SocketMultiMessage);
}
features.insert(MtuDiscovery);
features.insert(GenericSegmentationOffload);
features.insert(GenericReceiveOffload);
features.insert(PacketInfo);
features.insert(TypeOfService);
}
"macos" => {
// miri doesn't support the way we detect syscall support so override it
if is_miri {
features.insert(SocketMessage);
}
features.insert(PacketInfo);
features.insert(TypeOfService);
}
"android" => {
features.insert(MtuDiscovery);
features.insert(PacketInfo);
features.insert(TypeOfService);
}
_ => {
// TODO others
}
}
// TODO: Uncomment once MSRV is 1.80.0, see https://github.com/aws/s2n-quic/issues/2334
// for name in ALL_FEATURES.iter().map(|f| f.name()) {
// println!("cargo::rustc-check-cfg=cfg(s2n_quic_platform_{name})");
// }
//
// println!("cargo::rustc-check-cfg=cfg(fuzz, kani, kani_slow)");
Ok(())
}