diff options
Diffstat (limited to 'lib/rubygems/installer.rb')
-rw-r--r-- | lib/rubygems/installer.rb | 67 |
1 files changed, 7 insertions, 60 deletions
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index f8a520d344..49ad7dfae5 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -661,73 +661,20 @@ TEXT # configure scripts and rakefiles or mkrf_conf files. def build_extensions - return if spec.extensions.empty? + builder = Gem::Ext::Builder.new spec, @build_args - if @build_args.empty? - say "Building native extensions. This could take a while..." - else - say "Building native extensions with: '#{@build_args.join(' ')}'" - say "This could take a while..." - end - - dest_path = File.join gem_dir, spec.require_paths.first - ran_rake = false # only run rake once - - spec.extensions.each do |extension| - break if ran_rake - results = [] - - extension ||= "" - extension_dir = File.join gem_dir, File.dirname(extension) - - builder = case extension - when /extconf/ then - Gem::Ext::ExtConfBuilder - when /configure/ then - Gem::Ext::ConfigureBuilder - when /rakefile/i, /mkrf_conf/i then - ran_rake = true - Gem::Ext::RakeBuilder - when /CMakeLists.txt/ then - Gem::Ext::CmakeBuilder - else - message = "No builder for extension '#{extension}'" - extension_build_error extension_dir, message - end - - begin - FileUtils.mkdir_p dest_path - - Dir.chdir extension_dir do - results = builder.build(extension, gem_dir, dest_path, - results, @build_args) - - say results.join("\n") if Gem.configuration.really_verbose - end - rescue - extension_build_error(extension_dir, results.join("\n"), $@) - end - end + builder.build_extensions end ## # Logs the build +output+ in +build_dir+, then raises ExtensionBuildError. + # + # TODO: Delete this for RubyGems 3. It remains for API compatibility - def extension_build_error(build_dir, output, backtrace = nil) - gem_make_out = File.join build_dir, 'gem_make.out' - - open gem_make_out, 'wb' do |io| io.puts output end - - message = <<-EOF -ERROR: Failed to build gem native extension. - - #{output} - -Gem files will remain installed in #{gem_dir} for inspection. -Results logged to #{gem_make_out} -EOF + def extension_build_error(build_dir, output, backtrace = nil) # :nodoc: + builder = Gem::Ext::Builder.new spec, @build_args - raise ExtensionBuildError, message, backtrace + builder.build_error build_dir, output, backtrace end ## |