bin/mrbt in mruby_tools-0.0.1.1 vs bin/mrbt in mruby_tools-0.0.2.1
- old
+ new
@@ -5,61 +5,26 @@
# args like: file1.rb file2.rb -o outfile
# possibly: file1.rb -o outfile file2.rb -c generated.c
opts = MRubyTools.args(ARGV)
-outfile = opts.fetch(:outfile)
+MRubyTools.usage if opts[:help]
-c_code = <<'EOF'
-#include <stdlib.h>
-#include <mruby.h>
-#include <mruby/compile.h>
-#include <mruby/string.h>
-
-void check_exc(mrb_state *mrb, char *filename) {
- if (mrb->exc) {
- mrb_value exc = mrb_obj_value(mrb->exc);
- mrb_value exc_msg = mrb_funcall(mrb, exc, "to_s", 0);
- fprintf(stderr, "ERROR in %s - %s: %s\n",
- filename,
- mrb_obj_classname(mrb, exc),
- mrb_str_to_cstr(mrb, exc_msg));
- /* mrb_print_backtrace(mrb); # empty */
- exit(1);
- }
-}
-
-int
-main(void)
-{
- mrb_state *mrb = mrb_open();
- if (!mrb) {
- printf("mrb problem");
- exit(1);
- }
-EOF
-
-c_code += opts.fetch(:rb_files).map { |rbf|
- "\n" + MRubyTools.rb2c(rbf) + "\n\n"
-}.join
-
- c_code += <<EOF
- mrb_close(mrb);
- return 0;
-}
-EOF
-
+rb_files = opts.fetch(:rb_files)
+MRubyTools.usage("no .rb files provided") if rb_files.empty?
+c_code = MRubyTools.c_wrapper(rb_files)
puts c_code + "\n" if opts[:verbose]
-file = opts[:cfile] || Tempfile.new(['generated', '.c'])
-file.write(c_code)
-file.close
+out_file = opts.fetch(:out_file)
+c_file = opts.fetch(:c_file)
+c_file.write(c_code)
+c_file.close
msd = MRubyTools.mruby_src_dir
gcc_args = [
- '-std=c99', "-I", File.join(msd, 'include'), file.path, "-o", outfile,
+ '-std=c99', "-I", File.join(msd, 'include'), c_file.path, "-o", out_file,
File.join(msd, 'build', 'host', 'lib', 'libmruby.a'), '-lm',
]
puts "compiling..."
-puts "created binary executable: #{outfile}" if system('gcc', *gcc_args)
+puts "created binary executable: #{out_file}" if system('gcc', *gcc_args)