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/13 03:27:50 UTC

[lucy-commits] [11/12] git commit: refs/heads/chaz_compiler_flags - Consolidate CLI-arg processing.

Consolidate CLI-arg processing.

Provide routines from Charmonizer itself for parsing command line
arguments, rather than handling that task in each individual
charmonizer.c.


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

Branch: refs/heads/chaz_compiler_flags
Commit: 8b291d2fc442ed0293cccb9e421dd59014724d25
Parents: b2f9eb4
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Thu Dec 6 18:16:58 2012 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Mon Dec 10 18:33:53 2012 -0800

----------------------------------------------------------------------
 charmonizer/charmonize.c                   |   21 ++---
 charmonizer/src/Charmonizer/Probe.c        |  111 +++++++++++++++++++++--
 charmonizer/src/Charmonizer/Probe.h        |   41 +++++++--
 clownfish/compiler/common/charmonizer.main |   65 ++------------
 clownfish/runtime/common/charmonizer.main  |   92 ++-----------------
 common/charmonizer.main                    |   92 ++-----------------
 6 files changed, 172 insertions(+), 250 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/charmonizer/charmonize.c
----------------------------------------------------------------------
diff --git a/charmonizer/charmonize.c b/charmonizer/charmonize.c
index 1c656af..8c32c5d 100644
--- a/charmonizer/charmonize.c
+++ b/charmonizer/charmonize.c
@@ -110,19 +110,14 @@ S_parse_arguments(int argc, char **argv, struct CLIArgs *args) {
 }
 
 int main(int argc, char **argv) {
-    struct CLIArgs args;
-    memset(&args, 0, sizeof(struct CLIArgs));
-
-    S_parse_arguments(argc, argv, &args);
-    chaz_Probe_init(args.cc_command, args.cc_flags);
-    if (args.enable_c) {
-        chaz_ConfWriterC_enable();
-    }
-    if (args.enable_perl) {
-        chaz_ConfWriterPerl_enable();
-    }
-    if (args.enable_ruby) {
-        chaz_ConfWriterRuby_enable();
+    /* Initialize. */
+    {
+        struct chaz_CLIArgs args;
+        int result = chaz_Probe_parse_cli_args(argc, argv, &args);
+        if (!result) {
+            chaz_Probe_die_usage();
+        }
+        chaz_Probe_init(&args);
     }
 
     /* Run probe modules. */

http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/charmonizer/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe.c b/charmonizer/src/Charmonizer/Probe.c
index 18176f7..dc99875 100644
--- a/charmonizer/src/Charmonizer/Probe.c
+++ b/charmonizer/src/Charmonizer/Probe.c
@@ -20,24 +20,123 @@
 #include "Charmonizer/Probe.h"
 #include "Charmonizer/Core/HeaderChecker.h"
 #include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/ConfWriterC.h"
+#include "Charmonizer/Core/ConfWriterPerl.h"
+#include "Charmonizer/Core/ConfWriterRuby.h"
 #include "Charmonizer/Core/Util.h"
 #include "Charmonizer/Core/Compiler.h"
 #include "Charmonizer/Core/OperatingSystem.h"
 
+int
+chaz_Probe_parse_cli_args(int argc, const char *argv[],
+                          struct chaz_CLIArgs *args) {
+    int i;
+    int output_enabled = 0;
+
+    /* Zero out args struct. */
+    memset(args, 0, sizeof(struct chaz_CLIArgs));
+
+    /* Parse most args. */
+    for (i = 1; i < argc; i++) {
+        const char *arg = argv[i];
+        if (strcmp(arg, "--") == 0) {
+            /* From here on out, everything will be a compiler flag. */
+            i++;
+            break;
+        }
+        if (strcmp(arg, "--enable-c") == 0) {
+            args->charmony_h = 1;
+            output_enabled = 1;
+        }
+        else if (strcmp(arg, "--enable-perl") == 0) {
+            args->charmony_pm = 1;
+            output_enabled = 1;
+        }
+        else if (strcmp(arg, "--enable-ruby") == 0) {
+            args->charmony_rb = 1;
+            output_enabled = 1;
+        }
+        else if (memcmp(arg, "--cc=", 5) == 0) {
+            if (strlen(arg) > CHAZ_PROBE_MAX_CC_LEN - 5) {
+                fprintf(stderr, "Exceeded max length for compiler command");
+                exit(1);
+            }
+            strcpy(args->cc, arg + 5);
+        }
+    } /* preserve value of i */
+
+    /* Accumulate compiler flags. */
+    for (; i < argc; i++) {
+        const char *arg = argv[i];
+        size_t new_len = strlen(arg) + strlen(args->ccflags) + 2;
+        if (new_len >= CHAZ_PROBE_MAX_FLAGS_LEN) {
+            fprintf(stderr, "Exceeded max length for compiler flags");
+            exit(1);
+        }
+        strcat(args->ccflags, " ");
+        strcat(args->ccflags, arg);
+    }
+
+    /* Process CHARM_VERBOSITY environment variable. */
+    {
+        const char *verbosity_env = getenv("CHARM_VERBOSITY");
+        if (verbosity_env && strlen(verbosity_env)) {
+            args->verbosity = strtol(verbosity_env, NULL, 10);
+        }
+    }
+
+    /* Validate. */
+    if (!strlen(args->cc) || !output_enabled) {
+        return false;
+    }
+
+    return true;
+}
+
 void
-chaz_Probe_init(const char *cc_command, const char *cc_flags) {
-    /* Proces CHARM_VERBOSITY environment variable. */
-    const char *verbosity_env = getenv("CHARM_VERBOSITY");
-    if (verbosity_env && strlen(verbosity_env)) {
-        chaz_Util_verbosity = strtol(verbosity_env, NULL, 10);
+chaz_Probe_die_usage(void) {
+    fprintf(stderr,
+            "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
+            "[--enable-perl] [--enable-ruby] -- CC_FLAGS\n");
+    exit(1);
+}
+
+void
+chaz_Probe_init(struct chaz_CLIArgs *args) {
+    int output_enabled = 0;
+
+    {
+        /* Process CHARM_VERBOSITY environment variable. */
+        const char *verbosity_env = getenv("CHARM_VERBOSITY");
+        if (verbosity_env && strlen(verbosity_env)) {
+            chaz_Util_verbosity = strtol(verbosity_env, NULL, 10);
+        }
     }
 
     /* Dispatch other initializers. */
     chaz_OS_init();
-    chaz_CC_init(cc_command, cc_flags);
+    chaz_CC_init(args->cc, args->ccflags);
     chaz_ConfWriter_init();
     chaz_HeadCheck_init();
 
+    /* Enable output. */
+    if (args->charmony_h) {
+        chaz_ConfWriterC_enable();
+        output_enabled = true;
+    }
+    if (args->charmony_pm) {
+        chaz_ConfWriterPerl_enable();
+        output_enabled = true;
+    }
+    if (args->charmony_rb) {
+        chaz_ConfWriterRuby_enable();
+        output_enabled = true;
+    }
+    if (!output_enabled) {
+        fprintf(stderr, "No output formats enabled\n");
+        exit(1);
+    }
+
     if (chaz_Util_verbosity) { printf("Initialization complete.\n"); }
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/charmonizer/src/Charmonizer/Probe.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe.h b/charmonizer/src/Charmonizer/Probe.h
index ee80130..6214ba5 100644
--- a/charmonizer/src/Charmonizer/Probe.h
+++ b/charmonizer/src/Charmonizer/Probe.h
@@ -24,8 +24,40 @@ extern "C" {
 #include <stddef.h>
 #include <stdio.h>
 
-/* Set up the Charmonizer environment.  This should be called before anything
- * else.
+#define CHAZ_PROBE_MAX_CC_LEN 100
+#define CHAZ_PROBE_MAX_FLAGS_LEN 2000
+
+struct chaz_CLIArgs {
+    char cc[CHAZ_PROBE_MAX_CC_LEN + 1];
+    char ccflags[CHAZ_PROBE_MAX_FLAGS_LEN + 1];
+    int  charmony_h;
+    int  charmony_pm;
+    int  charmony_rb;
+    int  verbosity;
+};
+
+/* Parse command line arguments, initializing and filling in the supplied
+ * `args` struct.
+ *
+ *     APP_NAME --cc=CC_COMMAND
+ *              [--enable-c]
+ *              [--enable-perl]
+ *              [--enable-ruby]
+ *              [-- [CC_FLAGS]]
+ *
+ * @return true if argument parsing proceeds without incident, false if
+ * unexpected arguments are encountered or values are missing or invalid.
+ */
+int
+chaz_Probe_parse_cli_args(int argc, const char *argv[],
+                          struct chaz_CLIArgs *args);
+
+/* Exit after printing usage instructions to stderr.
+ */
+void
+chaz_Probe_die_usage(void);
+
+/* Set up the Charmonizer environment.
  *
  * If the environment variable CHARM_VERBOSITY has been set, it will be
  * processed at this time:
@@ -33,12 +65,9 @@ extern "C" {
  *      0 - silent
  *      1 - normal
  *      2 - debugging
- *
- * @param cc_command the string used to invoke the C compiler via system()
- * @param cc_flags flags which will be passed on to the C compiler
  */
 void
-chaz_Probe_init(const char *cc_command, const char *cc_flags);
+chaz_Probe_init(struct chaz_CLIArgs *args);
 
 /* Clean up the Charmonizer environment -- deleting tempfiles, etc.  This
  * should be called only after everything else finishes.

http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/clownfish/compiler/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.main b/clownfish/compiler/common/charmonizer.main
index d9902ea..40e4a2f 100644
--- a/clownfish/compiler/common/charmonizer.main
+++ b/clownfish/compiler/common/charmonizer.main
@@ -23,66 +23,17 @@
 #include "Charmonizer/Probe.h"
 #include "Charmonizer/Probe/Integers.h"
 
-#define MAX_CC_LEN 128
-#define MAX_FLAGS_LEN 2048
-
-struct CLIArgs {
-    char cc_command[MAX_CC_LEN + 1];
-    char cc_flags[MAX_FLAGS_LEN + 1];
-};
-
-/* Parse command line arguments. */
-static void
-S_parse_arguments(int argc, char **argv, struct CLIArgs *args) {
-    int i;
-
-    /* Parse most args. */
-    for (i = 1; i < argc; i++) {
-        char *arg = argv[i];
-        if (strcmp(arg, "--") == 0) {
-            /* From here on out, everything will be a compiler flag. */
-            i++;
-            break;
-        }
-        if (memcmp(arg, "--cc=", 5) == 0) {
-            if (strlen(arg) > MAX_CC_LEN - 5) {
-                fprintf(stderr, "Exceeded max length for compiler command");
-                exit(1);
-            }
-            strcpy(args->cc_command, arg + 5);
-        }
-    }
-
-    /* Accumulate compiler flags. */
-    for (; i < argc; i++) {
-        char *arg = argv[i];
-        if (strlen(arg) + strlen(args->cc_flags) + 2 >= MAX_FLAGS_LEN) {
-            fprintf(stderr, "Exceeded max length for compiler flags");
-            exit(1);
+int main(int argc, const char **argv) {
+    /* Initialize. */
+    {
+        struct chaz_CLIArgs args;
+        int result = chaz_Probe_parse_cli_args(argc, argv, &args);
+        if (!result) {
+            chaz_Probe_die_usage();
         }
-        strcat(args->cc_flags, " ");
-        strcat(args->cc_flags, arg);
+        chaz_Probe_init(&args);
     }
 
-    /* Validate. */
-    if (!args->cc_command
-        || !strlen(args->cc_command)
-       ) {
-        fprintf(stderr,
-                "Usage: ./charmonizer --cc=CC_COMMAND -- CC_FLAGS\n");
-        exit(1);
-    }
-
-}
-
-int main(int argc, char **argv) {
-    struct CLIArgs args;
-    memset(&args, 0, sizeof(struct CLIArgs));
-
-    S_parse_arguments(argc, argv, &args);
-    chaz_Probe_init(args.cc_command, args.cc_flags);
-    chaz_ConfWriterC_enable();
-
     /* Run probe modules. */
     chaz_Integers_run();
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/clownfish/runtime/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.main b/clownfish/runtime/common/charmonizer.main
index 477b451..de9ba04 100644
--- a/clownfish/runtime/common/charmonizer.main
+++ b/clownfish/runtime/common/charmonizer.main
@@ -38,91 +38,15 @@
 #include "Charmonizer/Core/ConfWriterPerl.h"
 #include "Charmonizer/Core/ConfWriterRuby.h"
 
-#define MAX_CC_LEN 128
-#define MAX_FLAGS_LEN 2048
-
-struct CLIArgs {
-    char cc_command[MAX_CC_LEN + 1];
-    char cc_flags[MAX_FLAGS_LEN + 1];
-    int  enable_c;
-    int  enable_perl;
-    int  enable_ruby;
-};
-
-/* Parse command line arguments. */
-static void
-S_parse_arguments(int argc, char **argv, struct CLIArgs *args) {
-    int i;
-    int output_enabled = 0;
-
-    /* Parse most args. */
-    for (i = 1; i < argc; i++) {
-        char *arg = argv[i];
-        if (strcmp(arg, "--") == 0) {
-            /* From here on out, everything will be a compiler flag. */
-            i++;
-            break;
-        }
-        if (strcmp(arg, "--enable-c") == 0) {
-            args->enable_c = 1;
-            output_enabled = 1;
-        }
-        else if (strcmp(arg, "--enable-perl") == 0) {
-            args->enable_perl = 1;
-            output_enabled = 1;
-        }
-        else if (strcmp(arg, "--enable-ruby") == 0) {
-            args->enable_ruby = 1;
-            output_enabled = 1;
-        }
-        else if (memcmp(arg, "--cc=", 5) == 0) {
-            if (strlen(arg) > MAX_CC_LEN - 5) {
-                fprintf(stderr, "Exceeded max length for compiler command");
-                exit(1);
-            }
-            strcpy(args->cc_command, arg + 5);
-        }
-    }
-
-    /* Accumulate compiler flags. */
-    for (; i < argc; i++) {
-        char *arg = argv[i];
-        if (strlen(arg) + strlen(args->cc_flags) + 2 >= MAX_FLAGS_LEN) {
-            fprintf(stderr, "Exceeded max length for compiler flags");
-            exit(1);
+int main(int argc, const char **argv) {
+    /* Initialize. */
+    {
+        struct chaz_CLIArgs args;
+        int result = chaz_Probe_parse_cli_args(argc, argv, &args);
+        if (!result) {
+            chaz_Probe_die_usage();
         }
-        strcat(args->cc_flags, " ");
-        strcat(args->cc_flags, arg);
-
-    }
-
-    /* Validate. */
-    if (!args->cc_command
-        || !strlen(args->cc_command)
-        || !output_enabled
-       ) {
-        fprintf(stderr,
-                "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
-                "[--enable-perl] [--enable-ruby] -- CC_FLAGS\n");
-        exit(1);
-    }
-
-}
-
-int main(int argc, char **argv) {
-    struct CLIArgs args;
-    memset(&args, 0, sizeof(struct CLIArgs));
-
-    S_parse_arguments(argc, argv, &args);
-    chaz_Probe_init(args.cc_command, args.cc_flags);
-    if (args.enable_c) {
-        chaz_ConfWriterC_enable();
-    }
-    if (args.enable_perl) {
-        chaz_ConfWriterPerl_enable();
-    }
-    if (args.enable_ruby) {
-        chaz_ConfWriterRuby_enable();
+        chaz_Probe_init(&args);
     }
 
     /* Run probe modules. */

http://git-wip-us.apache.org/repos/asf/lucy/blob/8b291d2f/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/common/charmonizer.main b/common/charmonizer.main
index b9463ac..2ba57eb 100644
--- a/common/charmonizer.main
+++ b/common/charmonizer.main
@@ -38,91 +38,15 @@
 #include "Charmonizer/Core/ConfWriterPerl.h"
 #include "Charmonizer/Core/ConfWriterRuby.h"
 
-#define MAX_CC_LEN 128
-#define MAX_FLAGS_LEN 2048
-
-struct CLIArgs {
-    char cc_command[MAX_CC_LEN + 1];
-    char cc_flags[MAX_FLAGS_LEN + 1];
-    int  enable_c;
-    int  enable_perl;
-    int  enable_ruby;
-};
-
-/* Parse command line arguments. */
-static void
-S_parse_arguments(int argc, char **argv, struct CLIArgs *args) {
-    int i;
-    int output_enabled = 0;
-
-    /* Parse most args. */
-    for (i = 1; i < argc; i++) {
-        char *arg = argv[i];
-        if (strcmp(arg, "--") == 0) {
-            /* From here on out, everything will be a compiler flag. */
-            i++;
-            break;
-        }
-        if (strcmp(arg, "--enable-c") == 0) {
-            args->enable_c = 1;
-            output_enabled = 1;
-        }
-        else if (strcmp(arg, "--enable-perl") == 0) {
-            args->enable_perl = 1;
-            output_enabled = 1;
-        }
-        else if (strcmp(arg, "--enable-ruby") == 0) {
-            args->enable_ruby = 1;
-            output_enabled = 1;
-        }
-        else if (memcmp(arg, "--cc=", 5) == 0) {
-            if (strlen(arg) > MAX_CC_LEN - 5) {
-                fprintf(stderr, "Exceeded max length for compiler command");
-                exit(1);
-            }
-            strcpy(args->cc_command, arg + 5);
-        }
-    }
-
-    /* Accumulate compiler flags. */
-    for (; i < argc; i++) {
-        char *arg = argv[i];
-        if (strlen(arg) + strlen(args->cc_flags) + 2 >= MAX_FLAGS_LEN) {
-            fprintf(stderr, "Exceeded max length for compiler flags");
-            exit(1);
+int main(int argc, const char **argv) {
+    /* Initialize. */
+    {
+        struct chaz_CLIArgs args;
+        int result = chaz_Probe_parse_cli_args(argc, argv, &args);
+        if (!result) {
+            chaz_Probe_die_usage();
         }
-        strcat(args->cc_flags, " ");
-        strcat(args->cc_flags, arg);
-
-    }
-
-    /* Validate. */
-    if (!args->cc_command
-        || !strlen(args->cc_command)
-        || !output_enabled
-       ) {
-        fprintf(stderr,
-                "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
-                "[--enable-perl] [--enable-ruby] -- CC_FLAGS\n");
-        exit(1);
-    }
-
-}
-
-int main(int argc, char **argv) {
-    struct CLIArgs args;
-    memset(&args, 0, sizeof(struct CLIArgs));
-
-    S_parse_arguments(argc, argv, &args);
-    chaz_Probe_init(args.cc_command, args.cc_flags);
-    if (args.enable_c) {
-        chaz_ConfWriterC_enable();
-    }
-    if (args.enable_perl) {
-        chaz_ConfWriterPerl_enable();
-    }
-    if (args.enable_ruby) {
-        chaz_ConfWriterRuby_enable();
+        chaz_Probe_init(&args);
     }
 
     /* Run probe modules. */