MRI-Binding: Allow manually specifying load paths in config
This commit is contained in:
		
							parent
							
								
									393a283d99
								
							
						
					
					
						commit
						ec16210f8a
					
				
					 4 changed files with 48 additions and 1 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue