forked from enlightenment/efl
elua lib: add APIs for include path management
This commit is contained in:
parent
87a8e51cd3
commit
6be9b662fb
|
@ -78,6 +78,8 @@ EAPI Eina_Stringshare *elua_state_core_dir_get(const Elua_State *es);
|
|||
EAPI Eina_Stringshare *elua_state_mod_dir_get(const Elua_State *es);
|
||||
EAPI Eina_Stringshare *elua_state_apps_dir_get(const Elua_State *es);
|
||||
|
||||
EAPI void elua_state_include_path_add(Elua_State *es, const char *path);
|
||||
|
||||
EAPI lua_State *elua_state_lua_state_get(const Elua_State *es);
|
||||
|
||||
EAPI int elua_report_error(const Elua_State *es, const char *pname, int status);
|
||||
|
@ -89,6 +91,7 @@ EAPI void elua_io_register(const Elua_State *es);
|
|||
|
||||
EAPI int elua_io_popen(lua_State *L);
|
||||
EAPI int elua_module_init(lua_State *L);
|
||||
EAPI int elua_module_system_init(lua_State *L);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -80,10 +80,10 @@ elua_state_new(void)
|
|||
EAPI void
|
||||
elua_state_free(Elua_State *es)
|
||||
{
|
||||
void *data;
|
||||
if (!es) return;
|
||||
if (es->luastate)
|
||||
{
|
||||
void *data;
|
||||
EINA_LIST_FREE(es->cmods, data)
|
||||
{
|
||||
lua_rawgeti(es->luastate, LUA_REGISTRYINDEX, (size_t)data);
|
||||
|
@ -93,6 +93,8 @@ elua_state_free(Elua_State *es)
|
|||
}
|
||||
else if (es->cmods)
|
||||
eina_list_free(es->cmods);
|
||||
EINA_LIST_FREE(es->lincs, data)
|
||||
eina_stringshare_del(data);
|
||||
eina_stringshare_del(es->coredir);
|
||||
eina_stringshare_del(es->moddir);
|
||||
eina_stringshare_del(es->appsdir);
|
||||
|
@ -168,6 +170,15 @@ elua_state_apps_dir_get(const Elua_State *es)
|
|||
return es->moddir;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elua_state_include_path_add(Elua_State *es, const char *path)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(es);
|
||||
EINA_SAFETY_ON_NULL_RETURN(path);
|
||||
EINA_SAFETY_ON_FALSE_RETURN(path[0]);
|
||||
es->lincs = eina_list_append(es->lincs, eina_stringshare_add(path));
|
||||
}
|
||||
|
||||
EAPI lua_State *
|
||||
elua_state_lua_state_get(const Elua_State *es)
|
||||
{
|
||||
|
@ -278,3 +289,35 @@ elua_module_init(lua_State *L)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
elua_module_system_init(lua_State *L)
|
||||
{
|
||||
Elua_State *es = elua_state_from_lua_get(L);
|
||||
const char *corepath = es->coredir;
|
||||
const char *modpath = es->moddir;
|
||||
const char *appspath = es->appsdir;
|
||||
Eina_Stringshare *data = NULL;
|
||||
int n = 3;
|
||||
if (!corepath || !modpath || !appspath)
|
||||
return 0;
|
||||
lua_pushvalue(L, 1);
|
||||
es->requireref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
lua_pushvalue(L, 2);
|
||||
es->apploadref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
lua_pushfstring(L, "%s/?.lua;", corepath);
|
||||
EINA_LIST_FREE(es->lincs, data)
|
||||
{
|
||||
lua_pushfstring(L, "%s/?.lua;", data);
|
||||
eina_stringshare_del(data);
|
||||
++n;
|
||||
}
|
||||
lua_pushfstring(L, "%s/?.eo.lua;", modpath);
|
||||
lua_pushfstring(L, "%s/?.lua;", modpath);
|
||||
lua_pushvalue(L, 3);
|
||||
lua_concat(L, n + 1);
|
||||
lua_pushfstring(L, "%s/?.lua;", appspath);
|
||||
lua_pushvalue(L, 4);
|
||||
lua_concat(L, 2);
|
||||
return 2;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,8 @@ struct _Elua_State
|
|||
Eina_Stringshare *moddir;
|
||||
Eina_Stringshare *appsdir;
|
||||
Eina_List *cmods;
|
||||
Eina_List *lincs;
|
||||
int requireref, apploadref;
|
||||
};
|
||||
|
||||
extern int _elua_log_dom;
|
||||
|
|
Loading…
Reference in New Issue