[glib] configure.ac: Check for qsort_r function before running the test program



commit 03441e406c65cdf8fe56e75aa386b5a04235e203
Author: Kalev Lember <kalev smartlink ee>
Date:   Sun Jun 5 14:34:33 2011 +0300

    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 |   69 ++++++++++++++++++++++++++++++---------------------------
 1 files changed, 36 insertions(+), 33 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 04a0d05..2f7f804 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)
-# 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 <stdlib.h>
-
-static int
-cmp (const void *a, const void *b, void *c)
-{
-  const int *ia = a;
-  const int *ib = b;
+AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r qsort_r)
 
-  if (*ia < *ib)
-    return -1;
-  else if (*ia > *ib)
-    return 1;
-  else
-    return 0;
-}
+# BSD has a qsort_r with wrong argument order
+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 <stdlib.h>
+
+  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;
+  }
 
-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])



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]