[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" +
```

https://github.com/rubygems/rubygems/commit/45e688ae62
This commit is contained in:
Hiroshi SHIBATA 2025-02-21 13:34:23 +09:00
parent 4585ccd90f
commit 166ff187bd
2 changed files with 56 additions and 0 deletions

View File

@ -158,6 +158,10 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
# mkmf work properly.
def linker_args
cc_flag = self.class.shellsplit(makefile_config("CC"))
# Avoid to ccache like tool from Rust build
# see https://github.com/rubygems/rubygems/pull/8521#issuecomment-2689854359
# ex. CC="ccache gcc" or CC="sccache clang --any --args"
cc_flag.shift if cc_flag.size >= 2 && !cc_flag[1].start_with?("-")
linker = cc_flag.shift
link_args = cc_flag.flat_map {|a| ["-C", "link-arg=#{a}"] }

View File

@ -141,6 +141,58 @@ class TestGemExtCargoBuilder < Gem::TestCase
end
end
def test_linker_args
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
RbConfig::MAKEFILE_CONFIG["CC"] = "clang"
builder = Gem::Ext::CargoBuilder.new
args = builder.send(:linker_args)
assert args[1], "linker=clang"
assert_nil args[2]
ensure
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
end
def test_linker_args_with_options
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
RbConfig::MAKEFILE_CONFIG["CC"] = "gcc -Wl,--no-undefined"
builder = Gem::Ext::CargoBuilder.new
args = builder.send(:linker_args)
assert args[1], "linker=clang"
assert args[3], "link-args=-Wl,--no-undefined"
ensure
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
end
def test_linker_args_with_cachetools
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
RbConfig::MAKEFILE_CONFIG["CC"] = "sccache clang"
builder = Gem::Ext::CargoBuilder.new
args = builder.send(:linker_args)
assert args[1], "linker=clang"
assert_nil args[2]
ensure
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
end
def test_linker_args_with_cachetools_and_options
orig_cc = RbConfig::MAKEFILE_CONFIG["CC"]
RbConfig::MAKEFILE_CONFIG["CC"] = "ccache gcc -Wl,--no-undefined"
builder = Gem::Ext::CargoBuilder.new
args = builder.send(:linker_args)
assert args[1], "linker=clang"
assert args[3], "link-args=-Wl,--no-undefined"
ensure
RbConfig::MAKEFILE_CONFIG["CC"] = orig_cc
end
private
def skip_unsupported_platforms!