diff --git a/Library/ENV/4.3/cc b/Library/ENV/4.3/cc index c37d80b9ba..027587b4e7 100755 --- a/Library/ENV/4.3/cc +++ b/Library/ENV/4.3/cc @@ -1,13 +1,9 @@ #!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0 + #TODO make it work with homebrew/dupes/gcc #TODO? If we find -mmacosx-version-min=10.8, change sdkroot? warn visibly if no such SDK? #TODO fix pkg-config files, should point to /usr/local or /usr/local/opt -#TODO for easier to understand code, don't monkey-patch ENV, just set via a hash from a helper class #TODO create mechanism to specify build effects like %w{-O0 -O4 vanilla-arg-parsing sdk=10.6} etc. -#TODO DSL for lame-env (and rename to typical-env or something better) -#TODO consider always setting CC to cc and instead having HOMEBREW_CC to force cc choice in end toolchain -# in verbose mode print out things like "gcc called, but redirecting to clang" if that happens -#TODO `brew sh`: https://github.com/mxcl/homebrew/issues/14381#issuecomment-8017538 require "#{File.dirname __FILE__}/../libsuperenv" require 'set' @@ -15,13 +11,6 @@ require 'set' def cccfg? flags flags.split('').all?{|c| ENV['HOMEBREW_CCCFG'].include? c } if ENV['HOMEBREW_CCCFG'] end -def servile? - # we are servile when we are called from configure etc. - # * we give the callee the tools it asks for - # * we leave ARGV alone - # when callee is make we optimize and force HOMEBREW_CC - not cccfg? 'O' -end def nclt? $sdkroot != nil end @@ -51,20 +40,21 @@ class Cmd end end def tool - @tool ||= if servile? or @arg0 == 'ld' - @arg0 - elsif @arg0.include? '++' - if ENV['HOMEBREW_CC'].chuzzle =~ /gcc/ + @tool ||= case @arg0 + when 'ld' then 'ld' + when 'cc' then ENV['HOMEBREW_CC'] + when 'c++' + if ENV['HOMEBREW_CC'] =~ /gcc/ 'g++' else 'clang++' end else - ENV['HOMEBREW_CC'].chuzzle or 'clang' + @arg0 end end def args - args = if servile? or tool == 'ld' + args = if not cccfg? 'O' or tool == 'ld' @args.dup else refurbished_args @@ -158,6 +148,11 @@ end ####################################################################### sanity abort "The build-tool has reset ENV. --env=std required." unless ENV['HOMEBREW_BREW_FILE'] +case ENV['HOMEBREW_CC'].chuzzle when 'cc', nil + # those values are not allowed + ENV['HOMEBREW_CC'] = 'clang' +end + ######################################################################### main cmd = Cmd.new($0, ARGV) exec "xcrun", cmd.tool, *cmd.args diff --git a/Library/ENV/4.3/make b/Library/ENV/4.3/make index 5ec9dceb1c..aff18372ef 100755 --- a/Library/ENV/4.3/make +++ b/Library/ENV/4.3/make @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash export HOMEBREW_CCCFG="O$HOMEBREW_CCCFG" if [ $(basename "$0") == "bsdmake" ]; then pwd="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/Library/Homebrew/superenv.rb b/Library/Homebrew/superenv.rb index dad217be5d..8983b18017 100644 --- a/Library/Homebrew/superenv.rb +++ b/Library/Homebrew/superenv.rb @@ -41,7 +41,8 @@ class << ENV def setup_build_environment reset check - ENV['LD'] = 'cc' + ENV['CC'] = ENV['LD'] = 'cc' + ENV['CXX'] = 'c++' ENV['MAKEFLAGS'] ||= "-j#{determine_make_jobs}" ENV['PATH'] = determine_path ENV['PKG_CONFIG_PATH'] = determine_pkg_config_path @@ -198,13 +199,16 @@ class << ENV end alias_method :j1, :deparallelize def gcc - ENV['HOMEBREW_CC'] = "gcc" + ENV['CC'] = ENV['HOMEBREW_CC'] = "gcc" + ENV['CXX'] = "g++" end def llvm - ENV['HOMEBREW_CC'] = "llvm-gcc" + ENV['CC'] = ENV['HOMEBREW_CC'] = "llvm-gcc" + ENV['CXX'] = "g++" end def clang - ENV['HOMEBREW_CC'] = "clang" + ENV['CC'] = ENV['HOMEBREW_CC'] = "clang" + ENV['CXX'] = "clang++" end def make_jobs ENV['MAKEFLAGS'] =~ /-\w*j(\d)+/