14
# define WEXITSTATUS(r) r
17
static Eina_Tmpstr *watchfile;
18
static char *edje_cc_command = NULL;
19
static Eina_List *watching = NULL;
20
static Ecore_Timer *timeout = NULL;
21
static Eina_Bool anotate = EINA_FALSE;
24
read_watch_file(const char *file)
32
f = eina_file_open(file, EINA_FALSE);
35
it = eina_file_map_lines(f);
38
EINA_ITERATOR_FOREACH(it, ln)
41
Eina_Bool do_append = EINA_TRUE;
43
if (ln->length < 4) continue;
46
path = eina_stringshare_add_length(ln->start + 3, ln->length - 3);
47
fprintf(stdout, "%c: %s\n", *ln->start, path);
48
if (*ln->start == 'O')
49
do_append = EINA_FALSE;
53
path = eina_stringshare_add_length(ln->start, ln->length);
56
r = eina_list_append(r, eio_monitor_add(path));
57
eina_stringshare_del(path);
59
eina_iterator_free(it);
61
EINA_LIST_FREE(watching, mon)
70
rebuild(void *data EINA_UNUSED)
75
start = ecore_time_get();
76
fprintf(stdout, "* SYSTEM('%s')\n", edje_cc_command);
79
ret = system(edje_cc_command);
80
if (WEXITSTATUS(ret) == 0)
81
read_watch_file(watchfile);
82
end = ecore_time_get();
83
fprintf(stdout, "* DONE IN %f\n", end - start);
91
some_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
93
if (timeout) ecore_timer_del(timeout);
94
timeout = ecore_timer_add(0.5, rebuild, NULL);
96
return ECORE_CALLBACK_PASS_ON;
100
main(int argc, char **argv)
110
if (argc < 2) return -1;
112
ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, some_change, NULL);
113
ecore_event_handler_add(EIO_MONITOR_FILE_CREATED, some_change, NULL);
114
ecore_event_handler_add(EIO_MONITOR_FILE_DELETED, some_change, NULL);
115
ecore_event_handler_add(EIO_MONITOR_FILE_CLOSED, some_change, NULL);
117
tfd = eina_file_mkstemp("edje_watch-tmp-XXXXXX", &watchfile);
118
if (tfd < 0) return -1;
121
buf = eina_strbuf_new();
124
eina_strbuf_append_printf(buf, "%s/edje_cc -fastcomp -w %s ", PACKAGE_BIN_DIR, watchfile);
125
for (i = 1; i < argc; ++i)
127
if (!strcmp(argv[i], "-anotate"))
129
eina_strbuf_append_printf(buf, "%s ", argv[i]);
131
eina_strbuf_append(buf, "> /dev/null");
133
edje_cc_command = eina_strbuf_string_steal(buf);
135
eina_strbuf_free(buf);
139
ecore_main_loop_begin();
142
eina_tmpstr_del(watchfile);