summaryrefslogtreecommitdiff
path: root/spec/default.mspec
diff options
context:
space:
mode:
Diffstat (limited to 'spec/default.mspec')
-rw-r--r--spec/default.mspec67
1 files changed, 67 insertions, 0 deletions
diff --git a/spec/default.mspec b/spec/default.mspec
new file mode 100644
index 0000000000..8791058f95
--- /dev/null
+++ b/spec/default.mspec
@@ -0,0 +1,67 @@
+# -*- ruby -*-
+$VERBOSE = false
+if (opt = ENV["RUBYOPT"]) and (opt = opt.dup).sub!(/(?:\A|\s)-w(?=\z|\s)/, '')
+ ENV["RUBYOPT"] = opt
+end
+require "./rbconfig" unless defined?(RbConfig)
+load File.dirname(__FILE__) + '/ruby/default.mspec'
+OBJDIR = File.expand_path("spec/ruby/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('ruby', File.dirname(__FILE__))
+ set :flags, %W[
+ -I#{srcdir}/lib
+ #{srcdir}/tool/runruby.rb --archdir=#{Dir.pwd} --extout=#{config['EXTOUT']}
+ --
+ ]
+end
+
+module MSpecScript::JobServer
+ def cores(max = 1)
+ if max > 1 and /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"]
+ cores = 1
+ 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(max - 1)
+ cores = jobtokens.size
+ if cores > 0
+ cores += 1
+ 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
+ rescue Errno::EBADF
+ ensure
+ r&.close
+ w&.close
+ end
+ end
+ super
+ end
+end
+
+class MSpecScript
+ prepend JobServer
+end