MRI-Binding: Allow manually specifying load paths in config
This commit is contained in:
parent
393a283d99
commit
ec16210f8a
|
@ -398,17 +398,47 @@ static void showExc(VALUE exc)
|
||||||
showMsg(StringValueCStr(ms));
|
showMsg(StringValueCStr(ms));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Appends if exists, sets if not */
|
||||||
|
static void globalAryAppend(const char *globalName, VALUE ary)
|
||||||
|
{
|
||||||
|
VALUE existing = rb_gv_get(globalName);
|
||||||
|
|
||||||
|
if (NIL_P(existing))
|
||||||
|
rb_gv_set(globalName, ary);
|
||||||
|
else
|
||||||
|
rb_ary_concat(existing, ary);
|
||||||
|
}
|
||||||
|
|
||||||
static void mriBindingExecute()
|
static void mriBindingExecute()
|
||||||
{
|
{
|
||||||
ruby_setup();
|
ruby_setup();
|
||||||
rb_enc_set_default_external(rb_enc_from_encoding(rb_utf8_encoding()));
|
rb_enc_set_default_external(rb_enc_from_encoding(rb_utf8_encoding()));
|
||||||
|
|
||||||
|
Config &conf = shState->rtData().config;
|
||||||
|
|
||||||
|
if (!conf.rubyLoadpaths.empty())
|
||||||
|
{
|
||||||
|
/* Setup custom load paths */
|
||||||
|
VALUE lpaths = rb_ary_new_capa(conf.rubyLoadpaths.size());
|
||||||
|
|
||||||
|
for (size_t i = 0; i < conf.rubyLoadpaths.size(); ++i)
|
||||||
|
{
|
||||||
|
std::string &path = conf.rubyLoadpaths[i];
|
||||||
|
|
||||||
|
VALUE pathv = rb_str_new(path.c_str(), path.size());
|
||||||
|
rb_ary_push(lpaths, pathv);
|
||||||
|
}
|
||||||
|
|
||||||
|
globalAryAppend("$", lpaths);
|
||||||
|
globalAryAppend("LOAD_PATH", lpaths);
|
||||||
|
}
|
||||||
|
|
||||||
RbData rbData;
|
RbData rbData;
|
||||||
shState->setBindingData(&rbData);
|
shState->setBindingData(&rbData);
|
||||||
|
|
||||||
mriBindingInit();
|
mriBindingInit();
|
||||||
|
|
||||||
std::string &customScript = shState->rtData().config.customScript;
|
std::string &customScript = conf.customScript;
|
||||||
if (!customScript.empty())
|
if (!customScript.empty())
|
||||||
runCustomScript(customScript);
|
runCustomScript(customScript);
|
||||||
else
|
else
|
||||||
|
|
|
@ -135,3 +135,15 @@
|
||||||
#
|
#
|
||||||
# fontSub=Arial>Open Sans
|
# fontSub=Arial>Open Sans
|
||||||
# fontSub=Times New Roman>Liberation Serif
|
# fontSub=Times New Roman>Liberation Serif
|
||||||
|
|
||||||
|
|
||||||
|
# Because mkxp is usually distributed as a stand alone
|
||||||
|
# build, no predefined load paths are initialized
|
||||||
|
# ($:, $LOAD_PATH) in the MRI backend. With this option,
|
||||||
|
# they can be specified manually (eg. when using a system
|
||||||
|
# libruby.so). It is however recommended to statically
|
||||||
|
# link all required gems into libruby.so.
|
||||||
|
# (default: none)
|
||||||
|
#
|
||||||
|
# rubyLoadpath=/usr/lib64/ruby/
|
||||||
|
# rubyLoadpath=/usr/local/share/ruby/site_ruby
|
||||||
|
|
|
@ -84,6 +84,7 @@ void Config::read(int argc, char *argv[])
|
||||||
PO_DESC_ALL
|
PO_DESC_ALL
|
||||||
("RTP", po::value<StringVec>()->composing())
|
("RTP", po::value<StringVec>()->composing())
|
||||||
("fontSub", po::value<StringVec>()->composing())
|
("fontSub", po::value<StringVec>()->composing())
|
||||||
|
("rubyLoadpath", po::value<StringVec>()->composing())
|
||||||
;
|
;
|
||||||
|
|
||||||
po::variables_map vm;
|
po::variables_map vm;
|
||||||
|
@ -118,6 +119,8 @@ void Config::read(int argc, char *argv[])
|
||||||
|
|
||||||
GUARD_ALL( fontSubs = vm["fontSub"].as<StringVec>(); );
|
GUARD_ALL( fontSubs = vm["fontSub"].as<StringVec>(); );
|
||||||
|
|
||||||
|
GUARD_ALL( rubyLoadpaths = vm["rubyLoadpath"].as<StringVec>(); )
|
||||||
|
|
||||||
#undef PO_DESC
|
#undef PO_DESC
|
||||||
#undef PO_DESC_ALL
|
#undef PO_DESC_ALL
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ struct Config
|
||||||
|
|
||||||
std::vector<std::string> fontSubs;
|
std::vector<std::string> fontSubs;
|
||||||
|
|
||||||
|
std::vector<std::string> rubyLoadpaths;
|
||||||
|
|
||||||
/* Game INI contents */
|
/* Game INI contents */
|
||||||
struct {
|
struct {
|
||||||
std::string scripts;
|
std::string scripts;
|
||||||
|
|
Loading…
Reference in New Issue