build: Fix changing working directory correctly in all OS.

This commit is contained in:
Jaehyun Cho 2016-08-24 17:01:33 +09:00
parent 5ea2c05dec
commit 60c5967920
1 changed files with 30 additions and 18 deletions

View File

@ -98,20 +98,8 @@ build_cmd_set(build_data *bd)
goto err;
}
/* Move to main edc file's directory to set it as the current working
directory to support relative resource paths in sub edc files.
(e.g. images.image: "./images/icon.png" COMP; in sub edc files) */
char *edc_dir = ecore_file_dir_get(bd->edc_path);
if (!edc_dir) goto err;
/* Move back to current working directory to restore the current working
directory after edje_cc compile. */
char *cur_dir = ecore_file_realpath("./");
if (!cur_dir) goto err;
eina_strbuf_append_printf(strbuf,
"cd %s && edje_cc -fastcomp %s %s -id %s/images -sd %s/sounds -fd %s/fonts -dd %s/data %s %s %s %s -beta && cd %s",
edc_dir,
"edje_cc -fastcomp %s %s -id %s/images -sd %s/sounds -fd %s/fonts -dd %s/data %s %s %s %s -beta",
bd->edc_path,
(char *) eina_list_data_get(bd->pathes_list[ENVENTOR_PATH_TYPE_EDJ]),
elm_app_data_dir_get(),
@ -121,15 +109,11 @@ build_cmd_set(build_data *bd)
eina_strbuf_string_get(strbuf_img),
eina_strbuf_string_get(strbuf_snd),
eina_strbuf_string_get(strbuf_fnt),
eina_strbuf_string_get(strbuf_dat),
cur_dir);
eina_strbuf_string_get(strbuf_dat));
bd->build_cmd = eina_strbuf_string_steal(strbuf);
bd->build_cmd_changed = EINA_FALSE;
err:
if (edc_dir) free(edc_dir);
if (cur_dir) free(cur_dir);
eina_strbuf_free(strbuf);
eina_strbuf_free(strbuf_img);
eina_strbuf_free(strbuf_snd);
@ -150,10 +134,38 @@ build_edc(void)
EINA_LOG_ERR("Build Command is not set!");
return;
}
/* Move to main edc file's directory to set it as the current working
directory to support relative resource paths in sub edc files.
(e.g. images.image: "./images/icon.png" COMP; in sub edc files) */
char *edc_dir = ecore_file_dir_get(bd->edc_path);
if (!edc_dir) goto err;
/* Move back to current working directory to restore the current working
directory after edje_cc compile. */
char *cur_dir = ecore_file_realpath("./");
if (!cur_dir) goto err;
#ifdef _WIN32
_chdir(edc_dir);
#else
chdir(edc_dir);
#endif
Ecore_Exe_Flags flags =
(ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR);
ecore_exe_pipe_run(bd->build_cmd, flags, NULL);
#ifdef _WIN32
_chdir(cur_dir);
#else
chdir(cur_dir);
#endif
err:
if (edc_dir) free(edc_dir);
if (cur_dir) free(cur_dir);
}
/*****************************************************************************/