changeset 37440:9142bbd14c01

qsort_r: new module, for GNU-style qsort_r * m4/qsort_r.m4: New file. Forgot to add this earlier.
author Paul Eggert <eggert@cs.ucla.edu>
date Mon, 15 Sep 2014 08:59:18 -0700
parents 54c651f31def
children e7f9dc96f2d6
files ChangeLog m4/qsort_r.m4
diffstat 2 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Sep 15 13:41:57 2014 +0100
+++ b/ChangeLog	Mon Sep 15 08:59:18 2014 -0700
@@ -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++
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/qsort_r.m4	Mon Sep 15 08:59:18 2014 -0700
@@ -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
+])