aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/build_options.rb25
-rw-r--r--Library/Homebrew/formula.rb3
-rw-r--r--Library/Homebrew/python_helper.rb6
-rw-r--r--Library/Homebrew/test/test_build_options.rb20
4 files changed, 42 insertions, 12 deletions
diff --git a/Library/Homebrew/build_options.rb b/Library/Homebrew/build_options.rb
index 0cd3a5a46..441a81bc2 100644
--- a/Library/Homebrew/build_options.rb
+++ b/Library/Homebrew/build_options.rb
@@ -100,13 +100,26 @@ class BuildOptions
# implicit_options are needed because `depends_on 'spam' => 'with-stuff'`
# complains if 'spam' has stuff as default and only defines `--without-stuff`.
def implicit_options
- implicit = unused_options.map do |o|
- if o.name =~ /^with-(.+)$/ && without?($1)
- Option.new("without-#{$1}") # we lose the description, but that's ok
- elsif o.name =~ /^without-(.+)$/ && with?($1)
- Option.new("with-#{$1}")
- end
+ implicit = unused_options.map do |option|
+ opposite_of option unless has_opposite_of? option
end.compact
Options.new(implicit)
end
+
+ def has_opposite_of? option
+ true if args.include? opposite_of option
+ end
+
+ def opposite_of option
+ option = Option.new option
+ if option.name =~ /^with-(.+)$/
+ Option.new("without-#{$1}")
+ elsif option.name =~ /^without-(.+)$/
+ Option.new("with-#{$1}")
+ elsif option.name =~ /^enable-(.+)$/
+ Option.new("disable-#{$1}")
+ elsif option.name =~ /^disable-(.+)$/
+ Option.new("enable-#{$1}")
+ end
+ end
end
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index 39bea8ee6..e5b071c0f 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -515,6 +515,9 @@ class Formula
def test
require 'test/unit/assertions'
extend(Test::Unit::Assertions)
+ # Adding the used options allows us to use `build.with?` inside of tests
+ tab = Tab.for_name(name)
+ tab.used_options.each { |opt| build.args << opt unless build.has_opposite_of? opt }
ret = nil
mktemp do
@testpath = Pathname.pwd
diff --git a/Library/Homebrew/python_helper.rb b/Library/Homebrew/python_helper.rb
index 8ebf0b794..bace441fc 100644
--- a/Library/Homebrew/python_helper.rb
+++ b/Library/Homebrew/python_helper.rb
@@ -16,11 +16,11 @@
def python_helper(options={:allowed_major_versions => [2, 3]}, &block)
if !block_given? and !@current_python.nil?
# We are already inside of a `python do ... end` block, so just return
- # the current_python or false if the version.major is not allowed.
+ # the current_python or nil if the version.major is not allowed.
if options[:allowed_major_versions].include?(@current_python.version.major)
return @current_python
else
- return false
+ return nil
end
end
@@ -42,7 +42,7 @@ def python_helper(options={:allowed_major_versions => [2, 3]}, &block)
end
# Allow to use an else-branch like so: `if python do ... end; else ... end`.
- return false if filtered_python_reqs.empty?
+ return nil if filtered_python_reqs.empty?
# Sort by version, so the older 2.x will be used first and if no
# block_given? then 2.x is preferred because it is returned.
diff --git a/Library/Homebrew/test/test_build_options.rb b/Library/Homebrew/test/test_build_options.rb
index cc5fd01d7..9e2a9e06f 100644
--- a/Library/Homebrew/test/test_build_options.rb
+++ b/Library/Homebrew/test/test_build_options.rb
@@ -1,9 +1,9 @@
-require 'testing_env'
+ require 'testing_env'
require 'build_options'
class BuildOptionsTests < Test::Unit::TestCase
def setup
- args = %w{--with-foo --with-bar --without-qux}
+ args = %w{--with-foo --with-bar --without-qux} # args fake the command line
@build = BuildOptions.new(args)
@build.add("with-foo")
@build.add("with-bar")
@@ -44,7 +44,7 @@ class BuildOptionsTests < Test::Unit::TestCase
end
def test_implicit_options
- # --without-baz is not explicitly specified on the command line
+ # --without-baz is not explicitly specified on the command line (i.e. args)
# therefore --with-baz should be implicitly assumed:
assert @build.implicit_options.include?("--with-baz")
# But all these should not be in the implict_options:
@@ -53,4 +53,18 @@ class BuildOptionsTests < Test::Unit::TestCase
assert !@build.implicit_options.include?("--without-bar")
assert !@build.implicit_options.include?("--with-qux")
end
+
+ def test_opposite_of
+ assert @build.opposite_of(Option.new("with-foo")) == Option.new("without-foo")
+ assert @build.opposite_of("without-foo") == Option.new("with-foo")
+ assert @build.opposite_of(Option.new("enable-spam")) == Option.new("disable-spam")
+ assert @build.opposite_of("disable-beer") == Option.new("enable-beer")
+ end
+
+ def test_has_opposite_of?
+ assert @build.has_opposite_of?("--without-foo")
+ assert @build.has_opposite_of?(Option.new("--with-qux"))
+ assert !@build.has_opposite_of?("--without-qux")
+ assert !@build.has_opposite_of?("--without-nonexisting")
+ end
end