configure.ac: Check for qsort_r function before running the test program
authorKalev Lember <kalev@smartlink.ee>
Sun, 5 Jun 2011 11:34:33 +0000 (14:34 +0300)
committerKalev Lember <kalev@smartlink.ee>
Sun, 5 Jun 2011 16:38:47 +0000 (19:38 +0300)
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

index 04a0d05..2f7f804 100644 (file)
@@ -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])