Skip to content

Instantly share code, notes, and snippets.

@pxlpnk
Created February 3, 2015 12:50
Show Gist options
  • Save pxlpnk/6b8efbcadd7f54dd13d3 to your computer and use it in GitHub Desktop.
Save pxlpnk/6b8efbcadd7f54dd13d3 to your computer and use it in GitHub Desktop.
Rubinius 2.5.2 install problem
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler/setup'
require './rakelib/configure'
require './rakelib/release'
require './rakelib/build_signature'
require 'rbconfig'
require 'tempfile'
require 'fileutils'
require 'stringio'
require 'date'
require 'digest/md5'
require 'net/http'
require 'redcard'
module Rubinius
BUILD_CONFIG = {}
end
root = File.expand_path File.dirname(__FILE__)
require File.join(root, "kernel", "delta", "options")
class Configure
# Default settings only. All code that may depend on user-selected options
# must run after options are processed.
def initialize(root)
@log = Logger.new "configure.log"
@command_line = ARGV.dup
@log.log "Command line: #{@command_line.join(" ").inspect}"
@features = {}
@defines = []
@config = File.join(root, "config.rb")
# Platform settings
@host = `sh -c ./rakelib/config.guess`.chomp
@cpu = nil
@vendor = nil
@os = nil
@windows = nil
@darwin = nil
@bsd = nil
@linux = nil
@little_endian = false
@sizeof = {}
# Build tools
@cc = nil
@cxx = nil
@make = nil
@rake = nil
@tar = nil
@perl = nil
@gem = nil
# LLVM settings
@llvm_enabled = true
@llvm_path = nil
@llvm_system_name = get_system_name
@llvm_configure = nil
@llvm_version = nil
@llvm_api_version = nil
@llvm_shared = false
@llvm_shared_objs = nil
@llvm_cxxflags = ""
@llvm_ldflags = ""
# System settings
@libc = nil
@x86_32 = false
@x86_64 = false
@fibers = false
@dtrace = false
@dtrace_const = false
@have_lchmod = false
@have_lchown = false
@debug_build = false
@include_dirs = []
@lib_dirs = []
# File system paths
@sourcedir = root
@prefixdir = nil
@bindir = nil
@appdir = nil
@libdir = nil
@encdir = nil
@runtimedir = nil
@kerneldir = nil
@sitedir = nil
@vendordir = nil
@mandir = nil
@gemsdir = nil
@includedir = nil
@stagingdir = nil
@build_prefix = nil
@capi_includedir = "#{@sourcedir}/vm/include/capi"
@runtime_gems_dir = nil
@bootstrap_gems_dir = nil
@vm_release_h = File.join(root, "/vm/gen/release.h")
@preserve_prefix = false
@program_name = "rbx"
@bin_links = ["rbx", "ruby", "rake", "gem", "irb", "rdoc", "ri", "erb"]
@use_bin_links = true
# Gems
#
# Rubinius build tools installed in the runtime dir
@runtime_gems = [
"rubinius-ast",
"rubinius-compiler",
"rubinius-melbourne",
"rubinius-processor",
"rubinius-toolset",
]
# Standard library gems to bootstrap rubygems and Bundler
@bootstrap_gems = [
"ffi2-generators",
"rubysl-etc",
"rubysl-fileutils",
"rubysl-mkmf",
"rubysl-shellwords",
"rubysl-date",
"rubysl-delegate",
"rubysl-digest",
"rubysl-etc",
"rubysl-fcntl",
"rubysl-fileutils",
"rubysl-monitor",
"rubysl-openssl",
"rubysl-optparse",
"rubysl-stringio",
"rubysl-strscan",
"rubysl-tempfile",
"rubysl-thread",
"rubysl-tmpdir",
"rubysl-uri",
"rubysl-yaml",
"rubysl-zlib",
"psych",
]
# List of all gems to pre-install.
@gems_list = File.join(root, "gems_list.txt")
@gem_files = File.readlines(@gems_list).map { |x| x.chomp }
# Default cache directory, can be overwritten by the user.
@gems_cache = File.expand_path "../vendor/cache", __FILE__
# Vendored library settings
@vendored_libdir = File.join(root, "/vendor")
# Essential settings (modify these for creating releases)
@ruby_version = "2.1.0"
@libversion = "2.5"
@patch_version = "2"
@release_date = "2015-01-30"
# Configure settings
@release_build = !git_directory
end
# Set up system commands to run in cmd.exe on Windows. Either Windows
# or MRI on Windows has issues with subprocesses where the invocation
# of the subprocess will return before the subprocess has finished.
# This manifests in configure when uncompressing LLVM source returns
# but attempting to move the directory fails sporadically with an access
# exception. Adding the, essentially no-op, 'sleep 0' resolves this.
def msys_system(cmd)
old_system %[cmd.exe /C "#{cmd} && sleep 0"]
end
def msys_backquote(cmd)
old_backquote %[cmd.exe /C "#{cmd}"]
end
def expand(path)
File.expand_path(path)
end
def expand_install_dir(dir)
dir = expand dir
if !@preserve_prefix and File.directory?(dir) and dir !~ /(rubinius|rbx).*\/?$/
original = dir
dir += "/rubinius/#{@libversion}"
@log.write "The directory #{original} already exists, installing to #{dir}"
end
dir
end
def set_host
/([^-]+)-([^-]+)-(.*)/ =~ @host
@cpu, @vendor, @os = $1, $2, $3
# TODO: For better cross-compiling support, it may be necessary to
# use the feature facility to check for a define in the compiler.
@windows = (@host =~ /mingw|mswin/) != nil
@darwin = (@host =~ /darwin/) != nil
@bsd = (@host =~ /bsd/) != nil
@linux = (@host =~ /linux/) != nil
end
def set_system_commands
# Set up system commands to run in cmd.exe on Windows.
if @windows
alias :old_system :system
alias :old_backquote :`
alias :system :msys_system
alias :` :msys_backquote
end
end
def set_filesystem_paths
@prefixdir = @prefixdir ? expand_install_dir(@prefixdir) : @sourcedir
if @appdir
dir = expand_install_dir @appdir
@libdir = dir + "/library"
@runtimedir = dir + "/runtime"
@kerneldir = dir + "/kernel"
@sitedir = dir + "/site"
@vendordir = dir + "/vendor"
end
@bindir = @prefixdir + "/bin" unless @bindir
@libdir = @prefixdir + "/library" unless @libdir
@runtimedir = @prefixdir + "/runtime" unless @runtimedir
@kerneldir = @prefixdir + "/kernel" unless @kerneldir
@sitedir = @prefixdir + "/site" unless @sitedir
@vendordir = @prefixdir + "/vendor" unless @vendordir
@mandir = @prefixdir + "/man" unless @mandir
@gemsdir = @prefixdir + "/gems" unless @gemsdir
@includedir = @prefixdir + "/vm/include/capi" unless @includedir
@encdir = @libdir + "/encoding/converter"
dirs = [@bindir, @libdir, @runtimedir, @kerneldir, @sitedir, @vendordir,
@mandir, @gemsdir, @includedir, @encdir]
parts = dirs.map { |d| d.split "/" }
i = 0
total = parts[0].size
prefix = []
while i < total
part = parts[0][i]
break unless parts.all? { |p| p[i] == part }
prefix << part
i += 1
end
@prefixdir = prefix.join "/"
size = @prefixdir.size
dirs.each { |d| d.replace d[size..-1] }
unless @prefixdir == @sourcedir
@stagingdir ||= "#{@sourcedir}/staging"
FileUtils.rm_rf @stagingdir
@stagingdir = File.join @stagingdir, @prefixdir if @preserve_prefix
FileUtils.mkdir_p @stagingdir
end
@build_prefix = @stagingdir || @sourcedir
@bootstrap_gems_dir ||= "#{@sourcedir}/bootstrap/gems"
@runtime_gems_dir ||= "#{@build_prefix}#{@runtimedir}/gems"
end
def options
@options = Rubinius::Options.new "Usage: configure [options]", 30
o = @options
o.left_align
o.doc " Configure settings"
o.on "--log-file", "NAME", "Write log to file NAME" do |name|
old_log = @log.path
@log = Logger.new name, false
@log.replace old_log
end
o.on "--make", "NAME", "Use NAME as 'make' during build" do |name|
@make = name
end
o.on "--rake", "NAME", "Use NAME as 'rake' during build" do |name|
@rake = name
end
o.on "--tar", "NAME", "Use NAME as 'tar'" do |name|
@tar = name
end
o.on "--perl", "NAME", "Use NAME as 'perl' during build" do |name|
@perl = name
end
o.on "--gem", "NAME", "Use NAME as 'gem' during build" do |name|
@gem = name
end
o.on "--debug-build", "Disable C++ optimizations and retain debugging symbols" do
@debug_build = true
end
o.on "--release-build", "Build from local files instead of accessing the network" do
@release_build = true
end
o.doc "\n Compiler settings"
o.on "--cc", "COMPILER", "Compiler to use for C code (eg gcc, clang)" do |cc|
@cc = cc
end
o.on "--cxx", "COMPILER", "Compiler to use for C++ code (eg g++, clang++)" do |cxx|
@cxx = cxx
end
o.doc "\n LLVM settings"
o.on "--disable-llvm", "Don't build with LLVM" do
@llvm_enabled = false
end
o.on "--system-name", "NAME", "Name of OS (eg fedora-8, ubuntu-10.04)" do |name|
@llvm_system_name = name
end
o.on "--llvm-path", "PATH", "File system path to the directory containing LLVM" do |dir|
@llvm_path = dir.dup
end
o.on "--llvm-config", "PROGRAM", "File system path to the llvm-config program" do |program|
@llvm_configure = program
end
o.on "--llvm-shared", "Link to shared LLVM library" do
@llvm_shared = true
end
o.doc "\n System settings"
o.on "--with-include-dir", "DIR", "Add DIR to the default include search paths" do |dir|
dir.split(File::PATH_SEPARATOR).each do |d|
@include_dirs << d
end
end
o.on "--with-lib-dir", "DIR", "Add DIR to the default library search paths" do |dir|
dir.split(File::PATH_SEPARATOR).each do |d|
@lib_dirs << d
end
end
o.on "--with-opt-dir", "DIR", "Add DIR/include and DIR/lib to include and library search paths" do |dir|
dir.split(File::PATH_SEPARATOR).each do |d|
@include_dirs << "#{d}/include"
@lib_dirs << "#{d}/lib" << "#{d}/lib64"
end
end
o.on "--libc", "NAME", "Use NAME as the libc for FFI" do |name|
@libc = name
end
o.on "--host", "HOST", "Override guessed platform with HOST specification" do |host|
@log.write "------------------------------------------------------"
@log.write "\nChanging the platform specification can cause Rubinius"
@log.write "to malfunction. The current platform specification is:"
@log.write "\n#{@host}"
@log.write "\n------------------------------------------------------"
@host = host
end
o.doc "\n Program names"
o.on "--program-name", "NAME", "Build Rubinius executable as NAME" do |name|
@program_name = name
end
o.on "--bin-link", "NAME", "Create NAME as binary symlink to program name" do |name|
@bin_links << name
end
o.on "--no-bin-links", "Do not create any symlinks to program name" do
@use_bin_links = false
end
o.doc "\n File system paths for installing Rubinius"
o.on "-P", "--prefix", "PATH", "Install Rubinius in subdirectories of PATH" do |dir|
warn_prefix dir
@prefixdir = dir.dup
end
o.on "-B", "--bindir", "PATH", "Install Rubinius executable in PATH" do |dir|
@bindir = expand dir
end
o.on "-I", "--includedir", "PATH", "Install Rubinius C-API include files in PATH" do |dir|
@includedir = expand dir
end
o.on "-A", "--appdir", "PATH", "Install Ruby runtime and libraries in PATH" do |dir|
@appdir = dir.dup
end
o.on "-L", "--libdir", "PATH", "Install Rubinius shared library in PATH" do |dir|
@libdir = dir.dup
end
o.on "-M", "--mandir", "PATH", "Install man pages in PATH" do |dir|
@mandir = expand dir
end
o.on "-G", "--gemsdir", "PATH", "Install gems in PATH" do |dir|
@gemsdir = expand dir
end
o.on "--gems-cache", "PATH", "Cache Gems in PATH during compilation" do |dir|
@gems_cache = expand dir
end
o.on "--sitedir", "PATH", "Install site-specific Ruby code in PATH" do |dir|
@sitedir = expand dir
end
o.on "--vendordir", "PATH", "Install vendor-specific Ruby code in PATH" do |dir|
@vendordir = expand dir
end
o.on "--preserve-prefix", "Use the configure prefix for staging Rubinius to install" do
@preserve_prefix = true
end
o.on "--stagingdir", "PATH", "Use PATH to build and prepare all files for install" do |dir|
@stagingdir = expand dir
end
o.doc "\n Optional features"
feature "execinfo", true
feature "vendor-zlib", false
feature "alloc-tracking", false
feature "fibers", true
feature "dtrace", false
feature "rpath", true
o.doc "\n Help!"
o.on "--show", "Print the current configuration and exit" do
print_debug
exit 0
end
o.on "-V", "--verbose", "Print additional info" do
@verbose = true
end
o.help
o.doc ""
end
def feature(name, default_value=true)
@features[name] = ConfigurationToggle.new default_value
@options.on "--with-#{name}", "Enable #{name}" do
@features[name].configured = true
end
@options.on "--without-#{name}", "Disable #{name}" do
@features[name].configured = false
end
end
def parse(ary)
@options.parse ary
end
def version
version = "#{@libversion}.#{@patch_version}"
version += ".n#{Time.now.strftime("%j").to_i}" unless @release_date
version
end
def normalize_version(str)
version = str.gsub(/[^\d]/, "")
unless @supported_versions.include? version
failure <<-EOM
Unsupported language version requested: #{version}. Options are #{@supported_versions.join(", ")}
EOM
end
version
end
def md5_checksum(md5_path, full_path)
return Digest::MD5.file(full_path).hexdigest == File.read(md5_path).strip.split(" ").first
end
def download(url, full_path, follows=0)
begin
dir = File.dirname full_path
Dir.mkdir dir unless File.exist? dir
uri = url.kind_of?(URI) ? url : URI(url)
if ENV['http_proxy']
protocol, userinfo, p_host, p_port = URI::split(ENV['http_proxy'])
p_user, p_pass = userinfo.split(/:/) if userinfo
http = Net::HTTP.new(uri.host, uri.port, p_host, p_port, p_user, p_pass)
else
http = Net::HTTP.new(uri.host, uri.port)
end
http.use_ssl = true if uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
http.request(request) do |res|
case res
when Net::HTTPNotFound
@log.write " #{url} not found."
return false
when Net::HTTPMovedPermanently,
Net::HTTPFound,
Net::HTTPSeeOther,
Net::HTTPTemporaryRedirect
if follows > 3
@log.write " ERROR: too many redirects: #{url}"
return false
end
return download URI.parse(res['Location']), full_path, follows + 1
when Net::HTTPClientError
@log.write " ERROR: #{res.inspect}"
return false
end
size = 0
total = res.header['Content-Length'].to_i
@log.write " Downloading #{File.basename(full_path)}..."
File.open full_path, "wb" do |f|
res.read_body do |chunk|
f << chunk
size += chunk.size
print "\r [ %d%% (%d of %d) ]" % [(size * 100) / total, size, total]
end
end
@log.write ": done!"
end
rescue Interrupt
File.unlink full_path if File.exist?(full_path)
raise
rescue StandardError => e
File.unlink full_path if File.exist?(full_path)
@log.write " ERROR: #{e.message}"
return false
end
return true
end
def setup_llvm
unless @llvm_enabled
@log.write "WARNING: LLVM disabled."
return false
end
if setup_config
check_llvm_flags
return true
end
failure "ABORT: unable to set up LLVM"
end
def setup_config
@log.print " Checking for 'llvm-config': "
config = @llvm_configure
if !config
which = ENV['PATH'].split(":").find do |path|
File.exist? File.join(path, "llvm-config")
end
if which
config = File.join(which, "llvm-config")
elsif @darwin
if macports?
config = macports_llvm_config
else
out = `brew list llvm | grep '/llvm-config$'`
config = out.chomp if $?.success?
end
end
end
if config
config_cmd = llvm_config_cmd config
begin
version = `#{config_cmd} --version`.strip
# Ruby 1.8 returns an empty string
failed = true if version.empty?
rescue Errno::ENOENT
# Ruby 1.9 raises this error
failed = true
end
if failed
@log.write "Executing #{config_cmd.inspect} failed"
return false
end
parts = version.sub(/svn$/, "").split(".").map { |i| i.to_i }
api_version = ("%d%02d" % parts[0..1]).to_i
if api_version < 300 or api_version > 305
@log.write "only LLVM 3.0-3.5 is supported"
else
@log.write "found! (version #{version} - api: #{api_version})"
@llvm = :config
@llvm_configure = config_cmd
@llvm_version = version
@llvm_api_version = api_version
if @llvm_shared
setup_config_shared
end
return true
end
else
@log.write "not found"
end
false
end
def setup_config_shared
@log.print " Checking for LLVM shared libs: "
src = <<-EOP
#include <llvm/IR/LLVMContext.h>
using namespace llvm;
int main() { LLVMContext &Context = getGlobalContext(); }
EOP
common_args = `#{@llvm_configure} --cppflags --ldflags`.strip.split(/\s+/)
shared_configs = {
"libLLVM-#{@llvm_version}" => ["-lLLVM-#{@llvm_version}"],
"#{@llvm_configure} --libs" => `#{@llvm_configure} --libs`.strip.split(/\s+/)
}
shared_configs.each do |desc, objs|
status = check_program(false, *(common_args + objs)) do |f|
f.puts src
@log.log src
end
if status == 0
@log.write "found! (using #{desc})"
@llvm_shared_objs = objs
return true
end
end
@log.write "not found"
false
end
def check_llvm_flags
flags = '--ldflags'
if @llvm_api_version >= 305
@llvm_cxxflags << " -std=c++11"
# Starting with LLVM 3.5 the --system-libs option is required in order to
# link against libraries such as zlib. Prior to 3.5 this was handled by
# --ldflags.
flags << ' --system-libs'
end
# Generate the actual flags. For whatever reason llvm-config also includes
# newlines in the output, so lets get rid of those while we're at it.
@llvm_ldflags = `#{@llvm_configure} #{flags}`.strip.gsub("\n", ' ')
end
def env(which)
ENV[which] || ""
end
def default_link_libs
libs = []
unless @host =~ /haiku/
libs << "m"
end
libs
end
def failure(message=nil)
@log.error message if message
STDERR.puts "\nRunning 'configure' failed. Please check configure.log for more details."
exit 1
end
def check_tools
@cc ||= ENV['CC'] || 'gcc'
@cxx ||= ENV['CXX'] || 'g++'
check_tool_version @cc, '-dumpversion', [4, 1]
check_tool_version @cxx, '-dumpversion', [4, 1]
check_tool_version 'bison', '--version', [2, 3]
@make ||= ENV['MAKE'] || 'make'
@rake ||= ENV['RAKE'] || 'rake'
@tar ||= ENV['TAR'] || (@windows ? 'bsdtar' : 'tar')
@perl ||= ENV['PERL'] || 'perl'
@gem ||= ENV['GEM'] || 'gem'
@gcc_major = `#{@cc} -dumpversion`.strip.split(".")[0,2].join(".")
if @host == "i686-pc-linux-gnu" || @host == "x86_64-unknown-linux-gnu"
@llvm_generic_prebuilt = "llvm-#{@llvm_version}-#{@host}-#{@gcc_major}.tar.bz2"
else
@llvm_generic_prebuilt = "llvm-#{@llvm_version}-#{@host}.tar.bz2"
end
@system_cflags = ""
@system_cxxflags = ""
@system_cppflags = ""
@system_ldflags = ""
@user_cflags = ENV['CFLAGS']
@user_cxxflags = ENV['CXXFLAGS']
@user_cppflags = ENV['CPPFLAGS']
@user_ldflags = ENV['LDFLAGS']
setup_platform
end
def setup_platform
@ldsharedxx = "#{@cxx} -shared"
@ldshared = "#{@cc} -shared"
@include_dirs.each do |d|
@system_cflags << "-I#{d} "
end
@lib_dirs.each do |d|
@system_ldflags << "-L#{d} "
end
case RUBY_PLATFORM
when /mswin/i, /mingw/i, /bccwin32/i
# TODO: discovery helpers
#check_heads(%w[windows.h winsock.h], true)
#check_libs(%w[kernel32 rpcrt4 gdi32], true)
unless RUBY_PLATFORM =~ /mingw/
@system_cflags << "-EHs -GR"
end
@system_ldflags << "-lws2_32"
@features["rpath"].configured = false
when /solaris/i
# GNU CHAIN only supported
@ldsharedxx = "#{@cxx} -shared -G -fPIC -lstdc++"
@ldshared = "#{@cc} -shared -G -fPIC"
@system_cflags << "-fPIC -Wno-strict-aliasing"
@system_ldflags << "-lsocket -lnsl -fPIC"
@features["rpath"].configured = false
@make = "gmake"
when /freebsd/i
@ldsharedxx = "#{@cxx} -shared -fPIC"
@ldshared = "#{@cc} -shared -fPIC"
@system_cflags << "-fPIC"
@system_ldflags << "-lcrypt -pthread -rdynamic"
@make = "gmake"
when /openbsd/i
# OpenBSD branch contributed by Guillaume Sellier.
# on Unix we need a g++ link, not gcc. On OpenBSD, linking against
# libstdc++ have to be explicitly done for shared libs
@ldsharedxx = "#{@cxx} -shared -lstdc++ -fPIC"
@ldshared = "#{@cc} -shared -fPIC"
@system_cflags << "-fPIC"
@system_ldflags << "-pthread -rdynamic -Wl,--export-dynamic"
@make = "gmake"
when /netbsd/i
@ldsharedxx = "#{@cxx} -shared -lstdc++ -fPIC"
@ldshared = "#{@cc} -shared -fPIC"
@system_cflags << "-fPIC"
@system_ldflags << "-lcrypt -pthread -rdynamic -Wl,--export-dynamic"
@make = "gmake"
when /darwin/i
# on Unix we need a g++ link, not gcc.
# Ff line contributed by Daniel Harple.
@ldsharedxx = "#{@cxx} -bundle -undefined suppress -flat_namespace"
@ldshared = "#{@cc} -bundle -undefined suppress -flat_namespace"
@system_cflags << "-fPIC -D_DARWIN_USE_64_BIT_INODE"
@features["rpath"].configured = false
when /haiku/i
@system_cflags << "-fPIC"
@system_ldflags << "-ldl -lnetwork"
@features["rpath"].configured = false
when /aix/i
@ldsharedxx = "#{@cxx} -shared -Wl,-G -Wl,-brtl"
@ldshared = "#{@cc} -shared -Wl,-G -Wl,-brtl"
@features["rpath"].configured = false
when /linux/i
@system_cflags << "-fPIC"
@system_ldflags << "-Wl,--export-dynamic -lrt -lcrypt -ldl -lpthread"
else
# on Unix we need a g++ link, not gcc.
@system_cflags << "-fPIC"
@system_ldflags << "-ldl -lpthread"
end
if @features["rpath"].value
@lib_dirs.each do |d|
@system_ldflags << " -Wl,-rpath=#{d}"
end
end
end
def check_program(run=true, *arguments)
begin
basename = "rbx-configure-test"
source = basename + ".cpp"
File.open source, "wb" do |f|
yield f
end
File.open source, "rb" do |f|
@log.log f.read
end
libs = default_link_libs.map { |l| "-l#{l}" }.join(" ")
args = arguments.join(" ")
cmd = "#{@cxx} #{@user_cppflags} #{@user_cflags} #{@user_cxxflags} #{@user_ldflags} -o #{basename} #{source} #{@system_cppflags} #{@system_cflags} #{@system_cxxflags} #{@system_ldflags} #{libs} #{args} >>#{@log.path} 2>&1"
@log.log cmd
system cmd
return $?.exitstatus unless run
unless $?.exitstatus == 0
failure "Compiling configure test program failed."
end
system expand("./#{basename}")
return $?.exitstatus
rescue => e
@log.log "Error in check_program: #{e.class} #{e.message}\n #{e.backtrace.join("\n ")}"
raise e
ensure
FileUtils.rm_r(Dir["#{basename}*"])
end
end
def write_have_defines(f)
f.puts
@defines.each { |d| f.puts "#define #{d.ljust(20)} 1" }
end
def write_have_sizeof_defines(f)
f.puts
@sizeof.keys.sort.each { |k| f.puts "#define HAVE_#{k}".ljust(30) + "1" }
end
def write_sizeof_defines(f)
f.puts
@sizeof.keys.sort.each { |k| f.puts "#define SIZEOF_#{k}".ljust(30) + @sizeof[k].to_s }
end
def sizeof_typename(type)
if type =~ /(\*+)$/
name = "#{type[0...-$1.size]}#{"p" * $1.size}"
else
name = type
end
name.gsub(/\W/, "_").upcase
end
def sizeof(type)
@sizeof[sizeof_typename(type)] or failure("Unknown type: '#{type}'.")
end
def detect_sizeof(type, includes=[])
@log.print "Checking sizeof(#{type}): "
size = check_program do |f|
src = includes.map { |include| "#include <#{include}>" }.join("\n")
src += <<-EOP
#include <stddef.h>
int main() { return sizeof(#{type}); }
EOP
f.puts src
@log.log src
end
@sizeof[sizeof_typename(type)] = size
@log.write "#{size} bytes"
end
def detect_endian
@log.print "Checking platform endianness: "
status = check_program do |f|
src = "int main() { int one = 1; return (*((char*)&one)) == 1 ? 0 : 1; }"
f.puts src
@log.log src
end
@little_endian = (status == 0)
@log.write @little_endian ? "little endian" : "big endian"
end
def detect_tr1
@log.print "Checking for tr1: "
status = check_program(false) do |f|
src = <<-EOP
#include <tr1/unordered_map>
typedef std::tr1::unordered_map<int, void*> X;
int main() { X x; return 0; }
EOP
f.puts src
@log.log src
end
@tr1 = (status == 0)
@log.write @tr1 ? "found" : "not found"
end
def detect_tr1_hash
@log.print "Checking for tr1/hash definition: "
status = check_program(false) do |f|
src = <<-EOP
#include <stdint.h>
#include <tr1/unordered_map>
typedef std::tr1::unordered_map<uint64_t, void*> X;
int main() { X x; return 0; }
EOP
f.puts src
@log.log src
end
@tr1_hash = (status == 0)
@log.write @tr1_hash ? "found" : "not found"
end
def detect_x86
print "Checking for x86_32: "
if sizeof("long") == 4
status = check_program do |f|
src = <<-EOP
int main() {
#if defined(i386) || defined(__i386__) || defined(__i386)
return 1;
#else
return 0;
#endif
}
EOP
f.puts src
@log.log src
end
@x86_32 = (status == 1)
end
puts @x86_32 ? "yes" : "no"
return if @x86_32
print "Checking for x86_64: "
status = check_program do |f|
src = <<-EOP
int main() {
#if defined(__x86_64) || defined(__x86_64__)
return 1;
#else
return 0;
#endif
}
EOP
f.puts src
@log.log src
end
@x86_64 = (status == 1)
puts @x86_64 ? "yes" : "no"
end
def detect_curses
@log.print "Checking curses library: "
src = <<-EOP
#include <curses.h>
#include <term.h>
int main() { return tgetnum(""); }
EOP
["-lcurses", "-lncurses", "-ltermcap"].each do |lib|
status = check_program(false, lib) do |f|
f.puts src
@log.log src
end
if status == 0
@curses = lib
break
end
end
if @curses
@log.write(@curses)
end
end
def detect_build_dirs
["/usr/local", "/opt/local", "/usr/pkg"].each do |dir|
@include_dirs << "#{dir}/include"
@lib_dirs << "#{dir}/lib" << "#{dir}/lib64"
end
@include_dirs = @include_dirs.select {|p| File.directory? p }
@lib_dirs = @lib_dirs.select {|p| File.directory? p }
end
def has_struct_member(struct, member, includes = [])
compile_check "struct #{struct} has member #{member}" do |src|
includes.each do |i|
src.puts "#include <#{i}>"
end
src.puts "int main() { struct #{struct} st; st.#{member}; }"
end
end
def has_global(name, includes=[])
compile_check "global '#{name}'" do |src|
includes.each do |i|
src.puts "#include <#{i}>"
end
src.puts "int main() { #{name}; }"
end
end
def has_header(name)
compile_check "header '#{name}'" do |src|
# Some headers have an implicit dependency on stdio.h. For example,
# readline/readline.h requires it but doesn't actually include it for
# you. Because there could be an infinite amount of headers that require
# stdio.h we'll just always include it.
src.puts "#include <stdio.h>"
src.puts "#include <#{name}>"
src.puts "int main() {return 0;}"
end
end
def has_function(name, includes=[], defines = [])
compile_check "function '#{name}'", defines do |src|
includes.each do |i|
src.puts "#include <#{i}>"
end
src.puts "int main() { void* ptr = (void *) &#{name}; }"
end
end
def has_library(name, function, libraries, includes=[])
@log.print "Checking for library: #{name}: "
args = libraries.map { |l| "-l#{l}" }
status = check_program(true, *args) do |src|
includes.each do |i|
src.puts "#include <#{i}>"
end
src.puts "int main() { void* ptr = (void*)(&#{function}); return 0; }"
end
success = status == 0
@log.write(success ? "found!" : "not found!")
success
end
def has_dtrace
@log.print "Checking for dtrace: "
begin
basename = "rbx-configure-dtrace-test"
source = basename + ".d"
output = basename + ".h"
File.open source, "wb" do |f|
f.write "provider conftest{ probe m__entry(const char*); };"
end
cmd = "dtrace -h -o #{output} -s #{source}"
@log.log cmd
system cmd
@dtrace = $?.exitstatus == 0
@dtrace_const = !!File.read(output).index("const") if @dtrace
@log.write(@dtrace ? "yes" : "no")
@dtrace
ensure
File.delete(*Dir["#{basename}*"])
end
end
def compile_check(logpart, defines = [], &block)
@log.print "Checking for #{logpart}: "
source = StringIO.new
yield source
file = Tempfile.new("rbx-test")
source.rewind
string = source.read
file.puts string
file.close
@log.log string
cmd = "#{@cxx} -S -o - -x c++ #{defines.join(" ")} #{@user_cppflags} #{@user_cxxflags} #{@user_cflags} #{@user_ldflags} #{@system_cppflags} #{@system_cxxflags} #{@system_cflags} #{@system_ldflags} #{file.path} >>#{@log.path} 2>&1"
@log.log cmd
system cmd
status = ($?.exitstatus == 0)
file.unlink
@log.write(status ? "found!" : "not found")
status
end
def enable_features
if @features["vendor-zlib"].value
# Our vendored zlib uses long as the crc_table type
# If we update vendored zlib in the future, we have to
# review this and make sure we update it properly to
# match the newer version which like will have uint32_t
# as the type.
@include_dirs << "#{@vendored_libdir}/zlib"
@lib_dirs << "#{@vendored_libdir}/zlib"
end
end
def detect_features
# Default on *BSD is no execinfo
if RUBY_PLATFORM =~ /bsd/i and @features["execinfo"].configured.nil?
@features["execinfo"].configured = false
end
if @features["execinfo"].value and has_function("backtrace", ["execinfo.h"])
@defines << "HAS_EXECINFO"
end
if @features["alloc-tracking"].value
@defines << "RBX_ALLOC_TRACKING"
end
if @features["fibers"].value
@fibers = true if @x86_32 or @x86_64
end
if @features["dtrace"].value and has_dtrace
@defines << "HAVE_DTRACE"
end
# Default on Windows is vendor-zlib
if @windows and @features["vendor-zlib"].configured.nil?
@features["vendor-zlib"].configured = true
end
@defines << "HAVE_SPT_REUSEARGV" if @linux || @darwin || @bsd
end
def detect_functions
if has_function("clock_gettime", ["time.h"])
@defines << "HAVE_CLOCK_GETTIME"
end
if has_function("nl_langinfo", ["langinfo.h"])
@defines << "HAVE_NL_LANGINFO"
end
if has_function("setproctitle", ["sys/types.h", "unistd.h"])
@defines << "HAVE_SETPROCTITLE"
end
if has_function("posix_fadvise", ["fcntl.h"])
@defines << "HAVE_POSIX_FADVISE"
end
if has_function("strnlen", ["string.h"])
@defines << "HAVE_STRNLEN"
end
if has_function("kqueue", ["sys/types.h", "sys/event.h", "sys/time.h"])
@defines << "HAVE_KQUEUE"
end
if has_function("timerfd_create", ["sys/timerfd.h"])
@defines << "HAVE_TIMERFD"
end
if has_function("inotify_init", ["sys/inotify.h"])
@defines << "HAVE_INOTIFY"
end
# glibc has useless lchmod() so we don't try to use lchmod() on linux
if !@linux and has_function("lchmod", ["sys/stat.h", "unistd.h"])
@have_lchmod = true
end
if has_function("lchown", ["sys/stat.h", "unistd.h"])
@have_lchown = true
end
end
def detect_structures
if has_struct_member("tm", "tm_gmtoff", ["time.h"])
@defines << "HAVE_TM_GMTOFF"
end
if has_struct_member("tm", "tm_zone", ["time.h"])
@defines << "HAVE_TM_ZONE"
end
end
def detect_globals
if has_global("timezone", ["time.h"])
@defines << "HAVE_TIMEZONE"
end
if has_global("tzname", ["time.h"])
@defines << "HAVE_TZNAME"
end
if has_global("daylight", ["time.h"])
@defines << "HAVE_DAYLIGHT"
end
end
def detect_headers
unless @features["vendor-zlib"].value
unless has_header("zlib.h")
failure "zlib.h is required"
end
end
unless has_header("openssl/ssl.h")
failure "openssl/ssl.h is required"
end
if has_header("alloca.h")
@defines << "HAVE_ALLOCA_H"
end
if has_header("string.h")
@defines << "HAVE_STRING_H"
end
if has_header("sys/time.h")
@defines << "HAVE_SYS_TIME_H"
end
if has_header("sys/times.h")
@defines << "HAVE_SYS_TIMES_H"
end
if has_header("sys/types.h")
@defines << "HAVE_SYS_TYPES_H"
end
if has_header("unistd.h")
@defines << "HAVE_UNISTD_H"
end
if has_header("stdarg.h")
@defines << "HAVE_STDARG_H"
end
if has_header("sys/pstat.h")
@defines << "HAVE_SYS_PSTAT_H"
end
if has_header("valgrind/valgrind.h")
@defines << "HAVE_VALGRIND_H"
end
end
def strerror_r_returns_char_pointer
status = check_program(false) do |src|
src.puts "#include <string.h>"
src.puts "int main() { char buf[1024]; static_cast<char*>(strerror_r(42, buf, 1024)); }"
end
status == 0
end
def detect_strerror
@log.print "Checking if function 'strerror_r' returns char*: "
if strerror_r_returns_char_pointer
@defines << "STRERROR_R_CHAR_P"
@log.write "yes"
else
@log.write "no"
end
end
def warn_prefix(dir)
delimiter = "-------------------------%s-----------------------"
if File.file? dir
@log.write delimiter % " ERROR "
@log.write "The specified prefix '#{dir}' is a regular file."
@log.write "Remove the file or specify a different prefix."
@log.write delimiter % "-------"
exit 1
elsif File.directory? dir
@log.write delimiter % " WARNING "
@log.write "The specified prefix '#{dir}' already exists."
@log.write "Installing Rubinius into an existing directory may"
@log.write "overwrite existing unrelated files or cause conflicts"
@log.write "between different versions of Rubinius files."
@log.write delimiter % "---------"
sleep 2
end
end
def process
set_host
set_system_commands
enable_features
detect_build_dirs
setup_llvm
@log.write ""
detect_sizeof("short")
detect_sizeof("int")
detect_sizeof("void*")
detect_sizeof("size_t")
detect_sizeof("long")
detect_sizeof("long long")
detect_sizeof("float")
detect_sizeof("double")
detect_sizeof("off_t", ["unistd.h"])
detect_sizeof("time_t", ["time.h"])
detect_libc_name
detect_endian
detect_tr1
detect_tr1_hash
detect_x86
detect_features
detect_functions
detect_structures
detect_globals
detect_headers
detect_curses
detect_strerror
end
# Checks whether the given config file is a Perl script by checking its first
# line for a Perl hashbang.
def llvm_config_cmd(config)
begin
File.open(config, "r") do |f|
first_line = f.readline
if first_line =~ /^#! ?\/usr(\/local)?\/bin\/(env )?perl/
"#{@perl} #{config}"
else
config
end
end
rescue Errno::ENOENT, ArgumentError
# The file doesn't exist (ENOENT) or it's a binary file (ArgumentError).
config
end
end
def get_system_name
return unless @os =~ /linux/
return unless File.exist? "/etc/issue"
data = IO.readlines("/etc/issue").first
data =~ /([^ ]+)[^\d\.]*([\d\.]*)/
name = $1.downcase
version = $2
if name == "debian" and File.exist? "/etc/debian_version"
version = IO.read("/etc/debian_version").split.first.gsub(/\W/, "-")
end
return "#{name}-#{version}"
end
def check_tool_version(tool_name, opts, version, regexp=/(?=\d)(\d+).(\d+).?(\d+)?/)
@log.print "Checking #{tool_name}:"
output = `#{tool_name} #{opts}`
if $?.exitstatus == 0
v = output.scan(regexp)[0].map { |x| x.to_i }
unless (v <=> version) >= 0
failure " Expected #{tool_name} version >= #{version.join('.')}, found #{v.join('.')}"
end
@log.write " found"
else
failure "#{tool_name} not found."
end
end
def detect_libc_name
return if @libc
@log.print "Checking for libc version: "
case
when @windows
@libc = "msvcrt.dll"
when @darwin
@libc = "libc.dylib"
else
begin
exe = ENV["SHELL"] || "/bin/sh"
ldd_output = `ldd #{exe}`
@libc = ldd_output[/libc\.so\.[0-9]+/]
rescue
# Don't abort if the command is not found
end
unless $?.success? and @libc
failure "libc not found. Use the --libc configure option."
end
end
@log.write "#{@libc} found!"
end
def write_configure_files
@log.write "\nWriting configuration files..."
unless @llvm_enabled
@llvm_configure = ""
end
@bin_links.delete @program_name
config_settings = {
:config_file => @config,
:command_line => @command_line,
:build_make => @make,
:build_rake => @rake,
:build_perl => @perl,
:llvm_enabled => @llvm_enabled,
:llvm_path => @llvm_path,
:llvm_system_name => @llvm_system_name,
:llvm_configure => @llvm_configure,
:llvm_version => @llvm_version,
:llvm_api_version => @llvm_api_version,
:llvm_shared => @llvm_shared,
:llvm_shared_objs => @llvm_shared_objs,
:llvm_cxxflags => @llvm_cxxflags,
:llvm_ldflags => @llvm_ldflags,
:cc => @cc,
:cxx => @cxx,
:ldshared => @ldshared,
:ldsharedxx => @ldsharedxx,
:gcc_major => @gcc_major,
:user_cflags => "#{@user_cflags}",
:user_cxxflags => "#{@user_cxxflags}",
:user_cppflags => "#{@user_cppflags}",
:user_ldflags => "#{@user_ldflags}",
:system_cflags => "#{@system_cflags}",
:system_cxxflags => "#{@system_cxxflags}",
:system_cppflags => "#{@system_cppflags}",
:system_ldflags => "#{@system_ldflags}",
:include_dirs => @include_dirs,
:lib_dirs => @lib_dirs,
:defines => @defines,
:curses => @curses,
:host => @host,
:cpu => @cpu,
:vendor => @vendor,
:os => @os,
:little_endian => @little_endian,
:sizeof_long => sizeof("long"),
:x86_32 => @x86_32,
:x86_64 => @x86_64,
:dtrace => @dtrace,
:dtrace_const => @dtrace_const,
:fibers => @fibers,
:debug_build => @debug_build,
:sourcedir => @sourcedir,
:stagingdir => @stagingdir,
:build_prefix => @build_prefix,
:runtime_gems_dir => @runtime_gems_dir,
:bootstrap_gems_dir => @bootstrap_gems_dir,
:capi_includedir => @capi_includedir,
:build_exe => "#{@build_prefix}#{@bindir}/#{@program_name}",
:prefixdir => @prefixdir,
:bindir => @bindir,
:libdir => @libdir,
:encdir => @encdir,
:runtimedir => @runtimedir,
:kerneldir => @kerneldir,
:sitedir => @sitedir,
:vendordir => @vendordir,
:includedir => @includedir,
:mandir => @mandir,
:gemsdir => @gemsdir,
:gems_cache => @gems_cache,
:gems_list => @gems_list,
:gem_files => @gem_files,
:program_name => @program_name,
:bin_links => @bin_links,
:use_bin_links => @use_bin_links,
:rpath => @features["rpath"].value,
:windows => @windows,
:darwin => @darwin,
:bsd => @bsd,
:linux => @linux,
:vendor_zlib => @features["vendor-zlib"].value,
:vm_release_h => @vm_release_h,
:bootstrap_gems => @bootstrap_gems,
:runtime_gems => @runtime_gems,
:ruby_version => @ruby_version,
:version => version,
:libversion => @libversion,
:patch_version => @patch_version,
:release_date => @release_date || default_release_date,
:revision => build_revision,
}
write_config_rb @config, config_settings
lib_rubinius_dir = "#{@sourcedir}/library/rubinius"
FileUtils.mkdir_p lib_rubinius_dir unless File.directory? lib_rubinius_dir
FileUtils.cp @config, "#{lib_rubinius_dir}/build_config.rb"
# Write the config file used to build the C++ VM.
Dir.mkdir "vm/gen" unless File.directory? "vm/gen"
vm_paths_h = "vm/gen/paths.h"
File.open vm_paths_h, "wb" do |f|
f.puts <<-EOF
#define RBX_PREFIX_PATH "#{@prefixdir}"
#define RBX_BIN_PATH "#{@bindir}"
#define RBX_GEMS_PATH "#{@gemsdir}"
#define RBX_RUNTIME_PATH "#{@runtimedir}"
#define RBX_KERNEL_PATH "#{@kerneldir}"
#define RBX_LIB_PATH "#{@libdir}"
#define RBX_ENC_PATH "#{@encdir}"
#define RBX_HDR_PATH "#{@includedir}"
#define RBX_SITE_PATH "#{@sitedir}"
#define RBX_VENDOR_PATH "#{@vendordir}"
EOF
end
vm_config_h = "vm/gen/config.h"
File.open vm_config_h, "wb" do |f|
f.puts <<-EOC
#define RBX_PROGRAM_NAME "#{@program_name}"
#define RBX_HOST "#{@host}"
#define RBX_CPU "#{@cpu}"
#define RBX_VENDOR "#{@vendor}"
#define RBX_OS "#{@os}"
#define RBX_LIB_VERSION "#{@libversion}"
#define RBX_RUBY_LIB_VERSION #{@libversion.gsub(/\D/, "").to_i}
#define RBX_LDSHARED "#{@ldshared}"
#define RBX_LDSHAREDXX "#{@ldsharedxx}"
#define RBX_SIZEOF_LONG #{sizeof("long")}
#define RBX_LLVM_API_VER #{@llvm_api_version}
#define RBX_LIBC "#{@libc}"
#define RBX_HAVE_LCHMOD #{@have_lchmod}
#define RBX_HAVE_LCHOWN #{@have_lchown}
#define RBX_DEBUG_BUILD #{@debug_build.inspect}
EOC
if @llvm_version
f.puts "#define RBX_LLVM_VERSION #{@llvm_version.inspect}"
end
if @little_endian
f.puts "#define RBX_LITTLE_ENDIAN 1"
end
if @tr1
f.puts "#define RBX_HAVE_TR1 1"
end
if @tr1_hash
f.puts "#define RBX_HAVE_TR1_HASH 1"
end
[:windows, :darwin, :bsd, :linux].each do |platform|
if instance_variable_get(:"@#{platform}")
f.puts "#define RBX_#{platform.to_s.upcase} 1"
end
end
if @fibers
f.puts "#define RBX_FIBER_ENABLED 1"
end
f.puts "#define RBX_DTRACE_CONST #{@dtrace_const ? "const" : ""}"
write_have_defines f
end
# Write the config file for vendor/oniguruma.
File.open "vendor/oniguruma/config.h", "wb" do |f|
f.puts <<-EOC
/* This file is generated by the Rubinius build system. Your edits
* will be lost. See the configure script.
*/
EOC
write_have_defines f
write_have_sizeof_defines f
write_sizeof_defines f
end
# Write release header file.
write_release @vm_release_h, version, @release_date
# Write the rubinius-specific C-API config headers.
vm_capi_header_gen = "#{@capi_includedir}/gen"
FileUtils.mkdir_p vm_capi_header_gen
FileUtils.cp vm_config_h, "#{vm_capi_header_gen}/rbx_config.h"
FileUtils.cp @vm_release_h, "#{vm_capi_header_gen}/rbx_release.h"
# Write the config file used in the C-API.
capi_config_h = "#{@capi_includedir}/ruby/config.h"
FileUtils.mkdir_p File.dirname(capi_config_h)
File.open capi_config_h, "wb" do |f|
f.puts <<-EOC
/* This file is generated by the build system. Your edits
* will be lost. See the configure script.
*/
#ifndef NORETURN
#define NORETURN(x) __attribute__ ((noreturn)) x
#endif
#ifndef UNREACHABLE
#define UNREACHABLE __builtin_unreachable()
#endif
EOC
write_have_defines f
write_have_sizeof_defines f
write_sizeof_defines f
if @windows
f.puts "#define RBX_WINDOWS 1"
end
end
# Create C-API header for vm/test
File.open "vm/test/ruby.h", "w" do |f|
f.puts %[#include "#{@capi_includedir}/ruby.h"]
end
end
def print_debug
puts "\nUsing the following configuration to build"
puts "------------------------------------------"
cat("config.rb")
puts "\nSetting the following defines for the VM"
puts "----------------------------------------"
cat("vm/gen/config.h")
end
def cat(file)
puts IO.read(relative_file(file))
end
def relative_file(name)
File.expand_path("../#{name}", __FILE__)
end
def check_force_clean
unless verify_build_signature
@log.write "\nDetected old configuration settings, forcing a clean build"
system("#{build_ruby} -S #{@rake} clean")
end
end
def fetch_gems
@log.write "\nFetching gems..."
failed = false
Dir.chdir @gems_cache do
@gem_files.each do |gem|
next if File.exist? gem
failed = true unless download "https://rubygems.org/gems/#{gem}", "./#{gem}"
end
end
failure "Unable to download required gems." if failed
end
def verify_gems
@log.write "\nVerifying gems..."
failed = false
@gem_files.each do |gem_name|
unless File.file? "#{@gems_cache}/#{gem_name}"
@log.write "unable to find gem #{gem_name}"
failed = true
end
end
failure "Unable to find required gems." if failed
end
def clean_gems(dir, gems)
unpacked = Dir["#{dir}/*"]
# Remove unpacked gems not specified by these configure settings
unpacked.each do |dir|
d = File.basename dir
unless gems.find { |x| d =~ /^#{x}/ } and
@gem_files.find { |x| d =~ /^#{x[0..-5]}/ }
FileUtils.rm_rf dir
end
end
end
def unpack_gems(source, destination, list)
FileUtils.mkdir_p destination unless File.directory? destination
Dir.chdir destination do
list.each do |name|
gem_name = @gem_files.find { |x| x =~ /^#{name}/ }
failure "Unable to find gem to unpack: #{name}" unless gem_name
unless File.directory? gem_name[0..-5]
system("#{@gem} unpack #{source}/#{gem_name}")
unless $?.exitstatus == 0
failure "Unable to unpack bootstrap gems."
end
end
end
end
end
def setup_gems
@log.write "\nSetting up gems..."
# Remove unpacked gems not specified by these configure settings
clean_gems @runtime_gems_dir, @runtime_gems
clean_gems @bootstrap_gems_dir, @bootstrap_gems
# Unpack gems not found for these configure settings
unpack_gems @gems_cache, @runtime_gems_dir, @runtime_gems
unpack_gems @gems_cache, @bootstrap_gems_dir, @bootstrap_gems
end
# Create directories that don't have to be created by the end user
# themselves.
def create_directories
FileUtils.mkdir_p @gems_cache
end
def run
unless RedCard.check :ruby, :rubinius
failure "Sorry, building Rubinius requires MRI or Rubinius."
end
unless RedCard.check "1.8.7"
@log.write "Ruby version 1.8.7+ is required to build Rubinius."
@log.write "Your version may work but is unsupported."
end
options
parse ARGV
create_directories
check_tools
check_force_clean
set_filesystem_paths
process
if @release_build
verify_gems
else
fetch_gems
end
setup_gems
write_configure_files
write_build_signature
return if @release_config
print_debug if @verbose
if @llvm_source_build
files = prebuilt_files.map { |f| File.basename f, ".tar.bz2" }.join("\n ")
@log.write <<-EOM
------------------------------------------------------------------
Unable to find an existing binary build of LLVM for your platform.
Please notify the Rubinius team at the #rubinius channel on
irc.freenode.net and provide the following system information:
prebuilts:
#{files}
------------------------------------------------------------------
EOM
end
unless @stagingdir
build_msg = <<-EOM
Rubinius (#{build_revision[0, 8]}) has been configured.
Run 'rake' to build and test Rubinius.
EOM
else
build_msg = <<-EOM
Rubinius (#{build_revision[0, 8]}) has been configured for the following paths:
prefix: #{@prefixdir}
bin: #{@prefixdir}#{@bindir}
lib: #{@prefixdir}#{@libdir}
include: #{@prefixdir}#{@includedir}
runtime: #{@prefixdir}#{@runtimedir}
kernel: #{@prefixdir}#{@kerneldir}
site: #{@prefixdir}#{@sitedir}
vendor: #{@prefixdir}#{@vendordir}
man: #{@prefixdir}#{@mandir}
gems: #{@prefixdir}#{@gemsdir}
gems cache: #{@gems_cache}
Run 'rake' to build, test and install Rubinius.
EOM
end
links = (@bin_links + [@program_name]).uniq
@log.write <<-EOM
------------------------------------------------------------------
#{build_msg}
After building, you may add
'#{@prefixdir}#{@bindir}'
to your PATH or run commands directly from that directory.
Available commands are:
#{links.join(", ")}
------------------------------------------------------------------
EOM
end
# Configuration item that has both a default and a configured value
class ConfigurationToggle
attr_reader :default, :configured
def initialize(default_value)
@default = !!default_value
@configured = nil
end
def configured=(value)
@configured = !!value
end
def value
unless @configured.nil?
@configured
else
@default
end
end
end
# Handles user output and logging while running configure.
class Logger
attr_reader :path
# Creates an instance of Logger writing to +file+.
def initialize(file, init=true)
@path = File.expand_path("../#{file}", __FILE__)
if init
File.open(@path, "wb") { }
log "Configuring Rubinius..."
end
end
# Copies the contents of +other+ into this logger's file.
def replace(other)
output do |f|
f.puts File.read(other)
end
end
# Writes +message+ to the logging file but not to the screen.
def log(message, error=false)
output do |f|
stamp = "#{timestamp}#{'*** ERROR' if error}"
if multiline?(message)
f.puts "#{stamp} ---"
f.puts message
f.puts "---"
else
f.puts "#{stamp} #{message}"
end
end
end
# Writes a normal message to STDOUT and logs to the file.
def write(message)
log message
STDOUT.puts message
end
# Writes a normal message to STDOUT with #print and logs to file.
def print(message)
log message
STDOUT.print message
end
# Writes an error message to STDERR and logs to the file with
# error decorations. This should only be used for errors that
# affect configure itself.
def error(message)
log message, true
STDERR.puts message
end
# Yields an IO for writing log messages.
def output
File.open @path, "a" do |f|
yield f
end
end
# Returns a formatted times suitable for logging.
def timestamp
Time.now.strftime "[%Y-%m-%d %H:%M:%S]"
end
# Returns true if the message has more than one line.
def multiline?(message)
message.index("\n") != nil
end
end
# Returns true if the *port* command is in the PATH and identifies
# itself with "MacPorts" when run interactively.
def macports?
`echo quit | port 2>&-`.start_with? 'MacPorts'
end
# Query MacPorts for the path to the latest installed version of
# llvm-config that is within the range of supported LLVM versions.
def macports_llvm_config
supported_versions = (3.0 .. 3.5)
installed_ports = `port installed | egrep -o 'llvm-[^ ]+'`.split
latest_usable_port = installed_ports.sort.select do |fname|
version = fname.match(/-\K.*/)[0].to_f
supported_versions.include? version
end.last
avail_binaries = `port contents #{latest_usable_port} |
fgrep llvm-config`.split
avail_binaries.reject { |fname| fname.include? 'libexec' }.last
end
end
STDOUT.sync = true
Configure.new(root).run
module Rubinius
config = {}
config[:config_file] = "/Users/at/src/private/ruby/rubinius/config.rb"
config[:command_line] = ["--prefix=/Users/at/.rbenv/versions/rbx-2.5.2-git", "--cc=clang", "--cxx=clang++", "--llvm-config=/usr/local/Cellar/llvm/3.5.1/bin/llvm-config"]
config[:build_make] = "make"
config[:build_rake] = "rake"
config[:build_perl] = "perl"
config[:llvm_enabled] = true
config[:llvm_path] = nil
config[:llvm_system_name] = nil
config[:llvm_configure] = "/usr/local/Cellar/llvm/3.5.1/bin/llvm-config"
config[:llvm_version] = "3.5.1"
config[:llvm_api_version] = 305
config[:llvm_shared] = false
config[:llvm_shared_objs] = nil
config[:llvm_cxxflags] = " -std=c++11"
config[:llvm_ldflags] = "-L/usr/local/Cellar/llvm/3.5.1/lib -lz -lpthread -ledit -lcurses -lm"
config[:cc] = "clang"
config[:cxx] = "clang++"
config[:ldshared] = "clang -bundle -undefined suppress -flat_namespace"
config[:ldsharedxx] = "clang++ -bundle -undefined suppress -flat_namespace"
config[:gcc_major] = "4.2"
config[:user_cflags] = ""
config[:user_cxxflags] = ""
config[:user_cppflags] = ""
config[:user_ldflags] = ""
config[:system_cflags] = "-fPIC -D_DARWIN_USE_64_BIT_INODE"
config[:system_cxxflags] = ""
config[:system_cppflags] = ""
config[:system_ldflags] = ""
config[:include_dirs] = ["/usr/local/include"]
config[:lib_dirs] = ["/usr/local/lib"]
config[:defines] = ["HAS_EXECINFO", "HAVE_SPT_REUSEARGV", "HAVE_NL_LANGINFO", "HAVE_STRNLEN", "HAVE_KQUEUE", "HAVE_TM_GMTOFF", "HAVE_TM_ZONE", "HAVE_TIMEZONE", "HAVE_TZNAME", "HAVE_DAYLIGHT", "HAVE_ALLOCA_H", "HAVE_STRING_H", "HAVE_SYS_TIME_H", "HAVE_SYS_TIMES_H", "HAVE_SYS_TYPES_H", "HAVE_UNISTD_H", "HAVE_STDARG_H"]
config[:curses] = "-lcurses"
config[:host] = "x86_64-apple-darwin13.4.0"
config[:cpu] = "x86_64"
config[:vendor] = "apple"
config[:os] = "darwin13.4.0"
config[:little_endian] = true
config[:sizeof_long] = 8
config[:x86_32] = false
config[:x86_64] = true
config[:dtrace] = false
config[:dtrace_const] = false
config[:fibers] = true
config[:debug_build] = false
config[:sourcedir] = "/Users/at/src/private/ruby/rubinius"
config[:stagingdir] = "/Users/at/src/private/ruby/rubinius/staging"
config[:build_prefix] = "/Users/at/src/private/ruby/rubinius/staging"
config[:runtime_gems_dir] = "/Users/at/src/private/ruby/rubinius/staging/runtime/gems"
config[:bootstrap_gems_dir] = "/Users/at/src/private/ruby/rubinius/bootstrap/gems"
config[:capi_includedir] = "/Users/at/src/private/ruby/rubinius/vm/include/capi"
config[:build_exe] = "/Users/at/src/private/ruby/rubinius/staging/bin/rbx"
config[:prefixdir] = "/Users/at/.rbenv/versions/rbx-2.5.2-git"
config[:bindir] = "/bin"
config[:libdir] = "/library"
config[:encdir] = "/library/encoding/converter"
config[:runtimedir] = "/runtime"
config[:kerneldir] = "/kernel"
config[:sitedir] = "/site"
config[:vendordir] = "/vendor"
config[:includedir] = "/vm/include/capi"
config[:mandir] = "/man"
config[:gemsdir] = "/gems"
config[:gems_cache] = "/Users/at/src/private/ruby/rubinius/vendor/cache"
config[:gems_list] = "/Users/at/src/private/ruby/rubinius/gems_list.txt"
config[:gem_files] = ["bundler-1.7.12.gem", "daedalus-core-0.2.0.gem", "ffi2-generators-0.1.1.gem", "json-1.8.2.gem", "minitest-4.7.5.gem", "psych-2.0.10.gem", "racc-1.4.12.gem", "rake-10.4.2.gem", "rb-readline-0.5.2.gem", "rdoc-4.2.0.gem", "redcard-1.1.0.gem", "rubinius-ast-2.3.1.gem", "rubinius-build_tools-2.0.0.gem", "rubinius-compiler-2.3.1.gem", "rubinius-coverage-2.0.3.gem", "rubinius-debugger-2.2.0.gem", "rubinius-developer_tools-2.0.0.gem", "rubinius-melbourne-2.3.1.0.gem", "rubinius-processor-2.3.0.gem", "rubinius-profiler-2.0.1.gem", "rubinius-toolset-2.3.1.gem", "rubysl-2.1.0.gem", "rubysl-abbrev-2.0.4.gem", "rubysl-base64-2.0.0.gem", "rubysl-benchmark-2.0.1.gem", "rubysl-bigdecimal-2.0.2.gem", "rubysl-cgi-2.0.1.gem", "rubysl-cgi-session-2.0.1.gem", "rubysl-cmath-2.0.0.gem", "rubysl-complex-2.0.0.gem", "rubysl-continuation-2.0.0.gem", "rubysl-coverage-2.0.3.gem", "rubysl-csv-2.0.2.gem", "rubysl-curses-2.0.1.gem", "rubysl-date-2.0.9.gem", "rubysl-delegate-2.0.1.gem", "rubysl-digest-2.0.3.gem", "rubysl-drb-2.0.1.gem", "rubysl-e2mmap-2.0.0.gem", "rubysl-english-2.0.0.gem", "rubysl-enumerator-2.0.0.gem", "rubysl-erb-2.0.2.gem", "rubysl-etc-2.0.3.gem", "rubysl-expect-2.0.0.gem", "rubysl-fcntl-2.0.4.gem", "rubysl-fiber-2.0.0.gem", "rubysl-fileutils-2.0.3.gem", "rubysl-find-2.0.1.gem", "rubysl-forwardable-2.0.1.gem", "rubysl-getoptlong-2.0.0.gem", "rubysl-gserver-2.0.0.gem", "rubysl-io-console-2.0.0.gem", "rubysl-io-nonblock-2.0.0.gem", "rubysl-io-wait-2.0.0.gem", "rubysl-ipaddr-2.0.0.gem", "rubysl-irb-2.1.1.gem", "rubysl-logger-2.1.0.gem", "rubysl-mathn-2.0.0.gem", "rubysl-matrix-2.1.0.gem", "rubysl-mkmf-2.0.1.gem", "rubysl-monitor-2.0.0.gem", "rubysl-mutex_m-2.0.0.gem", "rubysl-net-ftp-2.0.1.gem", "rubysl-net-http-2.0.4.gem", "rubysl-net-imap-2.0.1.gem", "rubysl-net-pop-2.0.1.gem", "rubysl-net-protocol-2.0.1.gem", "rubysl-net-smtp-2.0.1.gem", "rubysl-net-telnet-2.0.0.gem", "rubysl-nkf-2.0.1.gem", "rubysl-observer-2.0.0.gem", "rubysl-open-uri-2.0.0.gem", "rubysl-open3-2.0.0.gem", "rubysl-openssl-2.2.1.gem", "rubysl-optparse-2.0.1.gem", "rubysl-ostruct-2.0.4.gem", "rubysl-pathname-2.1.0.gem", "rubysl-prettyprint-2.0.3.gem", "rubysl-prime-2.0.1.gem", "rubysl-profile-2.0.0.gem", "rubysl-profiler-2.0.1.gem", "rubysl-pstore-2.0.0.gem", "rubysl-pty-2.0.3.gem", "rubysl-rational-2.0.1.gem", "rubysl-readline-2.0.2.gem", "rubysl-resolv-2.1.0.gem", "rubysl-rexml-2.0.4.gem", "rubysl-rinda-2.0.1.gem", "rubysl-rss-2.0.0.gem", "rubysl-scanf-2.0.0.gem", "rubysl-securerandom-2.0.0.gem", "rubysl-set-2.0.1.gem", "rubysl-shellwords-2.0.0.gem", "rubysl-singleton-2.0.0.gem", "rubysl-socket-2.0.1.gem", "rubysl-stringio-2.0.0.gem", "rubysl-strscan-2.0.0.gem", "rubysl-sync-2.0.0.gem", "rubysl-syslog-2.1.0.gem", "rubysl-tempfile-2.0.1.gem", "rubysl-test-unit-2.0.3.gem", "rubysl-thread-2.0.2.gem", "rubysl-thwait-2.0.0.gem", "rubysl-time-2.0.3.gem", "rubysl-timeout-2.0.0.gem", "rubysl-tmpdir-2.0.1.gem", "rubysl-tsort-2.0.1.gem", "rubysl-un-2.0.0.gem", "rubysl-uri-2.0.0.gem", "rubysl-weakref-2.0.0.gem", "rubysl-webrick-2.0.0.gem", "rubysl-xmlrpc-2.0.0.gem", "rubysl-yaml-2.1.0.gem", "rubysl-zlib-2.0.1.gem"]
config[:program_name] = "rbx"
config[:bin_links] = ["ruby", "rake", "gem", "irb", "rdoc", "ri", "erb"]
config[:use_bin_links] = true
config[:rpath] = false
config[:windows] = false
config[:darwin] = true
config[:bsd] = false
config[:linux] = false
config[:vendor_zlib] = false
config[:vm_release_h] = "/Users/at/src/private/ruby/rubinius/vm/gen/release.h"
config[:bootstrap_gems] = ["ffi2-generators", "rubysl-etc", "rubysl-fileutils", "rubysl-mkmf", "rubysl-shellwords", "rubysl-date", "rubysl-delegate", "rubysl-digest", "rubysl-etc", "rubysl-fcntl", "rubysl-fileutils", "rubysl-monitor", "rubysl-openssl", "rubysl-optparse", "rubysl-stringio", "rubysl-strscan", "rubysl-tempfile", "rubysl-thread", "rubysl-tmpdir", "rubysl-uri", "rubysl-yaml", "rubysl-zlib", "psych"]
config[:runtime_gems] = ["rubinius-ast", "rubinius-compiler", "rubinius-melbourne", "rubinius-processor", "rubinius-toolset"]
config[:ruby_version] = "2.1.0"
config[:version] = "2.5.2"
config[:libversion] = "2.5"
config[:patch_version] = "2"
config[:release_date] = "2015-01-30"
config[:revision] = "7a5b05b1a9aca87703ceb0bafe00b916b9510285"
if Rubinius.constants.map { |x| x.to_s }.include?("BUILD_CONFIG")
self::BUILD_CONFIG.replace config
else
self::BUILD_CONFIG = config
end
end
/configure --prefix=$HOME/.rbenv/versions/rbx-2.5.2-git --cc=clang --cxx=clang++ --llvm-config=/usr/local/Cellar/llvm/3.5.1/bin/llvm-config
Checking clang: found
Checking clang++: found
Checking bison: found
Checking for 'llvm-config': found! (version 3.5.1 - api: 305)
Checking sizeof(short): 2 bytes
Checking sizeof(int): 4 bytes
Checking sizeof(void*): 8 bytes
Checking sizeof(size_t): 8 bytes
Checking sizeof(long): 8 bytes
Checking sizeof(long long): 8 bytes
Checking sizeof(float): 4 bytes
Checking sizeof(double): 8 bytes
Checking sizeof(off_t): 8 bytes
Checking sizeof(time_t): 8 bytes
Checking for libc version: libc.dylib found!
Checking platform endianness: little endian
Checking for tr1: not found
Checking for tr1/hash definition: not found
Checking for x86_32: no
Checking for x86_64: yes
Checking for function 'backtrace': found!
Checking for function 'clock_gettime': not found
Checking for function 'nl_langinfo': found!
Checking for function 'setproctitle': not found
Checking for function 'posix_fadvise': not found
Checking for function 'strnlen': found!
Checking for function 'kqueue': found!
Checking for function 'timerfd_create': not found
Checking for function 'inotify_init': not found
Checking for function 'lchmod': found!
Checking for function 'lchown': found!
Checking for struct tm has member tm_gmtoff: found!
Checking for struct tm has member tm_zone: found!
Checking for global 'timezone': found!
Checking for global 'tzname': found!
Checking for global 'daylight': found!
Checking for header 'zlib.h': found!
Checking for header 'openssl/ssl.h': found!
Checking for header 'alloca.h': found!
Checking for header 'string.h': found!
Checking for header 'sys/time.h': found!
Checking for header 'sys/times.h': found!
Checking for header 'sys/types.h': found!
Checking for header 'unistd.h': found!
Checking for header 'stdarg.h': found!
Checking for header 'sys/pstat.h': not found
Checking for header 'valgrind/valgrind.h': not found
Checking curses library: -lcurses
Checking if function 'strerror_r' returns char*: no
Fetching gems...
Setting up gems...
Unpacked gem: '/Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1'
Unpacked gem: '/Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1'
Unpacked gem: '/Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-melbourne-2.3.1.0'
Unpacked gem: '/Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-processor-2.3.0'
Unpacked gem: '/Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-toolset-2.3.1'
Writing configuration files...
------------------------------------------------------------------
Rubinius (7a5b05b1) has been configured for the following paths:
prefix: /Users/at/.rbenv/versions/rbx-2.5.2-git
bin: /Users/at/.rbenv/versions/rbx-2.5.2-git/bin
lib: /Users/at/.rbenv/versions/rbx-2.5.2-git/library
include: /Users/at/.rbenv/versions/rbx-2.5.2-git/vm/include/capi
runtime: /Users/at/.rbenv/versions/rbx-2.5.2-git/runtime
kernel: /Users/at/.rbenv/versions/rbx-2.5.2-git/kernel
site: /Users/at/.rbenv/versions/rbx-2.5.2-git/site
vendor: /Users/at/.rbenv/versions/rbx-2.5.2-git/vendor
man: /Users/at/.rbenv/versions/rbx-2.5.2-git/man
gems: /Users/at/.rbenv/versions/rbx-2.5.2-git/gems
gems cache: /Users/at/src/private/ruby/rubinius/vendor/cache
Run 'rake' to build, test and install Rubinius.
After building, you may add
'/Users/at/.rbenv/versions/rbx-2.5.2-git/bin'
to your PATH or run commands directly from that directory.
Available commands are:
ruby, rake, gem, irb, rdoc, ri, erb, rbx
------------------------------------------------------------------
$rake install
GEN vm/gen/config_variables.h
/Users/at/.rbenv/versions/1.9.3-p545/bin/ruby vm/codegen/config_vars.rb vm/gen/config_variables.h
/Users/at/.rbenv/versions/1.9.3-p545/bin/ruby vm/codegen/encoding_extract.rb /Users/at/src/private/ruby/rubinius/vendor/oniguruma vm/gen/encoding_database.cpp
mkdir -p /Users/at/src/private/ruby/rubinius/staging//library/encoding/converter
/Users/at/.rbenv/versions/1.9.3-p545/bin/ruby vm/codegen/transcoders_extract.rb /Users/at/src/private/ruby/rubinius/vendor/oniguruma/enc/trans vm/gen/transcoder_database.cpp
/Users/at/.rbenv/versions/1.9.3-p545/bin/ruby vm/codegen/field_extract.rb vm/builtin/basic_object.hpp vm/builtin/object.hpp vm/builtin/integer.hpp vm/builtin/fixnum.hpp vm/builtin/array.hpp vm/builtin/bignum.hpp vm/builtin/executable.hpp vm/builtin/access_variable.hpp vm/builtin/alias.hpp vm/builtin/block_environment.hpp vm/builtin/block_as_method.hpp vm/builtin/byte_array.hpp vm/builtin/io.hpp vm/builtin/channel.hpp vm/builtin/module.hpp vm/builtin/constant_table.hpp vm/builtin/class.hpp vm/builtin/compiled_code.hpp vm/builtin/data.hpp vm/builtin/dir.hpp vm/builtin/exception.hpp vm/builtin/float.hpp vm/builtin/fsevent.hpp vm/builtin/immediates.hpp vm/builtin/iseq.hpp vm/builtin/list.hpp vm/builtin/logger.hpp vm/builtin/lookup_table.hpp vm/builtin/ffi_pointer.hpp vm/builtin/method_table.hpp vm/builtin/native_function.hpp vm/builtin/packed_object.hpp vm/builtin/randomizer.hpp vm/builtin/regexp.hpp vm/builtin/constant_scope.hpp vm/builtin/encoding.hpp vm/builtin/string.hpp vm/builtin/symbol.hpp vm/builtin/thread.hpp vm/builtin/tuple.hpp vm/builtin/compact_lookup_table.hpp vm/builtin/time.hpp vm/builtin/stat.hpp vm/builtin/native_method.hpp vm/builtin/system.hpp vm/builtin/autoload.hpp vm/builtin/proc.hpp vm/builtin/variable_scope.hpp vm/builtin/location.hpp vm/builtin/constant_cache.hpp vm/builtin/call_site.hpp vm/builtin/mono_inline_cache.hpp vm/builtin/poly_inline_cache.hpp vm/builtin/call_custom_cache.hpp vm/builtin/respond_to_cache.hpp vm/builtin/weakref.hpp vm/builtin/fiber.hpp vm/builtin/thunk.hpp vm/builtin/call_unit.hpp vm/builtin/call_unit_adapter.hpp vm/builtin/atomic.hpp vm/builtin/character.hpp vm/builtin/thread_state.hpp vm/builtin/jit.hpp
GEN vm/gen/instruction_names.cpp
GEN vm/gen/instruction_names.hpp
GEN vm/gen/instruction_sizes.hpp
GEN vm/gen/instruction_prototypes.hpp
GEN vm/gen/instruction_defines.hpp
GEN vm/gen/instruction_locations.hpp
GEN vm/gen/instruction_implementations.hpp
GEN vm/gen/instruction_visitors.hpp
GEN vm/gen/instruction_effects.hpp
1: CC regcomp.c
1: CC regenc.c
1: CC regerror.c
1: CC regexec.c
1: CC regparse.c
regparse.c:1168:1: warning: unused function 'node_new_cclass_by_codepoint_range' [-Wunused-function]
node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
^
1 warning generated.
1: CC regsyntax.c
1: CC regtrav.c
1: CC regversion.c
1: CC st.c
1: CC transcoder.c
transcoder.c:1373:1: warning: unused function 'more_output_buffer' [-Wunused-function]
more_output_buffer(
^
1 warning generated.
1: CC enc/ascii.c
1: CC enc/big5.c
1: CC enc/cp949.c
1: CC enc/emacs_mule.c
1: CC enc/euc_jp.c
1: CC enc/euc_kr.c
1: CC enc/euc_tw.c
1: CC enc/gb18030.c
1: CC enc/gbk.c
1: CC enc/iso_8859_1.c
1: CC enc/iso_8859_10.c
1: CC enc/iso_8859_11.c
1: CC enc/iso_8859_13.c
1: CC enc/iso_8859_14.c
1: CC enc/iso_8859_15.c
1: CC enc/iso_8859_16.c
1: CC enc/iso_8859_2.c
1: CC enc/iso_8859_3.c
1: CC enc/iso_8859_4.c
1: CC enc/iso_8859_5.c
1: CC enc/iso_8859_6.c
1: CC enc/iso_8859_7.c
1: CC enc/iso_8859_8.c
1: CC enc/iso_8859_9.c
1: CC enc/koi8_r.c
1: CC enc/koi8_u.c
1: CC enc/mktable.c
1: CC enc/shift_jis.c
1: CC enc/unicode.c
1: CC enc/us_ascii.c
1: CC enc/utf_16be.c
enc/utf_16be.c:36:18: warning: unused variable 'EncLen_UTF16' [-Wunused-const-variable]
static const int EncLen_UTF16[] = {
^
1 warning generated.
1: CC enc/utf_16le.c
enc/utf_16le.c:36:18: warning: unused variable 'EncLen_UTF16' [-Wunused-const-variable]
static const int EncLen_UTF16[] = {
^
1 warning generated.
1: CC enc/utf_32be.c
1: CC enc/utf_32le.c
1: CC enc/utf_8.c
1: CC enc/windows_1251.c
1: CC enc/windows_31j.c
1: AR ./libonig.a
ar: creating archive ./libonig.a
a - ./artifacts/regcomp.c.o
a - ./artifacts/regenc.c.o
a - ./artifacts/regerror.c.o
a - ./artifacts/regexec.c.o
a - ./artifacts/regparse.c.o
a - ./artifacts/regsyntax.c.o
a - ./artifacts/regtrav.c.o
a - ./artifacts/regversion.c.o
a - ./artifacts/st.c.o
a - ./artifacts/transcoder.c.o
a - enc/artifacts/ascii.c.o
a - enc/artifacts/big5.c.o
a - enc/artifacts/cp949.c.o
a - enc/artifacts/emacs_mule.c.o
a - enc/artifacts/euc_jp.c.o
a - enc/artifacts/euc_kr.c.o
a - enc/artifacts/euc_tw.c.o
a - enc/artifacts/gb18030.c.o
a - enc/artifacts/gbk.c.o
a - enc/artifacts/iso_8859_1.c.o
a - enc/artifacts/iso_8859_10.c.o
a - enc/artifacts/iso_8859_11.c.o
a - enc/artifacts/iso_8859_13.c.o
a - enc/artifacts/iso_8859_14.c.o
a - enc/artifacts/iso_8859_15.c.o
a - enc/artifacts/iso_8859_16.c.o
a - enc/artifacts/iso_8859_2.c.o
a - enc/artifacts/iso_8859_3.c.o
a - enc/artifacts/iso_8859_4.c.o
a - enc/artifacts/iso_8859_5.c.o
a - enc/artifacts/iso_8859_6.c.o
a - enc/artifacts/iso_8859_7.c.o
a - enc/artifacts/iso_8859_8.c.o
a - enc/artifacts/iso_8859_9.c.o
a - enc/artifacts/koi8_r.c.o
a - enc/artifacts/koi8_u.c.o
a - enc/artifacts/mktable.c.o
a - enc/artifacts/shift_jis.c.o
a - enc/artifacts/unicode.c.o
a - enc/artifacts/us_ascii.c.o
a - enc/artifacts/utf_16be.c.o
a - enc/artifacts/utf_16le.c.o
a - enc/artifacts/utf_32be.c.o
a - enc/artifacts/utf_32le.c.o
a - enc/artifacts/utf_8.c.o
a - enc/artifacts/windows_1251.c.o
a - enc/artifacts/windows_31j.c.o
1: CC enc/trans/big5.c
1: LDSHARED enc/trans/big5.bundle
1: CC enc/trans/chinese.c
1: LDSHARED enc/trans/chinese.bundle
1: CC enc/trans/emoji.c
1: LDSHARED enc/trans/emoji.bundle
1: CC enc/trans/emoji_iso2022_kddi.c
1: LDSHARED enc/trans/emoji_iso2022_kddi.bundle
1: CC enc/trans/emoji_sjis_docomo.c
1: LDSHARED enc/trans/emoji_sjis_docomo.bundle
1: CC enc/trans/emoji_sjis_kddi.c
1: LDSHARED enc/trans/emoji_sjis_kddi.bundle
1: CC enc/trans/emoji_sjis_softbank.c
1: LDSHARED enc/trans/emoji_sjis_softbank.bundle
1: CC enc/trans/escape.c
1: LDSHARED enc/trans/escape.bundle
1: CC enc/trans/gb18030.c
1: LDSHARED enc/trans/gb18030.bundle
1: CC enc/trans/gbk.c
1: LDSHARED enc/trans/gbk.bundle
1: CC enc/trans/iso2022.c
1: LDSHARED enc/trans/iso2022.bundle
1: CC enc/trans/japanese.c
1: LDSHARED enc/trans/japanese.bundle
1: CC enc/trans/japanese_euc.c
1: LDSHARED enc/trans/japanese_euc.bundle
1: CC enc/trans/japanese_sjis.c
1: LDSHARED enc/trans/japanese_sjis.bundle
1: CC enc/trans/korean.c
1: LDSHARED enc/trans/korean.bundle
1: CC enc/trans/newline.c
1: LDSHARED enc/trans/newline.bundle
1: CC enc/trans/single_byte.c
1: LDSHARED enc/trans/single_byte.bundle
1: CC enc/trans/utf8_mac.c
1: LDSHARED enc/trans/utf8_mac.bundle
1: CC enc/trans/utf_16_32.c
1: LDSHARED enc/trans/utf_16_32.bundle
Running 198 tasks using 4 parallel threads
2: CXX vm/arguments.cpp3: CXX vm/auxiliary_threads.cpp
4: CXX vm/builtin/access_variable.cpp
5: CXX vm/accessor_primitives.cpp
2: CXX vm/builtin/alias.cpp
4: CXX vm/builtin/array.cpp
3: CXX vm/builtin/atomic.cpp
2: CXX vm/builtin/autoload.cpp
3: CXX vm/builtin/basic_object.cpp
4: CXX vm/builtin/bignum.cpp
2: CXX vm/builtin/block_as_method.cpp
3: CXX vm/builtin/block_environment.cpp
4: CXX vm/builtin/byte_array.cpp
5: CXX vm/builtin/call_custom_cache.cpp
2: CXX vm/builtin/call_site.cpp
4: CXX vm/builtin/call_unit.cpp
5: CXX vm/builtin/call_unit_adapter.cpp
3: CXX vm/builtin/channel.cpp
2: CXX vm/builtin/character.cpp
4: CXX vm/builtin/class.cpp
5: CXX vm/builtin/compact_lookup_table.cpp
3: CXX vm/builtin/compiled_code.cpp
2: CXX vm/builtin/constant_cache.cpp
4: CXX vm/builtin/constant_scope.cpp
5: CXX vm/builtin/constant_table.cpp
2: CXX vm/builtin/data.cpp
4: CXX vm/builtin/dir.cpp
5: CXX vm/builtin/encoding.cpp
3: CXX vm/builtin/exception.cpp
2: CXX vm/builtin/executable.cpp
4: CXX vm/builtin/ffi_pointer.cpp
2: CXX vm/builtin/fiber.cpp
5: CXX vm/builtin/find_object.cpp
3: CXX vm/builtin/fixnum.cpp
4: CXX vm/builtin/float.cpp
2: CXX vm/builtin/fsevent.cpp
3: CXX vm/builtin/heap_dump.cpp
5: CXX vm/builtin/immediates.cpp
4: CXX vm/builtin/integer.cpp
2: CXX vm/builtin/io.cpp
5: CXX vm/builtin/iseq.cpp
3: CXX vm/builtin/jit.cpp
4: CXX vm/builtin/list.cpp
5: CXX vm/builtin/location.cpp
4: CXX vm/builtin/logger.cpp
2: CXX vm/builtin/lookup_table.cpp
5: CXX vm/builtin/method_table.cpp
3: CXX vm/builtin/module.cpp
4: CXX vm/builtin/mono_inline_cache.cpp
2: CXX vm/builtin/native_function.cpp
5: CXX vm/builtin/native_method.cpp
3: CXX vm/builtin/object.cpp
4: CXX vm/builtin/pack.cpp
2: CXX vm/builtin/packed_object.cpp
5: CXX vm/builtin/poly_inline_cache.cpp
3: CXX vm/builtin/proc.cpp
2: CXX vm/builtin/randomizer.cpp
4: CXX vm/builtin/regexp.cpp
5: CXX vm/builtin/respond_to_cache.cpp
3: CXX vm/builtin/stat.cpp
2: CXX vm/builtin/string.cpp
5: CXX vm/builtin/symbol.cpp
3: CXX vm/builtin/system.cpp
4: CXX vm/builtin/thread.cpp
2: CXX vm/builtin/thread_state.cpp
5: CXX vm/builtin/thunk.cpp
4: CXX vm/builtin/time.cpp
2: CXX vm/builtin/tuple.cpp
5: CXX vm/builtin/unpack.cpp
4: CXX vm/builtin/variable_scope.cpp
3: CXX vm/builtin/weakref.cpp
2: CXX vm/bytecode_verification.cpp
5: CXX vm/call_frame.cpp
4: CXX vm/capi/array.cpp
3: CXX vm/capi/bignum.cpp
2: CXX vm/capi/capi.cpp
5: CXX vm/capi/class.cpp
4: CXX vm/capi/complex.cpp
3: CXX vm/capi/data.cpp
2: CXX vm/capi/encoding.cpp
4: CXX vm/capi/enumerator.cpp
3: CXX vm/capi/exception.cpp
5: CXX vm/capi/file.cpp
4: CXX vm/capi/fixnum.cpp
2: CXX vm/capi/float.cpp
3: CXX vm/capi/gc.cpp
5: CXX vm/capi/globals.cpp
4: CXX vm/capi/handle.cpp
2: CXX vm/capi/handles.cpp
3: CXX vm/capi/hash.cpp
5: CXX vm/capi/integer.cpp
4: CXX vm/capi/io.cpp
3: CXX vm/capi/kernel.cpp
2: CXX vm/capi/marshal.cpp
5: CXX vm/capi/module.cpp
2: CXX vm/capi/mutex.cpp
4: CXX vm/capi/numeric.cpp
3: CXX vm/capi/object.cpp
5: CXX vm/capi/proc.cpp
2: CXX vm/capi/range.cpp
4: CXX vm/capi/rational.cpp
3: CXX vm/capi/regexp.cpp
2: CXX vm/capi/string.cpp
5: CXX vm/capi/struct.cpp
4: CXX vm/capi/symbol.cpp
3: CXX vm/capi/thread.cpp
5: CXX vm/capi/time.cpp
2: CXX vm/capi/util.cpp
4: CXX vm/compiled_file.cpp
3: CXX vm/config_parser.cpp
5: CXX vm/console.cpp
2: CXX vm/dispatch.cpp
4: CXX vm/drivers/cli.cpp
3: CXX vm/environment.cpp
5: CXX vm/exception.cpp
2: CXX vm/exception_point.cpp
4: CXX vm/ffi.cpp
5: CXX vm/ffi_util.cpp
5: CXX vm/fiber_data.cpp
2: CXX vm/fiber_stack.cpp
4: CXX vm/gc/baker.cpp
3: CXX vm/gc/code_manager.cpp
5: CXX vm/gc/debug.cpp
2: CXX vm/gc/finalize.cpp
3: CXX vm/gc/gc.cpp
5: CXX vm/gc/heap.cpp
4: CXX vm/gc/immix.cpp
2: CXX vm/gc/immix_marker.cpp
5: CXX vm/gc/inflated_headers.cpp
3: CXX vm/gc/managed.cpp
2: CXX vm/gc/mark_sweep.cpp
5: CXX vm/gc/object_mark.cpp
4: CXX vm/gc/root.cpp
3: CXX vm/gc/walker.cpp
5: CXX vm/gc/write_barrier.cpp
4: CXX vm/global_cache.cpp
2: CXX vm/helpers.cpp
3: CXX vm/instructions.cpp
5: CXX vm/instruments/rbxti.cpp
4: CXX vm/instruments/tooling.cpp
2: CXX vm/invoke_primitives.cpp
5: CXX vm/jit_primitives.cpp
4: CXX vm/linkedlist.cpp
4: CXX vm/llvm/autotypes.cpp
4: CXX vm/llvm/detection.cpp
2: CXX vm/llvm/disassembler.cpp
4: CXX vm/llvm/inline.cpp
5: CXX vm/llvm/inline_block.cpp
2: CXX vm/llvm/inline_primitive.cpp
5: CXX vm/llvm/jit_block.cpp
4: CXX vm/llvm/jit_builder.cpp
3: CXX vm/llvm/jit_compiler.cpp
5: CXX vm/llvm/jit_context.cpp
2: CXX vm/llvm/jit_inline_block.cpp
3: CXX vm/llvm/jit_inline_method.cpp
5: CXX vm/llvm/jit_memory_manager.cpp
2: CXX vm/llvm/jit_method.cpp
5: CXX vm/llvm/jit_runtime.cpp
3: CXX vm/llvm/jit_util.cpp
4: CXX vm/llvm/method_info.cpp
5: CXX vm/llvm/passes.cpp
2: CXX vm/llvm/state.cpp
3: CXX vm/llvm/types.cpp
4: CXX vm/lock.cpp
5: CXX vm/machine_code.cpp
4: CXX vm/marshal.cpp
3: CXX vm/method_primitives.cpp
2: CXX vm/metrics.cpp
4: CC vm/missing/crypt.c
4: CC vm/missing/setproctitle.c
4: CXX vm/missing/string.cpp
4: CXX vm/object_memory.cpp
5: CXX vm/missing/windows.cpp
5: CXX vm/ontology.cpp
5: CXX vm/oop.cpp
2: CXX vm/park.cpp
4: CXX vm/shared_state.cpp
5: CXX vm/signal.cpp
2: CXX vm/stack_variables.cpp
2: CXX vm/state.cpp
5: CXX vm/symbol_table.cpp
2: CXX vm/type_info.cpp
4: CXX vm/unwind_info.cpp
5: CXX vm/util/file.cpp
5: CXX vm/util/logger.cpp
4: CXX vm/util/murmur_hash3.cpp
4: CC vm/util/random.c
4: CC vm/util/sha1.c
4: CC vm/util/siphash.c
4: CXX vm/util/spinlock.cpp
4: CC vm/util/strftime.c
5: CC vm/util/time64.c
5: CXX vm/util/timer.cpp
4: CC vm/util/timing.c
4: CC vm/util/utf8.c
3: CC vm/util/vsnprintf.c
4: CXX vm/vm.cpp
5: CXX vm/vm_thread_state.cpp
Build time: 61.591435 seconds
1: LD vm/vm
ld: warning: could not create compact unwind for _ffi_call_unix64: does not use RBP or RSP based frame
GEN runtime/signature
RBC kernel/bootstrap/basic_object.rb
RBC kernel/bootstrap/logger.rb
RBC kernel/bootstrap/alias.rb
RBC kernel/bootstrap/mirror.rb
RBC kernel/bootstrap/array_mirror.rb
RBC kernel/bootstrap/array.rb
RBC kernel/bootstrap/atomic.rb
RBC kernel/bootstrap/bignum.rb
RBC kernel/bootstrap/block_environment.rb
RBC kernel/bootstrap/byte_array.rb
RBC kernel/bootstrap/call_site.rb
RBC kernel/bootstrap/call_custom_cache.rb
RBC kernel/bootstrap/channel.rb
RBC kernel/bootstrap/character.rb
RBC kernel/bootstrap/class.rb
RBC kernel/bootstrap/compact_lookup_table.rb
RBC kernel/bootstrap/compiled_code.rb
RBC kernel/bootstrap/configuration.rb
RBC kernel/bootstrap/constant_cache.rb
RBC kernel/bootstrap/constant_scope.rb
RBC kernel/bootstrap/constant_table.rb
RBC kernel/bootstrap/dir.rb
RBC kernel/bootstrap/encoding.rb
RBC kernel/bootstrap/exception.rb
RBC kernel/bootstrap/executable.rb
RBC kernel/bootstrap/false.rb
RBC kernel/bootstrap/fixnum.rb
RBC kernel/bootstrap/gc.rb
RBC kernel/bootstrap/io.rb
RBC kernel/bootstrap/iseq.rb
RBC kernel/bootstrap/jit.rb
RBC kernel/bootstrap/kernel.rb
RBC kernel/bootstrap/lookup_table.rb
RBC kernel/bootstrap/method_table.rb
RBC kernel/bootstrap/mono_inline_cache.rb
RBC kernel/bootstrap/nil.rb
RBC kernel/bootstrap/proc.rb
RBC kernel/bootstrap/process.rb
RBC kernel/bootstrap/poly_inline_cache.rb
RBC kernel/bootstrap/regexp.rb
RBC kernel/bootstrap/respond_to_cache.rb
RBC kernel/bootstrap/rubinius.rb
RBC kernel/bootstrap/stat.rb
RBC kernel/bootstrap/string.rb
RBC kernel/bootstrap/symbol.rb
RBC kernel/bootstrap/thread.rb
RBC kernel/bootstrap/thunk.rb
RBC kernel/bootstrap/time.rb
RBC kernel/bootstrap/true.rb
RBC kernel/bootstrap/tuple.rb
RBC kernel/bootstrap/type.rb
RBC kernel/bootstrap/variable_scope.rb
RBC kernel/bootstrap/vm.rb
RBC kernel/bootstrap/weakref.rb
RBC kernel/platform/ffi.rb
RBC kernel/platform/enum.rb
RBC kernel/platform/library.rb
RBC kernel/platform/pointer_accessors.rb
RBC kernel/platform/pointer.rb
RBC kernel/platform/env.rb
RBC kernel/platform/file.rb
RBC kernel/platform/math.rb
RBC kernel/platform/posix.rb
RBC kernel/platform/struct.rb
RBC kernel/platform/union.rb
RBC kernel/common/basic_object.rb
RBC kernel/common/string_mirror.rb
RBC kernel/common/class.rb
RBC kernel/common/autoload.rb
RBC kernel/common/module.rb
RBC kernel/common/binding.rb
RBC kernel/common/proc.rb
RBC kernel/common/enumerable.rb
RBC kernel/common/enumerator.rb
RBC kernel/common/argf.rb
RBC kernel/common/tuple.rb
RBC kernel/common/exception.rb
RBC kernel/common/undefined.rb
RBC kernel/common/type.rb
RBC kernel/common/hash.rb
RBC kernel/common/hash_hamt.rb
RBC kernel/common/array.rb
RBC kernel/common/kernel.rb
RBC kernel/common/identity_map.rb
RBC kernel/common/loaded_features.rb
RBC kernel/common/global.rb
RBC kernel/common/backtrace.rb
RBC kernel/common/comparable.rb
RBC kernel/common/numeric.rb
RBC kernel/common/ctype.rb
RBC kernel/common/integer.rb
RBC kernel/common/bignum.rb
RBC kernel/common/block_environment.rb
RBC kernel/common/byte_array.rb
RBC kernel/common/channel.rb
RBC kernel/common/executable.rb
RBC kernel/common/constant_scope.rb
RBC kernel/common/hook.rb
RBC kernel/common/code_loader.rb
RBC kernel/common/compiled_code.rb
RBC kernel/common/continuation.rb
RBC kernel/common/delegated_method.rb
RBC kernel/common/fixnum.rb
RBC kernel/common/lru_cache.rb
RBC kernel/common/encoding.rb
RBC kernel/common/env.rb
RBC kernel/common/errno.rb
RBC kernel/common/eval.rb
RBC kernel/common/false.rb
RBC kernel/common/fiber.rb
RBC kernel/common/io.rb
RBC kernel/common/file.rb
RBC kernel/common/dir.rb
RBC kernel/common/dir_glob.rb
RBC kernel/common/file_test.rb
RBC kernel/common/stat.rb
RBC kernel/common/float.rb
RBC kernel/common/immediate.rb
RBC kernel/common/location.rb
RBC kernel/common/lookup_table.rb
RBC kernel/common/main.rb
RBC kernel/common/marshal.rb
RBC kernel/common/math.rb
RBC kernel/common/method.rb
RBC kernel/common/method_equality.rb
RBC kernel/common/method_table.rb
RBC kernel/common/missing_method.rb
RBC kernel/common/native_method.rb
RBC kernel/common/nil.rb
RBC kernel/common/object_space.rb
RBC kernel/common/string.rb
RBC kernel/common/range.rb
RBC kernel/common/struct.rb
RBC kernel/common/process.rb
RBC kernel/common/process_mirror.rb
RBC kernel/common/random.rb
RBC kernel/common/regexp.rb
RBC kernel/common/signal.rb
RBC kernel/common/splitter.rb
RBC kernel/common/sprinter.rb
RBC kernel/common/symbol.rb
RBC kernel/common/mutex.rb
RBC kernel/common/thread.rb
RBC kernel/common/thread_group.rb
RBC kernel/common/throw_catch.rb
RBC kernel/common/time.rb
RBC kernel/common/true.rb
RBC kernel/common/variable_scope.rb
RBC kernel/common/capi.rb
RBC kernel/common/rational.rb
RBC kernel/common/rationalizer.rb
RBC kernel/common/complex.rb
RBC kernel/common/complexifier.rb
RBC kernel/common/gc.rb
RBC kernel/delta/ctype.rb
RBC kernel/delta/exception.rb
RBC kernel/delta/file.rb
RBC kernel/delta/rubinius.rb
RBC kernel/delta/runtime.rb
RBC kernel/delta/module.rb
RBC kernel/delta/class.rb
RBC kernel/delta/file_test.rb
RBC kernel/delta/kernel.rb
RBC kernel/delta/math.rb
RBC kernel/delta/options.rb
RBC kernel/delta/stats.rb
RBC kernel/delta/signal.rb
RBC kernel/delta/struct.rb
RBC kernel/delta/thread.rb
RBC kernel/delta/code_loader.rb
RBC kernel/delta/fsevent.rb
RBC kernel/delta/console.rb
RBC kernel/delta/ffi.rb
RBC kernel/delta/ruby_constants.rb
RBC kernel/delta/pack.rb
RBC kernel/delta/metrics.rb
RBC kernel/signature.rb
RBC kernel/alpha.rb
RBC kernel/loader.rb
RBC kernel/delta/converter_paths.rb
RBC library/rbconfig.rb
RBC library/rubinius/build_config.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/constants.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/control_flow.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/data.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/definitions.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/encoding.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/exceptions.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/file.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/grapher.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/literals.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/node.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/operators.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/self.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/sends.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/transforms.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/values.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/variables.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-ast-2.3.1/lib/rubinius/ast/version.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/compiled_file.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/compiler.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/evaluator.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/generator.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/generator_methods.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/iseq.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/locals.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/opcodes.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/printers.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/stages.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-compiler-2.3.1/lib/rubinius/compiler/version.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-melbourne-2.3.1.0/ext/rubinius/melbourne/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-melbourne-2.3.1.0/ext/rubinius/melbourne/node_types.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-melbourne-2.3.1.0/lib/rubinius/melbourne.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-melbourne-2.3.1.0/lib/rubinius/melbourne/version.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-processor-2.3.0/lib/rubinius/processor.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-processor-2.3.0/lib/rubinius/processor/processor.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-processor-2.3.0/lib/rubinius/processor/version.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-toolset-2.3.1/lib/rubinius/toolset.rb
RBC /Users/at/src/private/ruby/rubinius/staging/runtime/gems/rubinius-toolset-2.3.1/lib/rubinius/toolset/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators/constants.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators/file_processor.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators/structures.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators/types.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/ffi2-generators-0.1.1/lib/ffi2/generators/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/ext/psych/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/class_loader.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/coder.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/core_ext.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/deprecated.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/exception.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/handler.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/handlers/document_stream.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/handlers/recorder.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/json/ruby_events.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/json/stream.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/json/tree_builder.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/json/yaml_events.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/alias.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/document.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/mapping.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/node.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/scalar.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/sequence.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/nodes/stream.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/omap.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/parser.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/scalar_scanner.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/set.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/stream.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/streaming.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/syntax_error.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/tree_builder.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/depth_first.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/emitter.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/json_tree.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/to_ruby.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/visitor.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/visitors/yaml_tree.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/psych-2.0.10/lib/psych/y.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/date.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/date/delta.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/date/delta/parser.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/date/format.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/rubysl/date.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/rubysl/date/date.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-date-2.0.9/lib/rubysl/date/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-delegate-2.0.1/lib/delegate.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-delegate-2.0.1/lib/rubysl/delegate.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-delegate-2.0.1/lib/rubysl/delegate/delegate.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-delegate-2.0.1/lib/rubysl/delegate/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/bubblebabble/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/md5/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/rmd160/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/sha1/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/ext/rubysl/digest/sha2/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/bubblebabble.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/hmac.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/md5.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/rmd160.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/sha1.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/digest/sha2.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/rubysl/digest.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/rubysl/digest/digest.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-digest-2.0.3/lib/rubysl/digest/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-etc-2.0.3/lib/etc.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-etc-2.0.3/lib/rubysl/etc.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-etc-2.0.3/lib/rubysl/etc/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-etc-2.0.3/lib/rubysl/etc/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fcntl-2.0.4/lib/fcntl.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fcntl-2.0.4/lib/rubysl/fcntl.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fcntl-2.0.4/lib/rubysl/fcntl/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fcntl-2.0.4/lib/rubysl/fcntl/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fileutils-2.0.3/lib/fileutils.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fileutils-2.0.3/lib/rubysl/fileutils.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fileutils-2.0.3/lib/rubysl/fileutils/fileutils.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-fileutils-2.0.3/lib/rubysl/fileutils/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-mkmf-2.0.1/lib/mkmf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-mkmf-2.0.1/lib/rubysl/mkmf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-mkmf-2.0.1/lib/rubysl/mkmf/mkmf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-mkmf-2.0.1/lib/rubysl/mkmf/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-monitor-2.0.0/lib/monitor.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-monitor-2.0.0/lib/rubysl/monitor.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-monitor-2.0.0/lib/rubysl/monitor/monitor.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-monitor-2.0.0/lib/rubysl/monitor/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/ext/rubysl/openssl/deprecation.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/ext/rubysl/openssl/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/bn.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/buffering.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/cipher.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/config.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/digest.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/ssl.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/openssl/x509.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/rubysl/openssl.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-openssl-2.2.1/lib/rubysl/openssl/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/ac.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/date.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/shellwords.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/time.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/uri.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/optparse/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/rubysl/optparse.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/rubysl/optparse/optparse.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-optparse-2.0.1/lib/rubysl/optparse/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-shellwords-2.0.0/lib/rubysl/shellwords.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-shellwords-2.0.0/lib/rubysl/shellwords/shellwords.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-shellwords-2.0.0/lib/rubysl/shellwords/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-shellwords-2.0.0/lib/shellwords.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-stringio-2.0.0/lib/rubysl/stringio.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-stringio-2.0.0/lib/rubysl/stringio/stringio.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-stringio-2.0.0/lib/rubysl/stringio/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-stringio-2.0.0/lib/stringio.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-strscan-2.0.0/lib/rubysl/strscan.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-strscan-2.0.0/lib/rubysl/strscan/strscan.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-strscan-2.0.0/lib/rubysl/strscan/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-strscan-2.0.0/lib/strscan.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tempfile-2.0.1/lib/rubysl/tempfile.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tempfile-2.0.1/lib/rubysl/tempfile/tempfile.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tempfile-2.0.1/lib/rubysl/tempfile/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tempfile-2.0.1/lib/tempfile.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-thread-2.0.2/lib/rubysl/thread.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-thread-2.0.2/lib/rubysl/thread/thread.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-thread-2.0.2/lib/rubysl/thread/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-thread-2.0.2/lib/thread.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tmpdir-2.0.1/lib/rubysl/tmpdir.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tmpdir-2.0.1/lib/rubysl/tmpdir/tmpdir.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tmpdir-2.0.1/lib/rubysl/tmpdir/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-tmpdir-2.0.1/lib/tmpdir.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/rubysl/uri.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/rubysl/uri/uri.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/rubysl/uri/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/common.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/ftp.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/generic.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/http.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/https.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/ldap.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/ldaps.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-uri-2.0.0/lib/uri/mailto.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-yaml-2.1.0/lib/rubysl/yaml.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-yaml-2.1.0/lib/rubysl/yaml/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-yaml-2.1.0/lib/yaml.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-yaml-2.1.0/lib/yaml/dbm.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-yaml-2.1.0/lib/yaml/store.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-zlib-2.0.1/ext/rubysl/zlib/extconf.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-zlib-2.0.1/lib/rubysl/zlib.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-zlib-2.0.1/lib/rubysl/zlib/version.rb
RBC /Users/at/src/private/ruby/rubinius/bootstrap/gems/rubysl-zlib-2.0.1/lib/zlib.rb
/Users/at/src/private/ruby/rubinius/staging/bin/rbx ./extconf.rbc
make && make install
compiling encoding_compat.cpp
compiling grammar.cpp
compiling melbourne.cpp
compiling node_types.cpp
compiling symbols.cpp
compiling var_table.cpp
compiling visitor.cpp
linking shared-object melbourne.bundle
ld: warning: directory not found for option '-L/Users/at/src/private/ruby/rubinius/staging/lib'
/Users/at/src/private/ruby/rubinius/staging/bin/rbx extconf.rb
An exception occurred loading the compiler:
undefined local variable or method `message' on an instance of Rubinius::Loader. (NameError)
Backtrace:
Kernel(Rubinius::Loader)#message (method_missing) at kernel/delta/kernel.rb:78
Rubinius::Loader#load_compiler at kernel/loader.rb:558
Rubinius::Loader#main at kernel/loader.rb:798
rake aborted!
Command failed with status (1): [/Users/at/src/private/ruby/rubinius/stagin...]
/Users/at/src/private/ruby/rubinius/rakelib/gems.rake:5:in `bootstrap_rubinius'
/Users/at/src/private/ruby/rubinius/rakelib/gems.rake:68:in `block (4 levels) in <top (required)>'
/Users/at/src/private/ruby/rubinius/rakelib/gems.rake:67:in `chdir'
/Users/at/src/private/ruby/rubinius/rakelib/gems.rake:67:in `block (3 levels) in <top (required)>'
/Users/at/src/private/ruby/rubinius/rakelib/gems.rake:66:in `block (2 levels) in <top (required)>'
Tasks: TOP => install => build:build => gems:extensions
(See full trace by running task with --trace)
@dcki
Copy link

dcki commented Apr 8, 2015

This page (particularly your configure options ./configure --prefix=$HOME/.rbenv/versions/rbx-2.5.2-git --cc=clang --cxx=clang++ --llvm-config=/usr/local/Cellar/llvm/3.5.1/bin/llvm-config) is the ONLY source I found while trying to figure out how to install Rubinius 2.5.2 on Ubuntu.

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment