aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorAdam Vandenberg2012-03-20 19:43:41 -0700
committerAdam Vandenberg2012-03-20 19:43:41 -0700
commit07736cb8fa372e8479e2cc24a67d1f73ee6030cd (patch)
tree721f02b893a8a4624401d1c41841ac01093dba4e /Library/Homebrew
parent54f1837d237b2c1b09d96815bd8a990ac1c951e5 (diff)
downloadbrew-07736cb8fa372e8479e2cc24a67d1f73ee6030cd.tar.bz2
Allow a different package and import name for language deps.
Some times the module to import is different than the module to install when dealing with external dependencies. This change allows an optional import name to be specififed when it is different from the module name. Closes Homebrew/homebrew#11078.
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/dependencies.rb29
-rw-r--r--Library/Homebrew/test/test_external_deps.rb169
2 files changed, 49 insertions, 149 deletions
diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb
index 3d92d45e6..06fa4b5d0 100644
--- a/Library/Homebrew/dependencies.rb
+++ b/Library/Homebrew/dependencies.rb
@@ -36,7 +36,7 @@ class DependencyCollector
when Array
@deps << Dependency.new(key, value)
when *LANGUAGE_MODULES
- @external_deps << LanguageModuleDependency.new(key, value)
+ @external_deps << LanguageModuleDependency.new(value, key)
else
# :optional, :recommended, :build, :universal and "32bit" are predefined
@deps << Dependency.new(key, [value])
@@ -92,9 +92,10 @@ end
# A dependency on a language-specific module.
class LanguageModuleDependency < Requirement
- def initialize module_name, type
+ def initialize language, module_name, import_name=nil
+ @language = language
@module_name = module_name
- @type = type
+ @import_name = import_name || module_name
end
def fatal?; true; end
@@ -105,26 +106,26 @@ class LanguageModuleDependency < Requirement
def message; <<-EOS.undent
Unsatisfied dependency: #{@module_name}
- Homebrew does not provide #{@type.to_s.capitalize} dependencies; install with:
+ Homebrew does not provide #{@language.to_s.capitalize} dependencies; install with:
#{command_line} #{@module_name}
EOS
end
def the_test
- case @type
- when :chicken then %W{/usr/bin/env csi -e (use #{@module_name})}
- when :jruby then %W{/usr/bin/env jruby -rubygems -e require\ '#{@module_name}'}
- when :lua then %W{/usr/bin/env luarocks show #{@module_name}}
- when :node then %W{/usr/bin/env node -e require('#{@module_name}');}
- when :perl then %W{/usr/bin/env perl -e use\ #{@module_name}}
- when :python then %W{/usr/bin/env python -c import\ #{@module_name}}
- when :ruby then %W{/usr/bin/env ruby -rubygems -e require\ '#{@module_name}'}
- when :rbx then %W{/usr/bin/env rbx -rubygems -e require\ '#{@module_name}'}
+ case @language
+ when :chicken then %W{/usr/bin/env csi -e (use #{@import_name})}
+ when :jruby then %W{/usr/bin/env jruby -rubygems -e require\ '#{@import_name}'}
+ when :lua then %W{/usr/bin/env luarocks show #{@import_name}}
+ when :node then %W{/usr/bin/env node -e require('#{@import_name}');}
+ when :perl then %W{/usr/bin/env perl -e use\ #{@import_name}}
+ when :python then %W{/usr/bin/env python -c import\ #{@import_name}}
+ when :ruby then %W{/usr/bin/env ruby -rubygems -e require\ '#{@import_name}'}
+ when :rbx then %W{/usr/bin/env rbx -rubygems -e require\ '#{@import_name}'}
end
end
def command_line
- case @type
+ case @language
when :chicken then "chicken-install"
when :jruby then "jruby -S gem install"
when :lua then "luarocks install"
diff --git a/Library/Homebrew/test/test_external_deps.rb b/Library/Homebrew/test/test_external_deps.rb
index ed6ce60ba..2d955dc26 100644
--- a/Library/Homebrew/test/test_external_deps.rb
+++ b/Library/Homebrew/test/test_external_deps.rb
@@ -9,194 +9,93 @@ require 'formula_installer'
require 'utils'
-class BadPerlBall <TestBall
- depends_on "notapackage" => :perl
-
- def initialize name=nil
- super "uses_perl_ball"
- end
-end
-
-class GoodPerlBall <TestBall
- depends_on "ENV" => :perl
-
- def initialize name=nil
- super "uses_perl_ball"
- end
-end
-
-class BadPythonBall <TestBall
- depends_on "notapackage" => :python
-
- def initialize name=nil
- super "uses_python_ball"
- end
-end
-
-class GoodPythonBall <TestBall
- depends_on "datetime" => :python
-
- def initialize name=nil
- super "uses_python_ball"
- end
-end
-
-class BadRubyBall <TestBall
- depends_on "notapackage" => :ruby
-
- def initialize name=nil
- super "uses_ruby_ball"
- end
-end
-
-class GoodRubyBall <TestBall
- depends_on "date" => :ruby
-
- def initialize name=nil
- super "uses_ruby_ball"
- end
-end
-
-class BadJRubyBall <TestBall
- depends_on "notapackage" => :jruby
-
- def initialize name=nil
- super "uses_jruby_ball"
- end
-end
-
-class GoodJRubyBall <TestBall
- depends_on "date" => :jruby
-
- def initialize name=nil
- super "uses_jruby_ball"
- end
-end
-
-class BadChickenBall <TestBall
- depends_on "notapackage" => :chicken
-
- def initialize name=nil
- super "uses_chicken_ball"
- end
-end
-
-class GoodChickenBall <TestBall
- depends_on "extras" => :chicken
-
- def initialize name=nil
- super "uses_chicken_ball"
- end
-end
-
-class BadRubiniusBall <TestBall
- depends_on "notapackage" => :rbx
-
- def initialize name=nil
- super "uses_rubinius_ball"
- end
-end
-
-class GoodRubiniusBall <TestBall
- depends_on "date" => :rbx
-
- def intialize
- super "uses_rubinius_ball"
- end
-end
-
-class BadNodeBall <TestBall
- depends_on "notapackage" => :node
-
- def initialize
- super "uses_node_ball"
- end
-end
+class ExternalDepsTests < Test::Unit::TestCase
+ def check_deps_fail specs
+ d = DependencyCollector.new
+ specs.each do |key, value|
+ d.add key => value
+ end
-class GoodNodeBall <TestBall
- depends_on "util" => :node
+ # Should have found a dep
+ assert d.external_deps.size == 1
- def initialize
- super "uses_node_balls"
+ d.external_deps do |dep|
+ assert !d.satisfied?
+ end
end
-end
-
-class ExternalDepsTests < Test::Unit::TestCase
- def check_deps_fail f
- assert_raises(UnsatisfiedRequirement) do
- f.new.external_deps.each do |dep|
- raise UnsatisfiedRequirement.new(f, dep) unless dep.satisfied?
- end
+ def check_deps_pass specs
+ d = DependencyCollector.new
+ specs.each do |key, value|
+ d.add key => value
end
- end
- def check_deps_pass f
- assert_nothing_raised do
- f.new.external_deps.each do |dep|
- raise UnsatisfiedRequirement.new(f, dep) unless dep.satisfied?
- end
+ # Should have found a dep
+ assert d.external_deps.size == 1
+
+ d.external_deps do |dep|
+ assert d.satisfied?
end
end
def test_bad_perl_deps
- check_deps_fail BadPerlBall
+ check_deps_fail "notapackage" => :perl
end
def test_good_perl_deps
- check_deps_pass GoodPerlBall
+ check_deps_pass "ENV" => :perl
end
def test_bad_python_deps
- check_deps_fail BadPythonBall
+ check_deps_fail "notapackage" => :python
end
def test_good_python_deps
- check_deps_pass GoodPythonBall
+ check_deps_pass "datetime" => :python
end
def test_bad_ruby_deps
- check_deps_fail BadRubyBall
+ check_deps_fail "notapackage" => :ruby
end
def test_good_ruby_deps
- check_deps_pass GoodRubyBall
+ check_deps_pass "date" => :ruby
end
# Only run these next two tests if jruby is installed.
def test_bad_jruby_deps
- check_deps_fail BadJRubyBall unless `/usr/bin/which jruby`.chomp.empty?
+ check_deps_fail "notapackage" => :jruby if which('jruby')
end
def test_good_jruby_deps
- check_deps_pass GoodJRubyBall unless `/usr/bin/which jruby`.chomp.empty?
+ check_deps_pass "date" => :jruby if which('jruby')
end
# Only run these next two tests if rubinius is installed.
def test_bad_rubinius_deps
- check_deps_fail BadRubiniusBall unless `/usr/bin/which rbx`.chomp.empty?
+ check_deps_fail "notapackage" => :rbx if which('rbx')
end
def test_good_rubinius_deps
- check_deps_pass GoodRubiniusBall unless `/usr/bin/which rbx`.chomp.empty?
+ check_deps_pass "date" => :rbx if which('rbx')
end
# Only run these next two tests if chicken scheme is installed.
def test_bad_chicken_deps
- check_deps_fail BadChickenBall unless `/usr/bin/which csc`.chomp.empty?
+ check_deps_fail "notapackage" => :chicken if which('csc')
end
def test_good_chicken_deps
- check_deps_pass GoodChickenBall unless `/usr/bin/which csc`.chomp.empty?
+ check_deps_pass "extras" => :chicken if which('csc')
end
# Only run these next two tests if node.js is installed.
def test_bad_node_deps
- check_deps_fail BadNodeBall unless `/usr/bin/which node`.chomp.empty?
+ check_deps_fail "notapackage" => :node if which('node')
end
def test_good_node_deps
- check_deps_pass GoodNodeBall unless `/usr/bin/which node`.chomp.empty?
+ check_deps_pass "util" => :node if which('node')
end
end