From: Guillem Jover Date: Fri, 26 May 2023 21:55:40 +0000 (+0200) Subject: build: Refactor GNU .init_array support check into a new m4 function X-Git-Tag: 0.11.8~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f41d6c12aacabc3dae5fdd45c50de6a967af8a88;p=thirdparty%2Flibbsd.git build: Refactor GNU .init_array support check into a new m4 function --- diff --git a/configure.ac b/configure.ac index 40d25b9..8ff2bef 100644 --- a/configure.ac +++ b/configure.ac @@ -184,49 +184,7 @@ AC_CHECK_DECLS([environ], [], [], [[ #include ]]) -AC_CACHE_CHECK([for GNU .init_array section support], - [libbsd_cv_gnu_init_array_support], [ - AC_RUN_IFELSE([ - AC_LANG_SOURCE([[ -static int rc = 1; -static void init(int argc) { if (argc == 1) rc = 0; } -void (*init_func)(int argc) __attribute__((__section__(".init_array"), __used__)) = init; -int main() { return rc; } - ]]) - ], [ - libbsd_cv_gnu_init_array_support=yes - ], [ - libbsd_cv_gnu_init_array_support=no - ], [ - AC_PREPROC_IFELSE([ - AC_LANG_SOURCE([[ -/* Look for a known libc that supports .init_array with the GNU extension - * to pass main() arguments to the init functions. */ -#include -#if defined __GLIBC_PREREQ -# if __GLIBC_PREREQ(2, 4) -/* glibc supports GNU .init_array since 2.4. */ -# else -# error glibc does not support GNU .init_array -# endif -#else -/* - * Basic SysV ABI .init_array support, init functions do not get arguments: - * - Bionic since its inception. - * - uClibc since 0.9.29. - */ -# error unknown whether libc supports GNU .init_array -#endif - ]]) - ], [ - libbsd_cv_gnu_init_array_support=yes - ], [ - libbsd_cv_gnu_init_array_support=no - ]) - ]) -]) -AM_CONDITIONAL([BUILD_LIBBSD_CTOR], - [test "$libbsd_cv_gnu_init_array_support" = yes]) +LIBBSD_HAS_GNU_INIT_ARRAY # Checks for library functions. AC_MSG_CHECKING([for program_invocation_short_name]) diff --git a/m4/libbsd-compiler.m4 b/m4/libbsd-compiler.m4 index b655b83..dd8fbeb 100644 --- a/m4/libbsd-compiler.m4 +++ b/m4/libbsd-compiler.m4 @@ -22,3 +22,51 @@ AC_DEFUN([LIBBSD_CHECK_COMPILER_FLAG], [ ]) AS_VAR_POPDEF([libbsd_varname_cache]) ]) + +# LIBBSD_HAS_GNU_INIT_ARRAY +# ------------------------- +AC_DEFUN([LIBBSD_HAS_GNU_INIT_ARRAY], [ + AC_CACHE_CHECK([for GNU .init_array section support], + [libbsd_cv_gnu_init_array_support], [ + AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ +static int rc = 1; +static void init(int argc) { if (argc == 1) rc = 0; } +void (*init_func)(int argc) __attribute__((__section__(".init_array"), __used__)) = init; +int main() { return rc; } + ]]) + ], [ + libbsd_cv_gnu_init_array_support=yes + ], [ + libbsd_cv_gnu_init_array_support=no + ], [ + AC_PREPROC_IFELSE([ + AC_LANG_SOURCE([[ +/* Look for a known libc that supports .init_array with the GNU extension + * to pass main() arguments to the init functions. */ +#include +#if defined __GLIBC_PREREQ +# if __GLIBC_PREREQ(2, 4) +/* glibc supports GNU .init_array since 2.4. */ +# else +# error glibc does not support GNU .init_array +# endif +#else +/* + * Basic SysV ABI .init_array support, init functions do not get arguments: + * - Bionic since its inception. + * - uClibc since 0.9.29. + */ +# error unknown whether libc supports GNU .init_array +#endif + ]]) + ], [ + libbsd_cv_gnu_init_array_support=yes + ], [ + libbsd_cv_gnu_init_array_support=no + ]) + ]) + ]) + AM_CONDITIONAL([BUILD_LIBBSD_CTOR], + [test "$libbsd_cv_gnu_init_array_support" = yes]) +])