build: Fix edi_build with meson to compile from scratch in one pass

This commit is contained in:
Andy Williams 2017-10-11 23:17:59 +01:00
parent 014557e0c7
commit 86ae8c104f
1 changed files with 10 additions and 4 deletions

View File

@ -79,12 +79,18 @@ _meson_project_runnable_is(const char *path)
return ecore_file_can_exec(path); return ecore_file_can_exec(path);
} }
static const char *
_meson_ninja_cmd(Meson_Data *md, const char *arg)
{
return eina_slstr_printf("ninja -C %s %s", md->fulldir, arg ?: "");
}
static void static void
_meson_ninja_do(Meson_Data *md, const char *arg) _meson_ninja_do(Meson_Data *md, const char *arg)
{ {
const char *cmd; const char *cmd;
cmd = eina_slstr_printf("ninja -C %s %s", md->fulldir, arg ?: ""); cmd = _meson_ninja_cmd(md, arg);
if (arg && !strcmp(arg, "clean")) if (arg && !strcmp(arg, "clean"))
edi_exe_notify("edi_clean", cmd); edi_exe_notify("edi_clean", cmd);
else else
@ -100,7 +106,6 @@ _meson_prepare_end(void *data, int evtype EINA_UNUSED, void *evinfo)
if (!ev->exe) return ECORE_CALLBACK_RENEW; if (!ev->exe) return ECORE_CALLBACK_RENEW;
if (ecore_exe_data_get(ev->exe) != me) return ECORE_CALLBACK_RENEW; if (ecore_exe_data_get(ev->exe) != me) return ECORE_CALLBACK_RENEW;
_meson_ninja_do(me, NULL);
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
@ -113,11 +118,12 @@ _meson_prepare(Meson_Data *md)
if (_meson_configured_check(md->fulldir)) return EINA_TRUE; if (_meson_configured_check(md->fulldir)) return EINA_TRUE;
if (chdir(md->basedir) != 0) return EINA_FALSE; if (chdir(md->basedir) != 0) return EINA_FALSE;
cmd = eina_slstr_printf("meson %s", md->builddir); cmd = eina_slstr_printf("meson %s && %s", md->builddir, _meson_ninja_cmd(md, ""));
exe = ecore_exe_pipe_run(cmd, exe = ecore_exe_pipe_run(cmd,
ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR |
ECORE_EXE_PIPE_WRITE /*| ECORE_EXE_USE_SH*/, md); ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, md);
if (!exe) return EINA_FALSE; if (!exe) return EINA_FALSE;
ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _meson_prepare_end, md); ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _meson_prepare_end, md);