diff options
Diffstat (limited to 'lib/rubygems/installer.rb')
-rw-r--r-- | lib/rubygems/installer.rb | 34 |
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 |