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 2014/10/15 04:28:31 UTC
[1/5] git commit: Add extensible, generic CLI option parsing.
Repository: lucy-charmonizer
Updated Branches:
refs/heads/generic_cli [created] 55a6c5b07
Add extensible, generic CLI option parsing.
Add a module which allows individual apps leveraging Charmonizer to
register their own command-line options.
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/a5d2b9b4
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/a5d2b9b4
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/a5d2b9b4
Branch: refs/heads/generic_cli
Commit: a5d2b9b4fb368ac96736be4d97c1e7bea353b87d
Parents: 98f53fb
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Wed Oct 8 17:38:04 2014 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Oct 14 17:40:45 2014 -0700
----------------------------------------------------------------------
buildbin/meld.pl | 1 +
src/Charmonizer/Core/CLI.c | 357 ++++++++++++++++++++++++++++++++++++++++
src/Charmonizer/Core/CLI.h | 111 +++++++++++++
3 files changed, 469 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/a5d2b9b4/buildbin/meld.pl
----------------------------------------------------------------------
diff --git a/buildbin/meld.pl b/buildbin/meld.pl
index 3560a88..48a5885 100755
--- a/buildbin/meld.pl
+++ b/buildbin/meld.pl
@@ -69,6 +69,7 @@ if ( !@probes ) {
my @core = qw(
Library
CFlags
+ CLI
Compiler
ConfWriter
ConfWriterC
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/a5d2b9b4/src/Charmonizer/Core/CLI.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CLI.c b/src/Charmonizer/Core/CLI.c
new file mode 100644
index 0000000..3038329
--- /dev/null
+++ b/src/Charmonizer/Core/CLI.c
@@ -0,0 +1,357 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+#include "Charmonizer/Core/CLI.h"
+#include "Charmonizer/Core/Util.h"
+
+typedef struct chaz_CLIOption {
+ char *name;
+ char *help;
+ char *value;
+ int defined;
+ int flags;
+} chaz_CLIOption;
+
+struct chaz_CLI {
+ char *name;
+ char *desc;
+ char *usage;
+ char *help;
+ chaz_CLIOption *opts;
+ int num_opts;
+};
+
+static void
+S_chaz_CLI_error(chaz_CLI *self, const char *pattern, ...) {
+ va_list ap;
+ if (chaz_Util_verbosity > 0) {
+ va_start(ap, pattern);
+ vfprintf(stderr, pattern, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+ }
+}
+
+static void
+S_chaz_CLI_rebuild_help(chaz_CLI *self) {
+ int i;
+ size_t amount = 200; // Length of section headers.
+
+ // Allocate space.
+ if (self->usage) {
+ amount += strlen(self->usage);
+ }
+ else {
+ amount += strlen(self->name);
+ }
+ if (self->desc) {
+ amount += strlen(self->desc);
+ }
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ amount += 24 + 2 * strlen(opt->name);
+ if (opt->flags) {
+ amount += strlen(opt->name);
+ }
+ if (opt->help) {
+ amount += strlen(opt->help);
+ }
+ }
+ free(self->help);
+ self->help = (char*)malloc(amount);
+ self->help[0] = '\0';
+
+ // Accumulate "help" string.
+ if (self->usage) {
+ strcat(self->help, self->usage);
+ }
+ else {
+ strcat(self->help, "Usage: ");
+ strcat(self->help, self->name);
+ if (self->num_opts) {
+ strcat(self->help, " [OPTIONS]");
+ }
+ }
+ if (self->desc) {
+ strcat(self->help, "\n\n");
+ strcat(self->help, self->desc);
+ }
+ strcat(self->help, "\n");
+ if (self->num_opts) {
+ strcat(self->help, "\nOptional arguments:\n");
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ size_t line_start = strlen(self->help);
+ size_t current_len;
+
+ strcat(self->help, " --");
+ strcat(self->help, opt->name);
+ current_len = strlen(self->help);
+ if (opt->flags) {
+ int j;
+ if (opt->flags & CHAZ_CLI_ARG_OPTIONAL) {
+ self->help[current_len++] = '[';
+ }
+ self->help[current_len++] = '=';
+ for (j = 0; opt->name[j]; j++) {
+ self->help[current_len++] = toupper(opt->name[j]);
+ }
+ if (opt->flags & CHAZ_CLI_ARG_OPTIONAL) {
+ strcat(self->help, "]");
+ }
+ self->help[current_len] = '\0';
+ }
+ if (opt->help) {
+ self->help[current_len++] = ' ';
+ while (current_len - line_start < 25) {
+ self->help[current_len++] = ' ';
+ }
+ self->help[current_len] = '\0';
+ strcpy(self->help + current_len, opt->help);
+ }
+ strcat(self->help, "\n");
+ }
+ }
+ strcat(self->help, "\n");
+}
+
+chaz_CLI*
+chaz_CLI_new(const char *name, const char *description) {
+ chaz_CLI *self = calloc(1, sizeof(chaz_CLI));
+ self->name = chaz_Util_strdup(name ? name : "PROGRAM");
+ self->desc = description ? chaz_Util_strdup(description) : NULL;
+ self->help = NULL;
+ self->opts = NULL;
+ self->num_opts = 0;
+ S_chaz_CLI_rebuild_help(self);
+ return self;
+}
+
+void
+chaz_CLI_destroy(chaz_CLI *self) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ free(opt->name);
+ free(opt->help);
+ free(opt->value);
+ }
+ free(self->name);
+ free(self->desc);
+ free(self->opts);
+ free(self->usage);
+ free(self->help);
+}
+
+void
+chaz_CLI_set_usage(chaz_CLI *self, const char *usage) {
+ free(self->usage);
+ self->usage = chaz_Util_strdup(usage);
+}
+
+const char*
+chaz_CLI_help(chaz_CLI *self) {
+ return self->help;
+}
+
+int
+chaz_CLI_register(chaz_CLI *self, const char *name, const char *help,
+ int flags) {
+ int rank;
+ int i;
+ int arg_required = !!(flags & CHAZ_CLI_ARG_REQUIRED);
+ int arg_optional = !!(flags & CHAZ_CLI_ARG_OPTIONAL);
+
+ // Validate flags
+ if (arg_required && arg_optional) {
+ S_chaz_CLI_error(self, "Conflicting flags: value both optional "
+ "and required");
+ return 0;
+ }
+
+ // Insert new option. Keep options sorted by name.
+ for (rank = self->num_opts; rank > 0; rank--) {
+ int comparison = strcmp(name, self->opts[rank - 1].name);
+ if (comparison == 0) {
+ S_chaz_CLI_error(self, "Option '%s' already registered", name);
+ return 0;
+ }
+ else if (comparison > 0) {
+ break;
+ }
+ }
+ self->num_opts += 1;
+ self->opts = realloc(self->opts, self->num_opts * sizeof(chaz_CLIOption));
+ for (i = self->num_opts - 1; i > rank; i--) {
+ self->opts[i] = self->opts[i - 1];
+ }
+ self->opts[rank].name = chaz_Util_strdup(name);
+ self->opts[rank].help = help ? chaz_Util_strdup(help) : NULL;
+ self->opts[rank].flags = flags;
+ self->opts[rank].defined = 0;
+ self->opts[rank].value = NULL;
+
+ // Update `help` with new option.
+ S_chaz_CLI_rebuild_help(self);
+
+ return 1;
+}
+
+int
+chaz_CLI_set(chaz_CLI *self, const char *name, const char *value) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ if (strcmp(opt->name, name) == 0) {
+ if (opt->defined) {
+ S_chaz_CLI_error(self, "'%s' specified multiple times", name);
+ return 0;
+ }
+ opt->defined = 1;
+ if (value != NULL) {
+ opt->value = chaz_Util_strdup(value);
+ }
+ return 1;
+ }
+ }
+ S_chaz_CLI_error(self, "Attempt to set unknown option: '%s'", name);
+ return 0;
+}
+
+int
+chaz_CLI_unset(chaz_CLI *self, const char *name) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ if (strcmp(opt->name, name) == 0) {
+ free(opt->value);
+ opt->value = NULL;
+ opt->defined = 0;
+ return 1;
+ }
+ }
+ S_chaz_CLI_error(self, "Attempt to unset unknown option: '%s'", name);
+ return 0;
+}
+
+int
+chaz_CLI_defined(chaz_CLI *self, const char *name) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ if (strcmp(opt->name, name) == 0) {
+ return opt->defined;
+ }
+ }
+ S_chaz_CLI_error(self, "Inquiry for unknown option: '%s'", name);
+ return 0;
+}
+
+long
+chaz_CLI_longval(chaz_CLI *self, const char *name) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ if (strcmp(opt->name, name) == 0) {
+ if (!opt->defined || !opt->value) {
+ return 0;
+ }
+ return strtol(opt->value, NULL, 10);
+ }
+ }
+ S_chaz_CLI_error(self, "Longval request for unknown option: '%s'", name);
+ return 0;
+}
+
+const char*
+chaz_CLI_strval(chaz_CLI *self, const char *name) {
+ int i;
+ for (i = 0; i < self->num_opts; i++) {
+ chaz_CLIOption *opt = &self->opts[i];
+ if (strcmp(opt->name, name) == 0) {
+ return opt->value;
+ }
+ }
+ S_chaz_CLI_error(self, "Strval request for unknown option: '%s'", name);
+ return 0;
+}
+
+int
+chaz_CLI_parse(chaz_CLI *self, int argc, const char *argv[]) {
+ int i;
+ char *name = NULL;
+ size_t name_cap = 0;
+
+ /* Parse most args. */
+ for (i = 1; i < argc; i++) {
+ const char *arg = argv[i];
+ size_t name_len = 0;
+ int has_equals = 0;
+ const char *value = NULL;
+
+ /* Stop processing if we see `-` or `--`. */
+ if (strcmp(arg, "--") == 0 || strcmp(arg, "-") == 0) {
+ break;
+ }
+
+ if (strncmp(arg, "--", 2) != 0) {
+ S_chaz_CLI_error(self, "Unexpected argument: '%s'", arg);
+ free(name);
+ return 0;
+ }
+
+ /* Extract the name of the argument, look for a potential value. */
+ while (1) {
+ char c = arg[name_len + 2];
+ if (isalnum(c) || c == '-' || c == '_') {
+ name_len++;
+ }
+ else if (c == '\0') {
+ break;
+ }
+ else if (c == '=') {
+ /* The rest of the arg is the value. */
+ value = arg + 2 + name_len + 1;
+ break;
+ }
+ else {
+ free(name);
+ S_chaz_CLI_error(self, "Malformed argument: '%s'", arg);
+ return 0;
+ }
+ }
+ if (name_len + 1 > name_cap) {
+ name_cap = name_len + 1;
+ name = (char*)realloc(name, name_cap);
+ }
+ memcpy(name, arg + 2, name_len);
+ name[name_len] = '\0';
+
+ /* Attempt to set the option. */
+ if (!chaz_CLI_set(self, name, value)) {
+ free(name);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/a5d2b9b4/src/Charmonizer/Core/CLI.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CLI.h b/src/Charmonizer/Core/CLI.h
new file mode 100644
index 0000000..bc5edaa
--- /dev/null
+++ b/src/Charmonizer/Core/CLI.h
@@ -0,0 +1,111 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef H_CHAZ_CLI
+#define H_CHAZ_CLI 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CHAZ_CLI_NO_ARG 0
+#define CHAZ_CLI_ARG_REQUIRED (1 << 0)
+#define CHAZ_CLI_ARG_OPTIONAL (1 << 1)
+
+/* The CLI module provides argument parsing for a command line interface.
+ */
+
+typedef struct chaz_CLI chaz_CLI;
+
+/* Constructor.
+ *
+ * @param name The name of the application.
+ * @param description A description of the application.
+ */
+chaz_CLI*
+chaz_CLI_new(const char *name, const char *description);
+
+/* Destructor.
+ */
+void
+chaz_CLI_destroy(chaz_CLI *self);
+
+/* Return a string combining usage header with documentation of options.
+ */
+const char*
+chaz_CLI_help(chaz_CLI *self);
+
+/* Override the generated usage header.
+ */
+void
+chaz_CLI_set_usage(chaz_CLI *self, const char *usage);
+
+/* Register an option. Updates the "help" string, invalidating previous
+ * values. Returns true on success, or reports an error and returns false if
+ * the option was already registered.
+ */
+int
+chaz_CLI_register(chaz_CLI *self, const char *name, const char *help,
+ int flags);
+
+/* Set an option. The specified option must have been registered previously.
+ * The supplied `value` is optional and will be copied.
+ *
+ * Returns true on success. Reports an error and returns false on failure.
+ */
+int
+chaz_CLI_set(chaz_CLI *self, const char *name, const char *value);
+
+/* Returns true if the option has been set, false otherwise.
+ */
+int
+chaz_CLI_defined(chaz_CLI *self, const char *name);
+
+/* Return the value of a given option converted to a long int. Defaults to 0.
+ * Reports an error if the named option has not been registered.
+ */
+long
+chaz_CLI_longval(chaz_CLI *self, const char *name);
+
+/* Return the value of an option as a C string. Defaults to NULL. Reports an
+ * error if the named option has not been registered.
+ */
+const char*
+chaz_CLI_strval(chaz_CLI *self, const char *name);
+
+/* Unset an option, making subsequent calls to `get` return false and making
+ * it possible to call `set` again.
+ *
+ * Returns true if the option exists and was able to be unset.
+ */
+int
+chaz_CLI_unset(chaz_CLI *self, const char *name);
+
+/* Parse `argc` and `argv`, setting options as appropriate. Returns true on
+ * success. Reports an error and returns false if either an unexpected option
+ * was encountered or an option which requires an argument was supplied
+ * without one.
+ */
+int
+chaz_CLI_parse(chaz_CLI *self, int argc, const char *argv[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_CLI */
+
+
[5/5] git commit: Remove redundant processing.
Posted by ma...@apache.org.
Remove redundant processing.
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/55a6c5b0
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/55a6c5b0
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/55a6c5b0
Branch: refs/heads/generic_cli
Commit: 55a6c5b07963411edf0d41975c8824dd1bf85349
Parents: 28b930e
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Thu Oct 9 18:48:05 2014 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Oct 14 17:48:58 2014 -0700
----------------------------------------------------------------------
src/Charmonizer/Probe.c | 18 ------------------
1 file changed, 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/55a6c5b0/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.c b/src/Charmonizer/Probe.c
index cdd8042..6fb2c09 100644
--- a/src/Charmonizer/Probe.c
+++ b/src/Charmonizer/Probe.c
@@ -45,7 +45,6 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[], chaz_CLI *cli) {
chaz_CLI_register(cli, "enable-coverage", NULL, CHAZ_CLI_NO_ARG);
chaz_CLI_register(cli, "cc", "compiler command", CHAZ_CLI_ARG_REQUIRED);
chaz_CLI_register(cli, "cflags", NULL, CHAZ_CLI_ARG_REQUIRED);
- chaz_CLI_register(cli, "verbosity", NULL, CHAZ_CLI_ARG_REQUIRED);
/* Parse options, exiting on failure. */
if (!chaz_CLI_parse(cli, argc, argv)) {
@@ -99,26 +98,9 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[], chaz_CLI *cli) {
free(cc);
}
- /* Process CHARM_VERBOSITY environment variable. */
- {
- const char *verbosity_env = getenv("CHARM_VERBOSITY");
- if (verbosity_env && strlen(verbosity_env)) {
- chaz_CLI_set(cli, "verbosity", verbosity_env);
- }
- }
-
- if (chaz_CLI_defined(cli, "enable-c")
- || chaz_CLI_defined(cli, "enable-perl")
- || chaz_CLI_defined(cli, "enable-python")
- || chaz_CLI_defined(cli, "enable-ruby")
- ) {
- output_enabled = 1;
- }
-
/* Validate. */
if (!chaz_CLI_defined(cli, "cc")
|| !strlen(chaz_CLI_strval(cli, "cc"))
- || !output_enabled
) {
return false;
}
[3/5] git commit: Use CLI for parsing internally.
Posted by ma...@apache.org.
Use CLI for parsing internally.
Replace manual parsing code with generic code, without changing the
interface quite yet.
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/19d31160
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/19d31160
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/19d31160
Branch: refs/heads/generic_cli
Commit: 19d31160859badf1674dea23d374bacb636e3ad7
Parents: a5d2b9b
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Wed Oct 8 17:42:34 2014 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Oct 14 17:40:55 2014 -0700
----------------------------------------------------------------------
src/Charmonizer/Probe.c | 159 +++++++++++++++++++++++++------------------
1 file changed, 91 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/19d31160/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.c b/src/Charmonizer/Probe.c
index 4f5bbd6..93b744c 100644
--- a/src/Charmonizer/Probe.c
+++ b/src/Charmonizer/Probe.c
@@ -26,6 +26,7 @@
#include "Charmonizer/Core/ConfWriterPython.h"
#include "Charmonizer/Core/ConfWriterRuby.h"
#include "Charmonizer/Core/Util.h"
+#include "Charmonizer/Core/CLI.h"
#include "Charmonizer/Core/Compiler.h"
#include "Charmonizer/Core/Make.h"
#include "Charmonizer/Core/OperatingSystem.h"
@@ -35,93 +36,115 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[],
struct chaz_CLIArgs *args) {
int i;
int output_enabled = 0;
+ chaz_CLI *cli
+ = chaz_CLI_new(argv[0], "charmonizer: Probe C compiler environment");
+ chaz_CLI_set_usage(cli, "Usage: charmonizer [OPTIONS] [-- [CFLAGS]]");
+
+ /* Register Charmonizer-specific options. */
+ chaz_CLI_register(cli, "enable-c", "generate charmony.h", CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "enable-perl", "generate Charmony.pm", CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "enable-python", "generate charmony.py", CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "enable-ruby", "generate charmony.rb", CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "enable-makefile", NULL, CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "enable-coverage", NULL, CHAZ_CLI_NO_ARG);
+ chaz_CLI_register(cli, "cc", "compiler command", CHAZ_CLI_ARG_REQUIRED);
+ chaz_CLI_register(cli, "cflags", NULL, CHAZ_CLI_ARG_REQUIRED);
+ chaz_CLI_register(cli, "verbosity", NULL, CHAZ_CLI_ARG_REQUIRED);
+
+ /* Parse options, exiting on failure. */
+ if (!chaz_CLI_parse(cli, argc, argv)) {
+ fprintf(stderr, "%s", chaz_CLI_help(cli));
+ exit(1);
+ }
- /* 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-python") == 0) {
- args->charmony_py = 1;
- output_enabled = 1;
- }
- else if (strcmp(arg, "--enable-ruby") == 0) {
- args->charmony_rb = 1;
- output_enabled = 1;
- }
- else if (strcmp(arg, "--enable-makefile") == 0) {
- args->write_makefile = 1;
+ /* Accumulate compiler flags. */
+ {
+ char *cflags = chaz_Util_strdup("");
+ size_t cflags_len = 0;
+ for (i = 0; i < argc; i++) {
+ if (strcmp(argv[i], "--") == 0) {
+ i++;
+ break;
+ }
}
- else if (strcmp(arg, "--enable-coverage") == 0) {
- args->code_coverage = 1;
+ for (; i < argc; i++) {
+ const char *arg = argv[i];
+ cflags_len += strlen(arg) + 2;
+ cflags = (char*)realloc(cflags, cflags_len);
+ strcat(cflags, " ");
+ strcat(cflags, arg);
}
- else if (memcmp(arg, "--cc=", 5) == 0) {
- size_t len = strlen(arg);
- size_t l = 5;
- size_t r = len;
- size_t trimmed_len;
-
- if (len > CHAZ_PROBE_MAX_CC_LEN - 5) {
- fprintf(stderr, "Exceeded max length for compiler command");
- exit(1);
- }
-
- /*
- * Some Perl setups have a 'cc' config value with leading
- * whitespace.
- */
- while (isspace(arg[l])) {
- ++l;
- }
- while (r > l && isspace(arg[r-1])) {
- --r;
- }
+ chaz_CLI_set(cli, "cflags", cflags);
+ free(cflags);
+ }
- trimmed_len = r - l;
- memcpy(args->cc, arg + l, trimmed_len);
- args->cc[trimmed_len] = '\0';
+ /* Some Perl setups have a 'cc' config value with leading whitespace. */
+ if (chaz_CLI_defined(cli, "cc")) {
+ const char *arg = chaz_CLI_strval(cli, "cc");
+ char *cc;
+ size_t len = strlen(arg);
+ size_t l = 0;
+ size_t r = len;
+ size_t trimmed_len;
+
+ while (isspace(arg[l])) {
+ ++l;
}
- } /* preserve value of i */
-
- /* Accumulate compiler flags. */
- for (; i < argc; i++) {
- const char *arg = argv[i];
- size_t new_len = strlen(arg) + strlen(args->cflags) + 2;
- if (new_len >= CHAZ_PROBE_MAX_CFLAGS_LEN) {
- fprintf(stderr, "Exceeded max length for compiler flags");
- exit(1);
+ while (r > l && isspace(arg[r-1])) {
+ --r;
}
- strcat(args->cflags, " ");
- strcat(args->cflags, arg);
+
+ trimmed_len = r - l;
+ cc = (char*)malloc(trimmed_len + 1);
+ memcpy(cc, arg + l, trimmed_len);
+ cc[trimmed_len] = '\0';
+ chaz_CLI_unset(cli, "cc");
+ chaz_CLI_set(cli, "cc", cc);
+ free(cc);
}
/* 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);
+ chaz_CLI_set(cli, "verbosity", verbosity_env);
}
}
+ if (chaz_CLI_defined(cli, "enable-c")
+ || chaz_CLI_defined(cli, "enable-perl")
+ || chaz_CLI_defined(cli, "enable-python")
+ || chaz_CLI_defined(cli, "enable-ruby")
+ ) {
+ output_enabled = 1;
+ }
+
/* Validate. */
- if (!strlen(args->cc) || !output_enabled) {
+ if (!chaz_CLI_defined(cli, "cc")
+ || !strlen(chaz_CLI_strval(cli, "cc"))
+ || !output_enabled
+ ) {
return false;
}
+ /* Zero out args struct. */
+ memset(args, 0, sizeof(struct chaz_CLIArgs));
+
+ /* Copy to CLIArgs struct. TODO: This code will be going away shortly. */
+ args->charmony_h = chaz_CLI_defined(cli, "enable-c");
+ args->charmony_pm = chaz_CLI_defined(cli, "enable-perl");
+ args->charmony_py = chaz_CLI_defined(cli, "enable-python");
+ args->charmony_rb = chaz_CLI_defined(cli, "enable-ruby");
+ args->write_makefile = chaz_CLI_defined(cli, "enable-makefile");
+ args->code_coverage = chaz_CLI_defined(cli, "enable-coverage");
+ if (chaz_CLI_defined(cli, "cc")) {
+ strcpy(args->cc, chaz_CLI_strval(cli, "cc"));
+ }
+ if (chaz_CLI_defined(cli, "verbosity")) {
+ args->verbosity = (int)chaz_CLI_longval(cli, "verbosity");
+ }
+
+ chaz_CLI_destroy(cli);
return true;
}
[4/5] git commit: Finish switch over to CLI.
Posted by ma...@apache.org.
Finish switch over to CLI.
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/28b930e1
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/28b930e1
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/28b930e1
Branch: refs/heads/generic_cli
Commit: 28b930e1b992c774e49e968b4347ae415f272075
Parents: 9311f42
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Thu Oct 9 18:46:15 2014 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Oct 14 17:48:58 2014 -0700
----------------------------------------------------------------------
charmonize.c | 82 ++++----------------------------------------
src/Charmonizer/Probe.c | 36 ++++---------------
src/Charmonizer/Probe.h | 19 ++--------
3 files changed, 17 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/28b930e1/charmonize.c
----------------------------------------------------------------------
diff --git a/charmonize.c b/charmonize.c
index 6c44c53..a602fea 100644
--- a/charmonize.c
+++ b/charmonize.c
@@ -34,91 +34,23 @@
#include "Charmonizer/Probe/UnusedVars.h"
#include "Charmonizer/Probe/VariadicMacros.h"
#include "Charmonizer/Core/HeaderChecker.h"
+#include "Charmonizer/Core/CLI.h"
#include "Charmonizer/Core/ConfWriter.h"
#include "Charmonizer/Core/ConfWriterC.h"
#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);
- }
- 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, const char **argv) {
/* Initialize. */
{
- struct chaz_CLIArgs args;
- int result = chaz_Probe_parse_cli_args(argc, argv, &args);
+ chaz_CLI *cli = chaz_CLI_new(argv[0], NULL);
+ int result = chaz_Probe_parse_cli_args(argc, argv, cli);
if (!result) {
- chaz_Probe_die_usage();
+ fprintf(stderr, chaz_CLI_help(cli));
+ exit(1);
}
- chaz_Probe_init(&args);
+ chaz_Probe_init(cli);
+ chaz_CLI_destroy(cli);
}
/* Run probe modules. */
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/28b930e1/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.c b/src/Charmonizer/Probe.c
index 93b744c..cdd8042 100644
--- a/src/Charmonizer/Probe.c
+++ b/src/Charmonizer/Probe.c
@@ -32,13 +32,9 @@
#include "Charmonizer/Core/OperatingSystem.h"
int
-chaz_Probe_parse_cli_args(int argc, const char *argv[],
- struct chaz_CLIArgs *args) {
+chaz_Probe_parse_cli_args(int argc, const char *argv[], chaz_CLI *cli) {
int i;
int output_enabled = 0;
- chaz_CLI *cli
- = chaz_CLI_new(argv[0], "charmonizer: Probe C compiler environment");
- chaz_CLI_set_usage(cli, "Usage: charmonizer [OPTIONS] [-- [CFLAGS]]");
/* Register Charmonizer-specific options. */
chaz_CLI_register(cli, "enable-c", "generate charmony.h", CHAZ_CLI_NO_ARG);
@@ -127,24 +123,6 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[],
return false;
}
- /* Zero out args struct. */
- memset(args, 0, sizeof(struct chaz_CLIArgs));
-
- /* Copy to CLIArgs struct. TODO: This code will be going away shortly. */
- args->charmony_h = chaz_CLI_defined(cli, "enable-c");
- args->charmony_pm = chaz_CLI_defined(cli, "enable-perl");
- args->charmony_py = chaz_CLI_defined(cli, "enable-python");
- args->charmony_rb = chaz_CLI_defined(cli, "enable-ruby");
- args->write_makefile = chaz_CLI_defined(cli, "enable-makefile");
- args->code_coverage = chaz_CLI_defined(cli, "enable-coverage");
- if (chaz_CLI_defined(cli, "cc")) {
- strcpy(args->cc, chaz_CLI_strval(cli, "cc"));
- }
- if (chaz_CLI_defined(cli, "verbosity")) {
- args->verbosity = (int)chaz_CLI_longval(cli, "verbosity");
- }
-
- chaz_CLI_destroy(cli);
return true;
}
@@ -157,7 +135,7 @@ chaz_Probe_die_usage(void) {
}
void
-chaz_Probe_init(struct chaz_CLIArgs *args) {
+chaz_Probe_init(struct chaz_CLI *cli) {
int output_enabled = 0;
{
@@ -170,25 +148,25 @@ chaz_Probe_init(struct chaz_CLIArgs *args) {
/* Dispatch other initializers. */
chaz_OS_init();
- chaz_CC_init(args->cc, args->cflags);
+ chaz_CC_init(chaz_CLI_strval(cli, "cc"), chaz_CLI_strval(cli, "cflags"));
chaz_ConfWriter_init();
chaz_HeadCheck_init();
chaz_Make_init();
/* Enable output. */
- if (args->charmony_h) {
+ if (chaz_CLI_defined(cli, "enable-c")) {
chaz_ConfWriterC_enable();
output_enabled = true;
}
- if (args->charmony_pm) {
+ if (chaz_CLI_defined(cli, "enable-perl")) {
chaz_ConfWriterPerl_enable();
output_enabled = true;
}
- if (args->charmony_py) {
+ if (chaz_CLI_defined(cli, "enable-python")) {
chaz_ConfWriterPython_enable();
output_enabled = true;
}
- if (args->charmony_rb) {
+ if (chaz_CLI_defined(cli, "enable-ruby")) {
chaz_ConfWriterRuby_enable();
output_enabled = true;
}
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/28b930e1/src/Charmonizer/Probe.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.h b/src/Charmonizer/Probe.h
index 6323503..3ce92d0 100644
--- a/src/Charmonizer/Probe.h
+++ b/src/Charmonizer/Probe.h
@@ -24,20 +24,7 @@ extern "C" {
#include <stddef.h>
#include <stdio.h>
-#define CHAZ_PROBE_MAX_CC_LEN 100
-#define CHAZ_PROBE_MAX_CFLAGS_LEN 2000
-
-struct chaz_CLIArgs {
- char cc[CHAZ_PROBE_MAX_CC_LEN + 1];
- char cflags[CHAZ_PROBE_MAX_CFLAGS_LEN + 1];
- int charmony_h;
- int charmony_pm;
- int charmony_py;
- int charmony_rb;
- int verbosity;
- int write_makefile;
- int code_coverage;
-};
+struct chaz_CLI;
/* Parse command line arguments, initializing and filling in the supplied
* `args` struct.
@@ -54,7 +41,7 @@ struct chaz_CLIArgs {
*/
int
chaz_Probe_parse_cli_args(int argc, const char *argv[],
- struct chaz_CLIArgs *args);
+ struct chaz_CLI *cli);
/* Exit after printing usage instructions to stderr.
*/
@@ -71,7 +58,7 @@ chaz_Probe_die_usage(void);
* 2 - debugging
*/
void
-chaz_Probe_init(struct chaz_CLIArgs *args);
+chaz_Probe_init(struct chaz_CLI *cli);
/* Clean up the Charmonizer environment -- deleting tempfiles, etc. This
* should be called only after everything else finishes.
[2/5] git commit: Regen Makefiles to include CLI.
Posted by ma...@apache.org.
Regen Makefiles to include CLI.
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/9311f42b
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/9311f42b
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/9311f42b
Branch: refs/heads/generic_cli
Commit: 9311f42bb99a9b179d73a5c87e0c8fafa4369c6e
Parents: 19d3116
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Tue Oct 14 17:35:23 2014 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Oct 14 17:40:55 2014 -0700
----------------------------------------------------------------------
Makefile | 4 ++--
Makefile.MSVC | 4 ++--
Makefile.MinGW | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/9311f42b/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
index b4c5f19..0f19d68 100644
--- a/Makefile
+++ b/Makefile
@@ -27,11 +27,11 @@ PERL=/usr/bin/perl
TESTS= TestDirManip TestFuncMacro TestHeaders TestIntegers TestLargeFiles TestUnusedVars TestVariadicMacros
-OBJS= charmonize.o src/Charmonizer/Core/CFlags.o src/Charmonizer/Core/Compiler.o src/Charmonizer/Core/ConfWriter.o src/Charmonizer/Core/ConfWriterC.o src/Charmonizer/Core/ConfWriterPerl.o src/Charmonizer/Core/ConfWriterPython.o src/Charmonizer/Core/ConfWriterRuby.o src/Charmonizer/Core/HeaderChecker.o src/Charmonizer/Core/Library.o src/Charmonizer/Core/Make.o src/Charmonizer/Core/OperatingSystem.o src/Charmonizer/Core/Util.o src/Charmonizer/Probe.o src/Charmonizer/Probe/AtomicOps.o src/Charmonizer/Probe/Booleans.o src/Charmonizer/Probe/BuildEnv.o src/Charmonizer/Probe/DirManip.o src/Charmonizer/Probe/Floats.o src/Charmonizer/Probe/FuncMacro.o src/Charmonizer/Probe/Headers.o src/Charmonizer/Probe/Integers.o src/Charmonizer/Probe/LargeFiles.o src/Charmonizer/Probe/Memory.o src/Charmonizer/Probe/RegularExpressions.o src/Charmonizer/Probe/Strings.o src/Charmonizer/Probe/SymbolVisibility.o src/Charmonizer/Probe/UnusedVars.o src/Charmonizer/Probe/VariadicMacros.o
+OBJS= charmonize.o src/Charmonizer/Core/CFlags.o src/Charmonizer/Core/CLI.o src/Charmonizer/Core/Compiler.o src/Charmonizer/Core/ConfWriter.o src/Charmonizer/Core/ConfWriterC.o src/Charmonizer/Core/ConfWriterPerl.o src/Charmonizer/Core/ConfWriterPython.o src/Charmonizer/Core/ConfWriterRuby.o src/Charmonizer/Core/HeaderChecker.o src/Charmonizer/Core/Library.o src/Charmonizer/Core/Make.o src/Charmonizer/Core/OperatingSystem.o src/Charmonizer/Core/Util.o src/Charmonizer/Probe.o src/Charmonizer/Probe/AtomicOps.o src/Charmonizer/Probe/Booleans.o src/Charmonizer/Probe/BuildEnv.o src/Charmonizer/Probe/DirManip.o src/Charmonizer/Probe/Floats.o src/Charmonizer/Probe/FuncMacro.o src/Charmonizer/Probe/Headers.o src/Charmonizer/Probe/Integers.o src/Charmonizer/Probe/LargeFiles.o src/Charmonizer/Probe/Memory.o src/Charmonizer/Probe/RegularExpressions.o src/Charmonizer/Probe/Strings.o src/Charmonizer/Probe/SymbolVisibility.o src/Charmonizer/Probe/UnusedVars.o src/Charmonizer/Probe/VariadicMacros.
o
TEST_OBJS= src/Charmonizer/Test.o src/Charmonizer/Test/TestDirManip.o src/Charmonizer/Test/TestFuncMacro.o src/Charmonizer/Test/TestHeaders.o src/Charmonizer/Test/TestIntegers.o src/Charmonizer/Test/TestLargeFiles.o src/Charmonizer/Test/TestUnusedVars.o src/Charmonizer/Test/TestVariadicMacros.o
-HEADERS= src/Charmonizer/Core/CFlags.h src/Charmonizer/Core/Compiler.h src/Charmonizer/Core/ConfWriter.h src/Charmonizer/Core/ConfWriterC.h src/Charmonizer/Core/ConfWriterPerl.h src/Charmonizer/Core/ConfWriterPython.h src/Charmonizer/Core/ConfWriterRuby.h src/Charmonizer/Core/Defines.h src/Charmonizer/Core/HeaderChecker.h src/Charmonizer/Core/Library.h src/Charmonizer/Core/Make.h src/Charmonizer/Core/OperatingSystem.h src/Charmonizer/Core/Util.h src/Charmonizer/Probe.h src/Charmonizer/Probe/AtomicOps.h src/Charmonizer/Probe/Booleans.h src/Charmonizer/Probe/BuildEnv.h src/Charmonizer/Probe/DirManip.h src/Charmonizer/Probe/Floats.h src/Charmonizer/Probe/FuncMacro.h src/Charmonizer/Probe/Headers.h src/Charmonizer/Probe/Integers.h src/Charmonizer/Probe/LargeFiles.h src/Charmonizer/Probe/Memory.h src/Charmonizer/Probe/RegularExpressions.h src/Charmonizer/Probe/Strings.h src/Charmonizer/Probe/SymbolVisibility.h src/Charmonizer/Probe/UnusedVars.h src/Charmonizer/Probe/VariadicMacros.h src/
Charmonizer/Test.h
+HEADERS= src/Charmonizer/Core/CFlags.h src/Charmonizer/Core/CLI.h src/Charmonizer/Core/Compiler.h src/Charmonizer/Core/ConfWriter.h src/Charmonizer/Core/ConfWriterC.h src/Charmonizer/Core/ConfWriterPerl.h src/Charmonizer/Core/ConfWriterPython.h src/Charmonizer/Core/ConfWriterRuby.h src/Charmonizer/Core/Defines.h src/Charmonizer/Core/HeaderChecker.h src/Charmonizer/Core/Library.h src/Charmonizer/Core/Make.h src/Charmonizer/Core/OperatingSystem.h src/Charmonizer/Core/Util.h src/Charmonizer/Probe.h src/Charmonizer/Probe/AtomicOps.h src/Charmonizer/Probe/Booleans.h src/Charmonizer/Probe/BuildEnv.h src/Charmonizer/Probe/DirManip.h src/Charmonizer/Probe/Floats.h src/Charmonizer/Probe/FuncMacro.h src/Charmonizer/Probe/Headers.h src/Charmonizer/Probe/Integers.h src/Charmonizer/Probe/LargeFiles.h src/Charmonizer/Probe/Memory.h src/Charmonizer/Probe/RegularExpressions.h src/Charmonizer/Probe/Strings.h src/Charmonizer/Probe/SymbolVisibility.h src/Charmonizer/Probe/UnusedVars.h src/Charmonizer/
Probe/VariadicMacros.h src/Charmonizer/Test.h
CLEANABLE= $(OBJS) $(PROGNAME) $(CHARMONY_H) $(TEST_OBJS) $(TESTS)
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/9311f42b/Makefile.MSVC
----------------------------------------------------------------------
diff --git a/Makefile.MSVC b/Makefile.MSVC
index 4c662b6..155140c 100644
--- a/Makefile.MSVC
+++ b/Makefile.MSVC
@@ -27,11 +27,11 @@ PERL=/usr/bin/perl
TESTS= TestDirManip.exe TestFuncMacro.exe TestHeaders.exe TestIntegers.exe TestLargeFiles.exe TestUnusedVars.exe TestVariadicMacros.exe
-OBJS= charmonize.obj src\Charmonizer\Core\CFlags.obj src\Charmonizer\Core\Compiler.obj src\Charmonizer\Core\ConfWriter.obj src\Charmonizer\Core\ConfWriterC.obj src\Charmonizer\Core\ConfWriterPerl.obj src\Charmonizer\Core\ConfWriterPython.obj src\Charmonizer\Core\ConfWriterRuby.obj src\Charmonizer\Core\HeaderChecker.obj src\Charmonizer\Core\Library.obj src\Charmonizer\Core\Make.obj src\Charmonizer\Core\OperatingSystem.obj src\Charmonizer\Core\Util.obj src\Charmonizer\Probe.obj src\Charmonizer\Probe\AtomicOps.obj src\Charmonizer\Probe\Booleans.obj src\Charmonizer\Probe\BuildEnv.obj src\Charmonizer\Probe\DirManip.obj src\Charmonizer\Probe\Floats.obj src\Charmonizer\Probe\FuncMacro.obj src\Charmonizer\Probe\Headers.obj src\Charmonizer\Probe\Integers.obj src\Charmonizer\Probe\LargeFiles.obj src\Charmonizer\Probe\Memory.obj src\Charmonizer\Probe\RegularExpressions.obj src\Charmonizer\Probe\Strings.obj src\Charmonizer\Probe\SymbolVisibility.obj src\Charmonizer\Probe\UnusedVars.obj src\Char
monizer\Probe\VariadicMacros.obj
+OBJS= charmonize.obj src\Charmonizer\Core\CFlags.obj src\Charmonizer\Core\CLI.obj src\Charmonizer\Core\Compiler.obj src\Charmonizer\Core\ConfWriter.obj src\Charmonizer\Core\ConfWriterC.obj src\Charmonizer\Core\ConfWriterPerl.obj src\Charmonizer\Core\ConfWriterPython.obj src\Charmonizer\Core\ConfWriterRuby.obj src\Charmonizer\Core\HeaderChecker.obj src\Charmonizer\Core\Library.obj src\Charmonizer\Core\Make.obj src\Charmonizer\Core\OperatingSystem.obj src\Charmonizer\Core\Util.obj src\Charmonizer\Probe.obj src\Charmonizer\Probe\AtomicOps.obj src\Charmonizer\Probe\Booleans.obj src\Charmonizer\Probe\BuildEnv.obj src\Charmonizer\Probe\DirManip.obj src\Charmonizer\Probe\Floats.obj src\Charmonizer\Probe\FuncMacro.obj src\Charmonizer\Probe\Headers.obj src\Charmonizer\Probe\Integers.obj src\Charmonizer\Probe\LargeFiles.obj src\Charmonizer\Probe\Memory.obj src\Charmonizer\Probe\RegularExpressions.obj src\Charmonizer\Probe\Strings.obj src\Charmonizer\Probe\SymbolVisibility.obj src\Charmonizer\
Probe\UnusedVars.obj src\Charmonizer\Probe\VariadicMacros.obj
TEST_OBJS= src\Charmonizer\Test.obj src\Charmonizer\Test\TestDirManip.obj src\Charmonizer\Test\TestFuncMacro.obj src\Charmonizer\Test\TestHeaders.obj src\Charmonizer\Test\TestIntegers.obj src\Charmonizer\Test\TestLargeFiles.obj src\Charmonizer\Test\TestUnusedVars.obj src\Charmonizer\Test\TestVariadicMacros.obj
-HEADERS= src\Charmonizer\Core\CFlags.h src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h src\Charmonizer\Core\ConfWriterPython.h src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\Library.h src\Charmonizer\Core\Make.h src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\Booleans.h src\Charmonizer\Probe\BuildEnv.h src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\RegularExpressions.h src\Charmonizer\Probe\Strings.h src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\Probe\VariadicMacros.h src\
Charmonizer\Test.h
+HEADERS= src\Charmonizer\Core\CFlags.h src\Charmonizer\Core\CLI.h src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h src\Charmonizer\Core\ConfWriterPython.h src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\Library.h src\Charmonizer\Core\Make.h src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\Booleans.h src\Charmonizer\Probe\BuildEnv.h src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\RegularExpressions.h src\Charmonizer\Probe\Strings.h src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\
Probe\VariadicMacros.h src\Charmonizer\Test.h
CLEANABLE= $(OBJS) $(PROGNAME) $(CHARMONY_H) $(TEST_OBJS) $(TESTS) *.pdb
http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/9311f42b/Makefile.MinGW
----------------------------------------------------------------------
diff --git a/Makefile.MinGW b/Makefile.MinGW
index 4c27a97..0c3104a 100644
--- a/Makefile.MinGW
+++ b/Makefile.MinGW
@@ -27,11 +27,11 @@ PERL=/usr/bin/perl
TESTS= TestDirManip.exe TestFuncMacro.exe TestHeaders.exe TestIntegers.exe TestLargeFiles.exe TestUnusedVars.exe TestVariadicMacros.exe
-OBJS= charmonize.o src\Charmonizer\Core\CFlags.o src\Charmonizer\Core\Compiler.o src\Charmonizer\Core\ConfWriter.o src\Charmonizer\Core\ConfWriterC.o src\Charmonizer\Core\ConfWriterPerl.o src\Charmonizer\Core\ConfWriterPython.o src\Charmonizer\Core\ConfWriterRuby.o src\Charmonizer\Core\HeaderChecker.o src\Charmonizer\Core\Library.o src\Charmonizer\Core\Make.o src\Charmonizer\Core\OperatingSystem.o src\Charmonizer\Core\Util.o src\Charmonizer\Probe.o src\Charmonizer\Probe\AtomicOps.o src\Charmonizer\Probe\Booleans.o src\Charmonizer\Probe\BuildEnv.o src\Charmonizer\Probe\DirManip.o src\Charmonizer\Probe\Floats.o src\Charmonizer\Probe\FuncMacro.o src\Charmonizer\Probe\Headers.o src\Charmonizer\Probe\Integers.o src\Charmonizer\Probe\LargeFiles.o src\Charmonizer\Probe\Memory.o src\Charmonizer\Probe\RegularExpressions.o src\Charmonizer\Probe\Strings.o src\Charmonizer\Probe\SymbolVisibility.o src\Charmonizer\Probe\UnusedVars.o src\Charmonizer\Probe\VariadicMacros.o
+OBJS= charmonize.o src\Charmonizer\Core\CFlags.o src\Charmonizer\Core\CLI.o src\Charmonizer\Core\Compiler.o src\Charmonizer\Core\ConfWriter.o src\Charmonizer\Core\ConfWriterC.o src\Charmonizer\Core\ConfWriterPerl.o src\Charmonizer\Core\ConfWriterPython.o src\Charmonizer\Core\ConfWriterRuby.o src\Charmonizer\Core\HeaderChecker.o src\Charmonizer\Core\Library.o src\Charmonizer\Core\Make.o src\Charmonizer\Core\OperatingSystem.o src\Charmonizer\Core\Util.o src\Charmonizer\Probe.o src\Charmonizer\Probe\AtomicOps.o src\Charmonizer\Probe\Booleans.o src\Charmonizer\Probe\BuildEnv.o src\Charmonizer\Probe\DirManip.o src\Charmonizer\Probe\Floats.o src\Charmonizer\Probe\FuncMacro.o src\Charmonizer\Probe\Headers.o src\Charmonizer\Probe\Integers.o src\Charmonizer\Probe\LargeFiles.o src\Charmonizer\Probe\Memory.o src\Charmonizer\Probe\RegularExpressions.o src\Charmonizer\Probe\Strings.o src\Charmonizer\Probe\SymbolVisibility.o src\Charmonizer\Probe\UnusedVars.o src\Charmonizer\Probe\VariadicMacros.
o
TEST_OBJS= src\Charmonizer\Test.o src\Charmonizer\Test\TestDirManip.o src\Charmonizer\Test\TestFuncMacro.o src\Charmonizer\Test\TestHeaders.o src\Charmonizer\Test\TestIntegers.o src\Charmonizer\Test\TestLargeFiles.o src\Charmonizer\Test\TestUnusedVars.o src\Charmonizer\Test\TestVariadicMacros.o
-HEADERS= src\Charmonizer\Core\CFlags.h src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h src\Charmonizer\Core\ConfWriterPython.h src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\Library.h src\Charmonizer\Core\Make.h src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\Booleans.h src\Charmonizer\Probe\BuildEnv.h src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\RegularExpressions.h src\Charmonizer\Probe\Strings.h src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\Probe\VariadicMacros.h src\
Charmonizer\Test.h
+HEADERS= src\Charmonizer\Core\CFlags.h src\Charmonizer\Core\CLI.h src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h src\Charmonizer\Core\ConfWriterPython.h src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\Library.h src\Charmonizer\Core\Make.h src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\Booleans.h src\Charmonizer\Probe\BuildEnv.h src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\RegularExpressions.h src\Charmonizer\Probe\Strings.h src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\
Probe\VariadicMacros.h src\Charmonizer\Test.h
CLEANABLE= $(OBJS) $(PROGNAME) $(CHARMONY_H) $(TEST_OBJS) $(TESTS)