summaryrefslogtreecommitdiff
path: root/lib/rubygems/ext/builder.rb
diff options
context:
space:
mode:
authorDavid Rodríguez <[email protected]>2019-04-29 09:07:16 +0200
committerHiroshi SHIBATA <[email protected]>2019-07-31 07:47:00 +0800
commitd64cc80b660c30577945f3cac452ca16db44ce9f (patch)
treeef0775362501e852e0c651b5a8471a15fc6d0206 /lib/rubygems/ext/builder.rb
parent4e27319c2c0a58ed5ee7276f5f69946161fb6367 (diff)
[rubygems/rubygems] Migrate extension builder to use Open3
Since it works on jruby. https://github.com/rubygems/rubygems/commit/5229e00df4
Diffstat (limited to 'lib/rubygems/ext/builder.rb')
-rw-r--r--lib/rubygems/ext/builder.rb27
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb
index 581d420bc4..974e1799a1 100644
--- a/lib/rubygems/ext/builder.rb
+++ b/lib/rubygems/ext/builder.rb
@@ -6,6 +6,7 @@
#++
require 'rubygems/user_interaction'
+require "open3"
class Gem::Ext::Builder
@@ -67,13 +68,11 @@ class Gem::Ext::Builder
results << "current directory: #{Dir.pwd}"
results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
- redirections = verbose ? {} : {err: [:child, :out]}
- IO.popen(command, "r", redirections) do |io|
- if verbose
- IO.copy_stream(io, $stdout)
- else
- results << io.read
- end
+ output, status = Open3.capture2e(*command)
+ if verbose
+ puts output
+ else
+ results << output
end
rescue => error
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
@@ -81,14 +80,18 @@ class Gem::Ext::Builder
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
end
- unless $?.success?
+ unless status.success?
results << "Building has failed. See above output for more information on the failure." if verbose
+ end
+
+ yield(status, results) if block_given?
+ unless status.success?
exit_reason =
- if $?.exited?
- ", exit code #{$?.exitstatus}"
- elsif $?.signaled?
- ", uncaught signal #{$?.termsig}"
+ if status.exited?
+ ", exit code #{status.exitstatus}"
+ elsif status.signaled?
+ ", uncaught signal #{status.termsig}"
end
raise Gem::InstallError, "#{command_name || class_name} failed#{exit_reason}"