Implement default gem info to use when there is no depending gem is defined.

This commit is contained in:
take_cheeze
2014-04-23 15:09:01 +09:00
parent f2204ee524
commit 63bf375b0e
2 changed files with 24 additions and 3 deletions
+23 -2
View File
@@ -94,9 +94,10 @@ module MRuby
end
def add_dependency(name, *requirements)
default_gem = requirements.last.kind_of?(Hash) ? requirements.pop : nil
requirements = ['>= 0.0.0'] if requirements.empty?
requirements.flatten!
@dependencies << {:gem => name, :requirements => requirements}
@dependencies << {:gem => name, :requirements => requirements, :default => default_gem}
end
def self.bin=(bin)
@@ -282,9 +283,29 @@ module MRuby
@ary.empty?
end
def check
def check(build)
gem_table = @ary.reduce({}) { |res,v| res[v.name] = v; res }
default_gems = []
each do |g|
g.dependencies.each do |dep|
default_gems << dep if dep[:default] and not gem_table.key? dep[:gem]
end
end
until default_gems.empty?
def_gem = default_gems.pop
spec = build.gem def_gem[:default]
fail "Invalid gem name: #{spec.name} (Expected: #{def_gem[:gem]})" if spec.name != def_gem[:gem]
spec.setup
spec.dependencies.each do |dep|
default_gems << dep if dep[:default] and not gem_table.key? dep[:gem]
end
gem_table[spec.name] = spec
end
each do |g|
g.dependencies.each do |dep|
name = dep[:gem]
+1 -1
View File
@@ -2,7 +2,7 @@ MRuby.each_target do
if enable_gems?
# set up all gems
gems.each(&:setup)
gems.check
gems.check self
# loader all gems
self.libmruby << objfile("#{build_dir}/mrbgems/gem_init")