You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2012/12/03 21:44:15 UTC

[lucy-commits] git commit: refs/heads/master - Regen charmonizer.c.

Updated Branches:
  refs/heads/master 74c21e7f1 -> b91006082


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/b9100608
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/b9100608
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/b9100608

Branch: refs/heads/master
Commit: b910060824e8fa006b2e8a9bd3beaffd4be5ba45
Parents: 74c21e7
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Wed Nov 28 17:19:17 2012 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Mon Dec 3 12:39:30 2012 -0800

----------------------------------------------------------------------
 clownfish/compiler/common/charmonizer.c |  185 +++++-----------------
 clownfish/runtime/common/charmonizer.c  |  212 +++++++-------------------
 common/charmonizer.c                    |  212 +++++++-------------------
 3 files changed, 147 insertions(+), 462 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/b9100608/clownfish/compiler/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.c b/clownfish/compiler/common/charmonizer.c
index 1d005e0..4e7ba0c 100644
--- a/clownfish/compiler/common/charmonizer.c
+++ b/clownfish/compiler/common/charmonizer.c
@@ -74,12 +74,6 @@ chaz_CC_test_compile(const char *source);
 char*
 chaz_CC_capture_output(const char *source, size_t *output_len);
 
-/* Add an include directory which will be used for all future compilation
- * attempts.
- */
-void
-chaz_CC_add_inc_dir(const char *dir);
-
 /** Initialize the compiler environment.
  */
 void
@@ -315,12 +309,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 +316,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
@@ -582,7 +582,6 @@ chaz_CC_detect_known_compilers(void);
 static struct {
     char     *cc_command;
     char     *cc_flags;
-    char    **inc_dirs;
     char     *try_exe_name;
     char     *try_obj_name;
     char      include_flag[10];
@@ -595,7 +594,7 @@ static struct {
     int       defines___clang__;
     int       warnings_as_errors;
 } chaz_CC = {
-    NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL, NULL, NULL,
     "", "", "", "", "",
     0, 0, 0, 0
 };
@@ -626,12 +625,6 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     chaz_CC.cc_command      = chaz_Util_strdup(compiler_command);
     chaz_CC.cc_flags        = chaz_Util_strdup(compiler_flags);
 
-    /* Init. */
-    chaz_CC.inc_dirs              = (char**)calloc(sizeof(char*), 1);
-
-    /* Add the current directory as an include dir. */
-    chaz_CC_add_inc_dir(".");
-
     /* Set names for the targets which we "try" to compile. */
     {
         const char *exe_ext = chaz_OS_exe_ext();
@@ -697,39 +690,12 @@ chaz_CC_detect_known_compilers(void) {
 
 void
 chaz_CC_clean_up(void) {
-    char **dirs;
-
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        free(*dirs);
-    }
-    free(chaz_CC.inc_dirs);
-
     free(chaz_CC.cc_command);
     free(chaz_CC.cc_flags);
-
     free(chaz_CC.try_obj_name);
     free(chaz_CC.try_exe_name);
 }
 
-static char*
-chaz_CC_inc_dir_string(void) {
-    size_t needed = 0;
-    char  *inc_dir_string;
-    char **dirs;
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        needed += strlen(chaz_CC.include_flag) + 2;
-        needed += strlen(*dirs);
-    }
-    inc_dir_string = (char*)malloc(needed + 1);
-    inc_dir_string[0] = '\0';
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        strcat(inc_dir_string, chaz_CC.include_flag);
-        strcat(inc_dir_string, *dirs);
-        strcat(inc_dir_string, " ");
-    }
-    return inc_dir_string;
-}
-
 int
 chaz_CC_compile_exe(const char *source_path, const char *exe_name,
                     const char *code) {
@@ -739,13 +705,11 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     size_t   junk_buf_size     = exe_file_buf_size + 3;
     char    *junk              = (char*)malloc(junk_buf_size);
     size_t   exe_file_buf_len  = sprintf(exe_file, "%s%s", exe_name, exe_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.exe_flag)
                                  + exe_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -755,10 +719,10 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.error_flag, 
             source_path, chaz_CC.exe_flag, 
-            exe_file, inc_dir_string, 
+            exe_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -784,7 +748,6 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(junk);
     free(exe_file);
     return result;
@@ -797,14 +760,12 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     size_t   obj_file_buf_size = strlen(obj_name) + strlen(obj_ext) + 1;
     char    *obj_file          = (char*)malloc(obj_file_buf_size);
     size_t   obj_file_buf_len  = sprintf(obj_file, "%s%s", obj_name, obj_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.no_link_flag)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.object_flag)
                                  + obj_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -814,10 +775,10 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.no_link_flag, chaz_CC.error_flag,
             source_path, chaz_CC.object_flag, 
