aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/dev-cmd/linkage.rb
diff options
context:
space:
mode:
authorTim D. Smith2016-06-30 19:50:50 -0700
committerTim D. Smith2016-07-02 23:58:07 -0700
commitabca5936f2fdd40520519af89c17afba7c873a54 (patch)
tree033041b0bfe4930b04756989989ff9847e626332 /Library/Homebrew/dev-cmd/linkage.rb
parentfbac41d95bc7d9500eed195b46aba2a95ed89b18 (diff)
downloadbrew-abca5936f2fdd40520519af89c17afba7c873a54.tar.bz2
Add --reverse to brew linkage
For each dylib the keg references, print the dylib followed by the binaries which link to it. Closes #431.
Diffstat (limited to 'Library/Homebrew/dev-cmd/linkage.rb')
-rw-r--r--Library/Homebrew/dev-cmd/linkage.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb
index 57cbb9ea1..49223068f 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?