[PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4

Matt Turner posted 3 patches 2 weeks, 2 days ago
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(-)
[PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Matt Turner 2 weeks, 2 days ago
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>
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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>
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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

Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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
> 
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 2 days ago
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]$


Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Arnaldo Carvalho de Melo 2 weeks, 1 day ago
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
Re: [PATCH v8 0/3] perf tools: port UI from GTK2 to GTK4
Posted by Ian Rogers 4 days, 1 hour ago
It looks like tools/perf/Makefile.perf is missing something in the
clean target to remove libperf-gtk.so.

Thanks,
Ian