[ruby-core:115404] Ruby 3.2.2 - rbconfig.rb's MAKEFILE_CONFIG

Hello Ruby Dev Team, With Ruby 3.2.2, gem install fails because in rbconfig.rb, MAKEFILE_CONFIG's $(target_os) is not expanded (whereas CONFIG's is expanded correctly). The inline doc in mkconfig.rb states that the caller can expand MAKEFILE_CONFIG's values by calling RbConfig::expand(). However, ruby-shadow gem's Makefile generator -- extconf.rb -- does not call expand and directly uses mkmf.rb's CONFIG instance (which is RbConfig::MAKEFILE_CONFIG), because of which $(target_os) does not get expanded. This causes ruby-shadow gem install to fail with Ruby 3.2.2. Would the Ruby Dev Team accept the following proposal to fix mkconfig.rb, so that the generated rbconfig.rb instantiates MAKEFILE_CONFIG AFTER CONFIG's values have been expanded? # Existing code... CONFIG.each_value do |val| RbConfig::expand(val) end # Move instantiation of MAKEFILE_CONFIG after expanding CONFIG's values. MAKEFILE_CONFIG = {} CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup} If we fix it in mkconfig.rb, we can avoid callers having to explicitly call expand for MAKEFILE_CONFIG's values. Thanks.

Hello, Where do you see such code, https://github.com/ruby/ruby/blob/master/lib/mkmf.rb doesn't seem to have it. In any case, it's not a good idea to use `CONFIG` in `extconf.rb`, use `RbConfig::CONFIG` instead (like everywhere else), that's always expanded. Benoit On Fri, Nov 17, 2023 at 2:48 AM Jay Mav via ruby-core < ruby-core@ml.ruby-lang.org> wrote:
Hello Ruby Dev Team, With Ruby 3.2.2, gem install fails because in rbconfig.rb, MAKEFILE_CONFIG's $(target_os) is not expanded (whereas CONFIG's is expanded correctly).
The inline doc in mkconfig.rb states that the caller can expand MAKEFILE_CONFIG's values by calling RbConfig::expand().
However, ruby-shadow gem's Makefile generator -- extconf.rb -- does not call expand and directly uses mkmf.rb's CONFIG instance (which is RbConfig::MAKEFILE_CONFIG), because of which $(target_os) does not get expanded. This causes ruby-shadow gem install to fail with Ruby 3.2.2.
Would the Ruby Dev Team accept the following proposal to fix mkconfig.rb, so that the generated rbconfig.rb instantiates MAKEFILE_CONFIG AFTER CONFIG's values have been expanded?
# Existing code... CONFIG.each_value do |val| RbConfig::expand(val) end # Move instantiation of MAKEFILE_CONFIG after expanding CONFIG's values. MAKEFILE_CONFIG = {} CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
If we fix it in mkconfig.rb, we can avoid callers having to explicitly call expand for MAKEFILE_CONFIG's values.
Thanks. ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org...

There is already a PR upstream to fix this: https://github.com/apalmblad/ruby-shadow/pull/31 On Fri, Nov 17, 2023 at 11:46 AM Benoit Daloze <eregontp@gmail.com> wrote:
Hello,
Where do you see such code, https://github.com/ruby/ruby/blob/master/lib/mkmf.rb doesn't seem to have it.
In any case, it's not a good idea to use `CONFIG` in `extconf.rb`, use `RbConfig::CONFIG` instead (like everywhere else), that's always expanded.
Benoit
On Fri, Nov 17, 2023 at 2:48 AM Jay Mav via ruby-core < ruby-core@ml.ruby-lang.org> wrote:
Hello Ruby Dev Team, With Ruby 3.2.2, gem install fails because in rbconfig.rb, MAKEFILE_CONFIG's $(target_os) is not expanded (whereas CONFIG's is expanded correctly).
The inline doc in mkconfig.rb states that the caller can expand MAKEFILE_CONFIG's values by calling RbConfig::expand().
However, ruby-shadow gem's Makefile generator -- extconf.rb -- does not call expand and directly uses mkmf.rb's CONFIG instance (which is RbConfig::MAKEFILE_CONFIG), because of which $(target_os) does not get expanded. This causes ruby-shadow gem install to fail with Ruby 3.2.2.
Would the Ruby Dev Team accept the following proposal to fix mkconfig.rb, so that the generated rbconfig.rb instantiates MAKEFILE_CONFIG AFTER CONFIG's values have been expanded?
# Existing code... CONFIG.each_value do |val| RbConfig::expand(val) end # Move instantiation of MAKEFILE_CONFIG after expanding CONFIG's values. MAKEFILE_CONFIG = {} CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
If we fix it in mkconfig.rb, we can avoid callers having to explicitly call expand for MAKEFILE_CONFIG's values.
Thanks. ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org...

With the fix in ruby-shadow-ruby32's extconf.rb for using RbConfig::CONFIG['host_os'], I confirmed that the gem is installed successfully now. Thanks for fixing it. However, if there's any other gem which uses MAKEFILE_CONFIG, then it would run into the same error. So it would be better to fix it in mkconfig.rb. Thanks. On Fri, Nov 17, 2023 at 2:49 AM Benoit Daloze via ruby-core < ruby-core@ml.ruby-lang.org> wrote:
There is already a PR upstream to fix this: https://github.com/apalmblad/ruby-shadow/pull/31
On Fri, Nov 17, 2023 at 11:46 AM Benoit Daloze <eregontp@gmail.com> wrote:
Hello,
Where do you see such code, https://github.com/ruby/ruby/blob/master/lib/mkmf.rb doesn't seem to have it.
In any case, it's not a good idea to use `CONFIG` in `extconf.rb`, use `RbConfig::CONFIG` instead (like everywhere else), that's always expanded.
Benoit
On Fri, Nov 17, 2023 at 2:48 AM Jay Mav via ruby-core < ruby-core@ml.ruby-lang.org> wrote:
Hello Ruby Dev Team, With Ruby 3.2.2, gem install fails because in rbconfig.rb, MAKEFILE_CONFIG's $(target_os) is not expanded (whereas CONFIG's is expanded correctly).
The inline doc in mkconfig.rb states that the caller can expand MAKEFILE_CONFIG's values by calling RbConfig::expand().
However, ruby-shadow gem's Makefile generator -- extconf.rb -- does not call expand and directly uses mkmf.rb's CONFIG instance (which is RbConfig::MAKEFILE_CONFIG), because of which $(target_os) does not get expanded. This causes ruby-shadow gem install to fail with Ruby 3.2.2.
Would the Ruby Dev Team accept the following proposal to fix mkconfig.rb, so that the generated rbconfig.rb instantiates MAKEFILE_CONFIG AFTER CONFIG's values have been expanded?
# Existing code... CONFIG.each_value do |val| RbConfig::expand(val) end # Move instantiation of MAKEFILE_CONFIG after expanding CONFIG's values. MAKEFILE_CONFIG = {} CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
If we fix it in mkconfig.rb, we can avoid callers having to explicitly call expand for MAKEFILE_CONFIG's values.
Thanks. ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org...
______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org...
participants (2)
-
Benoit Daloze
-
Jay Mav