]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
0a4bb5da JP |
2 | #include "builtin.h" |
3 | #include "perf.h" | |
9ff2a647 | 4 | #include "color.h" |
9ff2a647 | 5 | #include <tools/config.h> |
d3300a3c | 6 | #include <stdbool.h> |
7a8ef4c4 | 7 | #include <stdio.h> |
9ff2a647 JY |
8 | #include <string.h> |
9 | #include <subcmd/parse-options.h> | |
0a4bb5da | 10 | |
9ff2a647 JY |
11 | int version_verbose; |
12 | ||
13 | struct version { | |
14 | bool build_options; | |
15 | }; | |
16 | ||
17 | static struct version version; | |
18 | ||
19 | static struct option version_options[] = { | |
20 | OPT_BOOLEAN(0, "build-options", &version.build_options, | |
21 | "display the build options"), | |
916c31ff | 22 | OPT_END(), |
9ff2a647 JY |
23 | }; |
24 | ||
25 | static const char * const version_usage[] = { | |
26 | "perf version [<options>]", | |
27 | NULL | |
28 | }; | |
29 | ||
30 | static void on_off_print(const char *status) | |
31 | { | |
32 | printf("[ "); | |
33 | ||
34 | if (!strcmp(status, "OFF")) | |
35 | color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status); | |
36 | else | |
37 | color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status); | |
38 | ||
39 | printf(" ]"); | |
40 | } | |
41 | ||
42 | static void status_print(const char *name, const char *macro, | |
43 | const char *status) | |
0a4bb5da | 44 | { |
9ff2a647 JY |
45 | printf("%22s: ", name); |
46 | on_off_print(status); | |
47 | printf(" # %s\n", macro); | |
48 | } | |
49 | ||
50 | #define STATUS(__d, __m) \ | |
51 | do { \ | |
52 | if (IS_BUILTIN(__d)) \ | |
53 | status_print(#__m, #__d, "on"); \ | |
54 | else \ | |
55 | status_print(#__m, #__d, "OFF"); \ | |
56 | } while (0) | |
57 | ||
58 | static void library_status(void) | |
59 | { | |
60 | STATUS(HAVE_DWARF_SUPPORT, dwarf); | |
61 | STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations); | |
62 | STATUS(HAVE_GLIBC_SUPPORT, glibc); | |
8a812bf5 | 63 | #ifndef HAVE_SYSCALL_TABLE_SUPPORT |
9ff2a647 | 64 | STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit); |
8a812bf5 JY |
65 | #endif |
66 | STATUS(HAVE_SYSCALL_TABLE_SUPPORT, syscall_table); | |
9ff2a647 JY |
67 | STATUS(HAVE_LIBBFD_SUPPORT, libbfd); |
68 | STATUS(HAVE_LIBELF_SUPPORT, libelf); | |
69 | STATUS(HAVE_LIBNUMA_SUPPORT, libnuma); | |
70 | STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus); | |
71 | STATUS(HAVE_LIBPERL_SUPPORT, libperl); | |
72 | STATUS(HAVE_LIBPYTHON_SUPPORT, libpython); | |
73 | STATUS(HAVE_SLANG_SUPPORT, libslang); | |
74 | STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto); | |
75 | STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind); | |
76 | STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind); | |
77 | STATUS(HAVE_ZLIB_SUPPORT, zlib); | |
78 | STATUS(HAVE_LZMA_SUPPORT, lzma); | |
79 | STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid); | |
80 | STATUS(HAVE_LIBBPF_SUPPORT, bpf); | |
3b1c5d96 AB |
81 | STATUS(HAVE_AIO_SUPPORT, aio); |
82 | STATUS(HAVE_ZSTD_SUPPORT, zstd); | |
a7c77c4f | 83 | STATUS(HAVE_LIBPFM, libpfm4); |
9ff2a647 JY |
84 | } |
85 | ||
86 | int cmd_version(int argc, const char **argv) | |
87 | { | |
88 | argc = parse_options(argc, argv, version_options, version_usage, | |
89 | PARSE_OPT_STOP_AT_NON_OPTION); | |
90 | ||
0a4bb5da | 91 | printf("perf version %s\n", perf_version_string); |
9ff2a647 JY |
92 | |
93 | if (version.build_options || version_verbose == 1) | |
94 | library_status(); | |
95 | ||
0a4bb5da JP |
96 | return 0; |
97 | } |