aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorMike McQuaid2015-12-14 19:47:19 +0000
committerMike McQuaid2015-12-15 08:37:16 +0000
commite5ba31fcdcc4150e5aa8ecf110cfa502dd62a802 (patch)
treef8075f55b40693a89eec8a5b6e0fe3409f8df64a /Library/Homebrew
parent484c70d19ff17944e4926e7ad3f9bc0fad98797a (diff)
downloadbrew-e5ba31fcdcc4150e5aa8ecf110cfa502dd62a802.tar.bz2
Allow multiple option_names in dep/reqs.
This means that dependencies can be merged but still maintain all their option names. Closes Homebrew/homebrew#46916. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/build_options.rb20
-rw-r--r--Library/Homebrew/dependency.rb13
-rw-r--r--Library/Homebrew/requirement.rb5
-rw-r--r--Library/Homebrew/software_spec.rb12
-rw-r--r--Library/Homebrew/tab.rb11
-rw-r--r--Library/Homebrew/test/test_dependency.rb12
-rw-r--r--Library/Homebrew/test/test_requirement.rb4
7 files changed, 43 insertions, 34 deletions
diff --git a/Library/Homebrew/build_options.rb b/Library/Homebrew/build_options.rb
index 2e8f741d4..9ceeab394 100644
--- a/Library/Homebrew/build_options.rb
+++ b/Library/Homebrew/build_options.rb
@@ -24,21 +24,23 @@ class BuildOptions
# args << "--with-example1"
# end</pre>
def with?(val)
- name = val.respond_to?(:option_name) ? val.option_name : val
+ option_names = val.respond_to?(:option_names) ? val.option_names : [val]
- if option_defined? "with-#{name}"
- include? "with-#{name}"
- elsif option_defined? "without-#{name}"
- !include? "without-#{name}"
- else
- false
+ option_names.any? do |name|
+ if option_defined? "with-#{name}"
+ include? "with-#{name}"
+ elsif option_defined? "without-#{name}"
+ !include? "without-#{name}"
+ else
+ false
+ end
end
end
# True if a {Formula} is being built without a specific option.
# <pre>args << "--no-spam-plz" if build.without? "spam"
- def without?(name)
- !with? name
+ def without?(val)
+ !with?(val)
end
# True if a {Formula} is being built as a bottle (i.e. binary package).
diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb
index fbe0fa903..a3b9d7b51 100644
--- a/Library/Homebrew/dependency.rb
+++ b/Library/Homebrew/dependency.rb
@@ -4,15 +4,15 @@ require "dependable"
class Dependency
include Dependable
- attr_reader :name, :tags, :env_proc, :option_name
+ attr_reader :name, :tags, :env_proc, :option_names
DEFAULT_ENV_PROC = proc {}
- def initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_name = name)
+ def initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_names = [name])
@name = name
@tags = tags
@env_proc = env_proc
- @option_name = option_name
+ @option_names = option_names
end
def to_s
@@ -125,7 +125,8 @@ class Dependency
deps = grouped.fetch(name)
dep = deps.first
tags = deps.flat_map(&:tags).uniq
- dep.class.new(name, tags, dep.env_proc)
+ option_names = deps.flat_map(&:option_names).uniq
+ dep.class.new(name, tags, dep.env_proc, option_names)
end
end
end
@@ -134,9 +135,9 @@ end
class TapDependency < Dependency
attr_reader :tap
- def initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_name = name.split("/").last)
+ def initialize(name, tags = [], env_proc = DEFAULT_ENV_PROC, option_names = [name.split("/").last])
@tap = name.rpartition("/").first
- super(name, tags, env_proc, option_name)
+ super(name, tags, env_proc, option_names)
end
def installed?
diff --git a/Library/Homebrew/requirement.rb b/Library/Homebrew/requirement.rb
index 9422792ed..91eedd72d 100644
--- a/Library/Homebrew/requirement.rb
+++ b/Library/Homebrew/requirement.rb
@@ -10,7 +10,6 @@ class Requirement
include Dependable
attr_reader :tags, :name, :cask, :download, :default_formula
- alias_method :option_name, :name
def initialize(tags = [])
@default_formula = self.class.default_formula
@@ -26,6 +25,10 @@ class Requirement
@name ||= infer_name
end
+ def option_names
+ [name]
+ end
+
# The message to show when the requirement is not met.
def message
s = ""
diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb
index 92b6b7a9c..b6ca59961 100644
--- a/Library/Homebrew/software_spec.rb
+++ b/Library/Homebrew/software_spec.rb
@@ -185,12 +185,12 @@ class SoftwareSpec
end
def add_dep_option(dep)
- name = dep.option_name
-
- if dep.optional? && !option_defined?("with-#{name}")
- options << Option.new("with-#{name}", "Build with #{name} support")
- elsif dep.recommended? && !option_defined?("without-#{name}")
- options << Option.new("without-#{name}", "Build without #{name} support")
+ dep.option_names.each do |name|
+ if dep.optional? && !option_defined?("with-#{name}")
+ options << Option.new("with-#{name}", "Build with #{name} support")
+ elsif dep.recommended? && !option_defined?("without-#{name}")
+ options << Option.new("without-#{name}", "Build without #{name} support")
+ end
end
end
end
diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb
index 984b587ff..975e2a610 100644
--- a/Library/Homebrew/tab.rb
+++ b/Library/Homebrew/tab.rb
@@ -147,12 +147,15 @@ class Tab < OpenStruct
end
def with?(val)
- name = val.respond_to?(:option_name) ? val.option_name : val
- include?("with-#{name}") || unused_options.include?("without-#{name}")
+ option_names = val.respond_to?(:option_names) ? val.option_names : [val]
+
+ option_names.any? do |name|
+ include?("with-#{name}") || unused_options.include?("without-#{name}")
+ end
end
- def without?(name)
- !with? name
+ def without?(val)
+ !with?(val)
end
def include?(opt)
diff --git a/Library/Homebrew/test/test_dependency.rb b/Library/Homebrew/test/test_dependency.rb
index 8e647c1b0..f58a22fd8 100644
--- a/Library/Homebrew/test/test_dependency.rb
+++ b/Library/Homebrew/test/test_dependency.rb
@@ -49,13 +49,13 @@ class DependencyTests < Homebrew::TestCase
foo_named_dep = merged.find {|d| d.name == "foo"}
assert_equal [:build, "bar"], foo_named_dep.tags
- assert_includes foo_named_dep.option_name, "foo"
- assert_includes foo_named_dep.option_name, "foo2"
+ assert_includes foo_named_dep.option_names, "foo"
+ assert_includes foo_named_dep.option_names, "foo2"
xyz_named_dep = merged.find {|d| d.name == "xyz"}
assert_equal ["abc"], xyz_named_dep.tags
- assert_includes xyz_named_dep.option_name, "foo"
- refute_includes xyz_named_dep.option_name, "foo2"
+ assert_includes xyz_named_dep.option_names, "foo"
+ refute_includes xyz_named_dep.option_names, "foo2"
end
def test_equality
@@ -73,8 +73,8 @@ class DependencyTests < Homebrew::TestCase
end
class TapDependencyTests < Homebrew::TestCase
- def test_option_name
+ def test_option_names
dep = TapDependency.new("foo/bar/dog")
- assert_equal "dog", dep.option_name
+ assert_equal %w[dog], dep.option_names
end
end
diff --git a/Library/Homebrew/test/test_requirement.rb b/Library/Homebrew/test/test_requirement.rb
index 2873ce048..0281ad70c 100644
--- a/Library/Homebrew/test/test_requirement.rb
+++ b/Library/Homebrew/test/test_requirement.rb
@@ -14,9 +14,9 @@ class RequirementTests < Homebrew::TestCase
assert_equal %w[bar baz].sort, dep.tags.sort
end
- def test_option_name
+ def test_option_names
dep = TestRequirement.new
- assert_equal "test", dep.option_name
+ assert_equal %w[test], dep.option_names
end
def test_preserves_symbol_tags