mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Implement default gem info to use when there is no depending gem is defined.
This commit is contained in:
+23
-2
@@ -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
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user