class Bundler::CLI::Doctor
Constants
- DARWIN_REGEX
- LDD_REGEX
Attributes
options[R]
Public Class Methods
new(options)
click to toggle source
# File lib/bundler/cli/doctor.rb, line 11 def initialize(options) @options = options end
Public Instance Methods
bundles_for_gem(spec)
click to toggle source
# File lib/bundler/cli/doctor.rb, line 53 def bundles_for_gem(spec) Dir.glob("#{spec.full_gem_path}/**/*.bundle") end
dylibs(path)
click to toggle source
# File lib/bundler/cli/doctor.rb, line 39 def dylibs(path) case RbConfig::CONFIG["host_os"] when /darwin/ return [] unless otool_available? dylibs_darwin(path) when /(linux|solaris|bsd)/ return [] unless ldd_available? dylibs_ldd(path) else # Windows, etc. Bundler.ui.warn("Dynamic library check not supported on this platform.") [] end end
dylibs_darwin(path)
click to toggle source
# File lib/bundler/cli/doctor.rb, line 23 def dylibs_darwin(path) output = %x`/usr/bin/otool -L "#{path}"`.chomp dylibs = output.split("\n")[1..-1].map {|l| l.match(DARWIN_REGEX).captures[0] }.uniq # ignore @rpath and friends dylibs.reject {|dylib| dylib.start_with? "@" } end
dylibs_ldd(path)
click to toggle source
# File lib/bundler/cli/doctor.rb, line 30 def dylibs_ldd(path) output = %x`/usr/bin/ldd "#{path}"`.chomp output.split("\n").map do |l| match = l.match(LDD_REGEX) next if match.nil? match.captures[0] end.compact end
ldd_available?()
click to toggle source
# File lib/bundler/cli/doctor.rb, line 19 def ldd_available? !system("ldd --help 2>&1 >#{Bundler::NULL}").nil? end
otool_available?()
click to toggle source
# File lib/bundler/cli/doctor.rb, line 15 def otool_available? system("otool --version 2>&1 >#{Bundler::NULL}") end
run()
click to toggle source
# File lib/bundler/cli/doctor.rb, line 57 def run Bundler.ui.level = "error" if options[:quiet] broken_links = {} begin definition = Bundler.definition definition.validate_ruby! not_installed = definition.missing_specs raise GemNotFound if not_installed.any? rescue GemNotFound Bundler.ui.warn "This bundle's gems must be installed to run this command." Bundler.ui.warn "Install missing gems with `bundle install`." exit 0 end definition.specs.each do |spec| bundles_for_gem(spec).each do |bundle| bad_paths = dylibs(bundle).select {|f| !File.exist?(f) } if bad_paths.any? broken_links[spec] ||= [] broken_links[spec].concat(bad_paths) end end end if broken_links.any? Bundler.ui.error "The following gems are missing OS dependencies" broken_links.each do |spec, paths| paths.uniq.each do |path| Bundler.ui.error " * #{spec.name}: #{path}" end end exit 1 end end