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" |
7a8ef4c4 | 5 | #include <linux/compiler.h> |
9ff2a647 | 6 | #include <tools/config.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"), | |
22 | }; | |
23 | ||
24 | static const char * const version_usage[] = { | |
25 | "perf version [<options>]", | |
26 | NULL | |
27 | }; | |
28 | ||
29 | static void on_off_print(const char *status) | |
30 | { | |
31 | printf("[ "); | |
32 | ||
33 | if (!strcmp(status, "OFF")) | |
34 | color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status); | |
35 | else | |
36 | color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status); | |
37 | ||
38 | printf(" ]"); | |
39 | } | |
40 | ||
41 | static void status_print(const char *name, const char *macro, | |
42 | const char *status) | |
0a4bb5da | 43 | { |
9ff2a647 JY |
44 | printf("%22s: ", name); |
45 | on_off_print(status); | |
46 | printf(" # %s\n", macro); | |
47 | } | |
48 | ||
49 | #define STATUS(__d, __m) \ | |
50 | do { \ | |
51 | if (IS_BUILTIN(__d)) \ | |
52 | status_print(#__m, #__d, "on"); \ | |
53 | else \ | |
54 | status_print(#__m, #__d, "OFF"); \ | |
55 | } while (0) | |
56 | ||
57 | static void library_status(void) | |
58 | { | |
59 | STATUS(HAVE_DWARF_SUPPORT, dwarf); | |
60 | STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations); | |
61 | STATUS(HAVE_GLIBC_SUPPORT, glibc); | |
62 | STATUS(HAVE_GTK2_SUPPORT, gtk2); | |
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); | |
81 | } | |
82 | ||
83 | int cmd_version(int argc, const char **argv) | |
84 | { | |
85 | argc = parse_options(argc, argv, version_options, version_usage, | |
86 | PARSE_OPT_STOP_AT_NON_OPTION); | |
87 | ||
0a4bb5da | 88 | printf("perf version %s\n", perf_version_string); |
9ff2a647 JY |
89 | |
90 | if (version.build_options || version_verbose == 1) | |
91 | library_status(); | |
92 | ||
0a4bb5da JP |
93 | return 0; |
94 | } |