#!/usr/bin/env ruby # scripts/Makefiles can read and eval the output of this script and # use it as RUBYLIB require 'rubygems' require 'isolate' fp = File.open(__FILE__, "rb") fp.flock(File::LOCK_EX) ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby' opts = { :system => false, # we want "ruby-1.8.7" and not "ruby-1.8", so disable :multiruby :multiruby => false, :path => "tmp/isolate/#{ruby_engine}-#{RUBY_VERSION}", } pid = fork do Isolate.now!(opts) do gem 'sqlite3-ruby', '1.2.5' gem 'kgio', '1.2.0' gem 'rack', '1.1.0' end end _, status = Process.waitpid2(pid) status.success? or abort status.inspect lib_paths = Dir["#{opts[:path]}/gems/*-*/lib"].map { |x| File.expand_path(x) } libs = "tmp/isolate/.#{ruby_engine}-#{RUBY_VERSION}.libs" File.open("#{libs}.#$$", "w") { |fp| fp.puts lib_paths.join(':') } File.rename("#{libs}.#$$", libs) # pure Ruby gems can be shared across all Rubies %w(3.0.0).each do |rails_ver| opts[:path] = "tmp/isolate/rails-#{rails_ver}" pid = fork do Isolate.now!(opts) do gem 'rails', rails_ver end end _, status = Process.waitpid2(pid) status.success? or abort status.inspect more = Dir["#{opts[:path]}/gems/*-*/lib"].map { |x| File.expand_path(x) } lib_paths.concat(more) end