forked from enlightenment/edi
Move project creation to our Edi library.
Move to ecore_exe from fork/wait as it is more portable
This commit is contained in:
parent
f9ba2d3edf
commit
032d7e5963
|
@ -9,9 +9,6 @@
|
||||||
|
|
||||||
#include "edi_private.h"
|
#include "edi_private.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#define _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH 4
|
#define _EDI_WELCOME_PROJECT_NEW_TABLE_WIDTH 4
|
||||||
|
|
||||||
static Evas_Object *_welcome_window;
|
static Evas_Object *_welcome_window;
|
||||||
|
@ -189,11 +186,23 @@ _edi_welcome_project_new_input_row_add(const char *text, const char *placeholder
|
||||||
_create_inputs[row] = input;
|
_create_inputs[row] = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edi_welcome_project_new_create_done_cb(const char *path, Eina_Bool success)
|
||||||
|
{
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
ERR("Unable to create project at path %s", path);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_edi_welcome_project_open(path, EINA_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edi_welcome_project_new_create_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
_edi_welcome_project_new_create_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
const char *path, *name, *user, *email, *url;
|
const char *path, *name, *user, *email, *url;
|
||||||
char script[PATH_MAX], fullpath[PATH_MAX];
|
|
||||||
|
|
||||||
path = elm_fileselector_path_get(_create_inputs[0]);
|
path = elm_fileselector_path_get(_create_inputs[0]);
|
||||||
name = elm_object_text_get(_create_inputs[1]);
|
name = elm_object_text_get(_create_inputs[1]);
|
||||||
|
@ -201,19 +210,7 @@ _edi_welcome_project_new_create_cb(void *data EINA_UNUSED, Evas_Object *obj EINA
|
||||||
user = elm_object_text_get(_create_inputs[3]);
|
user = elm_object_text_get(_create_inputs[3]);
|
||||||
email = elm_object_text_get(_create_inputs[4]);
|
email = elm_object_text_get(_create_inputs[4]);
|
||||||
|
|
||||||
snprintf(script, sizeof(script), "%s/skeleton/eflprj", elm_app_data_dir_get());
|
edi_create_project(path, name, url, user, email, _edi_welcome_project_new_create_done_cb);
|
||||||
snprintf(fullpath, sizeof(fullpath), "%s/%s", path, name);
|
|
||||||
int pid = fork();
|
|
||||||
|
|
||||||
if (pid == 0)
|
|
||||||
{
|
|
||||||
printf("Creating project \"%s\" at path %s for %s<%s>\n", name, fullpath, user, email);
|
|
||||||
|
|
||||||
execlp(script, script, fullpath, name, user, email, url, NULL);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
waitpid(pid, NULL, 0);
|
|
||||||
_edi_welcome_project_open(fullpath, EINA_TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <edi_create.h>
|
||||||
#include <edi_builder.h>
|
#include <edi_builder.h>
|
||||||
#include <edi_path.h>
|
#include <edi_path.h>
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,15 @@ lib_LTLIBRARIES = libedi.la
|
||||||
|
|
||||||
includes_HEADERS = \
|
includes_HEADERS = \
|
||||||
edi_builder.h \
|
edi_builder.h \
|
||||||
|
edi_create.h \
|
||||||
edi_path.h \
|
edi_path.h \
|
||||||
Edi.h
|
Edi.h
|
||||||
includesdir = $(includedir)/edi-@VMAJ@
|
includesdir = $(includedir)/edi-@VMAJ@
|
||||||
|
|
||||||
libedi_la_SOURCES = \
|
libedi_la_SOURCES = \
|
||||||
edi_path.c \
|
|
||||||
edi_builder.c \
|
edi_builder.c \
|
||||||
|
edi_create.c \
|
||||||
|
edi_path.c \
|
||||||
edi.c
|
edi.c
|
||||||
libedi_la_LIBADD = @EFL_LIBS@ -lm
|
libedi_la_LIBADD = @EFL_LIBS@ -lm
|
||||||
libedi_la_LDFLAGS = -no-undefined @EFL_LTLIBRARY_FLAGS@
|
libedi_la_LDFLAGS = -no-undefined @EFL_LTLIBRARY_FLAGS@
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Edi.h"
|
#include "Edi.h"
|
||||||
#include "edi_builder.h"
|
|
||||||
|
|
||||||
#include "edi_private.h"
|
#include "edi_private.h"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
#ifdef HAVE_CONFIG
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
#include "Edi.h"
|
||||||
|
|
||||||
|
#include "edi_private.h"
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_edi_create_project_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
|
||||||
|
{
|
||||||
|
Edi_Create *create;
|
||||||
|
|
||||||
|
create = (Edi_Create *)data;
|
||||||
|
|
||||||
|
ecore_event_handler_del(create->handler);
|
||||||
|
create->callback(create->path, EINA_TRUE);
|
||||||
|
free(create->path);
|
||||||
|
free(data);
|
||||||
|
|
||||||
|
return ECORE_CALLBACK_DONE; // or ECORE_CALLBACK_PASS_ON
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
edi_create_project(const char *path, const char *name, const char *url,
|
||||||
|
const char *user, const char *email, Edi_Create_Cb func)
|
||||||
|
{
|
||||||
|
char script[PATH_MAX], fullpath[PATH_MAX];
|
||||||
|
char *cmd;
|
||||||
|
int cmdlen;
|
||||||
|
Edi_Create *data;
|
||||||
|
Ecore_Event_Handler *handler;
|
||||||
|
|
||||||
|
data = calloc(1, sizeof(Edi_Create));
|
||||||
|
handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_create_project_done, data);
|
||||||
|
snprintf(script, sizeof(script), "%s/skeleton/eflprj", elm_app_data_dir_get()
|
||||||
|
);
|
||||||
|
snprintf(fullpath, sizeof(fullpath), "%s/%s", path, name);
|
||||||
|
|
||||||
|
data->path = strdup(fullpath);
|
||||||
|
data->callback = func;
|
||||||
|
data->handler = handler;
|
||||||
|
|
||||||
|
cmdlen = strlen(script) + 19 + strlen(path) + strlen(name) + strlen(url) + strlen(user) + strlen(email);
|
||||||
|
cmd = malloc(sizeof(char) * cmdlen);
|
||||||
|
snprintf(cmd, cmdlen, "%s \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
|
||||||
|
script, fullpath, name, user, email, url);
|
||||||
|
|
||||||
|
INF("Creating project \"%s\" at path %s for %s<%s>\n", name, fullpath, user, email);
|
||||||
|
ecore_exe_run(cmd, data);
|
||||||
|
free(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
#ifndef EDI_CREATE_H_
|
||||||
|
# define EDI_CREATE_H_
|
||||||
|
|
||||||
|
#include <Elementary.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief These routines are used for creating new projects.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef void (*Edi_Create_Cb)(const char *path, Eina_Bool success);
|
||||||
|
|
||||||
|
typedef struct _Edi_Create
|
||||||
|
{
|
||||||
|
char *path;
|
||||||
|
|
||||||
|
Edi_Create_Cb callback;
|
||||||
|
Ecore_Event_Handler *handler;
|
||||||
|
} Edi_Create;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Main builder management
|
||||||
|
* @defgroup Creation
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* Functions of project creation from skeletons.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new standard EFL project.
|
||||||
|
*
|
||||||
|
* @ingroup Creation
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
edi_create_project(const char *path, const char *name, const char *url,
|
||||||
|
const char *user, const char *email, Edi_Create_Cb func);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* EDI_CREATE_H_ */
|
Loading…
Reference in New Issue