From 517ed56b1e385d310da39f7c09ff570009932225 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Mon, 1 Jul 2024 13:29:10 -0400 Subject: [PATCH] Allow missing AR/CC/etc tools for precompiled rubies --- crates/rb-sys-build/src/bindings/stable_api.rs | 1 + crates/rb-sys-build/src/cc.rs | 13 +++++++++++-- crates/rb-sys-build/src/utils.rs | 2 +- .../rb-sys-test-helpers/src/ruby_test_executor.rs | 1 + crates/rb-sys/build/main.rs | 2 +- crates/rb-sys/build/stable_api_config.rs | 2 ++ crates/rb-sys/src/tracking_allocator.rs | 1 + 7 files changed, 18 insertions(+), 4 deletions(-) diff --git a/crates/rb-sys-build/src/bindings/stable_api.rs b/crates/rb-sys-build/src/bindings/stable_api.rs index fe5afea4..56d2e948 100644 --- a/crates/rb-sys-build/src/bindings/stable_api.rs +++ b/crates/rb-sys-build/src/bindings/stable_api.rs @@ -166,6 +166,7 @@ pub fn categorize_bindings(syntax: &mut syn::File) { } /// Unstable items for usage internally in rb_sys to avoid deprecated warnings. + #[allow(dead_code)] pub (crate) mod internal { use super::uncategorized::*; diff --git a/crates/rb-sys-build/src/cc.rs b/crates/rb-sys-build/src/cc.rs index f45bdf71..c0cc59f5 100644 --- a/crates/rb-sys-build/src/cc.rs +++ b/crates/rb-sys-build/src/cc.rs @@ -52,9 +52,12 @@ impl Build { let rb = rb_config(); let object_files = self.compile_each_file(compiler, &rb, &out_dir)?; + debug_log!("INFO: compiled object files: {:?}", object_files); let (lib_path, lib_name) = self.archive_object_files(archiver.copied(), name, &out_dir, object_files)?; - self.strip_archived_objects(archiver, &lib_path)?; + if let Err(e) = self.strip_archived_objects(archiver, &lib_path) { + debug_log!("WARN: failed to strip archived objects: {:?}", e); + } println!("cargo:rustc-link-search=native={}", out_dir.display()); println!("cargo:rustc-link-lib=static={}", lib_name); @@ -270,7 +273,13 @@ fn get_tool(env_var: &str, default: &str) -> Command { let mut tool_args = shellsplit(tool_args).into_iter(); let tool = tool_args.next().unwrap_or_else(|| default.to_string()); - let mut cmd = new_command(&tool); + let mut cmd = if !Path::new(&tool).is_file() { + debug_log!("[WARN] {tool} tool not found, falling back to {default}"); + new_command(default) + } else { + new_command(&tool) + }; + cmd.args(tool_args.clone()); debug_log!("INFO: found {:?} tool ({:?})", env_var, &cmd); diff --git a/crates/rb-sys-build/src/utils.rs b/crates/rb-sys-build/src/utils.rs index a11e7a27..dc768ec7 100644 --- a/crates/rb-sys-build/src/utils.rs +++ b/crates/rb-sys-build/src/utils.rs @@ -24,7 +24,7 @@ pub fn shellsplit>(s: S) -> Vec { match shell_words::split(s) { Ok(v) => v, Err(e) => { - debug_log!("shellsplit failed: {}", e); + debug_log!("WARN: shellsplit failed: {}", e); s.split_whitespace().map(Into::into).collect() } } diff --git a/crates/rb-sys-test-helpers/src/ruby_test_executor.rs b/crates/rb-sys-test-helpers/src/ruby_test_executor.rs index ee718bb7..2c1a1fc5 100644 --- a/crates/rb-sys-test-helpers/src/ruby_test_executor.rs +++ b/crates/rb-sys-test-helpers/src/ruby_test_executor.rs @@ -121,6 +121,7 @@ impl Drop for RubyTestExecutor { } pub fn global_executor() -> &'static RubyTestExecutor { + #[allow(static_mut_refs)] unsafe { &GLOBAL_EXECUTOR }.get_or_init(RubyTestExecutor::start) } diff --git a/crates/rb-sys/build/main.rs b/crates/rb-sys/build/main.rs index 07676c54..8b6a9323 100644 --- a/crates/rb-sys/build/main.rs +++ b/crates/rb-sys/build/main.rs @@ -61,7 +61,7 @@ fn main() { export_cargo_cfg(&mut rbconfig, &mut cfg_capture_file); #[cfg(feature = "stable-api")] - stable_api_config::setup(Version::current(&rbconfig)).unwrap(); + stable_api_config::setup(Version::current(&rbconfig)).expect("could not setup stable API"); if is_link_ruby_enabled() { link_libruby(&mut rbconfig); diff --git a/crates/rb-sys/build/stable_api_config.rs b/crates/rb-sys/build/stable_api_config.rs index 3ec20d0c..91e38ae9 100644 --- a/crates/rb-sys/build/stable_api_config.rs +++ b/crates/rb-sys/build/stable_api_config.rs @@ -124,9 +124,11 @@ fn maybe_warn_old_ruby_version(current_ruby_version: Version) { } fn compile() -> Result<(), Box> { + eprintln!("INFO: Compiling the stable API compiled module"); let mut build = rb_sys_build::cc::Build::new(); let crate_dir = Path::new(env!("CARGO_MANIFEST_DIR")); let path = crate_dir.join("src").join("stable_api").join("compiled.c"); + eprintln!("cargo:rerun-if-changed={}", path.display()); build.file(path); build.try_compile("compiled") diff --git a/crates/rb-sys/src/tracking_allocator.rs b/crates/rb-sys/src/tracking_allocator.rs index 4f47eeb3..37f905f2 100644 --- a/crates/rb-sys/src/tracking_allocator.rs +++ b/crates/rb-sys/src/tracking_allocator.rs @@ -18,6 +18,7 @@ pub struct TrackingAllocator; impl TrackingAllocator { /// Create a new [`TrackingAllocator`]. + #[allow(clippy::new_without_default)] pub const fn new() -> Self { Self }