Move options to SoftwareSpec
This commit is contained in:
parent
2eefba005f
commit
a8d3aca169
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user