diff --git a/configure.ac b/configure.ac index 04a0d05d7..2f7f8040c 100644 --- a/configure.ac +++ b/configure.ac @@ -579,40 +579,43 @@ AC_HEADER_STDC AC_FUNC_VPRINTF AC_FUNC_ALLOCA AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2) -AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r) +AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r qsort_r) + # BSD has a qsort_r with wrong argument order -AC_CACHE_CHECK([for qsort_r], glib_cv_have_qsort_r, [ -AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#define _GNU_SOURCE -#include +if test x$ac_cv_func_qsort_r = xyes ; then + AC_CACHE_CHECK([if qsort_r uses glibc compatible argument order], glib_cv_have_qsort_r, [ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #define _GNU_SOURCE + #include -static int -cmp (const void *a, const void *b, void *c) -{ - const int *ia = a; - const int *ib = b; + static int + cmp (const void *a, const void *b, void *c) + { + const int *ia = a; + const int *ib = b; - if (*ia < *ib) - return -1; - else if (*ia > *ib) - return 1; - else - return 0; -} + if (*ia < *ib) + return -1; + else if (*ia > *ib) + return 1; + else + return 0; + } -int -main (int argc, char **argv) -{ - int arr[3] = { 1, 2, 0 }; - int d = 3; + int + main (int argc, char **argv) + { + int arr[3] = { 1, 2, 0 }; + int d = 3; - qsort_r (arr, 3, sizeof (int), cmp, &d); + qsort_r (arr, 3, sizeof (int), cmp, &d); - if (arr[0] == 0 && arr[1] == 1 && arr[2] == 2) - return 0; - else - return 1; -}]])],[glib_cv_have_qsort_r=yes],[glib_cv_have_qsort_r=no])]) + if (arr[0] == 0 && arr[1] == 1 && arr[2] == 2) + return 0; + else + return 1; + }]])],[glib_cv_have_qsort_r=yes],[glib_cv_have_qsort_r=no])]) +fi if test x$glib_cv_have_qsort_r = xyes ; then AC_DEFINE(HAVE_QSORT_R, 1, [Define to 1 if you have the 'qsort_r' function])