diff --git a/Library/Homebrew/formula_cellar_checks.rb b/Library/Homebrew/formula_cellar_checks.rb index 77e6050314..cff0baa647 100644 --- a/Library/Homebrew/formula_cellar_checks.rb +++ b/Library/Homebrew/formula_cellar_checks.rb @@ -314,6 +314,24 @@ 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? + # There is no `binary_executable_or_library_files` method for the generic OS + return if !OS.mac? && !OS.linux? + + keg = Keg.new(formula.prefix) + mismatches = keg.binary_executable_or_library_files.reject do |file| + file.arch == Hardware::CPU.arch + end + return if mismatches.empty? + + <<~EOS + Binaries built for a non-native architecture were installed into #{formula}'s prefix. + The offending files are: + #{mismatches * "\n "} + EOS + end + def audit_installed @new_formula ||= false @@ -334,6 +352,7 @@ module FormulaCellarChecks problem_if_output(check_plist(formula.prefix, formula.plist)) problem_if_output(check_python_symlinks(formula.name, formula.keg_only?)) problem_if_output(check_cpuid_instruction(formula)) + problem_if_output(check_binary_arches(formula)) end alias generic_audit_installed audit_installed diff --git a/Library/Homebrew/os/linux/elf.rb b/Library/Homebrew/os/linux/elf.rb index f31a40f806..77bf6f4139 100644 --- a/Library/Homebrew/os/linux/elf.rb +++ b/Library/Homebrew/os/linux/elf.rb @@ -33,7 +33,7 @@ module ELFShim private_constant :ARCHITECTURE_POWERPC ARCHITECTURE_ARM = 0x28 private_constant :ARCHITECTURE_ARM - ARCHITECTURE_X86_64 = 0x62 + ARCHITECTURE_X86_64 = 0x3E private_constant :ARCHITECTURE_X86_64 ARCHITECTURE_AARCH64 = 0xB7 private_constant :ARCHITECTURE_AARCH64 diff --git a/Library/Homebrew/os/mac/mach.rb b/Library/Homebrew/os/mac/mach.rb index adae8e32f6..0b4d8a0c63 100644 --- a/Library/Homebrew/os/mac/mach.rb +++ b/Library/Homebrew/os/mac/mach.rb @@ -29,7 +29,7 @@ module MachOShim machos.each do |m| arch = case m.cputype - when :x86_64, :i386, :ppc64 then m.cputype + when :x86_64, :i386, :ppc64, :arm64, :arm then m.cputype when :ppc then :ppc7400 else :dunno end