commit:     b68130a395dda5d00c8d558349a5a3f85ff738b0
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 28 06:15:48 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Oct 28 06:36:29 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b68130a3

sys-process/latencytop: fix build with Clang

- Fix build with Clang 16 (-Wimplicit-int)
- EAPI 8
- Respect CC, PKG_CONFIG
- Respect CPPFLAGS

Closes: https://bugs.gentoo.org/742419
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/latencytop-0.5-Fix-Wimplicit-int.patch   |  16 +
 .../files/latencytop-0.5-fsync-drop.patch          | 460 +++++++++++++++++++++
 .../latencytop-0.5-fsync-fix-implicit-decl.patch   |  28 --
 ...ytop-0.5-r2.ebuild => latencytop-0.5-r3.ebuild} |  31 +-
 4 files changed, 493 insertions(+), 42 deletions(-)

diff --git 
a/sys-process/latencytop/files/latencytop-0.5-Fix-Wimplicit-int.patch 
b/sys-process/latencytop/files/latencytop-0.5-Fix-Wimplicit-int.patch
new file mode 100644
index 000000000000..de57cdf7d42e
--- /dev/null
+++ b/sys-process/latencytop/files/latencytop-0.5-Fix-Wimplicit-int.patch
@@ -0,0 +1,16 @@
+From 709d3927d54d7f379aa663f6be1ca1dc507d5346 Mon Sep 17 00:00:00 2001
+From: Sam James <s...@gentoo.org>
+Date: Fri, 28 Oct 2022 07:11:10 +0100
+Subject: [PATCH] Fix -Wimplicit-int
+
+--- a/gtk_display.c
++++ b/gtk_display.c
+@@ -594,7 +594,7 @@ static void create_targets_window(void)
+                        G_CALLBACK(freeze_toggled), NULL);
+ }
+ 
+-static load_icons(void)
++static void load_icons(void)
+ {
+       GError *err;
+ 

diff --git a/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch 
b/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch
new file mode 100644
index 000000000000..ad7bda8f949d
--- /dev/null
+++ b/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch
@@ -0,0 +1,460 @@
+https://src.fedoraproject.org/rpms/latencytop/blob/rawhide/f/latencytop-remove-the-fsync-view.patch
+https://bugs.gentoo.org/742419
+
+From a4a1eb20492773d48bd83087157149c5fb9a257a Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschm...@redhat.com>
+Date: Wed, 15 Feb 2012 23:44:18 +0100
+Subject: [PATCH 1/2] remove the fsync view
+
+The fsync tracer it depends on was never merged in the kernel.
+It also uses 'tracing_enable' which triggers deprecation warnings in the
+kernel.
+--- a/Makefile
++++ b/Makefile
+@@ -6,7 +6,7 @@ SBINDIR = /usr/sbin
+ XCFLAGS = -W  -g `pkg-config --cflags glib-2.0` -D_FORTIFY_SOURCE=2 
-Wno-sign-compare
+ LDF = -Wl,--as-needed `pkg-config --libs glib-2.0`   -lncursesw 
+ 
+-OBJS= latencytop.o text_display.o translate.o fsync.o
++OBJS= latencytop.o text_display.o translate.o
+ 
+ ifdef HAS_GTK_GUI
+   XCFLAGS += `pkg-config --cflags gtk+-2.0` -DHAS_GTK_GUI
+--- a/fsync.c
++++ /dev/null
+@@ -1,369 +0,0 @@
+-/*
+- * Copyright 2008, Intel Corporation
+- *
+- * This file is part of LatencyTOP
+- *
+- * This program file is free software; you can redistribute it and/or modify 
it
+- * under the terms of the GNU General Public License as published by the
+- * Free Software Foundation; version 2 of the License.
+- *
+- * This program is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+- * for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program in a file named COPYING; if not, write to the
+- * Free Software Foundation, Inc.,
+- * 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301 USA
+- *
+- * Authors:
+- *    Arjan van de Ven <ar...@linux.intel.com>
+- */
+-
+-#define _GNU_SOURCE
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <ncurses.h>
+-#include <time.h>
+-#include <wchar.h>
+-#include <ctype.h>
+-
+-#include <glib.h>
+-
+-#include "latencytop.h"
+-
+-struct fsync_process { 
+-      char name[PATH_MAX];
+-      int fsync_count;
+-      GList *files;
+-};
+-
+-struct fsync_files {
+-      char name[PATH_MAX];
+-      int fsync_count;
+-};
+-
+-static GList *fsync_data;
+-
+-
+-static chain_file(struct fsync_process *proc, char *filename)
+-{
+-      struct fsync_files *file;
+-      GList *item;
+-
+-      proc->fsync_count++;
+-      item = proc->files;
+-      while (item) {
+-              file = item->data;
+-              item = g_list_next(item);
+-              if (strcmp(file->name, filename)==0) {
+-                      file->fsync_count++;
+-                      return;
+-              }
+-      }
+-      file = malloc(sizeof(struct fsync_files));
+-      if (!file)
+-              return;
+-      memset(file, 0, sizeof(struct fsync_files));
+-      strncpy(file->name, filename, PATH_MAX-1);
+-      file->fsync_count = 1;
+-      proc->files = g_list_append(proc->files, file);
+-}
+-
+-static report_file(char *process, char *file)
+-{
+-      struct fsync_process *proc;
+-      GList *item;
+-
+-      item = fsync_data;
+-      while (item) {
+-              proc = item->data;
+-              item = g_list_next(item);
+-              if (strcmp(proc->name, process) == 0) {
+-                      chain_file(proc, file);
+-                      return;
+-              }
+-      }
+-
+-      proc = malloc(sizeof(struct fsync_process));
+-      if (!proc)
+-              return;
+-      memset(proc, 0, sizeof(struct fsync_process));
+-      strncpy(proc->name, process, PATH_MAX-1);
+-      chain_file(proc, file);
+-      fsync_data = g_list_append(fsync_data, proc);
+-}
+-
+-static gint sort_files(gconstpointer A, gconstpointer B)
+-{
+-      struct fsync_files *a = (struct fsync_files *)A;
+-      struct fsync_files *b = (struct fsync_files *)B;
+-      return a->fsync_count < b->fsync_count;
+-}
+-
+-static gint sort_process(gconstpointer A, gconstpointer B)
+-{
+-      struct fsync_process *a = (struct fsync_process *)A;
+-      struct fsync_process *b = (struct fsync_process *)B;
+-      return a->fsync_count < b->fsync_count;
+-}
+-
+-static void sort_the_lot(void)
+-{
+-      GList *item;
+-      struct fsync_process *proc;
+-
+-      item = fsync_data = g_list_sort(fsync_data, sort_process);
+-      while (item) {
+-              proc = item->data;
+-              item = g_list_next(item);
+-              proc->files = g_list_sort(proc->files, sort_files);
+-      }
+-}
+-
+-
+-
+-static void write_to_file(char *filename, char *value)
+-{
+-      FILE *file;
+-      file = fopen(filename, "w");
+-      if (!file)
+-              return;
+-      fprintf(file,"%s\n", value);
+-      fclose(file);
+-}
+-
+-
+-int enable_fsync_tracer(void)
+-{
+-      int ret;
+-/*
+- * Steps to do:
+- *
+- * mount -t debugfs none /sys/kernel/debug/
+- * cd /sys/kernel/debug/tracing
+- * echo fsync > current_tracer
+- * echo ftrace_printk > iter_ctrl 
+- * echo 1 > tracing_enabled
+- */
+-      ret = system("/bin/mount -t debugfs none /sys/kernel/debug/");
+-      if (!ret) 
+-              return -1;
+-      write_to_file("/sys/kernel/debug/tracing/current_tracer", "fsync");     
+-      write_to_file("/sys/kernel/debug/tracing/iter_ctrl", "ftrace_printk");  
+-      write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "1");
+-}
+-
+-int disable_fsync_tracer(void)
+-{
+-      write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "0");
+-}
+-
+-
+-static WINDOW *title_bar_window;
+-static WINDOW *global_window;
+-
+-
+-static void fsync_cleanup_curses(void) 
+-{
+-      endwin();
+-}
+-
+-
+-static void zap_windows(void)
+-{
+-      if (title_bar_window) {
+-              delwin(title_bar_window);
+-              title_bar_window = NULL;
+-      }
+-      if (global_window) {
+-              delwin(global_window);
+-              global_window = NULL;
+-      }
+-}
+-
+-
+-static int maxx, maxy;
+-
+-static void fsync_setup_windows(void) 
+-{
+-      int midy;
+-      getmaxyx(stdscr, maxy, maxx);
+-
+-      zap_windows();  
+-
+-      title_bar_window = subwin(stdscr, 1, maxx, 0, 0);
+-      global_window = subwin(stdscr, maxy-3 , maxx, 2, 0);
+-
+-      werase(stdscr);
+-      refresh();
+-}
+-
+-#if 0 /* Dead code */
+-static void fsync_initialize_curses(void) 
+-{
+-      if (noui)
+-              return;
+-      initscr();
+-      start_color();
+-      keypad(stdscr, TRUE);   /* enable keyboard mapping */
+-      nonl();                 /* tell curses not to do NL->CR/NL on output */
+-      cbreak();               /* take input chars one at a time, no wait for 
\n */
+-      noecho();               /* dont echo input */
+-      curs_set(0);            /* turn off cursor */
+-      use_default_colors();
+-
+-      init_pair(PT_COLOR_DEFAULT, COLOR_WHITE, COLOR_BLACK);
+-      init_pair(PT_COLOR_HEADER_BAR, COLOR_BLACK, COLOR_WHITE);
+-      init_pair(PT_COLOR_ERROR, COLOR_BLACK, COLOR_RED);
+-      init_pair(PT_COLOR_RED, COLOR_WHITE, COLOR_RED);
+-      init_pair(PT_COLOR_YELLOW, COLOR_WHITE, COLOR_YELLOW);
+-      init_pair(PT_COLOR_GREEN, COLOR_WHITE, COLOR_GREEN);
+-      init_pair(PT_COLOR_BRIGHT, COLOR_WHITE, COLOR_BLACK);
+-      
+-      atexit(cleanup_curses);
+-}
+-#endif
+-
+-static void show_title_bar(void) 
+-{
+-      wattrset(title_bar_window, COLOR_PAIR(PT_COLOR_HEADER_BAR));
+-      wbkgd(title_bar_window, COLOR_PAIR(PT_COLOR_HEADER_BAR));   
+-      werase(title_bar_window);
+-
+-      mvwprintw(title_bar_window, 0, 0,  "   LatencyTOP -- fsync() view... 
type 'F' to exit");
+-
+-      wrefresh(title_bar_window);
+-}
+-
+-
+-
+-static void print_global_list(void)
+-{
+-      GList *item, *item2;
+-      struct fsync_process *proc;
+-      struct fsync_files *file;
+-      int i = 1, i2 = 0;
+-      int y = 1;
+-
+-      werase(global_window);
+-
+-
+-      mvwprintw(global_window, 0, 0, "Process        File");
+-      item = g_list_first(fsync_data);
+-      while (item && i < maxy-6) {
+-              proc = item->data;
+-              item = g_list_next(item);
+-              
+-              mvwprintw(global_window, y, 0, "%s (%i)", proc->name, 
proc->fsync_count);
+-              y++;
+-              item2 = proc->files;
+-              while (item2 && i2 < 5) {
+-                      file = item2->data;
+-                      item2 = g_list_next(item2);
+-                      mvwprintw(global_window, y, 10, "%s (%i)", file->name, 
file->fsync_count);
+-                      y++;
+-                      i2++;
+-              }
+-              i++;
+-              y++;
+-      }
+-      wrefresh(global_window);
+-
+-}
+-
+-static void parse_ftrace(void)
+-{
+-      FILE *file;
+-      char line[PATH_MAX];
+-      file = fopen("/sys/kernel/debug/tracing/trace", "r");
+-      if (!file)
+-              return;
+-      while (!feof(file)) {
+-              char *c, *c2;
+-              memset(line, 0, PATH_MAX);
+-              fgets(line, PATH_MAX-1, file);
+-              c = strchr(line, '\n');
+-              if (c) *c = 0;
+-              c = strstr(line, "probe_do_fsync: Process ");
+-              if (!c)
+-                      continue;
+-              c += 24;
+-              c2 = strchr(c, ' ');
+-              if (!c2)
+-                      continue;
+-              *c2 = 0;
+-              c2++;
+-              c2 = strstr(c2, "fsync on ");
+-              if (!c2)
+-                      continue;
+-              c2 += 9;
+-              report_file(c, c2);
+-      }
+-      fclose(file);
+-      sort_the_lot();
+-}
+-
+-
+-int fsync_display(int duration)
+-{
+-      struct timeval start,end,now;
+-      int key;
+-      fd_set rfds;
+-      int curduration;
+-
+-      fsync_setup_windows();
+-      show_title_bar();
+-      curduration = 3;
+-      if (curduration > duration)
+-              curduration = duration;
+-      parse_ftrace();
+-      print_global_list();
+-      while (1) {
+-              FD_ZERO(&rfds);
+-              FD_SET(0, &rfds);
+-              gettimeofday(&start, NULL);
+-              gettimeofday(&now, NULL);
+-              end.tv_sec = start.tv_sec + curduration - now.tv_sec;
+-              end.tv_usec = start.tv_usec - now.tv_usec;
+-              while (end.tv_usec < 0) {
+-                      end.tv_sec --;
+-                      end.tv_usec += 1000000;
+-              };
+-              curduration = duration;
+-              if (curduration > 5)
+-                      curduration = 5;
+-              /* clear the ftrace buffer */
+-              write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "0");
+-              write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "1");
+-              key = select(1, &rfds, NULL, NULL, &end);
+-              parse_ftrace();
+-              print_global_list();
+-
+-              if (key) {
+-                      char keychar;
+-                      keychar = fgetc(stdin);         
+-                      if (keychar == 27) {
+-                              keychar = fgetc(stdin); 
+-                              if (keychar==79)
+-                                      keychar = fgetc(stdin); 
+-                      }
+-                      keychar = toupper(keychar);
+-                      if (keychar == 'F') {
+-                              fsync_cleanup_curses();
+-                              return 1;
+-                      }
+-                      if (keychar == 'Q') {
+-                              fsync_cleanup_curses();
+-                              return 0;
+-                      }
+-              }
+-      }
+-
+-      return 1;
+-}
+--- a/latencytop.8
++++ b/latencytop.8
+@@ -42,10 +42,6 @@ followed by a letter, then only active processes starting 
with that lettter
+ are displayed and walked. If you press \fBs\fP followed by \fB0\fP then
+ that filter is reset.
+ 
+-If you press \fBf\fP then \fBLatencyTop\fP displays a list of all processes
+-currently waiting for an \fBfsync\fP to finish. Pressing \fBf\fP again
+-returns you to the normal operating mode of \fBLatencyTop\fP.
+-
+ .SH SEE ALSO
+ .BR powertop (1)
+ .br
+--- a/latencytop.c
++++ b/latencytop.c
+@@ -532,7 +532,6 @@ void update_list(void)
+ static void cleanup_sysctl(void) 
+ {
+       disable_sysctl();
+-      disable_fsync_tracer();
+ }
+ 
+ int main(int argc, char **argv)
+@@ -540,7 +539,6 @@ int main(int argc, char **argv)
+       int i, use_gtk = 0;
+ 
+       enable_sysctl();
+-      enable_fsync_tracer();
+       atexit(cleanup_sysctl);
+ 
+ #ifdef HAS_GTK_GUI
+--- a/latencytop.h
++++ b/latencytop.h
+@@ -53,7 +53,4 @@ extern void start_text_ui(void);
+ 
+ extern char *translate(char *line);
+ extern void init_translations(char *filename);
+-extern int fsync_display(int duration);
+-extern int enable_fsync_tracer(void);
+-extern int disable_fsync_tracer(void);
+ extern void update_list(void);
+--- a/latencytop.trans
++++ b/latencytop.trans
+@@ -142,5 +142,5 @@
+ 5     sys_nanosleep           Application requested delay
+ 5     sys_pause               Application requested delay
+ 5     evdev_read              Reading keyboard/mouse input
+-5     do_fsync                fsync() on a file (type 'F' for details)
++5     do_fsync                fsync() on a file
+ 5     __log_wait_for_space    Waiting for EXT3 journal space
+--- a/text_display.c
++++ b/text_display.c
+@@ -378,13 +378,6 @@ static int update_display(int duration, char *filterchar)
+                               else if (keychar == '0')
+                                       *filterchar = '\0';
+                       }
+-                      if (keychar == 'F') {
+-                              endwin();
+-                              if (!fsync_display(duration))
+-                                      return 0;
+-                              setup_windows();
+-                              show_title_bar();
+-                      }
+                       if (keychar < 32)
+                               repaint = 0;
+               }

