summaryrefslogtreecommitdiffhomepage
path: root/tasks/mrbgem_spec.rake
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/mrbgem_spec.rake')
-rw-r--r--tasks/mrbgem_spec.rake44
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)