Merge pull request #8064 from maxim-belkin/missing-libs-follow-up2
Detect unexpected linkage
This commit is contained in:
commit
0a5ac65b56
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user