-            obj_file, inc_dir_string,
+            obj_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -833,7 +794,6 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(obj_file);
     return result;
 }
@@ -867,9 +827,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;
@@ -883,22 +844,6 @@ chaz_CC_capture_output(const char *source, size_t *output_len) {
     return captured_output;
 }
 
-void
-chaz_CC_add_inc_dir(const char *dir) {
-    size_t num_dirs = 0;
-    char **dirs = chaz_CC.inc_dirs;
-
-    /* Count up the present number of dirs, reallocate. */
-    while (*dirs++ != NULL) { num_dirs++; }
-    num_dirs += 1; /* Passed-in dir. */
-    chaz_CC.inc_dirs = (char**)realloc(chaz_CC.inc_dirs,
-                                       (num_dirs + 1) * sizeof(char*));
-
-    /* Put the passed-in dir at the end of the list. */
-    chaz_CC.inc_dirs[num_dirs - 1] = chaz_Util_strdup(dir);
-    chaz_CC.inc_dirs[num_dirs] = NULL;
-}
-
 
 /***************************************************************************/
 
@@ -2106,54 +2051,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 +2297,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 +2310,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 +2319,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 +2344,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 +2355,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 +2678,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/b9100608/clownfish/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.c b/clownfish/runtime/common/charmonizer.c
index 5f6449b..c17e4cc 100644
--- a/clownfish/runtime/common/charmonizer.c
+++ b/clownfish/runtime/common/charmonizer.c
@@ -74,12 +74,6 @@ chaz_CC_test_compile(const char *source);
 char*
 chaz_CC_capture_output(const char *source, size_t *output_len);
 
-/* Add an include directory which will be used for all future compilation
- * attempts.
- */
-void
-chaz_CC_add_inc_dir(const char *dir);
-
 /** Initialize the compiler environment.
  */
 void
@@ -315,12 +309,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 +316,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
@@ -991,7 +991,6 @@ chaz_CC_detect_known_compilers(void);
 static struct {
     char     *cc_command;
     char     *cc_flags;
-    char    **inc_dirs;
     char     *try_exe_name;
     char     *try_obj_name;
     char      include_flag[10];
@@ -1004,7 +1003,7 @@ static struct {
     int       defines___clang__;
     int       warnings_as_errors;
 } chaz_CC = {
-    NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL, NULL, NULL,
     "", "", "", "", "",
     0, 0, 0, 0
 };
@@ -1035,12 +1034,6 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     chaz_CC.cc_command      = chaz_Util_strdup(compiler_command);
     chaz_CC.cc_flags        = chaz_Util_strdup(compiler_flags);
 
-    /* Init. */
-    chaz_CC.inc_dirs              = (char**)calloc(sizeof(char*), 1);
-
-    /* Add the current directory as an include dir. */
-    chaz_CC_add_inc_dir(".");
-
     /* Set names for the targets which we "try" to compile. */
     {
         const char *exe_ext = chaz_OS_exe_ext();
@@ -1106,39 +1099,12 @@ chaz_CC_detect_known_compilers(void) {
 
 void
 chaz_CC_clean_up(void) {
-    char **dirs;
-
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        free(*dirs);
-    }
-    free(chaz_CC.inc_dirs);
-
     free(chaz_CC.cc_command);
     free(chaz_CC.cc_flags);
-
     free(chaz_CC.try_obj_name);
     free(chaz_CC.try_exe_name);
 }
 
-static char*
-chaz_CC_inc_dir_string(void) {
-    size_t needed = 0;
-    char  *inc_dir_string;
-    char **dirs;
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        needed += strlen(chaz_CC.include_flag) + 2;
-        needed += strlen(*dirs);
-    }
-    inc_dir_string = (char*)malloc(needed + 1);
-    inc_dir_string[0] = '\0';
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        strcat(inc_dir_string, chaz_CC.include_flag);
-        strcat(inc_dir_string, *dirs);
-        strcat(inc_dir_string, " ");
-    }
-    return inc_dir_string;
-}
-
 int
 chaz_CC_compile_exe(const char *source_path, const char *exe_name,
                     const char *code) {
@@ -1148,13 +1114,11 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     size_t   junk_buf_size     = exe_file_buf_size + 3;
     char    *junk              = (char*)malloc(junk_buf_size);
     size_t   exe_file_buf_len  = sprintf(exe_file, "%s%s", exe_name, exe_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.exe_flag)
                                  + exe_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -1164,10 +1128,10 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.error_flag, 
             source_path, chaz_CC.exe_flag, 
-            exe_file, inc_dir_string, 
+            exe_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -1193,7 +1157,6 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(junk);
     free(exe_file);
     return result;
@@ -1206,14 +1169,12 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     size_t   obj_file_buf_size = strlen(obj_name) + strlen(obj_ext) + 1;
     char    *obj_file          = (char*)malloc(obj_file_buf_size);
     size_t   obj_file_buf_len  = sprintf(obj_file, "%s%s", obj_name, obj_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.no_link_flag)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.object_flag)
                                  + obj_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -1223,10 +1184,10 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.no_link_flag, chaz_CC.error_flag,
             source_path, chaz_CC.object_flag, 
-            obj_file, inc_dir_string,
+            obj_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -1242,7 +1203,6 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(obj_file);
     return result;
 }
@@ -1276,9 +1236,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;
@@ -1292,22 +1253,6 @@ chaz_CC_capture_output(const char *source, size_t *output_len) {
     return captured_output;
 }
 
-void
-chaz_CC_add_inc_dir(const char *dir) {
-    size_t num_dirs = 0;
-    char **dirs = chaz_CC.inc_dirs;
-
-    /* Count up the present number of dirs, reallocate. */
-    while (*dirs++ != NULL) { num_dirs++; }
-    num_dirs += 1; /* Passed-in dir. */
-    chaz_CC.inc_dirs = (char**)realloc(chaz_CC.inc_dirs,
-                                       (num_dirs + 1) * sizeof(char*));
-
-    /* Put the passed-in dir at the end of the list. */
-    chaz_CC.inc_dirs[num_dirs - 1] = chaz_Util_strdup(dir);
-    chaz_CC.inc_dirs[num_dirs] = NULL;
-}
-
 
 /***************************************************************************/
 
@@ -2515,54 +2460,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 +2706,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 +2719,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 +2728,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 +3088,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 +3110,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 +3132,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 +3453,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 +3464,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 +3787,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 +3956,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 +4002,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 +4070,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 +4106,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 +4365,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/b9100608/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 7b886fb..e2ee36f 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -74,12 +74,6 @@ chaz_CC_test_compile(const char *source);
 char*
 chaz_CC_capture_output(const char *source, size_t *output_len);
 
-/* Add an include directory which will be used for all future compilation
- * attempts.
- */
-void
-chaz_CC_add_inc_dir(const char *dir);
-
 /** Initialize the compiler environment.
  */
 void
@@ -315,12 +309,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 +316,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
@@ -991,7 +991,6 @@ chaz_CC_detect_known_compilers(void);
 static struct {
     char     *cc_command;
     char     *cc_flags;
-    char    **inc_dirs;
     char     *try_exe_name;
     char     *try_obj_name;
     char      include_flag[10];
@@ -1004,7 +1003,7 @@ static struct {
     int       defines___clang__;
     int       warnings_as_errors;
 } chaz_CC = {
-    NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL, NULL, NULL,
     "", "", "", "", "",
     0, 0, 0, 0
 };
@@ -1035,12 +1034,6 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     chaz_CC.cc_command      = chaz_Util_strdup(compiler_command);
     chaz_CC.cc_flags        = chaz_Util_strdup(compiler_flags);
 
-    /* Init. */
-    chaz_CC.inc_dirs              = (char**)calloc(sizeof(char*), 1);
-
-    /* Add the current directory as an include dir. */
-    chaz_CC_add_inc_dir(".");
-
     /* Set names for the targets which we "try" to compile. */
     {
         const char *exe_ext = chaz_OS_exe_ext();
@@ -1106,39 +1099,12 @@ chaz_CC_detect_known_compilers(void) {
 
 void
 chaz_CC_clean_up(void) {
-    char **dirs;
-
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        free(*dirs);
-    }
-    free(chaz_CC.inc_dirs);
-
     free(chaz_CC.cc_command);
     free(chaz_CC.cc_flags);
-
     free(chaz_CC.try_obj_name);
     free(chaz_CC.try_exe_name);
 }
 
-static char*
-chaz_CC_inc_dir_string(void) {
-    size_t needed = 0;
-    char  *inc_dir_string;
-    char **dirs;
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        needed += strlen(chaz_CC.include_flag) + 2;
-        needed += strlen(*dirs);
-    }
-    inc_dir_string = (char*)malloc(needed + 1);
-    inc_dir_string[0] = '\0';
-    for (dirs = chaz_CC.inc_dirs; *dirs != NULL; dirs++) {
-        strcat(inc_dir_string, chaz_CC.include_flag);
-        strcat(inc_dir_string, *dirs);
-        strcat(inc_dir_string, " ");
-    }
-    return inc_dir_string;
-}
-
 int
 chaz_CC_compile_exe(const char *source_path, const char *exe_name,
                     const char *code) {
@@ -1148,13 +1114,11 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     size_t   junk_buf_size     = exe_file_buf_size + 3;
     char    *junk              = (char*)malloc(junk_buf_size);
     size_t   exe_file_buf_len  = sprintf(exe_file, "%s%s", exe_name, exe_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.exe_flag)
                                  + exe_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -1164,10 +1128,10 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.error_flag, 
             source_path, chaz_CC.exe_flag, 
-            exe_file, inc_dir_string, 
+            exe_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -1193,7 +1157,6 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(junk);
     free(exe_file);
     return result;
@@ -1206,14 +1169,12 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     size_t   obj_file_buf_size = strlen(obj_name) + strlen(obj_ext) + 1;
     char    *obj_file          = (char*)malloc(obj_file_buf_size);
     size_t   obj_file_buf_len  = sprintf(obj_file, "%s%s", obj_name, obj_ext);
-    char    *inc_dir_string    = chaz_CC_inc_dir_string();
     size_t   command_max_size  = strlen(chaz_CC.cc_command)
                                  + strlen(chaz_CC.no_link_flag)
                                  + strlen(chaz_CC.error_flag)
                                  + strlen(source_path)
                                  + strlen(chaz_CC.object_flag)
                                  + obj_file_buf_len
-                                 + strlen(inc_dir_string)
                                  + strlen(chaz_CC.cc_flags)
                                  + 200; /* command start, _charm_run, etc.  */
     char *command = (char*)malloc(command_max_size);
@@ -1223,10 +1184,10 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s %s%s %s %s",
+    sprintf(command, "%s %s %s %s %s%s %s",
             chaz_CC.cc_command, chaz_CC.no_link_flag, chaz_CC.error_flag,
             source_path, chaz_CC.object_flag, 
-            obj_file, inc_dir_string,
+            obj_file,
             chaz_CC.cc_flags);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
@@ -1242,7 +1203,6 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     }
 
     free(command);
-    free(inc_dir_string);
     free(obj_file);
     return result;
 }
@@ -1276,9 +1236,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;
@@ -1292,22 +1253,6 @@ chaz_CC_capture_output(const char *source, size_t *output_len) {
     return captured_output;
 }
 
-void
-chaz_CC_add_inc_dir(const char *dir) {
-    size_t num_dirs = 0;
-    char **dirs = chaz_CC.inc_dirs;
-
-    /* Count up the present number of dirs, reallocate. */
-    while (*dirs++ != NULL) { num_dirs++; }
-    num_dirs += 1; /* Passed-in dir. */
-    chaz_CC.inc_dirs = (char**)realloc(chaz_CC.inc_dirs,
-                                       (num_dirs + 1) * sizeof(char*));
-
-    /* Put the passed-in dir at the end of the list. */
-    chaz_CC.inc_dirs[num_dirs - 1] = chaz_Util_strdup(dir);
-    chaz_CC.inc_dirs[num_dirs] = NULL;
-}
-
 
 /***************************************************************************/
 
@@ -2515,54 +2460,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 +2706,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 +2719,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 +2728,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 +3088,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 +3110,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 +3132,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 +3453,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 +3464,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 +3787,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 +3956,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 +4002,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 +4070,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 +4106,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 +4365,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(  }                                                     );