From 0593597a11042823e1fbe1e984fc67c126e09fba Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Tue, 23 Aug 2022 09:38:52 +0100 Subject: [PATCH] linkage_checker: don't reinstall formula on some linkage failures --- Library/Homebrew/dev-cmd/linkage.rb | 2 +- .../Homebrew/extend/os/linux/linkage_checker.rb | 5 +++-- Library/Homebrew/linkage_checker.rb | 15 ++++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb index fcd3d0e7ce..55431777a2 100644 --- a/Library/Homebrew/dev-cmd/linkage.rb +++ b/Library/Homebrew/dev-cmd/linkage.rb @@ -50,7 +50,7 @@ module Homebrew if args.test? result.display_test_output(strict: args.strict?) - Homebrew.failed = true if result.broken_library_linkage?(strict: args.strict?) + Homebrew.failed = true if result.broken_library_linkage?(test: true, strict: args.strict?) elsif args.reverse? result.display_reverse_output else diff --git a/Library/Homebrew/extend/os/linux/linkage_checker.rb b/Library/Homebrew/extend/os/linux/linkage_checker.rb index e94995e966..16016c8a4b 100644 --- a/Library/Homebrew/extend/os/linux/linkage_checker.rb +++ b/Library/Homebrew/extend/os/linux/linkage_checker.rb @@ -52,8 +52,9 @@ class LinkageChecker display_deprecated_warning(strict: strict) end - def broken_library_linkage?(strict: false) - generic_broken_library_linkage?(strict: strict) || (fail_on_libcrypt1?(strict: strict) && @libcrypt_found) + def broken_library_linkage?(test: false, strict: false) + generic_broken_library_linkage?(test: test, strict: strict) || + (fail_on_libcrypt1?(strict: strict) && @libcrypt_found) end private diff --git a/Library/Homebrew/linkage_checker.rb b/Library/Homebrew/linkage_checker.rb index 7887ffe7de..0807be0fdf 100644 --- a/Library/Homebrew/linkage_checker.rb +++ b/Library/Homebrew/linkage_checker.rb @@ -80,11 +80,16 @@ class LinkageChecker alias generic_display_test_output display_test_output private :generic_display_test_output - 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, @files_missing_rpaths] if strict - [issues, unexpected_broken_dylibs, unexpected_present_dylibs].flatten.any?(&:present?) + sig { params(test: T::Boolean, strict: T::Boolean).returns(T::Boolean) } + def broken_library_linkage?(test: false, strict: false) + raise ArgumentError, "Strict linkage checking requires test mode to be enabled." if strict && !test + + issues = [@broken_deps, unexpected_broken_dylibs] + if test + issues += [@unwanted_system_dylibs, @version_conflict_deps, unexpected_present_dylibs] + issues += [@undeclared_deps, @files_missing_rpaths] if strict + end + issues.any?(&:present?) end alias generic_broken_library_linkage? broken_library_linkage? private :generic_broken_library_linkage?