summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems/dependency_installer.rb2
-rw-r--r--lib/rubygems/install_update_options.rb9
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb28
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb28
-rw-r--r--test/rubygems/test_gem_install_update_options.rb12
5 files changed, 79 insertions, 0 deletions
diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb
index a6cfc3c07a..6a6dfa5c20 100644
--- a/lib/rubygems/dependency_installer.rb
+++ b/lib/rubygems/dependency_installer.rb
@@ -83,6 +83,7 @@ class Gem::DependencyInstaller
@user_install = options[:user_install]
@wrappers = options[:wrappers]
@build_args = options[:build_args]
+ @build_jobs = options[:build_jobs]
@build_docs_in_background = options[:build_docs_in_background]
@dir_mode = options[:dir_mode]
@data_mode = options[:data_mode]
@@ -154,6 +155,7 @@ class Gem::DependencyInstaller
options = {
bin_dir: @bin_dir,
build_args: @build_args,
+ build_jobs: @build_jobs,
document: @document,
env_shebang: @env_shebang,
force: @force,
diff --git a/lib/rubygems/install_update_options.rb b/lib/rubygems/install_update_options.rb
index 2d80e99787..66cb5c049b 100644
--- a/lib/rubygems/install_update_options.rb
+++ b/lib/rubygems/install_update_options.rb
@@ -31,6 +31,15 @@ module Gem::InstallUpdateOptions
options[:bin_dir] = File.expand_path(value)
end
+ add_option(:"Install/Update", "-j", "--build-jobs VALUE", Integer,
+ "Specify the number of jobs to pass to `make` when installing",
+ "gems with native extensions.",
+ "Defaults to the number of processors.",
+ "This option is ignored on the mswin platform or",
+ "if the MAKEFLAGS environment variable is set.") do |value, options|
+ options[:build_jobs] = value
+ end
+
add_option(:"Install/Update", "--document [TYPES]", Array,
"Generate documentation for installed gems",
"List the documentation types you wish to",
diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb
index 92933bfb77..4fb7a04fb1 100644
--- a/test/rubygems/test_gem_commands_install_command.rb
+++ b/test/rubygems/test_gem_commands_install_command.rb
@@ -1584,6 +1584,34 @@ ERROR: Possible alternatives: non_existent_with_hint
end
end
+ def test_pass_down_the_job_option_to_make
+ gemspec = nil
+
+ spec_fetcher do |fetcher|
+ fetcher.gem "a", 2 do |spec|
+ gemspec = spec
+
+ extconf_path = "#{spec.gem_dir}/extconf.rb"
+
+ write_file(extconf_path) do |io|
+ io.puts "require 'mkmf'"
+ io.puts "create_makefile '#{spec.name}'"
+ end
+
+ spec.extensions = "extconf.rb"
+ end
+ end
+
+ use_ui @ui do
+ assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
+ @cmd.invoke "a", "-j4"
+ end
+ end
+
+ gem_make_out = File.read(File.join(gemspec.extension_dir, "gem_make.out"))
+ assert_includes(gem_make_out, "make -j4")
+ end
+
def test_execute_bindir_with_nonexistent_parent_dirs
spec_fetcher do |fetcher|
fetcher.gem "a", 2 do |s|
diff --git a/test/rubygems/test_gem_commands_update_command.rb b/test/rubygems/test_gem_commands_update_command.rb
index 3b106e4581..9051640c0b 100644
--- a/test/rubygems/test_gem_commands_update_command.rb
+++ b/test/rubygems/test_gem_commands_update_command.rb
@@ -696,6 +696,34 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
assert_equal expected, @cmd.fetch_remote_gems(specs["a-1"])
end
+ def test_pass_down_the_job_option_to_make
+ gemspec = nil
+
+ spec_fetcher do |fetcher|
+ fetcher.download "a", 3 do |spec|
+ gemspec = spec
+
+ extconf_path = "#{spec.gem_dir}/extconf.rb"
+
+ write_file(extconf_path) do |io|
+ io.puts "require 'mkmf'"
+ io.puts "create_makefile '#{spec.name}'"
+ end
+
+ spec.extensions = "extconf.rb"
+ end
+
+ fetcher.gem "a", 2
+ end
+
+ use_ui @ui do
+ @cmd.invoke("a", "-j2")
+ end
+
+ gem_make_out = File.read(File.join(gemspec.extension_dir, "gem_make.out"))
+ assert_includes(gem_make_out, "make -j2")
+ end
+
def test_handle_options_system
@cmd.handle_options %w[--system]
diff --git a/test/rubygems/test_gem_install_update_options.rb b/test/rubygems/test_gem_install_update_options.rb
index 8fd5d9c543..1e451dcb05 100644
--- a/test/rubygems/test_gem_install_update_options.rb
+++ b/test/rubygems/test_gem_install_update_options.rb
@@ -202,4 +202,16 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
assert_equal true, @cmd.options[:minimal_deps]
end
+
+ def test_build_jobs_short_version
+ @cmd.handle_options %w[-j 4]
+
+ assert_equal 4, @cmd.options[:build_jobs]
+ end
+
+ def test_build_jobs_long_version
+ @cmd.handle_options %w[--build-jobs 4]
+
+ assert_equal 4, @cmd.options[:build_jobs]
+ end
end