Import fast-loading gem_prelude.rb from RubyGems.

Import RubyGems r1516.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2007-11-25 03:26:36 +00:00
parent f90fdbfc73
commit 369697bceb
9 changed files with 254 additions and 34 deletions

View file

@ -10,6 +10,7 @@ require 'rbconfig'
require 'rubygems/format'
require 'rubygems/ext'
require 'rubygems/require_paths_builder'
##
# The installer class processes RubyGem .gem files and installs the
@ -27,6 +28,8 @@ class Gem::Installer
class ExtensionBuildError < Gem::InstallError; end
include Gem::UserInteraction
include Gem::RequirePathsBuilder
##
# Constructs an Installer instance that will install the gem located at
@ -111,6 +114,8 @@ class Gem::Installer
generate_bin
build_extensions
write_spec
write_require_paths_file_if_needed
# HACK remove? Isn't this done in multiple places?
cached_gem = File.join @gem_home, "cache", @gem.split(/\//).pop
@ -235,8 +240,8 @@ class Gem::Installer
# the symlink if the gem being installed has a newer version.
#
def generate_bin_symlink(filename, bindir)
if Config::CONFIG["arch"] =~ /dos|win32/i then
alert_warning "Unable to use symlinks on win32, installing wrapper"
if Gem.win_platform? then
alert_warning "Unable to use symlinks on Windows, installing wrapper"
generate_bin_script filename, bindir
return
end

View file

@ -13,7 +13,7 @@ class Gem::Platform
attr_accessor :version
def self.local
arch = Config::CONFIG['arch']
arch = Gem::ConfigMap[:arch]
arch = "#{arch}_60" if arch =~ /mswin32$/
@local ||= new(arch)
end
@ -27,6 +27,8 @@ class Gem::Platform
def self.new(arch) # :nodoc:
case arch
when Gem::Platform::CURRENT then
Gem::Platform.local
when Gem::Platform::RUBY, nil, '' then
Gem::Platform::RUBY
else
@ -71,7 +73,10 @@ class Gem::Platform
when /^java([\d.]*)/ then [ 'java', $1 ]
when /linux/ then [ 'linux', $1 ]
when /mingw32/ then [ 'mingw32', nil ]
when /(mswin\d+)(\_(\d+))?/ then [ $1, $3 ]
when /(mswin\d+)(\_(\d+))?/ then
os, version = $1, $3
@cpu = 'x86' if @cpu.nil? and os =~ /32$/
[os, version]
when /netbsdelf/ then [ 'netbsdelf', nil ]
when /openbsd(\d+\.\d+)/ then [ 'openbsd', $1 ]
when /solaris(\d+\.\d+)/ then [ 'solaris', $1 ]

View file

@ -0,0 +1,15 @@
module Gem
module RequirePathsBuilder
def write_require_paths_file_if_needed(spec = @spec, gem_home = @gem_home)
return if spec.require_paths == ["lib"] && (spec.bindir.nil? || spec.bindir == "bin")
file_name = File.join(gem_home, 'gems', "#{@spec.full_name}", ".require_paths")
file_name.untaint
File.open(file_name, "w") do |file|
spec.require_paths.each do |path|
file.puts path
end
file.puts spec.bindir if spec.bindir
end
end
end
end