fn main()

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(())
}