From 33d1f172c839bc14ba71a8e74f5ca6b01b7e069b Mon Sep 17 00:00:00 2001 From: drbrain Date: Wed, 16 Oct 2013 00:43:14 +0000 Subject: [PATCH] * lib/rubygems: Update to RubyGems master 278d00d. Changes: Fixes building extensions without a "clean" make rule Adds gem dependency file autodetection to "gem install -g" * test/rubygems: Tests for the above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++ lib/rubygems/commands/install_command.rb | 6 +++- lib/rubygems/ext/builder.rb | 13 ++++---- lib/rubygems/ext/cmake_builder.rb | 3 -- .../test_gem_commands_install_command.rb | 27 ++++++++++++++++ test/rubygems/test_gem_ext_builder.rb | 31 +++++++++++++++++++ test/rubygems/test_gem_ext_cmake_builder.rb | 2 +- 7 files changed, 80 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index a690577fd7..ab3e4eebbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Wed Oct 16 09:42:42 2013 Eric Hodel + + * lib/rubygems: Update to RubyGems master 278d00d. Changes: + + Fixes building extensions without a "clean" make rule + + Adds gem dependency file autodetection to "gem install -g" + + * test/rubygems: Tests for the above. + Wed Oct 16 09:12:23 2013 Eric Hodel * lib/rubygems: Update to RubyGems master commit 2a74263. This fixes diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb index f02b12906d..a45d9057b0 100644 --- a/lib/rubygems/commands/install_command.rb +++ b/lib/rubygems/commands/install_command.rb @@ -32,9 +32,13 @@ class Gem::Commands::InstallCommand < Gem::Command add_version_option add_prerelease_option "to be installed. (Only for listed gems)" - add_option(:"Install/Update", '-g', '--file FILE', + add_option(:"Install/Update", '-g', '--file [FILE]', 'Read from a gem dependencies API file and', 'install the listed gems') do |v,o| + v = %w[gem.deps.rb Gemfile Isolate].find do |file| + File.exist? file + end unless v + o[:gemdeps] = v end diff --git a/lib/rubygems/ext/builder.rb b/lib/rubygems/ext/builder.rb index 069ab4cfe0..761505636c 100644 --- a/lib/rubygems/ext/builder.rb +++ b/lib/rubygems/ext/builder.rb @@ -19,11 +19,6 @@ class Gem::Ext::Builder CHDIR_MUTEX = Mutex.new # :nodoc: - ## - # `make` targets to run when building the extension - - MAKE_TARGETS = ['clean', '', 'install'] # :nodoc: - attr_accessor :build_args # :nodoc: def self.class_name @@ -45,14 +40,18 @@ class Gem::Ext::Builder destdir = '"DESTDIR=%s"' % ENV['DESTDIR'] if RUBY_VERSION > '2.0' - self::MAKE_TARGETS.each do |target| + ['clean', '', 'install'].each do |target| # Pass DESTDIR via command line to override what's in MAKEFLAGS cmd = [ make_program, destdir, target ].join(' ').rstrip - run(cmd, results, "make #{target}".rstrip) + begin + run(cmd, results, "make #{target}".rstrip) + rescue Gem::InstallError + raise unless target == 'clean' # ignore clean failure + end end end diff --git a/lib/rubygems/ext/cmake_builder.rb b/lib/rubygems/ext/cmake_builder.rb index 8bd82dafe2..d6d106f4ae 100644 --- a/lib/rubygems/ext/cmake_builder.rb +++ b/lib/rubygems/ext/cmake_builder.rb @@ -1,7 +1,4 @@ class Gem::Ext::CmakeBuilder < Gem::Ext::Builder - - MAKE_TARGETS = ['', 'install'] # :nodoc: - def self.build(extension, directory, dest_path, results) unless File.exist?('Makefile') then cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}" diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb index 1008033b6c..24159e4c71 100644 --- a/test/rubygems/test_gem_commands_install_command.rb +++ b/test/rubygems/test_gem_commands_install_command.rb @@ -866,5 +866,32 @@ ERROR: Possible alternatives: non_existent_with_hint assert_match "Installing r (2.0)", @ui.output end + def test_handle_options_file + @cmd.handle_options %w[-g Gemfile] + + assert_equal 'Gemfile', @cmd.options[:gemdeps] + + @cmd.handle_options %w[--file gem.deps.rb] + + assert_equal 'gem.deps.rb', @cmd.options[:gemdeps] + + FileUtils.touch 'Isolate' + + @cmd.handle_options %w[-g] + + assert_equal 'Isolate', @cmd.options[:gemdeps] + + FileUtils.touch 'Gemfile' + + @cmd.handle_options %w[-g] + + assert_equal 'Gemfile', @cmd.options[:gemdeps] + + FileUtils.touch 'gem.deps.rb' + + @cmd.handle_options %w[-g] + + assert_equal 'gem.deps.rb', @cmd.options[:gemdeps] + end end diff --git a/test/rubygems/test_gem_ext_builder.rb b/test/rubygems/test_gem_ext_builder.rb index ccd1af9d87..aa8eeac2ba 100644 --- a/test/rubygems/test_gem_ext_builder.rb +++ b/test/rubygems/test_gem_ext_builder.rb @@ -66,6 +66,37 @@ install: end end + def test_class_make_no_clean + ENV['DESTDIR'] = 'destination' + results = [] + + Dir.chdir @ext do + open 'Makefile', 'w' do |io| + io.puts <<-MAKEFILE +all: +\t@#{Gem.ruby} -e "puts %Q{all: \#{ENV['DESTDIR']}}" + +install: +\t@#{Gem.ruby} -e "puts %Q{install: \#{ENV['DESTDIR']}}" + MAKEFILE + end + + Gem::Ext::Builder.make @dest_path, results + end + + results = results.join "\n" + + if RUBY_VERSION > '2.0' then + assert_match %r%"DESTDIR=#{ENV['DESTDIR']}" clean$%, results + assert_match %r%"DESTDIR=#{ENV['DESTDIR']}"$%, results + assert_match %r%"DESTDIR=#{ENV['DESTDIR']}" install$%, results + else + refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" clean$%, results + refute_match %r%"DESTDIR=#{ENV['DESTDIR']}"$%, results + refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" install$%, results + end + end + def test_build_extensions @spec.extensions << 'extconf.rb' diff --git a/test/rubygems/test_gem_ext_cmake_builder.rb b/test/rubygems/test_gem_ext_cmake_builder.rb index b3e32977f4..aaece6868b 100644 --- a/test/rubygems/test_gem_ext_cmake_builder.rb +++ b/test/rubygems/test_gem_ext_cmake_builder.rb @@ -65,7 +65,7 @@ install (FILES test.txt DESTINATION bin) def test_self_build_has_makefile File.open File.join(@ext, 'Makefile'), 'w' do |makefile| - makefile.puts "clean:\n\t@echo ok\nall:\n\t@echo ok\ninstall:\n\t@echo ok" + makefile.puts "all:\n\t@echo ok\ninstall:\n\t@echo ok" end output = []