From ab633864d5db641d27fdce49c7c66074b931b19d Mon Sep 17 00:00:00 2001 From: Misty De Meo Date: Sun, 11 Aug 2013 19:11:58 -0700 Subject: [PATCH] Mach: improve PPC arch detection Also adds some reusable constants into the global Hardware::CPU namespace, available on both OS X and Linux. --- Library/Homebrew/hardware.rb | 5 +++++ Library/Homebrew/mach.rb | 32 ++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/hardware.rb b/Library/Homebrew/hardware.rb index 815f4dbc02..44642d44fe 100644 --- a/Library/Homebrew/hardware.rb +++ b/Library/Homebrew/hardware.rb @@ -1,5 +1,10 @@ class Hardware module CPU extend self + INTEL_32BIT_ARCHS = [:i386].freeze + INTEL_64BIT_ARCHS = [:x86_64].freeze + PPC_32BIT_ARCHS = [:ppc, :ppc7400, :ppc7450, :ppc970].freeze + PPC_64BIT_ARCHS = [:ppc64].freeze + def type @type || :dunno end diff --git a/Library/Homebrew/mach.rb b/Library/Homebrew/mach.rb index 44726ac5fd..a2a87db469 100644 --- a/Library/Homebrew/mach.rb +++ b/Library/Homebrew/mach.rb @@ -1,20 +1,44 @@ module ArchitectureListExtension + def fat? + length > 1 + end + + def intel_universal? + intersects_all?(Hardware::CPU::INTEL_32BIT_ARCHS, Hardware::CPU::INTEL_64BIT_ARCHS) + end + + def ppc_universal? + intersects_all?(Hardware::CPU::PPC_32BIT_ARCHS, Hardware::CPU::PPC_64BIT_ARCHS) + end + + # Old-style 32-bit PPC/Intel universal, e.g. ppc7400 and i386 + def cross_universal? + intersects_all?(Hardware::CPU::PPC_32BIT_ARCHS, Hardware::CPU::INTEL_32BIT_ARCHS) + end + def universal? - self.include? :i386 and self.include? :x86_64 + intel_universal? || ppc_universal? || cross_universal? end def ppc? - self.include? :ppc7400 or self.include? :ppc64 + (PPC_32BIT_ARCHS+PPC_64BIT_ARCHS).any? {|a| self.include? a} end def remove_ppc! - self.delete :ppc7400 - self.delete :ppc64 + (Hardware::CPU::PPC_32BIT_ARCHS+Hardware::CPU::PPC_64BIT_ARCHS).each {|a| self.delete a} end def as_arch_flags self.collect{ |a| "-arch #{a}" }.join(' ') end + + protected + + def intersects_all?(*set) + set.all? do |archset| + archset.any? {|a| self.include? a} + end + end end module MachO