Updated Branches:
  refs/heads/chaz_redirection [created] 1901f4240

Regen charmonizer.c.


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

Branch: refs/heads/chaz_redirection
Commit: 1901f4240f6a9bc9af4832a54b0971d957cc007c
Parents: faf2f61
Author: Marvin Humphrey <[email protected]>
Authored: Wed Nov 28 17:19:17 2012 -0800
Committer: Marvin Humphrey <[email protected]>
Committed: Wed Nov 28 17:19:17 2012 -0800

----------------------------------------------------------------------
 clownfish/compiler/common/charmonizer.c |  113 +++++++--------------
 clownfish/runtime/common/charmonizer.c  |  140 +++++++++-----------------
 common/charmonizer.c                    |  140 +++++++++-----------------
 3 files changed, 132 insertions(+), 261 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/1901f424/clownfish/compiler/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.c 
b/clownfish/compiler/common/charmonizer.c
index 1d005e0..8093898 100644
--- a/clownfish/compiler/common/charmonizer.c
+++ b/clownfish/compiler/common/charmonizer.c
@@ -315,12 +315,6 @@ chaz_HeadCheck_contains_member(const char *struct_name, 
const char *member,
 int
 chaz_OS_remove(const char *name);
 
-/* Concatenate all arguments in a NULL-terminated list into a single command
- * string, prepend the appropriate prefix, and invoke via system().
- */
-int
-chaz_OS_run_local(const char *arg1, ...);
-
 /* Invoke a command and attempt to suppress output from both stdout and stderr
  * (as if they had been sent to /dev/null).  If it's not possible to run the
  * command quietly, run it anyway.
@@ -328,6 +322,18 @@ chaz_OS_run_local(const char *arg1, ...);
 int
 chaz_OS_run_quietly(const char *command);
 
+/* Capture both stdout and stderr for a command to the supplied filepath.
+ */
+int
+chaz_OS_run_redirected(const char *command, const char *path);
+
+/* Run a command beginning with the name of an executable in the current
+ * working directory and capture both stdout and stderr to the supplied
+ * filepath.
+ */
+int
+chaz_OS_run_local_redirected(const char *command, const char *path);
+
 /* Attempt to create a directory.
  */
 void
@@ -867,9 +873,10 @@ chaz_CC_capture_output(const char *source, size_t 
*output_len) {
     compile_succeeded = chaz_CC_compile_exe(CHAZ_CC_TRY_SOURCE_PATH,
                                             CHAZ_CC_TRY_BASENAME, source);
     if (compile_succeeded) {
-        chaz_OS_run_local(chaz_CC.try_exe_name, NULL);
-        captured_output
-            = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH, output_len);
+        chaz_OS_run_local_redirected(chaz_CC.try_exe_name,
+                                     CHAZ_CC_TARGET_PATH);
+        captured_output = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH,
+                                               output_len);
     }
     else {
         *output_len = 0;
@@ -2106,54 +2113,41 @@ chaz_OS_remove(const char *name) {
 }
 
 int
-chaz_OS_run_local(const char *arg1, ...) {
-    va_list  args;
-    size_t   len     = strlen(chaz_OS.local_command_start) + strlen(arg1);
-    char    *command = (char*)malloc(len + 1);
-    int      retval;
-    char    *arg;
-
-    /* Append all supplied texts. */
-    sprintf(command, "%s%s", chaz_OS.local_command_start, arg1);
-    va_start(args, arg1);
-    while (NULL != (arg = va_arg(args, char*))) {
-        len += strlen(arg);
-        command = (char*)realloc(command, len + 1);
-        strcat(command, arg);
-    }
-    va_end(args);
-
-    /* Run the command. */
-    retval = system(command);
-    free(command);
+chaz_OS_run_local_redirected(const char *command, const char *path) {
+    size_t size = strlen(command) + strlen(chaz_OS.local_command_start) + 20;
+    char *local_command = (char*)malloc(size);
+    int retval;
+    sprintf(local_command, "%s%s", chaz_OS.local_command_start, command);
+    retval = chaz_OS_run_redirected(local_command, path);
+    free(local_command);
     return retval;
 }
 
 int
 chaz_OS_run_quietly(const char *command) {
+    return chaz_OS_run_redirected(command, chaz_OS.dev_null);
+}
+
+int
+chaz_OS_run_redirected(const char *command, const char *path) {
     int retval = 1;
     char *quiet_command = NULL;
-    if (chaz_OS.shell_type == CHAZ_OS_POSIX) {
+    if (chaz_OS.shell_type == CHAZ_OS_POSIX
+        || chaz_OS.shell_type == CHAZ_OS_CMD_EXE
+        ) {
         char pattern[] = "%s > %s 2>&1";
         size_t size = sizeof(pattern)
                       + strlen(command)
-                      + strlen(chaz_OS.dev_null)
+                      + strlen(path)
                       + 10;
         quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command, chaz_OS.dev_null);
-    }
-    else if (chaz_OS.shell_type == CHAZ_OS_CMD_EXE) {
-        char pattern[] = "%s > NUL 2> NUL";
-        size_t size = sizeof(pattern) + strlen(command) + 10;
-        quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command);
+        sprintf(quiet_command, pattern, command, path);
     }
     else {
         chaz_Util_die("Don't know the shell type");
     }
     retval = system(quiet_command);
     free(quiet_command);
-
     return retval;
 }
 
@@ -2365,14 +2359,6 @@ chaz_Util_can_open_file(const char *file_path) {
 /* #include "Charmonizer/Core/Compiler.h" */
 /* #include "Charmonizer/Core/OperatingSystem.h" */
 
-/* Write the "_charm.h" file used by every probe.
- */
-static void
-chaz_Probe_write_charm_h(void);
-
-static void
-chaz_Probe_remove_charm_h(void);
-
 void
 chaz_Probe_init(const char *cc_command, const char *cc_flags) {
     /* Proces CHARM_VERBOSITY environment variable. */
@@ -2386,7 +2372,6 @@ chaz_Probe_init(const char *cc_command, const char 
*cc_flags) {
     chaz_CC_init(cc_command, cc_flags);
     chaz_ConfWriter_init();
     chaz_HeadCheck_init();
-    chaz_Probe_write_charm_h();
 
     if (chaz_Util_verbosity) { printf("Initialization complete.\n"); }
 }
@@ -2396,29 +2381,12 @@ chaz_Probe_clean_up(void) {
     if (chaz_Util_verbosity) { printf("Cleaning up...\n"); }
 
     /* Dispatch various clean up routines. */
-    chaz_Probe_remove_charm_h();
     chaz_ConfWriter_clean_up();
     chaz_CC_clean_up();
 
     if (chaz_Util_verbosity) { printf("Cleanup complete.\n"); }
 }
 
-static void
-chaz_Probe_write_charm_h(void) {
-    static const char charm_h_code[] =
-        CHAZ_QUOTE(  #ifndef CHARM_H                                           
       )
-        CHAZ_QUOTE(  #define CHARM_H 1                                         
       )
-        CHAZ_QUOTE(  #include <stdio.h>                                        
       )
-        CHAZ_QUOTE(  #define Charm_Setup freopen("_charmonizer_target", "w", 
stdout)  )
-        CHAZ_QUOTE(  #endif                                                    
       );
-    chaz_Util_write_file("_charm.h", charm_h_code);
-}
-
-static void
-chaz_Probe_remove_charm_h(void) {
-    chaz_Util_remove_and_verify("_charm.h");
-}
-
 
 /***************************************************************************/
 
@@ -2438,9 +2406,8 @@ static int
 chaz_Integers_machine_is_big_endian(void);
 
 static const char chaz_Integers_sizes_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main () {                             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(char));     )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(short));    )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(int));      )
