From 2e051fcc4efcfe6af2d3ef22d6a4ba63c9f1c65d Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 5 Apr 2025 11:49:48 +0530 Subject: Add package path to lua (only current build dir) --- src/LuaRuntime.cpp | 23 ++++++++++++++++++++--- src/LuaRuntime.hpp | 12 +++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp index 1dc9a85..d9bc86e 100644 --- a/src/LuaRuntime.cpp +++ b/src/LuaRuntime.cpp @@ -1,6 +1,6 @@ -#include "WindowActionRouter.hpp" -#include "lua.h" #include +#include +#include #include extern "C" { #include @@ -8,12 +8,29 @@ extern "C" { #include "AsyncEventLoop.hpp" #include "LuaRuntime.hpp" +#include "WindowActionRouter.hpp" LuaRuntime::LuaRuntime() { state = luaL_newstate(); luaL_openlibs(state); - preserve_top(state, { init_web_lib(); }) + preserve_top(state, { init_web_lib(); }); + + auto lua_path = QString(PROJECT_LUA_PATH); + preserve_top(state, { + lua_getglobal(state, "package"); + lua_getfield(state, -1, "path"); + auto pkg_path = QString(lua_tostring(state, -1)) + ";" + lua_path; + lua_pop(state, 1); + lua_pushstring(state, pkg_path.toStdString().c_str()); + lua_setfield(state, -2, "path"); + + lua_getglobal(state, "require"); + lua_pushstring(state, "null-browser.api"); + if (lua_pcall(state, 1, 0, 0) != LUA_OK) { + qCritical() << "Unable to load browser api" << lua_tostring(state, -1); + } + }); } void LuaRuntime::start_event_loop() { diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp index 74b7810..2b834aa 100644 --- a/src/LuaRuntime.hpp +++ b/src/LuaRuntime.hpp @@ -10,10 +10,16 @@ #include "utils.hpp" #include "widgets/WebViewStack.hpp" +#ifndef PROJECT_LUA_PATH +#define PROJECT_LUA_PATH "" +#endif + #define preserve_top(STATE, BODY) \ - const int __top = lua_gettop(STATE); \ - BODY; \ - lua_settop(STATE, __top); + { \ + const int __top = lua_gettop(STATE); \ + BODY; \ + lua_settop(STATE, __top); \ + }; class LuaRuntime : public QObject { Q_OBJECT -- cgit v1.3.1