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/11 22:52:48 UTC

[lucy-commits] [5/18] git commit: refs/heads/master - 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/master
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.
  *