Merge pull request #3103 from maxim-belkin/extraneous_deps
linkage_checker: add a check for extraneous dependencies
This commit is contained in:
		
						commit
						81d9f71edb
					
				@ -5,7 +5,7 @@ require "formula"
 | 
			
		||||
class LinkageChecker
 | 
			
		||||
  attr_reader :keg, :formula
 | 
			
		||||
  attr_reader :brewed_dylibs, :system_dylibs, :broken_dylibs, :variable_dylibs
 | 
			
		||||
  attr_reader :undeclared_deps, :reverse_links
 | 
			
		||||
  attr_reader :undeclared_deps, :unnecessary_deps, :reverse_links
 | 
			
		||||
 | 
			
		||||
  def initialize(keg, formula = nil)
 | 
			
		||||
    @keg = keg
 | 
			
		||||
@ -16,6 +16,7 @@ class LinkageChecker
 | 
			
		||||
    @variable_dylibs = Set.new
 | 
			
		||||
    @undeclared_deps = []
 | 
			
		||||
    @reverse_links = Hash.new { |h, k| h[k] = Set.new }
 | 
			
		||||
    @unnecessary_deps = []
 | 
			
		||||
    check_dylibs
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -51,7 +52,7 @@ class LinkageChecker
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    @undeclared_deps = check_undeclared_deps if formula
 | 
			
		||||
    @undeclared_deps, @unnecessary_deps = check_undeclared_deps if formula
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def check_undeclared_deps
 | 
			
		||||
@ -77,6 +78,12 @@ class LinkageChecker
 | 
			
		||||
        a <=> b
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    unnecessary_deps = declared_dep_names.reject do |full_name|
 | 
			
		||||
      name = full_name.split("/").last
 | 
			
		||||
      next true if Formula[name].bin.directory?
 | 
			
		||||
      @brewed_dylibs.keys.map { |x| x.split("/").last }.include?(name)
 | 
			
		||||
    end
 | 
			
		||||
    [undeclared_deps, unnecessary_deps]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_normal_output
 | 
			
		||||
@ -85,6 +92,7 @@ class LinkageChecker
 | 
			
		||||
    display_items "Variable-referenced libraries", @variable_dylibs
 | 
			
		||||
    display_items "Missing libraries", @broken_dylibs
 | 
			
		||||
    display_items "Possible undeclared dependencies", @undeclared_deps
 | 
			
		||||
    display_items "Possible unnecessary dependencies", @unnecessary_deps
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_reverse_output
 | 
			
		||||
@ -102,6 +110,7 @@ class LinkageChecker
 | 
			
		||||
 | 
			
		||||
  def display_test_output
 | 
			
		||||
    display_items "Missing libraries", @broken_dylibs
 | 
			
		||||
    display_items "Possible unnecessary dependencies", @unnecessary_deps
 | 
			
		||||
    puts "No broken dylib links" if @broken_dylibs.empty?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -113,6 +122,10 @@ class LinkageChecker
 | 
			
		||||
    !@undeclared_deps.empty?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def unnecessary_deps?
 | 
			
		||||
    !@unnecessary_deps.empty?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  # Whether or not dylib is a harmless broken link, meaning that it's
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user