fix: ignore broken kegs during gcc linkage test

Signed-off-by: botantony <antonsm21@gmail.com>
Co-authored-by: Carlo Cabrera <github@carlo.cab>
This commit is contained in:
botantony 2025-03-17 15:44:16 +01:00
parent 8588898530
commit 4b62b9d2c5
No known key found for this signature in database
GPG Key ID: 7FE721557EA6AAD6

View File

@ -143,7 +143,14 @@ module OS
return if gcc_dependents.empty? return if gcc_dependents.empty?
badly_linked = gcc_dependents.select do |dependent| badly_linked = gcc_dependents.select do |dependent|
keg = Keg.new(dependent.prefix) dependent_prefix = dependent.any_installed_prefix
# Keg.new() may raise an error if it is not a directory.
# As the result `brew doctor` may display `Error: <keg> is not a directory`
# instead of proper `doctor` information.
# There are other checks that test that, we can skip broken kegs.
next if dependent_prefix.nil? || !dependent_prefix.exist? || !dependent_prefix.directory?
keg = Keg.new(dependent_prefix)
keg.binary_executable_or_library_files.any? do |binary| keg.binary_executable_or_library_files.any? do |binary|
paths = binary.rpaths paths = binary.rpaths
versioned_linkage = paths.any? { |path| path.match?(%r{lib/gcc/\d+$}) } versioned_linkage = paths.any? { |path| path.match?(%r{lib/gcc/\d+$}) }