formula_cellar_checks: check keg for mismatched arches
There have been a few instances I've noticed that we've been silently installing binaries built for x86_64 on ARM. There's probably more that I haven't found yet, so it seems useful to check this with an audit.
This commit is contained in:
		
							parent
							
								
									12d272abe8
								
							
						
					
					
						commit
						488ccfdf70
					
				@ -314,6 +314,22 @@ 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.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 +350,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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user