Skip to content

Commit 166ff18

Browse files
committed
[rubygems/rubygems] Removed ccache or sccache from args of Rust builder
``` " = note: some arguments are omitted. use `--verbose` to show all linker arguments\n" + " = note: error: unexpected argument '-W' found\n" + " \n" + " tip: to pass '-W' as a value, use '-- -W'\n" + " \n" + " Usage: sccache [OPTIONS] <--dist-auth|--debug-preprocessor-cache|--dist-status|--show-stats|--show-adv-stats|--start-server|--stop-server|--zero-stats|--package-toolchain <EXE> <OUT>|CMD>\n" + " \n" + " For more information, try '--help'.\n" + " \n" + ``` ruby/rubygems@45e688ae62
1 parent 4585ccd commit 166ff18

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

lib/rubygems/ext/cargo_builder.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ def platform_specific_rustc_args(dest_dir, flags = [])
158158
# mkmf work properly.
159159
def linker_args
160160
cc_flag = self.class.shellsplit(makefile_config("CC"))
161+
# Avoid to ccache like tool from Rust build
162+
# see https://github.com/rubygems/rubygems/pull/8521#issuecomment-2689854359
163+
# ex. CC="ccache gcc" or CC="sccache clang --any --args"
164+
cc_flag.shift if cc_flag.size >= 2 && !cc_flag[1].start_with?("-")
161165
linker = cc_flag.shift
162166
link_args = cc_flag.flat_map {|a| ["-C", "link-arg=#{a}"] }
163167

test/rubygems/test_gem_ext_cargo_builder.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,58 @@ def test_custom_name
141141
end
142142
end
143143

144+
def test_linker_args
145+
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
146+
RbConfig::MAKEFILE_CONFIG["CC"] = "clang"
147+
148+
builder = Gem::Ext::CargoBuilder.new
149+
args = builder.send(:linker_args)
150+
151+
assert args[1], "linker=clang"
152+
assert_nil args[2]
153+
ensure
154+
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
155+
end
156+
157+
def test_linker_args_with_options
158+
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
159+
RbConfig::MAKEFILE_CONFIG["CC"] = "gcc -Wl,--no-undefined"
160+
161+
builder = Gem::Ext::CargoBuilder.new
162+
args = builder.send(:linker_args)
163+
164+
assert args[1], "linker=clang"
165+
assert args[3], "link-args=-Wl,--no-undefined"
166+
ensure
167+
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
168+
end
169+
170+
def test_linker_args_with_cachetools
171+
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
172+
RbConfig::MAKEFILE_CONFIG["CC"] = "sccache clang"
173+
174+
builder = Gem::Ext::CargoBuilder.new
175+
args = builder.send(:linker_args)
176+
177+
assert args[1], "linker=clang"
178+
assert_nil args[2]
179+
ensure
180+
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
181+
end
182+
183+
def test_linker_args_with_cachetools_and_options
184+
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
185+
RbConfig::MAKEFILE_CONFIG["CC"] = "ccache gcc -Wl,--no-undefined"
186+
187+
builder = Gem::Ext::CargoBuilder.new
188+
args = builder.send(:linker_args)
189+
190+
assert args[1], "linker=clang"
191+
assert args[3], "link-args=-Wl,--no-undefined"
192+
ensure
193+
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
194+
end
195+
144196
private
145197

146198
def skip_unsupported_platforms!

0 commit comments

Comments
 (0)