yakov pushed a commit to branch master.

http://git.enlightenment.org/tools/erigo.git/commit/?id=ec10caceb89909a4e5890c5ca1d98b337a530d61

commit ec10caceb89909a4e5890c5ca1d98b337a530d61
Author: Yakov Goldberg <[email protected]>
Date:   Sun Jan 18 12:07:15 2015 +0200

    Change CLI options for generation
---
 src/bin/egui_gui/CMakeLists.txt |  3 +-
 src/bin/egui_gui/egui_logic.c   |  7 +++-
 src/bin/main.c                  | 78 ++++++++++++++++++++---------------------
 src/lib/generator.c             | 64 +++++++++++++++++++++------------
 src/lib/generator.h             |  3 +-
 src/lib/gui_widget.c            | 30 +++++++++++++++-
 src/lib/gui_widget.h            | 12 +++++++
 7 files changed, 131 insertions(+), 66 deletions(-)

diff --git a/src/bin/egui_gui/CMakeLists.txt b/src/bin/egui_gui/CMakeLists.txt
index b784c9c..1feb300 100644
--- a/src/bin/egui_gui/CMakeLists.txt
+++ b/src/bin/egui_gui/CMakeLists.txt
@@ -45,7 +45,8 @@ add_custom_command(
    OUTPUT egui_layout.c egui_layout.h
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/egui_layout.json 
${EGUI_BINARY_BLD}/erigo_cmd
    COMMENT "Generating gui layout from JSON"
-   COMMAND ${EGUI_BINARY_BLD}/erigo_cmd -e c -o ./egui_layout 
${CMAKE_CURRENT_SOURCE_DIR}/egui_layout.json
+   COMMAND ${EGUI_BINARY_BLD}/erigo_cmd --gc -o ./egui_layout.c 
${CMAKE_CURRENT_SOURCE_DIR}/egui_layout.json
+   COMMAND ${EGUI_BINARY_BLD}/erigo_cmd --gh -o ./egui_layout.h 
${CMAKE_CURRENT_SOURCE_DIR}/egui_layout.json
    )
 
 ############################
diff --git a/src/bin/egui_gui/egui_logic.c b/src/bin/egui_gui/egui_logic.c
index a8a7385..3340d7e 100644
--- a/src/bin/egui_gui/egui_logic.c
+++ b/src/bin/egui_gui/egui_logic.c
@@ -223,7 +223,12 @@ _on_fs_done(void *data, Evas_Object *obj EINA_UNUSED, void 
*event)
                    /* FIXME: File exists, check if want to save*/
                    ERR("can save, but file exists, show confirmation window");
                 }
+              char ch_file[PATH_MAX];
               gui_context_export_filename_set((Gui_Context *) ctx, filename);
+              sprintf(ch_file, "%s.c", filename);
+              gui_context_export_c_filename_set((Gui_Context *) ctx, ch_file);
+              sprintf(ch_file, "%s.h", filename);
+              gui_context_export_h_filename_set((Gui_Context *) ctx, ch_file);
               gui_context_export_path_set((Gui_Context *) ctx, (const char *) 
parent_dir);
               int state = -1;
               eo_do(fs_win->fs_radio_c, state = elm_obj_radio_value_get());
