aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMisty De Meo2013-08-24 14:03:16 -0700
committerMisty De Meo2013-08-30 07:52:13 -0700
commit7e1af4b7d550097bd48c0788e9386ee6607ef76c (patch)
tree2efece0a4bf1b606ff61b86ac4744cd60716623a /Library
parent221bb2419f117c820dc235785981b12543836b7e (diff)
downloadbrew-7e1af4b7d550097bd48c0788e9386ee6607ef76c.tar.bz2
Unify compiler selection logic
This unifies the logic for selecting a compiler between superenv and stdenv. A variation of superenv's `determine_cc`, which now returns a symbol, has been moved into the shared ENV extension. Stdenv uses the result of this directly (as it's always used symbols), while superenv translates that back into a compiler string. This also has the effect of disabling HOMEBREW_USE_(gcc|llvm|clang) in stdenv, which have already been marked as deprecated for some time, and enables the HOMEBREW_CC= environment variable syntax from superenv in stdenv.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/extend/ENV/shared.rb32
-rw-r--r--Library/Homebrew/extend/ENV/std.rb24
-rw-r--r--Library/Homebrew/extend/ENV/super.rb57
3 files changed, 34 insertions, 79 deletions
diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb
index aeb7ca479..46c9eb0ca 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 a01e38efe..ae3fc15e5 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 a24a0668d..1dc4626d0 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