Support core GCC formula as a GCC compiler.
It is activated by the same mechanism as the Homebrew/versions compilers which now check if the GCC formula uses the same, correct version. References Homebrew/homebrew#28418.
This commit is contained in:
		
							parent
							
								
									593702c70b
								
							
						
					
					
						commit
						55d277c335
					
				@ -185,11 +185,29 @@ module SharedEnvExtension
 | 
			
		||||
    append "LDFLAGS", "-B#{ld64.bin}/"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def gcc_version_formula(version)
 | 
			
		||||
    gcc_formula = Formulary.factory("gcc")
 | 
			
		||||
    return gcc_formula if gcc_formula.version.to_s.include?(version)
 | 
			
		||||
 | 
			
		||||
    gcc_name = 'gcc' + version.delete('.')
 | 
			
		||||
    Formulary.factory(gcc_name)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def warn_about_non_apple_gcc(gcc)
 | 
			
		||||
    begin
 | 
			
		||||
    gcc_name = 'gcc' + gcc.delete('.')
 | 
			
		||||
      gcc = Formulary.factory(gcc_name)
 | 
			
		||||
      if !gcc.opt_prefix.exist?
 | 
			
		||||
 | 
			
		||||
    begin
 | 
			
		||||
      gcc_formula = gcc_version_formula(gcc)
 | 
			
		||||
      if gcc_formula.name == "gcc"
 | 
			
		||||
        return if gcc_formula.opt_prefix.exist?
 | 
			
		||||
        raise <<-EOS.undent
 | 
			
		||||
        The Homebrew GCC was not installed.
 | 
			
		||||
        You must:
 | 
			
		||||
          brew install gcc
 | 
			
		||||
        EOS
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if !gcc_formula.opt_prefix.exist?
 | 
			
		||||
        raise <<-EOS.undent
 | 
			
		||||
        The requested Homebrew GCC, #{gcc_name}, was not installed.
 | 
			
		||||
        You must:
 | 
			
		||||
 | 
			
		||||
@ -73,9 +73,8 @@ module Stdenv
 | 
			
		||||
 | 
			
		||||
    if cc =~ GNU_GCC_REGEXP
 | 
			
		||||
      warn_about_non_apple_gcc($1)
 | 
			
		||||
      gcc_name = 'gcc' + $1.delete('.')
 | 
			
		||||
      gcc = Formulary.factory(gcc_name)
 | 
			
		||||
      self.append_path('PATH', gcc.opt_prefix/'bin')
 | 
			
		||||
      gcc_formula = gcc_version_formula($1)
 | 
			
		||||
      self.append_path('PATH', gcc_formula.opt_prefix/'bin')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Add lib and include etc. from the current macosxsdk to compiler flags:
 | 
			
		||||
 | 
			
		||||
@ -135,9 +135,8 @@ module Superenv
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if self['HOMEBREW_CC'] =~ GNU_GCC_REGEXP
 | 
			
		||||
      gcc_name = 'gcc' + $1.delete('.')
 | 
			
		||||
      gcc = Formulary.factory(gcc_name)
 | 
			
		||||
      paths << gcc.opt_prefix/'bin'
 | 
			
		||||
      gcc_formula = gcc_version_formula($1)
 | 
			
		||||
      paths << gcc_formula.opt_prefix/'bin'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    paths.to_path_s
 | 
			
		||||
 | 
			
		||||
@ -131,8 +131,9 @@ module OS
 | 
			
		||||
    def gcc_42_build_version
 | 
			
		||||
      @gcc_42_build_version ||=
 | 
			
		||||
        begin
 | 
			
		||||
          gcc = MacOS.locate('gcc-4.2') || Formula.factory('apple-gcc42').opt_prefix/'bin/gcc-4.2'
 | 
			
		||||
          raise unless gcc.exist?
 | 
			
		||||
          gcc = MacOS.locate('gcc-4.2')
 | 
			
		||||
          gcc ||= Formula.factory('apple-gcc42').opt_prefix/'bin/gcc-4.2' rescue nil
 | 
			
		||||
          raise if gcc.nil? || !gcc.exist?
 | 
			
		||||
        rescue
 | 
			
		||||
          gcc = nil
 | 
			
		||||
        end
 | 
			
		||||
@ -167,13 +168,16 @@ module OS
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def non_apple_gcc_version(cc)
 | 
			
		||||
      return unless path = locate(cc)
 | 
			
		||||
      path = Formula.factory("gcc").opt_prefix/"bin/#{cc}"
 | 
			
		||||
      path = nil unless path.exist?
 | 
			
		||||
 | 
			
		||||
      return unless path ||= locate(cc)
 | 
			
		||||
 | 
			
		||||
      ivar = "@#{cc.gsub(/(-|\.)/, '')}_version"
 | 
			
		||||
      return instance_variable_get(ivar) if instance_variable_defined?(ivar)
 | 
			
		||||
 | 
			
		||||
      `#{path} --version` =~ /gcc-\d.\d \(GCC\) (\d\.\d\.\d)/
 | 
			
		||||
      instance_variable_set(ivar, $1)
 | 
			
		||||
      `#{path} --version` =~ /gcc(-\d\.\d \(GCC\))? (\d\.\d\.\d)/
 | 
			
		||||
      instance_variable_set(ivar, $2)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # See these issues for some history:
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ class CxxStdlibTests < Test::Unit::TestCase
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_compatibility_same_compilers_and_type
 | 
			
		||||
    assert @gcc.compatible_with?(@gcc)
 | 
			
		||||
    assert @gcc48.compatible_with?(@gcc48)
 | 
			
		||||
    assert @clang.compatible_with?(@clang)
 | 
			
		||||
  end
 | 
			
		||||
@ -33,8 +34,8 @@ class CxxStdlibTests < Test::Unit::TestCase
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_gnu_cross_version_incompatibility
 | 
			
		||||
    assert !@clang.compatible_with?(@gcc48)
 | 
			
		||||
    assert !@gcc48.compatible_with?(@clang)
 | 
			
		||||
    assert !@gcc48.compatible_with?(@gcc49)
 | 
			
		||||
    assert !@gcc49.compatible_with?(@gcc48)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_libstdcxx_libcxx_incompatibility
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user