diff --git a/Library/Homebrew/compilers.rb b/Library/Homebrew/compilers.rb index 2cb77302c0..aa1bdfcba1 100644 --- a/Library/Homebrew/compilers.rb +++ b/Library/Homebrew/compilers.rb @@ -102,11 +102,19 @@ class CompilerSelector private + def gnu_gcc_versions + # prioritize gcc version provided by gcc formula. + v = Formulary.factory("gcc").version.to_s.slice(/\d/) + GNU_GCC_VERSIONS - [v] + [v] # move the version to the end of the list + rescue FormulaUnavailableError + GNU_GCC_VERSIONS + end + def find_compiler compilers.each do |compiler| case compiler when :gnu - GNU_GCC_VERSIONS.reverse_each do |v| + gnu_gcc_versions.reverse_each do |v| name = "gcc-#{v}" version = compiler_version(name) yield Compiler.new(name, version) unless version.null? diff --git a/Library/Homebrew/test/compiler_selector_spec.rb b/Library/Homebrew/test/compiler_selector_spec.rb index 8d45b5b1cc..254fdefebf 100644 --- a/Library/Homebrew/test/compiler_selector_spec.rb +++ b/Library/Homebrew/test/compiler_selector_spec.rb @@ -39,6 +39,12 @@ describe CompilerSelector do expect(subject.compiler).to eq("gcc-7") end + it "returns gcc-6 if gcc formula offers gcc-6" do + software_spec.fails_with(:clang) + allow(Formulary).to receive(:factory).with("gcc").and_return(double(version: "6.0")) + expect(subject.compiler).to eq("gcc-6") + end + it "raises an error when gcc or llvm is missing" do software_spec.fails_with(:clang) software_spec.fails_with(gcc: "7")