From 63bf375b0eef96541bd4947915462e8f8a2aa4d5 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Wed, 23 Apr 2014 15:09:01 +0900 Subject: Implement default gem info to use when there is no depending gem is defined. --- tasks/mrbgem_spec.rake | 25 +++++++++++++++++++++++-- tasks/mrbgems.rake | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 1a399be73..ffcf79032 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -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] diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index d8f56f88e..b57f318e0 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -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") -- cgit v1.2.3