Reference self rather than ENV in Superenv module

We want to be able to extend this module onto an arbitrary hash and use
it without mutating ENV, for testing purposes.
This commit is contained in:
Jack Nagel 2013-08-19 12:32:57 -05:00
parent d09e23c8b1
commit 06b1668340

View File

@ -37,25 +37,25 @@ module Superenv
def setup_build_environment def setup_build_environment
reset reset
ENV['CC'] = 'cc' self['CC'] = 'cc'
ENV['CXX'] = 'c++' self['CXX'] = 'c++'
ENV['OBJC'] = 'cc' self['OBJC'] = 'cc'
ENV['OBJCXX'] = 'c++' self['OBJCXX'] = 'c++'
ENV['DEVELOPER_DIR'] = determine_developer_dir self['DEVELOPER_DIR'] = determine_developer_dir
ENV['MAKEFLAGS'] ||= "-j#{determine_make_jobs}" self['MAKEFLAGS'] ||= "-j#{determine_make_jobs}"
ENV['PATH'] = determine_path self['PATH'] = determine_path
ENV['PKG_CONFIG_PATH'] = determine_pkg_config_path self['PKG_CONFIG_PATH'] = determine_pkg_config_path
ENV['PKG_CONFIG_LIBDIR'] = determine_pkg_config_libdir self['PKG_CONFIG_LIBDIR'] = determine_pkg_config_libdir
ENV['HOMEBREW_CC'] = determine_cc self['HOMEBREW_CC'] = determine_cc
ENV['HOMEBREW_CCCFG'] = determine_cccfg self['HOMEBREW_CCCFG'] = determine_cccfg
ENV['HOMEBREW_BREW_FILE'] = HOMEBREW_BREW_FILE self['HOMEBREW_BREW_FILE'] = HOMEBREW_BREW_FILE
ENV['HOMEBREW_SDKROOT'] = "#{MacOS.sdk_path}" if MacOS::Xcode.without_clt? self['HOMEBREW_SDKROOT'] = "#{MacOS.sdk_path}" if MacOS::Xcode.without_clt?
ENV['HOMEBREW_DEVELOPER_DIR'] = determine_developer_dir # used by our xcrun shim self['HOMEBREW_DEVELOPER_DIR'] = determine_developer_dir # used by our xcrun shim
ENV['CMAKE_PREFIX_PATH'] = determine_cmake_prefix_path self['CMAKE_PREFIX_PATH'] = determine_cmake_prefix_path
ENV['CMAKE_FRAMEWORK_PATH'] = determine_cmake_frameworks_path self['CMAKE_FRAMEWORK_PATH'] = determine_cmake_frameworks_path
ENV['CMAKE_INCLUDE_PATH'] = determine_cmake_include_path self['CMAKE_INCLUDE_PATH'] = determine_cmake_include_path
ENV['CMAKE_LIBRARY_PATH'] = determine_cmake_library_path self['CMAKE_LIBRARY_PATH'] = determine_cmake_library_path
ENV['ACLOCAL_PATH'] = determine_aclocal_path self['ACLOCAL_PATH'] = determine_aclocal_path
# The HOMEBREW_CCCFG ENV variable is used by the ENV/cc tool to control # The HOMEBREW_CCCFG ENV variable is used by the ENV/cc tool to control
# compiler flag stripping. It consists of a string of characters which act # compiler flag stripping. It consists of a string of characters which act
@ -75,14 +75,14 @@ module Superenv
# Homebrew's apple-gcc42 will be outside the PATH in superenv, # Homebrew's apple-gcc42 will be outside the PATH in superenv,
# so xcrun may not be able to find it # so xcrun may not be able to find it
if ENV['HOMEBREW_CC'] == 'gcc-4.2' if self['HOMEBREW_CC'] == 'gcc-4.2'
apple_gcc42 = Formula.factory('apple-gcc42') rescue nil apple_gcc42 = Formula.factory('apple-gcc42') rescue nil
ENV.append('PATH', apple_gcc42.opt_prefix/'bin', ':') if apple_gcc42 append('PATH', apple_gcc42.opt_prefix/'bin', ':') if apple_gcc42
end end
end end
def universal_binary def universal_binary
ENV['HOMEBREW_ARCHS'] = Hardware::CPU.universal_archs.join(',') self['HOMEBREW_ARCHS'] = Hardware::CPU.universal_archs.join(',')
append 'HOMEBREW_CCCFG', "u", '' append 'HOMEBREW_CCCFG', "u", ''
end end
@ -106,24 +106,24 @@ module Superenv
"llvm-gcc" "llvm-gcc"
elsif ARGV.include? '--use-clang' elsif ARGV.include? '--use-clang'
"clang" "clang"
elsif ENV['HOMEBREW_USE_CLANG'] elsif self['HOMEBREW_USE_CLANG']
opoo %{HOMEBREW_USE_CLANG is deprecated, use HOMEBREW_CC="clang" instead} opoo %{HOMEBREW_USE_CLANG is deprecated, use HOMEBREW_CC="clang" instead}
"clang" "clang"
elsif ENV['HOMEBREW_USE_LLVM'] elsif self['HOMEBREW_USE_LLVM']
opoo %{HOMEBREW_USE_LLVM is deprecated, use HOMEBREW_CC="llvm" instead} opoo %{HOMEBREW_USE_LLVM is deprecated, use HOMEBREW_CC="llvm" instead}
"llvm-gcc" "llvm-gcc"
elsif ENV['HOMEBREW_USE_GCC'] elsif self['HOMEBREW_USE_GCC']
opoo %{HOMEBREW_USE_GCC is deprecated, use HOMEBREW_CC="gcc" instead} opoo %{HOMEBREW_USE_GCC is deprecated, use HOMEBREW_CC="gcc" instead}
"gcc" "gcc"
elsif ENV['HOMEBREW_CC'] elsif self['HOMEBREW_CC']
case ENV['HOMEBREW_CC'] case self['HOMEBREW_CC']
when 'clang', 'gcc-4.0' then ENV['HOMEBREW_CC'] when 'clang', 'gcc-4.0' then self['HOMEBREW_CC']
# depending on Xcode version plain 'gcc' could actually be # depending on Xcode version plain 'gcc' could actually be
# gcc-4.0 or llvm-gcc # gcc-4.0 or llvm-gcc
when 'gcc', 'gcc-4.2' then 'gcc-4.2' when 'gcc', 'gcc-4.2' then 'gcc-4.2'
when 'llvm', 'llvm-gcc' then 'llvm-gcc' when 'llvm', 'llvm-gcc' then 'llvm-gcc'
else else
opoo "Invalid value for HOMEBREW_CC: #{ENV['HOMEBREW_CC'].inspect}" opoo "Invalid value for HOMEBREW_CC: #{self['HOMEBREW_CC'].inspect}"
default_cc default_cc
end end
else else
@ -206,7 +206,7 @@ module Superenv
end end
def determine_make_jobs def determine_make_jobs
if (j = ENV['HOMEBREW_MAKE_JOBS'].to_i) < 1 if (j = self['HOMEBREW_MAKE_JOBS'].to_i) < 1
Hardware::CPU.cores Hardware::CPU.cores
else else
j j
@ -237,7 +237,7 @@ module Superenv
# If Xcode path is fucked then this is basically a fix. In the case where # If Xcode path is fucked then this is basically a fix. In the case where
# nothing is valid, it still fixes most usage to supply a valid path that # nothing is valid, it still fixes most usage to supply a valid path that
# is not "/". # is not "/".
MacOS::Xcode.prefix || ENV['DEVELOPER_DIR'] MacOS::Xcode.prefix || self['DEVELOPER_DIR']
end end
public public
@ -251,12 +251,12 @@ module Superenv
### DEPRECATE THESE ### DEPRECATE THESE
def compiler def compiler
case ENV['HOMEBREW_CC'] case self['HOMEBREW_CC']
when "llvm-gcc" then :llvm when "llvm-gcc" then :llvm
when "gcc-4.2" then :gcc when "gcc-4.2" then :gcc
when "gcc", "clang" then ENV['HOMEBREW_CC'].to_sym when "gcc", "clang" then self['HOMEBREW_CC'].to_sym
else else
raise "Invalid value for HOMEBREW_CC: #{ENV['HOMEBREW_CC'].inspect}" raise "Invalid value for HOMEBREW_CC: #{self['HOMEBREW_CC'].inspect}"
end end
end end
def deparallelize def deparallelize
@ -264,25 +264,25 @@ module Superenv
end end
alias_method :j1, :deparallelize alias_method :j1, :deparallelize
def gcc def gcc
ENV['CC'] = ENV['OBJC'] = ENV['HOMEBREW_CC'] = "gcc" self['CC'] = self['OBJC'] = self['HOMEBREW_CC'] = "gcc"
ENV['CXX'] = ENV['OBJCXX'] = "g++-4.2" self['CXX'] = self['OBJCXX'] = "g++-4.2"
end end
def llvm def llvm
ENV['CC'] = ENV['OBJC'] = ENV['HOMEBREW_CC'] = "llvm-gcc" self['CC'] = self['OBJC'] = self['HOMEBREW_CC'] = "llvm-gcc"
ENV['CXX'] = ENV['OBJCXX'] = "llvm-g++-4.2" self['CXX'] = self['OBJCXX'] = "llvm-g++-4.2"
end end
def clang def clang
ENV['CC'] = ENV['OBJC'] = ENV['HOMEBREW_CC'] = "clang" self['CC'] = self['OBJC'] = self['HOMEBREW_CC'] = "clang"
ENV['CXX'] = ENV['OBJCXX'] = "clang++" self['CXX'] = self['OBJCXX'] = "clang++"
end end
def make_jobs def make_jobs
ENV['MAKEFLAGS'] =~ /-\w*j(\d)+/ self['MAKEFLAGS'] =~ /-\w*j(\d)+/
[$1.to_i, 1].max [$1.to_i, 1].max
end end
# Many formula assume that CFLAGS etc. will not be nil. # Many formula assume that CFLAGS etc. will not be nil.
# This should be a safe hack to prevent that exception cropping up. # This should be a safe hack to prevent that exception cropping up.
# Main consqeuence of this is that ENV['CFLAGS'] is never nil even when it # Main consqeuence of this is that self['CFLAGS'] is never nil even when it
# is which can break if checks, but we don't do such a check in our code. # is which can break if checks, but we don't do such a check in our code.
def [] key def [] key
if has_key? key if has_key? key