diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index aeb7ca4792..46c9eb0cae 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -3,6 +3,11 @@ module SharedEnvExtension FC_FLAG_VARS = %w{FCFLAGS FFLAGS} COMPILERS = ['clang', 'gcc-4.0', 'gcc-4.2', 'llvm-gcc'] + COMPLER_ALIASES = {'gcc' => 'gcc-4.2', 'llvm' => 'llvm-gcc'} + COMPILER_SYMBOL_MAP = { 'gcc-4.0' => :gcc_4_0, + 'gcc-4.2' => :gcc, + 'llvm-gcc' => :llvm, + 'clang' => :clang } def remove_cc_etc keys = %w{CC CXX OBJC OBJCXX LD CPP CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS LDFLAGS CPPFLAGS} @@ -65,6 +70,33 @@ module SharedEnvExtension def fflags; self['FFLAGS']; end def fcflags; self['FCFLAGS']; end + def compiler + if (cc = ARGV.cc) + raise("Invalid value for --cc: #{cc}") if COMPILERS.grep(cc).empty? + COMPILER_SYMBOL_MAP.fetch(cc, cc) + elsif ARGV.include? '--use-gcc' + gcc_installed = Formula.factory('apple-gcc42').installed? rescue false + # fall back to something else on systems without Apple gcc + if MacOS.locate('gcc-4.2') || gcc_installed + :gcc + else + raise "gcc-4.2 not found!" + end + elsif ARGV.include? '--use-llvm' + :llvm + elsif ARGV.include? '--use-clang' + :clang + elsif self['HOMEBREW_CC'] + cc = COMPLER_ALIASES.fetch(self['HOMEBREW_CC'], self['HOMEBREW_CC']) + COMPILER_SYMBOL_MAP.fetch(cc) do |invalid| + opoo "Invalid value for HOMEBREW_CC: #{invalid}" + MacOS.default_compiler + end + else + MacOS.default_compiler + end + end + # Snow Leopard defines an NCURSES value the opposite of most distros # See: http://bugs.python.org/issue6848 # Currently only used by aalib in core diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index a01e38efe6..ae3fc15e5e 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -339,30 +339,6 @@ module Stdenv set_cpu_flags CC_FLAG_VARS, default, map end - # actually c-compiler, so cc would be a better name - def compiler - # test for --flags first so that installs can be overridden on a per - # install basis. Then test for ENVs in inverse order to flags, this is - # sensible, trust me - @compiler ||= if (cc = ARGV.cc) - COMPILERS.grep(cc).pop ? cc : raise("Invalid value for --cc: #{cc}") - elsif ARGV.include? '--use-gcc' - :gcc - elsif ARGV.include? '--use-llvm' - :llvm - elsif ARGV.include? '--use-clang' - :clang - elsif self['HOMEBREW_USE_CLANG'] - :clang - elsif self['HOMEBREW_USE_LLVM'] - :llvm - elsif self['HOMEBREW_USE_GCC'] - :gcc - else - MacOS.default_compiler - end - end - def make_jobs # '-j' requires a positive integral argument if self['HOMEBREW_MAKE_JOBS'].to_i > 0 diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index a24a0668df..1dc4626d0e 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -122,52 +122,8 @@ module Superenv private def determine_cc - if (cc = ARGV.cc) - COMPILERS.grep(cc).pop ? cc : raise("Invalid value for --cc: #{cc}") - elsif ARGV.include? '--use-gcc' - gcc_installed = Formula.factory('apple-gcc42').installed? rescue false - # fall back to something else on systems without Apple gcc - if MacOS.locate('gcc-4.2') || gcc_installed - "gcc-4.2" - else - raise "gcc-4.2 not found!" - end - elsif ARGV.include? '--use-llvm' - "llvm-gcc" - elsif ARGV.include? '--use-clang' - "clang" - elsif self['HOMEBREW_USE_CLANG'] - opoo %{HOMEBREW_USE_CLANG is deprecated, use HOMEBREW_CC="clang" instead} - "clang" - elsif self['HOMEBREW_USE_LLVM'] - opoo %{HOMEBREW_USE_LLVM is deprecated, use HOMEBREW_CC="llvm" instead} - "llvm-gcc" - elsif self['HOMEBREW_USE_GCC'] - opoo %{HOMEBREW_USE_GCC is deprecated, use HOMEBREW_CC="gcc" instead} - "gcc" - elsif self['HOMEBREW_CC'] - case self['HOMEBREW_CC'] - when 'clang', 'gcc-4.0' then self['HOMEBREW_CC'] - # depending on Xcode version plain 'gcc' could actually be - # gcc-4.0 or llvm-gcc - when 'gcc', 'gcc-4.2' then 'gcc-4.2' - when 'llvm', 'llvm-gcc' then 'llvm-gcc' - else - opoo "Invalid value for HOMEBREW_CC: #{self['HOMEBREW_CC'].inspect}" - default_cc - end - else - default_cc - end - end - - def default_cc - case MacOS.default_compiler - when :clang then 'clang' - when :llvm then 'llvm-gcc' - when :gcc then 'gcc-4.2' - when :gcc_4_0 then 'gcc-4.0' - end + cc = compiler + COMPILER_SYMBOL_MAP.invert.fetch(cc, cc) end def determine_path @@ -288,15 +244,6 @@ module Superenv macosxsdk remove_macosxsdk].each{|s| alias_method s, :noop } ### DEPRECATE THESE - def compiler - case self['HOMEBREW_CC'] - when "llvm-gcc" then :llvm - when "gcc-4.2" then :gcc - when "gcc", "clang" then self['HOMEBREW_CC'].to_sym - else - raise "Invalid value for HOMEBREW_CC: #{self['HOMEBREW_CC'].inspect}" - end - end def deparallelize delete('MAKEFLAGS') end