[#37730] [Ruby 1.9 - Bug #4962][Open] come back gem_prelude! — Yusuke Endoh <mame@...>

24 messages 2011/07/02

[#37840] [Ruby 1.9 - Feature #4985][Open] Add %S[] support for making a list of symbols — Aaron Patterson <aaron@...>

23 messages 2011/07/07

[#37866] [Backport87 - Feature #4996][Open] About 1.8.7 EOL — Shyouhei Urabe <shyouhei@...>

22 messages 2011/07/08

[#37913] [Ruby 1.9 - Bug #5003][Open] Enumerator#next segfaults in OS X Lion (10.7) — Ganesh Gunasegaran <ganesh.gunas@...>

16 messages 2011/07/09

[#37917] [Ruby 1.9 - Feature #5005][Open] Provide convenient access to original methods — Lazaridis Ilias <ilias@...>

13 messages 2011/07/09

[#37932] [Ruby 1.9 - Feature #5008][Open] Equal rights for Hash (like Array, String, Integer, Float) — Suraj Kurapati <sunaku@...>

31 messages 2011/07/09

[#37936] [Ruby 1.9 - Feature #5010][Open] Add Slop(-like) in stdlib and deprecate current OptionParser API — Rodrigo Rosenfeld Rosas <rr.rosas@...>

29 messages 2011/07/09

[#37968] [Ruby 1.9 - Bug #5015][Open] method_added" is called in addition to "method_undefined — Lazaridis Ilias <ilias@...>

14 messages 2011/07/10

[#38096] [Ruby 1.9 - Feature #5033][Open] PATCH: 1.9: gc_mark_children: Avoid gc_mark() tail recursion, use goto again. — Kurt Stephens <ks.ruby@...>

14 messages 2011/07/16

[#38109] [Ruby 1.9 - Bug #5034][Open] C Source Code formatting — Lazaridis Ilias <ilias@...>

18 messages 2011/07/16

[#38171] [Ruby 1.9 - Bug #5047][Open] Segfault (most likely involving require) — Jack Christensen <jack@...>

21 messages 2011/07/18

[#38182] [Ruby 1.9 - Feature #5054][Open] Compress a sequence of ends — ANDO Yasushi ANDO <andyjpn@...>

68 messages 2011/07/19

[#38197] [Ruby 1.9 - Feature #5056][Open] About 1.9 EOL — Shyouhei Urabe <shyouhei@...>

39 messages 2011/07/19
[#38900] [Ruby 1.9 - Feature #5056] About 1.9 EOL — Shota Fukumori <sorah@...> 2011/08/10

[#38902] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — Yukihiro Matsumoto <matz@...> 2011/08/10

Hi,

[#39048] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — SASADA Koichi <ko1@...> 2011/08/22

Hi,

[#39055] Re: [Ruby 1.9 - Feature #5056] About 1.9 EOL — Lucas Nussbaum <lucas@...> 2011/08/23

On 23/08/11 at 06:50 +0900, SASADA Koichi wrote:

[#38295] [Ruby 1.9 - Feature #5064][Open] HTTP user-agent class — Eric Hodel <drbrain@...7.net>

15 messages 2011/07/21

[#38391] [Ruby 1.9 - Bug #5076][Open] Mac OS X Lion Support — Yui NARUSE <naruse@...>

17 messages 2011/07/22

[#38503] [Ruby 1.9 - Feature #5096][Open] offer Logger-compatibility for ext — Eric Wong <normalperson@...>

16 messages 2011/07/25

[#38510] [Ruby 1.9 - Feature #5097][Assigned] Supported platforms of Ruby 1.9.3 — Yui NARUSE <naruse@...>

42 messages 2011/07/26

[#38526] [Backport92 - Backport #5099][Open] Backport r31875 load path performance problem — Aaron Patterson <aaron@...>

19 messages 2011/07/26

[#38538] [Ruby 1.9 - Feature #5101][Open] allow optional timeout for TCPSocket.new — Eric Wong <normalperson@...>

15 messages 2011/07/27

[#38610] [Ruby 1.9 - Feature #5120][Open] String#split needs to be logical — Alexey Muranov <muranov@...>

18 messages 2011/07/30

[#38623] [Ruby 1.9 - Feature #5123][Open] Alias Hash 1.9 as OrderedHash — Alexey Muranov <muranov@...>

14 messages 2011/07/31

[ruby-core:37815] Re: [Ruby 1.9 - Bug #4962][Open] come back gem_prelude!

From: Aaron Patterson <aaron@...>
Date: 2011-07-05 22:19:11 UTC
List: ruby-core #37815
On Wed, Jul 06, 2011 at 07:01:37AM +0900, Luis Lavena wrote:
> On Tue, Jul 5, 2011 at 6:56 PM, Aaron Patterson
> <aaron@tenderlovemaking.com> wrote:
> >
> > We can also help rbconfig go on a diet.  know it's not enough, but
> > this eliminated ~400 object allocations on my machine. what is the
> > MAKEFILE_CONFIG for anyway?)
> 
> Is used by mkmf, which raises another round of questions: why is not
> using RbConfig::CONFIG directly?

I assume it's so that if someone mutates the hash, it doesn't impact the
RbConfig::CONFIG hash.  Though, if that's the case, why doesn't mkmf.rb
just dup the hash rather than relying on rbconfig.

Maybe this patch is more appropriate:

diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 9b0b8c7..efaa603 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -6,7 +6,7 @@ require 'rbconfig'
 require 'fileutils'
 require 'shellwords'
 
-CONFIG = RbConfig::MAKEFILE_CONFIG
+CONFIG = RbConfig.makefile_config
 ORIG_LIBPATH = ENV['LIB']
 
 C_EXT = %w[c m]
diff --git a/template/fake.rb.in b/template/fake.rb.in
index 7bfa0ae..b487a79 100755
--- a/template/fake.rb.in
+++ b/template/fake.rb.in
@@ -24,7 +24,7 @@ end
 
 $:.unshift(File.expand_path("..", __FILE__))
 posthook = proc do
-  mkconfig = RbConfig::MAKEFILE_CONFIG
+  mkconfig = RbConfig.makefile_config
   extout = File.expand_path(mkconfig["EXTOUT"], mkconfig["builddir"])
   $arch_hdrdir = "#{extout}/include/$(arch)"
   $ruby = baseruby
@@ -33,7 +33,7 @@ end
 prehook = proc do |extmk|
   unless extmk
     config = RbConfig::CONFIG
-    mkconfig = RbConfig::MAKEFILE_CONFIG
+    mkconfig = RbConfig.makefile_config
     builddir = File.expand_path(File.dirname(__FILE__))
     mkconfig["top_srcdir"] = $top_srcdir = File.expand_path("@top_srcdir@", builddir)
     mkconfig["rubyhdrdir"] = "$(top_srcdir)/include"
diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb
index 6ad9fce..0674754 100755
--- a/tool/compile_prelude.rb
+++ b/tool/compile_prelude.rb
@@ -49,9 +49,9 @@ class Prelude
         key = $1
         unless @mkconf
           require './rbconfig'
-          @mkconf = RbConfig::MAKEFILE_CONFIG.merge('prefix'=>'#{TMP_RUBY_PREFIX}')
+          @mkconf = RbConfig.makefile_config.merge('prefix'=>'#{TMP_RUBY_PREFIX}')
         end
-        if RbConfig::MAKEFILE_CONFIG.has_key? key
+        @mkconf.has_key? key
           val = RbConfig.expand("$(#{key})", @mkconf)
           @need_ruby_prefix ||= /\A\#\{TMP_RUBY_PREFIX\}/ =~ val
           c_esc(val)
diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
index a2221f0..e924696 100755
--- a/tool/mkconfig.rb
+++ b/tool/mkconfig.rb
@@ -202,8 +202,6 @@ print <<EOS
   CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
   CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
   CONFIG["topdir"] = File.dirname(__FILE__)
-  MAKEFILE_CONFIG = {}
-  CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
   def RbConfig::expand(val, config = CONFIG)
     newval = val.gsub(/\\$\\$|\\$\\(([^()]+)\\)|\\$\\{([^{}]+)\\}/) {
       var = $&
@@ -233,6 +231,17 @@ print <<EOS
       RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]
     )
   end
+
+  def self.makefile_config
+    hash = CONFIG.dup
+    hash.each { |k,v| hash[k] = v.dup }
+  end
+
+  def self.const_missing const
+    return super unless :MAKEFILE_CONFIG == const
+    const_set :MAKEFILE_CONFIG, makefile_config
+    MAKEFILE_CONFIG
+  end
 end
 autoload :Config, "rbconfig/obsolete.rb" # compatibility for ruby-1.8.4 and older.
 CROSS_COMPILING = nil unless defined? CROSS_COMPILING
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index 0b1361a..34be069 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -968,7 +968,7 @@ $(ruby_pc): $(RBCONFIG)
 	@$(MINIRUBY) -r./rbconfig -p \
 	-e 'STDOUT.binmode' \
 	-e '$$_.gsub!(/@([a-z_]\w*)@/i) {' \
-	-e '(RbConfig::MAKEFILE_CONFIG[$$1] or "").gsub(/\$$\((.+?)\)/, %Q[$${\\1}])' \
+	-e '(RbConfig::CONFIG[$$1] or "").gsub(/\$$\((.+?)\)/, %Q[$${\\1}])' \
 	-e '}' \
 	$(srcdir)/template/ruby.pc.in > $@
 
diff --git a/win32/resource.rb b/win32/resource.rb
index 786edb0..34a1df2 100755
--- a/win32/resource.rb
+++ b/win32/resource.rb
@@ -2,7 +2,7 @@
 
 require './rbconfig'
 
-CONFIG = RbConfig::MAKEFILE_CONFIG
+CONFIG = RbConfig.makefile_config
 
 version = RUBY_VERSION.split(/\./)
 patch = CONFIG['PATCHLEVEL']

-- 
Aaron Patterson
http://tenderlovemaking.com/

In This Thread