[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]