diff --git a/Rakefile.rb b/Rakefile.rb index c0058b7..acb89b2 100644 --- a/Rakefile.rb +++ b/Rakefile.rb @@ -14,6 +14,7 @@ base_env = Rscons::Environment.new do |env| env["CXXFLAGS"] << "-std=gnu++11" env.parse_flags!("!sdl2-config --cflags --libs") env.parse_flags!("!freetype-config --cflags --libs") + env.parse_flags!("!pkg-config --cflags --libs ruby-1.9") env["LIBS"] += ["dl"] if RUBY_PLATFORM =~ /mingw/ env["LIBS"] += ["opengl32"] diff --git a/runtime/main.rb b/runtime/main.rb new file mode 100644 index 0000000..0bbd80d --- /dev/null +++ b/runtime/main.rb @@ -0,0 +1 @@ +puts "hi from main.rb" diff --git a/src/main.cc b/src/main.cc index 481aea7..84fc625 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,15 +1,44 @@ #include #include "GUI.h" - -#include "Core.h" +#include "ruby.h" using namespace std; +RUBY_GLOBAL_SETUP + +static int bootstrap() +{ + int rv = 0; + int err_state = 0; + rb_eval_string_protect( + "load File.expand_path('../../runtime/main.rb', $0)", + &err_state); + if (err_state != 0) + { + VALUE e = rb_errinfo(); + VALUE s = rb_funcall(e, rb_intern("message"), 0); + fprintf(stderr, "%s\n", StringValueCStr(s)); + rb_set_errinfo(Qnil); + rv = 1; + } + return rv; +} + int main(int argc, char *argv[]) { - jes::Core::instance.init(argv[0]); - jes::GUIRef gui = new jes::GUI(); - if (!gui->load()) - return 2; - return gui->run(); + int rv = 0; + int ruby_argc = 1; + char prog_name[] = "main"; + char * ruby_argv[] = {&prog_name[0]}; + char ** ruby_argv_p = &ruby_argv[0]; + ruby_sysinit(&ruby_argc, &ruby_argv_p); + { + RUBY_INIT_STACK; + ruby_init(); + ruby_init_loadpath(); + ruby_script(argv[0]); + rv = bootstrap(); + ruby_finalize(); + } + return rv; }