[PATCH 08/12] perf tools: Search for more options when passing args to -h

From: Arnaldo Carvalho de Melo
Date: Wed Oct 28 2015 - 11:32:31 EST

From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>

Recently 'perf <tool> -h' was made aware of arguments and would show
just the help for the arguments specified, but that required a strict
form, i.e.:

$ perf -h --tui

worked, but:

$ perf -h tui


Make it support both cases and also look at the option help when neither
matches, so that he following examples works:

$ perf report -h interface

Usage: perf report [<options>]

--gtk Use the GTK2 interface
--stdio Use the stdio interface
--tui Use the TUI interface

$ perf report -h stack

Usage: perf report [<options>]

-g, --call-graph <print_type,threshold[,print_limit],order,
Display call graph (stack chain/backtrace):

print_type: call graph printing style (graph|flat|fractal|none)
threshold: minimum call graph inclusion threshold (<percent>)
print_limit: maximum number of call graph entry (<number>)
order: call graph order (caller|callee)
sort_key: call graph sort key (function|address)
branch: include last branch info to call graph (branch)

Default: graph,0.5,caller,function
--max-stack <n> Set the maximum stack depth when parsing the
callchain, anything beyond the specified depth
will be ignored. Default: 127

Suggested-by: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
Cc: Borislav Petkov <bp@xxxxxxx>
Cc: Brendan Gregg <brendan.d.gregg@xxxxxxxxx>
Cc: Chandler Carruth <chandlerc@xxxxxxxxx>
Cc: David Ahern <dsahern@xxxxxxxxx>
Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Stephane Eranian <eranian@xxxxxxxxxx>
Cc: Wang Nan <wangnan0@xxxxxxxxxx>
Link: http://lkml.kernel.org/n/tip-xzqvamzqv3cv0p6w3inhols3@xxxxxxxxxxxxxx
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
tools/perf/util/parse-options.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index 230e771407a3..9fca09296eb3 100644
--- a/tools/perf/util/parse-options.c
+++ b/tools/perf/util/parse-options.c
@@ -695,8 +695,21 @@ static bool option__in_argv(const struct option *opt, const struct parse_opt_ctx
for (i = 1; i < ctx->argc; ++i) {
const char *arg = ctx->argv[i];

- if (arg[0] != '-')
+ if (arg[0] != '-') {
+ if (arg[1] == '\0') {
+ if (arg[0] == opt->short_name)
+ return true;
+ continue;
+ }
+ if (opt->long_name && strcmp(opt->long_name, arg) == 0)
+ return true;
+ if (opt->help && strcasestr(opt->help, arg) != NULL)
+ return true;
+ }

if (arg[1] == opt->short_name ||
(arg[1] == '-' && opt->long_name && strcmp(opt->long_name, arg + 2) == 0))

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/