summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-04-26 11:33:27 +0800
committerruki <[email protected]>2020-04-26 11:35:18 +0800
commit08b8050316bf8af82e6c6a2ed30b9bd03b4983f0 (patch)
tree1a2a73f538a22ce51f8f454a2cc6f3e88e2ee82d
parent0b6425642adb9c562124ddf983da21b585e29e10 (diff)
improve engine
-rw-r--r--core/src/demo/xmake.c2
-rw-r--r--core/src/xmake/engine.c48
-rw-r--r--core/src/xmake/engine.h20
-rw-r--r--tests/projects/xmake_cli/hello/src/lni/main.c8
-rw-r--r--tests/projects/xmake_cli/xmake/src/main.c2
-rw-r--r--xmake/templates/c++/xmake.cli/project/src/lni/main.cpp8
-rw-r--r--xmake/templates/c/xmake.cli/project/src/lni/main.c8
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);
}