diff --git 
a/sys-process/latencytop/files/latencytop-0.5-fsync-fix-implicit-decl.patch 
b/sys-process/latencytop/files/latencytop-0.5-fsync-fix-implicit-decl.patch
deleted file mode 100644
index 33f2bc278600..000000000000
--- a/sys-process/latencytop/files/latencytop-0.5-fsync-fix-implicit-decl.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 60427a259ba76b8238198e1f17a0c3b06491be3c Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vap...@gentoo.org>
-Date: Fri, 18 Dec 2009 10:48:39 -0500
-Subject: [PATCH] fsync: fix implicit decl
-
-fsync.c: In function 'fsync_display':
-fsync.c:330: warning: implicit declaration of function 'gettimeofday'
-
-Signed-off-by: Mike Frysinger <vap...@gentoo.org>
----
- src/fsync.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/src/fsync.c b/src/fsync.c
-index 1706571..3bec719 100644
---- a/fsync.c
-+++ b/fsync.c
-@@ -30,6 +30,7 @@
- #include <string.h>
- #include <ncurses.h>
- #include <time.h>
-+#include <sys/time.h>
- #include <wchar.h>
- #include <ctype.h>
- 
--- 
-1.6.5.4
-

diff --git a/sys-process/latencytop/latencytop-0.5-r2.ebuild 
b/sys-process/latencytop/latencytop-0.5-r3.ebuild
similarity index 72%
rename from sys-process/latencytop/latencytop-0.5-r2.ebuild
rename to sys-process/latencytop/latencytop-0.5-r3.ebuild
index fa5403254583..3e4091f5598d 100644
--- a/sys-process/latencytop/latencytop-0.5-r2.ebuild
+++ b/sys-process/latencytop/latencytop-0.5-r3.ebuild
@@ -1,25 +1,23 @@
-# Copyright 1999-2021 Gentoo Authors
+# Copyright 1999-2022 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-EAPI=7
+EAPI=8
 
