diff options
Diffstat (limited to 'Library/Homebrew/dependencies.rb')
| -rw-r--r-- | Library/Homebrew/dependencies.rb | 57 |
1 files changed, 49 insertions, 8 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 |
