diff options
| author | Tim D. Smith | 2016-06-30 19:50:50 -0700 | 
|---|---|---|
| committer | Tim D. Smith | 2016-07-02 23:58:07 -0700 | 
| commit | abca5936f2fdd40520519af89c17afba7c873a54 (patch) | |
| tree | 033041b0bfe4930b04756989989ff9847e626332 /Library/Homebrew/dev-cmd/linkage.rb | |
| parent | fbac41d95bc7d9500eed195b46aba2a95ed89b18 (diff) | |
| download | brew-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.rb | 17 | 
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?  | 
