linux/diagnostic: add check for versioned GCC linkage
This complements my other two GCC-on-Linux PRs (#13631, #13633), however they are both reliant on bottles eventually being (re-)poured. Let's try to speed that up by returning an error message from `brew doctor` whenever a user has formulae installed that would benefit from a `brew reinstall`.
This commit is contained in:
parent
ba7e146eef
commit
fec5b4080a
@ -139,6 +139,34 @@ module Homebrew
|
||||
e.g. by using homebrew instead).
|
||||
EOS
|
||||
end
|
||||
|
||||
def check_gcc_dependent_linkage
|
||||
gcc_dependents = Formula.installed.select do |formula|
|
||||
next false unless formula.tap&.core_tap?
|
||||
|
||||
formula.recursive_dependencies.map(&:name).include? "gcc"
|
||||
rescue TapFormulaUnavailableError
|
||||
false
|
||||
end
|
||||
return if gcc_dependents.empty?
|
||||
|
||||
badly_linked = gcc_dependents.select do |dependent|
|
||||
keg = Keg.new(dependent.prefix)
|
||||
keg.binary_executable_or_library_files.any? do |binary|
|
||||
paths = binary.rpath.split(":")
|
||||
versioned_linkage = paths.any? { |path| path.match?(%r{lib/gcc/\d+$}) }
|
||||
unversioned_linkage = paths.any? { |path| path.match?(%r{lib/gcc/current$}) }
|
||||
|
||||
versioned_linkage && !unversioned_linkage
|
||||
end
|
||||
end
|
||||
return if badly_linked.empty?
|
||||
|
||||
inject_file_list badly_linked, <<~EOS
|
||||
Formulae which link to GCC through a versioned path were found. These formulae
|
||||
are prone to breaking when GCC is updated. You should `brew reinstall` these formulae:
|
||||
EOS
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user