Merge branch 'tools-report-unknown-parameters'

This commit is contained in:
Horst Schirmeier
2014-10-01 13:58:57 +02:00
8 changed files with 67 additions and 21 deletions

View File

@ -43,8 +43,13 @@ bool CommandLine::parse() {
option::Descriptor desc = {0, 0, 0, 0, 0, 0}; option::Descriptor desc = {0, 0, 0, 0, 0, 0};
this->options.push_back(desc); this->options.push_back(desc);
// Generate the options stats // Copy argv to preserve original argument order
option::Stats stats(this->options.data(), argv.size(), argv.data()); // (for proper re-parsing after adding more options)
argv_reordered = argv;
// Generate the options stats (GNU mode)
option::Stats stats(true, this->options.data(),
argv_reordered.size(), argv_reordered.data());
if (parsed_options) if (parsed_options)
delete[] parsed_options; delete[] parsed_options;
@ -56,9 +61,9 @@ bool CommandLine::parse() {
parsed_options = new option::Option[stats.options_max]; parsed_options = new option::Option[stats.options_max];
parsed_buffer = new option::Option[stats.buffer_max]; parsed_buffer = new option::Option[stats.buffer_max];
m_parser = new option::Parser(this->options.data(), argv.size(), argv.data(), m_parser = new option::Parser(true, this->options.data(),
parsed_options, parsed_buffer); argv_reordered.size(), argv_reordered.data(),
parsed_options, parsed_buffer);
// Pop the terminating entry // Pop the terminating entry
this->options.pop_back(); this->options.pop_back();

View File

@ -30,7 +30,7 @@ public:
private: private:
static CommandLine m_instance; static CommandLine m_instance;
std::vector<const char *> argv; std::vector<const char *> argv, argv_reordered;
std::vector<option::Descriptor> options; std::vector<option::Descriptor> options;
option::Option *parsed_options, *parsed_buffer; option::Option *parsed_options, *parsed_buffer;
option::Parser *m_parser; option::Parser *m_parser;

View File

@ -40,7 +40,7 @@ int main(int argc, char *argv[])
// Manually fill the command line option parser // Manually fill the command line option parser
CommandLine &cmd = CommandLine::Inst(); CommandLine &cmd = CommandLine::Inst();
cmd.addOption("", "", Arg::None, "USAGE: compute-hops [options]"); CommandLine::option_handle UNKNOWN = cmd.addOption("", "", Arg::None, "USAGE: compute-hops [options]");
CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit");
CommandLine::option_handle ALGORITHM = CommandLine::option_handle ALGORITHM =
@ -99,7 +99,13 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
if (cmd[HELP]) { if (cmd[HELP] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() > 0) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 0; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
if (cmd[HELP]) { if (cmd[HELP]) {
exit(0); exit(0);

View File

@ -17,7 +17,8 @@ static Logger LOG("convert-trace", true);
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
CommandLine &cmd = CommandLine::Inst(); CommandLine &cmd = CommandLine::Inst();
cmd.addOption("", "", Arg::None, "usage: convert-trace -f dump|gem5 -t tracefile.tc"); CommandLine::option_handle UNKNOWN =
cmd.addOption("", "", Arg::None, "usage: convert-trace -f dump|gem5 -t tracefile.tc");
CommandLine::option_handle HELP = CommandLine::option_handle HELP =
cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit"); cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit");
CommandLine::option_handle FORMAT = CommandLine::option_handle FORMAT =
@ -28,11 +29,17 @@ int main(int argc, char *argv[]) {
cmd.add_args(argv[i]); cmd.add_args(argv[i]);
} }
if (!cmd.parse()) { if (!cmd.parse()) {
LOG << "Error parsing arguments." << endl; std::cerr << "Error parsing arguments." << endl;
return 1; return 1;
} }
if (cmd[HELP] || !cmd[OUTFILE] || !cmd[FORMAT] || cmd.parser()->nonOptionsCount() != 0) { if (cmd[HELP] || !cmd[OUTFILE] || !cmd[FORMAT] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() != 0) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 0; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
if (cmd[HELP]) { if (cmd[HELP]) {
exit(0); exit(0);

View File

@ -49,7 +49,8 @@ int main(int argc, char *argv[])
InjectionPointMessage ev; InjectionPointMessage ev;
CommandLine &cmd = CommandLine::Inst(); CommandLine &cmd = CommandLine::Inst();
cmd.addOption("", "", Arg::None, "usage: dump-hops [options] hopfile.hp"); CommandLine::option_handle UNKNOWN =
cmd.addOption("", "", Arg::None, "usage: dump-hops [options] hopfile.hp");
CommandLine::option_handle HELP = CommandLine::option_handle HELP =
cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit"); cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit");
// CommandLine::option_handle STATS = // CommandLine::option_handle STATS =
@ -64,7 +65,13 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
if (cmd[HELP] || cmd.parser()->nonOptionsCount() != 1) { if (cmd[HELP] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() != 1) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 1; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
if (cmd[HELP]) { if (cmd[HELP]) {
exit(0); exit(0);

View File

@ -49,7 +49,8 @@ int main(int argc, char *argv[])
Trace_Event ev; Trace_Event ev;
CommandLine &cmd = CommandLine::Inst(); CommandLine &cmd = CommandLine::Inst();
cmd.addOption("", "", Arg::None, "usage: dump-trace [options] tracefile.tc"); CommandLine::option_handle UNKNOWN =
cmd.addOption("", "", Arg::None, "usage: dump-trace [options] tracefile.tc");
CommandLine::option_handle HELP = CommandLine::option_handle HELP =
cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit"); cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit");
CommandLine::option_handle STATS = CommandLine::option_handle STATS =
@ -67,7 +68,13 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
if (cmd[HELP] || cmd.parser()->nonOptionsCount() != 1) { if (cmd[HELP] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() != 1) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 1; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
if (cmd[HELP]) { if (cmd[HELP]) {
exit(0); exit(0);

View File

@ -85,7 +85,8 @@ int main(int argc, char *argv[]) {
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
cmd.add_args(argv[i]); cmd.add_args(argv[i]);
cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]"); CommandLine::option_handle UNKNOWN =
cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]");
CommandLine::option_handle HELP = CommandLine::option_handle HELP =
cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit"); cmd.addOption("h", "help", Arg::None, "-h/--help \tPrint usage and exit");
CommandLine::option_handle TRACE_FILE = CommandLine::option_handle TRACE_FILE =
@ -176,9 +177,15 @@ int main(int argc, char *argv[]) {
// reparse all arguments. // reparse all arguments.
cmd.parse(); cmd.parse();
if (cmd[HELP]) { if (cmd[HELP] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() > 0) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 0; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
exit(0); exit(!cmd[HELP]);
} }
if (cmd[TRACE_FILE]) { if (cmd[TRACE_FILE]) {

View File

@ -35,7 +35,8 @@ int main(int argc, char *argv[]) {
cmd.add_args(argv[i]); cmd.add_args(argv[i]);
} }
cmd.addOption("", "", Arg::None, "USAGE: prune-trace [options]"); CommandLine::option_handle UNKNOWN =
cmd.addOption("", "", Arg::None, "USAGE: prune-trace [options]");
CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit");
Database::cmdline_setup(); Database::cmdline_setup();
@ -92,9 +93,15 @@ int main(int argc, char *argv[]) {
// reparse all arguments. // reparse all arguments.
cmd.parse(); cmd.parse();
if (cmd[HELP]) { if (cmd[HELP] || cmd[UNKNOWN] || cmd.parser()->nonOptionsCount() > 0) {
for (option::Option* opt = cmd[UNKNOWN]; opt; opt = opt->next()) {
std::cerr << "Unknown option: " << opt->name << "\n";
}
for (int i = 0; i < cmd.parser()->nonOptionsCount(); ++i) {
std::cerr << "Unknown non-option: " << cmd.parser()->nonOption(i) << "\n";
}
cmd.printUsage(); cmd.printUsage();
exit(0); exit(!cmd[HELP]);
} }
Database *db = Database::cmdline_connect(); Database *db = Database::cmdline_connect();