[rubygems/rubygems] Detect extension files under full_required_paths
When we use this methods with local gemspec, we don't handle build status of extension correctly. So We need to find extension files in require_paths. Example with ruby/erb repository: ``` $ bundle exec irb Ignoring erb-4.0.2 because its extensions are not built. Try: gem pristine erb --version 4.0.2 >> ``` https://github.com/rubygems/rubygems/commit/f90e43cf3f
This commit is contained in:
parent
309dd50a01
commit
cb3f1f6de8
@ -12,6 +12,8 @@ require_relative "stub_specification"
|
|||||||
require_relative "platform"
|
require_relative "platform"
|
||||||
require_relative "util/list"
|
require_relative "util/list"
|
||||||
|
|
||||||
|
require "rbconfig"
|
||||||
|
|
||||||
##
|
##
|
||||||
# The Specification class contains the information for a gem. Typically
|
# The Specification class contains the information for a gem. Typically
|
||||||
# defined in a .gemspec file or a Rakefile, and looks like this:
|
# defined in a .gemspec file or a Rakefile, and looks like this:
|
||||||
@ -2182,6 +2184,16 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
return false if default_gem?
|
return false if default_gem?
|
||||||
return false if File.exist? gem_build_complete_path
|
return false if File.exist? gem_build_complete_path
|
||||||
|
|
||||||
|
# When we use this methods with local gemspec, we don't handle
|
||||||
|
# build status of extension correctly. So We need to find extension
|
||||||
|
# files in require_paths.
|
||||||
|
# TODO: Gem::Specification couldn't access extension name from extconf.rb
|
||||||
|
# so we find them with heuristic way. We should improve it.
|
||||||
|
return false if (full_require_paths - [extension_dir]).any? do |path|
|
||||||
|
File.exist?(File.join(path, "#{name}.#{RbConfig::CONFIG['DLEXT']}")) ||
|
||||||
|
!Dir.glob(File.join(path, name, "*.#{RbConfig::CONFIG['DLEXT']}")).empty?
|
||||||
|
end
|
||||||
|
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user