Add more external dep options

* Chicken Scheme
* Node.js
* Rubinius

Closes Homebrew/homebrew#8466.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
This commit is contained in:
Second Planet 2011-11-05 19:40:21 -04:00 committed by Adam Vandenberg
parent 5d1db0e934
commit 8a4cb8c0ac
4 changed files with 90 additions and 4 deletions

View File

@ -76,8 +76,10 @@ class UnsatisfiedExternalDependencyError < Homebrew::InstallationError
def tool def tool
case type case type
when :python then 'easy_install' when :python then 'easy_install'
when :ruby, :jruby then 'rubygems' when :ruby, :jruby, :rbx then 'rubygems'
when :perl then 'cpan' when :perl then 'cpan'
when :node then 'npm'
when :chicken then 'chicken-install'
end end
end end
@ -91,6 +93,12 @@ class UnsatisfiedExternalDependencyError < Homebrew::InstallationError
"cpan -i" "cpan -i"
when :jruby when :jruby
"jruby -S gem install" "jruby -S gem install"
when :rbx
"rbx gem install"
when :node
"npm install"
when :chicken
"chicken-install"
end end
end end
end end

View File

@ -740,7 +740,7 @@ EOF
def depends_on name def depends_on name
@deps ||= [] @deps ||= []
@external_deps ||= {:python => [], :perl => [], :ruby => [], :jruby => []} @external_deps ||= {:python => [], :perl => [], :ruby => [], :jruby => [], :chicken => [], :rbx => [], :node => []}
case name case name
when String, Formula when String, Formula
@ -748,7 +748,7 @@ EOF
when Hash when Hash
key, value = name.shift key, value = name.shift
case value case value
when :python, :perl, :ruby, :jruby when :python, :perl, :ruby, :jruby, :chicken, :rbx, :node
@external_deps[value] << key @external_deps[value] << key
when :optional, :recommended, :build when :optional, :recommended, :build
@deps << key @deps << key

View File

@ -319,7 +319,10 @@ def external_dep_check dep, type
when :python then %W{/usr/bin/env python -c import\ #{dep}} when :python then %W{/usr/bin/env python -c import\ #{dep}}
when :jruby then %W{/usr/bin/env jruby -rubygems -e require\ '#{dep}'} when :jruby then %W{/usr/bin/env jruby -rubygems -e require\ '#{dep}'}
when :ruby then %W{/usr/bin/env ruby -rubygems -e require\ '#{dep}'} when :ruby then %W{/usr/bin/env ruby -rubygems -e require\ '#{dep}'}
when :rbx then %W{/usr/bin/env rbx -rubygems -e require\ '#{dep}'}
when :perl then %W{/usr/bin/env perl -e use\ #{dep}} when :perl then %W{/usr/bin/env perl -e use\ #{dep}}
when :chicken then %W{/usr/bin/env csi -e (use #{dep})}
when :node then %W{/usr/bin/env node -e require('#{dep}');}
end end
end end
@ -343,7 +346,7 @@ class Formula
end end
def check_external_deps def check_external_deps
[:ruby, :python, :perl, :jruby].each do |type| [:ruby, :python, :perl, :jruby, :rbx, :chicken, :node].each do |type|
self.external_deps[type].each do |dep| self.external_deps[type].each do |dep|
unless quiet_system(*external_dep_check(dep, type)) unless quiet_system(*external_dep_check(dep, type))
raise UnsatisfiedExternalDependencyError.new(dep, type) raise UnsatisfiedExternalDependencyError.new(dep, type)

View File

@ -73,6 +73,54 @@ class GoodJRubyBall <TestBall
end end
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 GoodNodeBall <TestBall
depends_on "util" => :node
def initialize
super "uses_node_balls"
end
end
class ExternalDepsTests < Test::Unit::TestCase class ExternalDepsTests < Test::Unit::TestCase
def check_deps_fail f def check_deps_fail f
@ -120,4 +168,31 @@ class ExternalDepsTests < Test::Unit::TestCase
def test_good_jruby_deps def test_good_jruby_deps
check_deps_pass GoodJRubyBall unless `/usr/bin/which jruby`.chomp.empty? check_deps_pass GoodJRubyBall unless `/usr/bin/which jruby`.chomp.empty?
end 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?
end
def test_good_rubinius_deps
check_deps_pass GoodRubiniusBall unless `/usr/bin/which rbx`.chomp.empty?
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?
end
def test_good_chicken_deps
check_deps_pass GoodChickenBall unless `/usr/bin/which csc`.chomp.empty?
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?
end
def test_good_node_deps
check_deps_pass GoodNodeBall unless `/usr/bin/which node`.chomp.empty?
end
end end