Move options to SoftwareSpec

This commit is contained in:
Jack Nagel 2013-09-21 19:27:24 -05:00
parent 2eefba005f
commit a8d3aca169
3 changed files with 40 additions and 20 deletions

View File

@ -17,7 +17,7 @@ class Formula
include Utils::Inreplace include Utils::Inreplace
extend BuildEnvironmentDSL extend BuildEnvironmentDSL
attr_reader :name, :path, :homepage, :downloader attr_reader :name, :path, :homepage, :downloader, :build
attr_reader :stable, :bottle, :devel, :head, :active_spec attr_reader :stable, :bottle, :devel, :head, :active_spec
# The current working directory during builds and tests. # The current working directory during builds and tests.
@ -48,12 +48,7 @@ class Formula
@active_spec = determine_active_spec @active_spec = determine_active_spec
validate_attributes :url, :name, :version validate_attributes :url, :name, :version
@downloader = active_spec.downloader @downloader = active_spec.downloader
@build = determine_build_options
# Combine DSL `option` and `def options`
options.each do |opt, desc|
# make sure to strip "--" from the start of options
self.class.build.add opt[/--(.+)$/, 1], desc
end
@pin = FormulaPin.new(self) @pin = FormulaPin.new(self)
end end
@ -89,9 +84,13 @@ class Formula
end end
def default_build? def default_build?
build = self.class.build.dup self.class.build.used_options.empty?
build.concat(stable.options) end
build.used_options.empty?
def determine_build_options
build = active_spec.build
options.each { |opt, desc| build.add(opt, desc) }
build
end end
def url; active_spec.url; end def url; active_spec.url; end
@ -173,9 +172,6 @@ class Formula
def plist_manual; self.class.plist_manual end def plist_manual; self.class.plist_manual end
def plist_startup; self.class.plist_startup end def plist_startup; self.class.plist_startup end
# Defined and active build-time options.
def build; self.class.build; end
def opt_prefix def opt_prefix
Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}") Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}")
end end
@ -667,7 +663,8 @@ class Formula
end end
def build def build
@build ||= BuildOptions.new(ARGV.options_only) @stable ||= create_spec(SoftwareSpec)
@stable.build
end end
def url val, specs={} def url val, specs={}
@ -732,11 +729,7 @@ class Formula
end end
def option name, description=nil def option name, description=nil
# Support symbols specs.each { |spec| spec.option(name, description) }
name = name.to_s
raise "Option name is required." if name.empty?
raise "Options should not start with dashes." if name[0, 1] == "-"
build.add name, description
end end
def plist_options options def plist_options options

View File

@ -2,11 +2,12 @@ require 'forwardable'
require 'resource' require 'resource'
require 'checksum' require 'checksum'
require 'version' require 'version'
require 'build_options'
class SoftwareSpec class SoftwareSpec
extend Forwardable extend Forwardable
attr_reader :resources, :owner attr_reader :build, :resources, :owner
def_delegators :@resource, :stage, :fetch def_delegators :@resource, :stage, :fetch
def_delegators :@resource, :download_strategy, :verify_download_integrity def_delegators :@resource, :download_strategy, :verify_download_integrity
@ -16,6 +17,7 @@ class SoftwareSpec
def initialize url=nil, version=nil def initialize url=nil, version=nil
@resource = Resource.new(:default, url, version) @resource = Resource.new(:default, url, version)
@resources = {} @resources = {}
@build = BuildOptions.new(ARGV.options_only)
end end
def owner= owner def owner= owner
@ -35,6 +37,13 @@ class SoftwareSpec
resources.fetch(name) { raise ResourceMissingError.new(owner, name) } resources.fetch(name) { raise ResourceMissingError.new(owner, name) }
end end
end end
def option name, description=nil
name = name.to_s if Symbol === name
raise "Option name is required." if name.empty?
raise "Options should not start with dashes." if name[0, 1] == "-"
build.add(name, description)
end
end end
class HeadSoftwareSpec < SoftwareSpec class HeadSoftwareSpec < SoftwareSpec

View File

@ -29,6 +29,24 @@ class SoftwareSpecTests < Test::Unit::TestCase
@spec.owner = owner @spec.owner = owner
@spec.resources.each_value { |r| assert_equal owner, r.owner } @spec.resources.each_value { |r| assert_equal owner, r.owner }
end end
def test_option
@spec.option('foo')
assert @spec.build.has_option? 'foo'
end
def test_option_raises_when_begins_with_dashes
assert_raises(RuntimeError) { @spec.option('--foo') }
end
def test_option_raises_when_name_empty
assert_raises(RuntimeError) { @spec.option('') }
end
def test_option_accepts_symbols
@spec.option(:foo)
assert @spec.build.has_option? 'foo'
end
end end
class HeadSoftwareSpecTests < Test::Unit::TestCase class HeadSoftwareSpecTests < Test::Unit::TestCase