Merge pull request #12454 from carlocab/strict-linkage
linkage: add `--strict` flag to detect opportunistic linkage
This commit is contained in:
commit
001bd96fa3
@ -3,6 +3,9 @@
|
||||
module Homebrew
|
||||
module CLI
|
||||
class Args < OpenStruct
|
||||
sig { returns(T::Boolean) }
|
||||
def strict?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def HEAD?; end
|
||||
|
||||
|
||||
@ -20,6 +20,9 @@ module Homebrew
|
||||
switch "--test",
|
||||
description: "Show only missing libraries and exit with a non-zero status if any missing "\
|
||||
"libraries are found."
|
||||
switch "--strict",
|
||||
depends_on: "--test",
|
||||
description: "Exit with a non-zero status if any undeclared dependencies with linkage are found."
|
||||
switch "--reverse",
|
||||
description: "For every library that a keg references, print its dylib path followed by the "\
|
||||
"binaries that link to it."
|
||||
@ -46,8 +49,8 @@ module Homebrew
|
||||
result = LinkageChecker.new(keg, cache_db: db)
|
||||
|
||||
if args.test?
|
||||
result.display_test_output
|
||||
Homebrew.failed = true if result.broken_library_linkage?
|
||||
result.display_test_output(strict: args.strict?)
|
||||
Homebrew.failed = true if result.broken_library_linkage?(strict: args.strict?)
|
||||
elsif args.reverse?
|
||||
result.display_reverse_output
|
||||
else
|
||||
|
||||
@ -62,17 +62,19 @@ class LinkageChecker
|
||||
end
|
||||
end
|
||||
|
||||
def display_test_output(puts_output: true)
|
||||
def display_test_output(puts_output: true, strict: false)
|
||||
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
|
||||
display_items "Undeclared dependencies with linkage", @undeclared_deps, puts_output: puts_output if strict
|
||||
end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def broken_library_linkage?
|
||||
sig { params(strict: T::Boolean).returns(T::Boolean) }
|
||||
def broken_library_linkage?(strict: false)
|
||||
issues = [@broken_deps, @unwanted_system_dylibs, @version_conflict_deps]
|
||||
issues << @undeclared_deps if strict
|
||||
[issues, unexpected_broken_dylibs, unexpected_present_dylibs].flatten.any?(&:present?)
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user