@@ -2450,32 +2417,29 @@ static const char chaz_Integers_sizes_code[] =
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_type64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));       )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_literal64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  #define big 9000000000000000000%s         )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      int truncated = (int)big;             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d\n", truncated);           )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_u64_to_double_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
     CHAZ_QUOTE(      double float_num;                     )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      float_num = (double)int_num;          )
     CHAZ_QUOTE(      printf("%%f\n", float_num);           )
     CHAZ_QUOTE(      return 0;                             )
@@ -2776,9 +2740,8 @@ chaz_Integers_run(void) {
 
             /* Buffer to hold the code, and its start and end. */
             static const char format_64_code[] =
-                CHAZ_QUOTE(  #include "_charm.h"                           )
+                CHAZ_QUOTE(  #include <stdio.h>                            )
                 CHAZ_QUOTE(  int main() {                                  )
-                CHAZ_QUOTE(      Charm_Setup;                              )
                 CHAZ_QUOTE(      printf("%%%su", 18446744073709551615%s);  )
                 CHAZ_QUOTE(      return 0;                                 )
                 CHAZ_QUOTE( }                                              );

http://git-wip-us.apache.org/repos/asf/lucy/blob/1901f424/clownfish/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.c 
b/clownfish/runtime/common/charmonizer.c
index 5f6449b..82472ad 100644
--- a/clownfish/runtime/common/charmonizer.c
+++ b/clownfish/runtime/common/charmonizer.c
@@ -315,12 +315,6 @@ chaz_HeadCheck_contains_member(const char *struct_name, 
const char *member,
 int
 chaz_OS_remove(const char *name);
 
-/* Concatenate all arguments in a NULL-terminated list into a single command
- * string, prepend the appropriate prefix, and invoke via system().
- */
-int
-chaz_OS_run_local(const char *arg1, ...);
-
 /* Invoke a command and attempt to suppress output from both stdout and stderr
  * (as if they had been sent to /dev/null).  If it's not possible to run the
  * command quietly, run it anyway.
@@ -328,6 +322,18 @@ chaz_OS_run_local(const char *arg1, ...);
 int
 chaz_OS_run_quietly(const char *command);
 
+/* Capture both stdout and stderr for a command to the supplied filepath.
+ */
+int
+chaz_OS_run_redirected(const char *command, const char *path);
+
+/* Run a command beginning with the name of an executable in the current
+ * working directory and capture both stdout and stderr to the supplied
+ * filepath.
+ */
+int
+chaz_OS_run_local_redirected(const char *command, const char *path);
+
 /* Attempt to create a directory.
  */
 void
@@ -1276,9 +1282,10 @@ chaz_CC_capture_output(const char *source, size_t 
*output_len) {
     compile_succeeded = chaz_CC_compile_exe(CHAZ_CC_TRY_SOURCE_PATH,
                                             CHAZ_CC_TRY_BASENAME, source);
     if (compile_succeeded) {
-        chaz_OS_run_local(chaz_CC.try_exe_name, NULL);
-        captured_output
-            = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH, output_len);
+        chaz_OS_run_local_redirected(chaz_CC.try_exe_name,
+                                     CHAZ_CC_TARGET_PATH);
+        captured_output = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH,
+                                               output_len);
     }
     else {
         *output_len = 0;
@@ -2515,54 +2522,41 @@ chaz_OS_remove(const char *name) {
 }
 
 int
-chaz_OS_run_local(const char *arg1, ...) {
-    va_list  args;
-    size_t   len     = strlen(chaz_OS.local_command_start) + strlen(arg1);
-    char    *command = (char*)malloc(len + 1);
-    int      retval;
-    char    *arg;
-
-    /* Append all supplied texts. */
-    sprintf(command, "%s%s", chaz_OS.local_command_start, arg1);
-    va_start(args, arg1);
-    while (NULL != (arg = va_arg(args, char*))) {
-        len += strlen(arg);
-        command = (char*)realloc(command, len + 1);
-        strcat(command, arg);
-    }
-    va_end(args);
-
-    /* Run the command. */
-    retval = system(command);
-    free(command);
+chaz_OS_run_local_redirected(const char *command, const char *path) {
+    size_t size = strlen(command) + strlen(chaz_OS.local_command_start) + 20;
+    char *local_command = (char*)malloc(size);
+    int retval;
+    sprintf(local_command, "%s%s", chaz_OS.local_command_start, command);
+    retval = chaz_OS_run_redirected(local_command, path);
+    free(local_command);
     return retval;
 }
 
 int
 chaz_OS_run_quietly(const char *command) {
+    return chaz_OS_run_redirected(command, chaz_OS.dev_null);
+}
+
+int
+chaz_OS_run_redirected(const char *command, const char *path) {
     int retval = 1;
     char *quiet_command = NULL;
-    if (chaz_OS.shell_type == CHAZ_OS_POSIX) {
+    if (chaz_OS.shell_type == CHAZ_OS_POSIX
+        || chaz_OS.shell_type == CHAZ_OS_CMD_EXE
+        ) {
         char pattern[] = "%s > %s 2>&1";
         size_t size = sizeof(pattern)
                       + strlen(command)
-                      + strlen(chaz_OS.dev_null)
+                      + strlen(path)
                       + 10;
         quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command, chaz_OS.dev_null);
-    }
-    else if (chaz_OS.shell_type == CHAZ_OS_CMD_EXE) {
-        char pattern[] = "%s > NUL 2> NUL";
-        size_t size = sizeof(pattern) + strlen(command) + 10;
-        quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command);
+        sprintf(quiet_command, pattern, command, path);
     }
     else {
         chaz_Util_die("Don't know the shell type");
     }
     retval = system(quiet_command);
     free(quiet_command);
-
     return retval;
 }
 
@@ -2774,14 +2768,6 @@ chaz_Util_can_open_file(const char *file_path) {
 /* #include "Charmonizer/Core/Compiler.h" */
 /* #include "Charmonizer/Core/OperatingSystem.h" */
 
-/* Write the "_charm.h" file used by every probe.
- */
-static void
-chaz_Probe_write_charm_h(void);
-
-static void
-chaz_Probe_remove_charm_h(void);
-
 void
 chaz_Probe_init(const char *cc_command, const char *cc_flags) {
     /* Proces CHARM_VERBOSITY environment variable. */
@@ -2795,7 +2781,6 @@ chaz_Probe_init(const char *cc_command, const char 
*cc_flags) {
     chaz_CC_init(cc_command, cc_flags);
     chaz_ConfWriter_init();
     chaz_HeadCheck_init();
-    chaz_Probe_write_charm_h();
 
     if (chaz_Util_verbosity) { printf("Initialization complete.\n"); }
 }
@@ -2805,29 +2790,12 @@ chaz_Probe_clean_up(void) {
     if (chaz_Util_verbosity) { printf("Cleaning up...\n"); }
 
     /* Dispatch various clean up routines. */
-    chaz_Probe_remove_charm_h();
     chaz_ConfWriter_clean_up();
     chaz_CC_clean_up();
 
     if (chaz_Util_verbosity) { printf("Cleanup complete.\n"); }
 }
 
-static void
-chaz_Probe_write_charm_h(void) {
-    static const char charm_h_code[] =
-        CHAZ_QUOTE(  #ifndef CHARM_H                                           
       )
-        CHAZ_QUOTE(  #define CHARM_H 1                                         
       )
-        CHAZ_QUOTE(  #include <stdio.h>                                        
       )
-        CHAZ_QUOTE(  #define Charm_Setup freopen("_charmonizer_target", "w", 
stdout)  )
-        CHAZ_QUOTE(  #endif                                                    
       );
-    chaz_Util_write_file("_charm.h", charm_h_code);
-}
-
-static void
-chaz_Probe_remove_charm_h(void) {
-    chaz_Util_remove_and_verify("_charm.h");
-}
-
 
 /***************************************************************************/
 
@@ -3182,9 +3150,8 @@ chaz_Floats_run(void) {
 static int
 chaz_FuncMacro_probe_iso() {
     static const char iso_func_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%s", __func__);       )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3205,9 +3172,8 @@ static int
 chaz_FuncMacro_probe_gnu() {
     /* Code for verifying GNU func macro. */
     static const char gnu_func_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%s", __FUNCTION__);   )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3228,10 +3194,9 @@ chaz_FuncMacro_probe_gnu() {
 static char*
 chaz_FuncMacro_try_inline(const char *keyword, size_t *output_len) {
     static const char inline_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  static %s int foo() { return 1; } )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%%d", foo());         )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3550,9 +3515,8 @@ static int
 chaz_Integers_machine_is_big_endian(void);
 
 static const char chaz_Integers_sizes_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main () {                             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(char));     )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(short));    )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(int));      )
@@ -3562,32 +3526,29 @@ static const char chaz_Integers_sizes_code[] =
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_type64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));       )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_literal64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  #define big 9000000000000000000%s         )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      int truncated = (int)big;             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d\n", truncated);           )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_u64_to_double_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
     CHAZ_QUOTE(      double float_num;                     )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      float_num = (double)int_num;          )
     CHAZ_QUOTE(      printf("%%f\n", float_num);           )
     CHAZ_QUOTE(      return 0;                             )
