From d29afc8ab801ab3d32fcd787e43fbae7ea2630a6 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Sat, 25 Jul 2026 20:54:24 +0900 Subject: [PATCH 1/4] [Bug #20958] Fix test_keys_encoding on hosts without en_US.UTF-8 `EnvUtil.invoke_ruby` forces the C locale on the child process, so the test set `LC_ALL=en_US.UTF-8` to get a UTF-8 locale back. That locale is not generated on the debian11 chkbuild host, where `setlocale` falls back to C and the ENV key comes out as ASCII-8BIT instead of the default internal encoding. Inherit the locale of the parent process instead, and omit the test when that locale is not UTF-8. https://rubyci.s3.amazonaws.com/debian11/ruby-master/log/20260725T093003Z.fail.html.gz --- test/ruby/test_env.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/ruby/test_env.rb b/test/ruby/test_env.rb index b77f3d09ba7154..48409f843566e9 100644 --- a/test/ruby/test_env.rb +++ b/test/ruby/test_env.rb @@ -197,6 +197,7 @@ def test_keys def test_keys_encoding bug20958 = '[ruby-core:120277] [Bug #20958]' + omit "locale encoding is not UTF-8" unless ENCODING == Encoding::UTF_8 orig = ENV.to_hash ENV.clear key = "TEST20958\u{30c6 30b9 30c8}" @@ -206,14 +207,15 @@ def test_keys_encoding omit "platform does not support UTF-8 environment variables." end EnvUtil.with_default_internal(nil) do - enc = RUBY_PLATFORM =~ /mswin|mingw/ ? - Encoding::UTF_8 : Encoding.find("locale") - assert_equal(enc, ENV.keys.last.encoding, bug20958) - assert_equal(key.encode(enc), ENV.keys.last, bug20958) + assert_equal(ENCODING, ENV.keys.last.encoding, bug20958) + assert_equal(key.encode(ENCODING), ENV.keys.last, bug20958) end ENV.update(orig) #required to restore ENV[RbConfig::CONFIG['LIBPATHENV']] - env = {key => "x", "LOCALE" => "en_US.UTF-8", "LC_ALL" => "en_US.UTF-8"} + env = {key => "x"} + # invoke_ruby forces the C locale, restore the locale of this process, + # which is known to be UTF-8 here. + EnvUtil::LANG_ENVS.each {|e| env[e] = ENV[e]} load_path = $LOAD_PATH.map {|v| "-I#{v}" } internal_enc = "Windows-31J" params = [env, *load_path, "-Eutf-8:#{internal_enc}"] From 6092473dd1836cb5def2209e2d4dd47157c287ce Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 24 May 2026 13:49:56 +0900 Subject: [PATCH 2/4] Make ripper sources just once --- common.mk | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/common.mk b/common.mk index ff11693b30bb50..5b4894a34f2652 100644 --- a/common.mk +++ b/common.mk @@ -1226,12 +1226,13 @@ missing-srcs: $(srcdir)/missing/des_tables.c srcs: common-srcs missing-srcs srcs-enc srcs-doc -RIPPER_SRCS = $(srcdir)/ext/ripper/ripper.c \ - $(srcdir)/ext/ripper/ripper_init.c \ - $(srcdir)/ext/ripper/eventids1.h \ - $(srcdir)/ext/ripper/eventids1.c \ - $(srcdir)/ext/ripper/eventids2table.c \ - # RIPPER_SRCS +RIPPER_SRCS1 = $(srcdir)/ext/ripper/ripper.c +RIPPER_SRCS2 = $(srcdir)/ext/ripper/ripper_init.c \ + $(srcdir)/ext/ripper/eventids1.h \ + $(srcdir)/ext/ripper/eventids1.c \ + $(srcdir)/ext/ripper/eventids2table.c \ + # RIPPER_SRCS2 +RIPPER_SRCS = $(RIPPER_SRCS1) $(RIPPER_SRCS2) EXT_SRCS = ripper_srcs \ $(srcdir)/ext/rbconfig/sizeof/sizes.c \ @@ -1379,6 +1380,8 @@ $(RIPPER_SRCS): $(srcdir)/parse.y $(srcdir)/defs/id.def $(RIPPER_SRCS): $(srcdir)/ext/ripper/depend $(srcdir)/ext/ripper/extconf.rb $(RIPPER_SRCS): $(srcdir)/ext/ripper/tools/preproc.rb $(srcdir)/ext/ripper/tools/dsl.rb $(RIPPER_SRCS): $(srcdir)/ext/ripper/ripper_init.c.tmpl $(srcdir)/ext/ripper/eventids2.c +$(RIPPER_SRCS2): $(RIPPER_SRCS1) +$(RIPPER_SRCS1): $(ECHO) generating $@ $(Q) $(CHDIR) $(@D) && \ $(CAT_DEPEND) depend | \ From e0acfdc93908e77d8399881aac65576375d21702 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 24 May 2026 22:21:18 +0900 Subject: [PATCH 3/4] Propagate make flags and `Q` to build-tool --- common.mk | 2 +- tool/dump_ast.mkmf.rb | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/common.mk b/common.mk index 5b4894a34f2652..3e1027f3ee2238 100644 --- a/common.mk +++ b/common.mk @@ -1352,7 +1352,7 @@ build-tool/Makefile: $(tooldir)/dump_ast.mkmf.rb prism-srcs prism-incs +$(BASERUBY) -s $(tooldir)/dump_ast.mkmf.rb "-INCFLAGS=$(INCFLAGS)" "-make=$(MAKE)" build-tool $(tooldir)/dump_ast.c dump_ast.$(OBJEXT) $(LIBPRISM_OBJS) build-tool/dump_ast$(BUILD_EXEEXT): build-tool/Makefile - cd build-tool && MAKEFLAGS= MFLAGS= && unset MAKEFLAGS MFLAGS && $(MAKE) + cd build-tool && MAKEFLAGS= MFLAGS= && unset MAKEFLAGS MFLAGS && $(MAKE) Q=$(Q) clean-local:: clean-build-tool clean-build-tool: diff --git a/tool/dump_ast.mkmf.rb b/tool/dump_ast.mkmf.rb index eec6b72f79b520..d6262bcd1b99e8 100755 --- a/tool/dump_ast.mkmf.rb +++ b/tool/dump_ast.mkmf.rb @@ -22,16 +22,17 @@ File.write('Makefile', [MakeMakefile.configuration(srcdir.to_s), <<~MAKEFILE].join("")) target = #{target}#{$EXEEXT} objs = #{objs.join(' ')} + Q = $(target): $(objs) - \t#{link} $(objs) + \t$(Q) #{link} $(objs) objs: $(objs) .c.#{$OBJEXT}: - \t#{MakeMakefile::COMPILE_C} + \t$(Q) #{MakeMakefile::COMPILE_C} clean: - \t$(RM) $(target) $(objs) Makefile - \t$(RMDIRS) #{dirs.join(' ')} + \t$(Q) $(RM) $(target) $(objs) Makefile + \t$(Q) $(RMDIRS) #{dirs.join(' ')} MAKEFILE } From f6176ad8cd766e92422de300cb8d1ebad6342952 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 24 May 2026 23:28:58 +0900 Subject: [PATCH 4/4] dump_ast: Consider different OBJEXT --- common.mk | 4 +++- tool/dump_ast.mkmf.rb | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/common.mk b/common.mk index 3e1027f3ee2238..8feb982f6bda55 100644 --- a/common.mk +++ b/common.mk @@ -1349,7 +1349,9 @@ dump_ast$(BUILD_EXEEXT): $(tooldir)/dump_ast.c $(LIBPRISM_OBJS) $(Q) $(CC) $(CFLAGS) $(OUTFLAG)$@ $(INCFLAGS) $(tooldir)/dump_ast.c $(LIBPRISM_OBJS) build-tool/Makefile: $(tooldir)/dump_ast.mkmf.rb prism-srcs prism-incs - +$(BASERUBY) -s $(tooldir)/dump_ast.mkmf.rb "-INCFLAGS=$(INCFLAGS)" "-make=$(MAKE)" build-tool $(tooldir)/dump_ast.c dump_ast.$(OBJEXT) $(LIBPRISM_OBJS) + +$(BASERUBY) -s $(tooldir)/dump_ast.mkmf.rb \ + "-INCFLAGS=$(INCFLAGS)" "-make=$(MAKE)" "-objext=$(OBJEXT)" \ + build-tool $(tooldir)/dump_ast.c dump_ast.$(OBJEXT) $(LIBPRISM_OBJS) build-tool/dump_ast$(BUILD_EXEEXT): build-tool/Makefile cd build-tool && MAKEFLAGS= MFLAGS= && unset MAKEFLAGS MFLAGS && $(MAKE) Q=$(Q) diff --git a/tool/dump_ast.mkmf.rb b/tool/dump_ast.mkmf.rb index d6262bcd1b99e8..8382fe2b5207d9 100755 --- a/tool/dump_ast.mkmf.rb +++ b/tool/dump_ast.mkmf.rb @@ -14,6 +14,10 @@ $VPATH = ["$(srcdir)", "$(srcdir)/#{tooldir.basename}", prismdir, tooldir] $INCFLAGS << " -I#{prismdir}" $CPPFLAGS = $CFLAGS = $INCFLAGS +if $objext && $OBJEXT && $objext != $OBJEXT + ext1, ext2 = ".#{$objext}", ".#{$OBJEXT}" + objs.each {|obj| obj.chomp!(ext1) << ext2} +end include FileUtils::Verbose mkpath(workdir) @@ -23,6 +27,7 @@ target = #{target}#{$EXEEXT} objs = #{objs.join(' ')} Q = + .SUFFIXES: .c .#{$OBJEXT} $(target): $(objs) \t$(Q) #{link} $(objs)