]> Savannah Git Hosting - gnulib.git/commitdiff
qsort_r: new module, for GNU-style qsort_r
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 Sep 2014 15:59:18 +0000 (08:59 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 15 Sep 2014 15:59:18 +0000 (08:59 -0700)
* m4/qsort_r.m4: New file.  Forgot to add this earlier.

ChangeLog
m4/qsort_r.m4 [new file with mode: 0644]

index 3748237150d68532bbfa1068893f31c77ea8cd50..689d21b88de6bc663ef35751b38e9152bd0888fd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       qsort_r: new module, for GNU-style qsort_r
+       * m4/qsort_r.m4: New file.  Forgot to add this earlier.
+
 2014-09-15  Werner LEMBERG  <wl@gnu.org>
 
        strerror_r-posix: support compilation with C++
diff --git a/m4/qsort_r.m4 b/m4/qsort_r.m4
new file mode 100644 (file)
index 0000000..c4576f4
--- /dev/null
@@ -0,0 +1,48 @@
+dnl Reentrant sort function.
+
+dnl Copyright 2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_FUNC_QSORT_R],
+[
+  dnl Persuade glibc to declare qsort_r.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+
+  AC_CACHE_CHECK([for qsort_r signature], [gl_cv_qsort_r_signature],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([[#include <stdlib.h>
+                          void qsort_r (void *, size_t, size_t,
+                                        int (*) (void const *, void const *,
+                                                 void *),
+                                        void *);
+                          void (*p) (void *, size_t, size_t,
+                                     int (*) (void const *, void const *,
+                                              void *),
+                                     void *) = qsort_r;
+                        ]])],
+       [gl_cv_qsort_r_signature=GNU],
+       [AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM([[#include <stdlib.h>
+                             void qsort_r (void *, size_t, size_t, void *,
+                                           int (*) (void *,
+                                                    void const *,
+                                                    void const *));
+                             void (*p) (void *, size_t, size_t, void *,
+                                        int (*) (void *, void const *,
+                                                 void const *)) = qsort_r;
+                           ]])],
+          [gl_cv_qsort_r_signature=BSD],
+          [gl_cv_qsort_r_signature=no])])])
+
+  case $gl_cv_qsort_r_signature in
+    GNU) HAVE_QSORT_R=1;;
+    BSD) HAVE_QSORT_R=1 REPLACE_QSORT_R=1;;
+    *)   HAVE_QSORT_R=0 REPLACE_QSORT_R=1;;
+  esac
+])