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 --]
next prev parent 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).