stefan pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b84694f5189f86e223c68695366c0d676d8fc6a4

commit b84694f5189f86e223c68695366c0d676d8fc6a4
Author: Stefan Schmidt <[email protected]>
Date:   Tue Mar 17 16:53:30 2020 +0100

    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 <[email protected]>
    Reviewed-by: Marcel Hollerbach <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D11460
---
 src/bin/exactness/common.c   | 86 +++++++++++++++++++++++++++++++++++++++++
 src/bin/exactness/common.h   |  4 ++
 src/bin/exactness/player.c   | 92 +-------------------------------------------
 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);

-- 


Reply via email to