-inherit linux-info
+inherit linux-info toolchain-funcs
 
-DESCRIPTION="tool for identifying where in the system latency is happening"
+DESCRIPTION="Tool for identifying where in the system latency is happening"
 HOMEPAGE="http://git.infradead.org/latencytop.git";
-
 # Upstream is long gone, so we explicitly use our mirrors for the tarball
 SRC_URI="mirror://gentoo/${P}.tar.gz"
 
-CONFIG_CHECK="~LATENCYTOP"
-
 LICENSE="GPL-2"
 SLOT="0"
 KEYWORDS="amd64 ~arm x86"
 IUSE="gtk"
 
-RDEPEND="dev-libs/glib:2
-       sys-libs/ncurses:0=
+RDEPEND="
+       dev-libs/glib:2
+       sys-libs/ncurses:=
        gtk? ( x11-libs/gtk+:2 )
 "
 DEPEND="${RDEPEND}"
@@ -30,14 +28,13 @@ BDEPEND="virtual/pkgconfig"
 PATCHES=(
        "${FILESDIR}/${P}-01-mkdir-usr-sbin-as-well.patch"
        "${FILESDIR}/${P}-03-clean-up-build-system.patch"
-       "${FILESDIR}/${P}-fsync-fix-implicit-decl.patch"
+       "${FILESDIR}/${P}-fsync-drop.patch"
+       "${FILESDIR}/${P}-Fix-Wimplicit-int.patch"
 )
 
-pkg_pretend() {
-       linux-info_pkg_setup
-}
+CONFIG_CHECK="~LATENCYTOP"
 
-pkg_setup() {
+pkg_pretend() {
        linux-info_pkg_setup
 }
 
@@ -51,3 +48,9 @@ src_prepare() {
                sed -i -e "/HAS_GTK_GUI = 1/d" Makefile || die
        fi
 }
+
+src_compile() {
+       tc-export CC PKG_CONFIG
+
+       emake CPPFLAGS="${CPPFLAGS}"
+}

Reply via email to