Updated Branches:
  refs/heads/c-bindings-wip2 24d06ccd8 -> 2022a259a

Regenerate charmonizer.c


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/2022a259
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/2022a259
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/2022a259

Branch: refs/heads/c-bindings-wip2
Commit: 2022a259a4724f7dd156101ba41d09a7826ef49b
Parents: 7a6abd9
Author: Nick Wellnhofer <[email protected]>
Authored: Mon Mar 4 22:06:13 2013 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Mon Mar 4 22:06:13 2013 +0100

----------------------------------------------------------------------
 clownfish/compiler/common/charmonizer.c |  125 +++++++++++++++++---------
 clownfish/runtime/common/charmonizer.c  |  125 +++++++++++++++++---------
 common/charmonizer.c                    |  127 +++++++++++++++++---------
 3 files changed, 250 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/2022a259/clownfish/compiler/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.c 
b/clownfish/compiler/common/charmonizer.c
index 2748a35..ff16eda 100644
--- a/clownfish/compiler/common/charmonizer.c
+++ b/clownfish/compiler/common/charmonizer.c
@@ -425,6 +425,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.
  *
@@ -2576,8 +2584,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. */
@@ -2696,9 +2706,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;
 }
@@ -2752,15 +2766,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;
+    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;
 
-    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;
+    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*
@@ -2829,62 +2854,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");
     }
@@ -2894,16 +2935,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/2022a259/clownfish/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.c 
b/clownfish/runtime/common/charmonizer.c
index 1c7c612..52b937a 100644
--- a/clownfish/runtime/common/charmonizer.c
+++ b/clownfish/runtime/common/charmonizer.c
@@ -425,6 +425,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.
  *
@@ -2876,8 +2884,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. */
@@ -2996,9 +3006,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;
 }
@@ -3052,15 +3066,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;
+    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;
 
-    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;
+    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*
@@ -3129,62 +3154,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");
     }
@@ -3194,16 +3235,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/2022a259/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 06793a6..6e8be8b 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -425,6 +425,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.
  *
@@ -2876,8 +2884,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. */
@@ -2996,9 +3006,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;
 }
@@ -3052,15 +3066,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;
+    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;
 
-    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;
+    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*
@@ -3129,62 +3154,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");
     }
@@ -3194,16 +3235,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
@@ -6094,9 +6135,9 @@ S_write_makefile() {
 
     chaz_MakeFile_add_to_cleanup(makefile, "$(TEST_LUCY_OBJS)");
     chaz_MakeFile_add_to_cleanup(makefile, "$(LUCY_OBJS)");
-    chaz_MakeFile_add_to_cleanup(makefile, "$(AUTOGEN_DIR)");
     chaz_MakeFile_add_to_cleanup(makefile, json_parser_h);
     chaz_MakeFile_add_to_cleanup(makefile, json_parser_c);
+    chaz_MakeFile_add_dir_to_cleanup(makefile, "$(AUTOGEN_DIR)");
 
     chaz_MakeFile_write(makefile);
 }

Reply via email to