rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=3a790ad34615142ce10f07ab690977bfbccb3453

commit 3a790ad34615142ce10f07ab690977bfbccb3453
Author: Vyacheslav Reutskiy <v.reuts...@samsung.com>
Date:   Wed Jan 6 09:02:26 2016 +0200

    project_manager: implement the release edj export
    
    Change-Id: I32c86f6cabb197353d86e24db00fc316c067a9eb
---
 src/bin/project_manager/project_manager.c | 121 ++++++++++++++++++++++++++----
 src/bin/project_manager/project_manager.h |  21 ++++++
 2 files changed, 127 insertions(+), 15 deletions(-)

diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index c8c27ed..fe75066 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -1556,29 +1556,25 @@ pm_group_source_code_export(Project *project,
      }
 }
 
-static void *
-_source_code_export(void *data __UNUSED__, Eina_Thread *thread __UNUSED__)
+static Eina_Bool
+_project_src_export(const char *path)
 {
    Eina_Stringshare *code;
    Eina_Strbuf *buf;
    FILE *f;
 
-   PROGRESS_SEND(_("Generate source code..."));
-
    buf = eina_strbuf_new();
    /* create a folder for collect the source files */
-   eina_strbuf_append_printf(buf, "%s/%s", worker.path, worker.project->name);
-   ecore_file_mkdir(eina_strbuf_string_get(buf));
+   ecore_file_mkdir(path);
    eina_strbuf_reset(buf);
 
    /* create and open edc file for print the source code of collection 
(project) */
-   eina_strbuf_append_printf(buf, "%s/%s/generated.edc", worker.path, 
worker.project->name);
+   eina_strbuf_append_printf(buf, "%s/generated.edc", path);
    f = fopen(eina_strbuf_string_get(buf), "w");
    if (!f)
      {
         ERR("Could't open file '%s'", eina_strbuf_string_get(buf))
-        END_SEND(PM_PROJECT_ERROR);
-        goto exit;
+        return false;
      }
    eina_strbuf_reset(buf);
 
@@ -1594,32 +1590,46 @@ _source_code_export(void *data __UNUSED__, Eina_Thread 
*thread __UNUSED__)
    /* export resource */
    if (worker.project->images)
      {
-        eina_strbuf_append_printf(buf, "%s/%s/images/", worker.path, 
worker.project->name);
+        eina_strbuf_append_printf(buf, "%s/images/", path);
         ecore_file_mkdir(eina_strbuf_string_get(buf));
         _external_resources_export(worker.project->images, 
eina_strbuf_string_get(buf));
         eina_strbuf_reset(buf);
      }
    if (worker.project->sounds)
      {
-        eina_strbuf_append_printf(buf, "%s/%s/sounds/", worker.path, 
worker.project->name);
+        eina_strbuf_append_printf(buf, "%s/sounds/", path);
         ecore_file_mkdir(eina_strbuf_string_get(buf));
         _external_resources_export(worker.project->sounds, 
eina_strbuf_string_get(buf));
         eina_strbuf_reset(buf);
      }
    if (worker.project->fonts)
      {
-        eina_strbuf_append_printf(buf, "%s/%s/fonts/", worker.path, 
worker.project->name);
+        eina_strbuf_append_printf(buf, "%s/fonts/", path);
         ecore_file_mkdir(eina_strbuf_string_get(buf));
         _external_resources_export(worker.project->fonts, 
eina_strbuf_string_get(buf));
         eina_strbuf_reset(buf);
      }
 
    eina_strbuf_reset(buf);
-   eina_strbuf_append_printf(buf, "%s/%s/build.sh", worker.path, 
worker.project->name);
+   eina_strbuf_append_printf(buf, "%s/build.sh", path);
    _build_script_write(eina_strbuf_string_get(buf));
 
-   END_SEND(PM_PROJECT_SUCCESS);
-exit:
+   eina_strbuf_free(buf);
+   return true;
+}
+
+static void *
+_source_code_export(void *data __UNUSED__, Eina_Thread *thread __UNUSED__)
+{
+   Eina_Strbuf *buf;
+
+   PROGRESS_SEND(_("Generate source code ..."));
+   buf = eina_strbuf_new();
+   eina_strbuf_append_printf(buf, "%s/%s", worker.path, worker.project->name);
+   if (_project_src_export(eina_strbuf_string_get(buf)))
+     END_SEND(PM_PROJECT_SUCCESS)
+   else
+     END_SEND(PM_PROJECT_ERROR)
    eina_strbuf_free(buf);
    return NULL;
 }
@@ -1645,6 +1655,87 @@ pm_project_source_code_export(Project *project,
      }
 }
 
