diff options
| author | take_cheeze <[email protected]> | 2014-02-28 00:36:08 +0900 |
|---|---|---|
| committer | take_cheeze <[email protected]> | 2014-02-28 00:36:08 +0900 |
| commit | 1266ab6500d57f0457645c511c4051798f676156 (patch) | |
| tree | eee3bbed9db6ac3da049bb3e242f8f89abcd3414 /mrbgems/mruby-bin-strip | |
| parent | d1526b0409a31667de95fbc3b0da23a62ca8bfea (diff) | |
| download | mruby-1266ab6500d57f0457645c511c4051798f676156.tar.gz mruby-1266ab6500d57f0457645c511c4051798f676156.zip | |
add mruby-strip tool to strip irep's debug info
Diffstat (limited to 'mrbgems/mruby-bin-strip')
| -rw-r--r-- | mrbgems/mruby-bin-strip/bintest/mruby-strip.rb | 53 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-strip/mrbgem.rake | 5 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c | 58 |
3 files changed, 116 insertions, 0 deletions
diff --git a/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb b/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb new file mode 100644 index 000000000..4f27d2fce --- /dev/null +++ b/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb @@ -0,0 +1,53 @@ +require 'tempfile' + +assert('no files') do + o = `bin/mruby-strip 2>&1` + assert_equal 1, $?.exitstatus + assert_equal "no files to strip\n", o +end + +assert('file not found') do + o = `bin/mruby-strip not_found.mrb 2>&1` + assert_equal 1, $?.exitstatus + assert_equal "can't open file not_found.mrb\n", o +end + +assert('not irep file') do + t = Tempfile.new('script.rb') + t.write 'p test\n' + t.flush + o = `bin/mruby-strip #{t.path} 2>&1` + assert_equal 1, $?.exitstatus + assert_equal "can't read irep file #{t.path}\n", o +end + +assert('success') do + script_file, compiled1, compiled2 = + Tempfile.new('script.rb'), Tempfile.new('c1.mrb'), Tempfile.new('c2.mrb') + script_file.write "p 'test'\n" + script_file.flush + `bin/mrbc -g -o #{compiled1.path} #{script_file.path}` + `bin/mrbc -g -o #{compiled2.path} #{script_file.path}` + + o = `bin/mruby-strip #{compiled1.path}` + assert_equal 0, $?.exitstatus + assert_equal "", o + + o = `bin/mruby-strip #{compiled1.path} #{compiled2.path}` + assert_equal 0, $?.exitstatus + assert_equal "", o +end + +assert('check debug section') do + script_file, with_debug, without_debug = + Tempfile.new('script.rb'), Tempfile.new('c1.mrb'), Tempfile.new('c2.mrb') + script_file.write "p 'test'\n" + script_file.flush + `bin/mrbc -o #{without_debug.path} #{script_file.path}` + `bin/mrbc -g -o #{with_debug.path} #{script_file.path}` + + assert_true with_debug.size >= without_debug.size + + `bin/mruby-strip #{with_debug.path}` + assert_equal without_debug.size, with_debug.size +end diff --git a/mrbgems/mruby-bin-strip/mrbgem.rake b/mrbgems/mruby-bin-strip/mrbgem.rake new file mode 100644 index 000000000..47304b2a5 --- /dev/null +++ b/mrbgems/mruby-bin-strip/mrbgem.rake @@ -0,0 +1,5 @@ +MRuby::Gem::Specification.new('mruby-bin-strip') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.bins = %w(mruby-strip) +end diff --git a/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c b/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c new file mode 100644 index 000000000..dee3e0cd6 --- /dev/null +++ b/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <stdlib.h> +#include "mruby.h" +#include "mruby/irep.h" +#include "mruby/dump.h" + +int +main(int argc, char **argv) +{ + int i, dump_result; + FILE **files; + mrb_irep **ireps; + mrb_state *mrb; + + if (argc <= 1) { + fprintf(stderr, "no files to strip\n"); + return EXIT_FAILURE; + } + + files = (FILE**)malloc(sizeof(FILE*) * argc); + for (i = 1; i < argc; ++i) { + files[i] = fopen(argv[i], "rb"); + + if (!files[i]) { + fprintf(stderr, "can't open file %s\n", argv[i]); + return EXIT_FAILURE; + } + } + + mrb = mrb_open(); + + ireps = (mrb_irep**)malloc(sizeof(mrb_irep*) * argc); + for (i = 1; i < argc; ++i) { + ireps[i] = mrb_read_irep_file(mrb, files[i]); + if (!ireps[i]) { + fprintf(stderr, "can't read irep file %s\n", argv[i]); + return EXIT_FAILURE; + } + fclose(files[i]); + files[i] = fopen(argv[i], "wb"); + if (!ireps[i]) { + fprintf(stderr, "can't reopen irep file %s\n", argv[i]); + return EXIT_FAILURE; + } + } + + for (i = 1; i < argc; ++i) { + /* debug flag must be alway false */ + dump_result = mrb_dump_irep_binary(mrb, ireps[i], FALSE, files[i]); + if (dump_result != MRB_DUMP_OK) { + fprintf(stderr, "error occur when dumping %s", argv[i]); + return EXIT_FAILURE; + } + } + + mrb_close(mrb); + return EXIT_SUCCESS; +} |
