summaryrefslogtreecommitdiff
path: root/tool/fake.rb
blob: dc8cf83e69976cabc613ff407eaa87c8f3a6122a (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Used by Makefile and configure for building Ruby.
# See common.mk and Makefile.in for details.

class File
  sep = ("\\" if RUBY_PLATFORM =~ /mswin|bccwin|mingw/)
  if sep != ALT_SEPARATOR
    remove_const :ALT_SEPARATOR
    ALT_SEPARATOR = sep
  end
end

static = !!(defined?($static) && $static)
$:.unshift(builddir)
posthook = proc do
  config = RbConfig::CONFIG
  mkconfig = RbConfig::MAKEFILE_CONFIG
  [
    ["top_srcdir", $top_srcdir],
    ["topdir", $topdir],
  ].each do |var, val|
    next unless val
    mkconfig[var] = config[var] = val
    t = /\A#{Regexp.quote(val)}(?=\/)/
    $hdrdir.sub!(t) {"$(#{var})"}
    mkconfig.keys.grep(/dir\z/) do |k|
      mkconfig[k] = "$(#{var})#$'" if t =~ mkconfig[k]
    end
  end
  if $extmk
    $ruby = "$(topdir)/miniruby -I'$(topdir)' -I'$(top_srcdir)/lib' -I'$(extout)/$(arch)' -I'$(extout)/common'"
  else
    $ruby = baseruby
  end
  $static = static
  untrace_var(:$ruby, posthook)
end
prehook = proc do |extmk|
  pat = %r[(?:\A(?:\w:|//[^/]+)|\G)/[^/]*]
  dir = builddir.scan(pat)
  pwd = Dir.pwd.scan(pat)
  if dir[0] == pwd[0]
    while dir[0] and dir[0] == pwd[0]
      dir.shift
      pwd.shift
    end
    builddir = File.join((pwd.empty? ? ["."] : [".."]*pwd.size) + dir)
    builddir = "." if builddir.empty?
  end
  join = proc {|*args| File.join(*args).sub!(/\A(?:\.\/)*/, '')}
  $topdir ||= builddir
  $top_srcdir ||= (File.identical?(top_srcdir, dir = join[$topdir, srcdir]) ?
                     dir : top_srcdir)
  $extout = '$(topdir)/.ext'
  $extout_prefix = '$(extout)$(target_prefix)/'
  config = RbConfig::CONFIG
  mkconfig = RbConfig::MAKEFILE_CONFIG
  mkconfig["builddir"] = config["builddir"] = builddir
  mkconfig["buildlibdir"] = config["buildlibdir"] = builddir
  mkconfig["libdir"] = config["libdir"] = builddir
  mkconfig["top_srcdir"] = $top_srcdir if $top_srcdir
  mkconfig["extout"] ||= $extout
  config["top_srcdir"] = File.expand_path($top_srcdir ||= top_srcdir)
  config["rubyhdrdir"] = join[$top_srcdir, "include"]
  config["rubyarchhdrdir"] = join[builddir, config["EXTOUT"], "include", config["arch"]]
  config["extout"] ||= join[$topdir, ".ext"]
  mkconfig["libdirname"] = "buildlibdir"
  trace_var(:$ruby, posthook)
  untrace_var(:$extmk, prehook)
end
trace_var(:$extmk, prehook)