diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-15 02:54:55 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-15 02:54:55 +0000 |
commit | 215d8942ab4ebf51c36cb5e08a2f081350a73f65 (patch) | |
tree | b797a2967fd4036a08e53bfaa22df45ca058be2c /tool | |
parent | 9e695a85fc8a1f87b3fe64ca69c42c82029e9b9b (diff) | |
download | ruby-215d8942ab4ebf51c36cb5e08a2f081350a73f65.tar.gz ruby-215d8942ab4ebf51c36cb5e08a2f081350a73f65.tar.xz ruby-215d8942ab4ebf51c36cb5e08a2f081350a73f65.zip |
* tool/compile_prelude.rb: adjust RbConfig::CONFIG paths relative
to the installation path.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@13925 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r-- | tool/compile_prelude.rb | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb index 985f7192c..90d0839dc 100644 --- a/tool/compile_prelude.rb +++ b/tool/compile_prelude.rb @@ -1,6 +1,6 @@ # This file is interpreted by $(BASERUBY) and miniruby. -# $(BASERUBY) is used for prelude.c. -# miniruby is used for ext_prelude.c. +# $(BASERUBY) is used for miniprelude.c. +# miniruby is used for prelude.c. # Since $(BASERUBY) may be older than Ruby 1.9, # Ruby 1.9 feature should not be used. @@ -21,20 +21,34 @@ def c_esc(str) '"' + str.gsub(C_ESC_PAT) { C_ESC[$&] } + '"' end -lines_list = preludes.map {|prelude| +mkconf = nil +setup_ruby_prefix = nil +lines_list = preludes.map {|filename| lines = [] - File.readlines(prelude).each {|line| + need_ruby_prefix = false + File.readlines(filename).each {|line| line.gsub!(/RbConfig::CONFIG\["(\w+)"\]/) { - require 'rbconfig' - if RbConfig::CONFIG.has_key? $1 - c_esc(RbConfig::CONFIG[$1]) + unless mkconf + require 'rbconfig' + mkconf = RbConfig::MAKEFILE_CONFIG.merge('prefix'=>'#{ruby_prefix}') + exlen = $:.grep(%r{\A/}).last.length - RbConfig::CONFIG["prefix"].length + setup_ruby_prefix = "ruby_prefix = $:.grep(%r{\\A/}).last[0..#{-exlen-1}]\n" + end + if RbConfig::MAKEFILE_CONFIG.has_key? $1 + val = RbConfig.expand("$(#$1)", mkconf) + need_ruby_prefix = true if /\A\#{ruby_prefix}/ =~ val + c_esc(val) else $& end } lines << c_esc(line) } - lines + setup_lines = [] + if need_ruby_prefix + setup_lines << c_esc(setup_ruby_prefix) + end + [setup_lines, lines] } open(outfile, 'w'){|f| @@ -45,11 +59,11 @@ open(outfile, 'w'){|f| EOS__ - preludes.zip(lines_list).each_with_index {|(prelude, lines), i| + preludes.zip(lines_list).each_with_index {|(prelude, (setup_lines, lines)), i| f.puts <<EOS__ static const char prelude_name#{i}[] = "#{File.basename(prelude)}"; static const char prelude_code#{i}[] = -#{lines.join("\n")} +#{(setup_lines+lines).join("\n")} ; EOS__ } @@ -59,12 +73,12 @@ void Init_prelude(void) { EOS__ - preludes.length.times {|i| + lines_list.each_with_index {|(setup_lines, lines), i| f.puts <<EOS__ rb_iseq_eval(rb_iseq_compile( rb_str_new(prelude_code#{i}, sizeof(prelude_code#{i}) - 1), rb_str_new(prelude_name#{i}, sizeof(prelude_name#{i}) - 1), - INT2FIX(1))); + INT2FIX(#{1-setup_lines.length}))); EOS__ } |