diff --git a/Cargo.toml b/Cargo.toml index 91e2075b3..1cd24621a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ features = [ ] [features] -default = ["default-tls", "http2"] +default = ["default-tls", "http2", "macos-system-configuration"] # Note: this doesn't enable the 'native-tls' feature, which adds specific # functionality for it. @@ -67,6 +67,9 @@ stream = ["tokio/fs", "dep:tokio-util", "dep:wasm-streams"] socks = ["dep:tokio-socks"] +# Use the system's proxy configuration. +macos-system-configuration = ["dep:system-configuration"] + # Experimental HTTP/3 client. # Disabled while waiting for quinn to upgrade. #http3 = ["rustls-tls-manual-roots", "dep:h3", "dep:h3-quinn", "dep:quinn", "dep:futures-channel"] @@ -170,7 +173,7 @@ futures-util = { version = "0.3.0", default-features = false, features = ["std", winreg = "0.50.0" [target.'cfg(target_os = "macos")'.dependencies] -system-configuration = "0.5.1" +system-configuration = { version = "0.5.1", optional = true } # wasm diff --git a/src/proxy.rs b/src/proxy.rs index e4ad3a98c..17670cf4a 100644 --- a/src/proxy.rs +++ b/src/proxy.rs @@ -13,7 +13,7 @@ use std::collections::HashMap; use std::env; use std::error::Error; use std::net::IpAddr; -#[cfg(target_os = "macos")] +#[cfg(all(target_os = "macos", feature = "macos-system-configuration"))] use system_configuration::{ core_foundation::{ base::CFType, @@ -947,7 +947,7 @@ fn get_from_platform_impl() -> Result, Box> { Ok((proxy_enable == 1).then_some(proxy_server)) } -#[cfg(target_os = "macos")] +#[cfg(all(target_os = "macos", feature = "macos-system-configuration"))] fn parse_setting_from_dynamic_store( proxies_map: &CFDictionary, enabled_key: CFStringRef, @@ -985,7 +985,7 @@ fn parse_setting_from_dynamic_store( None } -#[cfg(target_os = "macos")] +#[cfg(all(target_os = "macos", feature = "macos-system-configuration"))] fn get_from_platform_impl() -> Result, Box> { let store = SCDynamicStoreBuilder::new("reqwest").build(); @@ -1016,12 +1016,18 @@ fn get_from_platform_impl() -> Result, Box> { } } -#[cfg(any(target_os = "windows", target_os = "macos"))] +#[cfg(any( + target_os = "windows", + all(target_os = "macos", feature = "macos-system-configuration") +))] fn get_from_platform() -> Option { get_from_platform_impl().ok().flatten() } -#[cfg(not(any(target_os = "windows", target_os = "macos")))] +#[cfg(not(any( + target_os = "windows", + all(target_os = "macos", feature = "macos-system-configuration") +)))] fn get_from_platform() -> Option { None }