[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cross-compilation guesses (4)
From: |
Bruno Haible |
Subject: |
cross-compilation guesses (4) |
Date: |
Tue, 01 May 2012 23:21 +0200 |
User-agent: |
KMail/4.7.4 (Linux/3.1.10-1.9-desktop; KDE/4.7.4; x86_64; ; ) |
When cross-compiling, configure says:
checking for working getgroups... no
Here's a proposed patch for improving this in gnulib. Again, would it be
better to modify AC_FUNC_GETGROUPS in Autoconf?
2012-05-01 Bruno Haible <address@hidden>
getgroups: Avoid "guessing no" when cross-compiling to glibc systems.
* m4/getgroups.m4 (gl_FUNC_GETGROUPS): When cross-compiling, set
ac_cv_func_getgroups_works without invoking AC_FUNC_GETGROUPS.
--- m4/getgroups.m4.orig Tue May 1 23:17:52 2012
+++ m4/getgroups.m4 Tue May 1 23:17:30 2012
@@ -1,4 +1,4 @@
-# serial 17
+# serial 18
dnl From Jim Meyering.
dnl A wrapper around AC_FUNC_GETGROUPS.
@@ -11,40 +11,64 @@
AC_DEFUN([gl_FUNC_GETGROUPS],
[
- AC_REQUIRE([AC_FUNC_GETGROUPS])
AC_REQUIRE([AC_TYPE_GETGROUPS])
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ AC_CHECK_FUNCS([getgroups])
if test "$ac_cv_func_getgroups" != yes; then
HAVE_GETGROUPS=0
- elif test "$ac_cv_func_getgroups_works.$ac_cv_type_getgroups" != yes.gid_t
- then
- REPLACE_GETGROUPS=1
- AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if
- getgroups(0,NULL) does not return the number of groups.])
else
- dnl Detect FreeBSD bug; POSIX requires getgroups(-1,ptr) to fail.
- AC_CACHE_CHECK([whether getgroups handles negative values],
- [gl_cv_func_getgroups_works],
- [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
- [[int size = getgroups (0, 0);
- gid_t *list = malloc (size * sizeof *list);
- return getgroups (-1, list) != -1;]])],
- [gl_cv_func_getgroups_works=yes],
- [gl_cv_func_getgroups_works=no],
- [case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu*) gl_cv_func_getgroups_works="guessing yes" ;;
- # If we don't know, assume the worst.
- *) gl_cv_func_getgroups_works="guessing no" ;;
- esac
- ])])
- case "$gl_cv_func_getgroups_works" in
- *yes) ;;
- *)
- REPLACE_GETGROUPS=1
+ if test $cross_compiling = no; then
+ AC_FUNC_GETGROUPS
+ else
+ dnl Improved cross-compilation guess.
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) ac_cv_func_getgroups_works="guessing yes" ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_getgroups_works="guessing no" ;;
+ esac
+ fi
+ case "$ac_cv_func_getgroups" in
+ *yes)
+ AC_DEFINE([HAVE_GETGROUPS], [1],
+ [Define to 1 if your system has a working 'getgroups' function.])
;;
esac
+ if test "$ac_cv_type_getgroups" != gid_t \
+ || { case "$ac_cv_func_getgroups_works in
+ *yes) false;;
+ *) true;;
+ esac
+ }; then
+ REPLACE_GETGROUPS=1
+ AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if
+ getgroups(0,NULL) does not return the number of groups.])
+ else
+ dnl Detect FreeBSD bug; POSIX requires getgroups(-1,ptr) to fail.
+ AC_CACHE_CHECK([whether getgroups handles negative values],
+ [gl_cv_func_getgroups_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [[int size = getgroups (0, 0);
+ gid_t *list = malloc (size * sizeof *list);
+ return getgroups (-1, list) != -1;]])],
+ [gl_cv_func_getgroups_works=yes],
+ [gl_cv_func_getgroups_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_getgroups_works="guessing yes" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_getgroups_works="guessing no" ;;
+ esac
+ ])])
+ case "$gl_cv_func_getgroups_works" in
+ *yes) ;;
+ *)
+ REPLACE_GETGROUPS=1
+ ;;
+ esac
+ fi
fi
test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
])