未验证 提交 001bd96f 编辑于 作者: Carlo Cabrera's avatar Carlo Cabrera 提交者: GitHub
浏览文件

Merge pull request #12454 from carlocab/strict-linkage

linkage: add `--strict` flag to detect opportunistic linkage
......@@ -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
......
支持 Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册