summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-test/mrbgem.rake
diff options
context:
space:
mode:
authorZachary Scott <[email protected]>2015-08-22 10:18:12 -0400
committerZachary Scott <[email protected]>2015-08-22 10:18:12 -0400
commit383a7d24d369bbd0e8813d7aabc587fb769e9d9c (patch)
tree557c5d8d9263bd21a823a8bc497a91e7d00f634c /mrbgems/mruby-test/mrbgem.rake
parenta1731254bee12c831ea1d509bf43520db1d0d9af (diff)
downloadmruby-383a7d24d369bbd0e8813d7aabc587fb769e9d9c.tar.gz
mruby-383a7d24d369bbd0e8813d7aabc587fb769e9d9c.zip
Move test source code and rake task to mrbgem
Diffstat (limited to 'mrbgems/mruby-test/mrbgem.rake')
-rw-r--r--mrbgems/mruby-test/mrbgem.rake69
1 files changed, 69 insertions, 0 deletions
diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake
new file mode 100644
index 000000000..b9616fe9d
--- /dev/null
+++ b/mrbgems/mruby-test/mrbgem.rake
@@ -0,0 +1,69 @@
+MRuby.each_target do
+ current_dir = File.dirname(__FILE__).relative_path_from(Dir.pwd)
+ relative_from_root = File.dirname(__FILE__).relative_path_from(MRUBY_ROOT)
+ current_build_dir = "#{build_dir}/#{relative_from_root}"
+
+ exec = exefile("#{current_build_dir}/mrbtest")
+ clib = "#{current_build_dir}/mrbtest.c"
+ mlib = clib.ext(exts.object)
+ mrbs = Dir.glob("#{current_dir}/t/*.rb")
+ init = "#{current_dir}/init_mrbtest.c"
+ ass_c = "#{current_build_dir}/assert.c"
+ ass_lib = ass_c.ext(exts.object)
+
+ mrbtest_lib = libfile("#{current_build_dir}/mrbtest")
+ mrbtest_objs = [mlib, ass_lib]
+ gems.each do |v|
+ mrbtest_objs.concat v.test_objs
+ end
+ file mrbtest_lib => mrbtest_objs do |t|
+ archiver.run t.name, t.prerequisites
+ end
+
+ unless build_mrbtest_lib_only?
+ driver_obj = objfile("#{current_build_dir}/driver")
+ file exec => [driver_obj, mrbtest_lib, libfile("#{build_dir}/lib/libmruby")] do |t|
+ gem_flags = gems.map { |g| g.linker.flags }
+ gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
+ gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
+ gem_libraries = gems.map { |g| g.linker.libraries }
+ gem_library_paths = gems.map { |g| g.linker.library_paths }
+ linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries
+ end
+ end
+
+ file ass_lib => ass_c
+ file ass_c => ["#{current_dir}/assert.rb", __FILE__] do |t|
+ FileUtils.mkdir_p File.dirname t.name
+ open(t.name, 'w') do |f|
+ mrbc.run f, [t.prerequisites.first], 'mrbtest_assert_irep'
+ end
+ end
+
+ file mlib => clib
+ file clib => [mrbcfile, init, __FILE__] + mrbs do |t|
+ _pp "GEN", "*.rb", "#{clib.relative_path}"
+ FileUtils.mkdir_p File.dirname(clib)
+ open(clib, 'w') do |f|
+ f.puts %Q[/*]
+ f.puts %Q[ * This file contains a list of all]
+ f.puts %Q[ * test functions.]
+ f.puts %Q[ *]
+ f.puts %Q[ * IMPORTANT:]
+ f.puts %Q[ * This file was generated!]
+ f.puts %Q[ * All manual changes will get lost.]
+ f.puts %Q[ */]
+ f.puts %Q[]
+ f.puts IO.read(init)
+ mrbc.run f, mrbs, 'mrbtest_irep'
+ gems.each do |g|
+ f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb);]
+ end
+ f.puts %Q[void mrbgemtest_init(mrb_state* mrb) {]
+ gems.each do |g|
+ f.puts %Q[ GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb);]
+ end
+ f.puts %Q[}]
+ end
+ end
+end