blob: c67aafe588cf26aa4162ef372535159cc443b89d (
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
|
# -*- ruby -*-
load "./rbconfig.rb"
load File.dirname(__FILE__) + '/rubyspec/default.mspec'
OBJDIR = File.expand_path("spec/rubyspec/optional/capi/ext")
class MSpecScript
builddir = Dir.pwd
srcdir = ENV['SRCDIR']
if !srcdir and File.exist?("#{builddir}/Makefile") then
File.open("#{builddir}/Makefile", "r:US-ASCII") {|f|
f.read[/^\s*srcdir\s*=\s*(.+)/i] and srcdir = $1
}
end
srcdir = File.expand_path(srcdir)
config = RbConfig::CONFIG
# The default implementation to run the specs.
set :target, File.join(builddir, "miniruby#{config['exeext']}")
set :prefix, File.expand_path('rubyspec', File.dirname(__FILE__))
set :flags, %W[
-I#{srcdir}/lib
-I#{srcdir}
-I#{srcdir}/#{config['EXTOUT']}/common
#{srcdir}/tool/runruby.rb --archdir=#{Dir.pwd} --extout=#{config['EXTOUT']}
--
]
end
module MSpecScript::JobServer
def cores
if /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"]
cores = 0
begin
r = IO.for_fd($1.to_i(10), "rb", autoclose: false)
w = IO.for_fd($2.to_i(10), "wb", autoclose: false)
jobtokens = r.read_nonblock(1024)
cores = jobtokens.size
if cores > 0
jobserver = w
w = nil
at_exit {
jobserver.print(jobtokens)
jobserver.close
}
MSpecScript::JobServer.module_eval do
remove_method :cores
define_method(:cores) do
cores
end
end
return cores
end
ensure
r&.close
w&.close
end
end
super
end
end
class MSpecScript
prepend JobServer
end
|