summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-04-23 23:50:23 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-04-23 23:50:23 +0900
commit75128295d95c80390bff0aba9e517a66b577f781 (patch)
tree676ac1b46b2ced548e219688facc8f2ecb737a54
parentd67693d2f197e72c35d22afc96764697ec274381 (diff)
parent63bf375b0eef96541bd4947915462e8f8a2aa4d5 (diff)
downloadmruby-75128295d95c80390bff0aba9e517a66b577f781.tar.gz
mruby-75128295d95c80390bff0aba9e517a66b577f781.zip
Merge pull request #2108 from take-cheeze/default_gem_info
Implement default gem info to use when there is no depending gem loaded.
-rw-r--r--tasks/mrbgem_spec.rake25
-rw-r--r--tasks/mrbgems.rake2
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")