We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.
The perf can build, but it is missing important functionality. This patch provides a new option '-vv' which will print the compiled-in status of libraries. The 'perf -vv' is equal to 'perf -version --build-options'. For example: $ ./perf -vv or ./perf -version --build-options perf version 4.13.rc5.gcb1183 dwarf: [ on ] dwarf_getlocations: [ on ] glibc: [ on ] gtk2: [ on ] libaudit: [ OFF ] libbfd: [ on ] libelf: [ on ] libnuma: [ on ] numa_num_possible_cpus: [ on ] libperl: [ on ] libpython: [ on ] libslang: [ on ] libcrypto: [ on ] libunwind: [ on ] libdw-dwarf-unwind: [ on ] zlib: [ on ] lzma: [ on ] get_cpuid: [ on ] bpf: [ on ] [ on ]: library is compiled-in [ OFF ]: library is disabled in make configuration OR library is not installed in build environment v2: --- Use a global variable version_verbose to count the number of 'v'. Signed-off-by: Jin Yao <yao....@linux.intel.com> --- tools/perf/perf.c | 22 ++++++++++++++++++---- tools/perf/perf.h | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 1b3fc8e..355219e 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c @@ -32,7 +32,7 @@ #include <linux/kernel.h> const char perf_usage_string[] = - "perf [--version] [--help] [OPTIONS] COMMAND [ARGS]"; + "perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]"; const char perf_more_info_string[] = "See 'perf help COMMAND' for more information on a specific command."; @@ -163,6 +163,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) { int handled = 0; + version_verbose = 0; + while (*argc > 0) { const char *cmd = (*argv)[0]; if (cmd[0] != '-') @@ -185,9 +187,21 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) break; } - if (!strcmp(cmd, "-v")) { - (*argv)[0] = "--version"; - break; + if (strstarts(cmd, "-v")) { + int i; + + for (i = 2; cmd[i]; i++) { + if (cmd[i] == 'v') + version_verbose++; + } + + /* + * Only support -v and -vv now + */ + if (version_verbose < 2) { + (*argv)[0] = "--version"; + break; + } } /* diff --git a/tools/perf/perf.h b/tools/perf/perf.h index 8fec1ab..a1a9795 100644 --- a/tools/perf/perf.h +++ b/tools/perf/perf.h @@ -84,6 +84,7 @@ struct record_opts { struct option; extern const char * const *record_usage; extern struct option *record_options; +extern int version_verbose; int record__parse_freq(const struct option *opt, const char *str, int unset); #endif -- 2.7.4