123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- From f37d178d5c25c547835d054fbb1eda32c25034b3 Mon Sep 17 00:00:00 2001
- From: Craig Small <csmall@dropbear.xyz>
- Date: Mon, 30 Sep 2024 17:26:01 +1000
- Subject: [PATCH] build-sys: Fix pidfd_open checking
- The previous build setup would check for pidfd_open using
- AC_CHECK_FUNC and would be incorrectly reported as true.
- Also, if pidfd_open() and __NR_pidfd_open were not present,
- pidwait would silently not be built.
- So, changes:
- compile a small programin using pidfd_open to test it properly
- conditionally try to find NR_pidfd_open if the function fails
- complain if neither are present
- have --disable-pidwait configure option so you are explicit in
- not wanting and knowing you wont get pidwait
- References:
- #352
- commit d9c3e3676d86094abaa239b3218f57bf49d70b4f
- commit 17f94796a9b3c4f1ff28829107a82107dcb362b4
- Signed-off-by: Craig Small <csmall@dropbear.xyz>
- Upstream: https://gitlab.com/procps-ng/procps/-/commit/2507bc475782ff5e0541d37c780dff1e293c9553
- Signed-off-by: Scott Fan <fancp2007@gmail.com>
- [Scott: backported to version 4.0.4]
- ---
- configure.ac | 45 ++++++++++++++++++++++++++++++---------------
- 1 file changed, 30 insertions(+), 15 deletions(-)
- diff --git a/configure.ac b/configure.ac
- index fec27e3f..0719fcd1 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -170,21 +170,6 @@ AC_TRY_COMPILE([#include <errno.h>],
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no))
-
- -AC_CHECK_FUNC([pidfd_open], [enable_pidwait=yes], [
- - AC_MSG_CHECKING([for __NR_pidfd_open])
- - AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- -#include <sys/syscall.h>
- -#ifndef __NR_pidfd_open
- -#error __NR_pidfd_open not defined
- -#endif
- - ])], [enable_pidwait=yes], [enable_pidwait=no])
- - AC_MSG_RESULT([$enable_pidwait])
- -])
- -if test "$enable_pidwait" = yes; then
- - AC_DEFINE([ENABLE_PIDWAIT], [1], [Enable pidwait])
- -fi
- -AM_CONDITIONAL([BUILD_PIDWAIT], [test x$enable_pidwait = xyes])
- -
- dnl watch8bit must be before the AC_ARG_WITH set as it sets up ncurses
- AC_SUBST([WITH_WATCH8BIT])
- AC_ARG_ENABLE([watch8bit],
- @@ -321,6 +306,36 @@ AC_ARG_ENABLE([pidof],
- )
- AM_CONDITIONAL(BUILD_PIDOF, test "x$enable_pidof" = xyes)
-
- +# If pidwait is enabled, we need either pidfd_open() or __NR_pidfd_open need to be defined
- +# Cannot use AC_CHECK_FUNC as it (incorrectly) passes with pidfd_open missing
- +AC_ARG_ENABLE([pidwait],
- + AS_HELP_STRING([--disable-pidwait], [do not build pidwait]),
- + [], [
- + enable_pidwait=yes
- + AC_DEFINE(ENABLE_PIDWAIT, 1, [enable pidwait])
- + ]
- +)
- +AM_CONDITIONAL(BUILD_PIDWAIT, test "x$enable_pidwait" = xyes)
- +AC_MSG_CHECKING([for pidfd_open()])
- +AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ [pidfd_open(1,1)]]])],
- + have_pidfd_open=yes; AC_MSG_RESULT([yes]) ,
- + have_pidfd_open=no; AC_MSG_RESULT([no])
- + )
- +
- +AS_IF([[test "x$enable_pidwait" = xyes -a "x$have_pidfd_open" = xno]],
- + AC_MSG_CHECKING([for __NR_pidfd_open])
- + AC_COMPILE_IFELSE([AC_LANG_SOURCE([
- +#include <sys/syscall.h>
- +#ifndef __NR_pidfd_open
- +#error __NR_pidfd_open not defined
- +#endif
- + ])],
- + AC_MSG_RESULT([yes]),
- + AC_MSG_RESULT([no])
- + AC_MSG_ERROR([Neither pidfd_open or __NR_pidfd_open found. Disable pidwait with configure option --disable-pidwait])
- + )
- + ,[])
- +
- AC_ARG_ENABLE([kill],
- AS_HELP_STRING([--disable-kill], [do not build kill]),
- [], [enable_kill=yes]
- --
- 2.43.0
|