summaryrefslogtreecommitdiff
path: root/lib/rubygems
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems')
-rw-r--r--lib/rubygems/installer.rb9
-rw-r--r--lib/rubygems/platform.rb9
-rw-r--r--lib/rubygems/require_paths_builder.rb15
3 files changed, 29 insertions, 4 deletions
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index 03f7c92828..46d0144a88 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -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
diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb
index 24081d4fec..496c4b1fb8 100644
--- a/lib/rubygems/platform.rb
+++ b/lib/rubygems/platform.rb
@@ -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 ]
diff --git a/lib/rubygems/require_paths_builder.rb b/lib/rubygems/require_paths_builder.rb
new file mode 100644
index 0000000000..fe4f593bf4
--- /dev/null
+++ b/lib/rubygems/require_paths_builder.rb
@@ -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 \ No newline at end of file