From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755049AbbJOHgD (ORCPT ); Thu, 15 Oct 2015 03:36:03 -0400 Received: from szxga03-in.huawei.com ([119.145.14.66]:7097 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755004AbbJOHgA (ORCPT ); Thu, 15 Oct 2015 03:36:00 -0400 From: Yunlong Song To: , , , CC: , , , , , , , Subject: [PATCH v2 1/3] perf help: Add options description to 'perf -h' Date: Thu, 15 Oct 2015 15:39:50 +0800 Message-ID: <1444894792-2338-2-git-send-email-yunlong.song@huawei.com> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1444894792-2338-1-git-send-email-yunlong.song@huawei.com> References: <20151014031043.GA3775@kernel.org> <1444894792-2338-1-git-send-email-yunlong.song@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.110.52.30] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090202.561F5725.009B,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: e9ce818d33b248bea4e36fff17bc146d Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add options description to 'perf -h' to make it consistent with other builtins (e.g., 'perf stat -h'). Example: Before this patch: # perf -h usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS] The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List the buildids in a perf.data file test Runs sanity tests. timechart Tool to visualize total system behavior during a workload top System profiling tool. trace strace inspired tool probe Define new dynamic tracepoints See 'perf help COMMAND' for more information on a specific command. After this patch: # perf -h usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS] --help help --version version --exec-path exec-path --html-path html-path --paginate paginate --no-pager no-pager --perf-dir perf-dir --work-tree work-tree --debugfs-dir debugfs-dir --buildid-dir buildid-dir --list-cmds list-cmds --list-opts list-opts --debug debug The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List the buildids in a perf.data file test Runs sanity tests. timechart Tool to visualize total system behavior during a workload top System profiling tool. trace strace inspired tool probe Define new dynamic tracepoints See 'perf help COMMAND' for more information on a specific command. As shown above, the options description really appears now. Signed-off-by: Yunlong Song --- tools/perf/builtin-help.c | 2 +- tools/perf/builtin.h | 3 +++ tools/perf/perf.c | 12 ++++++++---- tools/perf/util/parse-options.c | 7 +++++++ tools/perf/util/parse-options.h | 3 +++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c index 36486ea..5cb29fe 100644 --- a/tools/perf/builtin-help.c +++ b/tools/perf/builtin-help.c @@ -470,7 +470,7 @@ int cmd_help(int argc, const char **argv, const char *prefix __maybe_unused) } if (!argv[0]) { - printf("\n usage: %s\n\n", perf_usage_string); + usage_with_options_return(perf_usage, perf_options); list_common_cmds_help(); printf("\n %s\n\n", perf_more_info_string); return 0; diff --git a/tools/perf/builtin.h b/tools/perf/builtin.h index 3688ad2..4439db0 100644 --- a/tools/perf/builtin.h +++ b/tools/perf/builtin.h @@ -3,9 +3,12 @@ #include "util/util.h" #include "util/strbuf.h" +#include "util/parse-options.h" extern const char perf_usage_string[]; extern const char perf_more_info_string[]; +extern const char * const perf_usage[]; +extern struct option perf_options[]; extern void list_common_cmds_help(void); extern const char *help_unknown_cmd(const char *cmd); diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 5437134..3bcaa10d 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c @@ -21,6 +21,10 @@ const char perf_usage_string[] = "perf [--version] [--help] [OPTIONS] COMMAND [ARGS]"; +const char * const perf_usage[] = { + perf_usage_string, + NULL +}; const char perf_more_info_string[] = "See 'perf help COMMAND' for more information on a specific command."; @@ -127,7 +131,7 @@ static void commit_pager_choice(void) } } -struct option options[] = { +struct option perf_options[] = { OPT_ARGUMENT("help", "help"), OPT_ARGUMENT("version", "version"), OPT_ARGUMENT("exec-path", "exec-path"), @@ -261,8 +265,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) } else if (!strcmp(cmd, "--list-opts")) { unsigned int i; - for (i = 0; i < ARRAY_SIZE(options)-1; i++) { - struct option *p = options+i; + for (i = 0; i < ARRAY_SIZE(perf_options)-1; i++) { + struct option *p = perf_options+i; printf("--%s ", p->long_name); } putchar('\n'); @@ -578,7 +582,7 @@ int main(int argc, const char **argv) argv[0] += 2; } else { /* The user didn't specify a command; give them help */ - printf("\n usage: %s\n\n", perf_usage_string); + usage_with_options_return(perf_usage, perf_options); list_common_cmds_help(); printf("\n %s\n\n", perf_more_info_string); goto out; diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c index 9a38b05..494089b 100644 --- a/tools/perf/util/parse-options.c +++ b/tools/perf/util/parse-options.c @@ -677,6 +677,13 @@ void usage_with_options(const char * const *usagestr, exit(129); } +void usage_with_options_return(const char * const *usagestr, + const struct option *opts) +{ + exit_browser(false); + usage_with_options_internal(usagestr, opts, 0); +} + int parse_options_usage(const char * const *usagestr, const struct option *opts, const char *optstr, bool short_opt) diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h index 367d8b8..8130f83 100644 --- a/tools/perf/util/parse-options.h +++ b/tools/perf/util/parse-options.h @@ -161,6 +161,9 @@ extern int parse_options_subcommand(int argc, const char **argv, extern NORETURN void usage_with_options(const char * const *usagestr, const struct option *options); +extern void usage_with_options_return(const char * const *usagestr, + const struct option *options); + /*----- incremantal advanced APIs -----*/ enum { -- 1.8.5.2