diff options
author | Stefan Schmidt <s.schmidt@samsung.com> | 2020-03-17 16:53:30 +0100 |
---|---|---|
committer | Stefan Schmidt <s.schmidt@samsung.com> | 2020-03-20 12:04:35 +0100 |
commit | b84694f5189f86e223c68695366c0d676d8fc6a4 (patch) | |
tree | 402a74ecd7daeb4f9fbc24bc6f0a40a3900deb67 | |
parent | b5c24af2e14c9a56dbba0f61119281c06da66758 (diff) | |
download | efl-b84694f5189f86e223c68695366c0d676d8fc6a4.tar.gz |
exactness: factour out the program invoke code
It needs a little special case handling for the player (to load the edj
file), but the rest is really the same.
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11460
-rw-r--r-- | src/bin/exactness/common.c | 86 | ||||
-rw-r--r-- | src/bin/exactness/common.h | 4 | ||||
-rw-r--r-- | src/bin/exactness/player.c | 92 | ||||
-rw-r--r-- | src/bin/exactness/recorder.c | 88 |
4 files changed, 94 insertions, 176 deletions
diff --git a/src/bin/exactness/common.c b/src/bin/exactness/common.c index 17983cdbc6..4d770eb584 100644 --- a/src/bin/exactness/common.c +++ b/src/bin/exactness/common.c @@ -12,3 +12,89 @@ ex_printf(int verbose, const char *fmt, ...) vprintf(fmt, ap); va_end(ap); } + +int +ex_prg_invoke(const char *full_path, int argc, char **argv, Eina_Bool player) +{ + Eina_Value *ret__; + int real__; + + void (*efl_main)(void *data, const Efl_Event *ev); + int (*elm_main)(int argc, char **argv); + int (*c_main)(int argc, char **argv); + Eina_Module *h = eina_module_new(full_path); + if (!h || !eina_module_load(h)) + { + fprintf(stderr, "Failed loading %s.\n", full_path); + if (h) eina_module_free(h); + return 1; + } + efl_main = eina_module_symbol_get(h, "efl_main"); + elm_main = eina_module_symbol_get(h, "elm_main"); + c_main = eina_module_symbol_get(h, "main"); + _evas_new = eina_module_symbol_get(h, "evas_new"); + if (!_evas_new) + { + fprintf(stderr, "Failed loading symbol 'evas_new' from %s.\n", full_path); + eina_module_free(h); + return 1; + } + if (efl_main) + { + elm_init(argc, argv); + if (player) elm_theme_overlay_add(NULL, DATA_DIR"/exactness_play.edj"); + efl_event_callback_add(efl_main_loop_get(), EFL_LOOP_EVENT_ARGUMENTS, efl_main, NULL); + ret__ = efl_loop_begin(efl_main_loop_get()); + real__ = efl_loop_exit_code_process(ret__); + elm_shutdown(); + } + else if (elm_main) + { + elm_init(argc, argv); + if (player) elm_theme_overlay_add(NULL, DATA_DIR"/exactness_play.edj"); + real__ = elm_main(argc, argv); + elm_shutdown(); + } + else if (c_main) + { + real__ = c_main(argc, argv); + } + else + { + fprintf(stderr, "Failed loading symbol 'efl_main', 'elm_main' or 'main' from %s.\n", full_path); + eina_module_free(h); + real__ = 1; + } + return real__; +} + +Eina_Stringshare * +ex_prg_full_path_guess(const char *prg) +{ + char full_path[PATH_MAX]; + if (strchr(prg, '/')) return eina_stringshare_add(prg); + char *env_path = eina_strdup(getenv("PATH")); + Eina_Stringshare *ret = NULL; + char *paths = env_path; + + while (paths && *paths && !ret) + { + char *real_path; + char *colon = strchr(paths, ':'); + if (colon) *colon = '\0'; + + sprintf(full_path, "%s/%s", paths, prg); + real_path = ecore_file_realpath(full_path); + if (*real_path) + { + ret = eina_stringshare_add(real_path); + // check if executable + } + free(real_path); + + paths += strlen(paths); + if (colon) paths++; + } + free(env_path); + return ret; +} diff --git a/src/bin/exactness/common.h b/src/bin/exactness/common.h index 2581c63392..b3bb2da8c1 100644 --- a/src/bin/exactness/common.h +++ b/src/bin/exactness/common.h @@ -97,4 +97,8 @@ foo(Eina_Debug_Session *session, int srcid, void *buffer, int size) \ _buf += __len; \ } +Evas *(*_evas_new)(void); + void ex_printf(int verbose, const char *fmt, ...); +int ex_prg_invoke(const char *full_path, int argc, char **argv, Eina_Bool player); +Eina_Stringshare *ex_prg_full_path_guess(const char *prg); diff --git a/src/bin/exactness/player.c b/src/bin/exactness/player.c index fa9f0c63d3..ff500fcd8d 100644 --- a/src/bin/exactness/player.c +++ b/src/bin/exactness/player.c @@ -56,7 +56,6 @@ static Exactness_Unit *_src_unit = NULL; static const char *_test_name = NULL; static int _verbose = 0; -static Evas *(*_evas_new)(void) = NULL; static Eina_List *_evas_list = NULL; static Eina_List *_cur_event_list = NULL; @@ -804,94 +803,6 @@ _src_open() return EINA_TRUE; } -static int -_prg_invoke(const char *full_path, int argc, char **argv) -{ - Eina_Value *ret__; - int real__; - - void (*efl_main)(void *data, const Efl_Event *ev); - int (*elm_main)(int argc, char **argv); - int (*c_main)(int argc, char **argv); - Eina_Module *h = eina_module_new(full_path); - if (!h || !eina_module_load(h)) - { - fprintf(stderr, "Failed loading %s.\n", full_path); - if (h) eina_module_free(h); - return 1; - } - efl_main = eina_module_symbol_get(h, "efl_main"); - elm_main = eina_module_symbol_get(h, "elm_main"); - c_main = eina_module_symbol_get(h, "main"); - _evas_new = eina_module_symbol_get(h, "evas_new"); - if (!_evas_new) - { - fprintf(stderr, "Failed loading symbol 'evas_new' from %s.\n", full_path); - eina_module_free(h); - return 1; - } - - if (efl_main) - { - elm_init(argc, argv); - elm_theme_overlay_add(NULL, DATA_DIR"/exactness_play.edj"); - efl_event_callback_add(efl_main_loop_get(), EFL_LOOP_EVENT_ARGUMENTS, efl_main, NULL); - ret__ = efl_loop_begin(efl_main_loop_get()); - real__ = efl_loop_exit_code_process(ret__); - elm_shutdown(); - } - else if (elm_main) - { - elm_init(argc, argv); - elm_theme_overlay_add(NULL, DATA_DIR"/exactness_play.edj"); - real__ = elm_main(argc, argv); - elm_shutdown(); - } - else if (c_main) - { - real__ = c_main(argc, argv); - } - else - { - fprintf(stderr, "Failed loading symbol 'efl_main', 'elm_main' or 'main' from %s.\n", full_path); - eina_module_free(h); - real__ = 1; - } - - return real__; -} - -static Eina_Stringshare * -_prg_full_path_guess(const char *prg) -{ - char full_path[PATH_MAX]; - if (strchr(prg, '/')) return eina_stringshare_add(prg); - char *env_path = eina_strdup(getenv("PATH")); - Eina_Stringshare *ret = NULL; - char *paths = env_path; - - while (paths && *paths && !ret) - { - char *real_path; - char *colon = strchr(paths, ':'); - if (colon) *colon = '\0'; - - sprintf(full_path, "%s/%s", paths, prg); - real_path = ecore_file_realpath(full_path); - if (*real_path) - { - ret = eina_stringshare_add(real_path); - // check if executable - } - free(real_path); - - paths += strlen(paths); - if (colon) paths++; - } - free(env_path); - return ret; -} - static Eina_Bool _mkdir(const char *path, Eina_Bool skip_last) { @@ -1022,6 +933,7 @@ int main(int argc, char **argv) const char *chosen_fonts = NULL; Eina_Bool show_on_screen = EINA_FALSE; Eina_Bool want_quit = EINA_FALSE, external_injection = EINA_FALSE; + _evas_new = NULL; Ecore_Getopt_Value values[] = { ECORE_GETOPT_VALUE_STR(dest), @@ -1255,7 +1167,7 @@ int main(int argc, char **argv) ecore_evas_callback_new_set(_my_evas_new); if (_src_type != FTYPE_REMOTE) ecore_idler_add(_src_feed, NULL); - pret = _prg_invoke(_prg_full_path_guess(argv[0]), argc - opt_args, argv); + pret = ex_prg_invoke(ex_prg_full_path_guess(argv[0]), argc - opt_args, argv, EINA_TRUE); if (_dest && _dest_unit) { diff --git a/src/bin/exactness/recorder.c b/src/bin/exactness/recorder.c index f8eefe591e..965a88fb24 100644 --- a/src/bin/exactness/recorder.c +++ b/src/bin/exactness/recorder.c @@ -29,7 +29,6 @@ #define SHOT_KEY_STR "F2" #define SAVE_KEY_STR "F3" -static Evas *(*_evas_new)(void) = NULL; static const char *_out_filename = NULL; static const char *_test_name = NULL; static int _verbose = 0; @@ -236,90 +235,6 @@ _my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED) return e; } -static int -_prg_invoke(const char *full_path, int argc, char **argv) -{ - Eina_Value *ret__; - int real__; - - void (*efl_main)(void *data, const Efl_Event *ev); - int (*elm_main)(int argc, char **argv); - int (*c_main)(int argc, char **argv); - Eina_Module *h = eina_module_new(full_path); - if (!h || !eina_module_load(h)) - { - fprintf(stderr, "Failed loading %s.\n", full_path); - if (h) eina_module_free(h); - return EINA_FALSE; - } - efl_main = eina_module_symbol_get(h, "efl_main"); - elm_main = eina_module_symbol_get(h, "elm_main"); - c_main = eina_module_symbol_get(h, "main"); - _evas_new = eina_module_symbol_get(h, "evas_new"); - if (!_evas_new) - { - fprintf(stderr, "Failed loading symbol 'evas_new' from %s.\n", full_path); - eina_module_free(h); - return 1; - } - if (efl_main) - { - elm_init(argc, argv); - efl_event_callback_add(efl_main_loop_get(), EFL_LOOP_EVENT_ARGUMENTS, efl_main, NULL); - ret__ = efl_loop_begin(efl_main_loop_get()); - real__ = efl_loop_exit_code_process(ret__); - elm_shutdown(); - } - else if (elm_main) - { - elm_init(argc, argv); - real__ = elm_main(argc, argv); - elm_shutdown(); - } - else if (c_main) - { - real__ = c_main(argc, argv); - } - else - { - fprintf(stderr, "Failed loading symbol 'efl_main', 'elm_main' or 'main' from %s.\n", full_path); - eina_module_free(h); - real__ = 1; - } - return real__; -} - -static Eina_Stringshare * -_prg_full_path_guess(const char *prg) -{ - char full_path[PATH_MAX]; - if (strchr(prg, '/')) return eina_stringshare_add(prg); - char *env_path = eina_strdup(getenv("PATH")); - Eina_Stringshare *ret = NULL; - char *paths = env_path; - - while (paths && *paths && !ret) - { - char *real_path; - char *colon = strchr(paths, ':'); - if (colon) *colon = '\0'; - - sprintf(full_path, "%s/%s", paths, prg); - real_path = ecore_file_realpath(full_path); - if (*real_path) - { - ret = eina_stringshare_add(real_path); - // check if executable - } - free(real_path); - - paths += strlen(paths); - if (colon) paths++; - } - free(env_path); - return ret; -} - static Eina_Bool _mkdir(const char *dir) { @@ -370,6 +285,7 @@ int main(int argc, char **argv) char *fonts_dir = NULL; int pret = 1, opt_args = 0; Eina_Bool want_quit = EINA_FALSE; + _evas_new = NULL; Ecore_Getopt_Value values[] = { ECORE_GETOPT_VALUE_STR(dest), @@ -500,7 +416,7 @@ int main(int argc, char **argv) ecore_evas_callback_new_set(_my_evas_new); _last_timestamp = ecore_time_get() * 1000; - pret = _prg_invoke(_prg_full_path_guess(argv[0]), argc - opt_args, argv); + pret = ex_prg_invoke(ex_prg_full_path_guess(argv[0]), argc - opt_args, argv, EINA_FALSE); _output_write(); //free_events(_events_list, EINA_TRUE); |