Merge pull request #8064 from maxim-belkin/missing-libs-follow-up2

Detect unexpected linkage
This commit is contained in:
Maxim Belkin 2020-07-24 16:29:17 -05:00 committed by GitHub
commit 0a5ac65b56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 8 deletions

View File

@ -24,10 +24,5 @@ class Formula
allowed_missing_libraries.merge(libraries)
end
# @private
def allowed_missing_libraries
@allowed_missing_libraries ||= Set.new
end
end
end

View File

@ -2760,6 +2760,11 @@ class Formula
def ignore_missing_libraries(*)
raise FormulaSpecificationError, "#{__method__} is available on Linux only"
end
# @private
def allowed_missing_libraries
@allowed_missing_libraries ||= Set.new
end
end
end

View File

@ -16,6 +16,7 @@ class LinkageChecker
@system_dylibs = Set.new
@broken_dylibs = Set.new
@unexpected_broken_dylibs = nil
@unexpected_present_dylibs = nil
@variable_dylibs = Set.new
@brewed_dylibs = Hash.new { |h, k| h[k] = Set.new }
@reverse_links = Hash.new { |h, k| h[k] = Set.new }
@ -57,6 +58,7 @@ class LinkageChecker
def display_test_output(puts_output: true)
display_items "Missing libraries", broken_dylibs_with_expectations, puts_output: puts_output
display_items "Unused missing linkage information", unexpected_present_dylibs, puts_output: puts_output
display_items "Broken dependencies", @broken_deps, puts_output: puts_output
display_items "Unwanted system libraries", @unwanted_system_dylibs, puts_output: puts_output
display_items "Conflicting libraries", @version_conflict_deps, puts_output: puts_output
@ -66,13 +68,15 @@ class LinkageChecker
elsif unexpected_broken_dylibs.empty?
puts "No unexpected broken library linkage detected."
else
puts "Broken library linkage detected"
puts "Unexpected missing library linkage detected"
end
puts "Unexpected non-missing linkage detected" if unexpected_present_dylibs.present?
end
def broken_library_linkage?
issues = [@broken_deps, @unwanted_system_dylibs, @version_conflict_deps]
[issues, unexpected_broken_dylibs].flatten.any?(&:present?)
[issues, unexpected_broken_dylibs, unexpected_present_dylibs].flatten.any?(&:present?)
end
def unexpected_broken_dylibs
@ -90,6 +94,19 @@ class LinkageChecker
end
end
def unexpected_present_dylibs
@unexpected_present_dylibs ||= @formula.class.allowed_missing_libraries.reject do |allowed_missing_lib|
@broken_dylibs.any? do |broken_lib|
case allowed_missing_lib
when Regexp
allowed_missing_lib.match? broken_lib
when String
broken_lib.include? allowed_missing_lib
end
end
end
end
def broken_dylibs_with_expectations
output = {}
@broken_dylibs.each do |broken_lib|
@ -291,7 +308,11 @@ class LinkageChecker
end
else
things.sort.each do |item|
output += "\n #{item}"
output += if item.is_a? Regexp
"\n #{item.inspect}"
else
"\n #{item}"
end
end
end
puts output if puts_output