@@ -3888,9 +3849,8 @@ chaz_Integers_run(void) {
 
             /* Buffer to hold the code, and its start and end. */
             static const char format_64_code[] =
-                CHAZ_QUOTE(  #include "_charm.h"                           )
+                CHAZ_QUOTE(  #include <stdio.h>                            )
                 CHAZ_QUOTE(  int main() {                                  )
-                CHAZ_QUOTE(      Charm_Setup;                              )
                 CHAZ_QUOTE(      printf("%%%su", 18446744073709551615%s);  )
                 CHAZ_QUOTE(      return 0;                                 )
                 CHAZ_QUOTE( }                                              );
@@ -4058,10 +4018,9 @@ static const int
 chaz_LargeFiles_probe_off64(void) {
     static const char off64_code[] =
         CHAZ_QUOTE(  %s                                        )
-        CHAZ_QUOTE(  #include "_charm.h"                       )
+        CHAZ_QUOTE(  #include <stdio.h>                        )
         CHAZ_QUOTE(  int main()                                )
         CHAZ_QUOTE(  {                                         )
-        CHAZ_QUOTE(      Charm_Setup;                          )
         CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));       )
         CHAZ_QUOTE(      return 0;                             )
         CHAZ_QUOTE(  }                                         );
@@ -4105,11 +4064,10 @@ static int
 chaz_LargeFiles_try_stdio64(chaz_LargeFiles_stdio64_combo *combo) {
     static const char stdio64_code[] =
         CHAZ_QUOTE(  %s                                         )
-        CHAZ_QUOTE(  #include "_charm.h"                        )
+        CHAZ_QUOTE(  #include <stdio.h>                         )
         CHAZ_QUOTE(  int main() {                               )
         CHAZ_QUOTE(      %s pos;                                )
         CHAZ_QUOTE(      FILE *f;                               )
-        CHAZ_QUOTE(      Charm_Setup;                           )
         CHAZ_QUOTE(      f = %s("_charm_stdio64", "w");         )
         CHAZ_QUOTE(      if (f == NULL) return -1;              )
         CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));        )
@@ -4174,10 +4132,9 @@ static int
 chaz_LargeFiles_probe_lseek(chaz_LargeFiles_unbuff_combo *combo) {
     static const char lseek_code[] =
         CHAZ_QUOTE( %s                                                       )
-        CHAZ_QUOTE( #include "_charm.h"                                      )
+        CHAZ_QUOTE( #include <stdio.h>                                       )
         CHAZ_QUOTE( int main() {                                             )
         CHAZ_QUOTE(     int fd;                                              )
-        CHAZ_QUOTE(     Charm_Setup;                                         )
         CHAZ_QUOTE(     fd = open("_charm_lseek", O_WRONLY | O_CREAT, 0666); )
         CHAZ_QUOTE(     if (fd == -1) { return -1; }                         )
         CHAZ_QUOTE(     %s(fd, 0, SEEK_SET);                                 )
@@ -4211,11 +4168,10 @@ 
chaz_LargeFiles_probe_pread64(chaz_LargeFiles_unbuff_combo *combo) {
      * fine as long as it compiles. */
     static const char pread64_code[] =
         CHAZ_QUOTE(  %s                                     )
-        CHAZ_QUOTE(  #include "_charm.h"                    )
+        CHAZ_QUOTE(  #include <stdio.h>                     )
         CHAZ_QUOTE(  int main() {                           )
         CHAZ_QUOTE(      int fd = 20;                       )
         CHAZ_QUOTE(      char buf[1];                       )
-        CHAZ_QUOTE(      Charm_Setup;                       )
         CHAZ_QUOTE(      printf("1");                       )
         CHAZ_QUOTE(      %s(fd, buf, 1, 1);                 )
         CHAZ_QUOTE(      return 0;                          )
@@ -4471,21 +4427,19 @@ chaz_UnusedVars_run(void) {
 
 /* Code for verifying ISO-style variadic macros. */
 static const char chaz_VariadicMacros_iso_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                                   )
+    CHAZ_QUOTE(  #include <stdio.h>                                    )
     CHAZ_QUOTE(  #define ISO_TEST(fmt, ...) \\                         )
     "                printf(fmt, __VA_ARGS__)                        \n"
     CHAZ_QUOTE(  int main() {                                          )
-    CHAZ_QUOTE(      Charm_Setup;                                      )
     CHAZ_QUOTE(      ISO_TEST("%d %d", 1, 1);                          )
     CHAZ_QUOTE(      return 0;                                         )
     CHAZ_QUOTE(  }                                                     );
 
 /* Code for verifying GNU-style variadic macros. */
 static const char chaz_VariadicMacros_gnuc_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                                   )
+    CHAZ_QUOTE(  #include <stdio.h>                                    )
     CHAZ_QUOTE(  #define GNU_TEST(fmt, args...) printf(fmt, ##args)    )
     CHAZ_QUOTE(  int main() {                                          )
-    CHAZ_QUOTE(      Charm_Setup;                                      )
     CHAZ_QUOTE(      GNU_TEST("%d %d", 1, 1);                          )
     CHAZ_QUOTE(      return 0;                                         )
     CHAZ_QUOTE(  }                                                     );

http://git-wip-us.apache.org/repos/asf/lucy/blob/1901f424/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 7b886fb..1aef31f 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -315,12 +315,6 @@ chaz_HeadCheck_contains_member(const char *struct_name, 
const char *member,
 int
 chaz_OS_remove(const char *name);
 
-/* Concatenate all arguments in a NULL-terminated list into a single command
- * string, prepend the appropriate prefix, and invoke via system().
- */
-int
-chaz_OS_run_local(const char *arg1, ...);
-
 /* Invoke a command and attempt to suppress output from both stdout and stderr
  * (as if they had been sent to /dev/null).  If it's not possible to run the
  * command quietly, run it anyway.
@@ -328,6 +322,18 @@ chaz_OS_run_local(const char *arg1, ...);
 int
 chaz_OS_run_quietly(const char *command);
 
+/* Capture both stdout and stderr for a command to the supplied filepath.
+ */
+int
+chaz_OS_run_redirected(const char *command, const char *path);
+
+/* Run a command beginning with the name of an executable in the current
+ * working directory and capture both stdout and stderr to the supplied
+ * filepath.
+ */
+int
+chaz_OS_run_local_redirected(const char *command, const char *path);
+
 /* Attempt to create a directory.
  */
 void
@@ -1276,9 +1282,10 @@ chaz_CC_capture_output(const char *source, size_t 
*output_len) {
     compile_succeeded = chaz_CC_compile_exe(CHAZ_CC_TRY_SOURCE_PATH,
                                             CHAZ_CC_TRY_BASENAME, source);
     if (compile_succeeded) {
-        chaz_OS_run_local(chaz_CC.try_exe_name, NULL);
-        captured_output
-            = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH, output_len);
+        chaz_OS_run_local_redirected(chaz_CC.try_exe_name,
+                                     CHAZ_CC_TARGET_PATH);
+        captured_output = chaz_Util_slurp_file(CHAZ_CC_TARGET_PATH,
+                                               output_len);
     }
     else {
         *output_len = 0;
@@ -2515,54 +2522,41 @@ chaz_OS_remove(const char *name) {
 }
 
 int
-chaz_OS_run_local(const char *arg1, ...) {
-    va_list  args;
-    size_t   len     = strlen(chaz_OS.local_command_start) + strlen(arg1);
-    char    *command = (char*)malloc(len + 1);
-    int      retval;
-    char    *arg;
-
-    /* Append all supplied texts. */
-    sprintf(command, "%s%s", chaz_OS.local_command_start, arg1);
-    va_start(args, arg1);
-    while (NULL != (arg = va_arg(args, char*))) {
-        len += strlen(arg);
-        command = (char*)realloc(command, len + 1);
-        strcat(command, arg);
-    }
-    va_end(args);
-
-    /* Run the command. */
-    retval = system(command);
-    free(command);
+chaz_OS_run_local_redirected(const char *command, const char *path) {
+    size_t size = strlen(command) + strlen(chaz_OS.local_command_start) + 20;
+    char *local_command = (char*)malloc(size);
+    int retval;
+    sprintf(local_command, "%s%s", chaz_OS.local_command_start, command);
+    retval = chaz_OS_run_redirected(local_command, path);
+    free(local_command);
     return retval;
 }
 
 int
 chaz_OS_run_quietly(const char *command) {
+    return chaz_OS_run_redirected(command, chaz_OS.dev_null);
+}
+
+int
+chaz_OS_run_redirected(const char *command, const char *path) {
     int retval = 1;
     char *quiet_command = NULL;
-    if (chaz_OS.shell_type == CHAZ_OS_POSIX) {
+    if (chaz_OS.shell_type == CHAZ_OS_POSIX
+        || chaz_OS.shell_type == CHAZ_OS_CMD_EXE
+        ) {
         char pattern[] = "%s > %s 2>&1";
         size_t size = sizeof(pattern)
                       + strlen(command)
-                      + strlen(chaz_OS.dev_null)
+                      + strlen(path)
                       + 10;
         quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command, chaz_OS.dev_null);
-    }
-    else if (chaz_OS.shell_type == CHAZ_OS_CMD_EXE) {
-        char pattern[] = "%s > NUL 2> NUL";
-        size_t size = sizeof(pattern) + strlen(command) + 10;
-        quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command);
+        sprintf(quiet_command, pattern, command, path);
     }
     else {
         chaz_Util_die("Don't know the shell type");
     }
     retval = system(quiet_command);
     free(quiet_command);
-
     return retval;
 }
 
@@ -2774,14 +2768,6 @@ chaz_Util_can_open_file(const char *file_path) {
 /* #include "Charmonizer/Core/Compiler.h" */
 /* #include "Charmonizer/Core/OperatingSystem.h" */
 
-/* Write the "_charm.h" file used by every probe.
- */
-static void
-chaz_Probe_write_charm_h(void);
-
-static void
-chaz_Probe_remove_charm_h(void);
-
 void
 chaz_Probe_init(const char *cc_command, const char *cc_flags) {
     /* Proces CHARM_VERBOSITY environment variable. */
@@ -2795,7 +2781,6 @@ chaz_Probe_init(const char *cc_command, const char 
*cc_flags) {
     chaz_CC_init(cc_command, cc_flags);
     chaz_ConfWriter_init();
     chaz_HeadCheck_init();
-    chaz_Probe_write_charm_h();
 
     if (chaz_Util_verbosity) { printf("Initialization complete.\n"); }
 }
@@ -2805,29 +2790,12 @@ chaz_Probe_clean_up(void) {
     if (chaz_Util_verbosity) { printf("Cleaning up...\n"); }
 
     /* Dispatch various clean up routines. */
-    chaz_Probe_remove_charm_h();
     chaz_ConfWriter_clean_up();
     chaz_CC_clean_up();
 
     if (chaz_Util_verbosity) { printf("Cleanup complete.\n"); }
 }
 
-static void
-chaz_Probe_write_charm_h(void) {
-    static const char charm_h_code[] =
-        CHAZ_QUOTE(  #ifndef CHARM_H                                           
       )
-        CHAZ_QUOTE(  #define CHARM_H 1                                         
       )
-        CHAZ_QUOTE(  #include <stdio.h>                                        
       )
-        CHAZ_QUOTE(  #define Charm_Setup freopen("_charmonizer_target", "w", 
stdout)  )
-        CHAZ_QUOTE(  #endif                                                    
       );
-    chaz_Util_write_file("_charm.h", charm_h_code);
-}
-
-static void
-chaz_Probe_remove_charm_h(void) {
-    chaz_Util_remove_and_verify("_charm.h");
-}
-
 
 /***************************************************************************/
 
@@ -3182,9 +3150,8 @@ chaz_Floats_run(void) {
 static int
 chaz_FuncMacro_probe_iso() {
     static const char iso_func_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%s", __func__);       )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3205,9 +3172,8 @@ static int
 chaz_FuncMacro_probe_gnu() {
     /* Code for verifying GNU func macro. */
     static const char gnu_func_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%s", __FUNCTION__);   )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3228,10 +3194,9 @@ chaz_FuncMacro_probe_gnu() {
 static char*
 chaz_FuncMacro_try_inline(const char *keyword, size_t *output_len) {
     static const char inline_code[] =
-        CHAZ_QUOTE(  #include "_charm.h"               )
+        CHAZ_QUOTE(  #include <stdio.h>                )
         CHAZ_QUOTE(  static %s int foo() { return 1; } )
         CHAZ_QUOTE(  int main() {                      )
-        CHAZ_QUOTE(      Charm_Setup;                  )
         CHAZ_QUOTE(      printf("%%d", foo());         )
         CHAZ_QUOTE(      return 0;                     )
         CHAZ_QUOTE(  }                                 );
@@ -3550,9 +3515,8 @@ static int
 chaz_Integers_machine_is_big_endian(void);
 
 static const char chaz_Integers_sizes_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main () {                             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(char));     )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(short));    )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(int));      )
@@ -3562,32 +3526,29 @@ static const char chaz_Integers_sizes_code[] =
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_type64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));       )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_literal64_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  #define big 9000000000000000000%s         )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      int truncated = (int)big;             )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      printf("%%d\n", truncated);           )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
 static const char chaz_Integers_u64_to_double_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
     CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
     CHAZ_QUOTE(      double float_num;                     )
-    CHAZ_QUOTE(      Charm_Setup;                          )
     CHAZ_QUOTE(      float_num = (double)int_num;          )
     CHAZ_QUOTE(      printf("%%f\n", float_num);           )
     CHAZ_QUOTE(      return 0;                             )
@@ -3888,9 +3849,8 @@ chaz_Integers_run(void) {
 
             /* Buffer to hold the code, and its start and end. */
             static const char format_64_code[] =
-                CHAZ_QUOTE(  #include "_charm.h"                           )
+                CHAZ_QUOTE(  #include <stdio.h>                            )
                 CHAZ_QUOTE(  int main() {                                  )
-                CHAZ_QUOTE(      Charm_Setup;                              )
                 CHAZ_QUOTE(      printf("%%%su", 18446744073709551615%s);  )
                 CHAZ_QUOTE(      return 0;                                 )
                 CHAZ_QUOTE( }                                              );
@@ -4058,10 +4018,9 @@ static const int
 chaz_LargeFiles_probe_off64(void) {
     static const char off64_code[] =
         CHAZ_QUOTE(  %s                                        )
-        CHAZ_QUOTE(  #include "_charm.h"                       )
+        CHAZ_QUOTE(  #include <stdio.h>                        )
         CHAZ_QUOTE(  int main()                                )
         CHAZ_QUOTE(  {                                         )
-        CHAZ_QUOTE(      Charm_Setup;                          )
         CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));       )
         CHAZ_QUOTE(      return 0;                             )
         CHAZ_QUOTE(  }                                         );
@@ -4105,11 +4064,10 @@ static int
 chaz_LargeFiles_try_stdio64(chaz_LargeFiles_stdio64_combo *combo) {
     static const char stdio64_code[] =
         CHAZ_QUOTE(  %s                                         )
-        CHAZ_QUOTE(  #include "_charm.h"                        )
+        CHAZ_QUOTE(  #include <stdio.h>                         )
         CHAZ_QUOTE(  int main() {                               )
         CHAZ_QUOTE(      %s pos;                                )
         CHAZ_QUOTE(      FILE *f;                               )
-        CHAZ_QUOTE(      Charm_Setup;                           )
         CHAZ_QUOTE(      f = %s("_charm_stdio64", "w");         )
         CHAZ_QUOTE(      if (f == NULL) return -1;              )
         CHAZ_QUOTE(      printf("%%d", (int)sizeof(%s));        )
@@ -4174,10 +4132,9 @@ static int
 chaz_LargeFiles_probe_lseek(chaz_LargeFiles_unbuff_combo *combo) {
     static const char lseek_code[] =
         CHAZ_QUOTE( %s                                                       )
-        CHAZ_QUOTE( #include "_charm.h"                                      )
+        CHAZ_QUOTE( #include <stdio.h>                                       )
         CHAZ_QUOTE( int main() {                                             )
         CHAZ_QUOTE(     int fd;                                              )
-        CHAZ_QUOTE(     Charm_Setup;                                         )
         CHAZ_QUOTE(     fd = open("_charm_lseek", O_WRONLY | O_CREAT, 0666); )
         CHAZ_QUOTE(     if (fd == -1) { return -1; }                         )
         CHAZ_QUOTE(     %s(fd, 0, SEEK_SET);                                 )
@@ -4211,11 +4168,10 @@ 
chaz_LargeFiles_probe_pread64(chaz_LargeFiles_unbuff_combo *combo) {
      * fine as long as it compiles. */
     static const char pread64_code[] =
         CHAZ_QUOTE(  %s                                     )
-        CHAZ_QUOTE(  #include "_charm.h"                    )
+        CHAZ_QUOTE(  #include <stdio.h>                     )
         CHAZ_QUOTE(  int main() {                           )
         CHAZ_QUOTE(      int fd = 20;                       )
         CHAZ_QUOTE(      char buf[1];                       )
-        CHAZ_QUOTE(      Charm_Setup;                       )
         CHAZ_QUOTE(      printf("1");                       )
         CHAZ_QUOTE(      %s(fd, buf, 1, 1);                 )
         CHAZ_QUOTE(      return 0;                          )
@@ -4471,21 +4427,19 @@ chaz_UnusedVars_run(void) {
 
 /* Code for verifying ISO-style variadic macros. */
 static const char chaz_VariadicMacros_iso_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                                   )
+    CHAZ_QUOTE(  #include <stdio.h>                                    )
     CHAZ_QUOTE(  #define ISO_TEST(fmt, ...) \\                         )
     "                printf(fmt, __VA_ARGS__)                        \n"
     CHAZ_QUOTE(  int main() {                                          )
-    CHAZ_QUOTE(      Charm_Setup;                                      )
     CHAZ_QUOTE(      ISO_TEST("%d %d", 1, 1);                          )
     CHAZ_QUOTE(      return 0;                                         )
     CHAZ_QUOTE(  }                                                     );
 
 /* Code for verifying GNU-style variadic macros. */
 static const char chaz_VariadicMacros_gnuc_code[] =
-    CHAZ_QUOTE(  #include "_charm.h"                                   )
+    CHAZ_QUOTE(  #include <stdio.h>                                    )
     CHAZ_QUOTE(  #define GNU_TEST(fmt, args...) printf(fmt, ##args)    )
     CHAZ_QUOTE(  int main() {                                          )
-    CHAZ_QUOTE(      Charm_Setup;                                      )
     CHAZ_QUOTE(      GNU_TEST("%d %d", 1, 1);                          )
     CHAZ_QUOTE(      return 0;                                         )
     CHAZ_QUOTE(  }                                                     );

Reply via email to