You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2013/03/09 18:14:55 UTC
[lucy-commits] [4/16] git commit: refs/heads/c-bindings-wip3 - Add
chaz_MakeFile_add_dir_to_cleanup
Add chaz_MakeFile_add_dir_to_cleanup
We have to distinguish files from directories on Windows.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/c822e10a
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/c822e10a
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/c822e10a
Branch: refs/heads/c-bindings-wip3
Commit: c822e10afb9d274d357eba09fa714d10d9072279
Parents: e6c3ffd
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Mar 4 22:04:58 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Mar 9 17:51:54 2013 +0100
----------------------------------------------------------------------
charmonizer/src/Charmonizer/Core/Make.c | 119 ++++++++++++++++---------
charmonizer/src/Charmonizer/Core/Make.h | 8 ++
2 files changed, 84 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/c822e10a/charmonizer/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Make.c b/charmonizer/src/Charmonizer/Core/Make.c
index ec9e5d1..8a8f149 100644
--- a/charmonizer/src/Charmonizer/Core/Make.c
+++ b/charmonizer/src/Charmonizer/Core/Make.c
@@ -38,8 +38,10 @@ struct chaz_MakeFile {
size_t num_vars;
chaz_MakeRule **rules;
size_t num_rules;
- char **cleanups;
- size_t num_cleanups;
+ char **cleanup_files;
+ size_t num_cleanup_files;
+ char **cleanup_dirs;
+ size_t num_cleanup_dirs;
};
/* Static vars. */
@@ -158,9 +160,13 @@ chaz_MakeFile_new() {
makefile->rules[0] = NULL;
makefile->num_rules = 0;
- makefile->cleanups = (char**)malloc(sizeof(char*));
- makefile->cleanups[0] = NULL;
- makefile->num_cleanups = 0;
+ makefile->cleanup_files = (char**)malloc(sizeof(char*));
+ makefile->cleanup_files[0] = NULL;
+ makefile->num_cleanup_files = 0;
+
+ makefile->cleanup_dirs = (char**)malloc(sizeof(char*));
+ makefile->cleanup_dirs[0] = NULL;
+ makefile->num_cleanup_dirs = 0;
return makefile;
}
@@ -214,15 +220,26 @@ chaz_MakeFile_add_rule(chaz_MakeFile *makefile, const char *target,
void
chaz_MakeFile_add_to_cleanup(chaz_MakeFile *makefile, const char *target) {
- char *cleanup = chaz_Util_strdup(target);
- char **cleanups = makefile->cleanups;
- size_t num_cleanups = makefile->num_cleanups + 1;
-
- cleanups = (char**)realloc(cleanups, (num_cleanups + 1) * sizeof(char*));
- cleanups[num_cleanups-1] = cleanup;
- cleanups[num_cleanups] = NULL;
- makefile->cleanups = cleanups;
- makefile->num_cleanups = num_cleanups;
+ char **files = makefile->cleanup_files;
+ size_t num_files = makefile->num_cleanup_files + 1;
+
+ files = (char**)realloc(files, (num_files + 1) * sizeof(char*));
+ files[num_files-1] = chaz_Util_strdup(target);
+ files[num_files] = NULL;
+ makefile->cleanup_files = files;
+ makefile->num_cleanup_files = num_files;
+}
+
+void
+chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir) {
+ char **dirs = makefile->cleanup_dirs;
+ size_t num_dirs = makefile->num_cleanup_dirs + 1;
+
+ dirs = (char**)realloc(dirs, (num_dirs + 1) * sizeof(char*));
+ dirs[num_dirs-1] = chaz_Util_strdup(dir);
+ dirs[num_dirs] = NULL;
+ makefile->cleanup_dirs = dirs;
+ makefile->num_cleanup_dirs = num_dirs;
}
chaz_MakeRule*
@@ -293,62 +310,78 @@ chaz_MakeFile_add_shared_obj(chaz_MakeFile *makefile, const char *shared_obj,
void
chaz_MakeFile_write(chaz_MakeFile *makefile) {
int shell_type = chaz_OS_shell_type();
- FILE *file;
+ FILE *out;
size_t i;
- file = fopen("Makefile", "w");
- if (!file) {
+ out = fopen("Makefile", "w");
+ if (!out) {
chaz_Util_die("Can't open Makefile\n");
}
for (i = 0; makefile->vars[i]; i++) {
chaz_MakeVar *var = makefile->vars[i];
- fprintf(file, "%s = %s\n", var->name, var->value);
+ fprintf(out, "%s = %s\n", var->name, var->value);
}
- fprintf(file, "\n");
+ fprintf(out, "\n");
for (i = 0; makefile->rules[i]; i++) {
chaz_MakeRule *rule = makefile->rules[i];
- fprintf(file, "%s :", rule->targets);
+ fprintf(out, "%s :", rule->targets);
if (rule->prereqs) {
- fprintf(file, " %s", rule->prereqs);
+ fprintf(out, " %s", rule->prereqs);
}
- fprintf(file, "\n");
+ fprintf(out, "\n");
if (rule->commands) {
- fprintf(file, "%s", rule->commands);
+ fprintf(out, "%s", rule->commands);
}
- fprintf(file, "\n");
+ fprintf(out, "\n");
}
- if (makefile->cleanups[0]) {
+ if (makefile->cleanup_files[0] || makefile->cleanup_dirs[0]) {
+ fprintf(out, "clean :\n");
if (shell_type == CHAZ_OS_POSIX) {
- fprintf(file, "clean :\n\trm -f");
- for (i = 0; makefile->cleanups[i]; i++) {
- const char *cleanup = makefile->cleanups[i];
- fprintf(file, " \\\n\t %s", cleanup);
+ if (makefile->cleanup_files[0]) {
+ fprintf(out, "\trm -f");
+ for (i = 0; makefile->cleanup_files[i]; i++) {
+ const char *file = makefile->cleanup_files[i];
+ fprintf(out, " \\\n\t %s", file);
+ }
+ fprintf(out, "\n");
+ }
+ if (makefile->cleanup_dirs[0]) {
+ fprintf(out, "\trm -rf");
+ for (i = 0; makefile->cleanup_dirs[i]; i++) {
+ const char *dir = makefile->cleanup_dirs[i];
+ fprintf(out, " \\\n\t %s", dir);
+ }
+ fprintf(out, "\n");
}
- fprintf(file, "\n\n");
}
else if (shell_type == CHAZ_OS_CMD_EXE) {
- fprintf(file, "clean :\n");
- for (i = 0; makefile->cleanups[i]; i++) {
- const char *cleanup = makefile->cleanups[i];
- fprintf(file, "\tfor %%i in (%s) do @if exist %%i del /f %%i\n",
- cleanup);
+ for (i = 0; makefile->cleanup_files[i]; i++) {
+ const char *file = makefile->cleanup_files[i];
+ fprintf(out, "\tfor %%i in (%s) do @if exist %%i del /f %%i\n",
+ file);
+ }
+ for (i = 0; makefile->cleanup_dirs[i]; i++) {
+ const char *dir = makefile->cleanup_dirs[i];
+ fprintf(out,
+ "\tfor %%i in (%s) do @if exist %%i rmdir /s /q %%i\n",
+ dir);
}
- fprintf(file, "\n");
}
else {
chaz_Util_die("Unsupported shell type: %d", shell_type);
}
+ fprintf(out, "\n");
}
- fprintf(file, "distclean : clean\n");
+ fprintf(out, "distclean : clean\n");
if (shell_type == CHAZ_OS_POSIX) {
- fprintf(file, "\trm -f charmonizer$(EXE_EXT) charmony.h Makefile\n\n");
+ fprintf(out, "\trm -f charmonizer$(EXE_EXT) charmony.h Makefile\n\n");
}
else if (shell_type == CHAZ_OS_CMD_EXE) {
- fprintf(file,
+ fprintf(out,
"\tfor %%i in (charmonizer$(EXE_EXT) charmonizer$(OBJ_EXT)"
" charmony.h Makefile) do @if exist %%i del /f %%i\n\n");
}
@@ -358,16 +391,16 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) {
if (chaz_Make.is_nmake) {
/* Inference rule for .c files. */
- fprintf(file, ".c.obj :\n");
+ fprintf(out, ".c.obj :\n");
if (chaz_CC_msvc_version_num()) {
- fprintf(file, "\t$(CC) $(CFLAGS) /c $< /Fo$@\n\n");
+ fprintf(out, "\t$(CC) $(CFLAGS) /c $< /Fo$@\n\n");
}
else {
- fprintf(file, "\t$(CC) $(CFLAGS) -c $< -o $@\n\n");
+ fprintf(out, "\t$(CC) $(CFLAGS) -c $< -o $@\n\n");
}
}
- fclose(file);
+ fclose(out);
}
void
http://git-wip-us.apache.org/repos/asf/lucy/blob/c822e10a/charmonizer/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Make.h b/charmonizer/src/Charmonizer/Core/Make.h
index 4122b26..b7ed46b 100644
--- a/charmonizer/src/Charmonizer/Core/Make.h
+++ b/charmonizer/src/Charmonizer/Core/Make.h
@@ -95,6 +95,14 @@ chaz_MakeFile_add_rule(chaz_MakeFile *makefile, const char *target,
void
chaz_MakeFile_add_to_cleanup(chaz_MakeFile *makefile, const char *target);
+/** Add a directory to the 'clean' target.
+ *
+ * @param makefile The makefile.
+ * @param dir The directory.
+ */
+void
+chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir);
+
/** Add a rule to link an executable. The executable will also be added to the
* list of files to clean.
*