Skip to content

Commit 05876ee

Browse files
committed
compilers: prioritise LLVM clang over GCC on macOS
However, when the formula has a GCC dependency, then try GCC first
1 parent 18ba182 commit 05876ee

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

Library/Homebrew/compilers.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,18 @@ class CompilerSelector
102102
Compiler = Struct.new(:type, :name, :version)
103103

104104
COMPILER_PRIORITY = {
105-
clang: [:clang, :gnu, :llvm_clang],
105+
clang: [:clang, :llvm_clang, :gnu],
106106
gcc: [:gnu, :gcc, :llvm_clang, :clang],
107107
}.freeze
108108

109-
def self.select_for(formula, compilers = self.compilers)
110-
new(formula, DevelopmentTools, compilers).compiler
109+
def self.select_for(formula, compilers = nil, testing_formula: false)
110+
if compilers.nil? && DevelopmentTools.default_compiler == :clang
111+
deps = formula.deps.filter_map do |dep|
112+
dep.name if dep.required? || (testing_formula && dep.test?) || (!testing_formula && dep.build?)
113+
end
114+
compilers = [:clang, :gnu, :llvm_clang] if deps.none?("llvm") && deps.any?(/^gcc(@\d+)?$/)
115+
end
116+
new(formula, DevelopmentTools, compilers || self.compilers).compiler
111117
end
112118

113119
def self.compilers

Library/Homebrew/extend/ENV/shared.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_a
5353
@build_bottle = build_bottle
5454
@bottle_arch = bottle_arch
5555
@debug_symbols = debug_symbols
56+
@testing_formula = testing_formula
5657
reset
5758
end
5859

@@ -221,12 +222,12 @@ def compiler
221222

222223
if @formula
223224
compilers = [compiler] + CompilerSelector.compilers
224-
compiler = CompilerSelector.select_for(@formula, compilers)
225+
compiler = CompilerSelector.select_for(@formula, compilers, testing_formula: @testing_formula)
225226
end
226227

227228
compiler
228229
elsif @formula
229-
CompilerSelector.select_for(@formula)
230+
CompilerSelector.select_for(@formula, testing_formula: @testing_formula)
230231
else
231232
DevelopmentTools.default_compiler
232233
end

0 commit comments

Comments
 (0)