UL_BUILD_INIT([ipcs])
AM_CONDITIONAL([BUILD_IPCS], [test "x$build_ipcs" = xyes])
+
AC_ARG_ENABLE([irqtop],
AS_HELP_STRING([--disable-irqtop], [do not build irqtop]),
[], [UL_DEFAULT_ENABLE([irqtop], [yes])]
)
UL_BUILD_INIT([irqtop])
UL_REQUIRES_LINUX([irqtop])
+UL_REQUIRES_BUILD([irqtop], [libsmartcols])
+UL_REQUIRES_HAVE([irqtop], [open_memstream], [open_memstream function])
+UL_REQUIRES_HAVE([irqtop], [ncursesw,slang,ncurses], [ncursesw, ncurses or slang library])
AM_CONDITIONAL([BUILD_IRQTOP], [test "x$build_irqtop" = xyes])
+AC_ARG_ENABLE([lsirq],
+ AS_HELP_STRING([--disable-lsirq], [do not build lsirq]),
+ [], [UL_DEFAULT_ENABLE([lsirq], [yes])]
+)
+UL_BUILD_INIT([lsirq])
+UL_REQUIRES_LINUX([lsirq])
+UL_REQUIRES_BUILD([lsirq], [libsmartcols])
+AM_CONDITIONAL([BUILD_LSIRQ], [test "x$build_lsirq" = xyes])
+
+
UL_BUILD_INIT([choom], [check])
UL_REQUIRES_LINUX([choom])
AM_CONDITIONAL([BUILD_CHOOM], [test "x$build_choom" = xyes])
--- /dev/null
+.TH IRQTOP "1" "February 2020" "util-linux" "User Commands"
+.SH NAME
+lsirq \- utility to display kernel interrupt information
+.SH SYNOPSIS
+.B lsirq
+[options]
+.SH DESCRIPTION
+Display kernel interrupt counter information.
+.PP
+The default output is subject to change. So whenever possible,
+you should avoid using default outputs in your scripts. Always
+explicitly define expected columns by using \fB\-\-output\fR.
+.SH OPTIONS
+.TP
+.BR \-o , " \-\-output " \fIlist\fP
+Specify which output columns to print. Use \fB\-\-help\fR to get a list of all supported columns.
+The default list of columns may be extended if list is specified in the format +list.
+.TP
+.BR \-s , " \-\-sort " \fIcolumn\fP
+Specify sort criteria by column name. See \fB\-\-help\fR output to get column
+names.
+.TP
+.BR \-J , " \-\-json
+Update interrupt output every
+.TP
+.BR \-V ", " \-\-version
+Display version information and exit.
+.TP
+.BR \-h ,\ \-\-help
+Display help text and exit.
+.SH AUTHORS
+.MT pizhenwei@\:bytedance.com
+Zhenwei Pi
+.ME
+.br
+.MT kerolasa@\:iki.fi
+Sami Kerola
+.ME
+.br
+.MT kzak@\:redhat.com
+Karel Zak
+.ME
+.SH AVAILABILITY
+The example command is part of the util-linux package and is available from
+.UR https://\:www.kernel.org\:/pub\:/linux\:/utils\:/util-linux/
+Linux Kernel Archive
+.UE .
--- /dev/null
+/*
+ * lsirq - utility to display kernel interrupt information.
+ *
+ * Copyright (C) 2019 zhenwei pi <pizhenwei@bytedance.com>
+ * Copyright (C) 2020 Karel Zak <kzak@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#include <ctype.h>
+#include <errno.h>
+#include <getopt.h>
+#include <limits.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <libsmartcols.h>
+
+#include "closestream.h"
+#include "strutils.h"
+#include "xalloc.h"
+
+#include "irq-common.h"
+
+static int print_irq_data(struct irq_output *out)
+{
+ struct libscols_table *table;
+
+ table = get_scols_table(out, NULL, NULL);
+ if (!table)
+ return -1;
+
+ scols_print_table(table);
+ scols_unref_table(table);
+ return 0;
+}
+
+static void __attribute__((__noreturn__)) usage(void)
+{
+ fputs(USAGE_HEADER, stdout);
+ printf(_(" %s [options]\n"), program_invocation_short_name);
+ fputs(USAGE_SEPARATOR, stdout);
+
+ puts(_("Utility to display kernel interrupt information."));
+
+ fputs(USAGE_OPTIONS, stdout);
+ fputs(_(" -J, --json use JSON output format\n"), stdout);
+ fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
+ fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
+ fputs(USAGE_SEPARATOR, stdout);
+ printf(USAGE_HELP_OPTIONS(22));
+
+ fputs(USAGE_COLUMNS, stdout);
+ irq_print_columns(stdout, 1);
+
+ printf(USAGE_MAN_TAIL("lsirq(1)"));
+ exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char **argv)
+{
+ struct irq_output out = {
+ .ncolumns = 0
+ };
+ static const struct option longopts[] = {
+ {"sort", required_argument, NULL, 's'},
+ {"output", required_argument, NULL, 'o'},
+ {"json", no_argument, NULL, 'J'},
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'V'},
+ {NULL, 0, NULL, 0}
+ };
+ int c;
+ const char *outarg = NULL;
+
+ setlocale(LC_ALL, "");
+
+ while ((c = getopt_long(argc, argv, "o:s:hJV", longopts, NULL)) != -1) {
+ switch (c) {
+ case 'J':
+ out.json = 1;
+ break;
+ case 'o':
+ outarg = optarg;
+ break;
+ case 's':
+ set_sort_func_by_name(&out, optarg);
+ break;
+ case 'V':
+ print_version(EXIT_SUCCESS);
+ case 'h':
+ usage();
+ default:
+ errtryhelp(EXIT_FAILURE);
+ }
+ }
+
+ /* default */
+ if (!out.ncolumns) {
+ out.columns[out.ncolumns++] = COL_IRQ;
+ out.columns[out.ncolumns++] = COL_TOTAL;
+ out.columns[out.ncolumns++] = COL_NAME;
+ }
+
+ /* add -o [+]<list> to putput */
+ if (outarg && string_add_to_idarray(outarg, out.columns,
+ ARRAY_SIZE(out.columns),
+ &out.ncolumns,
+ irq_column_name_to_id) < 0)
+ exit(EXIT_FAILURE);
+
+ return print_irq_data(&out) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}