From 606127a8f43b67a4a695a5c4d3739a44b7a577d8 Mon Sep 17 00:00:00 2001 From: Misty De Meo Date: Sat, 25 Apr 2015 02:03:00 -0700 Subject: ENV.deparallelize: add block form for temporary change Closes #39026. --- Library/Homebrew/extend/ENV/std.rb | 14 ++++++++++++++ Library/Homebrew/extend/ENV/super.rb | 15 ++++++++++++++- Library/Homebrew/test/test_ENV.rb | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) (limited to 'Library') diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index bea13c173..4f3c9887d 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -78,8 +78,22 @@ module Stdenv paths.select { |d| File.directory? d }.join(File::PATH_SEPARATOR) end + # Removes the MAKEFLAGS environment variable, causing make to use a single job. + # This is useful for makefiles with race conditions. + # When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion. + # Returns the value of MAKEFLAGS. def deparallelize + old = self['MAKEFLAGS'] remove 'MAKEFLAGS', /-j\d+/ + if block_given? + begin + yield + ensure + self['MAKEFLAGS'] = old + end + end + + old end alias_method :j1, :deparallelize diff --git a/Library/Homebrew/extend/ENV/super.rb b/Library/Homebrew/extend/ENV/super.rb index d03f10981..603e4c052 100644 --- a/Library/Homebrew/extend/ENV/super.rb +++ b/Library/Homebrew/extend/ENV/super.rb @@ -241,8 +241,21 @@ module Superenv public + # Removes the MAKEFLAGS environment variable, causing make to use a single job. + # This is useful for makefiles with race conditions. + # When passed a block, MAKEFLAGS is removed only for the duration of the block and is restored after its completion. + # Returns the value of MAKEFLAGS. def deparallelize - delete('MAKEFLAGS') + old = delete('MAKEFLAGS') + if block_given? + begin + yield + ensure + self['MAKEFLAGS'] = old + end + end + + old end alias_method :j1, :deparallelize diff --git a/Library/Homebrew/test/test_ENV.rb b/Library/Homebrew/test/test_ENV.rb index 94a182ac2..a40448f77 100644 --- a/Library/Homebrew/test/test_ENV.rb +++ b/Library/Homebrew/test/test_ENV.rb @@ -114,6 +114,14 @@ module SharedEnvTests assert_equal compiler, @env.compiler end end + + def test_deparallelize_block_form_restores_makeflags + @env['MAKEFLAGS'] = '-j4' + @env.deparallelize do + assert_nil @env['MAKEFLAGS'] + end + assert_equal '-j4', @env['MAKEFLAGS'] + end end class StdenvTests < Homebrew::TestCase -- cgit v1.2.3