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)
|
allowed_missing_libraries.merge(libraries)
|
||||||
end
|
end
|
||||||
|
|
||||||
# @private
|
|
||||||
def allowed_missing_libraries
|
|
||||||
@allowed_missing_libraries ||= Set.new
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -2760,6 +2760,11 @@ class Formula
|
|||||||
def ignore_missing_libraries(*)
|
def ignore_missing_libraries(*)
|
||||||
raise FormulaSpecificationError, "#{__method__} is available on Linux only"
|
raise FormulaSpecificationError, "#{__method__} is available on Linux only"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @private
|
||||||
|
def allowed_missing_libraries
|
||||||
|
@allowed_missing_libraries ||= Set.new
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ class LinkageChecker
|
|||||||
@system_dylibs = Set.new
|
@system_dylibs = Set.new
|
||||||
@broken_dylibs = Set.new
|
@broken_dylibs = Set.new
|
||||||
@unexpected_broken_dylibs = nil
|
@unexpected_broken_dylibs = nil
|
||||||
|
@unexpected_present_dylibs = nil
|
||||||
@variable_dylibs = Set.new
|
@variable_dylibs = Set.new
|
||||||
@brewed_dylibs = Hash.new { |h, k| h[k] = Set.new }
|
@brewed_dylibs = Hash.new { |h, k| h[k] = Set.new }
|
||||||
@reverse_links = 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)
|
def display_test_output(puts_output: true)
|
||||||
display_items "Missing libraries", broken_dylibs_with_expectations, puts_output: puts_output
|
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 "Broken dependencies", @broken_deps, puts_output: puts_output
|
||||||
display_items "Unwanted system libraries", @unwanted_system_dylibs, 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
|
display_items "Conflicting libraries", @version_conflict_deps, puts_output: puts_output
|
||||||
@ -66,13 +68,15 @@ class LinkageChecker
|
|||||||
elsif unexpected_broken_dylibs.empty?
|
elsif unexpected_broken_dylibs.empty?
|
||||||
puts "No unexpected broken library linkage detected."
|
puts "No unexpected broken library linkage detected."
|
||||||
else
|
else
|
||||||
puts "Broken library linkage detected"
|
puts "Unexpected missing library linkage detected"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
puts "Unexpected non-missing linkage detected" if unexpected_present_dylibs.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def broken_library_linkage?
|
def broken_library_linkage?
|
||||||
issues = [@broken_deps, @unwanted_system_dylibs, @version_conflict_deps]
|
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
|
end
|
||||||
|
|
||||||
def unexpected_broken_dylibs
|
def unexpected_broken_dylibs
|
||||||
@ -90,6 +94,19 @@ class LinkageChecker
|
|||||||
end
|
end
|
||||||
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
|
def broken_dylibs_with_expectations
|
||||||
output = {}
|
output = {}
|
||||||
@broken_dylibs.each do |broken_lib|
|
@broken_dylibs.each do |broken_lib|
|
||||||
@ -291,7 +308,11 @@ class LinkageChecker
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
things.sort.each do |item|
|
things.sort.each do |item|
|
||||||
output += "\n #{item}"
|
output += if item.is_a? Regexp
|
||||||
|
"\n #{item.inspect}"
|
||||||
|
else
|
||||||
|
"\n #{item}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
puts output if puts_output
|
puts output if puts_output
|
||||||
|
Loading…
x
Reference in New Issue
Block a user