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?
|
def userpaths?
|
||||||
@settings.include? :userpaths
|
@settings.include? :userpaths
|
||||||
end
|
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
|
end
|
||||||
|
@ -170,6 +170,7 @@ end
|
|||||||
# By default, Requirements are non-fatal.
|
# By default, Requirements are non-fatal.
|
||||||
class Requirement
|
class Requirement
|
||||||
include Dependable
|
include Dependable
|
||||||
|
extend BuildEnvironmentDSL
|
||||||
|
|
||||||
attr_reader :tags
|
attr_reader :tags
|
||||||
|
|
||||||
@ -186,9 +187,11 @@ class Requirement
|
|||||||
# The message to show when the requirement is not met.
|
# The message to show when the requirement is not met.
|
||||||
def message; ""; end
|
def message; ""; end
|
||||||
|
|
||||||
# Requirements can modify the current build environment by overriding this.
|
# Overriding modify_build_environment is deprecated, pass a block to
|
||||||
# See X11Dependency
|
# the env DSL method instead.
|
||||||
def modify_build_environment; nil end
|
def modify_build_environment
|
||||||
|
env.modify_build_environment
|
||||||
|
end
|
||||||
|
|
||||||
def env
|
def env
|
||||||
@env ||= self.class.env
|
@env ||= self.class.env
|
||||||
@ -206,12 +209,6 @@ class Requirement
|
|||||||
def fatal(val=nil)
|
def fatal(val=nil)
|
||||||
val.nil? ? @fatal : @fatal = val
|
val.nil? ? @fatal : @fatal = val
|
||||||
end
|
end
|
||||||
|
|
||||||
def env(*settings)
|
|
||||||
@env ||= BuildEnvironment.new
|
|
||||||
settings.each { |s| @env << s }
|
|
||||||
@env
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ require 'extend/set'
|
|||||||
|
|
||||||
class Formula
|
class Formula
|
||||||
include FileUtils
|
include FileUtils
|
||||||
|
extend BuildEnvironmentDSL
|
||||||
|
|
||||||
attr_reader :name, :path, :homepage, :downloader
|
attr_reader :name, :path, :homepage, :downloader
|
||||||
attr_reader :stable, :bottle, :devel, :head, :active_spec
|
attr_reader :stable, :bottle, :devel, :head, :active_spec
|
||||||
@ -727,12 +728,6 @@ private
|
|||||||
@stable.mirror(val)
|
@stable.mirror(val)
|
||||||
end
|
end
|
||||||
|
|
||||||
def env *settings
|
|
||||||
@env ||= BuildEnvironment.new
|
|
||||||
settings.each { |s| @env << s }
|
|
||||||
@env
|
|
||||||
end
|
|
||||||
|
|
||||||
def dependencies
|
def dependencies
|
||||||
@dependencies ||= DependencyCollector.new
|
@dependencies ||= DependencyCollector.new
|
||||||
end
|
end
|
||||||
|
@ -19,4 +19,37 @@ class BuildEnvironmentTests < Test::Unit::TestCase
|
|||||||
@env << :userpaths
|
@env << :userpaths
|
||||||
assert @env.userpaths?
|
assert @env.userpaths?
|
||||||
end
|
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
|
end
|
||||||
|
@ -26,17 +26,6 @@ class RequirementTests < Test::Unit::TestCase
|
|||||||
assert_equal [:build, "bar"], dep.tags
|
assert_equal [:build, "bar"], dep.tags
|
||||||
end
|
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
|
def test_dsl_fatal
|
||||||
req = Class.new(Requirement) { fatal true }.new
|
req = Class.new(Requirement) { fatal true }.new
|
||||||
assert req.fatal?
|
assert req.fatal?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user