mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
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
This commit is contained in:
parent
d06824c357
commit
c53af42117
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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?
|
||||
|
Loading…
x
Reference in New Issue
Block a user