tools/build/Makefile.feature | 4 +-
tools/build/feature/Makefile | 10 +--
tools/build/feature/test-gtk2-infobar.c | 12 ---
tools/build/feature/{test-gtk2.c => test-gtk4.c} | 4 +-
tools/perf/Documentation/perf-report.txt | 2 +-
tools/perf/Makefile | 2 +-
tools/perf/Makefile.config | 27 +++----
tools/perf/Makefile.perf | 6 +-
tools/perf/builtin-annotate.c | 8 +-
tools/perf/builtin-report.c | 8 +-
tools/perf/scripts/install-build-deps.sh | 4 +-
tools/perf/tests/make | 4 +-
tools/perf/ui/gtk/annotate.c | 36 ++++-----
tools/perf/ui/gtk/browser.c | 96 ++++++++++++++++++-----
tools/perf/ui/gtk/gtk.h | 16 ++--
tools/perf/ui/gtk/hists.c | 72 +++++++++---------
tools/perf/ui/gtk/progress.c | 40 +++++++---
tools/perf/ui/gtk/setup.c | 5 +-
tools/perf/ui/gtk/util.c | 97 ++++++++++++++----------
tools/perf/ui/setup.c | 2 +-
tools/perf/util/annotate.c | 11 +++
tools/perf/util/annotate.h | 12 +--
22 files changed, 278 insertions(+), 200 deletions(-)
GTK2 is long dead upstream and increasingly hard to keep building on
current distros. This series ports perf's GTK-based report browser to
GTK4 and fixes it up so it's actually loadable at runtime after the
port.
Patch 1 does the mechanical port (build system, widget API changes),
including the leftover-GTK2-call and signal-handling fixes that were a
separate patch 3 in v4. Patch 2 fixes a runtime issue found after the
port that prevented the browser from loading. Patch 3 fixes two stack
buffer overflows in the hierarchy view that predate the port.
Signed-off-by: Matt Turner <mattst88@gmail.com>
---
Changes in v8:
- Fix perf_gtk__add_hierarchy_entries() to restore hpp->buf/hpp->size
unconditionally after formatting each entry, not just before
recursing into children: leaf entries left the buffer state
advanced, so the next sibling in the traversal inherited a
shrunk hpp->size and an already-advanced hpp->buf, eventually
running hpp->size to 0 and pointing bf past the end of the
stack buffer for the strim(bf) call (reported in v7 review)
- Link to v7: https://lore.kernel.org/r/20260906-perf-gtk2-v7-0-1ece839fbca0@gmail.com
Changes in v7:
- Add patch 3: fix two stack buffer overflows in the hierarchy view
(perf_gtk__show_hierarchy()'s unbounded strcat() into a 512-byte
buffer, and an advance_hpp() size_t underflow in
perf_gtk__add_hierarchy_entries()). Both predate the GTK4 port
- Link to v6: https://lore.kernel.org/r/20260906-perf-gtk2-v6-0-695d1c01aaa1@gmail.com
Changes in v6:
- Explicitly include <string.h> in annotate.c (strcpy()) and
<stdarg.h>/<stdio.h> in hists.c (va_list, snprintf()) instead of
relying on transitive includes, which isn't guaranteed on musl
- Link to v5: https://lore.kernel.org/r/20260906-perf-gtk2-v5-0-e8747a65c240@gmail.com
Changes in v5:
- Fold v4's patch 3 into patch 1, since sigprocmask() only blocks
delivery to the calling thread: it did nothing to stop the signal
handler from running concurrently on another thread and doesn't make
the handler's GSList calls async-signal-safe either
- Defer perf_gtk__exit() on SIGINT/SIGQUIT/SIGTERM to a GLib source via
g_unix_signal_add() instead of running it straight out of a real
signal handler, so it always runs on the main-loop thread, serialized
with perf_gtk__error()'s updates to perf_gtk__error_loops, instead of
racing them from arbitrary signal-handler context
- Keep a real handler for SIGSEGV/SIGFPE, since those are synchronous
faults with no "later" to defer to, but pare it down to reporting and
reraising the default disposition: there's no safe way to run
GTK/GLib code from the faulting context itself
- Link to v4: https://lore.kernel.org/r/20260906-perf-gtk2-v4-0-97e92ee07214@gmail.com
Changes in v4:
- Fix gtk_widget_show()/gtk_widget_hide() calls left over from the GTK2
port: both were removed in GTK 4. Replace with gtk_widget_set_visible(),
adding a small wrapper for the info-bar "response" signal callback
- Block SIGSEGV/SIGFPE/SIGINT/SIGQUIT/SIGTERM around the
perf_gtk__error_loops list updates in perf_gtk__error(): the signal
handler (perf_gtk__signal() -> perf_gtk__exit() ->
perf_gtk__quit_error_dialog()) walks that same list and could fire
mid-update, corrupting it
- Link to v3: https://lore.kernel.org/r/20260906-perf-gtk2-v3-0-e1f2086214a0@gmail.com
Changes in v3:
- Fix GMainLoop leak if perf_gtk__error() is called re-entrantly: track
active loops in a list instead of a single global pointer
- Add explicit <stdarg.h>/<stdio.h> includes instead of relying on
transitive inclusion, which musl doesn't guarantee
- Drop the gtk4-infobar feature check and HAVE_GTK_INFO_BAR_SUPPORT:
GtkInfoBar has been unconditionally available since well before GTK 4,
and the check was failing outright due to its deprecation warning
- Link to v2: https://lore.kernel.org/r/20260906-perf-gtk2-v2-0-3eccff053cd1@gmail.com
Changes in v2:
- Fix error dialog's nested GMainLoop hanging if the parent window
closes or a signal arrives while the dialog is open (quit from
"destroy", not just "response")
- Fix build with GTK_INFO_BAR_SUPPORT: gtk_info_bar_get_content_area()
is gone in GTK 4, use gtk_info_bar_add_child() instead
- Fix use-after-free in the progress dialog on manual close
- Fix reuse of an exhausted va_list in the vasprintf() failure path
- Link to v1: https://lore.kernel.org/r/20260906-perf-gtk2-v1-0-7564bf8523a9@gmail.com
---
Matt Turner (3):
tools: port perf ui from GTK 2 to GTK 4
perf tools: make the GTK4 report browser actually loadable at runtime
perf tools gtk: fix two hierarchy-view stack buffer overflows
tools/build/Makefile.feature | 4 +-
tools/build/feature/Makefile | 10 +--
tools/build/feature/test-gtk2-infobar.c | 12 ---
tools/build/feature/{test-gtk2.c => test-gtk4.c} | 4 +-
tools/perf/Documentation/perf-report.txt | 2 +-
tools/perf/Makefile | 2 +-
tools/perf/Makefile.config | 27 +++----
tools/perf/Makefile.perf | 6 +-
tools/perf/builtin-annotate.c | 8 +-
tools/perf/builtin-report.c | 8 +-
tools/perf/scripts/install-build-deps.sh | 4 +-
tools/perf/tests/make | 4 +-
tools/perf/ui/gtk/annotate.c | 36 ++++-----
tools/perf/ui/gtk/browser.c | 96 ++++++++++++++++++-----
tools/perf/ui/gtk/gtk.h | 16 ++--
tools/perf/ui/gtk/hists.c | 72 +++++++++---------
tools/perf/ui/gtk/progress.c | 40 +++++++---
tools/perf/ui/gtk/setup.c | 5 +-
tools/perf/ui/gtk/util.c | 97 ++++++++++++++----------
tools/perf/ui/setup.c | 2 +-
tools/perf/util/annotate.c | 11 +++
tools/perf/util/annotate.h | 12 +--
22 files changed, 278 insertions(+), 200 deletions(-)
---
base-commit: 9f0346dcbea363787186c94ef94dd01aaa215afa
change-id: 20260906-perf-gtk2-555ca04bb652
Best regards,
--
Matt Turner <mattst88@gmail.com>
On Tue, Sep 08, 2026 at 10:50:33PM -0400, Matt Turner wrote:
> GTK2 is long dead upstream and increasingly hard to keep building on
> current distros. This series ports perf's GTK-based report browser to
> GTK4 and fixes it up so it's actually loadable at runtime after the
> port.
>
> Patch 1 does the mechanical port (build system, widget API changes),
> including the leftover-GTK2-call and signal-handling fixes that were a
> separate patch 3 in v4. Patch 2 fixes a runtime issue found after the
> port that prevented the browser from loading. Patch 3 fixes two stack
> buffer overflows in the hierarchy view that predate the port.
I'm tentatively merging this, will test build on my distro container set
and perform some testing, thanks for working on this!
- Arnaldo
> Signed-off-by: Matt Turner <mattst88@gmail.com>
> ---
> Changes in v8:
> - Fix perf_gtk__add_hierarchy_entries() to restore hpp->buf/hpp->size
> unconditionally after formatting each entry, not just before
> recursing into children: leaf entries left the buffer state
> advanced, so the next sibling in the traversal inherited a
> shrunk hpp->size and an already-advanced hpp->buf, eventually
> running hpp->size to 0 and pointing bf past the end of the
> stack buffer for the strim(bf) call (reported in v7 review)
> - Link to v7: https://lore.kernel.org/r/20260906-perf-gtk2-v7-0-1ece839fbca0@gmail.com
>
> Changes in v7:
> - Add patch 3: fix two stack buffer overflows in the hierarchy view
> (perf_gtk__show_hierarchy()'s unbounded strcat() into a 512-byte
> buffer, and an advance_hpp() size_t underflow in
> perf_gtk__add_hierarchy_entries()). Both predate the GTK4 port
> - Link to v6: https://lore.kernel.org/r/20260906-perf-gtk2-v6-0-695d1c01aaa1@gmail.com
>
> Changes in v6:
> - Explicitly include <string.h> in annotate.c (strcpy()) and
> <stdarg.h>/<stdio.h> in hists.c (va_list, snprintf()) instead of
> relying on transitive includes, which isn't guaranteed on musl
> - Link to v5: https://lore.kernel.org/r/20260906-perf-gtk2-v5-0-e8747a65c240@gmail.com
>
> Changes in v5:
> - Fold v4's patch 3 into patch 1, since sigprocmask() only blocks
> delivery to the calling thread: it did nothing to stop the signal
> handler from running concurrently on another thread and doesn't make
> the handler's GSList calls async-signal-safe either
> - Defer perf_gtk__exit() on SIGINT/SIGQUIT/SIGTERM to a GLib source via
> g_unix_signal_add() instead of running it straight out of a real
> signal handler, so it always runs on the main-loop thread, serialized
> with perf_gtk__error()'s updates to perf_gtk__error_loops, instead of
> racing them from arbitrary signal-handler context
> - Keep a real handler for SIGSEGV/SIGFPE, since those are synchronous
> faults with no "later" to defer to, but pare it down to reporting and
> reraising the default disposition: there's no safe way to run
> GTK/GLib code from the faulting context itself
> - Link to v4: https://lore.kernel.org/r/20260906-perf-gtk2-v4-0-97e92ee07214@gmail.com
>
> Changes in v4:
> - Fix gtk_widget_show()/gtk_widget_hide() calls left over from the GTK2
> port: both were removed in GTK 4. Replace with gtk_widget_set_visible(),
> adding a small wrapper for the info-bar "response" signal callback
> - Block SIGSEGV/SIGFPE/SIGINT/SIGQUIT/SIGTERM around the
> perf_gtk__error_loops list updates in perf_gtk__error(): the signal
> handler (perf_gtk__signal() -> perf_gtk__exit() ->
> perf_gtk__quit_error_dialog()) walks that same list and could fire
> mid-update, corrupting it
> - Link to v3: https://lore.kernel.org/r/20260906-perf-gtk2-v3-0-e1f2086214a0@gmail.com
>
> Changes in v3:
> - Fix GMainLoop leak if perf_gtk__error() is called re-entrantly: track
> active loops in a list instead of a single global pointer
> - Add explicit <stdarg.h>/<stdio.h> includes instead of relying on
> transitive inclusion, which musl doesn't guarantee
> - Drop the gtk4-infobar feature check and HAVE_GTK_INFO_BAR_SUPPORT:
> GtkInfoBar has been unconditionally available since well before GTK 4,
> and the check was failing outright due to its deprecation warning
> - Link to v2: https://lore.kernel.org/r/20260906-perf-gtk2-v2-0-3eccff053cd1@gmail.com
>
> Changes in v2:
> - Fix error dialog's nested GMainLoop hanging if the parent window
> closes or a signal arrives while the dialog is open (quit from
> "destroy", not just "response")
> - Fix build with GTK_INFO_BAR_SUPPORT: gtk_info_bar_get_content_area()
> is gone in GTK 4, use gtk_info_bar_add_child() instead
> - Fix use-after-free in the progress dialog on manual close
> - Fix reuse of an exhausted va_list in the vasprintf() failure path
> - Link to v1: https://lore.kernel.org/r/20260906-perf-gtk2-v1-0-7564bf8523a9@gmail.com
>
> ---
> Matt Turner (3):
> tools: port perf ui from GTK 2 to GTK 4
> perf tools: make the GTK4 report browser actually loadable at runtime
> perf tools gtk: fix two hierarchy-view stack buffer overflows
>
> tools/build/Makefile.feature | 4 +-
> tools/build/feature/Makefile | 10 +--
> tools/build/feature/test-gtk2-infobar.c | 12 ---
> tools/build/feature/{test-gtk2.c => test-gtk4.c} | 4 +-
> tools/perf/Documentation/perf-report.txt | 2 +-
> tools/perf/Makefile | 2 +-
> tools/perf/Makefile.config | 27 +++----
> tools/perf/Makefile.perf | 6 +-
> tools/perf/builtin-annotate.c | 8 +-
> tools/perf/builtin-report.c | 8 +-
> tools/perf/scripts/install-build-deps.sh | 4 +-
> tools/perf/tests/make | 4 +-
> tools/perf/ui/gtk/annotate.c | 36 ++++-----
> tools/perf/ui/gtk/browser.c | 96 ++++++++++++++++++-----
> tools/perf/ui/gtk/gtk.h | 16 ++--
> tools/perf/ui/gtk/hists.c | 72 +++++++++---------
> tools/perf/ui/gtk/progress.c | 40 +++++++---
> tools/perf/ui/gtk/setup.c | 5 +-
> tools/perf/ui/gtk/util.c | 97 ++++++++++++++----------
> tools/perf/ui/setup.c | 2 +-
> tools/perf/util/annotate.c | 11 +++
> tools/perf/util/annotate.h | 12 +--
> 22 files changed, 278 insertions(+), 200 deletions(-)
> ---
> base-commit: 9f0346dcbea363787186c94ef94dd01aaa215afa
> change-id: 20260906-perf-gtk2-555ca04bb652
>
> Best regards,
> --
> Matt Turner <mattst88@gmail.com>
On Wed, Sep 09, 2026 at 08:13:07AM -0300, Arnaldo Carvalho de Melo wrote: > On Tue, Sep 08, 2026 at 10:50:33PM -0400, Matt Turner wrote: > > GTK2 is long dead upstream and increasingly hard to keep building on > > current distros. This series ports perf's GTK-based report browser to > > GTK4 and fixes it up so it's actually loadable at runtime after the > > port. > > > > Patch 1 does the mechanical port (build system, widget API changes), > > including the leftover-GTK2-call and signal-handling fixes that were a > > separate patch 3 in v4. Patch 2 fixes a runtime issue found after the > > port that prevented the browser from loading. Patch 3 fixes two stack > > buffer overflows in the hierarchy view that predate the port. > > I'm tentatively merging this, will test build on my distro container set > and perform some testing, thanks for working on this! Some fuzz applying the first patch in the series: ⬢ [acme@toolbx perf-tools-next]$ patch -p1 < ./v8_20260908_mattst88_perf_tools_port_ui_from_gtk2_to_gtk4.mbx patching file tools/build/Makefile.feature patching file tools/build/feature/Makefile patching file tools/build/feature/test-gtk2-infobar.c patching file tools/build/feature/test-gtk4.c (renamed from tools/build/feature/test-gtk2.c) patching file tools/perf/Documentation/perf-report.txt Hunk #1 succeeded at 354 with fuzz 2 (offset 3 lines). patching file tools/perf/Makefile patching file tools/perf/Makefile.config patching file tools/perf/Makefile.perf patching file tools/perf/builtin-annotate.c Hunk #1 succeeded at 61 (offset 9 lines). Hunk #2 succeeded at 721 (offset 9 lines). Hunk #3 succeeded at 840 (offset 12 lines). Hunk #4 succeeded at 910 (offset 12 lines). patching file tools/perf/builtin-report.c Hunk #1 succeeded at 83 (offset 1 line). Hunk #2 succeeded at 1360 (offset 1 line). Hunk #3 succeeded at 1714 (offset 4 lines). patching file tools/perf/scripts/install-build-deps.sh patching file tools/perf/tests/make patching file tools/perf/ui/gtk/annotate.c patching file tools/perf/ui/gtk/browser.c patching file tools/perf/ui/gtk/gtk.h patching file tools/perf/ui/gtk/hists.c patching file tools/perf/ui/gtk/progress.c patching file tools/perf/ui/gtk/setup.c patching file tools/perf/ui/gtk/util.c patching file tools/perf/ui/setup.c ⬢ [acme@toolbx perf-tools-next]$ I fixed it up quickly, now lets see the rest... - Arnaldo
On Wed, Sep 09, 2026 at 08:25:41AM -0300, Arnaldo Carvalho de Melo wrote:
> On Wed, Sep 09, 2026 at 08:13:07AM -0300, Arnaldo Carvalho de Melo wrote:
> > On Tue, Sep 08, 2026 at 10:50:33PM -0400, Matt Turner wrote:
> > > GTK2 is long dead upstream and increasingly hard to keep building on
> > > current distros. This series ports perf's GTK-based report browser to
> > > GTK4 and fixes it up so it's actually loadable at runtime after the
> > > port.
> > >
> > > Patch 1 does the mechanical port (build system, widget API changes),
> > > including the leftover-GTK2-call and signal-handling fixes that were a
> > > separate patch 3 in v4. Patch 2 fixes a runtime issue found after the
> > > port that prevented the browser from loading. Patch 3 fixes two stack
> > > buffer overflows in the hierarchy view that predate the port.
> >
> > I'm tentatively merging this, will test build on my distro container set
> > and perform some testing, thanks for working on this!
>
> Some fuzz applying the first patch in the series:
>
> ⬢ [acme@toolbx perf-tools-next]$ patch -p1 < ./v8_20260908_mattst88_perf_tools_port_ui_from_gtk2_to_gtk4.mbx
> patching file tools/build/Makefile.feature
> patching file tools/build/feature/Makefile
> patching file tools/build/feature/test-gtk2-infobar.c
> patching file tools/build/feature/test-gtk4.c (renamed from tools/build/feature/test-gtk2.c)
> patching file tools/perf/Documentation/perf-report.txt
> Hunk #1 succeeded at 354 with fuzz 2 (offset 3 lines).
> patching file tools/perf/Makefile
> patching file tools/perf/Makefile.config
> patching file tools/perf/Makefile.perf
> patching file tools/perf/builtin-annotate.c
> Hunk #1 succeeded at 61 (offset 9 lines).
> Hunk #2 succeeded at 721 (offset 9 lines).
> Hunk #3 succeeded at 840 (offset 12 lines).
> Hunk #4 succeeded at 910 (offset 12 lines).
> patching file tools/perf/builtin-report.c
> Hunk #1 succeeded at 83 (offset 1 line).
> Hunk #2 succeeded at 1360 (offset 1 line).
> Hunk #3 succeeded at 1714 (offset 4 lines).
> patching file tools/perf/scripts/install-build-deps.sh
> patching file tools/perf/tests/make
> patching file tools/perf/ui/gtk/annotate.c
> patching file tools/perf/ui/gtk/browser.c
> patching file tools/perf/ui/gtk/gtk.h
> patching file tools/perf/ui/gtk/hists.c
> patching file tools/perf/ui/gtk/progress.c
> patching file tools/perf/ui/gtk/setup.c
> patching file tools/perf/ui/gtk/util.c
> patching file tools/perf/ui/setup.c
> ⬢ [acme@toolbx perf-tools-next]$
>
> I fixed it up quickly, now lets see the rest...
Trying to build with it with just the first patch in this series in it
correctly discovers that the gtk4 devel files are not available but then
proceed to try to include gtk code and thus fail, where it should just
do what the feature detection states: disable gtk support but build
successfully without it, I'm checking if this is a quick surgery.
- Arnaldo
⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make -k GTK4=1 O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test import && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python
⬢ [acme@toolbx perf-tools-next]$ m
make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
BUILD: Doing 'make -j32' parallel build
Makefile.config:781: GTK4 not found, disables GTK4 support. Please install gtk4-devel or libgtk-4-dev
Auto-detecting system features:
... libdw: [ on ]
... glibc: [ on ]
... gtk4: [ OFF ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libpython: [ on ]
... libcapstone: [ on ]
... llvm-perf: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... libopenssl: [ on ]
... rust: [ on ]
INSTALL libsubcmd_headers
INSTALL libsymbol_headers
INSTALL libapi_headers
INSTALL libperf_headers
CC /tmp/build/perf-tools-next/libperf/core.o
CC /tmp/build/perf-tools-next/libperf/cpumap.o
CC /tmp/build/perf-tools-next/libperf/threadmap.o
CC /tmp/build/perf-tools-next/libperf/evsel.o
CC /tmp/build/perf-tools-next/libsubcmd/exec-cmd.o
CC /tmp/build/perf-tools-next/libperf/evlist.o
CC /tmp/build/perf-tools-next/libperf/mmap.o
INSTALL libbpf_headers
CC /tmp/build/perf-tools-next/libsubcmd/help.o
CC /tmp/build/perf-tools-next/libperf/zalloc.o
CC /tmp/build/perf-tools-next/libsubcmd/pager.o
CC /tmp/build/perf-tools-next/libperf/xyarray.o
CC /tmp/build/perf-tools-next/libsubcmd/parse-options.o
CC /tmp/build/perf-tools-next/libperf/lib.o
CC /tmp/build/perf-tools-next/libsubcmd/run-command.o
CC /tmp/build/perf-tools-next/libsubcmd/sigchain.o
CC /tmp/build/perf-tools-next/libsubcmd/subcmd-config.o
LD /tmp/build/perf-tools-next/libsubcmd/libsubcmd-in.o
AR /tmp/build/perf-tools-next/libsubcmd/libsubcmd.a
LD /tmp/build/perf-tools-next/libperf/libperf-in.o
AR /tmp/build/perf-tools-next/libperf/libperf.a
MKDIR /tmp/build/perf-tools-next/ui/gtk/
CC /tmp/build/perf-tools-next/jvmti/libjvmti.o
MKDIR /tmp/build/perf-tools-next/ui/gtk/
CC /tmp/build/perf-tools-next/trace/beauty/syscalltbl.o
MKDIR /tmp/build/perf-tools-next/ui/gtk/
CC /tmp/build/perf-tools-next/arch/common.o
CC /tmp/build/perf-tools-next/jvmti/jvmti_agent.o
MKDIR /tmp/build/perf-tools-next/ui/gtk/
MKDIR /tmp/build/perf-tools-next/ui/gtk/
CC /tmp/build/perf-tools-next/trace/beauty/arch_errno_names.o
CC /tmp/build/perf-tools-next/ui/setup.o
CC /tmp/build/perf-tools-next/jvmti/libstring.o
MKDIR /tmp/build/perf-tools-next/ui/gtk/
CC /tmp/build/perf-tools-next/ui/helpline.o
CC /tmp/build/perf-tools-next/jvmti/libctype.o
CC /tmp/build/perf-tools-next/arch/x86/tests/regs_load.o
CC /tmp/build/perf-tools-next/ui/gtk/browser.o
CC /tmp/build/perf-tools-next/ui/gtk/hists.o
CC /tmp/build/perf-tools-next/ui/gtk/setup.o
CC /tmp/build/perf-tools-next/ui/gtk/annotate.o
CC /tmp/build/perf-tools-next/ui/progress.o
CC /tmp/build/perf-tools-next/scripts/python/Perf-Trace-Util/Context.o
CC /tmp/build/perf-tools-next/ui/gtk/util.o
CC /tmp/build/perf-tools-next/ui/util.o
CC /tmp/build/perf-tools-next/ui/gtk/helpline.o
CC /tmp/build/perf-tools-next/ui/gtk/zalloc.o
CC /tmp/build/perf-tools-next/arch/x86/tests/dwarf-unwind.o
CC /tmp/build/perf-tools-next/ui/gtk/progress.o
CC /tmp/build/perf-tools-next/arch/x86/tests/arch-tests.o
CC /tmp/build/perf-tools-next/ui/hist.o
CC /tmp/build/perf-tools-next/arch/x86/tests/hybrid.o
CC /tmp/build/perf-tools-next/builtin-annotate.o
CC /tmp/build/perf-tools-next/arch/x86/util/header.o
CC /tmp/build/perf-tools-next/arch/x86/tests/intel-pt-test.o
CC /tmp/build/perf-tools-next/ui/stdio/hist.o
CC /tmp/build/perf-tools-next/arch/x86/tests/bp-modify.o
CC /tmp/build/perf-tools-next/ui/browser.o
CC /tmp/build/perf-tools-next/tests/builtin-test.o
CC /tmp/build/perf-tools-next/ui/keysyms.o
CC /tmp/build/perf-tools-next/arch/x86/util/tsc.o
CC /tmp/build/perf-tools-next/arch/x86/tests/amd-ibs-via-core-pmu.o
CC /tmp/build/perf-tools-next/tests/tests-scripts.o
CC /tmp/build/perf-tools-next/builtin-check.o
LD /tmp/build/perf-tools-next/trace/beauty/perf-util-in.o
CC /tmp/build/perf-tools-next/arch/x86/util/pmu.o
CC /tmp/build/perf-tools-next/arch/x86/tests/amd-ibs-period.o
CC /tmp/build/perf-tools-next/builtin-config.o
LD /tmp/build/perf-tools-next/jvmti/jvmti-in.o
LD /tmp/build/perf-tools-next/scripts/python/Perf-Trace-Util/perf-util-in.o
CC /tmp/build/perf-tools-next/tests/parse-events.o
CC /tmp/build/perf-tools-next/arch/x86/util/topdown.o
CC /tmp/build/perf-tools-next/arch/x86/tests/topdown.o
CC /tmp/build/perf-tools-next/builtin-diff.o
In file included from ui/gtk/setup.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
CC /tmp/build/perf-tools-next/tests/uncore-event-sorting.o
In file included from ui/gtk/annotate.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
In file included from ui/gtk/helpline.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
compilation terminated.
In file included from ui/gtk/browser.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
CC /tmp/build/perf-tools-next/ui/tui/setup.o
CC /tmp/build/perf-tools-next/arch/x86/util/machine.o
In file included from ui/gtk/util.c:3:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
In file included from ui/gtk/hists.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/annotate.o] Error 1
make[4]: *** Waiting for unfinished jobs....
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/browser.o] Error 1
CC /tmp/build/perf-tools-next/ui/browsers/annotate.o
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/helpline.o] Error 1
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/setup.o] Error 1
CC /tmp/build/perf-tools-next/tests/dso-data.o
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/hists.o] Error 1
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/util.o] Error 1
CC /tmp/build/perf-tools-next/arch/x86/util/event.o
CC /tmp/build/perf-tools-next/builtin-evlist.o
CC /tmp/build/perf-tools-next/ui/tui/util.o
LD /tmp/build/perf-tools-next/scripts/perf-util-in.o
CC /tmp/build/perf-tools-next/tests/vmlinux-kallsyms.o
CC /tmp/build/perf-tools-next/arch/x86/util/evlist.o
CC /tmp/build/perf-tools-next/ui/tui/helpline.o
CC /tmp/build/perf-tools-next/builtin-ftrace.o
CC /tmp/build/perf-tools-next/ui/browsers/annotate-data.o
CC /tmp/build/perf-tools-next/arch/x86/util/mem-events.o
CC /tmp/build/perf-tools-next/tests/openat-syscall.o
CC /tmp/build/perf-tools-next/ui/tui/progress.o
CC /tmp/build/perf-tools-next/builtin-help.o
CC /tmp/build/perf-tools-next/ui/browsers/hists.o
CC /tmp/build/perf-tools-next/tests/openat-syscall-all-cpus.o
CC /tmp/build/perf-tools-next/arch/x86/util/evsel.o
CC /tmp/build/perf-tools-next/builtin-buildid-list.o
CC /tmp/build/perf-tools-next/tests/openat-syscall-tp-fields.o
LD /tmp/build/perf-tools-next/arch/x86/tests/perf-test-in.o
In file included from ui/gtk/progress.c:5:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
CC /tmp/build/perf-tools-next/builtin-buildid-cache.o
CC /tmp/build/perf-tools-next/tests/mmap-basic.o
CC /tmp/build/perf-tools-next/builtin-kallsyms.o
CC /tmp/build/perf-tools-next/ui/browsers/map.o
CC /tmp/build/perf-tools-next/tests/perf-record.o
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/progress.o] Error 1
CC /tmp/build/perf-tools-next/arch/x86/util/iostat.o
CC /tmp/build/perf-tools-next/builtin-list.o
CC /tmp/build/perf-tools-next/ui/browsers/scripts.o
CC /tmp/build/perf-tools-next/tests/evsel-roundtrip-name.o
CC /tmp/build/perf-tools-next/arch/x86/util/auxtrace.o
CC /tmp/build/perf-tools-next/ui/browsers/header.o
CC /tmp/build/perf-tools-next/builtin-record.o
LD /tmp/build/perf-tools-next/arch/x86/perf-test-in.o
CC /tmp/build/perf-tools-next/tests/evsel-tp-sched.o
CC /tmp/build/perf-tools-next/arch/x86/util/intel-pt.o
CC /tmp/build/perf-tools-next/builtin-report.o
CC /tmp/build/perf-tools-next/ui/browsers/res_sample.o
CC /tmp/build/perf-tools-next/builtin-stat.o
LD /tmp/build/perf-tools-next/arch/perf-test-in.o
CC /tmp/build/perf-tools-next/arch/x86/util/intel-bts.o
CC /tmp/build/perf-tools-next/ui/browsers/c2c-function.o
CC /tmp/build/perf-tools-next/builtin-top.o
CC /tmp/build/perf-tools-next/builtin-script.o
CC /tmp/build/perf-tools-next/tests/fdarray.o
LINK /tmp/build/perf-tools-next/libperf-jvmti.so
CC /tmp/build/perf-tools-next/builtin-kvm.o
CC /tmp/build/perf-tools-next/tests/pmu.o
CC /tmp/build/perf-tools-next/builtin-inject.o
CC /tmp/build/perf-tools-next/tests/pmu-events.o
CC /tmp/build/perf-tools-next/builtin-mem.o
CC /tmp/build/perf-tools-next/tests/hists_common.o
CC /tmp/build/perf-tools-next/builtin-data.o
CC /tmp/build/perf-tools-next/builtin-version.o
LD /tmp/build/perf-tools-next/arch/x86/util/perf-util-in.o
CC /tmp/build/perf-tools-next/tests/hists_link.o
CC /tmp/build/perf-tools-next/builtin-c2c.o
CC /tmp/build/perf-tools-next/tests/hists_filter.o
make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:158: ui/gtk] Error 2
make[2]: *** [Makefile.perf:584: /tmp/build/perf-tools-next/gtk-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....
CC /tmp/build/perf-tools-next/builtin-daemon.o
On Wed, Sep 09, 2026 at 08:29:52AM -0300, Arnaldo Carvalho de Melo wrote:
> On Wed, Sep 09, 2026 at 08:25:41AM -0300, Arnaldo Carvalho de Melo wrote:
> > On Wed, Sep 09, 2026 at 08:13:07AM -0300, Arnaldo Carvalho de Melo wrote:
> > > On Tue, Sep 08, 2026 at 10:50:33PM -0400, Matt Turner wrote:
> > > > GTK2 is long dead upstream and increasingly hard to keep building on
> > > > current distros. This series ports perf's GTK-based report browser to
> > > > GTK4 and fixes it up so it's actually loadable at runtime after the
> > > > port.
> > > >
> > > > Patch 1 does the mechanical port (build system, widget API changes),
> > > > including the leftover-GTK2-call and signal-handling fixes that were a
> > > > separate patch 3 in v4. Patch 2 fixes a runtime issue found after the
> > > > port that prevented the browser from loading. Patch 3 fixes two stack
> > > > buffer overflows in the hierarchy view that predate the port.
> > >
> > > I'm tentatively merging this, will test build on my distro container set
> > > and perform some testing, thanks for working on this!
> >
> > Some fuzz applying the first patch in the series:
> >
> > ⬢ [acme@toolbx perf-tools-next]$ patch -p1 < ./v8_20260908_mattst88_perf_tools_port_ui_from_gtk2_to_gtk4.mbx
> > patching file tools/build/Makefile.feature
> > patching file tools/build/feature/Makefile
> > patching file tools/build/feature/test-gtk2-infobar.c
> > patching file tools/build/feature/test-gtk4.c (renamed from tools/build/feature/test-gtk2.c)
> > patching file tools/perf/Documentation/perf-report.txt
> > Hunk #1 succeeded at 354 with fuzz 2 (offset 3 lines).
> > patching file tools/perf/Makefile
> > patching file tools/perf/Makefile.config
> > patching file tools/perf/Makefile.perf
> > patching file tools/perf/builtin-annotate.c
> > Hunk #1 succeeded at 61 (offset 9 lines).
> > Hunk #2 succeeded at 721 (offset 9 lines).
> > Hunk #3 succeeded at 840 (offset 12 lines).
> > Hunk #4 succeeded at 910 (offset 12 lines).
> > patching file tools/perf/builtin-report.c
> > Hunk #1 succeeded at 83 (offset 1 line).
> > Hunk #2 succeeded at 1360 (offset 1 line).
> > Hunk #3 succeeded at 1714 (offset 4 lines).
> > patching file tools/perf/scripts/install-build-deps.sh
> > patching file tools/perf/tests/make
> > patching file tools/perf/ui/gtk/annotate.c
> > patching file tools/perf/ui/gtk/browser.c
> > patching file tools/perf/ui/gtk/gtk.h
> > patching file tools/perf/ui/gtk/hists.c
> > patching file tools/perf/ui/gtk/progress.c
> > patching file tools/perf/ui/gtk/setup.c
> > patching file tools/perf/ui/gtk/util.c
> > patching file tools/perf/ui/setup.c
> > ⬢ [acme@toolbx perf-tools-next]$
> >
> > I fixed it up quickly, now lets see the rest...
>
> Trying to build with it with just the first patch in this series in it
> correctly discovers that the gtk4 devel files are not available but then
> proceed to try to include gtk code and thus fail, where it should just
> do what the feature detection states: disable gtk support but build
> successfully without it, I'm checking if this is a quick surgery.
This is a pre-existing condition, if I try without your series and
without gtk2 devel files, I get the same problem, so I'll now try to
build it with the required gtk4 devel files, we can fix this
pre-existing problem afterwards, its not a regression introduced by your
series.
⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make -k GTK2=1 O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test import && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python
⬢ [acme@toolbx perf-tools-next]$ m
make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
BUILD: Doing 'make -j32' parallel build
Makefile.config:781: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev
Auto-detecting system features:
... libdw: [ on ]
... glibc: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libpython: [ on ]
... libcapstone: [ on ]
... llvm-perf: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... libopenssl: [ on ]
... rust: [ on ]
INSTALL libsubcmd_headers
INSTALL libsymbol_headers
INSTALL libperf_headers
INSTALL libapi_headers
PERF_VERSION = 7.3.rc2.g93fd7adf1a47
INSTALL libbpf_headers
GEN /tmp/build/perf-tools-next/perf-archive
GEN /tmp/build/perf-tools-next/perf-iostat
CC /tmp/build/perf-tools-next/ui/gtk/browser.o
CC /tmp/build/perf-tools-next/ui/gtk/hists.o
CC /tmp/build/perf-tools-next/ui/gtk/setup.o
CC /tmp/build/perf-tools-next/arch/common.o
CC /tmp/build/perf-tools-next/ui/gtk/util.o
CC /tmp/build/perf-tools-next/ui/setup.o
CC /tmp/build/perf-tools-next/ui/gtk/helpline.o
CC /tmp/build/perf-tools-next/ui/gtk/progress.o
CC /tmp/build/perf-tools-next/ui/gtk/annotate.o
CC /tmp/build/perf-tools-next/builtin-annotate.o
CC /tmp/build/perf-tools-next/builtin-diff.o
CC /tmp/build/perf-tools-next/ui/browsers/annotate.o
CC /tmp/build/perf-tools-next/ui/browsers/annotate-data.o
CC /tmp/build/perf-tools-next/ui/browsers/hists.o
LD /tmp/build/perf-tools-next/arch/perf-util-in.o
CC /tmp/build/perf-tools-next/builtin-record.o
In file included from ui/gtk/browser.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
In file included from ui/gtk/hists.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/browser.o] Error 1
CC /tmp/build/perf-tools-next/builtin-report.o
make[4]: *** Waiting for unfinished jobs....
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/hists.o] Error 1
LINK /tmp/build/perf-tools-next/libperf-jvmti.so
In file included from ui/gtk/setup.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
In file included from ui/gtk/util.c:3:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
In file included from ui/gtk/helpline.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/util.o] Error 1
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/setup.o] Error 1
CC /tmp/build/perf-tools-next/builtin-stat.o
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/helpline.o] Error 1
CC /tmp/build/perf-tools-next/builtin-top.o
LD /tmp/build/perf-tools-next/ui/browsers/perf-ui-in.o
CC /tmp/build/perf-tools-next/builtin-script.o
CC /tmp/build/perf-tools-next/builtin-kvm.o
In file included from ui/gtk/progress.c:4:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/progress.o] Error 1
In file included from ui/gtk/annotate.c:2:
ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
8 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/annotate.o] Error 1
make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:158: ui/gtk] Error 2
make[2]: *** [Makefile.perf:584: /tmp/build/perf-tools-next/gtk-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....
LD /tmp/build/perf-tools-next/ui/perf-ui-in.o
> - Arnaldo
>
> ⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make -k GTK4=1 O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test import && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python
> ⬢ [acme@toolbx perf-tools-next]$ m
> make: Entering directory '/home/acme/git/perf-tools-next/tools/perf'
> BUILD: Doing 'make -j32' parallel build
> Makefile.config:781: GTK4 not found, disables GTK4 support. Please install gtk4-devel or libgtk-4-dev
>
> Auto-detecting system features:
> ... libdw: [ on ]
> ... glibc: [ on ]
> ... gtk4: [ OFF ]
> ... libelf: [ on ]
> ... libnuma: [ on ]
> ... numa_num_possible_cpus: [ on ]
> ... libpython: [ on ]
> ... libcapstone: [ on ]
> ... llvm-perf: [ on ]
> ... zlib: [ on ]
> ... lzma: [ on ]
> ... bpf: [ on ]
> ... libaio: [ on ]
> ... libzstd: [ on ]
> ... libopenssl: [ on ]
> ... rust: [ on ]
>
> INSTALL libsubcmd_headers
> INSTALL libsymbol_headers
> INSTALL libapi_headers
> INSTALL libperf_headers
> CC /tmp/build/perf-tools-next/libperf/core.o
> CC /tmp/build/perf-tools-next/libperf/cpumap.o
> CC /tmp/build/perf-tools-next/libperf/threadmap.o
> CC /tmp/build/perf-tools-next/libperf/evsel.o
> CC /tmp/build/perf-tools-next/libsubcmd/exec-cmd.o
> CC /tmp/build/perf-tools-next/libperf/evlist.o
> CC /tmp/build/perf-tools-next/libperf/mmap.o
> INSTALL libbpf_headers
> CC /tmp/build/perf-tools-next/libsubcmd/help.o
> CC /tmp/build/perf-tools-next/libperf/zalloc.o
> CC /tmp/build/perf-tools-next/libsubcmd/pager.o
> CC /tmp/build/perf-tools-next/libperf/xyarray.o
> CC /tmp/build/perf-tools-next/libsubcmd/parse-options.o
> CC /tmp/build/perf-tools-next/libperf/lib.o
> CC /tmp/build/perf-tools-next/libsubcmd/run-command.o
> CC /tmp/build/perf-tools-next/libsubcmd/sigchain.o
> CC /tmp/build/perf-tools-next/libsubcmd/subcmd-config.o
> LD /tmp/build/perf-tools-next/libsubcmd/libsubcmd-in.o
> AR /tmp/build/perf-tools-next/libsubcmd/libsubcmd.a
> LD /tmp/build/perf-tools-next/libperf/libperf-in.o
> AR /tmp/build/perf-tools-next/libperf/libperf.a
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> CC /tmp/build/perf-tools-next/jvmti/libjvmti.o
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> CC /tmp/build/perf-tools-next/trace/beauty/syscalltbl.o
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> CC /tmp/build/perf-tools-next/arch/common.o
> CC /tmp/build/perf-tools-next/jvmti/jvmti_agent.o
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> CC /tmp/build/perf-tools-next/trace/beauty/arch_errno_names.o
> CC /tmp/build/perf-tools-next/ui/setup.o
> CC /tmp/build/perf-tools-next/jvmti/libstring.o
> MKDIR /tmp/build/perf-tools-next/ui/gtk/
> CC /tmp/build/perf-tools-next/ui/helpline.o
> CC /tmp/build/perf-tools-next/jvmti/libctype.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/regs_load.o
> CC /tmp/build/perf-tools-next/ui/gtk/browser.o
> CC /tmp/build/perf-tools-next/ui/gtk/hists.o
> CC /tmp/build/perf-tools-next/ui/gtk/setup.o
> CC /tmp/build/perf-tools-next/ui/gtk/annotate.o
> CC /tmp/build/perf-tools-next/ui/progress.o
> CC /tmp/build/perf-tools-next/scripts/python/Perf-Trace-Util/Context.o
> CC /tmp/build/perf-tools-next/ui/gtk/util.o
> CC /tmp/build/perf-tools-next/ui/util.o
> CC /tmp/build/perf-tools-next/ui/gtk/helpline.o
> CC /tmp/build/perf-tools-next/ui/gtk/zalloc.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/dwarf-unwind.o
> CC /tmp/build/perf-tools-next/ui/gtk/progress.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/arch-tests.o
> CC /tmp/build/perf-tools-next/ui/hist.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/hybrid.o
> CC /tmp/build/perf-tools-next/builtin-annotate.o
> CC /tmp/build/perf-tools-next/arch/x86/util/header.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/intel-pt-test.o
> CC /tmp/build/perf-tools-next/ui/stdio/hist.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/bp-modify.o
> CC /tmp/build/perf-tools-next/ui/browser.o
> CC /tmp/build/perf-tools-next/tests/builtin-test.o
> CC /tmp/build/perf-tools-next/ui/keysyms.o
> CC /tmp/build/perf-tools-next/arch/x86/util/tsc.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/amd-ibs-via-core-pmu.o
> CC /tmp/build/perf-tools-next/tests/tests-scripts.o
> CC /tmp/build/perf-tools-next/builtin-check.o
> LD /tmp/build/perf-tools-next/trace/beauty/perf-util-in.o
> CC /tmp/build/perf-tools-next/arch/x86/util/pmu.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/amd-ibs-period.o
> CC /tmp/build/perf-tools-next/builtin-config.o
> LD /tmp/build/perf-tools-next/jvmti/jvmti-in.o
> LD /tmp/build/perf-tools-next/scripts/python/Perf-Trace-Util/perf-util-in.o
> CC /tmp/build/perf-tools-next/tests/parse-events.o
> CC /tmp/build/perf-tools-next/arch/x86/util/topdown.o
> CC /tmp/build/perf-tools-next/arch/x86/tests/topdown.o
> CC /tmp/build/perf-tools-next/builtin-diff.o
> In file included from ui/gtk/setup.c:2:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> CC /tmp/build/perf-tools-next/tests/uncore-event-sorting.o
> In file included from ui/gtk/annotate.c:2:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> In file included from ui/gtk/helpline.c:2:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> compilation terminated.
> In file included from ui/gtk/browser.c:2:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> CC /tmp/build/perf-tools-next/ui/tui/setup.o
> CC /tmp/build/perf-tools-next/arch/x86/util/machine.o
> In file included from ui/gtk/util.c:3:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> In file included from ui/gtk/hists.c:2:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/annotate.o] Error 1
> make[4]: *** Waiting for unfinished jobs....
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/browser.o] Error 1
> CC /tmp/build/perf-tools-next/ui/browsers/annotate.o
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/helpline.o] Error 1
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/setup.o] Error 1
> CC /tmp/build/perf-tools-next/tests/dso-data.o
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/hists.o] Error 1
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/util.o] Error 1
> CC /tmp/build/perf-tools-next/arch/x86/util/event.o
> CC /tmp/build/perf-tools-next/builtin-evlist.o
> CC /tmp/build/perf-tools-next/ui/tui/util.o
> LD /tmp/build/perf-tools-next/scripts/perf-util-in.o
> CC /tmp/build/perf-tools-next/tests/vmlinux-kallsyms.o
> CC /tmp/build/perf-tools-next/arch/x86/util/evlist.o
> CC /tmp/build/perf-tools-next/ui/tui/helpline.o
> CC /tmp/build/perf-tools-next/builtin-ftrace.o
> CC /tmp/build/perf-tools-next/ui/browsers/annotate-data.o
> CC /tmp/build/perf-tools-next/arch/x86/util/mem-events.o
> CC /tmp/build/perf-tools-next/tests/openat-syscall.o
> CC /tmp/build/perf-tools-next/ui/tui/progress.o
> CC /tmp/build/perf-tools-next/builtin-help.o
> CC /tmp/build/perf-tools-next/ui/browsers/hists.o
> CC /tmp/build/perf-tools-next/tests/openat-syscall-all-cpus.o
> CC /tmp/build/perf-tools-next/arch/x86/util/evsel.o
> CC /tmp/build/perf-tools-next/builtin-buildid-list.o
> CC /tmp/build/perf-tools-next/tests/openat-syscall-tp-fields.o
> LD /tmp/build/perf-tools-next/arch/x86/tests/perf-test-in.o
> In file included from ui/gtk/progress.c:5:
> ui/gtk/gtk.h:8:10: fatal error: gtk/gtk.h: No such file or directory
> 8 | #include <gtk/gtk.h>
> | ^~~~~~~~~~~
> compilation terminated.
> CC /tmp/build/perf-tools-next/builtin-buildid-cache.o
> CC /tmp/build/perf-tools-next/tests/mmap-basic.o
> CC /tmp/build/perf-tools-next/builtin-kallsyms.o
> CC /tmp/build/perf-tools-next/ui/browsers/map.o
> CC /tmp/build/perf-tools-next/tests/perf-record.o
> make[4]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:96: /tmp/build/perf-tools-next/ui/gtk/progress.o] Error 1
> CC /tmp/build/perf-tools-next/arch/x86/util/iostat.o
> CC /tmp/build/perf-tools-next/builtin-list.o
> CC /tmp/build/perf-tools-next/ui/browsers/scripts.o
> CC /tmp/build/perf-tools-next/tests/evsel-roundtrip-name.o
> CC /tmp/build/perf-tools-next/arch/x86/util/auxtrace.o
> CC /tmp/build/perf-tools-next/ui/browsers/header.o
> CC /tmp/build/perf-tools-next/builtin-record.o
> LD /tmp/build/perf-tools-next/arch/x86/perf-test-in.o
> CC /tmp/build/perf-tools-next/tests/evsel-tp-sched.o
> CC /tmp/build/perf-tools-next/arch/x86/util/intel-pt.o
> CC /tmp/build/perf-tools-next/builtin-report.o
> CC /tmp/build/perf-tools-next/ui/browsers/res_sample.o
> CC /tmp/build/perf-tools-next/builtin-stat.o
> LD /tmp/build/perf-tools-next/arch/perf-test-in.o
> CC /tmp/build/perf-tools-next/arch/x86/util/intel-bts.o
> CC /tmp/build/perf-tools-next/ui/browsers/c2c-function.o
> CC /tmp/build/perf-tools-next/builtin-top.o
> CC /tmp/build/perf-tools-next/builtin-script.o
> CC /tmp/build/perf-tools-next/tests/fdarray.o
> LINK /tmp/build/perf-tools-next/libperf-jvmti.so
> CC /tmp/build/perf-tools-next/builtin-kvm.o
> CC /tmp/build/perf-tools-next/tests/pmu.o
> CC /tmp/build/perf-tools-next/builtin-inject.o
> CC /tmp/build/perf-tools-next/tests/pmu-events.o
> CC /tmp/build/perf-tools-next/builtin-mem.o
> CC /tmp/build/perf-tools-next/tests/hists_common.o
> CC /tmp/build/perf-tools-next/builtin-data.o
> CC /tmp/build/perf-tools-next/builtin-version.o
> LD /tmp/build/perf-tools-next/arch/x86/util/perf-util-in.o
> CC /tmp/build/perf-tools-next/tests/hists_link.o
> CC /tmp/build/perf-tools-next/builtin-c2c.o
> CC /tmp/build/perf-tools-next/tests/hists_filter.o
> make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:158: ui/gtk] Error 2
> make[2]: *** [Makefile.perf:584: /tmp/build/perf-tools-next/gtk-in.o] Error 2
> make[2]: *** Waiting for unfinished jobs....
> CC /tmp/build/perf-tools-next/builtin-daemon.o
>
On Wed, Sep 09, 2026 at 08:35:20AM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Sep 09, 2026 at 08:29:52AM -0300, Arnaldo Carvalho de Melo wrote: > > On Wed, Sep 09, 2026 at 08:25:41AM -0300, Arnaldo Carvalho de Melo wrote: > > > patching file tools/perf/ui/setup.c > > > ⬢ [acme@toolbx perf-tools-next]$ > > > > > > I fixed it up quickly, now lets see the rest... > > > > Trying to build with it with just the first patch in this series in it > > correctly discovers that the gtk4 devel files are not available but then > > proceed to try to include gtk code and thus fail, where it should just > > do what the feature detection states: disable gtk support but build > > successfully without it, I'm checking if this is a quick surgery. > > This is a pre-existing condition, if I try without your series and > without gtk2 devel files, I get the same problem, so I'll now try to > build it with the required gtk4 devel files, we can fix this > pre-existing problem afterwards, its not a regression introduced by your > series. Now, with GTK4=1 and trying to build the first patch after installing gtk4-devel on fedora 43 it fails to detect gtk4 support: ⬢ [acme@toolbx perf-tools-next]$ m make: Entering directory '/home/acme/git/perf-tools-next/tools/perf' BUILD: Doing 'make -j32' parallel build Auto-detecting system features: ... libdw: [ on ] ... glibc: [ on ] ... gtk4: [ OFF ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libpython: [ on ] ... libcapstone: [ on ] ... llvm-perf: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... libopenssl: [ on ] ... rust: [ on ] And: ⬢ [acme@toolbx perf-tools-next]$ cat /tmp/build/perf-tools-next/feature/test-gtk4.make.output cat: /tmp/build/perf-tools-next/feature/test-gtk4.make.output: No such file or directory ⬢ [acme@toolbx perf-tools-next]$ ls -la /tmp/build/perf-tools-next/feature/test-gtk4* ls: cannot access '/tmp/build/perf-tools-next/feature/test-gtk4*': No such file or directory ⬢ [acme@toolbx perf-tools-next]$ cat /tmp/build/perf-tools-next/feature/test-all.make.output ⬢ [acme@toolbx perf-tools-next]$ ldd /tmp/build/perf-tools-next/feature/test-all. test-all.bin test-all.d test-all.make.output ⬢ [acme@toolbx perf-tools-next]$ ldd /tmp/build/perf-tools-next/feature/test-all.bin linux-vdso.so.1 (0x00007f271bb90000) libdw.so.1 => /lib64/libdw.so.1 (0x00007f271bae1000) libpython3.14.so.1.0 => /lib64/libpython3.14.so.1.0 (0x00007f271b4a7000) libm.so.6 => /lib64/libm.so.6 (0x00007f271b3b2000) libtraceevent.so.1 => /lib64/libtraceevent.so.1 (0x00007f271b391000) libelf.so.1 => /lib64/libelf.so.1 (0x00007f271b374000) libnuma.so.1 => /lib64/libnuma.so.1 (0x00007f271b366000) libslang.so.2 => /lib64/libslang.so.2 (0x00007f271b072000) libz.so.1 => /lib64/libz.so.1 (0x00007f271b04a000) liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f271b015000) libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f271af52000) libssl.so.3 => /lib64/libssl.so.3 (0x00007f271ae67000) libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007f271a925000) libc.so.6 => /lib64/libc.so.6 (0x00007f271a731000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f271a71d000) /lib64/ld-linux-x86-64.so.2 (0x00007f271bb92000) ⬢ [acme@toolbx perf-tools-next]$ Meaning its feature detection isn't being called at all, remains at undetected: ⬢ [acme@toolbx perf-tools-next]$ grep gtk4 /tmp/build/perf-tools-next/FEATURE-DUMP ⬢ [acme@toolbx perf-tools-next]$ Probably this is pre-existing, but I wonder how you managed to test then? - Arnaldo
On Wed, Sep 09, 2026 at 08:43:20AM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Sep 09, 2026 at 08:35:20AM -0300, Arnaldo Carvalho de Melo wrote: > > On Wed, Sep 09, 2026 at 08:29:52AM -0300, Arnaldo Carvalho de Melo wrote: > > > On Wed, Sep 09, 2026 at 08:25:41AM -0300, Arnaldo Carvalho de Melo wrote: > > > > patching file tools/perf/ui/setup.c > > > > ⬢ [acme@toolbx perf-tools-next]$ > > > > > > > > I fixed it up quickly, now lets see the rest... > > > > > > Trying to build with it with just the first patch in this series in it > > > correctly discovers that the gtk4 devel files are not available but then > > > proceed to try to include gtk code and thus fail, where it should just > > > do what the feature detection states: disable gtk support but build > > > successfully without it, I'm checking if this is a quick surgery. > > > > This is a pre-existing condition, if I try without your series and > > without gtk2 devel files, I get the same problem, so I'll now try to > > build it with the required gtk4 devel files, we can fix this > > pre-existing problem afterwards, its not a regression introduced by your > > series. > > Now, with GTK4=1 and trying to build the first patch after installing > gtk4-devel on fedora 43 it fails to detect gtk4 support: > > ⬢ [acme@toolbx perf-tools-next]$ m > make: Entering directory '/home/acme/git/perf-tools-next/tools/perf' > BUILD: Doing 'make -j32' parallel build > > Auto-detecting system features: > ... libdw: [ on ] > ... glibc: [ on ] > ... gtk4: [ OFF ] > ... libelf: [ on ] > ... libnuma: [ on ] I see, you do it with tools/perf being your cwd, I tried that and it works now: ⬢ [acme@toolbx perf-tools-next]$ cd tools/perf/ ⬢ [acme@toolbx perf]$ make GTK4=1 BUILD: Doing 'make -j32' parallel build Auto-detecting system features: ... libdw: [ on ] ... glibc: [ on ] ... gtk4: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libpython: [ on ] ... libcapstone: [ on ] ... llvm-perf: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... libopenssl: [ on ] ... rust: [ on ] INSTALL libsubcmd_headers INSTALL libapi_headers PERF_VERSION = 7.3.rc2.g581f81a14c5c INSTALL libsymbol_headers GEN perf-archive INSTALL libperf_headers GEN perf-iostat CC /home/acme/git/perf-tools-next/tools/perf/libperf/core.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/cpumap.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/threadmap.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/evsel.o INSTALL libbpf_headers CC /home/acme/git/perf-tools-next/tools/perf/libperf/evlist.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/mmap.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/zalloc.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/xyarray.o CC /home/acme/git/perf-tools-next/tools/perf/libperf/lib.o LD /home/acme/git/perf-tools-next/tools/perf/libperf/libperf-in.o AR /home/acme/git/perf-tools-next/tools/perf/libperf/libperf.a CC ui/gtk/browser.o CC jvmti/libjvmti.o CC ui/gtk/hists.o CC arch/common.o CC ui/gtk/setup.o CC trace/beauty/syscalltbl.o CC ui/gtk/util.o CC jvmti/jvmti_agent.o CC ui/gtk/helpline.o CC trace/beauty/arch_errno_names.o CC jvmti/libstring.o CC ui/gtk/progress.o CC jvmti/libctype.o CC ui/gtk/annotate.o <SNIP> LD perf-bench-in.o AR libperf-bench.a LINK perf LINK libperf-gtk.so ⬢ [acme@toolbx perf]$ I don't think this was present before, lemme try... My bad, I made a mistake and was trying to build with gtk4 while using GTK2=1 on the make command line, that I had switched to test building with gtk2 for that pre-existing problem and forgot to switch back to GTK4=1 when returning to test your patches... Now, with it it works as expected, using 'make GTK4=1 -C tools/perf', building the first patch: ⬢ [acme@toolbx perf-tools-next]$ rm -rf /tmp/build/`basename $PWD` ; mkdir -p /tmp/build/`basename $PWD` ⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make -k GTK4=1 O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test import && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python ⬢ [acme@toolbx perf-tools-next]$ m make: Entering directory '/home/acme/git/perf-tools-next/tools/perf' BUILD: Doing 'make -j32' parallel build Auto-detecting system features: ... libdw: [ on ] ... glibc: [ on ] ... gtk4: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libpython: [ on ] ... libcapstone: [ on ] ... llvm-perf: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... libopenssl: [ on ] ... rust: [ on ] CC /tmp/build/perf-tools-next/dlfilters/dlfilter-test-api-v0.o CC /tmp/build/perf-tools-next/dlfilters/dlfilter-test-api-v2.o CC /tmp/build/perf-tools-next/dlfilters/dlfilter-show-cycles.o GEN /tmp/build/perf-tools-next/arch/arm64/include/generated/asm/sysreg-defs.h <SNIP> LINK /tmp/build/perf-tools-next/perf LINK /tmp/build/perf-tools-next/libperf-gtk.so GEN /tmp/build/perf-tools-next/python/perf.cpython-314-x86_64-linux-gnu.so INSTALL GTK UI INSTALL binaries INSTALL tests INSTALL libperf-jvmti.so INSTALL libexec INSTALL perf-archive INSTALL perf-iostat INSTALL python-scripts install: omitting directory 'scripts/python/Perf-Trace-Util/lib/Perf/Trace/__pycache__' INSTALL dlfilters INSTALL perf_completion-script INSTALL perf-tip make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf' 104: 'import perf' in python : Ok === Test Summary === Passed main tests : 1 Passed subtests : 0 Skipped tests : 0 Failed tests : 0 ⬢ [acme@toolbx perf-tools-next]$ And, which makes me recall why we made t his a plugin :-) ⬢ [acme@toolbx perf-tools-next]$ ldd /tmp/build/perf-tools-next/libperf-gtk.so linux-vdso.so.1 (0x00007f8588fb8000) libgtk-4.so.1 => /lib64/libgtk-4.so.1 (0x00007f858854c000) libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007f8588539000) libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f85884cd000) libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f8588399000) libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0 (0x00007f858836b000) libcairo-gobject.so.2 => /lib64/libcairo-gobject.so.2 (0x00007f8588362000) libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f8588222000) libvulkan.so.1 => /lib64/libvulkan.so.1 (0x00007f858819a000) libgraphene-1.0.so.0 => /lib64/libgraphene-1.0.so.0 (0x00007f858817d000) libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f8587faa000) libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f8587f4b000) libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f8587df4000) libc.so.6 => /lib64/libc.so.6 (0x00007f8587c00000) libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f8587bfa000) libharfbuzz-subset.so.0 => /lib64/libharfbuzz-subset.so.0 (0x00007f8587ac5000) libfribidi.so.0 => /lib64/libfribidi.so.0 (0x00007f8587aa5000) libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f8587a55000) libepoxy.so.0 => /lib64/libepoxy.so.0 (0x00007f8587949000) libm.so.6 => /lib64/libm.so.6 (0x00007f8587852000) libgstplay-1.0.so.0 => /lib64/libgstplay-1.0.so.0 (0x00007f858782e000) libgstvideo-1.0.so.0 => /lib64/libgstvideo-1.0.so.0 (0x00007f8587759000) libgstreamer-1.0.so.0 => /lib64/libgstreamer-1.0.so.0 (0x00007f8587600000) libgstgl-1.0.so.0 => /lib64/libgstgl-1.0.so.0 (0x00007f858756d000) libgstallocators-1.0.so.0 => /lib64/libgstallocators-1.0.so.0 (0x00007f8587564000) librsvg-2.so.2 => /lib64/librsvg-2.so.2 (0x00007f85870a0000) libXi.so.6 => /lib64/libXi.so.6 (0x00007f858708d000) libX11.so.6 => /lib64/libX11.so.6 (0x00007f8586f48000) libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f8586f2c000) libtinysparql-3.0.so.0 => /lib64/libtinysparql-3.0.so.0 (0x00007f8586e58000) libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f8586e1c000) libtiff.so.6 => /lib64/libtiff.so.6 (0x00007f8586d83000) libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007f8586ce1000) libxkbcommon.so.0 => /lib64/libxkbcommon.so.0 (0x00007f8586c88000) libwayland-client.so.0 => /lib64/libwayland-client.so.0 (0x00007f8586c78000) libwayland-egl.so.1 => /lib64/libwayland-egl.so.1 (0x00007f8586c74000) libXext.so.6 => /lib64/libXext.so.6 (0x00007f8586c60000) libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f8586c51000) libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f8586c4d000) libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f8586c46000) libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f8586c39000) libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f8586c35000) libcairo-script-interpreter.so.2 => /lib64/libcairo-script-interpreter.so.2 (0x00007f8586c12000) libcups.so.2 => /lib64/libcups.so.2 (0x00007f8586b7c000) libcolord.so.2 => /lib64/libcolord.so.2 (0x00007f8586b21000) libthai.so.0 => /lib64/libthai.so.0 (0x00007f8586b16000) libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007f8586a4c000) libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f8586a2d000) libglycin-2.so.0 => /lib64/libglycin-2.so.0 (0x00007f858660b000) libz.so.1 => /lib64/libz.so.1 (0x00007f85865e3000) libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f85865d7000) libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f85865ad000) libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f858659e000) libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f858659a000) libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f85864e9000) libmount.so.1 => /lib64/libmount.so.1 (0x00007f8586493000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f8586462000) libffi.so.8 => /lib64/libffi.so.8 (0x00007f8586452000) libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f85863a5000) /lib64/ld-linux-x86-64.so.2 (0x00007f8588fba000) libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f8586245000) libgsttag-1.0.so.0 => /lib64/libgsttag-1.0.so.0 (0x00007f8586206000) libgstpbutils-1.0.so.0 => /lib64/libgstpbutils-1.0.so.0 (0x00007f85861c1000) libgstbase-1.0.so.0 => /lib64/libgstbase-1.0.so.0 (0x00007f858613d000) liborc-0.4.so.0 => /lib64/liborc-0.4.so.0 (0x00007f8586099000) libunwind.so.8 => /lib64/libunwind.so.8 (0x00007f858607c000) libdw.so.1 => /lib64/libdw.so.1 (0x00007f8585fdf000) libEGL.so.1 => /lib64/libEGL.so.1 (0x00007f8585fce000) libGLX.so.0 => /lib64/libGLX.so.0 (0x00007f8585f9d000) libwayland-cursor.so.0 => /lib64/libwayland-cursor.so.0 (0x00007f8585f93000) libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007f8585f8f000) libgudev-1.0.so.0 => /lib64/libgudev-1.0.so.0 (0x00007f8585f80000) libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f8585f69000) libgbm.so.1 => /lib64/libgbm.so.1 (0x00007f8585f63000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f8585f37000) libdav1d.so.7 => /lib64/libdav1d.so.7 (0x00007f8585d53000) libjson-glib-1.0.so.0 => /lib64/libjson-glib-1.0.so.0 (0x00007f8585d26000) libsqlite3.so.0 => /lib64/libsqlite3.so.0 (0x00007f8585bac000) libwebp.so.7 => /lib64/libwebp.so.7 (0x00007f8585b26000) libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f8585a63000) libLerc.so.4 => /lib64/libLerc.so.4 (0x00007f85859ce000) libjbig.so.2.1 => /lib64/libjbig.so.2.1 (0x00007f85859c0000) liblzo2.so.2 => /lib64/liblzo2.so.2 (0x00007f8585998000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f8585941000) libavahi-common.so.3 => /lib64/libavahi-common.so.3 (0x00007f8585932000) libavahi-client.so.3 => /lib64/libavahi-client.so.3 (0x00007f858591e000) libgnutls.so.30 => /lib64/libgnutls.so.30 (0x00007f8585679000) liblcms2.so.2 => /lib64/liblcms2.so.2 (0x00007f858560f000) libudev.so.1 => /lib64/libudev.so.1 (0x00007f85855c5000) libdatrie.so.1 => /lib64/libdatrie.so.1 (0x00007f85855bd000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f85855a9000) libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x00007f858559b000) libseccomp.so.2 => /lib64/libseccomp.so.2 (0x00007f858556f000) libXau.so.6 => /lib64/libXau.so.6 (0x00007f858556a000) libblkid.so.1 => /lib64/libblkid.so.1 (0x00007f8585530000) liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f85854fb000) libgstaudio-1.0.so.0 => /lib64/libgstaudio-1.0.so.0 (0x00007f8585476000) libelf.so.1 => /lib64/libelf.so.1 (0x00007f8585457000) libGLdispatch.so.0 => /lib64/libGLdispatch.so.0 (0x00007f85853df000) libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f85853b4000) libsharpyuv.so.0 => /lib64/libsharpyuv.so.0 (0x00007f85853ac000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f8585134000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f8585067000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f858504f000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f8585049000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f8585039000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f8585033000) libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007f8584af1000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f8584adc000) libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f8584a88000) libp11-kit.so.0 => /lib64/libp11-kit.so.0 (0x00007f85848fb000) libidn2.so.0 => /lib64/libidn2.so.0 (0x00007f85848ab000) libunistring.so.5 => /lib64/libunistring.so.5 (0x00007f85846fe000) libtasn1.so.6 => /lib64/libtasn1.so.6 (0x00007f85846e6000) libhogweed.so.6 => /lib64/libhogweed.so.6 (0x00007f85846a3000) libnettle.so.8 => /lib64/libnettle.so.8 (0x00007f858464d000) libgmp.so.10 => /lib64/libgmp.so.10 (0x00007f85845a6000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f858459a000) libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x00007f8584577000) libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f858444d000) ⬢ [acme@toolbx perf-tools-next]$
On Wed, Sep 09, 2026 at 08:52:48AM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Sep 09, 2026 at 08:43:20AM -0300, Arnaldo Carvalho de Melo wrote: > > On Wed, Sep 09, 2026 at 08:35:20AM -0300, Arnaldo Carvalho de Melo wrote: > > Now, with GTK4=1 and trying to build the first patch after installing > > gtk4-devel on fedora 43 it fails to detect gtk4 support: > > > > ⬢ [acme@toolbx perf-tools-next]$ m > > make: Entering directory '/home/acme/git/perf-tools-next/tools/perf' > > BUILD: Doing 'make -j32' parallel build > > > > Auto-detecting system features: > > ... libdw: [ on ] > > ... glibc: [ on ] > > ... gtk4: [ OFF ] I removed gtk4 from FEATURES_DISPLAY, as it is opt-in, no point in telling most of the time it is OFF, when developing one can use 'make VF=1' to see if it was detected: ⬢ [acme@toolbx perf-tools-next]$ alias m='rm -rf ~/libexec/perf-core/ ; make VF=1 CORESIGHT=1 -k O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin && perf test import && cat /tmp/build/$(basename $PWD)/feature/test-all.make.output' ; export PYTHONPATH=/tmp/build/$(basename $PWD)/python ⬢ [acme@toolbx perf-tools-next]$ m make: Entering directory '/home/acme/git/perf-tools-next/tools/perf' BUILD: Doing 'make -j32' parallel build Auto-detecting system features: ... libdw: [ on ] ... glibc: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libpython: [ on ] ... libcapstone: [ on ] ... llvm-perf: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... libopenssl: [ on ] ... rust: [ on ] ... backtrace: [ on ] ... eventfd: [ on ] ... fortify-source: [ on ] ... gettid: [ on ] ... libbfd: [ on ] ... libbfd-threadsafe: [ on ] ... libelf-getphdrnum: [ on ] ... libelf-gelf_getnote: [ on ] ... libelf-getshdrstrndx: [ on ] ... libelf-zstd: [ on ] ... libslang: [ on ] ... libtraceevent: [ on ] ... libcpupower: [ on ] ... pthread-attr-setaffinity-np: [ on ] ... pthread-barrier: [ on ] ... reallocarray: [ on ] ... stackprotector-all: [ on ] ... timerfd: [ on ] ... scandirat: [ on ] ... sched_getcpu: [ on ] ... sdt: [ on ] ... setns: [ on ] ... disassembler-four-args: [ on ] ... disassembler-init-styled: [ on ] ... file-handle: [ on ] ... bionic: [ OFF ] ... compile-32: [ OFF ] ... compile-x32: [ OFF ] ... cplus-demangle: [ OFF ] ... cxa-demangle: [ on ] ... gtk4: [ OFF ] ... hello: [ OFF ] ... babeltrace2-ctf-writer: [ on ] ... libcapstone: [ on ] ... libcheck: [ OFF ] ... libbfd-liberty: [ OFF ] ... libbfd-liberty-z: [ OFF ] ... libopencsd: [ on ] ... libperl: [ OFF ] ... llvm: [ OFF ] ... libbpf: [ OFF ] ... libpfm4: [ on ] ... libdebuginfod: [ on ] ... clang-bpf-co-re: [ on ] ... bpftool-skeletons: [ OFF ] ... libunwind: [ OFF ] ... libunwind-debug-frame: [ OFF ] ... libunwind-aarch64: [ OFF ] ... libunwind-debug-frame-aarch64: [ OFF ] ... libunwind-arm: [ OFF ] ... libunwind-debug-frame-arm: [ OFF ] ... libunwind-loongarch64: [ OFF ] ... libunwind-debug-frame-loongarch64: [ OFF ] ... libunwind-mips: [ OFF ] ... libunwind-debug-frame-mips: [ OFF ] ... libunwind-ppc32: [ OFF ] ... libunwind-debug-frame-ppc32: [ OFF ] ... libunwind-ppc64: [ OFF ] ... libunwind-debug-frame-ppc64: [ OFF ] ... libunwind-riscv: [ OFF ] ... libunwind-debug-frame-riscv: [ OFF ] ... libunwind-s390x: [ OFF ] ... libunwind-debug-frame-s390x: [ OFF ] ... libunwind-x86: [ OFF ] ... libunwind-debug-frame-x86: [ OFF ] ... libunwind-x86_64: [ OFF ] ... libunwind-debug-frame-x86_64: [ OFF ] ... prefix: /home/acme ... bindir: /home/acme/bin ... libdir: /home/acme/lib64 ... sysconfdir: /home/acme/etc ... LIBUNWIND_DIR: ... LIBDW_DIR: ... JDIR: /usr/lib/jvm/java-latest-openjdk ... DWARF post unwind library: libdw - Arnaldo
© 2016 - 2026 Red Hat, Inc.