diff options
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/build_environment.rb | 25 | ||||
| -rw-r--r-- | Library/Homebrew/dependencies.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/formula.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_build_environment.rb | 33 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_requirement.rb | 11 | 
5 files changed, 65 insertions, 26 deletions
diff --git a/Library/Homebrew/build_environment.rb b/Library/Homebrew/build_environment.rb index 97a8fae42..18876f954 100644 --- a/Library/Homebrew/build_environment.rb +++ b/Library/Homebrew/build_environment.rb @@ -17,4 +17,29 @@ class BuildEnvironment    def userpaths?      @settings.include? :userpaths    end + +  def modify_build_environment +    p = @settings.find { |s| Proc === s } +    ENV.instance_eval(&p) unless p.nil? +  end + +  def _dump(*) +    @settings.dup.reject { |s| Proc === s }.join(":") +  end + +  def self._load(s) +    new(*s.split(":").map(&:to_sym)) +  end +end + +module BuildEnvironmentDSL +  def env(*settings, &block) +    @env ||= BuildEnvironment.new +    if block_given? +      @env << block +    else +      settings.each { |s| @env << s } +    end +    @env +  end  end diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index 623591c78..c2dd63d7d 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -170,6 +170,7 @@ end  # By default, Requirements are non-fatal.  class Requirement    include Dependable +  extend BuildEnvironmentDSL    attr_reader :tags @@ -186,9 +187,11 @@ class Requirement    # The message to show when the requirement is not met.    def message; ""; end -  # Requirements can modify the current build environment by overriding this. -  # See X11Dependency -  def modify_build_environment; nil end +  # Overriding modify_build_environment is deprecated, pass a block to +  # the env DSL method instead. +  def modify_build_environment +    env.modify_build_environment +  end    def env      @env ||= self.class.env @@ -206,12 +209,6 @@ class Requirement      def fatal(val=nil)        val.nil? ? @fatal : @fatal = val      end - -    def env(*settings) -      @env ||= BuildEnvironment.new -      settings.each { |s| @env << s } -      @env -    end    end  end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index b7256ff0f..b78434b91 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -11,6 +11,7 @@ require 'extend/set'  class Formula    include FileUtils +  extend BuildEnvironmentDSL    attr_reader :name, :path, :homepage, :downloader    attr_reader :stable, :bottle, :devel, :head, :active_spec @@ -727,12 +728,6 @@ private        @stable.mirror(val)      end -    def env *settings -      @env ||= BuildEnvironment.new -      settings.each { |s| @env << s } -      @env -    end -      def dependencies        @dependencies ||= DependencyCollector.new      end diff --git a/Library/Homebrew/test/test_build_environment.rb b/Library/Homebrew/test/test_build_environment.rb index fde3f3c70..d8a227f51 100644 --- a/Library/Homebrew/test/test_build_environment.rb +++ b/Library/Homebrew/test/test_build_environment.rb @@ -19,4 +19,37 @@ class BuildEnvironmentTests < Test::Unit::TestCase      @env << :userpaths      assert @env.userpaths?    end + +  def test_modify_build_environment +    @env << Proc.new { 1 } +    assert_equal 1, @env.modify_build_environment +  end + +  def test_marshal +    @env << :userpaths +    @env << Proc.new { 1 } +    dump = Marshal.dump(@env) +    assert Marshal.load(dump).userpaths? +  end +end + +class BuildEnvironmentDSLTests < Test::Unit::TestCase +  def make_instance(&block) +    Class.new do +      extend BuildEnvironmentDSL +      def env; self.class.env end +      class_eval(&block) +    end.new +  end + +  def test_env_single_argument +    obj = make_instance { env :userpaths } +    assert obj.env.userpaths? +  end + +  def test_env_multiple_arguments +    obj = make_instance { env :userpaths, :std } +    assert obj.env.userpaths? +    assert obj.env.std? +  end  end diff --git a/Library/Homebrew/test/test_requirement.rb b/Library/Homebrew/test/test_requirement.rb index 7bfb75ff3..28e2afae7 100644 --- a/Library/Homebrew/test/test_requirement.rb +++ b/Library/Homebrew/test/test_requirement.rb @@ -26,17 +26,6 @@ class RequirementTests < Test::Unit::TestCase      assert_equal [:build, "bar"], dep.tags    end -  def test_dsl_env_single_argument -    req = Class.new(Requirement) { env :userpaths }.new -    assert req.env.userpaths? -  end - -  def test_dsl_env_multiple_arguments -    req = Class.new(Requirement) { env :userpaths, :std }.new -    assert req.env.userpaths? -    assert req.env.std? -  end -    def test_dsl_fatal      req = Class.new(Requirement) { fatal true }.new      assert req.fatal?  | 
