Some more sanity with ENV.compiler

Deprecated use_clang? etc. since the logic was such that multiple states could be set, when in reality only one compiler can be set.

Changed fails_with_llvm handling so if HOMEBREW_USE_LLVM is set then it tries to build even if the formula has fails_with_llvm set. Rationale: mostly they will no longer fail and we need to catch these cases.
This commit is contained in:
Max Howell 2011-08-26 14:21:37 +01:00
parent c659829f29
commit 0822907d6d
2 changed files with 54 additions and 29 deletions

View File

@ -25,14 +25,10 @@ module HomebrewEnvExtension
self['CC'] = '/usr/bin/cc'
self['CXX'] = '/usr/bin/c++'
if MACOS_VERSION >= 10.6
if self.use_clang?
self.clang
elsif self.use_llvm?
self.llvm
elsif self.use_gcc?
self.gcc
end
case self.compiler
when :clang then self.clang
when :llvm then self.llvm
when :gcc then self.gcc
end
# In rare cases this may break your builds, as the tool for some reason wants
@ -141,7 +137,9 @@ module HomebrewEnvExtension
alias_method :gcc_4_2, :gcc
def llvm
if MacOS.xcode_version < '4.1'
if MacOS.xcode_version < '4'
self.gcc
elsif MacOS.xcode_version < '4.1'
self['CC'] = "#{MacOS.xcode_prefix}/usr/bin/llvm-gcc"
self['CXX'] = "#{MacOS.xcode_prefix}/usr/bin/llvm-g++"
else
@ -151,8 +149,12 @@ module HomebrewEnvExtension
end
def clang
if MacOS.xcode_version > '4'
self['CC'] = "#{MacOS.xcode_prefix}/usr/bin/clang"
self['CXX'] = "#{MacOS.xcode_prefix}/usr/bin/clang++"
else
self.gcc
end
end
def fortran
@ -310,14 +312,42 @@ Please take one of the following actions:
remove 'CXXFLAGS', f
end
def compiler
# TODO seems that ENV.clang in a Formula.install should warn when called
# if the user has set something that is tested here
# test for --flags first so that installs can be overridden on a per
# install basis
if ARGV.include? '--use-gcc'
:gcc
elsif ARGV.include? '--use-llvm'
:llvm
elsif ARGV.include? '--use-clang'
:clang
end
# test for ENVs in inverse order to flags, this is sensible, trust me
if self['HOMEBREW_USE_CLANG']
:clang
elsif self['HOMEBREW_USE_LLVM']
:llvm
elsif self['HOMEBREW_USE_GCC']
:gcc
else
:gcc
end
end
# don't use in new code
# don't remove though, but do add to compatibility.rb
def use_clang?
self['HOMEBREW_USE_CLANG'] or ARGV.include? '--use-clang'
compiler == :clang
end
def use_gcc?
self['HOMEBREW_USE_GCC'] or ARGV.include? '--use-gcc'
compiler == :gcc
end
def use_llvm?
self['HOMEBREW_USE_LLVM'] or ARGV.include? '--use-llvm'
compiler == :llvm
end
def make_jobs

View File

@ -296,23 +296,18 @@ class Formula
end
def handle_llvm_failure llvm
unless ENV.use_llvm? or ENV.use_clang?
ENV.gcc_4_2 if MacOS.default_cc =~ /llvm/
case ENV.compiler
case :llvm, :clang
opoo "LLVM was requested, but this formula is reported to not work with LLVM:"
puts llvm.reason
puts
puts "We are continuing anyway so the build succeeds, please let us know so we can"
puts "update the formula. If it doesn't work you can: brew install --use-gcc"
puts
else
ENV.gcc if MacOS.default_cc =~ /llvm/
return
end
opoo "LLVM was requested, but this formula is reported as not working with LLVM:"
puts llvm.reason
if ARGV.force?
puts "Continuing anyway.\n" +
"If this works, let us know so we can update the formula to remove the warning."
else
puts "Continuing with GCC 4.2 instead.\n"+
"(Use `brew install --force #{name}` to force use of LLVM.)"
ENV.gcc_4_2
end
puts
end
def self.class_s name