2015-02-14 22:24:18 -05:00
|
|
|
# -*- ruby -*-
|
2017-09-02 20:32:27 -04:00
|
|
|
$VERBOSE = false
|
|
|
|
if (opt = ENV["RUBYOPT"]) and (opt = opt.dup).sub!(/(?:\A|\s)-w(?=\z|\s)/, '')
|
|
|
|
ENV["RUBYOPT"] = opt
|
|
|
|
end
|
2017-05-07 08:00:58 -04:00
|
|
|
require "./rbconfig" unless defined?(RbConfig)
|
2015-02-25 08:25:11 -05:00
|
|
|
load File.dirname(__FILE__) + '/rubyspec/default.mspec'
|
2016-04-21 17:59:01 -04:00
|
|
|
OBJDIR = File.expand_path("spec/rubyspec/optional/capi/ext")
|
2008-08-04 07:44:41 -04:00
|
|
|
class MSpecScript
|
2009-01-01 08:30:25 -05:00
|
|
|
builddir = Dir.pwd
|
2008-10-30 23:31:09 -04:00
|
|
|
srcdir = ENV['SRCDIR']
|
2014-08-17 19:04:23 -04:00
|
|
|
if !srcdir and File.exist?("#{builddir}/Makefile") then
|
2009-01-01 08:30:25 -05:00
|
|
|
File.open("#{builddir}/Makefile", "r:US-ASCII") {|f|
|
|
|
|
f.read[/^\s*srcdir\s*=\s*(.+)/i] and srcdir = $1
|
|
|
|
}
|
|
|
|
end
|
2016-04-21 17:38:21 -04:00
|
|
|
srcdir = File.expand_path(srcdir)
|
2015-02-14 22:24:18 -05:00
|
|
|
config = RbConfig::CONFIG
|
2008-08-31 04:31:38 -04:00
|
|
|
|
2008-08-04 07:44:41 -04:00
|
|
|
# The default implementation to run the specs.
|
2008-10-30 23:31:09 -04:00
|
|
|
set :target, File.join(builddir, "miniruby#{config['exeext']}")
|
2009-01-01 08:30:25 -05:00
|
|
|
set :prefix, File.expand_path('rubyspec', File.dirname(__FILE__))
|
2008-08-31 04:31:38 -04:00
|
|
|
set :flags, %W[
|
2016-04-21 17:38:21 -04:00
|
|
|
-I#{srcdir}/lib
|
|
|
|
#{srcdir}/tool/runruby.rb --archdir=#{Dir.pwd} --extout=#{config['EXTOUT']}
|
2016-11-08 21:42:30 -05:00
|
|
|
--
|
2008-08-31 04:31:38 -04:00
|
|
|
]
|
2008-08-04 07:44:41 -04:00
|
|
|
end
|
2017-04-04 21:36:21 -04:00
|
|
|
|
2017-04-08 21:23:02 -04:00
|
|
|
module MSpecScript::JobServer
|
2017-06-16 19:59:33 -04:00
|
|
|
def cores(max = 1)
|
|
|
|
if max > 1 and /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"]
|
|
|
|
cores = 1
|
2017-04-08 21:23:02 -04:00
|
|
|
begin
|
|
|
|
r = IO.for_fd($1.to_i(10), "rb", autoclose: false)
|
|
|
|
w = IO.for_fd($2.to_i(10), "wb", autoclose: false)
|
2017-06-16 19:59:33 -04:00
|
|
|
jobtokens = r.read_nonblock(max - 1)
|
2017-04-08 21:23:02 -04:00
|
|
|
cores = jobtokens.size
|
|
|
|
if cores > 0
|
2017-06-16 19:59:33 -04:00
|
|
|
cores += 1
|
2017-04-08 21:23:02 -04:00
|
|
|
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
|
2017-05-15 06:32:30 -04:00
|
|
|
rescue Errno::EBADF
|
2017-04-08 21:23:02 -04:00
|
|
|
ensure
|
|
|
|
r&.close
|
|
|
|
w&.close
|
2017-04-04 21:36:21 -04:00
|
|
|
end
|
|
|
|
end
|
2017-04-08 21:23:02 -04:00
|
|
|
super
|
2017-04-04 21:36:21 -04:00
|
|
|
end
|
|
|
|
end
|
2017-04-08 21:23:02 -04:00
|
|
|
|
|
|
|
class MSpecScript
|
|
|
|
prepend JobServer
|
|
|
|
end
|