Allow single dash or double dash for thrift flags
Reviewed By: martin
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664869 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index 6d29e7f..e329579 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -80,7 +80,7 @@
/**
* Search path for inclusions
*/
-vector <string> g_incl_searchpath;
+vector<string> g_incl_searchpath;
/**
* Global debug state
@@ -279,18 +279,18 @@
void usage() {
fprintf(stderr, "Usage: thrift [options] file\n");
fprintf(stderr, "Options:\n");
- fprintf(stderr, " --cpp Generate C++ output files\n");
- fprintf(stderr, " --java Generate Java output files\n");
- fprintf(stderr, " --php Generate PHP output files\n");
- fprintf(stderr, " --phpi Generate PHP inlined files\n");
- fprintf(stderr, " --py Generate Python output files\n");
+ fprintf(stderr, " -cpp Generate C++ output files\n");
+ fprintf(stderr, " -java Generate Java output files\n");
+ fprintf(stderr, " -php Generate PHP output files\n");
+ fprintf(stderr, " -phpi Generate PHP inlined files\n");
+ fprintf(stderr, " -py Generate Python output files\n");
fprintf(stderr, " -I dir Add a directory to the list of directories \n");
fprintf(stderr, " searched for include directives\n");
- fprintf(stderr, " --nowarn Suppress all compiler warnings (BAD!)\n");
- fprintf(stderr, " --strict Strict compiler warnings on\n");
- fprintf(stderr, " --v[erbose] Verbose mode\n");
- fprintf(stderr, " --r[ecurse] Also generate included files\n");
- fprintf(stderr, " --debug Parse debug trace to stdout\n");
+ fprintf(stderr, " -nowarn Suppress all compiler warnings (BAD!)\n");
+ fprintf(stderr, " -strict Strict compiler warnings on\n");
+ fprintf(stderr, " -v[erbose] Verbose mode\n");
+ fprintf(stderr, " -r[ecurse] Also generate included files\n");
+ fprintf(stderr, " -debug Parse debug trace to stdout\n");
exit(1);
}
@@ -424,27 +424,33 @@
// Hacky parameter handling... I didn't feel like using a library sorry!
for (i = 1; i < argc-1; i++) {
char* arg;
+
arg = strtok(argv[i], " ");
while (arg != NULL) {
- if (strcmp(arg, "--debug") == 0) {
+ // Treat double dashes as single dashes
+ if (false && arg[0] == '-') {
+ ++arg;
+ }
+
+ if (strcmp(arg, "-debug") == 0) {
g_debug = 1;
- } else if (strcmp(arg, "--nowarn") == 0) {
+ } else if (strcmp(arg, "-nowarn") == 0) {
g_warn = 0;
- } else if (strcmp(arg, "--strict") == 0) {
+ } else if (strcmp(arg, "-strict") == 0) {
g_warn = 2;
- } else if (strcmp(arg, "--v") == 0 || strcmp(arg, "--verbose") == 0 ) {
+ } else if (strcmp(arg, "-v") == 0 || strcmp(arg, "-verbose") == 0 ) {
g_verbose = 1;
- } else if (strcmp(arg, "--r") == 0 || strcmp(arg, "--recurse") == 0 ) {
+ } else if (strcmp(arg, "-r") == 0 || strcmp(arg, "-recurse") == 0 ) {
gen_recurse = true;
- } else if (strcmp(arg, "--cpp") == 0) {
+ } else if (strcmp(arg, "-cpp") == 0) {
gen_cpp = true;
- } else if (strcmp(arg, "--java") == 0) {
+ } else if (strcmp(arg, "-java") == 0) {
gen_java = true;
- } else if (strcmp(arg, "--php") == 0) {
+ } else if (strcmp(arg, "-php") == 0) {
gen_php = true;
- } else if (strcmp(arg, "--phpi") == 0) {
+ } else if (strcmp(arg, "-phpi") == 0) {
gen_phpi = true;
- } else if (strcmp(arg, "--py") == 0) {
+ } else if (strcmp(arg, "-py") == 0) {
gen_py = true;
} else if (strcmp(arg, "-I") == 0) {
// An argument of "-I\ asdf" is invalid and has unknown results
diff --git a/compiler/cpp/src/thrift.y b/compiler/cpp/src/thrift.y
index 71c7078..468cbb3 100644
--- a/compiler/cpp/src/thrift.y
+++ b/compiler/cpp/src/thrift.y
@@ -433,15 +433,15 @@
}
$$ = new t_field($3, $4, $1);
}
-| FieldType tok_identifier
+| FieldType tok_identifier CommaOrSemicolonOptional
{
pdebug("Field -> FieldType tok_identifier");
pwarning(2, "No field key specified for '%s', resulting protocol may have conflicts or not be backwards compatible!\n", $2);
$$ = new t_field($1, $2, y_field_val--);
}
-| FieldType tok_identifier '=' tok_int_constant
+| FieldType tok_identifier '=' tok_int_constant CommaOrSemicolonOptional
{
- pwarning(1, "Trailing = id notation is deprecated. Use 'Id: Type Name' notatio instead");
+ pwarning(1, "Trailing = id notation is deprecated. Use 'Id: Type Name' notation instead");
pdebug("Field -> FieldType tok_identifier = tok_int_constant");
if ($4 <= 0) {
pwarning(1, "Nonpositive value (%d) not allowed as a field key for '%s'.\n", $4, $2);