diff options
Diffstat (limited to 'tasks/mrbgem_spec.rake')
| -rw-r--r-- | tasks/mrbgem_spec.rake | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 2a15a1f46..9e461d42b 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -45,10 +45,6 @@ module MRuby MRuby::Gem.current = self end - def run_test_in_other_mrb_state? - not test_preload.nil? or not test_objs.empty? or not test_args.empty? - end - def setup MRuby::Gem.current = self MRuby::Build::COMMANDS.each do |command| @@ -184,13 +180,15 @@ module MRuby print_gem_comment(f) f.puts %Q[#include <stdlib.h>] f.puts %Q[#include "mruby.h"] - f.puts %Q[#include "mruby/array.h"] f.puts %Q[#include "mruby/irep.h"] - f.puts %Q[#include "mruby/string.h"] f.puts %Q[#include "mruby/variable.h"] f.puts %Q[#include "mruby/hash.h"] unless test_args.empty? end + def test_dependencies + [@name] + end + def version_ok?(req_versions) req_versions.map do |req| cmp, ver = req.split @@ -290,7 +288,7 @@ module MRuby @ary.empty? end - def check(build) + def generate_gem_table gem_table = @ary.reduce({}) { |res,v| res[v.name] = v; res } default_gems = [] @@ -335,9 +333,29 @@ module MRuby fail "Conflicts of gem `#{g.name}` found: #{cfls.join ', '}" unless cfls.empty? end - class << gem_table + gem_table + end + + def tsort_dependencies ary, table, all_dependency_listed = false + unless all_dependency_listed + left = ary.dup + until left.empty? + v = left.pop + table[v].dependencies.each do |dep| + left.push dep[:gem] + ary.push dep[:gem] + end + end + end + + ary.uniq! + table.instance_variable_set :@root_gems, ary + class << table include TSort - alias tsort_each_node each_key + def tsort_each_node &b + @root_gems.each &b + end + def tsort_each_child(n, &b) fetch(n).dependencies.each do |v| b.call v[:gem] @@ -346,10 +364,16 @@ module MRuby end begin - @ary = gem_table.tsort.map { |v| gem_table[v] } + table.tsort.map { |v| table[v] } rescue TSort::Cyclic => e fail "Circular mrbgem dependency found: #{e.message}" end + end + + def check(build) + gem_table = generate_gem_table + + @ary = tsort_dependencies gem_table.keys, gem_table, true each do |g| import_include_paths(g) |
