From 4b62b9d2c5edc661ebd9859e349217cd8c3a4164 Mon Sep 17 00:00:00 2001 From: botantony Date: Mon, 17 Mar 2025 15:44:16 +0100 Subject: [PATCH] fix: ignore broken kegs during gcc linkage test Signed-off-by: botantony Co-authored-by: Carlo Cabrera --- Library/Homebrew/extend/os/linux/diagnostic.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/extend/os/linux/diagnostic.rb b/Library/Homebrew/extend/os/linux/diagnostic.rb index 2aad96cc0c..b3d0e5a510 100644 --- a/Library/Homebrew/extend/os/linux/diagnostic.rb +++ b/Library/Homebrew/extend/os/linux/diagnostic.rb @@ -143,7 +143,14 @@ module OS return if gcc_dependents.empty? 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: 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| paths = binary.rpaths versioned_linkage = paths.any? { |path| path.match?(%r{lib/gcc/\d+$}) }