diff --git a/Library/Homebrew/build_options.rb b/Library/Homebrew/build_options.rb index 2e8f741d4f..9ceeab3947 100644 --- a/Library/Homebrew/build_options.rb +++ b/Library/Homebrew/build_options.rb @@ -24,21 +24,23 @@ class BuildOptions # args << "--with-example1" # end 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. #
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 fbe0fa903e..a3b9d7b51a 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 9422792edc..91eedd72d3 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 92b6b7a9c5..b6ca599619 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 984b587ff5..975e2a6104 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 8e647c1b06..f58a22fd87 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 2873ce0483..0281ad70c6 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