diff options
| author | Jack Nagel | 2013-08-19 12:32:59 -0500 | 
|---|---|---|
| committer | Jack Nagel | 2013-08-19 12:32:59 -0500 | 
| commit | a1ce0dba1233f756a96abf15185dbccffe88ad3b (patch) | |
| tree | 254ec95aba41d566f8b2e63cc164c572027c910a /Library/Homebrew | |
| parent | c0f5d3aa014ee075d063f8c24f8e98ad722a33ce (diff) | |
| download | homebrew-a1ce0dba1233f756a96abf15185dbccffe88ad3b.tar.bz2 | |
More robust implementation of ENV.with_build_environment
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/extend/ENV.rb | 11 | ||||
| -rw-r--r-- | Library/Homebrew/extend/ENV/shared.rb | 8 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_ENV.rb | 57 | 
3 files changed, 48 insertions, 28 deletions
diff --git a/Library/Homebrew/extend/ENV.rb b/Library/Homebrew/extend/ENV.rb index 52404a1c8..7ae8ecc0d 100644 --- a/Library/Homebrew/extend/ENV.rb +++ b/Library/Homebrew/extend/ENV.rb @@ -18,6 +18,17 @@ module EnvActivation        extend(Stdenv)      end    end + +  def with_build_environment +    old_env = to_hash.dup +    tmp_env = to_hash.dup.extend(EnvActivation) +    tmp_env.activate_extensions! +    tmp_env.setup_build_environment +    replace(tmp_env) +    yield +  ensure +    replace(old_env) +  end  end  ENV.extend(EnvActivation) diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index b8d17b2c3..0b5fee954 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -70,14 +70,6 @@ module SharedEnvExtension      prepend 'PATH', HOMEBREW_PREFIX/'bin', ':'    end -  def with_build_environment -    old_env = to_hash -    setup_build_environment -    yield -  ensure -    replace(old_env) -  end -    def fortran      # superenv removes these PATHs, but this option needs them      # TODO fix better, probably by making a super-fc diff --git a/Library/Homebrew/test/test_ENV.rb b/Library/Homebrew/test/test_ENV.rb index 045909c33..45e81d43b 100644 --- a/Library/Homebrew/test/test_ENV.rb +++ b/Library/Homebrew/test/test_ENV.rb @@ -1,42 +1,59 @@  require 'testing_env' +require 'extend/ENV'  class EnvironmentTests < Test::Unit::TestCase +  def setup +    @env = {}.extend(EnvActivation) +    @env.activate_extensions! +  end +    def test_ENV_options -    ENV.gcc_4_0 -    ENV.O3 -    ENV.minimal_optimization -    ENV.no_optimization -    ENV.libxml2 -    ENV.enable_warnings -    assert !ENV.cc.empty? -    assert !ENV.cxx.empty? +    @env.gcc_4_0 +    @env.O3 +    @env.minimal_optimization +    @env.no_optimization +    @env.libxml2 +    @env.enable_warnings +    assert !@env.cc.empty? +    assert !@env.cxx.empty?    end    def test_switching_compilers -    ENV.llvm -    ENV.clang -    assert_nil ENV['LD'] -    assert_equal ENV['OBJC'], ENV['CC'] +    @env.llvm +    @env.clang +    assert_nil @env['LD'] +    assert_equal @env['OBJC'], @env['CC']    end    def test_with_build_environment_restores_env -    before = ENV.to_hash -    ENV.with_build_environment do -      ENV['foo'] = 'bar' +    before = @env.dup +    @env.with_build_environment do +      @env['foo'] = 'bar'      end -    assert_nil ENV['foo'] -    assert_equal before, ENV.to_hash +    assert_nil @env['foo'] +    assert_equal before, @env    end    def test_with_build_environment_ensures_env_restored -    ENV.expects(:replace).with(ENV.to_hash) +    before = @env.dup      begin -      ENV.with_build_environment { raise Exception } +      @env.with_build_environment do +        @env['foo'] = 'bar' +        raise Exception +      end      rescue Exception      end +    assert_nil @env['foo'] +    assert_equal before, @env    end    def test_with_build_environment_returns_block_value -    assert_equal 1, ENV.with_build_environment { 1 } +    assert_equal 1, @env.with_build_environment { 1 } +  end + +  def test_with_build_environment_does_not_mutate_interface +    expected = @env.methods +    @env.with_build_environment { assert_equal expected, @env.methods } +    assert_equal expected, @env.methods    end  end  | 
