diff --git a/Rakefile b/Rakefile index 4422f9688..5d8ba4945 100644 --- a/Rakefile +++ b/Rakefile @@ -17,6 +17,11 @@ require "mruby/build" MRUBY_CONFIG = MRuby::Build.mruby_config_path load MRUBY_CONFIG +# set up all gems +MRuby.each_target do + gems.setup(self) if enable_gems? +end + # load basic rules MRuby.each_target do |build| build.define_rules diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb index 619621e7b..a11c9feda 100644 --- a/lib/mruby/gem.rb +++ b/lib/mruby/gem.rb @@ -401,7 +401,16 @@ module MRuby end end - def generate_gem_table build + def setup(build) + gemset = nil + begin + gemset_prev = gemset + self.each(&:setup) + gemset = self.setup_dependencies(build).keys.sort + end until gemset == gemset_prev + end + + def setup_dependencies(build) gem_table = each_with_object({}) { |spec, h| h[spec.name] = spec } default_gems = {} @@ -424,6 +433,12 @@ module MRuby end end + gem_table + end + + def generate_gem_table(build) + gem_table = setup_dependencies(build) + each do |g| g.dependencies.each do |dep| name = dep[:gem] diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index 272d476e6..291bea615 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -2,8 +2,6 @@ MRuby.each_target do active_gems_txt = "#{build_dir}/mrbgems/active_gems.txt" if enable_gems? - # set up all gems - gems.each(&:setup) gems.check self # loader all gems