diff --git a/ChangeLog b/ChangeLog index cb6142dac5..7f977ae094 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Nov 15 11:52:16 2007 Tanaka Akira + + * tool/compile_prelude.rb: adjust RbConfig::CONFIG paths relative + to the installation path. + Thu Nov 15 11:25:20 2007 Tanaka Akira * ruby.c (usage): fix typo on --disable-gems option. diff --git a/tool/compile_prelude.rb b/tool/compile_prelude.rb index 985f7192cf..90d0839dc6 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 <