ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: Aaron Patterson <aaron@tenderlovemaking.com>
To: ruby-core@ruby-lang.org
Subject: [ruby-core:37815] Re: [Ruby 1.9 - Bug #4962][Open] come back gem_prelude!
Date: Wed, 6 Jul 2011 07:19:11 +0900	[thread overview]
Message-ID: <20110705221904.GB50037@higgins.local> (raw)
In-Reply-To: <CAN_J9avTjnfERujOBE+vzmOXPG+ivOE02yHAbBVPXyz1cM6M=w@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4486 bytes --]

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.  I 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/

[-- Attachment #2: Type: application/pgp-signature, Size: 487 bytes --]

  reply	other threads:[~2011-07-05 22:07 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-02  5:18 [ruby-core:37730] [Ruby 1.9 - Bug #4962][Open] come back gem_prelude! Yusuke Endoh
2011-07-02 14:13 ` [ruby-core:37741] [Ruby 1.9 - Bug #4962] " Luis Lavena
2011-07-02 14:48   ` [ruby-core:37743] " KOSAKI Motohiro
2011-07-02 19:40 ` [ruby-core:37746] Re: [Ruby 1.9 - Bug #4962][Open] " Roger Pack
2011-07-05 21:56 ` [ruby-core:37813] " Aaron Patterson
2011-07-05 22:01   ` [ruby-core:37814] " Luis Lavena
2011-07-05 22:19     ` Aaron Patterson [this message]
2011-07-10 23:50   ` [ruby-core:37975] " Nobuyoshi Nakada
2011-07-13  5:40     ` [ruby-core:38038] " Aaron Patterson
2011-07-05 23:46 ` [ruby-core:37818] [Ruby 1.9 - Bug #4962] " Eric Hodel
2011-07-06  0:16   ` [ruby-core:37819] " KOSAKI Motohiro
2011-07-06  2:06 ` [ruby-core:37820] " Eric Hodel
2011-07-06  4:14 ` [ruby-core:37821] [Ruby 1.9 - Bug #4962][Assigned] " Eric Hodel
2011-07-06  9:48   ` [ruby-core:37824] " KOSAKI Motohiro
2011-07-06 11:57     ` [ruby-core:37826] " Yusuke ENDOH
2011-07-06 18:20       ` [ruby-core:37830] " Eric Hodel
2011-07-06 18:20     ` [ruby-core:37829] " Eric Hodel
2011-07-06 21:21 ` [ruby-core:37833] [Ruby 1.9 - Bug #4962] " Eric Hodel
2011-07-06 22:02   ` [ruby-core:37834] " Benoit Daloze
2011-07-06 22:26     ` [ruby-core:37835] " Eric Hodel
2011-07-09  0:36 ` [ruby-core:37906] " Eric Hodel
2011-07-09  4:20 ` [ruby-core:37910] " Motohiro KOSAKI
2011-07-09  4:34 ` [ruby-core:37911] " Motohiro KOSAKI
2011-07-10 23:57 ` [ruby-core:37976] [Ruby 1.9 - Bug #4962][Closed] " Motohiro KOSAKI

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110705221904.GB50037@higgins.local \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).