diff options
| author | ruki <[email protected]> | 2020-04-26 11:33:27 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-04-26 11:35:18 +0800 |
| commit | 08b8050316bf8af82e6c6a2ed30b9bd03b4983f0 (patch) | |
| tree | 1a2a73f538a22ce51f8f454a2cc6f3e88e2ee82d | |
| parent | 0b6425642adb9c562124ddf983da21b585e29e10 (diff) | |
improve engine
| -rw-r--r-- | core/src/demo/xmake.c | 2 | ||||
| -rw-r--r-- | core/src/xmake/engine.c | 48 | ||||
| -rw-r--r-- | core/src/xmake/engine.h | 20 | ||||
| -rw-r--r-- | tests/projects/xmake_cli/hello/src/lni/main.c | 8 | ||||
| -rw-r--r-- | tests/projects/xmake_cli/xmake/src/main.c | 2 | ||||
| -rw-r--r-- | xmake/templates/c++/xmake.cli/project/src/lni/main.cpp | 8 | ||||
| -rw-r--r-- | xmake/templates/c/xmake.cli/project/src/lni/main.c | 8 |
7 files changed, 29 insertions, 67 deletions
diff --git a/core/src/demo/xmake.c b/core/src/demo/xmake.c index b29a28806..82ed54e25 100644 --- a/core/src/demo/xmake.c +++ b/core/src/demo/xmake.c @@ -8,5 +8,5 @@ */ tb_int_t main(tb_int_t argc, tb_char_t** argv) { - return xm_engine_run("xmake", argc, argv, tb_null); + return xm_engine_run("xmake", argc, argv, tb_null, tb_null); } diff --git a/core/src/xmake/engine.c b/core/src/xmake/engine.c index a39eb4ac5..a90890414 100644 --- a/core/src/xmake/engine.c +++ b/core/src/xmake/engine.c @@ -385,7 +385,7 @@ static luaL_Reg const g_semver_functions[] = /* ////////////////////////////////////////////////////////////////////////////////////// * private implementation */ -static tb_bool_t xm_engine_save_arguments(xm_engine_t* engine, tb_int_t argc, tb_char_t** argv) +static tb_bool_t xm_engine_save_arguments(xm_engine_t* engine, tb_int_t argc, tb_char_t** argv, tb_char_t** taskargv) { // check tb_assert_and_check_return_val(engine && engine->lua && argc >= 1 && argv, tb_false); @@ -410,6 +410,18 @@ static tb_bool_t xm_engine_save_arguments(xm_engine_t* engine, tb_int_t argc, tb lua_pushstring(engine->lua, argv[i]); #endif lua_rawseti(engine->lua, -2, (int)lua_objlen(engine->lua, -2) + 1); + + // patch the task arguments list + if (taskargv && i == 1) + { + tb_char_t** taskarg = taskargv; + while (*taskarg) + { + lua_pushstring(engine->lua, *taskarg); + lua_rawseti(engine->lua, -2, (int)lua_objlen(engine->lua, -2) + 1); + taskarg++; + } + } } // _ARGV = table_new @@ -894,7 +906,7 @@ tb_void_t xm_engine_exit(xm_engine_ref_t self) // exit it tb_free(engine); } -tb_int_t xm_engine_main(xm_engine_ref_t self, tb_int_t argc, tb_char_t** argv) +tb_int_t xm_engine_main(xm_engine_ref_t self, tb_int_t argc, tb_char_t** argv, tb_char_t** taskargv) { // check xm_engine_t* engine = (xm_engine_t*)self; @@ -906,7 +918,7 @@ tb_int_t xm_engine_main(xm_engine_ref_t self, tb_int_t argc, tb_char_t** argv) #endif // save main arguments to the global variable: _ARGV - if (!xm_engine_save_arguments(engine, argc, argv)) return -1; + if (!xm_engine_save_arguments(engine, argc, argv, taskargv)) return -1; // get the project directory tb_char_t path[TB_PATH_MAXN] = {0}; @@ -974,7 +986,7 @@ tb_void_t xm_engine_register(xm_engine_ref_t self, tb_char_t const* module, luaL luaL_register(engine->lua, tb_null, funcs); lua_rawset(engine->lua, -3); } -tb_int_t xm_engine_run(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, xm_engine_lni_initalizer_cb_t lni_initalizer) +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; if (xm_init()) @@ -982,36 +994,10 @@ tb_int_t xm_engine_run(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, x xm_engine_ref_t engine = xm_engine_init(name, lni_initalizer); if (engine) { - ok = xm_engine_main(engine, argc, argv); + ok = xm_engine_main(engine, argc, argv, taskargv); xm_engine_exit(engine); } xm_exit(); } return ok; } -tb_int_t xm_engine_run_lua(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, xm_engine_lni_initalizer_cb_t lni_initalizer, tb_char_t const* luaopts) -{ - if (luaopts) - { - tb_int_t argc2 = argc + 3; - tb_char_t* argv2[256]; - argv2[0] = argv[0]; - argv2[1] = "lua"; - argv2[2] = (tb_char_t*)luaopts; - argv2[3] = "lua.main"; - if (argc > 1) tb_memcpy(argv2 + 4, argv + 1, (argc - 1) * sizeof(tb_char_t*)); - argv2[argc2] = tb_null; - return xm_engine_run(name, argc2, argv2, lni_initalizer); - } - else - { - tb_int_t argc2 = argc + 2; - tb_char_t* argv2[256]; - argv2[0] = argv[0]; - argv2[1] = "lua"; - argv2[2] = "lua.main"; - if (argc > 1) tb_memcpy(argv2 + 3, argv + 1, (argc - 1) * sizeof(tb_char_t*)); - argv2[argc2] = tb_null; - return xm_engine_run(name, argc2, argv2, lni_initalizer); - } -} diff --git a/core/src/xmake/engine.h b/core/src/xmake/engine.h index ada561be9..8fb7d6176 100644 --- a/core/src/xmake/engine.h +++ b/core/src/xmake/engine.h @@ -65,10 +65,11 @@ tb_void_t xm_engine_exit(xm_engine_ref_t engine); * @param engine the engine * @param argc the argument count of the console * @param argv the argument list of the console + * @param taskargv the argument list of sub-task, e.g. taskargv(lua -vD lua.main) for xmake lua -vD lua.main arg1 arg2 .. * * @return the error code of main() */ -tb_int_t xm_engine_main(xm_engine_ref_t engine, tb_int_t argc, tb_char_t** argv); +tb_int_t xm_engine_main(xm_engine_ref_t engine, tb_int_t argc, tb_char_t** argv, tb_char_t** taskargv); /*! register lni modules in the engine, @note we need call it in lni_initalizer() * @@ -83,25 +84,12 @@ tb_void_t xm_engine_register(xm_engine_ref_t engine, tb_char_t * @param name the engine name * @param argc the argument count of the console * @param argv the argument list of the console + * @param taskargv the argument list of sub-task, e.g. taskargv(lua -vD lua.main) for xmake lua -vD lua.main arg1 arg2 .. * @param lni_initalizer the lni initializer * * @return the error code of main() */ -tb_int_t xm_engine_run(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, xm_engine_lni_initalizer_cb_t lni_initalizer); - -/*! run lua action entry of the engine singleton for `xmake lua [-vD] lua.main` - * - * @note we need set $XMAKE_MODULES_DIR with the directory of "lua\\*.lua" - * - * @param name the engine name - * @param argc the argument count of the console - * @param argv the argument list of the console - * @param lni_initalizer the lni initializer - * @param luaopts the lua options, e.g. "-vD" - * - * @return the error code of main() - */ -tb_int_t xm_engine_run_lua(tb_char_t const* name, tb_int_t argc, tb_char_t** argv, xm_engine_lni_initalizer_cb_t lni_initalizer, tb_char_t const* luaopts); +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); /* ////////////////////////////////////////////////////////////////////////////////////// * extern diff --git a/tests/projects/xmake_cli/hello/src/lni/main.c b/tests/projects/xmake_cli/hello/src/lni/main.c index 298d34d57..dfc28bb6a 100644 --- a/tests/projects/xmake_cli/hello/src/lni/main.c +++ b/tests/projects/xmake_cli/hello/src/lni/main.c @@ -16,10 +16,6 @@ static tb_void_t lni_initalizer(xm_engine_ref_t engine, lua_State* lua) } tb_int_t main(tb_int_t argc, tb_char_t** argv) { -#ifdef __tb_debug__ - tb_char_t const* luaopts = "-vD"; -#else - tb_char_t const* luaopts = "-D"; -#endif - return xm_engine_run_lua("hello", argc, argv, lni_initalizer, luaopts); + tb_char_t* taskargv = {"lua", "-D", "lua.main", tb_null}; + return xm_engine_run("hello", argc, argv, taskargv, lni_initalizer); } diff --git a/tests/projects/xmake_cli/xmake/src/main.c b/tests/projects/xmake_cli/xmake/src/main.c index 852658071..975f51c38 100644 --- a/tests/projects/xmake_cli/xmake/src/main.c +++ b/tests/projects/xmake_cli/xmake/src/main.c @@ -2,5 +2,5 @@ tb_int_t main(tb_int_t argc, tb_char_t** argv) { - return xm_engine_run("xmake", argc, argv, tb_null); + return xm_engine_run("xmake", argc, argv, tb_null, tb_null); } diff --git a/xmake/templates/c++/xmake.cli/project/src/lni/main.cpp b/xmake/templates/c++/xmake.cli/project/src/lni/main.cpp index e385c8971..ad256efce 100644 --- a/xmake/templates/c++/xmake.cli/project/src/lni/main.cpp +++ b/xmake/templates/c++/xmake.cli/project/src/lni/main.cpp @@ -16,10 +16,6 @@ static tb_void_t lni_initalizer(xm_engine_ref_t engine, lua_State* lua) } tb_int_t main(tb_int_t argc, tb_char_t** argv) { -#ifdef __tb_debug__ - tb_char_t const* luaopts = "-vD"; -#else - tb_char_t const* luaopts = "-D"; -#endif - return xm_engine_run_lua("${TARGETNAME}", argc, argv, lni_initalizer, luaopts); + tb_char_t* taskargv = {"lua", "-D", "lua.main", tb_null}; + return xm_engine_run("${TARGETNAME}", argc, argv, taskargv, lni_initalizer); } diff --git a/xmake/templates/c/xmake.cli/project/src/lni/main.c b/xmake/templates/c/xmake.cli/project/src/lni/main.c index e385c8971..ad256efce 100644 --- a/xmake/templates/c/xmake.cli/project/src/lni/main.c +++ b/xmake/templates/c/xmake.cli/project/src/lni/main.c @@ -16,10 +16,6 @@ static tb_void_t lni_initalizer(xm_engine_ref_t engine, lua_State* lua) } tb_int_t main(tb_int_t argc, tb_char_t** argv) { -#ifdef __tb_debug__ - tb_char_t const* luaopts = "-vD"; -#else - tb_char_t const* luaopts = "-D"; -#endif - return xm_engine_run_lua("${TARGETNAME}", argc, argv, lni_initalizer, luaopts); + tb_char_t* taskargv = {"lua", "-D", "lua.main", tb_null}; + return xm_engine_run("${TARGETNAME}", argc, argv, taskargv, lni_initalizer); } |
