diff --git a/Cargo.lock b/Cargo.lock index 467d6af32..3d1f178f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -358,15 +358,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - [[package]] name = "bstr" version = "1.12.3" @@ -865,17 +856,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ctrlc" -version = "3.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" -dependencies = [ - "dispatch2", - "nix 0.31.2", - "windows-sys 0.61.2", -] - [[package]] name = "darling" version = "0.20.11" @@ -1015,18 +995,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "dispatch2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" -dependencies = [ - "bitflags 2.11.0", - "block2", - "libc", - "objc2", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1327,7 +1295,6 @@ version = "2.5.0" dependencies = [ "blake3", "clap", - "ctrlc", "fbuild-build", "fbuild-config", "fbuild-core", @@ -2813,18 +2780,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nix" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "cfg_aliases 0.2.1", - "libc", -] - [[package]] name = "no_std_io2" version = "0.8.1" @@ -2915,21 +2870,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "objc2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - [[package]] name = "object" version = "0.36.7" diff --git a/crates/fbuild-cli/Cargo.toml b/crates/fbuild-cli/Cargo.toml index 3eaf49b0f..d045bd13a 100644 --- a/crates/fbuild-cli/Cargo.toml +++ b/crates/fbuild-cli/Cargo.toml @@ -32,7 +32,6 @@ tracing = { workspace = true } tracing-subscriber = { workspace = true } futures = { workspace = true } running-process = { workspace = true } -ctrlc = "3.5.2" blake3 = { workspace = true } sha2 = { workspace = true } tempfile = { workspace = true } diff --git a/crates/fbuild-cli/src/cli/dispatch.rs b/crates/fbuild-cli/src/cli/dispatch.rs index 00a557378..47c87a9be 100644 --- a/crates/fbuild-cli/src/cli/dispatch.rs +++ b/crates/fbuild-cli/src/cli/dispatch.rs @@ -48,12 +48,16 @@ pub async fn async_main() { tracing::warn!("{} is set but fbuild does not act on it", var); } - // Handle Ctrl+C with exit code 130 (standard POSIX SIGINT behavior, matches Python) - ctrlc::set_handler(move || { - output::warn("Interrupted"); - std::process::exit(130); - }) - .ok(); + // Handle Ctrl+C with exit code 130 (standard POSIX SIGINT behavior, matches Python). + // Tokio's cross-platform signal driver avoids pulling the Objective-C runtime + // through ctrlc -> dispatch2 -> objc2 into the macOS CLI binary + // (FastLED/fbuild#1024). + tokio::spawn(async { + if tokio::signal::ctrl_c().await.is_ok() { + output::warn("Interrupted"); + std::process::exit(130); + } + }); // Notify when running in dev mode (matches Python behavior) if std::env::var("FBUILD_DEV_MODE").is_ok_and(|v| v == "1") {