Modify package.cpath (#1371)
* luaa.c: Remove useless stack operation We get package.loaded and immediately throw away the result. That's pointless, so remove this. Signed-off-by: Uli Schlachter <psychon@znc.in> * Refactor modification of package.path Awesome adds various entries to package.path during startup. This commit moves that into a helper function. No functional changes intended. The only change I did to the code was changing a call to lua_type(L, 2) into lua_type(L, -1);. Signed-off-by: Uli Schlachter <psychon@znc.in> * Modify package.cpath just like package.path This adds, for example, paths specified via the --search argument also to package.cpath. Fixes: https://github.com/awesomeWM/awesome/issues/1248 Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
75431d90c9
commit
c96987909e
82
luaa.c
82
luaa.c
|
@ -630,6 +630,54 @@ setup_awesome_signals(lua_State *L)
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Add things to the string on top of the stack */
|
||||||
|
static void
|
||||||
|
add_to_search_path(lua_State *L, string_array_t *searchpath, bool for_lua)
|
||||||
|
{
|
||||||
|
if (LUA_TSTRING != lua_type(L, -1))
|
||||||
|
{
|
||||||
|
warn("package.path is not a string");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(entry, *searchpath)
|
||||||
|
{
|
||||||
|
int components;
|
||||||
|
size_t len = a_strlen(*entry);
|
||||||
|
lua_pushliteral(L, ";");
|
||||||
|
lua_pushlstring(L, *entry, len);
|
||||||
|
if (for_lua)
|
||||||
|
lua_pushliteral(L, "/?.lua");
|
||||||
|
else
|
||||||
|
lua_pushliteral(L, "/?.so");
|
||||||
|
lua_concat(L, 3);
|
||||||
|
|
||||||
|
if (for_lua)
|
||||||
|
{
|
||||||
|
lua_pushliteral(L, ";");
|
||||||
|
lua_pushlstring(L, *entry, len);
|
||||||
|
lua_pushliteral(L, "/?/init.lua");
|
||||||
|
lua_concat(L, 3);
|
||||||
|
|
||||||
|
components = 2;
|
||||||
|
} else {
|
||||||
|
components = 1;
|
||||||
|
}
|
||||||
|
lua_concat(L, components + 1); /* concatenate with string on top of the stack */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add Lua lib path (/usr/share/awesome/lib by default) */
|
||||||
|
if (for_lua)
|
||||||
|
{
|
||||||
|
lua_pushliteral(L, ";" AWESOME_LUA_LIB_PATH "/?.lua");
|
||||||
|
lua_pushliteral(L, ";" AWESOME_LUA_LIB_PATH "/?/init.lua");
|
||||||
|
lua_concat(L, 3); /* concatenate with thing on top of the stack when we were called */
|
||||||
|
} else {
|
||||||
|
lua_pushliteral(L, ";" AWESOME_LUA_LIB_PATH "/?.so");
|
||||||
|
lua_concat(L, 2); /* concatenate with thing on top of the stack when we were called */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Initialize the Lua VM
|
/** Initialize the Lua VM
|
||||||
* \param xdg An xdg handle to use to get XDG basedir.
|
* \param xdg An xdg handle to use to get XDG basedir.
|
||||||
*/
|
*/
|
||||||
|
@ -747,38 +795,14 @@ luaA_init(xdgHandle* xdg, string_array_t *searchpath)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lua_getfield(L, 1, "path");
|
lua_getfield(L, 1, "path");
|
||||||
if (LUA_TSTRING != lua_type(L, 2))
|
add_to_search_path(L, searchpath, true);
|
||||||
{
|
|
||||||
warn("package.path is not a string");
|
|
||||||
lua_pop(L, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach(entry, *searchpath)
|
|
||||||
{
|
|
||||||
size_t len = a_strlen(*entry);
|
|
||||||
lua_pushliteral(L, ";");
|
|
||||||
lua_pushlstring(L, *entry, len);
|
|
||||||
lua_pushliteral(L, "/?.lua");
|
|
||||||
lua_concat(L, 3);
|
|
||||||
|
|
||||||
lua_pushliteral(L, ";");
|
|
||||||
lua_pushlstring(L, *entry, len);
|
|
||||||
lua_pushliteral(L, "/?/init.lua");
|
|
||||||
lua_concat(L, 3);
|
|
||||||
|
|
||||||
lua_concat(L, 3); /* concatenate with package.path */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add Lua lib path (/usr/share/awesome/lib by default) */
|
|
||||||
lua_pushliteral(L, ";" AWESOME_LUA_LIB_PATH "/?.lua");
|
|
||||||
lua_pushliteral(L, ";" AWESOME_LUA_LIB_PATH "/?/init.lua");
|
|
||||||
lua_concat(L, 3); /* concatenate with package.path */
|
|
||||||
lua_setfield(L, 1, "path"); /* package.path = "concatenated string" */
|
lua_setfield(L, 1, "path"); /* package.path = "concatenated string" */
|
||||||
|
|
||||||
lua_getfield(L, 1, "loaded");
|
lua_getfield(L, 1, "cpath");
|
||||||
|
add_to_search_path(L, searchpath, false);
|
||||||
|
lua_setfield(L, 1, "cpath"); /* package.cpath = "concatenated string" */
|
||||||
|
|
||||||
lua_pop(L, 2); /* pop "package" and "package.loaded" */
|
lua_pop(L, 1); /* pop "package" */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue