diff --git a/packages/l/libxmake/patches/2.9.8/prefix.patch b/packages/l/libxmake/patches/2.9.8/prefix.patch deleted file mode 100644 index 12dd3f9b8c8..00000000000 --- a/packages/l/libxmake/patches/2.9.8/prefix.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/core/src/xmake/prefix.h b/core/src/xmake/prefix.h -index 5d6fba582..3c5c0679f 100644 ---- a/core/src/xmake/prefix.h -+++ b/core/src/xmake/prefix.h -@@ -117,14 +117,21 @@ static __tb_inline__ tb_pointer_t xm_lua_topointer(lua_State* lua, tb_int_t idx) - static __tb_inline__ tb_void_t xm_lua_register(lua_State *lua, tb_char_t const* libname, luaL_Reg const* l) - { - #if LUA_VERSION_NUM >= 504 -- lua_getglobal(lua, libname); -- if (lua_isnil(lua, -1)) -+ if (libname) - { -- lua_pop(lua, 1); -- lua_newtable(lua); -+ lua_getglobal(lua, libname); -+ if (lua_isnil(lua, -1)) -+ { -+ lua_pop(lua, 1); -+ lua_newtable(lua); -+ } -+ luaL_setfuncs(lua, l, 0); -+ lua_setglobal(lua, libname); -+ } -+ else -+ { -+ luaL_setfuncs(lua, l, 0); - } -- luaL_setfuncs(lua, l, 0); -- lua_setglobal(lua, libname); - #else - luaL_register(lua, libname, l); - #endif diff --git a/packages/l/libxmake/patches/2.9.8/xmake-cli.patch b/packages/l/libxmake/patches/2.9.8/xmake-cli.patch new file mode 100644 index 00000000000..faa8046f24d --- /dev/null +++ b/packages/l/libxmake/patches/2.9.8/xmake-cli.patch @@ -0,0 +1,154 @@ +diff --git a/core/src/xmake/engine.c b/core/src/xmake/engine.c +index 8753607d4..500bca5c0 100644 +--- a/core/src/xmake/engine.c ++++ b/core/src/xmake/engine.c +@@ -98,6 +98,11 @@ typedef struct __xm_engine_t + #ifdef XM_EMBED_ENABLE + // the temporary directory + tb_char_t tmpdir[TB_PATH_MAXN]; ++ ++ // the embed files ++ tb_byte_t const* embeddata[32]; ++ tb_size_t embedsize[32]; ++ tb_size_t embedcount; + #endif + + }xm_engine_t; +@@ -812,8 +817,15 @@ static tb_bool_t xm_engine_get_program_directory(xm_engine_t* engine, tb_char_t* + do + { + #ifdef XM_EMBED_ENABLE +- // get it from the temporary directory +- tb_strlcpy(path, engine->tmpdir, maxn); ++ tb_size_t embedcount = engine->embedcount; ++ if (embedcount) ++ { ++ tb_uint32_t crc32 = 0; ++ for (tb_size_t i = 0; i < embedcount; i++) ++ crc32 += tb_crc32_make(engine->embeddata[i], engine->embedsize[i], 0); ++ tb_snprintf(path, maxn, "%s/%x", engine->tmpdir, crc32); ++ } ++ else tb_strlcpy(path, engine->tmpdir, maxn); + ok = tb_true; + break; + #endif +@@ -1189,14 +1201,8 @@ static tb_pointer_t xm_engine_lua_realloc(tb_pointer_t udata, tb_pointer_t data, + #endif + + #ifdef XM_EMBED_ENABLE +-static tb_bool_t xm_engine_extract_programfiles(xm_engine_t* engine, tb_char_t const* programdir) ++static tb_bool_t xm_engine_extract_programfiles_impl(xm_engine_t* engine, tb_char_t const* programdir, tb_byte_t const* data, tb_size_t size) + { +- tb_file_info_t info = {0}; +- if (tb_file_info(programdir, &info)) return tb_true; +- +- tb_byte_t const* data = g_xmake_xmz_data; +- tb_size_t size = sizeof(g_xmake_xmz_data); +- + // do decompress + tb_bool_t ok = tb_false; + LZ4F_errorCode_t code; +@@ -1289,6 +1295,28 @@ static tb_bool_t xm_engine_extract_programfiles(xm_engine_t* engine, tb_char_t c + tb_buffer_exit(&result); + return ok; + } ++ ++static tb_bool_t xm_engine_extract_programfiles(xm_engine_t* engine, tb_char_t const* programdir) ++{ ++ tb_file_info_t info = {0}; ++ if (!tb_file_info(programdir, &info)) ++ { ++ tb_byte_t const* data = g_xmake_xmz_data; ++ tb_size_t size = sizeof(g_xmake_xmz_data); ++ if (!xm_engine_extract_programfiles_impl(engine, programdir, data, size)) ++ return tb_false; ++ ++ tb_size_t embedcount = engine->embedcount; ++ for (tb_size_t i = 0; i < embedcount; i++) ++ { ++ data = engine->embeddata[i]; ++ size = engine->embedsize[i]; ++ if (!xm_engine_extract_programfiles_impl(engine, programdir, data, size)) ++ return tb_false; ++ } ++ } ++ return tb_true; ++} + #endif + + /* ////////////////////////////////////////////////////////////////////////////////////// +@@ -1560,6 +1588,18 @@ tb_void_t xm_engine_register(xm_engine_ref_t self, tb_char_t const* module, luaL + xm_lua_register(engine->lua, tb_null, funcs); + lua_rawset(engine->lua, -3); + } ++#ifdef XM_EMBED_ENABLE ++tb_void_t xm_engine_add_embedfiles(xm_engine_ref_t self, tb_byte_t const* data, tb_size_t size) ++{ ++ // check ++ xm_engine_t* engine = (xm_engine_t*)self; ++ tb_assert_and_check_return(engine && engine->embedcount < tb_arrayn(engine->embedsize) && data && size); ++ ++ engine->embeddata[engine->embedcount] = data; ++ engine->embedsize[engine->embedcount] = size; ++ engine->embedcount++; ++} ++#endif + tb_int_t xm_engine_run(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, tb_char_t** taskargv, xm_engine_lni_initalizer_cb_t lni_initalizer) + { + tb_int_t ok = -1; +@@ -1575,3 +1615,4 @@ tb_int_t xm_engine_run(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, t + } + return ok; + } ++ +diff --git a/core/src/xmake/engine.h b/core/src/xmake/engine.h +index cc5a533ca..901e3997e 100644 +--- a/core/src/xmake/engine.h ++++ b/core/src/xmake/engine.h +@@ -79,6 +79,14 @@ tb_int_t xm_engine_main(xm_engine_ref_t engine, tb_int_t argc + */ + tb_void_t xm_engine_register(xm_engine_ref_t engine, tb_char_t const* module, luaL_Reg const funcs[]); + ++/*! add the embed files ++ * ++ * @param name the engine name ++ * @param data the embedfiles data ++ * @param size the data size ++ */ ++tb_void_t xm_engine_add_embedfiles(xm_engine_ref_t engine, tb_byte_t const* data, tb_size_t size); ++ + /*! run main entry of the engine singleton + * + * @param name the engine name +diff --git a/core/src/xmake/prefix.h b/core/src/xmake/prefix.h +index 5d6fba582..3c5c0679f 100644 +--- a/core/src/xmake/prefix.h ++++ b/core/src/xmake/prefix.h +@@ -117,14 +117,21 @@ static __tb_inline__ tb_pointer_t xm_lua_topointer(lua_State* lua, tb_int_t idx) + static __tb_inline__ tb_void_t xm_lua_register(lua_State *lua, tb_char_t const* libname, luaL_Reg const* l) + { + #if LUA_VERSION_NUM >= 504 +- lua_getglobal(lua, libname); +- if (lua_isnil(lua, -1)) ++ if (libname) + { +- lua_pop(lua, 1); +- lua_newtable(lua); ++ lua_getglobal(lua, libname); ++ if (lua_isnil(lua, -1)) ++ { ++ lua_pop(lua, 1); ++ lua_newtable(lua); ++ } ++ luaL_setfuncs(lua, l, 0); ++ lua_setglobal(lua, libname); ++ } ++ else ++ { ++ luaL_setfuncs(lua, l, 0); + } +- luaL_setfuncs(lua, l, 0); +- lua_setglobal(lua, libname); + #else + luaL_register(lua, libname, l); + #endif diff --git a/packages/l/libxmake/xmake.lua b/packages/l/libxmake/xmake.lua index 02897d017d1..e7bd0d3a20c 100644 --- a/packages/l/libxmake/xmake.lua +++ b/packages/l/libxmake/xmake.lua @@ -12,7 +12,7 @@ package("libxmake") add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true}) add_configs("embed", {description = "Embed lua scripts.", default = true, type = "boolean"}) - add_patches("2.9.8", "patches/2.9.8/prefix.patch", "559e953aab37c54296074de5da88562b410c2b01f859984a054b94468ca751ac") + add_patches("2.9.8", "patches/2.9.8/xmake-cli.patch", "8d1cc779a4ee6a6958c4e5d9dae2f8811210518a1a48f47c540c363053f6b10b") add_includedirs("include") if is_plat("windows") then