From 9642485e733c58daa297ba435c23390a1bd5df49 Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Sun, 18 Mar 2018 18:52:12 -0500 Subject: [PATCH] Missing libraries now report corresponding missing formulae --- Library/Homebrew/linkage_checker.rb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/linkage_checker.rb b/Library/Homebrew/linkage_checker.rb index deeaa4dfaa..080373cddd 100644 --- a/Library/Homebrew/linkage_checker.rb +++ b/Library/Homebrew/linkage_checker.rb @@ -12,7 +12,7 @@ class LinkageChecker @formula = formula || resolve_formula(keg) @brewed_dylibs = Hash.new { |h, k| h[k] = Set.new } @system_dylibs = Set.new - @broken_dylibs = Set.new + @broken_dylibs = Hash.new { |h, k| h[k] = Set.new } @variable_dylibs = Set.new @indirect_deps = [] @undeclared_deps = [] @@ -21,6 +21,10 @@ class LinkageChecker check_dylibs end + def dylib_to_dep(dylib) + dylib.sub("#{HOMEBREW_PREFIX}/opt/", "").sub("#{HOMEBREW_CELLAR}/", "").split("/")[0] + end + def check_dylibs checked_dylibs = Set.new @keg.find do |file| @@ -41,7 +45,7 @@ class LinkageChecker @system_dylibs << dylib rescue Errno::ENOENT next if harmless_broken_link?(dylib) - @broken_dylibs << dylib + @broken_dylibs[dylib_to_dep(dylib)] << dylib else tap = Tab.for_keg(owner).tap f = if tap.nil? || tap.core_tap? @@ -86,12 +90,14 @@ class LinkageChecker next true if Formula[name].bin.directory? @brewed_dylibs.keys.map { |x| x.split("/").last }.include?(name) end - missing = [] - @broken_dylibs.each do |str| + missing = Set.new + @broken_dylibs.each do |key, value| + value.each do |str| next unless str.start_with?("#{HOMEBREW_PREFIX}/opt", HOMEBREW_CELLAR) - missing << str.sub("#{HOMEBREW_PREFIX}/opt/", "").sub("#{HOMEBREW_CELLAR}/", "").split("/")[0] + missing << dylib_to_dep(str) end - unnecessary_deps -= missing + end + unnecessary_deps -= missing.to_a [indirect_deps, undeclared_deps, unnecessary_deps] end