aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisty De Meo2015-04-25 02:03:00 -0700
committerMisty De Meo2015-04-25 12:45:31 -0700
commit606127a8f43b67a4a695a5c4d3739a44b7a577d8 (patch)
tree95f12d77a470947203e761c25cb8d88a49347a47
parent8ad6717b72178c8a20c7d1d0a577265edff4d31c (diff)
downloadhomebrew-606127a8f43b67a4a695a5c4d3739a44b7a577d8.tar.bz2
ENV.deparallelize: add block form for temporary change
Closes #39026.
-rw-r--r--Library/Homebrew/extend/ENV/std.rb14
-rw-r--r--Library/Homebrew/extend/ENV/super.rb15
-rw-r--r--Library/Homebrew/test/test_ENV.rb8
3 files changed, 36 insertions, 1 deletions
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