From f37d178d5c25c547835d054fbb1eda32c25034b3 Mon Sep 17 00:00:00 2001 From: Craig Small 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 Upstream: https://gitlab.com/procps-ng/procps/-/commit/2507bc475782ff5e0541d37c780dff1e293c9553 Signed-off-by: Scott Fan [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 ], 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 -#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 +#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