+static void *
+_release_export(void *data __UNUSED__,
+                Eina_Thread *thread __UNUSED__)
+{
+   Eina_Tmpstr *tmp_dirname;
+   Eina_Strbuf *cmd;
+   Ecore_Exe *exe_cmd;
+   pid_t exe_pid;
+   Ecore_Event_Handler *cb_msg_stdout = NULL,
+                       *cb_msg_stderr = NULL;
+   Ecore_Exe_Flags flags  = ECORE_EXE_PIPE_READ |
+                            ECORE_EXE_PIPE_READ_LINE_BUFFERED |
+                            ECORE_EXE_PIPE_ERROR |
+                            ECORE_EXE_PIPE_ERROR_LINE_BUFFERED;
+   int waitpid_res = 0, edje_cc_res = 0;
+
+   PROGRESS_SEND(_("Export project as release file"));
+   PROGRESS_SEND(_("Export to file '%s'"), worker.edj);
+
+   eina_file_mkdtemp("eflete_build_XXXXXX", &tmp_dirname);
+   if (!_project_src_export(tmp_dirname))
+     {
+        END_SEND(PM_PROJECT_ERROR)
+        goto exit0;
+     }
+   if (worker.func_progress)
+     {
+        cb_msg_stdout = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, 
_exe_data, NULL);
+        cb_msg_stderr = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, 
_exe_data, NULL);
+     }
+   cmd = eina_strbuf_new();
+   eina_strbuf_append_printf(cmd, "edje_cc -v -id %s/images/ -sd %s/sounds/ 
-fd %s/fonts/ %s/generated.edc %s",
+                             tmp_dirname, tmp_dirname, tmp_dirname, 
tmp_dirname, worker.edj);
+   THREAD_TESTCANCEL;
+   exe_cmd = ecore_exe_pipe_run(eina_strbuf_string_get(cmd), flags, NULL);
+   exe_pid = ecore_exe_pid_get(exe_cmd);
+   THREAD_TESTCANCEL;
+   waitpid_res = waitpid(exe_pid, &edje_cc_res, 0);
+   if (worker.func_progress)
+     {
+        ecore_event_handler_del(cb_msg_stdout);
+        ecore_event_handler_del(cb_msg_stderr);
+     }
+   if ((waitpid_res == -1) ||
+       (WIFEXITED(edje_cc_res) && (WEXITSTATUS(edje_cc_res) != 0 )))
+     {
+        END_SEND(PM_PROJECT_ERROR);
+        goto exit1;
+     }
+
+   PROGRESS_SEND("Export done");
+   END_SEND(PM_PROJECT_SUCCESS);
+
+exit1:
+   eina_strbuf_free(cmd);
+exit0:
+   ecore_file_recursive_rm(tmp_dirname);
+   eina_tmpstr_del(tmp_dirname);
+   return NULL;
+}
+
+void
+pm_project_release_export(Project *project,
+                          const char *path,
+                          PM_Project_Progress_Cb func_progress,
+                          PM_Project_End_Cb func_end,
+                          const void *data)
+{
+   assert(project != NULL);
+   assert(path != NULL);
+
+   WORKER_CREATE(func_progress, func_end, data, project,
+                 NULL, NULL, path, NULL, data);
+
+   if (!eina_thread_create(&worker.thread, EINA_THREAD_URGENT, -1,
+                           (void *)_release_export, NULL))
+     {
+        ERR("System error: can't create thread");
+        abort();
+     }
+}
 
 static void *
 _develop_export(void *data __UNUSED__,
diff --git a/src/bin/project_manager/project_manager.h 
b/src/bin/project_manager/project_manager.h
index e35aab9..08412f2 100644
--- a/src/bin/project_manager/project_manager.h
+++ b/src/bin/project_manager/project_manager.h
@@ -476,6 +476,27 @@ pm_project_develop_export(Project *pro,
                           const void *data) EINA_ARG_NONNULL(1, 2);
 
 /**
+ * Export the edj release file from current project. The develop edj file
+ * exclude unused images, sounds, fonts and data files.
+ *
+ * @param pro The opened project;
+ * @param path Path to save the edj file.
+ * @param func_progress The progress callback;
+ * @param func_end The end callback, this callback be called on the end of
+ *        Project progress;
+ * @param data The user data.
+ *
+ * @ingroup ProjectManager.
+ */
+void
+pm_project_release_export(Project *pro,
+                          const char *path,
+                          PM_Project_Progress_Cb func_progress,
+                          PM_Project_End_Cb func_end,
+                          const void *data) EINA_ARG_NONNULL(1, 2);
+
+
+/**
  * Save the current editing style as edj file.
  *
  * @param project The project what should be saved.

-- 


Reply via email to