summaryrefslogtreecommitdiff
path: root/template/fake.rb.in
blob: 524f6c888d3d50fa241789c9fe4ace60ba2f2d10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%
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)
  def src.value(name)
    eval(self[/\bruby_#{name}(?:\[\])?\s*=\s*((?:"(?:\\.|[^\"\\])*"\s*)*(?=;)|[^{};]+)/m, 1].gsub(/#/, '\\#'))
  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, v|
    version[n] = src.value(v)
  end
  arg['RUBY_DESCRIPTION_WITH_JIT'] = src.value('description_with_jit')
end
%>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' %>RubyVM.const_defined?(:MJIT) && RubyVM::MJIT.enabled? ?
    <%=arg['RUBY_DESCRIPTION_WITH_JIT'].inspect%> :
    <%end%><%=v.inspect%>
% }
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.read(fake), nil, fake)
ENV["RUBYOPT"] = ["-r#{__FILE__}", ENV["RUBYOPT"]].compact.join(" ")