diff --git a/Library/Homebrew/extend/os/linux/formula_cellar_checks.rb b/Library/Homebrew/extend/os/linux/formula_cellar_checks.rb index d447f424e1..dc185b8927 100644 --- a/Library/Homebrew/extend/os/linux/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/linux/formula_cellar_checks.rb @@ -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 diff --git a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb index 157ef730a5..322f4de60b 100644 --- a/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb +++ b/Library/Homebrew/extend/os/mac/formula_cellar_checks.rb @@ -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) diff --git a/Library/Homebrew/formula_cellar_checks.rb b/Library/Homebrew/formula_cellar_checks.rb index 04c34336c1..dfdd699e6a 100644 --- a/Library/Homebrew/formula_cellar_checks.rb +++ b/Library/Homebrew/formula_cellar_checks.rb @@ -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