aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorJack Nagel2013-01-19 20:45:57 -0600
committerJack Nagel2013-01-21 17:24:10 -0600
commitc53af4211704c9f08366de5eb22251e5ffb4bdd5 (patch)
tree71726184554278030614c95a18f3333bdd96142c /Library/Homebrew
parentd06824c357a43cc2ecb5229784285cb30b037354 (diff)
downloadbrew-c53af4211704c9f08366de5eb22251e5ffb4bdd5.tar.bz2
Allow env DSL to take a block
In addition to env :userpaths env :std requirements can now do env do append 'PATH', '/some/path/to/bin' # and more end
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/build_environment.rb25
-rw-r--r--Library/Homebrew/dependencies.rb15
-rw-r--r--Library/Homebrew/formula.rb7
-rw-r--r--Library/Homebrew/test/test_build_environment.rb33
-rw-r--r--Library/Homebrew/test/test_requirement.rb11
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?