2006-03-04 18:16:49 +00:00
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# Autoconf initialization.
# ----------------------------------------------------------------------
2021-01-22 18:14:53 +00:00
AC_PREREQ([2.69])
2021-11-30 01:03:21 +00:00
AC_INIT([htop], [3.1.2], [htop@groups.io], [], [https://htop.dev/])
2015-01-22 01:27:31 +00:00
2006-03-04 18:16:49 +00:00
AC_CONFIG_SRCDIR([htop.c])
2021-01-22 18:14:53 +00:00
AC_CONFIG_AUX_DIR([build-aux])
2016-03-12 03:58:30 +00:00
AC_CONFIG_HEADERS([config.h])
2006-03-04 18:16:49 +00:00
2016-03-12 04:02:06 +00:00
AC_CANONICAL_TARGET
2021-01-22 18:14:53 +00:00
AM_INIT_AUTOMAKE([-Wall std-options subdir-objects])
2016-03-12 04:02:06 +00:00
2014-11-20 01:17:16 +00:00
# ----------------------------------------------------------------------
2008-03-05 09:46:47 +00:00
2016-03-12 04:02:06 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
2014-11-24 20:55:03 +00:00
# Checks for platform.
# ----------------------------------------------------------------------
2021-01-22 18:14:50 +00:00
2016-04-18 22:55:55 +00:00
case "$target_os" in
2016-04-18 22:57:30 +00:00
linux*|gnu*)
2014-11-24 20:55:03 +00:00
my_htop_platform=linux
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_LINUX], [], [Building for Linux.])
2014-11-24 20:55:03 +00:00
;;
2016-04-18 22:55:55 +00:00
freebsd*|kfreebsd*)
2014-11-27 18:27:34 +00:00
my_htop_platform=freebsd
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_FREEBSD], [], [Building for FreeBSD.])
2014-11-27 18:27:34 +00:00
;;
2021-03-15 07:44:39 +00:00
netbsd*)
my_htop_platform=netbsd
AC_DEFINE([HTOP_NETBSD], [], [Building for NetBSD.])
;;
2016-04-18 22:55:55 +00:00
openbsd*)
2015-09-18 04:46:48 +00:00
my_htop_platform=openbsd
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_OPENBSD], [], [Building for OpenBSD.])
2015-09-18 04:46:48 +00:00
;;
2017-04-19 14:12:17 +00:00
dragonfly*)
my_htop_platform=dragonflybsd
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_DRAGONFLYBSD], [], [Building for DragonFlyBSD.])
2017-04-19 14:12:17 +00:00
;;
2016-04-18 22:55:55 +00:00
darwin*)
2015-07-12 18:47:43 +00:00
my_htop_platform=darwin
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_DARWIN], [], [Building for Darwin.])
2015-07-12 18:47:43 +00:00
;;
2018-03-02 21:20:46 +00:00
solaris*)
my_htop_platform=solaris
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_SOLARIS], [], [Building for Solaris.])
2018-03-02 21:20:46 +00:00
;;
2014-11-24 20:55:03 +00:00
*)
my_htop_platform=unsupported
2021-01-22 18:14:50 +00:00
AC_DEFINE([HTOP_UNSUPPORTED], [], [Building for an unsupported platform.])
2014-11-24 20:55:03 +00:00
;;
esac
2021-01-22 18:14:53 +00:00
# Enable extensions, required by hwloc scripts
2021-01-22 18:14:50 +00:00
AC_USE_SYSTEM_EXTENSIONS
2014-11-20 01:17:16 +00:00
# ----------------------------------------------------------------------
2006-07-12 01:15:14 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# Checks for compiler.
# ----------------------------------------------------------------------
AC_PROG_CC
AM_PROG_CC_C_O
2021-08-25 08:23:30 +00:00
m4_version_prereq([2.70], [], [AC_PROG_CC_C99])
2021-01-22 18:14:53 +00:00
AS_IF([test "x$ac_cv_prog_cc_c99" = xno], [AC_MSG_ERROR([htop is written in C99. A newer compiler is required.])])
2021-01-22 18:14:50 +00:00
2014-11-20 01:17:16 +00:00
# ----------------------------------------------------------------------
2021-01-22 18:14:50 +00:00
2021-01-22 18:14:59 +00:00
# ----------------------------------------------------------------------
# Checks for static build.
# ----------------------------------------------------------------------
AC_ARG_ENABLE([static],
[AS_HELP_STRING([--enable-static],
[build a static htop binary @<:@default=no@:>@])],
[],
[enable_static=no])
case "$enable_static" in
no)
;;
yes)
AC_DEFINE([BUILD_STATIC], [1], [Define if building static binary.])
CFLAGS="$CFLAGS -static"
LDFLAGS="$LDFLAGS -static"
;;
*)
AC_MSG_ERROR([bad value '$enable_static' for --enable-static option])
;;
esac
# ----------------------------------------------------------------------
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
# ----------------------------------------------------------------------
# Checks for a PCP-based htop build. (https://pcp.io)
# ----------------------------------------------------------------------
AC_ARG_ENABLE([pcp],
[AS_HELP_STRING([--enable-pcp],
2021-04-14 01:34:47 +00:00
[build a pcp-htop binary @<:@default=no@:>@])],
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
[],
[enable_pcp=no])
case "$enable_pcp" in
no)
;;
yes)
AC_CHECK_HEADERS([pcp/pmapi.h], [my_htop_platform=pcp],
2021-06-13 17:46:13 +00:00
[AC_MSG_ERROR([can not find PCP header file])])
2021-06-07 23:46:02 +00:00
AC_SEARCH_LIBS([pmNewContext], [pcp], [], [AC_MSG_ERROR([can not find PCP library])])
AC_DEFINE([HTOP_PCP], [1], [Define if building pcp-htop binary.])
2021-08-14 08:35:11 +00:00
AC_CONFIG_FILES([pcp-htop.5])
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
;;
*)
2021-02-19 03:13:27 +00:00
AC_MSG_ERROR([bad value '$enable_pcp' for --enable-pcp option])
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
;;
esac
# ----------------------------------------------------------------------
2021-01-22 18:14:59 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# Checks for generic header files.
# ----------------------------------------------------------------------
2006-03-04 18:16:49 +00:00
AC_HEADER_DIRENT
2021-08-25 08:23:30 +00:00
m4_version_prereq([2.70], [AC_CHECK_INCLUDES_DEFAULT], [AC_HEADER_STDC])
2021-01-22 18:14:50 +00:00
AC_CHECK_HEADERS([ \
stdlib.h \
string.h \
strings.h \
sys/param.h \
sys/time.h \
2021-03-02 04:58:11 +00:00
sys/utsname.h \
2021-01-22 18:14:50 +00:00
unistd.h
2021-01-22 18:14:55 +00:00
], [], [AC_MSG_ERROR([can not find required generic header files])])
2006-07-12 01:15:14 +00:00
2018-02-26 13:15:05 +00:00
AC_HEADER_MAJOR
dnl glibc 2.25 deprecates 'major' and 'minor' in <sys/types.h> and requires to
dnl include <sys/sysmacros.h>. However the logic in AC_HEADER_MAJOR has not yet
dnl been updated in Autoconf 2.69, so use a workaround:
m4_version_prereq([2.70], [],
2018-12-30 04:18:27 +00:00
[if test "x$ac_cv_header_sys_mkdev_h" != xyes; then
2021-01-22 18:14:50 +00:00
AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
2018-02-26 13:15:05 +00:00
[Define to 1 if `major', `minor', and `makedev' are declared in <sys/sysmacros.h>.])])
fi])
2021-01-22 18:14:50 +00:00
# Optional Section
AC_CHECK_HEADERS([execinfo.h])
if test "$my_htop_platform" = darwin; then
AC_CHECK_HEADERS([mach/mach_time.h])
fi
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
2006-03-04 18:16:49 +00:00
# Checks for typedefs, structures, and compiler characteristics.
2014-11-20 01:17:16 +00:00
# ----------------------------------------------------------------------
2021-01-22 18:14:50 +00:00
2006-03-04 18:16:49 +00:00
AC_TYPE_PID_T
AC_TYPE_UID_T
2020-11-26 19:28:38 +00:00
AC_TYPE_UINT8_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
2006-03-04 18:16:49 +00:00
2021-06-27 10:44:01 +00:00
AC_MSG_CHECKING(for alloc_size)
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wno-error -Werror=attributes"
AC_COMPILE_IFELSE([
AC_LANG_SOURCE(
[
__attribute__((alloc_size(1))) char* my_alloc(int size) { return 0; }
],[]
)],
AC_DEFINE([HAVE_ATTR_ALLOC_SIZE], 1, [The alloc_size attribute is supported.])
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
CFLAGS="$old_CFLAGS"
2021-08-08 14:54:20 +00:00
AC_MSG_CHECKING(for NaN support)
AC_RUN_IFELSE([
AC_LANG_PROGRAM(
[[
#include <math.h>
]],
[[
double x = NAN; return !isnan(x);
]]
)],
[AC_MSG_RESULT(yes)],
[
AC_MSG_RESULT(no)
AC_MSG_WARN([Compiler does not respect NaN, some functionality might break; consider using '-fno-finite-math-only'])
],
[AC_MSG_RESULT(skipped)])
2014-11-20 01:17:16 +00:00
# ----------------------------------------------------------------------
2021-01-19 18:51:59 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# Checks for generic library functions.
# ----------------------------------------------------------------------
2006-03-04 18:16:49 +00:00
2021-01-22 18:14:55 +00:00
AC_CHECK_LIB([m], [ceil], [], [AC_MSG_ERROR([can not find required function ceil()])])
2020-10-15 19:12:57 +00:00
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = dragonflybsd; then
2021-01-22 18:14:55 +00:00
AC_SEARCH_LIBS([kvm_open], [kvm], [], [AC_MSG_ERROR([can not find required function kvm_open()])])
2021-01-22 18:14:50 +00:00
fi
2020-10-21 15:06:32 +00:00
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = freebsd; then
2021-02-05 14:15:01 +00:00
if test "$enable_static" = yes; then
AC_SEARCH_LIBS([elf_version], [elf], [], [AC_MSG_ERROR([can not find required function elf_version()])])
fi
2021-01-22 18:14:55 +00:00
AC_SEARCH_LIBS([kvm_open], [kvm], [], [AC_MSG_ERROR([can not find required function kvm_open()])])
AC_SEARCH_LIBS([devstat_checkversion], [devstat], [], [AC_MSG_ERROR([can not find required function devstat_checkversion()])])
2021-01-22 18:14:50 +00:00
fi
2014-11-24 20:55:03 +00:00
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = linux; then
2021-01-22 18:14:59 +00:00
if test "$enable_static" != yes; then
AC_SEARCH_LIBS([dlopen], [dl dld], [], [AC_MSG_ERROR([can not find required function dlopen()])])
fi
2021-01-22 18:14:46 +00:00
fi
2006-03-04 18:16:49 +00:00
2021-03-15 07:44:39 +00:00
if test "$my_htop_platform" = netbsd; then
AC_SEARCH_LIBS([kvm_open], [kvm], [], [AC_MSG_ERROR([can not find required function kvm_open()])])
2021-07-26 17:04:44 +00:00
AC_SEARCH_LIBS([prop_dictionary_get], [prop], [], [AC_MSG_ERROR([can not find required function prop_dictionary_get()])])
2021-03-15 07:44:39 +00:00
fi
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = openbsd; then
2021-01-22 18:14:55 +00:00
AC_SEARCH_LIBS([kvm_open], [kvm], [], [AC_MSG_ERROR([can not find required function kvm_open()])])
2008-03-09 02:33:23 +00:00
fi
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = solaris; then
2021-01-22 18:14:55 +00:00
AC_SEARCH_LIBS([kstat_open], [kstat], [], [AC_MSG_ERROR([can not find required function kstat_open()])])
AC_SEARCH_LIBS([Pgrab_error], [proc], [], [AC_MSG_ERROR([can not find required function Pgrab_error()])])
AC_SEARCH_LIBS([free], [malloc], [], [AC_MSG_ERROR([can not find required function free()])])
2008-09-23 04:31:13 +00:00
fi
2021-01-22 18:14:50 +00:00
# Optional Section
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([ \
clock_gettime \
2021-05-16 18:45:09 +00:00
dladdr \
2021-01-22 18:14:50 +00:00
faccessat \
fstatat \
host_get_clock_service \
2020-12-25 10:03:15 +00:00
memfd_create\
2021-01-22 18:14:50 +00:00
openat \
readlinkat \
])
if test "$my_htop_platform" = darwin; then
AC_CHECK_FUNCS([mach_timebase_info])
2008-09-23 04:31:13 +00:00
fi
2021-01-22 18:14:59 +00:00
if test "$my_htop_platform" = linux && test "x$enable_static" = xyes; then
AC_CHECK_LIB([systemd], [sd_bus_open_system])
fi
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# Checks for cross-platform features and flags.
# ----------------------------------------------------------------------
2015-12-09 19:17:30 +00:00
# HTOP_CHECK_SCRIPT(LIBNAME, FUNCTION, DEFINE, CONFIG_SCRIPT, ELSE_PART)
m4_define([HTOP_CHECK_SCRIPT],
2015-11-30 18:36:22 +00:00
[
2016-07-11 23:12:07 +00:00
if test ! -z "m4_toupper($HTOP_[$1]_CONFIG_SCRIPT)"; then
# to be used to set the path to ncurses*-config when cross-compiling
2018-02-26 13:19:01 +00:00
htop_config_script_libs=$(m4_toupper($HTOP_[$1]_CONFIG_SCRIPT) --libs 2> /dev/null)
htop_config_script_cflags=$(m4_toupper($HTOP_[$1]_CONFIG_SCRIPT) --cflags 2> /dev/null)
2016-07-11 23:12:07 +00:00
else
2018-02-26 13:19:01 +00:00
htop_config_script_libs=$([$4] --libs 2> /dev/null)
htop_config_script_cflags=$([$4] --cflags 2> /dev/null)
2016-07-11 23:12:07 +00:00
fi
2015-12-09 19:17:30 +00:00
htop_script_success=no
2018-02-26 13:19:01 +00:00
htop_save_CFLAGS="$CFLAGS"
if test ! "x$htop_config_script_libs" = x; then
CFLAGS="$htop_config_script_cflags $CFLAGS"
2015-12-09 19:17:30 +00:00
AC_CHECK_LIB([$1], [$2], [
AC_DEFINE([$3], 1, [The library is present.])
2018-02-26 13:19:01 +00:00
LIBS="$htop_config_script_libs $LIBS "
2015-12-09 19:17:30 +00:00
htop_script_success=yes
2018-02-26 13:19:01 +00:00
], [
2020-12-12 18:49:52 +00:00
CFLAGS="$htop_save_CFLAGS"
2021-01-22 18:14:59 +00:00
], [
$htop_config_script_libs
2018-02-26 13:19:01 +00:00
])
2015-12-09 19:17:30 +00:00
fi
2015-12-09 19:34:57 +00:00
if test "x$htop_script_success" = xno; then
2015-12-09 19:17:30 +00:00
[$5]
2015-12-06 21:06:23 +00:00
fi
2015-12-09 19:17:30 +00:00
])
# HTOP_CHECK_LIB(LIBNAME, FUNCTION, DEFINE, ELSE_PART)
m4_define([HTOP_CHECK_LIB],
[
2015-11-30 18:36:22 +00:00
AC_CHECK_LIB([$1], [$2], [
2021-01-22 18:14:59 +00:00
AC_DEFINE([$3], [1], [The library is present.])
2015-12-09 19:17:30 +00:00
LIBS="-l[$1] $LIBS "
], [$4])
2015-11-30 18:36:22 +00:00
])
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([unicode],
[AS_HELP_STRING([--enable-unicode],
[enable Unicode support @<:@default=yes@:>@])],
[],
[enable_unicode=yes])
2008-03-09 02:33:23 +00:00
if test "x$enable_unicode" = xyes; then
2021-01-28 16:40:33 +00:00
HTOP_CHECK_SCRIPT([ncursesw6], [waddwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
HTOP_CHECK_SCRIPT([ncursesw], [waddwstr], [HAVE_LIBNCURSESW], "ncursesw6-config",
HTOP_CHECK_SCRIPT([ncursesw], [wadd_wch], [HAVE_LIBNCURSESW], "ncursesw5-config",
HTOP_CHECK_SCRIPT([ncurses], [wadd_wch], [HAVE_LIBNCURSESW], "ncurses5-config",
HTOP_CHECK_LIB([ncursesw6], [addnwstr], [HAVE_LIBNCURSESW],
HTOP_CHECK_LIB([ncursesw], [addnwstr], [HAVE_LIBNCURSESW],
HTOP_CHECK_LIB([ncurses], [addnwstr], [HAVE_LIBNCURSESW],
2021-01-22 18:14:55 +00:00
AC_MSG_ERROR([can not find required library libncursesw; you may want to use --disable-unicode])
2017-04-19 14:12:17 +00:00
)))))))
2015-12-09 19:17:30 +00:00
2021-01-22 18:14:55 +00:00
AC_CHECK_HEADERS([ncursesw/curses.h], [],
[AC_CHECK_HEADERS([ncurses/ncurses.h], [],
[AC_CHECK_HEADERS([ncurses/curses.h], [],
[AC_CHECK_HEADERS([ncurses.h], [],
[AC_MSG_ERROR([can not find required ncurses header file])])])])])
2020-12-07 14:30:56 +00:00
# check if additional linker flags are needed for keypad(3)
# (at this point we already link against a working ncurses library with wide character support)
AC_SEARCH_LIBS([keypad], [tinfow tinfo])
2008-03-09 02:33:23 +00:00
else
2021-01-22 18:14:59 +00:00
HTOP_CHECK_SCRIPT([ncurses6], [wnoutrefresh], [HAVE_LIBNCURSES], [ncurses6-config],
HTOP_CHECK_SCRIPT([ncurses], [wnoutrefresh], [HAVE_LIBNCURSES], [ncurses5-config],
2021-01-28 16:40:33 +00:00
HTOP_CHECK_LIB([ncurses6], [doupdate], [HAVE_LIBNCURSES],
HTOP_CHECK_LIB([ncurses], [doupdate], [HAVE_LIBNCURSES],
2021-07-13 15:53:47 +00:00
HTOP_CHECK_LIB([curses], [doupdate], [HAVE_LIBNCURSES],
AC_MSG_ERROR([can not find required curses/ncurses library])
)))))
2020-08-21 08:37:33 +00:00
2021-01-22 18:14:55 +00:00
AC_CHECK_HEADERS([curses.h], [],
[AC_CHECK_HEADERS([ncurses/curses.h], [],
[AC_CHECK_HEADERS([ncurses/ncurses.h], [],
[AC_CHECK_HEADERS([ncurses.h] ,[],
[AC_MSG_ERROR([can not find required ncurses header file])])])])])
2020-12-07 14:30:56 +00:00
# check if additional linker flags are needed for keypad(3)
# (at this point we already link against a working ncurses library)
AC_SEARCH_LIBS([keypad], [tinfo])
2007-08-10 05:07:14 +00:00
fi
2021-01-22 18:14:59 +00:00
if test "$enable_static" = yes; then
AC_SEARCH_LIBS([Gpm_GetEvent], [gpm])
fi
2021-05-20 16:27:10 +00:00
if test "$my_htop_platform" = "solaris"; then
# On OmniOS /usr/include/sys/regset.h redefines ERR to 13 - \r, breaking the Enter key.
2021-09-08 02:11:51 +00:00
# Since ncurses macros use the ERR macro, we can not use another name.
2021-05-20 16:27:10 +00:00
AC_DEFINE([ERR], [(-1)], [Predefine ncurses macro.])
fi
2021-07-04 14:50:41 +00:00
AC_CHECK_FUNCS( [set_escdelay] )
2021-07-14 18:17:13 +00:00
AC_CHECK_FUNCS( [getmouse] )
2007-08-10 05:07:14 +00:00
2018-03-02 21:20:46 +00:00
2021-06-13 09:29:39 +00:00
AC_ARG_ENABLE([affinity],
[AS_HELP_STRING([--enable-affinity],
[enable sched_setaffinity and sched_getaffinity for affinity support, conflicts with hwloc @<:@default=check@:>@])],
[],
[enable_affinity=check])
if test "x$enable_affinity" = xcheck; then
if test "x$enable_hwloc" = xyes; then
enable_affinity=no
else
AC_MSG_CHECKING([for usable sched_setaffinity])
AC_RUN_IFELSE([
AC_LANG_PROGRAM([[
#include <sched.h>
#include <errno.h>
static cpu_set_t cpuset;
]], [[
CPU_ZERO(&cpuset);
sched_setaffinity(0, sizeof(cpu_set_t), &cpuset);
if (errno == ENOSYS) return 1;
]])],
[enable_affinity=yes
AC_MSG_RESULT([yes])],
[enable_affinity=no
AC_MSG_RESULT([no])],
[AC_MSG_RESULT([yes (assumed while cross compiling)])])
fi
fi
if test "x$enable_affinity" = xyes; then
if test "x$enable_hwloc" = xyes; then
AC_MSG_ERROR([--enable-hwloc and --enable-affinity are mutual exclusive. Specify at most one of them.])
fi
AC_DEFINE([HAVE_AFFINITY], [1], [Define if sched_setaffinity and sched_getaffinity are to be used.])
fi
2021-05-16 18:45:09 +00:00
AC_ARG_ENABLE([unwind],
[AS_HELP_STRING([--enable-unwind],
[enable unwind support for printing backtraces; requires libunwind @<:@default=check@:>@])],
[],
[enable_unwind=check])
case "$enable_unwind" in
check)
enable_unwind=yes
if test "$enable_static" = yes; then
AC_CHECK_LIB([lzma], [lzma_index_buffer_decode])
fi
AC_CHECK_LIB([unwind], [backtrace], [], [enable_unwind=no])
AC_CHECK_HEADERS([libunwind.h], [], [enable_unwind=no])
;;
no)
;;
yes)
AC_CHECK_LIB([unwind], [backtrace], [], [AC_MSG_ERROR([can not find required library libunwind])])
AC_CHECK_HEADERS([libunwind.h], [], [AC_MSG_ERROR([can not find require header file libunwind.h])])
;;
*)
AC_MSG_ERROR([bad value '$enable_unwind' for --enable-unwind])
;;
esac
if test "x$enable_unwind" = xno; then
# Fall back to backtrace(3) and add -lexecinfo if needed
AC_SEARCH_LIBS([backtrace], [execinfo])
fi
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([hwloc],
[AS_HELP_STRING([--enable-hwloc],
2021-06-13 09:29:39 +00:00
[enable hwloc support for CPU affinity; disables affinity support; requires libhwloc @<:@default=no@:>@])],
2021-01-22 18:14:46 +00:00
[],
[enable_hwloc=no])
case "$enable_hwloc" in
no)
;;
yes)
2021-01-22 18:14:55 +00:00
AC_CHECK_LIB([hwloc], [hwloc_get_proc_cpubind], [], [AC_MSG_ERROR([can not find required library libhwloc])])
AC_CHECK_HEADERS([hwloc.h], [], [AC_MSG_ERROR([can not find require header file hwloc.h])])
2021-01-22 18:14:46 +00:00
;;
*)
AC_MSG_ERROR([bad value '$enable_hwloc' for --enable-hwloc])
;;
esac
2020-09-08 14:25:22 +00:00
2021-05-16 18:45:09 +00:00
2021-03-02 04:58:11 +00:00
AC_ARG_WITH([os-release],
[AS_HELP_STRING([--with-os-release=FILE],
2021-03-12 15:37:17 +00:00
[location of an os-release file @<:@default=/etc/os-release@:>@])],
2021-03-02 04:58:11 +00:00
[],
[with_os_release=/etc/os-release])
2021-03-12 15:37:17 +00:00
if test -n "$with_os_release" && test ! -f "$with_os_release"; then
2021-03-02 04:58:11 +00:00
if test -f "/usr/lib/os-release"; then
with_os_release="/usr/lib/os-release"
fi
fi
AC_DEFINE_UNQUOTED([OSRELEASEFILE], ["$with_os_release"], [File with OS release details.])
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# Checks for Linux features and flags.
# ----------------------------------------------------------------------
AC_ARG_WITH([proc],
[AS_HELP_STRING([--with-proc=DIR],
[location of a Linux-compatible proc filesystem @<:@default=/proc@:>@])],
[],
[with_proc=/proc])
if test -z "$with_proc"; then
AC_MSG_ERROR([bad empty value for --with-proc option])
fi
AC_DEFINE_UNQUOTED([PROCDIR], ["$with_proc"], [Path of proc filesystem.])
AC_ARG_ENABLE([openvz],
[AS_HELP_STRING([--enable-openvz],
[enable OpenVZ support @<:@default=no@:>@])],
[],
[enable_openvz=no])
if test "x$enable_openvz" = xyes; then
AC_DEFINE([HAVE_OPENVZ], [1], [Define if openvz support enabled.])
fi
AC_ARG_ENABLE([vserver],
[AS_HELP_STRING([--enable-vserver],
[enable VServer support @<:@default=no@:>@])],
[],
[enable_vserver=no])
if test "x$enable_vserver" = xyes; then
2021-09-02 20:32:46 +00:00
AC_DEFINE([HAVE_VSERVER], [1], [Define if VServer support enabled.])
2021-01-22 18:14:50 +00:00
fi
AC_ARG_ENABLE([ancient_vserver],
[AS_HELP_STRING([--enable-ancient-vserver],
[enable ancient VServer support (implies --enable-vserver) @<:@default=no@:>@])],
[],
[enable_ancient_vserver=no])
if test "x$enable_ancient_vserver" = xyes; then
2021-09-02 20:32:46 +00:00
if test "x$enable_vserver" != xyes; then
enable_vserver=implied
fi
AC_DEFINE([HAVE_VSERVER], [1], [Define if VServer support enabled.])
AC_DEFINE([HAVE_ANCIENT_VSERVER], [1], [Define if ancient vserver support enabled.])
2021-01-22 18:14:50 +00:00
fi
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([capabilities],
[AS_HELP_STRING([--enable-capabilities],
[enable Linux capabilities support; requires libcap @<:@default=check@:>@])],
[],
[enable_capabilities=check])
case "$enable_capabilities" in
no)
;;
check)
enable_capabilities=yes
AC_CHECK_LIB([cap], [cap_init], [], [enable_capabilities=no])
AC_CHECK_HEADERS([sys/capability.h], [], [enable_capabilities=no])
;;
yes)
2021-01-22 18:14:55 +00:00
AC_CHECK_LIB([cap], [cap_init], [], [AC_MSG_ERROR([can not find required library libcap])])
AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([can not find required header file sys/capability.h])])
2021-01-22 18:14:46 +00:00
;;
*)
AC_MSG_ERROR([bad value '$enable_capabilities' for --enable-capabilities])
;;
esac
2020-09-02 12:39:25 +00:00
2021-01-22 18:14:50 +00:00
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([delayacct],
[AS_HELP_STRING([--enable-delayacct],
[enable Linux delay accounting support; requires pkg-config, libnl-3 and libnl-genl-3 @<:@default=check@:>@])],
[],
[enable_delayacct=check])
case "$enable_delayacct" in
no)
;;
check)
2021-05-16 18:01:25 +00:00
if test "$my_htop_platform" != linux; then
enable_delayacct=no
elif test "$enable_static" = yes; then
2021-01-22 18:14:46 +00:00
enable_delayacct=no
2021-01-22 18:14:59 +00:00
else
m4_ifdef([PKG_PROG_PKG_CONFIG], [
enable_delayacct=yes
PKG_PROG_PKG_CONFIG()
PKG_CHECK_MODULES(LIBNL3, libnl-3.0, [], [enable_delayacct=no])
PKG_CHECK_MODULES(LIBNL3GENL, libnl-genl-3.0, [], [enable_delayacct=no])
if test "$enable_delayacct" = yes; then
CFLAGS="$CFLAGS $LIBNL3_CFLAGS $LIBNL3GENL_CFLAGS"
LIBS="$LIBS $LIBNL3_LIBS $LIBNL3GENL_LIBS"
AC_DEFINE([HAVE_DELAYACCT], [1], [Define if delay accounting support should be enabled.])
fi
], [
enable_delayacct=no
AC_MSG_NOTICE([Linux delay accounting support can not be enabled, cause pkg-config is required for checking its availability])
])
fi
2021-01-22 18:14:46 +00:00
;;
yes)
m4_ifdef([PKG_PROG_PKG_CONFIG], [
PKG_PROG_PKG_CONFIG()
2021-01-22 18:14:55 +00:00
PKG_CHECK_MODULES(LIBNL3, libnl-3.0, [], [AC_MSG_ERROR([can not find required library libnl3])])
PKG_CHECK_MODULES(LIBNL3GENL, libnl-genl-3.0, [], [AC_MSG_ERROR([can not find required library libnl3genl])])
2021-01-22 18:14:46 +00:00
CFLAGS="$CFLAGS $LIBNL3_CFLAGS $LIBNL3GENL_CFLAGS"
LIBS="$LIBS $LIBNL3_LIBS $LIBNL3GENL_LIBS"
AC_DEFINE([HAVE_DELAYACCT], [1], [Define if delay accounting support should be enabled.])
], [
pkg_m4_absent=1
m4_warning([configure is generated without pkg.m4. 'make dist' target will be disabled.])
AC_MSG_ERROR([htop on Linux requires pkg-config for checking delayacct requirements. Please install pkg-config and run ./autogen.sh to rebuild the configure script.])
])
;;
*)
AC_MSG_ERROR([bad value '$enable_delayacct' for --enable-delayacct])
;;
esac
2021-01-22 18:14:50 +00:00
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([sensors],
[AS_HELP_STRING([--enable-sensors],
[enable libsensors support for reading temperature data; requires only libsensors headers at compile time, at runtime libsensors is loaded via dlopen @<:@default=check@:>@])],
[],
[enable_sensors=check])
case "$enable_sensors" in
no)
;;
check)
enable_sensors=yes
2021-01-22 18:14:59 +00:00
if test "$enable_static" = yes; then
AC_CHECK_LIB([sensors], [sensors_init], [], [enable_sensors=no])
fi
2021-01-22 18:14:46 +00:00
AC_CHECK_HEADERS([sensors/sensors.h], [], [enable_sensors=no])
;;
yes)
2021-01-22 18:14:59 +00:00
if test "$enable_static" = yes; then
AC_CHECK_LIB([sensors], [sensors_init], [], [AC_MSG_ERROR([can not find required library libsensors])])
fi
AC_CHECK_HEADERS([sensors/sensors.h], [], [AC_MSG_ERROR([can not find required header file sensors/sensors.h])])
2021-01-22 18:14:46 +00:00
;;
*)
AC_MSG_ERROR([bad value '$enable_sensors' for --enable-sensors])
;;
esac
2020-12-22 19:02:01 +00:00
if test "$enable_sensors" = yes || test "$my_htop_platform" = freebsd; then
AC_DEFINE([BUILD_WITH_CPU_TEMP], [1], [Define if CPU temperature option should be enabled.])
fi
2017-12-04 02:15:29 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# Checks for compiler warnings.
# ----------------------------------------------------------------------
2020-09-10 17:56:33 +00:00
2020-09-08 12:25:46 +00:00
AM_CFLAGS="\
-Wall\
-Wcast-align\
2020-10-04 12:30:35 +00:00
-Wcast-qual\
2020-09-08 12:25:46 +00:00
-Wextra\
2020-09-18 14:58:03 +00:00
-Wfloat-equal\
2020-12-18 14:49:37 +00:00
-Wformat=2\
2021-01-21 18:49:07 +00:00
-Winit-self\
2020-09-08 12:25:46 +00:00
-Wmissing-format-attribute\
-Wmissing-noreturn\
2020-09-25 12:03:55 +00:00
-Wmissing-prototypes\
2020-09-08 12:25:46 +00:00
-Wpointer-arith\
-Wshadow\
-Wstrict-prototypes\
-Wundef\
-Wunused\
-Wwrite-strings"
2021-02-05 14:20:00 +00:00
# FreeBSD uses C11 _Generic in its isnan implementation, even with -std=c99
if test "$my_htop_platform" = freebsd; then
AM_CFLAGS="$AM_CFLAGS -Wno-c11-extensions"
fi
2021-01-22 18:14:50 +00:00
dnl https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
2021-01-22 18:14:53 +00:00
[
2021-01-22 18:14:50 +00:00
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS
2021-08-14 09:21:54 +00:00
AX_CHECK_COMPILE_FLAG([-Wextra-semi-stmt], [AM_CFLAGS="$AM_CFLAGS -Wextra-semi-stmt"], , [-Werror=unknown-warning-option]) dnl the autoconf check itself generates -Wextra-semi-stmt
2021-08-14 09:26:43 +00:00
AX_CHECK_COMPILE_FLAG([-Wimplicit-int-conversion], [AM_CFLAGS="$AM_CFLAGS -Wimplicit-int-conversion"], , [-Werror])
AX_CHECK_COMPILE_FLAG([-Wnull-dereference], [AM_CFLAGS="$AM_CFLAGS -Wnull-dereference"], , [-Werror])
2020-09-18 17:32:41 +00:00
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([werror],
[AS_HELP_STRING([--enable-werror],
[Treat warnings as errors @<:@default=no@:>@])],
[],
[enable_werror=no])
if test "x$enable_werror" = xyes; then
AM_CFLAGS="$AM_CFLAGS -Werror"
fi
2017-12-04 02:15:29 +00:00
2021-01-22 18:14:46 +00:00
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],
2021-02-16 10:22:02 +00:00
[Enable compiling with maximum debug info, asserts and internal sanity checks @<:@default=no@:>@])],
2021-01-22 18:14:46 +00:00
[],
[enable_debug=no])
if test "x$enable_debug" != xyes; then
AM_CPPFLAGS="$AM_CPPFLAGS -DNDEBUG"
2021-02-16 10:22:02 +00:00
else
AM_CPPFLAGS="$AM_CPPFLAGS -ggdb3"
2021-01-22 18:14:46 +00:00
fi
2020-09-17 20:23:05 +00:00
2021-01-22 18:14:50 +00:00
2021-01-22 18:14:46 +00:00
AC_SUBST([AM_CFLAGS])
2020-09-17 20:23:05 +00:00
AC_SUBST([AM_CPPFLAGS])
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
2021-01-22 18:14:46 +00:00
2021-01-22 18:14:50 +00:00
# ----------------------------------------------------------------------
2014-11-20 01:17:16 +00:00
# We're done, let's go!
# ----------------------------------------------------------------------
2021-01-22 18:14:50 +00:00
AC_DEFINE_UNQUOTED([COPYRIGHT], ["(C) 2004-2019 Hisham Muhammad. (C) 2020-2021 htop dev team."], [Copyright message.])
2014-11-24 22:11:33 +00:00
AM_CONDITIONAL([HTOP_LINUX], [test "$my_htop_platform" = linux])
2014-11-27 18:27:34 +00:00
AM_CONDITIONAL([HTOP_FREEBSD], [test "$my_htop_platform" = freebsd])
2017-04-19 14:12:17 +00:00
AM_CONDITIONAL([HTOP_DRAGONFLYBSD], [test "$my_htop_platform" = dragonflybsd])
2021-03-15 07:44:39 +00:00
AM_CONDITIONAL([HTOP_NETBSD], [test "$my_htop_platform" = netbsd])
2015-09-18 04:46:48 +00:00
AM_CONDITIONAL([HTOP_OPENBSD], [test "$my_htop_platform" = openbsd])
2015-07-12 18:47:43 +00:00
AM_CONDITIONAL([HTOP_DARWIN], [test "$my_htop_platform" = darwin])
2018-03-02 21:20:46 +00:00
AM_CONDITIONAL([HTOP_SOLARIS], [test "$my_htop_platform" = solaris])
Add a platform for Performance Co-Pilot (PCP) metrics
This introduces an initial platform for extracting metrics
using the PCP performance metrics API - PMAPI(3). It can
be used via the --enable-pcp=yes configure option.
So far I've added support for live localhost metrics only,
and only using pre-defined metrics already found in htop.
If available, all sampling is performed by pmcd(1) - else,
we fallback to htop doing the metric sampling itself (all
below the PMAPI). When pmcd is used, it may be configured
to run children with elevated privileges, so htop does not
need to be setuid (authentication with pmcd is available).
Additionally, the PMAPI allows us to support archives (for
historical analysis and for automated regression tests in
htop). We'll need platform-specific command line argument
additions, which isn't yet feasible in htop (not difficult
to add though).
The goal of this first version is minimal impact in terms
of modifying the htop codebase, to introduce key ideas in
PCP (metric namespace, metadata, APIs and so on) and give
us something to discuss, experiment with and build on.
2021-02-17 03:43:56 +00:00
AM_CONDITIONAL([HTOP_PCP], [test "$my_htop_platform" = pcp])
2014-11-24 22:11:33 +00:00
AM_CONDITIONAL([HTOP_UNSUPPORTED], [test "$my_htop_platform" = unsupported])
2021-01-22 18:14:53 +00:00
2014-11-24 20:55:03 +00:00
AC_SUBST(my_htop_platform)
2021-08-14 08:35:11 +00:00
AC_CONFIG_FILES([Makefile htop.1])
2006-03-04 18:16:49 +00:00
AC_OUTPUT
2017-07-10 23:14:25 +00:00
2021-01-22 18:14:50 +00:00
if test "$my_htop_platform" = unsupported; then
2017-07-10 23:14:25 +00:00
echo ""
echo "****************************************************************"
echo "WARNING! This platform is not currently supported by htop."
echo ""
echo "The code will build, but it will produce a dummy version of htop"
echo "which shows no processes, using the files from the unsupported/"
echo "directory. This is meant to be a skeleton, to be used as a"
echo "starting point if you are porting htop to a new platform."
echo "****************************************************************"
echo ""
fi
2020-08-28 10:10:31 +00:00
AC_MSG_RESULT([
${PACKAGE_NAME} ${VERSION}
2020-10-05 10:29:31 +00:00
platform: $my_htop_platform
2021-03-02 04:58:11 +00:00
os-release file: $with_os_release
2021-01-22 18:14:46 +00:00
(Linux) proc directory: $with_proc
2020-10-05 10:29:31 +00:00
(Linux) openvz: $enable_openvz
(Linux) vserver: $enable_vserver
(Linux) ancient vserver: $enable_ancient_vserver
(Linux) delay accounting: $enable_delayacct
2021-01-22 18:14:46 +00:00
(Linux) sensors: $enable_sensors
(Linux) capabilities: $enable_capabilities
2020-10-05 10:29:31 +00:00
unicode: $enable_unicode
2021-06-13 09:29:39 +00:00
affinity: $enable_affinity
2021-05-16 18:45:09 +00:00
unwind: $enable_unwind
2020-11-16 12:29:37 +00:00
hwloc: $enable_hwloc
2020-11-16 16:01:51 +00:00
debug: $enable_debug
2021-01-22 18:14:59 +00:00
static: $enable_static
2020-08-28 10:10:31 +00:00
])