Commit 75128295 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #2108 from take-cheeze/default_gem_info

Implement default gem info to use when there is no depending gem loaded.
parents d67693d2 63bf375b
......@@ -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]
......
......@@ -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")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment