From abca5936f2fdd40520519af89c17afba7c873a54 Mon Sep 17 00:00:00 2001 From: "Tim D. Smith" Date: Thu, 30 Jun 2016 19:50:50 -0700 Subject: [PATCH] Add --reverse to brew linkage For each dylib the keg references, print the dylib followed by the binaries which link to it. Closes #431. --- Library/Homebrew/dev-cmd/linkage.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb index 57cbb9ea1d..49223068fb 100644 --- a/Library/Homebrew/dev-cmd/linkage.rb +++ b/Library/Homebrew/dev-cmd/linkage.rb @@ -22,6 +22,8 @@ module Homebrew result = LinkageChecker.new(keg) if ARGV.include?("--test") result.display_test_output + elsif ARGV.include?("--reverse") + result.display_reverse_output else result.display_normal_output end @@ -42,6 +44,7 @@ module Homebrew @system_dylibs = Set.new @broken_dylibs = Set.new @variable_dylibs = Set.new + @reverse_links = Hash.new { |h, k| h[k] = Set.new } check_dylibs end @@ -50,6 +53,7 @@ module Homebrew next if file.symlink? || file.directory? next unless file.dylib? || file.mach_o_executable? || file.mach_o_bundle? file.dynamically_linked_libraries.each do |dylib| + @reverse_links[dylib] << file if dylib.start_with? "@" @variable_dylibs << dylib else @@ -84,6 +88,19 @@ module Homebrew display_items "Possible undeclared dependencies", @undeclared_deps end + def display_reverse_output + return if @reverse_links.empty? + sorted = @reverse_links.sort + sorted.each do |dylib, files| + puts dylib + files.each do |f| + unprefixed = f.to_s.strip_prefix "#{@keg.to_s}/" + puts " #{unprefixed}" + end + puts unless dylib == sorted.last[0] + end + end + def display_test_output display_items "Missing libraries", @broken_dylibs puts "No broken dylib links" if @broken_dylibs.empty?