From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com,
alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org,
ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH v4 4/6] perf version: Print the compiled-in status of libraries
Date: Mon, 2 Apr 2018 13:47:38 -0300 [thread overview]
Message-ID: <20180402164738.GA23295@kernel.org> (raw)
In-Reply-To: <1522402036-22915-5-git-send-email-yao.jin@linux.intel.com>
Em Fri, Mar 30, 2018 at 05:27:14PM +0800, Jin Yao escreveu:
> This patch checks the values passed by CFLAGS (-DHAVE_XXX) and then
> print the status of libraries.
>
> For example, if HAVE_DWARF_SUPPORT is defined, that means the
> library "dwarf" is compiled-in. The patch will print the status
> "on" for this library otherwise it print the status "OFF".
>
> A new option '--build-options' created for 'perf version' supports
> the printing of library status.
>
> For example:
>
> $ ./perf version --build-options
> or
> ./perf --version --build-options
> or
> ./perf -v --build-options
>
> perf version 4.13.rc5.g6727c5
> dwarf: [ on ] # HAVE_DWARF_SUPPORT
> dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
> glibc: [ on ] # HAVE_GLIBC_SUPPORT
> gtk2: [ on ] # HAVE_GTK2_SUPPORT
> libaudit: [ OFF ] # HAVE_LIBAUDIT_SUPPORT
Ok, while testing this I noticed the above, which may be distracting,
i.e. on x86-64 and s/390 not having libaudit means nothing, it is not
needed for anything.
It is only needed for architectures where HAVE_SYSCALL_TABLE is not
defined, that, btw, is not listed here, so I suggest that we stop
printing this "libaudit [ OFF ]" line if HAVE_SYSCALL_TABLE is
available, and also add a line for HAVE_SYSCALL_TABLE.
Anyways, this can be done on top of this series, but please do a grep
looking for other HAVE_* to fix, and we need to rename
HAVE_SYSCALL_TABLE to HAVE_SYSCALL_TABLE_SUPPORT...
- Arnaldo
> libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
> libelf: [ on ] # HAVE_LIBELF_SUPPORT
> libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
> numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
> libperl: [ on ] # HAVE_LIBPERL_SUPPORT
> libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
> libslang: [ on ] # HAVE_SLANG_SUPPORT
> libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
> libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
> libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
> zlib: [ on ] # HAVE_ZLIB_SUPPORT
> lzma: [ on ] # HAVE_LZMA_SUPPORT
> get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
> bpf: [ on ] # HAVE_LIBBPF_SUPPORT
>
> v4:
> ---
> 1. Also print the macro name. That would make it easier
> to grep around in the source looking for where code
> related a particular features is located.
>
> 2. Update since HAVE_DWARF_GETLOCATIONS is renamed to
> HAVE_DWARF_GETLOCATIONS_SUPPORT
>
> v3:
> ---
> Remove following unnecessary help message.
>
> 1. [ on ]: library is compiled-in
> [ OFF ]: library is disabled in make configuration
> OR library is not installed in build environment
>
> 2. Create '--build-options' option.
>
> 3. Use standard option parsing API 'parse_options'.
>
> v2:
> ---
> 1. Use IS_BUILTIN macro to replace #ifdef/#endif block.
>
> 2. Print color for on/OFF.
>
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> ---
> tools/perf/builtin-version.c | 82 +++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 81 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
> index 37019c5..2abe391 100644
> --- a/tools/perf/builtin-version.c
> +++ b/tools/perf/builtin-version.c
> @@ -1,11 +1,91 @@
> // SPDX-License-Identifier: GPL-2.0
> #include "builtin.h"
> #include "perf.h"
> +#include "color.h"
> #include <linux/compiler.h>
> +#include <tools/config.h>
> #include <stdio.h>
> +#include <string.h>
> +#include <subcmd/parse-options.h>
>
> -int cmd_version(int argc __maybe_unused, const char **argv __maybe_unused)
> +int version_verbose;
> +
> +struct version {
> + bool build_options;
> +};
> +
> +static struct version version;
> +
> +static struct option version_options[] = {
> + OPT_BOOLEAN(0, "build-options", &version.build_options,
> + "display the build options"),
> +};
> +
> +static const char * const version_usage[] = {
> + "perf version [<options>]",
> + NULL
> +};
> +
> +static void on_off_print(const char *status)
> +{
> + printf("[ ");
> +
> + if (!strcmp(status, "OFF"))
> + color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status);
> + else
> + color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status);
> +
> + printf(" ]");
> +}
> +
> +static void status_print(const char *name, const char *macro,
> + const char *status)
> {
> + printf("%22s: ", name);
> + on_off_print(status);
> + printf(" # %s\n", macro);
> +}
> +
> +#define STATUS(__d, __m) \
> +do { \
> + if (IS_BUILTIN(__d)) \
> + status_print(#__m, #__d, "on"); \
> + else \
> + status_print(#__m, #__d, "OFF"); \
> +} while (0)
> +
> +static void library_status(void)
> +{
> + STATUS(HAVE_DWARF_SUPPORT, dwarf);
> + STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
> + STATUS(HAVE_GLIBC_SUPPORT, glibc);
> + STATUS(HAVE_GTK2_SUPPORT, gtk2);
> + STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
> + STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
> + STATUS(HAVE_LIBELF_SUPPORT, libelf);
> + STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
> + STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
> + STATUS(HAVE_LIBPERL_SUPPORT, libperl);
> + STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
> + STATUS(HAVE_SLANG_SUPPORT, libslang);
> + STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
> + STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
> + STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
> + STATUS(HAVE_ZLIB_SUPPORT, zlib);
> + STATUS(HAVE_LZMA_SUPPORT, lzma);
> + STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
> + STATUS(HAVE_LIBBPF_SUPPORT, bpf);
> +}
> +
> +int cmd_version(int argc, const char **argv)
> +{
> + argc = parse_options(argc, argv, version_options, version_usage,
> + PARSE_OPT_STOP_AT_NON_OPTION);
> +
> printf("perf version %s\n", perf_version_string);
> +
> + if (version.build_options || version_verbose == 1)
> + library_status();
> +
> return 0;
> }
> --
> 2.7.4
next prev parent reply other threads:[~2018-04-02 16:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-30 9:27 [PATCH v4 0/6] Support perf -vv Jin Yao
2018-03-30 9:27 ` [PATCH v4 1/6] tools include: Add config.h header file Jin Yao
2018-04-04 5:30 ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2018-03-30 9:27 ` [PATCH v4 3/6] perf config: Rename to HAVE_DWARF_GETLOCATIONS_SUPPORT Jin Yao
2018-04-04 5:31 ` [tip:perf/urgent] " tip-bot for Jin Yao
2018-03-30 9:27 ` [PATCH v4 4/6] perf version: Print the compiled-in status of libraries Jin Yao
2018-04-02 16:47 ` Arnaldo Carvalho de Melo [this message]
2018-04-03 1:24 ` Jin, Yao
2018-04-04 5:31 ` [tip:perf/urgent] " tip-bot for Jin Yao
2018-03-30 9:27 ` [PATCH v4 5/6] perf: Support perf -vv Jin Yao
2018-04-04 5:32 ` [tip:perf/urgent] perf tools: Add 'perf -vv' as an alias to 'perf version --build-options' tip-bot for Jin Yao
2018-03-30 9:27 ` [PATCH v4 6/6] perf Documentation: Create perf-version.txt Jin Yao
2018-04-04 5:32 ` [tip:perf/urgent] perf version: Add man page tip-bot for Jin Yao
2018-03-30 9:34 ` [PATCH v4 0/6] Support perf -vv Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180402164738.GA23295@kernel.org \
--to=acme@kernel.org \
--cc=Linux-kernel@vger.kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=yao.jin@intel.com \
--cc=yao.jin@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.