summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Schmidt <s.schmidt@samsung.com>2020-03-17 16:53:30 +0100
committerStefan Schmidt <s.schmidt@samsung.com>2020-03-20 12:04:35 +0100
commitb84694f5189f86e223c68695366c0d676d8fc6a4 (patch)
tree402a74ecd7daeb4f9fbc24bc6f0a40a3900deb67
parentb5c24af2e14c9a56dbba0f61119281c06da66758 (diff)
downloadefl-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.c86
-rw-r--r--src/bin/exactness/common.h4
-rw-r--r--src/bin/exactness/player.c92
-rw-r--r--src/bin/exactness/recorder.c88
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);