From 03441e406c65cdf8fe56e75aa386b5a04235e203 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Sun, 5 Jun 2011 14:34:33 +0300 Subject: [PATCH] configure.ac: Check for qsort_r function before running the test program When cross compiling, test programs cannot be run. In order to make it easier to cross compile for targets that do not have qsort_r(), check for the function before trying to run the test program. This avoid having to populate cache with glib_cv_have_qsort_r=no with e.g. mingw cross compiler. https://bugzilla.gnome.org/show_bug.cgi?id=651920 --- configure.ac | 59 +++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 28 deletions(-) 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])