From c051ca93273e23937774145a92e4b176a303c44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Buchm=C3=BCller?= Date: Thu, 11 Jun 2020 13:53:50 +0200 Subject: [PATCH] tacacs: fix musl build --- .../files/no-reap-child-test-no-nsl.patch | 145 ++++++++++++++++++ srcpkgs/tacacs/template | 9 +- 2 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 srcpkgs/tacacs/files/no-reap-child-test-no-nsl.patch diff --git a/srcpkgs/tacacs/files/no-reap-child-test-no-nsl.patch b/srcpkgs/tacacs/files/no-reap-child-test-no-nsl.patch new file mode 100644 index 0000000000..508a04530d --- /dev/null +++ b/srcpkgs/tacacs/files/no-reap-child-test-no-nsl.patch @@ -0,0 +1,145 @@ +Source: @pullmoll +Upstream: no +Reason: The test whether child processes need to be reaped makes the + x86_64-musl build hang forever. For now simply assume we need + the same as glibc for musl and always add "#define REAPCHILD 1" + and also "#define REAPSIGIGN 1" to confdefs.h + Also remove the "-lnsl" from the LIBS for musl. + +--- configure.orig 2015-01-06 22:55:35.000000000 +0100 ++++ configure 2020-06-11 13:26:11.442527446 +0200 +@@ -3289,7 +3289,7 @@ + # existence of libnsl instead of hard-coding + CPPFLAGS="$CFLAGS -I/usr/local/include"; export CPPFLAGS + LDFLAGS="$LDFLAGS -L/usr/local/lib -L/lib"; export LDFLAGS +- LIBS="-lnsl -lcrypt $LIBS"; export LIBS ++ LIBS="-lcrypt $LIBS"; export LIBS + $as_echo "#define LINUX 1" >>confdefs.h + + +@@ -15400,122 +15400,9 @@ + fi + + +-# Check for need to reap children when the default is to ignore SIGCHLD +- +- +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if children need to be reaped" >&5 +-$as_echo_n "checking if children need to be reaped... " >&6; } +-if test "$cross_compiling" = yes; then : +- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tac_plus may be less efficient when cross-compiled" >&5 +-$as_echo "$as_me: WARNING: tac_plus may be less efficient when cross-compiled" >&2;} +- $as_echo "#define REAPCHILD 1" >>confdefs.h +- +-else +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include +-#if HAVE_STDLIB_H +-#include +-#endif +-#if HAVE_UNISTD_H +-#include +-#endif +-#if HAVE_SYS_WAIT_H +-#include +-#endif +-#if HAVE_SYS_RESOURCE_H +-#include +-#endif +-#include +-pid_t child, pid; +-int main() +-{ +- int status; +- child = vfork(); +- if (child == 0) +- exit(1); +-#if HAVE_WAIT4 +- pid = wait4(child, &status, WNOHANG, NULL); +-#else +- do { +- pid = wait3(&status, WNOHANG, NULL); +- } while (pid != child && pid != -1); +-#endif +- if (pid == -1 && errno == ECHILD) +- exit(0); +- exit(114); +-} +-_ACEOF +-if ac_fn_c_try_run "$LINENO"; then : +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +-else +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; } +- $as_echo "#define REAPCHILD 1" >>confdefs.h +- +- # try again with SIG_IGN +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if children need to be reaped with SIG_IGN" >&5 +-$as_echo_n "checking if children need to be reaped with SIG_IGN... " >&6; } +- if test "$cross_compiling" = yes; then : +- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +-as_fn_error $? "cannot run test program while cross compiling +-See \`config.log' for more details" "$LINENO" 5; } +-else +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +-#include +-#if HAVE_STDLIB_H +-#include +-#endif +-#if HAVE_UNISTD_H +-#include +-#endif +-#if HAVE_SYS_WAIT_H +-#include +-#endif +-#if HAVE_SYS_RESOURCE_H +-#include +-#endif +-#include +-pid_t child, pid; +-int main() +-{ +- int status; +- signal(SIGCHLD, SIG_IGN); +- child = vfork(); +- if (child == 0) +- exit(1); +-#if HAVE_WAIT4 +- pid = wait4(child, &status, WNOHANG, NULL); +-#else +- do { +- pid = wait3(&status, WNOHANG, NULL); +- } while (pid != child && pid != -1); +-#endif +- if (pid == -1 && errno == ECHILD) +- exit(0); +- exit(114); +-} +-_ACEOF +-if ac_fn_c_try_run "$LINENO"; then : +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +-else +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; };$as_echo "#define REAPSIGIGN 1" >>confdefs.h +- +-fi +-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ +- conftest.$ac_objext conftest.beam conftest.$ac_ext +-fi +- +-fi +-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ +- conftest.$ac_objext conftest.beam conftest.$ac_ext +-fi +- ++# Always define REAPCHILD and REAPSIGIGN for musl ++$as_echo "#define REAPCHILD 1" >>confdefs.h ++$as_echo "#define REAPSIGIGN 1" >>confdefs.h + + # Find an appropriate tar for use in "dist" targets. A "best guess" + # is good enough -- if we can't find GNU tar, we don't really care. diff --git a/srcpkgs/tacacs/template b/srcpkgs/tacacs/template index 1f488b701d..d0cc7cce10 100644 --- a/srcpkgs/tacacs/template +++ b/srcpkgs/tacacs/template @@ -15,13 +15,10 @@ checksum=147f2dc98d26d2f93f0aba76c988ced196ffe1c001dc2e91f788a1a2c747219e python_version=2 disable_parallel_build=yes -if [ -z "$CROSS_BUILD" -a "$XBPS_MACHINE" = "x86_64-musl" ]; then - broken="Hangs when configure tests if children need to be reaped" -fi - pre_configure() { - # -lnsl is not required w/o libwrap and prevents musl builds; rip it out - sed -i configure -e "s;-lnsl ;;g" + if [ "$XBPS_TARGET_LIBC" = "musl" ]; then + patch -Np0 -i ${FILESDIR}/no-reap-child-test-no-nsl.patch + fi } post_install() {