From 080ddd8804be14f4b18f9558b58270456ff313c2 Mon Sep 17 00:00:00 2001 From: Xu Cheng Date: Thu, 30 Jun 2016 16:55:45 +0800 Subject: [PATCH] linkage: check undeclared dependencies for `--test` Also allowing access results for LinkageChecker --- Library/Homebrew/dev-cmd/linkage.rb | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb index 49223068fb..8c29dbe4e7 100644 --- a/Library/Homebrew/dev-cmd/linkage.rb +++ b/Library/Homebrew/dev-cmd/linkage.rb @@ -16,27 +16,26 @@ require "formula" module Homebrew def linkage - found_broken_dylibs = false ARGV.kegs.each do |keg| ohai "Checking #{keg.name} linkage" if ARGV.kegs.size > 1 result = LinkageChecker.new(keg) if ARGV.include?("--test") result.display_test_output + if result.broken_dylibs? || result.undeclared_deps? + Homebrew.failed = true + end elsif ARGV.include?("--reverse") result.display_reverse_output else result.display_normal_output end - found_broken_dylibs = true unless result.broken_dylibs.empty? - end - if ARGV.include?("--test") && found_broken_dylibs - exit 1 end end class LinkageChecker attr_reader :keg - attr_reader :broken_dylibs + attr_reader :brewed_dylibs, :system_dylibs, :broken_dylibs, :variable_dylibs + attr_reader :undeclared_deps, :reverse_links def initialize(keg) @keg = keg @@ -44,6 +43,7 @@ module Homebrew @system_dylibs = Set.new @broken_dylibs = Set.new @variable_dylibs = Set.new + @undeclared_deps = [] @reverse_links = Hash.new { |h, k| h[k] = Set.new } check_dylibs end @@ -76,7 +76,6 @@ module Homebrew @undeclared_deps -= [f.name] rescue FormulaUnavailableError opoo "Formula unavailable: #{keg.name}" - @undeclared_deps = [] end end @@ -104,6 +103,16 @@ module Homebrew def display_test_output display_items "Missing libraries", @broken_dylibs puts "No broken dylib links" if @broken_dylibs.empty? + display_items "Possible undeclared dependencies", @undeclared_deps + puts "No undeclared dependencies" if @undeclared_deps.empty? + end + + def broken_dylibs? + !@broken_dylibs.empty? + end + + def undeclared_deps? + !@undeclared_deps.empty? end private