diff options
Diffstat (limited to 'Library/Homebrew/compilers.rb')
| -rw-r--r-- | Library/Homebrew/compilers.rb | 43 | 
1 files changed, 34 insertions, 9 deletions
| diff --git a/Library/Homebrew/compilers.rb b/Library/Homebrew/compilers.rb index 9561fc0fb..cb7d74334 100644 --- a/Library/Homebrew/compilers.rb +++ b/Library/Homebrew/compilers.rb @@ -1,30 +1,55 @@  class Compiler < Struct.new(:name, :priority) -  def build -    MacOS.send("#{name}_build_version") +  # The full version of the compiler for comparison purposes. +  def version +    if name.is_a? String +      MacOS.non_apple_gcc_version(name) +    else +      MacOS.send("#{name}_build_version") +    end    end -  def version -    MacOS.non_apple_gcc_version(name) if name.is_a? String +  # This is exposed under the `build` name for compatibility, since +  # `fails_with` continues to use `build` in the public API. +  # `build` indicates the build number of an Apple compiler. +  # This is preferred over version numbers since there are often +  # significant differences within the same version, +  # e.g. GCC 4.2 build 5553 vs 5666. +  # Non-Apple compilers don't have build numbers. +  alias_method :build, :version + +  # The major version for non-Apple compilers. Used to indicate a compiler +  # series; for instance, if the version is 4.8.2, it would return "4.8". +  def major_version +    version.match(/(\d\.\d)/)[0] if name.is_a? String    end  end  class CompilerFailure -  attr_reader :compiler, :version -  attr_rw :build, :cause +  attr_reader :compiler, :major_version +  attr_rw :cause, :version    def initialize compiler, &block      # Non-Apple compilers are in the format fails_with compiler => version      if compiler.is_a? Hash        # currently the only compiler for this case is GCC -      _, @version = compiler.shift -      @compiler = 'gcc-' + @version.match(/(\d\.\d)/)[0] +      _, @major_version = compiler.shift +      @compiler = 'gcc-' + @major_version      else        @compiler = compiler      end      instance_eval(&block) if block_given? -    @build = (@build || 9999).to_i unless compiler.is_a? Hash +    if !compiler.is_a? Hash +      @version = (@version || 9999).to_i +    else +      # so fails_with :gcc => '4.8' simply marks all 4.8 releases incompatible +      @version ||= @major_version + '.999' if compiler.is_a? Hash +    end    end + +  # Allows Apple compiler `fails_with` statements to keep using `build` +  # even though `build` and `value` are the same internally +  alias_method :build, :version  end  class CompilerQueue | 
