Use source codes stored in the unit as application
This can be useful if the application is not in an official repository like elementary_test. This feature allows compiling the source code and using it to run the scenario on. The command (e.g gcc...) must be stored in the unit as well. $SRC and $DEST can be used to specify the source and destination files in the command.
This commit is contained in:
parent
5ffc8ec640
commit
9831560caf
|
@ -249,8 +249,11 @@ ok:
|
|||
if (_mode == RUN_INIT)
|
||||
eina_strbuf_append_printf(sbuf, "-o '%s/%s' ", _dest_dir, ORIG_SUBDIR);
|
||||
}
|
||||
if (ent->command)
|
||||
{
|
||||
eina_strbuf_append(sbuf, "-- ");
|
||||
eina_strbuf_append(sbuf, ent->command);
|
||||
}
|
||||
strncpy(buf, eina_strbuf_string_get(sbuf), SCHEDULER_CMD_SIZE-1);
|
||||
eina_strbuf_free(sbuf);
|
||||
_printf(1, "Command: %s\n", buf);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <getopt.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_SYSINFO_H
|
||||
# include <sys/sysinfo.h>
|
||||
|
@ -1100,12 +1101,6 @@ int main(int argc, char **argv)
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (!argv[opt_args])
|
||||
{
|
||||
fprintf(stderr, "no program specified\nUse -h for more information\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (_dest_type == FTYPE_EXU) _dest_unit = calloc(1, sizeof(*_dest_unit));
|
||||
|
||||
if (!_src_open())
|
||||
|
@ -1158,6 +1153,8 @@ int main(int argc, char **argv)
|
|||
efl_object_init();
|
||||
evas_init();
|
||||
|
||||
if (argv[opt_args])
|
||||
{
|
||||
/* Replace the current command line to hide the Exactness part */
|
||||
int len = argv[argc - 1] + strlen(argv[argc - 1]) - argv[opt_args];
|
||||
memcpy(argv[0], argv[opt_args], len);
|
||||
|
@ -1173,6 +1170,42 @@ int main(int argc, char **argv)
|
|||
_printf(1, "%s ", argv[i - opt_args]);
|
||||
}
|
||||
_printf(1, "\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
Eina_List *itr;
|
||||
Exactness_Source_Code *code;
|
||||
Eina_Tmpstr *f_output = NULL;
|
||||
EINA_LIST_FOREACH(_src_unit->codes, itr, code)
|
||||
{
|
||||
if (!strcmp(code->language, "C") && code->command)
|
||||
{
|
||||
int status;
|
||||
Ecore_Exe *exe;
|
||||
Eina_Tmpstr *f_code;
|
||||
Eina_Strbuf *sbuf;
|
||||
int fd_code = eina_file_mkstemp("exactness_XXXXXX.c", &f_code);
|
||||
int fd_output = eina_file_mkstemp("exactness_XXXXXX.output", &f_output);
|
||||
close(fd_output);
|
||||
write(fd_code, code->content, strlen(code->content));
|
||||
close(fd_code);
|
||||
|
||||
sbuf = eina_strbuf_new();
|
||||
eina_strbuf_append(sbuf, code->command);
|
||||
eina_strbuf_replace_all(sbuf, "$SRC", f_code);
|
||||
eina_strbuf_replace_all(sbuf, "$DEST", f_output);
|
||||
exe = ecore_exe_pipe_run(eina_strbuf_string_get(sbuf), ECORE_EXE_NONE, NULL);
|
||||
waitpid(ecore_exe_pid_get(exe), &status, 0);
|
||||
}
|
||||
}
|
||||
if (!f_output)
|
||||
{
|
||||
fprintf(stderr, "no program specified\nUse -h for more information\n");
|
||||
goto end;
|
||||
}
|
||||
argv[0] = strdup(f_output);
|
||||
}
|
||||
|
||||
|
||||
ecore_evas_callback_new_set(_my_evas_new);
|
||||
if (_src_type != FTYPE_REMOTE)
|
||||
|
|
|
@ -186,12 +186,20 @@ typedef struct
|
|||
void *pixels; /**< Pixels of the image */
|
||||
} Exactness_Image;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *language; /**< String describing the language of the content e.g "C"...*/
|
||||
char *content; /**< Content used as source */
|
||||
char *command; /**< Command needed to generate the application from the content */
|
||||
} Exactness_Source_Code;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Eina_List *actions; /**< List of Exactness_Action */
|
||||
/* imgs not in EET */
|
||||
Eina_List *imgs; /**< List of Exactness_Image */
|
||||
Eina_List *objs; /**< List of Exactness_Objects */
|
||||
Eina_List *codes; /**< List of Exactness_Source_Code */
|
||||
const char *fonts_path; /**< Path to the fonts to use, relative to the fonts dir given in parameter to the player/recorder */
|
||||
int nb_shots; /**< The number of shots present in the unit */
|
||||
} Exactness_Unit;
|
||||
|
|
|
@ -203,6 +203,13 @@ _unit_desc_make(void)
|
|||
}
|
||||
if (!unit_d)
|
||||
{
|
||||
Eet_Data_Descriptor *code_d = NULL;
|
||||
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Source_Code);
|
||||
code_d = eet_data_descriptor_stream_new(&eddc);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(code_d, Exactness_Source_Code, "language", language, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(code_d, Exactness_Source_Code, "content", content, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(code_d, Exactness_Source_Code, "command", command, EET_T_STRING);
|
||||
|
||||
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Exactness_Action);
|
||||
action_d = eet_data_descriptor_stream_new(&eddc);
|
||||
|
||||
|
@ -243,6 +250,7 @@ _unit_desc_make(void)
|
|||
unit_d = eet_data_descriptor_stream_new(&eddc);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(unit_d, Exactness_Unit, "actions", actions, action_d);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(unit_d, Exactness_Unit, "objs", objs, objs_d);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(unit_d, Exactness_Unit, "codes", codes, code_d);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(unit_d, Exactness_Unit, "fonts_path", fonts_path, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(unit_d, Exactness_Unit, "nb_shots", nb_shots, EET_T_UINT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue