mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
# shareable_constant_value: literal
 | 
						|
<%
 | 
						|
arg = {}
 | 
						|
while /\A(\w+)=(.*)/ =~ ARGV[0]
 | 
						|
  arg[$1] = $2
 | 
						|
  arg[$1].tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
 | 
						|
  ARGV.shift
 | 
						|
end
 | 
						|
if inc = arg['i']
 | 
						|
  src = inc == '-' ? STDIN.read : File.read(inc)
 | 
						|
else
 | 
						|
  src = ""
 | 
						|
end
 | 
						|
def src.value(name)
 | 
						|
  unless val = self[/\bruby_#{name}(?:\[\])?\s*=\s*((?:"(?:\\.|[^\"\\])*"\s*)*(?=;)|[^{};]+)/m, 1]
 | 
						|
    return
 | 
						|
  end
 | 
						|
  eval(val.gsub(/#/, '\\#').gsub(/((?:\G|[^\\])(?:\\\\)*)\n/, '\1'))
 | 
						|
end
 | 
						|
arg['versions'] = version = {}
 | 
						|
File.read(File.join(arg['srcdir'], 'version.c')).
 | 
						|
  scan(/rb_define_global_const\("(RUBY_\w+)",[^;]*?\bMK(?:INT|(STR))\(([^()]*)\)/m) do |n, s, v|
 | 
						|
  version[n] = arg[v] || src.value(v) || (s ? v : 0)
 | 
						|
end
 | 
						|
arg['RUBY_DESCRIPTION_WITH_MJIT'] = src.value('description_with_mjit') || 'description_with_mjit'
 | 
						|
arg['RUBY_DESCRIPTION_WITH_YJIT'] = src.value('description_with_yjit') || 'description_with_yjit'
 | 
						|
%>baseruby="<%=arg['BASERUBY']%>"
 | 
						|
_\
 | 
						|
=begin
 | 
						|
_=
 | 
						|
ruby="${RUBY-$baseruby}"
 | 
						|
case "$ruby" in "echo "*) $ruby; exit $?;; esac
 | 
						|
case "$0" in /*) r=-r"$0";; *) r=-r"./$0";; esac
 | 
						|
exec $ruby "$r" "$@"
 | 
						|
=end
 | 
						|
=baseruby
 | 
						|
class Object
 | 
						|
  remove_const :CROSS_COMPILING if defined?(CROSS_COMPILING)
 | 
						|
  CROSS_COMPILING = RUBY_PLATFORM
 | 
						|
  constants.grep(/^RUBY_/) {|n| remove_const n}
 | 
						|
% arg['versions'].each {|n, v|
 | 
						|
  <%=n%> = <%if n=='RUBY_DESCRIPTION' %>case
 | 
						|
    when RubyVM.const_defined?(:MJIT) && RubyVM::MJIT.enabled?
 | 
						|
      <%=arg['RUBY_DESCRIPTION_WITH_MJIT'].inspect%>
 | 
						|
    when RubyVM.const_defined?(:YJIT) && RubyVM::YJIT.enabled?
 | 
						|
      <%=arg['RUBY_DESCRIPTION_WITH_YJIT'].inspect%>
 | 
						|
    else
 | 
						|
      <%=v.inspect%>
 | 
						|
    end<%else%><%=v.inspect%><%end%>
 | 
						|
% }
 | 
						|
end
 | 
						|
builddir = File.dirname(File.expand_path(__FILE__))
 | 
						|
srcdir = "<%=arg['srcdir']%>"
 | 
						|
top_srcdir = File.realpath(srcdir, builddir)
 | 
						|
fake = File.join(top_srcdir, "tool/fake.rb")
 | 
						|
eval(File.binread(fake), nil, fake)
 | 
						|
ropt = "-r#{__FILE__}"
 | 
						|
["RUBYOPT"].each do |flag|
 | 
						|
  opt = ENV[flag]
 | 
						|
  opt = opt ? ([ropt] | opt.b.split(/\s+/)).join(" ") : ropt
 | 
						|
  ENV[flag] = opt
 | 
						|
end
 |