diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rubygems/ext/build_error.rb | 2 | ||||
-rw-r--r-- | lib/rubygems/specification_policy.rb | 14 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/rubygems/ext/build_error.rb b/lib/rubygems/ext/build_error.rb index 6dffddb5cc..720f37cf26 100644 --- a/lib/rubygems/ext/build_error.rb +++ b/lib/rubygems/ext/build_error.rb @@ -2,5 +2,7 @@ ## # 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 e830d9af48..3a30750056 100644 --- a/lib/rubygems/specification_policy.rb +++ b/lib/rubygems/specification_policy.rb @@ -1,3 +1,4 @@ +require 'rubygems/ext' require 'rubygems/user_interaction' class Gem::SpecificationPolicy @@ -76,6 +77,8 @@ class Gem::SpecificationPolicy 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 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 |