From e60463034a468ec9fcee73466e76bd541c9a39c3 Mon Sep 17 00:00:00 2001 From: yugui Date: Thu, 30 Jul 2009 14:12:25 +0000 Subject: [PATCH] * tool/compile_prelude.rb: replaces "require" with in-place evaluation so that copy & paste for lib/rubygems/default.rb is not necessary. * gem_prelude.rb: removes copied codes from lib/rubygems/defaults.rb. uses require instead. * common.mk (prelude.c): adds dependency for lib/rubygems/defaults.rb. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++ common.mk | 2 +- gem_prelude.rb | 108 ++-------------------------------------- tool/compile_prelude.rb | 21 +++++++- 4 files changed, 34 insertions(+), 107 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66773ac554..16b3f8cdd0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Thu Jul 30 22:28:04 2009 Yuki Sonoda (Yugui) + + * tool/compile_prelude.rb: replaces "require" with in-place evaluation + so that copy & paste for lib/rubygems/default.rb is not necessary. + + * gem_prelude.rb: removes copied codes from lib/rubygems/defaults.rb. + uses require instead. + + * common.mk (prelude.c): adds dependency for lib/rubygems/defaults.rb. + Thu Jul 30 21:56:18 2009 Yusuke Endoh * test/ruby/test_rand.rb: add tests for Random class. diff --git a/common.mk b/common.mk index f50a67a3d7..de69872337 100644 --- a/common.mk +++ b/common.mk @@ -696,7 +696,7 @@ known_errors.inc: $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_ miniprelude.c: $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $(BASERUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $@ -prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(PRELUDE_SCRIPTS) $(PREP) +prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/lib/rubygems/defaults.rb $(PRELUDE_SCRIPTS) $(PREP) $(COMPILE_PRELUDE) $(PRELUDE_SCRIPTS) $@ golf_prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/prelude.rb $(srcdir)/golf_prelude.rb $(PREP) diff --git a/gem_prelude.rb b/gem_prelude.rb index e93f6045f9..d32cbe9b42 100644 --- a/gem_prelude.rb +++ b/gem_prelude.rb @@ -1,6 +1,5 @@ # depends on: array.rb dir.rb env.rb file.rb hash.rb module.rb regexp.rb # vim: filetype=ruby -# THIS FILE WAS AUTOGENERATED, DO NOT EDIT # NOTICE: Ruby is during initialization here. # * Encoding.default_external does not reflects -E. @@ -91,112 +90,11 @@ if defined?(Gem) then end # begin rubygems/defaults - - @post_install_hooks ||= [] - @post_uninstall_hooks ||= [] - @pre_uninstall_hooks ||= [] - @pre_install_hooks ||= [] - - ## - # An Array of the default sources that come with RubyGems - - def self.default_sources - %w[http://gems.rubyforge.org/] - end - - ## - # Default home directory path to be used if an alternate value is not - # specified in the environment - - def self.default_dir - if defined? RUBY_FRAMEWORK_VERSION then - File.join File.dirname(ConfigMap[:sitedir]), 'Gems', - ConfigMap[:ruby_version] - elsif RUBY_VERSION >= '1.9.2' then - File.join(ConfigMap[:rubylibprefix], 'gems', - ConfigMap[:ruby_version]) - # only Ruby 1.9.1 has a peculiar feature - elsif RUBY_VERSION > '1.9' and - File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name], 'gems', - ConfigMap[:ruby_version]) - else - File.join(ConfigMap[:libdir], ruby_engine, 'gems', - ConfigMap[:ruby_version]) - end - end - - ## - # Path for gems in the user's home directory - - def self.user_dir - File.join(Gem.user_home, '.gem', ruby_engine, - ConfigMap[:ruby_version]) - end - - ## - # Default gem load path - - def self.default_path - if File.exist?(Gem.user_home) - [user_dir, default_dir] - else - [default_dir] - end - end - - ## - # Deduce Ruby's --program-prefix and --program-suffix from its install name - - def self.default_exec_format - exec_format = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s' - - unless exec_format =~ /%s/ then - raise Gem::Exception, - "[BUG] invalid exec_format #{exec_format.inspect}, no %s" - end - - exec_format - end - - ## - # The default directory for binaries - - def self.default_bindir - if defined? RUBY_FRAMEWORK_VERSION then # mac framework support - '/usr/bin' - else # generic install - ConfigMap[:bindir] - end - end - - ## - # The default system-wide source info cache directory - - def self.default_system_source_cache_dir - File.join Gem.dir, 'source_cache' - end - - ## - # The default user-specific source info cache directory - - def self.default_user_source_cache_dir - File.join Gem.user_home, '.gem', 'source_cache' - end - - ## - # A wrapper around RUBY_ENGINE const that may not be defined - - def self.ruby_engine - if defined? RUBY_ENGINE then - RUBY_ENGINE - else - 'ruby' - end - end - - + # NOTE: this require will be replaced with in-place eval before compilation. + require 'lib/rubygems/defaults.rb' # end rubygems/defaults + ## # Methods before this line will be removed when QuickLoader is replaced # with the real RubyGems diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb index e0a011ce2d..48b9e2e1cf 100755 --- a/tool/compile_prelude.rb +++ b/tool/compile_prelude.rb @@ -23,6 +23,10 @@ C_ESC_PAT = Regexp.union(*C_ESC.keys) def c_esc(str) '"' + str.gsub(C_ESC_PAT) { C_ESC[$&] } + '"' end +def prelude_name(*path_nests) + prelude = path_nests.map{|prelude_path| File.basename(prelude_path, ".rb") }.join(":") + "" +end mkconf = nil setup_ruby_prefix = nil @@ -47,6 +51,16 @@ lines_list = preludes.map {|filename| "nil" end } + line.gsub!(/require\s*(\(?)\s*(["'])(.*?)\2\s*\1/) { + orig, path = $&, $3 + srcdir = File.expand_path("../..", __FILE__) + path = File.expand_path(path, srcdir) + if File.exist?(path) + "eval(%s, TOPLEVEL_BINDING, %s, %d)" % [ File.read(path).dump, prelude_name(filename, path).dump, 1] + else + orig + end + } lines << c_esc(line) } setup_lines = [] @@ -60,11 +74,16 @@ lines_list = preludes.map {|filename| require 'erb' tmp = ERB.new(<<'EOS', nil, '%').result(binding) +/* -*-c-*- + THIS FILE WAS AUTOGENERATED BY tool/compile_prelude.rb. DO NOT EDIT. + + soruces: <%= preludes.join(', ') %> +*/ #include "ruby/ruby.h" #include "vm_core.h" % preludes.zip(lines_list).each_with_index {|(prelude, (setup_lines, lines)), i| -static const char prelude_name<%=i%>[] = <%=c_esc("")%>; +static const char prelude_name<%=i%>[] = <%=c_esc(prelude_name(prelude))%>; static const char prelude_code<%=i%>[] = % (setup_lines+lines).each {|line| <%=line%>