1<% 2arg = {} 3while /\A(\w+)=(.*)/ =~ ARGV[0] 4 arg[$1] = $2 5 arg[$1].tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR 6 ARGV.shift 7end 8if inc = arg['i'] 9 src = inc == '-' ? STDIN.read : File.read(inc) 10 def src.value(name) 11 eval(self[/\bruby_#{name}(?:\[\])?\s*=\s*((?:"(?:\\.|[^\"\\])*"\s*)*(?=;)|[^{};]+)/m, 1].gsub(/#/, '\\#')) 12 end 13 arg['versions'] = version = {} 14 File.read(File.join(arg['srcdir'], 'version.c')). 15 scan(/rb_define_global_const\("(RUBY_\w+)",[^;]*?\bMK(?:INT|STR)\(([^()]*)\)/m) do |n, v| 16 version[n] = src.value(v) 17 end 18 arg['RUBY_DESCRIPTION_WITH_JIT'] = src.value('description_with_jit') 19end 20%>baseruby="<%=arg['BASERUBY']%>" 21_\ 22=begin 23_= 24ruby="${RUBY-$baseruby}" 25case "$ruby" in "echo "*) $ruby; exit $?;; esac 26case "$0" in /*) r=-r"$0";; *) r=-r"./$0";; esac 27exec $ruby "$r" "$@" 28=end 29=baseruby 30class Object 31 remove_const :CROSS_COMPILING if defined?(CROSS_COMPILING) 32 CROSS_COMPILING = RUBY_PLATFORM 33 constants.grep(/^RUBY_/) {|n| remove_const n} 34% arg['versions'].each {|n, v| 35 <%=n%> = <%if n=='RUBY_DESCRIPTION' %>RubyVM.const_defined?(:MJIT) && RubyVM::MJIT.enabled? ? 36 <%=arg['RUBY_DESCRIPTION_WITH_JIT'].inspect%> : 37 <%end%><%=v.inspect%> 38% } 39end 40builddir = File.dirname(File.expand_path(__FILE__)) 41srcdir = "<%=arg['srcdir']%>" 42top_srcdir = File.realpath(srcdir, builddir) 43fake = File.join(top_srcdir, "tool/fake.rb") 44eval(File.binread(fake), nil, fake) 45ropt = "-r#{__FILE__}" 46["RUBYOPT"].each do |flag| 47 opt = ENV[flag] 48 opt = opt ? ([ropt] | opt.b.split).join(" ") : ropt 49 ENV[flag] = opt 50end 51