aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMax Howell2012-09-03 11:56:29 -0400
committerMax Howell2012-09-03 15:12:31 -0400
commitc35f6cb9d531799ce0e50eb1754a092eab8725d3 (patch)
treec90eb7b5b9cd26f87c96b0ffe06fe9a7c821d5e3 /Library
parentaf06c75d72fe9c3c9f928b1480a5444746d93bd7 (diff)
downloadbrew-c35f6cb9d531799ce0e50eb1754a092eab8725d3.tar.bz2
Set CC and CXX with superenv (again)
It was dumb to have make call different compilers to configure depending on the `servile?` flag. This is not a route to reliability. Instead now we set CC (formula that break if CC is set like Jack be damned, their build-systems are just plain broken and should not be supported). When cc is called we examine HOMEBREW_CC, otherwise we instantiate the tool that was called, just like the formula's build-system will expect. Fixes Homebrew/homebrew#14659 (though the build fails later for me, with the same error for stdenv and superenv).
Diffstat (limited to 'Library')
-rwxr-xr-xLibrary/ENV/4.3/cc31
-rwxr-xr-xLibrary/ENV/4.3/make2
-rw-r--r--Library/Homebrew/superenv.rb12
3 files changed, 22 insertions, 23 deletions
diff --git a/Library/ENV/4.3/cc b/Library/ENV/4.3/cc
index c37d80b9b..027587b4e 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 5ec9dceb1..aff18372e 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 dad217be5..8983b1801 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)+/