summaryrefslogtreecommitdiff
path: root/lib/rubygems/installer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/installer.rb')
-rw-r--r--lib/rubygems/installer.rb34
1 files changed, 21 insertions, 13 deletions
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index 7321d2e2e5..09d260dfb8 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -14,6 +14,7 @@ require 'rubygems/format'
require 'rubygems/exceptions'
require 'rubygems/ext'
require 'rubygems/require_paths_builder'
+require 'rubygems/user_interaction'
##
# The installer class processes RubyGem .gem files and installs the files
@@ -44,7 +45,7 @@ class Gem::Installer
include Gem::UserInteraction
- include Gem::RequirePathsBuilder if QUICKLOADER_SUCKAGE
+ include Gem::RequirePathsBuilder if Gem::QUICKLOADER_SUCKAGE
##
# The directory a gem's executables will be installed into
@@ -176,7 +177,7 @@ class Gem::Installer
generate_bin
write_spec
- write_require_paths_file_if_needed if QUICKLOADER_SUCKAGE
+ write_require_paths_file_if_needed if Gem::QUICKLOADER_SUCKAGE
# HACK remove? Isn't this done in multiple places?
cached_gem = File.join @gem_home, "cache", @gem.split(/\//).pop
@@ -481,7 +482,6 @@ TEXT
def build_extensions
return if @spec.extensions.empty?
say "Building native extensions. This could take a while..."
- start_dir = Dir.pwd
dest_path = File.join @gem_dir, @spec.require_paths.first
ran_rake = false # only run rake once
@@ -502,29 +502,37 @@ TEXT
nil
end
- begin
- Dir.chdir File.join(@gem_dir, File.dirname(extension))
- results = builder.build(extension, @gem_dir, dest_path, results)
- say results.join("\n") if Gem.configuration.really_verbose
+ extension_dir = begin
+ File.join @gem_dir, File.dirname(extension)
+ rescue TypeError # extension == nil
+ @gem_dir
+ end
+
+
+ begin
+ Dir.chdir extension_dir do
+ results = builder.build(extension, @gem_dir, dest_path, results)
+ say results.join("\n") if Gem.configuration.really_verbose
+ end
rescue
results = results.join "\n"
- File.open('gem_make.out', 'wb') { |f| f.puts results }
+ gem_make_out = File.join extension_dir, 'gem_make.out'
+
+ open gem_make_out, 'wb' do |io| io.puts results end
message = <<-EOF
ERROR: Failed to build gem native extension.
-#{results}
+ #{results}
Gem files will remain installed in #{@gem_dir} for inspection.
-Results logged to #{File.join(Dir.pwd, 'gem_make.out')}
- EOF
+Results logged to #{gem_make_out}
+EOF
raise ExtensionBuildError, message
- ensure
- Dir.chdir start_dir
end
end
end