Fix rocprof-sys-run --help command (#359)
Handle the `--help` parameter in the same way it is handled in other tools such as `rocprof-sys-sample` and `rocprof-sys-instrument`.
This commit is contained in:
committed by
GitHub
parent
947adacb3a
commit
c58e3e92c1
@@ -250,6 +250,32 @@ print_updated_environment(parser_data_t& _data, std::string_view _prefix)
|
||||
parser_data_t&
|
||||
parse_args(int argc, char** argv, parser_data_t& _parser_data, bool& _fork_exec)
|
||||
{
|
||||
using parser_t = argparse::argument_parser;
|
||||
using parser_err_t = typename parser_t::result_type;
|
||||
|
||||
auto help_check = [](parser_t& p, int _argc, char** _argv) {
|
||||
std::set<std::string> help_args = { "-h", "--help", "-?" };
|
||||
return (p.exists("help") || _argc == 1 ||
|
||||
(_argc > 1 && help_args.find(_argv[1]) != help_args.end()));
|
||||
};
|
||||
|
||||
auto _pec = EXIT_SUCCESS;
|
||||
auto help_action = [&_pec, argc, argv](parser_t& p) {
|
||||
if(_pec != EXIT_SUCCESS)
|
||||
{
|
||||
std::stringstream msg;
|
||||
msg << "Error in command:";
|
||||
for(int i = 0; i < argc; ++i)
|
||||
msg << " " << argv[i];
|
||||
msg << "\n\n";
|
||||
stream(std::cerr, color::fatal()) << msg.str();
|
||||
std::cerr << std::flush;
|
||||
}
|
||||
|
||||
p.print_help();
|
||||
exit(_pec);
|
||||
};
|
||||
|
||||
get_initial_environment(_parser_data);
|
||||
|
||||
bool _do_parse_args = false;
|
||||
@@ -266,21 +292,12 @@ parse_args(int argc, char** argv, parser_data_t& _parser_data, bool& _fork_exec)
|
||||
|
||||
if(!_do_parse_args) return parse_command(argc, argv, _parser_data);
|
||||
|
||||
using parser_t = argparse::argument_parser;
|
||||
using parser_err_t = typename parser_t::result_type;
|
||||
|
||||
toggle_suppression(initial_suppression);
|
||||
rocprofsys::argparse::init_parser(_parser_data);
|
||||
|
||||
// no need for backtraces
|
||||
signals::disable_signal_detection(signals::signal_settings::get_enabled());
|
||||
|
||||
auto help_check = [](parser_t& p, int _argc, char** _argv) {
|
||||
std::set<std::string> help_args = { "-h", "--help", "-?" };
|
||||
return (p.exists("help") || _argc == 1 ||
|
||||
(_argc > 1 && help_args.find(_argv[1]) != help_args.end()));
|
||||
};
|
||||
|
||||
const auto* _desc = R"desc(
|
||||
Command line interface to rocprof-sys configuration.
|
||||
)desc";
|
||||
@@ -292,7 +309,7 @@ parse_args(int argc, char** argv, parser_data_t& _parser_data, bool& _fork_exec)
|
||||
exit(EXIT_FAILURE);
|
||||
});
|
||||
|
||||
parser.enable_help("", "Usage: rocprof-sys-run <OPTIONS> -- <COMMAND> <ARGS>");
|
||||
parser.enable_help();
|
||||
parser.enable_version("rocprof-sys-run", ROCPROFSYS_ARGPARSE_VERSION_INFO);
|
||||
|
||||
auto _cols = std::get<0>(console::get_columns());
|
||||
@@ -337,11 +354,10 @@ parse_args(int argc, char** argv, parser_data_t& _parser_data, bool& _fork_exec)
|
||||
}
|
||||
|
||||
auto _cerr = parser.parse_args(_inpv.size(), _inpv.data());
|
||||
if(_cerr)
|
||||
{
|
||||
std::cerr << _cerr.what() << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if(help_check(parser, argc, argv))
|
||||
help_action(parser);
|
||||
else if(_cerr)
|
||||
throw std::runtime_error(_cerr.what());
|
||||
|
||||
tim::log::monochrome() = _parser_data.monochrome;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user