summaryrefslogtreecommitdiffhomepage
path: root/tasks/mrbgems.rake
diff options
context:
space:
mode:
authorcremno <[email protected]>2014-08-04 05:50:05 +0200
committercremno <[email protected]>2014-08-04 05:50:05 +0200
commit6526bb10f0c60f6f1d17f873214243ca7ec1730a (patch)
tree064358c95101ab7ee8426a037e76b90bddff4f59 /tasks/mrbgems.rake
parent0fa3668e917c45409acd56ba624db24d95699895 (diff)
downloadmruby-6526bb10f0c60f6f1d17f873214243ca7ec1730a.tar.gz
mruby-6526bb10f0c60f6f1d17f873214243ca7ec1730a.zip
don't always generate gem functions
If the src and mrblib directories of a mrbgem don't exist or don't include "usable" files (for tools like mirb), then functions for gem initialization and finalization don't have to be generated.
Diffstat (limited to 'tasks/mrbgems.rake')
-rw-r--r--tasks/mrbgems.rake21
1 files changed, 15 insertions, 6 deletions
diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake
index 2d17be931..1cf05ee4e 100644
--- a/tasks/mrbgems.rake
+++ b/tasks/mrbgems.rake
@@ -10,6 +10,17 @@ MRuby.each_target do
file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIG, __FILE__] do |t|
FileUtils.mkdir_p "#{build_dir}/mrbgems"
open(t.name, 'w') do |f|
+ gem_func_gems = gems.select { |g| g.generate_functions }
+ gem_func_decls = gem_func_gems.each_with_object('') do |g, s|
+ s << "void GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb_state*);\n" \
+ "void GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb_state*);\n"
+ end
+ gem_init_calls = gem_func_gems.each_with_object('') do |g, s|
+ s << " GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb);\n"
+ end
+ gem_final_calls = gem_func_gems.each_with_object('') do |g, s|
+ s << " GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb);\n"
+ end
f.puts %Q[/*]
f.puts %Q[ * This file contains a list of all]
f.puts %Q[ * initializing methods which are]
@@ -22,19 +33,17 @@ MRuby.each_target do
f.puts %Q[]
f.puts %Q[#include "mruby.h"]
f.puts %Q[]
- f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_init(mrb_state* mrb);" % g.funcname}.join("\n")}]
- f.puts %Q[]
- f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_final(mrb_state* mrb);" % g.funcname}.join("\n")}]
+ f.write gem_func_decls
f.puts %Q[]
f.puts %Q[static void]
f.puts %Q[mrb_final_mrbgems(mrb_state *mrb) {]
- f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_final(mrb);" % g.funcname}.join("\n")}]
+ f.write gem_final_calls
f.puts %Q[}]
f.puts %Q[]
f.puts %Q[void]
f.puts %Q[mrb_init_mrbgems(mrb_state *mrb) {]
- f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_init(mrb);" % g.funcname}.join("\n")}]
- f.puts %Q[mrb_state_atexit(mrb, mrb_final_mrbgems);]
+ f.write gem_init_calls
+ f.puts %Q[ mrb_state_atexit(mrb, mrb_final_mrbgems);] unless gem_final_calls.empty?
f.puts %Q[}]
end
end