aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/dependencies.rb57
-rw-r--r--Library/Homebrew/test/test_requirement.rb40
-rw-r--r--Library/Homebrew/test/testing_env.rb6
3 files changed, 94 insertions, 9 deletions
diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb
index 54de50f39..adf36c4d9 100644
--- a/Library/Homebrew/dependencies.rb
+++ b/Library/Homebrew/dependencies.rb
@@ -178,19 +178,31 @@ class Requirement
@tags = tags.flatten.compact
end
- # Should return true if this requirement is met.
- def satisfied?; false; end
- # Should return true if not meeting this requirement should fail the build.
+ # The message to show when the requirement is not met.
+ def message; "" end
+
+ # Overriding #satisfied? is deprepcated.
+ # Pass a block or boolean to the satisfied DSL method instead.
+ def satisfied?
+ self.class.satisfy.yielder do |proc|
+ instance_eval(&proc)
+ end
+ rescue NoMethodError
+ self.class.satisfy || false
+ rescue ArgumentError
+ false
+ end
+
+ # Overriding #fatal? is deprecated.
+ # Pass a boolean to the fatal DSL method instead.
def fatal?
self.class.fatal || false
end
- # The message to show when the requirement is not met.
- def message; ""; end
- # Overriding modify_build_environment is deprecated, pass a block to
- # the env DSL method instead.
+ # Overriding #modify_build_environment is deprecated.
+ # Pass a block to the the env DSL method instead.
def modify_build_environment
- env.modify_build_environment(self)
+ satisfied? and env.modify_build_environment(self)
end
def env
@@ -209,6 +221,35 @@ class Requirement
def fatal(val=nil)
val.nil? ? @fatal : @fatal = val
end
+
+ def satisfy(options={}, &block)
+ if block_given?
+ options[:userpaths] = true if env.userpaths?
+ @satisfied ||= Requirement::Satisfier.new(options, &block)
+ else
+ @satisfied ||= options
+ end
+ end
+ end
+
+ class Satisfier
+ def initialize(options={}, &block)
+ @options = { :build_env => true }
+ @options.merge!(options)
+ @proc = block
+ end
+
+ def yielder
+ if @options[:build_env]
+ require 'superenv'
+ ENV.with_build_environment do
+ ENV.userpaths! if @options[:userpaths]
+ yield @proc
+ end
+ else
+ yield @proc
+ end
+ end
end
end
diff --git a/Library/Homebrew/test/test_requirement.rb b/Library/Homebrew/test/test_requirement.rb
index 28e2afae7..0f1cc02de 100644
--- a/Library/Homebrew/test/test_requirement.rb
+++ b/Library/Homebrew/test/test_requirement.rb
@@ -30,4 +30,44 @@ class RequirementTests < Test::Unit::TestCase
req = Class.new(Requirement) { fatal true }.new
assert req.fatal?
end
+
+ def test_satisfy_true
+ req = Class.new(Requirement) do
+ satisfy(:build_env => false) { true }
+ end.new
+ assert req.satisfied?
+ end
+
+ def test_satisfy_false
+ req = Class.new(Requirement) do
+ satisfy(:build_env => false) { false }
+ end.new
+ assert !req.satisfied?
+ end
+
+ def test_satisfy_with_userpaths_from_env
+ ENV.expects(:with_build_environment).yields.returns(true)
+ ENV.expects(:userpaths!)
+ req = Class.new(Requirement) do
+ env :userpaths
+ satisfy(:build_env => true) { true }
+ end.new
+ assert req.satisfied?
+ end
+
+ def test_satisfy_with_userpaths_from_options
+ ENV.expects(:with_build_environment).yields.returns(true)
+ ENV.expects(:userpaths!)
+ req = Class.new(Requirement) do
+ satisfy(:build_env => true, :userpaths => true) { true }
+ end.new
+ assert req.satisfied?
+ end
+
+ def test_satisfy_with_boolean
+ req = Class.new(Requirement) do
+ satisfy true
+ end.new
+ assert req.satisfied?
+ end
end
diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb
index 2380400ea..7206a71f0 100644
--- a/Library/Homebrew/test/testing_env.rb
+++ b/Library/Homebrew/test/testing_env.rb
@@ -31,7 +31,11 @@ MACOS = true
MACOS_VERSION = 10.6
MACOS_FULL_VERSION = '10.6.8'
-(HOMEBREW_PREFIX+'Library/Formula').mkpath
+%w{Library/Formula Library/ENV}.each do |d|
+ HOMEBREW_REPOSITORY.join(d).mkpath
+end
+
+ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| Pathname.new(p).expand_path rescue nil }.compact.freeze
at_exit { HOMEBREW_PREFIX.parent.rmtree }