ruby-changes:61538
From: Josef <ko1@a...>
Date: Fri, 5 Jun 2020 07:34:15 +0900 (JST)
Subject: [ruby-changes:61538] b7adb10e39 (master): [rubygems/rubygems] Add build warning when rake based extension is present, but rake is not specified as dependency.
https://git.ruby-lang.org/ruby.git/commit/?id=b7adb10e39 From b7adb10e3986ac8334b5f304321dda6f8d135e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20=C5=A0im=C3=A1nek?= <josef.simanek@g...> Date: Fri, 1 May 2020 00:55:07 +0200 Subject: [rubygems/rubygems] Add build warning when rake based extension is present, but rake is not specified as dependency. https://github.com/rubygems/rubygems/commit/75fe5475b6 diff --git a/lib/rubygems/ext/build_error.rb b/lib/rubygems/ext/build_error.rb index 6dffddb..720f37c 100644 --- a/lib/rubygems/ext/build_error.rb +++ b/lib/rubygems/ext/build_error.rb @@ -2,5 +2,7 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/build_error.rb#L2 ## # Raised when there is an error while building extensions. +require 'rubygems/exceptions' + class Gem::Ext::BuildError < Gem::InstallError end diff --git a/lib/rubygems/specification_policy.rb b/lib/rubygems/specification_policy.rb index e830d9a..3a30750 100644 --- a/lib/rubygems/specification_policy.rb +++ b/lib/rubygems/specification_policy.rb @@ -1,3 +1,4 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems/specification_policy.rb#L1 +require 'rubygems/ext' require 'rubygems/user_interaction' class Gem::SpecificationPolicy @@ -76,6 +77,8 @@ class Gem::SpecificationPolicy https://github.com/ruby/ruby/blob/trunk/lib/rubygems/specification_policy.rb#L77 validate_dependencies + validate_extensions + validate_removed_attributes if @warnings > 0 @@ -417,6 +420,17 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li https://github.com/ruby/ruby/blob/trunk/lib/rubygems/specification_policy.rb#L420 end end + def validate_extensions # :nodoc: + builder = Gem::Ext::Builder.new(@specification) + + rake_extension = @specification.extensions.any? {|s| builder.builder_for(s) == Gem::Ext::RakeBuilder } + rake_dependency = @specification.dependencies.any? {|d| d.name == 'rake'} + + warning <<-WARNING if rake_extension && !rake_dependency +You have specified rake based extension, but rake is not added as dependency. It is recommended to add rake as a dependency since there's no guarantee rake will be already installed. + WARNING + end + def warning(statement) # :nodoc: @warnings += 1 diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 7b45f0a..e223171 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -2838,6 +2838,37 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use: https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_specification.rb#L2838 end end + def test_validate_rake_extension_have_rake_dependency_warning + util_setup_validate + + Dir.chdir @tempdir do + @a1.extensions = ['Rakefile'] + File.write File.join(@tempdir, 'Rakefile'), '' + + use_ui @ui do + @a1.validate + end + + assert_match(/add rake as a dependency/, @ui.error) + end + end + + def test_validate_rake_extension_have_rake_dependency_no_warning + util_setup_validate + + Dir.chdir @tempdir do + @a1.extensions = ['Rakefile'] + @a1.add_runtime_dependency 'rake' + File.write File.join(@tempdir, 'Rakefile'), '' + + use_ui @ui do + @a1.validate + end + + refute_match(/add rake as a dependency/, @ui.error) + end + end + def test_validate_description util_setup_validate -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/