@@ -231,7 +236,7 @@ _on_fs_done(void *data, Evas_Object *obj EINA_UNUSED, void 
*event)
                 {
                  case 0:
                       {
-                         generator_ctx_source_generate(ctx, GENERATE_C);
+                         generator_ctx_source_generate(ctx, GENERATE_C | 
GENERATE_H);
                          break;
                       }
                  case 1:
diff --git a/src/bin/main.c b/src/bin/main.c
index ae409d4..6d47822 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -43,17 +43,33 @@ _generate(const char *in_file, const char *out_path, 
Generator_Export_Format for
      {
         path = out_dir;
      }
-   /* if new_project_name is no NULL, we want to put new project name. */
-   if (format == GENERATE_JSON)
+
+   gui_context_export_path_set(ctx, path);
+
+   /* When generating c file... */
+   if (format & GENERATE_C)
      {
-        gui_context_project_path_set(ctx, path);
-        gui_context_project_filename_set(ctx, out_file);
+        char out_h_file[PATH_MAX];
+        strcpy(out_h_file, out_file);
+        /* If filename.c was provided, filename.h will be used inside c file.
+         * If other filename provided just add .h in the end. */
+        if (eina_str_has_suffix(out_h_file, ".c"))
+          {
+             out_h_file[strlen(out_h_file) - 1] = 'h';
+          }
+        else
+          {
+             sprintf(out_h_file, "%s%s", out_h_file, ".h");
+          }
+        gui_context_export_h_filename_set(ctx, out_h_file);
+        gui_context_export_c_filename_set(ctx, out_file);
      }
-   else
+   /* When generating h file, it will be generated into user provided name. */
+   else if (format & GENERATE_H)
      {
-        gui_context_export_path_set(ctx, path);
-        gui_context_export_filename_set(ctx, out_file);
+        gui_context_export_h_filename_set(ctx, out_file);
      }
+
    generator_ctx_source_generate(ctx, format);
    gui_context_del(ctx);
    free(out_dir);
@@ -112,18 +128,22 @@ enum
    MODE_EXPORT
 };
 
+static Generator_Export_Format export_format = GENERATE_NONE;
+
 int
 main(int argc, char **argv)
 {
-   const char *new_filename = NULL, *target_name = NULL;
+   const char *output_filename = NULL, *target_name = NULL;
    char *filename = NULL;
    int mode = MODE_GUI;
-   Generator_Export_Format export_format = GENERATE_NONE;
 
    static struct option long_options[] =
      {
-          {"export", required_argument, 0, 'e'},
+          {"gc", no_argument, (int *) &export_format, GENERATE_C},
+          {"gh", no_argument, (int *) &export_format, GENERATE_H},
+          {"gjson", no_argument, (int *) &export_format, GENERATE_JSON},
           {"simulate", required_argument, 0, 's'},
+          {"output", required_argument, 0, 'o'},
           {"help", no_argument, 0, 'h'},
           {0, 0, 0, 0}
      };
@@ -133,30 +153,9 @@ main(int argc, char **argv)
         switch (opt)
           {
            case 0: break;
-           case 'e':
-                   {
-                      mode = MODE_EXPORT;
-                      if (!strcmp(optarg, "cpp"))
-                        {
-                           export_format = GENERATE_CPP;
-                        }
-                      else if (!strcmp(optarg, "c"))
-                        {
-                           export_format = GENERATE_C;
-                        }
-                      else if (!strcmp(optarg, "json"))
-                        {
-                           export_format = GENERATE_JSON;
-                        }
-                      else
-                        {
-                           mode = MODE_HELP;
-                        }
-                      break;
-                   }
            case 'o':
                    {
-                      new_filename = argv[optind - 1];
+                      output_filename = argv[optind - 1];
                       break;
                    }
            case 's':
@@ -174,16 +173,17 @@ main(int argc, char **argv)
 
    if (mode == MODE_HELP)
      {
-        printf("Usage: %s [-h/--help] [-e/--export export_format] 
[-s/--simulate target_name] [-o OUTFILE] filename\n", argv[0]);
+        printf("Usage: %s [-h/--help] [--gh|--gc|--gjson] [-s/--simulate 
target_name] [-o OUTFILE] filename\n", argv[0]);
         printf("       --help/-h Print this help.\n");
-        printf("       -o Provide output filename.\n");
-        printf("       --export/-e Export format: (c, cpp, json).\n");
-        printf("                                  - in case of \"json\" format 
OUTFILE will be generated;\n");
-        printf("                                  - in case of other format, 
files with all required extensions will be generated.\n");
-        printf("                                    T.e. 
OUTFILE.cpp/OUTFILE.hh for cpp.\n");
+        printf("       --output/-o Provide output filename.\n");
+        printf("       --gh Generate C header file [.h]\n");
+        printf("       --gc Generate C source file [.c]");
+        printf("\n       --gjson Generate JSON project file [.egui]");
+        printf("\n");
         printf("       --simulate/-s Target name: (Desktop, Phone, 
Tablet).\n");
         goto end;
      }
+   if (export_format) mode = MODE_EXPORT;
 
    if (argc == 1)
      {
@@ -267,7 +267,7 @@ main(int argc, char **argv)
      }
    else if (mode == MODE_EXPORT)
      {
-        _generate(filename, new_filename, export_format);
+        _generate(filename, output_filename, export_format);
      }
    if (mode == MODE_SIMULATE)
      elm_shutdown();
diff --git a/src/lib/generator.c b/src/lib/generator.c
index 18d5dd8..fa799b1 100644
--- a/src/lib/generator.c
+++ b/src/lib/generator.c
@@ -706,7 +706,6 @@ static void
 _ctx_generate(Global_Gen_Context *gl_ctx)
 {
    const Gui_Context *ctx = gl_ctx->ctx;
-   const char *filename = gui_context_export_filename_get(ctx);
    const Eina_List *itr;
    Eina_List *wdg_ctxs = NULL;
    Widget_Context *wdg_ctx;
@@ -795,7 +794,7 @@ _ctx_generate(Global_Gen_Context *gl_ctx)
          "#include <Elementary.h>\n"
          "#include \"elm_widget_container.h\"\n"
          "#include \"elm_interface_scrollable.h\"\n"
-         "#include \"%s.h\"\n\n", filename);
+         "#include \"%s\"\n\n", gui_context_export_h_filename_get(ctx));
 
    eina_strbuf_append_printf(gl_ctx->c_buf,
          "static %s_Widgets g_%s;\n\n",
@@ -857,9 +856,20 @@ _ctx_generate(Global_Gen_Context *gl_ctx)
      }
 
    /* Generate header file. */
+   char *h_macro = strdup(gui_context_export_h_filename_get(ctx)), *p;
+   p = h_macro;
+   while (*p)
+     {
+        if (*p == '.') *p = '_';
+        p++;
+     }
+
    eina_strbuf_append_printf(gl_ctx->h_buf,
          "#ifndef _%s_h\n"
-         "#define _%s_h\n", filename, filename);
+         "#define _%s_h\n", h_macro, h_macro);
+   free(h_macro);
+   h_macro = NULL;
+
    eina_strbuf_append_printf(gl_ctx->h_buf,
          "#include <Eo.h>\n"
          "#include <Elementary.h>\n\n");
@@ -917,7 +927,7 @@ _ctx_generate(Global_Gen_Context *gl_ctx)
 
 /* Save context into "project" files. */
 static void
-_ctx_to_file_save(const Gui_Context *ctx)
+_ctx_to_file_save(const Gui_Context *ctx, Generator_Export_Format format)
 {
    Eina_Strbuf *filename = NULL;
    FILE *fp = NULL;
@@ -939,29 +949,38 @@ _ctx_to_file_save(const Gui_Context *ctx)
    _ctx_generate(&gl_gen_ctx);
 
    filename = eina_strbuf_new();
-   eina_strbuf_append_printf(filename, "%s/%s.c",
-         gui_context_export_path_get(ctx),
-         gui_context_export_filename_get(ctx));
-   fp = fopen(eina_strbuf_string_get(filename), "w+");
-   if (!fp)
+   if (format & GENERATE_C)
      {
-        ERR("Can't create file: %s", eina_strbuf_string_get(filename));
-        goto end;
+        eina_strbuf_append_printf(filename, "%s/%s",
+                                  gui_context_export_path_get(ctx),
+                                  gui_context_export_c_filename_get(ctx));
+
+        fp = fopen(eina_strbuf_string_get(filename), "w+");
+        if (!fp)
+          {
+             ERR("Can't create file: %s", eina_strbuf_string_get(filename));
+             goto end;
+          }
+        fprintf(fp, "%s", eina_strbuf_string_get(gl_gen_ctx.c_buf));
+        fclose(fp);
      }
-   fprintf(fp, "%s", eina_strbuf_string_get(gl_gen_ctx.c_buf));
-   fclose(fp);
 
    eina_strbuf_reset(filename);
-   eina_strbuf_append_printf(filename, "%s/%s.h",
-         gui_context_export_path_get(ctx),
-         gui_context_export_filename_get(ctx));
-   fp = fopen(eina_strbuf_string_get(filename), "w+");
-   if (!fp)
+
+   if (format & GENERATE_H)
      {
-        ERR("Can't create file: %s", eina_strbuf_string_get(filename));
-        goto end;
+        eina_strbuf_append_printf(filename, "%s/%s",
+                                  gui_context_export_path_get(ctx),
+                                  gui_context_export_h_filename_get(ctx));
+        fp = fopen(eina_strbuf_string_get(filename), "w+");
+        if (!fp)
+          {
+             ERR("Can't create file: %s", eina_strbuf_string_get(filename));
+             goto end;
+          }
+        fprintf(fp, "%s", eina_strbuf_string_get(gl_gen_ctx.h_buf));
+        fclose(fp);
      }
-   fprintf(fp, "%s", eina_strbuf_string_get(gl_gen_ctx.h_buf));
 
 end:
    eina_strbuf_free(gl_gen_ctx.c_buf);
@@ -971,7 +990,6 @@ end:
    free(gl_gen_ctx.formatted_project_name);
    session_del(gl_gen_ctx.session);
 
-   if (fp) fclose(fp);
    eina_strbuf_free(filename);
 }
 
@@ -990,6 +1008,6 @@ generator_ctx_source_generate(const Gui_Context *ctx, 
Generator_Export_Format fo
    funcs->content_set = _content_set_generate;
    funcs->item_add = _item_add_generate;
 
-   _ctx_to_file_save(ctx);
+   _ctx_to_file_save(ctx, format);
 }
 
diff --git a/src/lib/generator.h b/src/lib/generator.h
index cea4d84..00a45e9 100644
--- a/src/lib/generator.h
+++ b/src/lib/generator.h
@@ -7,7 +7,8 @@ typedef enum
    GENERATE_NONE,
    GENERATE_JSON = 1 << 0,
    GENERATE_C = 1 << 1,
-   GENERATE_CPP = 1 << 2
+   GENERATE_H = 1 << 2,
+   GENERATE_CPP = 1 << 3
 } Generator_Export_Format;
 
 /* Generate sources for context*/
diff --git a/src/lib/gui_widget.c b/src/lib/gui_widget.c
index 41a0773..e1a6478 100644
--- a/src/lib/gui_widget.c
+++ b/src/lib/gui_widget.c
@@ -143,7 +143,10 @@ struct _Gui_Context
    Eina_Stringshare *project_name;
    Eina_Stringshare *project_filename;
    Eina_Stringshare *project_path;
+
    Eina_Stringshare *export_filename;
+   Eina_Stringshare *export_c_filename;
+   Eina_Stringshare *export_h_filename;
    Eina_Stringshare *export_path;
    Eina_Stringshare *images_prefix;
    Eina_Hash *names_hash; /* Handle ids of names in current class: t.e. 
"elm_button1" */
@@ -434,12 +437,36 @@ gui_context_export_filename_set(Gui_Context *ctx, const 
char *filename)
    eina_stringshare_replace(&ctx->export_filename, filename);
 }
 
+void
+gui_context_export_c_filename_set(Gui_Context *ctx, const char *filename)
+{
+   eina_stringshare_replace(&ctx->export_c_filename, filename);
+}
+
+void
+gui_context_export_h_filename_set(Gui_Context *ctx, const char *filename)
+{
+   eina_stringshare_replace(&ctx->export_h_filename, filename);
+}
+
 Eina_Stringshare *
 gui_context_export_filename_get(const Gui_Context *ctx)
 {
    return ctx->export_filename;
 }
 
+Eina_Stringshare *
+gui_context_export_c_filename_get(const Gui_Context *ctx)
+{
+   return ctx->export_c_filename;
+}
+
+Eina_Stringshare *
+gui_context_export_h_filename_get(const Gui_Context *ctx)
+{
+   return ctx->export_h_filename;
+}
+
 void
 gui_context_export_path_set(Gui_Context *ctx, const char *path)
 {
@@ -559,7 +586,8 @@ gui_context_del(Gui_Context *ctx)
    eina_stringshare_del(ctx->project_name);
    eina_stringshare_del(ctx->project_filename);
    eina_stringshare_del(ctx->export_path);
-   eina_stringshare_del(ctx->export_filename);
+   eina_stringshare_del(ctx->export_c_filename);
+   eina_stringshare_del(ctx->export_h_filename);
    eina_stringshare_del(ctx->images_prefix);
 
    context_array[ctx->id] = NULL;
diff --git a/src/lib/gui_widget.h b/src/lib/gui_widget.h
index 4698f90..bdd5402 100644
--- a/src/lib/gui_widget.h
+++ b/src/lib/gui_widget.h
@@ -219,9 +219,21 @@ gui_context_project_path_get(const Gui_Context *ctx);
 void
 gui_context_export_filename_set(Gui_Context *ctx, const char *filename);
 
+void
+gui_context_export_h_filename_set(Gui_Context *ctx, const char *filename);
+
+void
+gui_context_export_c_filename_set(Gui_Context *ctx, const char *filename);
+
 Eina_Stringshare *
 gui_context_export_filename_get(const Gui_Context *ctx);
 
+Eina_Stringshare *
+gui_context_export_h_filename_get(const Gui_Context *ctx);
+
+Eina_Stringshare *
+gui_context_export_c_filename_get(const Gui_Context *ctx);
+
 void
 gui_context_export_path_set(Gui_Context *ctx, const char *path);
 

-- 


Reply via email to