From 6c962c2a5b67554e57e06ddf6838f092b8626efa Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Tue, 29 Aug 2017 11:04:00 -0500 Subject: [PATCH 1/4] linkage_checker: check for extraneous dependencies --- Library/Homebrew/os/mac/linkage_checker.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/os/mac/linkage_checker.rb b/Library/Homebrew/os/mac/linkage_checker.rb index 7868278523..ded3a5ff3c 100644 --- a/Library/Homebrew/os/mac/linkage_checker.rb +++ b/Library/Homebrew/os/mac/linkage_checker.rb @@ -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, :extraneous_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 } + @extraneous_deps = [] check_dylibs end @@ -51,7 +52,7 @@ class LinkageChecker end end - @undeclared_deps = check_undeclared_deps if formula + @undeclared_deps, @extraneous_deps = check_undeclared_deps if formula end def check_undeclared_deps @@ -77,6 +78,11 @@ class LinkageChecker a <=> b end end + extraneous_deps = declared_dep_names.reject do |full_name| + name = full_name.split("/").last + @brewed_dylibs.keys.map{ |x| x.split("/").last }.include? name + end + return undeclared_deps, extraneous_deps end def display_normal_output @@ -85,6 +91,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 extraneous dependencies", @extraneous_deps end def display_reverse_output @@ -113,6 +120,10 @@ class LinkageChecker !@undeclared_deps.empty? end + def extraneous_deps? + !@extraneous_deps.empty? + end + private # Whether or not dylib is a harmless broken link, meaning that it's From 0037d5e2b383a0c3b0272c9481cd9020397d1fc2 Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Tue, 29 Aug 2017 11:26:02 -0500 Subject: [PATCH 2/4] linkage_checker: fix style --- Library/Homebrew/os/mac/linkage_checker.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/os/mac/linkage_checker.rb b/Library/Homebrew/os/mac/linkage_checker.rb index ded3a5ff3c..95a48b1957 100644 --- a/Library/Homebrew/os/mac/linkage_checker.rb +++ b/Library/Homebrew/os/mac/linkage_checker.rb @@ -79,10 +79,10 @@ class LinkageChecker end end extraneous_deps = declared_dep_names.reject do |full_name| - name = full_name.split("/").last - @brewed_dylibs.keys.map{ |x| x.split("/").last }.include? name + name = full_name.split("/").last + @brewed_dylibs.keys.map { |x| x.split("/").last }.include? name end - return undeclared_deps, extraneous_deps + [undeclared_deps, extraneous_deps] end def display_normal_output From 049a453b460a5580991e5ca0f8c77fcd1f86eea1 Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Tue, 29 Aug 2017 12:41:27 -0500 Subject: [PATCH 3/4] linkage_checker: avoid some false positives --- Library/Homebrew/os/mac/linkage_checker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/os/mac/linkage_checker.rb b/Library/Homebrew/os/mac/linkage_checker.rb index 95a48b1957..11d8ab5674 100644 --- a/Library/Homebrew/os/mac/linkage_checker.rb +++ b/Library/Homebrew/os/mac/linkage_checker.rb @@ -80,7 +80,7 @@ class LinkageChecker end extraneous_deps = declared_dep_names.reject do |full_name| name = full_name.split("/").last - @brewed_dylibs.keys.map { |x| x.split("/").last }.include? name + Formula[name].bin.directory? || @brewed_dylibs.keys.map { |x| x.split("/").last }.include?(name) end [undeclared_deps, extraneous_deps] end From f2531d129069a1ffc0d8a273a5aeb8871eb4530c Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Tue, 5 Sep 2017 15:59:26 -0500 Subject: [PATCH 4/4] linkage_checker: unnecessary dependencies - rename 'extraneous' to 'unnecessary' - add the report under `linkage --test` --- Library/Homebrew/os/mac/linkage_checker.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/os/mac/linkage_checker.rb b/Library/Homebrew/os/mac/linkage_checker.rb index 11d8ab5674..2e8256ce4a 100644 --- a/Library/Homebrew/os/mac/linkage_checker.rb +++ b/Library/Homebrew/os/mac/linkage_checker.rb @@ -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, :extraneous_deps, :reverse_links + attr_reader :undeclared_deps, :unnecessary_deps, :reverse_links def initialize(keg, formula = nil) @keg = keg @@ -16,7 +16,7 @@ class LinkageChecker @variable_dylibs = Set.new @undeclared_deps = [] @reverse_links = Hash.new { |h, k| h[k] = Set.new } - @extraneous_deps = [] + @unnecessary_deps = [] check_dylibs end @@ -52,7 +52,7 @@ class LinkageChecker end end - @undeclared_deps, @extraneous_deps = check_undeclared_deps if formula + @undeclared_deps, @unnecessary_deps = check_undeclared_deps if formula end def check_undeclared_deps @@ -78,11 +78,12 @@ class LinkageChecker a <=> b end end - extraneous_deps = declared_dep_names.reject do |full_name| + unnecessary_deps = declared_dep_names.reject do |full_name| name = full_name.split("/").last - Formula[name].bin.directory? || @brewed_dylibs.keys.map { |x| x.split("/").last }.include?(name) + next true if Formula[name].bin.directory? + @brewed_dylibs.keys.map { |x| x.split("/").last }.include?(name) end - [undeclared_deps, extraneous_deps] + [undeclared_deps, unnecessary_deps] end def display_normal_output @@ -91,7 +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 extraneous dependencies", @extraneous_deps + display_items "Possible unnecessary dependencies", @unnecessary_deps end def display_reverse_output @@ -109,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 @@ -120,8 +122,8 @@ class LinkageChecker !@undeclared_deps.empty? end - def extraneous_deps? - !@extraneous_deps.empty? + def unnecessary_deps? + !@unnecessary_deps.empty? end private