reset formula_cellar_checks

This commit is contained in:
hyuraku 2023-01-26 21:41:01 +09:00
parent f1eacb04f0
commit 9241def1a2
3 changed files with 49 additions and 98 deletions

View File

@ -8,53 +8,4 @@ module FormulaCellarChecks
generic_valid_library_extension?(filename) || filename.basename.to_s.include?(".so.")
end
sig {params(formula: T.untyped).returns(T.nilable(String))}
def check_binary_arches(formula)
return unless formula.prefix.directory?
keg = Keg.new(formula.prefix)
mismatches = {}
keg.binary_executable_or_library_files.each do |file|
farch = file.arch
mismatches[file] = farch unless farch == Hardware::CPU.arch
end
return if mismatches.empty?
compatible_universal_binaries, mismatches = mismatches.partition do |file, arch|
arch == :universal && file.archs.include?(Hardware::CPU.arch)
end.map(&:to_h) # To prevent transformation into nested arrays
universal_binaries_expected = if formula.tap.present? && formula.tap.core_tap?
formula.tap.audit_exception(:universal_binary_allowlist, formula.name)
else
true
end
return if mismatches.empty? && universal_binaries_expected
mismatches_expected = formula.tap.blank? ||
formula.tap.audit_exception(:mismatched_binary_allowlist, formula.name)
return if compatible_universal_binaries.empty? && mismatches_expected
return if universal_binaries_expected && mismatches_expected
s = ""
if mismatches.present? && !mismatches_expected
s += <<~EOS
Binaries built for a non-native architecture were installed into #{formula}'s prefix.
The offending files are:
#{mismatches.map { |m| "#{m.first}\t(#{m.last})" } * "\n "}
EOS
end
if compatible_universal_binaries.present? && !universal_binaries_expected
s += <<~EOS
Unexpected universal binaries were found.
The offending files are:
#{compatible_universal_binaries.keys * "\n "}
EOS
end
s
end
end

View File

@ -113,55 +113,6 @@ module FormulaCellarChecks
EOS
end
def check_binary_arches(formula)
return unless formula.prefix.directory?
keg = Keg.new(formula.prefix)
mismatches = {}
keg.binary_executable_or_library_files.each do |file|
farch = file.arch
mismatches[file] = farch unless farch == Hardware::CPU.arch
end
return if mismatches.empty?
compatible_universal_binaries, mismatches = mismatches.partition do |file, arch|
arch == :universal && file.archs.include?(Hardware::CPU.arch)
end.map(&:to_h) # To prevent transformation into nested arrays
universal_binaries_expected = if formula.tap.present? && formula.tap.core_tap?
formula.tap.audit_exception(:universal_binary_allowlist, formula.name)
else
true
end
return if mismatches.empty? && universal_binaries_expected
mismatches_expected = formula.tap.blank? ||
formula.tap.audit_exception(:mismatched_binary_allowlist, formula.name)
return if compatible_universal_binaries.empty? && mismatches_expected
return if universal_binaries_expected && mismatches_expected
s = ""
if mismatches.present? && !mismatches_expected
s += <<~EOS
Binaries built for a non-native architecture were installed into #{formula}'s prefix.
The offending files are:
#{mismatches.map { |m| "#{m.first}\t(#{m.last})" } * "\n "}
EOS
end
if compatible_universal_binaries.present? && !universal_binaries_expected
s += <<~EOS
Unexpected universal binaries were found.
The offending files are:
#{compatible_universal_binaries.keys * "\n "}
EOS
end
s
end
def audit_installed
generic_audit_installed
problem_if_output(check_shadowed_headers)

View File

@ -315,6 +315,55 @@ module FormulaCellarChecks
"No `cpuid` instruction detected. #{formula} should not use `ENV.runtime_cpu_detection`."
end
def check_binary_arches(formula)
return unless formula.prefix.directory?
keg = Keg.new(formula.prefix)
mismatches = {}
keg.binary_executable_or_library_files.each do |file|
farch = file.arch
mismatches[file] = farch unless farch == Hardware::CPU.arch
end
return if mismatches.empty?
compatible_universal_binaries, mismatches = mismatches.partition do |file, arch|
arch == :universal && file.archs.include?(Hardware::CPU.arch)
end.map(&:to_h) # To prevent transformation into nested arrays
universal_binaries_expected = if formula.tap.present? && formula.tap.core_tap?
formula.tap.audit_exception(:universal_binary_allowlist, formula.name)
else
true
end
return if mismatches.empty? && universal_binaries_expected
mismatches_expected = formula.tap.blank? ||
formula.tap.audit_exception(:mismatched_binary_allowlist, formula.name)
return if compatible_universal_binaries.empty? && mismatches_expected
return if universal_binaries_expected && mismatches_expected
s = ""
if mismatches.present? && !mismatches_expected
s += <<~EOS
Binaries built for a non-native architecture were installed into #{formula}'s prefix.
The offending files are:
#{mismatches.map { |m| "#{m.first}\t(#{m.last})" } * "\n "}
EOS
end
if compatible_universal_binaries.present? && !universal_binaries_expected
s += <<~EOS
Unexpected universal binaries were found.
The offending files are:
#{compatible_universal_binaries.keys * "\n "}
EOS
end
s
end
def audit_installed
@new_formula ||= false