aboutsummaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-02-16 11:20:50 +0100
committerChristian Grothoff <christian@grothoff.org>2017-02-16 11:20:50 +0100
commit82d65c48edbccca45bd6851879aa69c629a024b7 (patch)
treec986a99abe827bfcf6c2ca6fbec2e9355241c6ff /m4
parentf154b0ef8894185fd6c01888d10280049bed10c6 (diff)
downloadlibmicrohttpd-82d65c48edbccca45bd6851879aa69c629a024b7.tar.gz
libmicrohttpd-82d65c48edbccca45bd6851879aa69c629a024b7.zip
replace tsearch test with code from gnulib, to hopefully address silviprog's android problems
Diffstat (limited to 'm4')
-rw-r--r--m4/search_h.m460
-rw-r--r--m4/tsearch.m459
2 files changed, 119 insertions, 0 deletions
diff --git a/m4/search_h.m4 b/m4/search_h.m4
new file mode 100644
index 00000000..6aaaf36e
--- /dev/null
+++ b/m4/search_h.m4
@@ -0,0 +1,60 @@
1# search_h.m4 serial 9
2dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN([gl_SEARCH_H],
8[
9 AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
10 gl_CHECK_NEXT_HEADERS([search.h])
11 if test $ac_cv_header_search_h = yes; then
12 HAVE_SEARCH_H=1
13 else
14 HAVE_SEARCH_H=0
15 fi
16 AC_SUBST([HAVE_SEARCH_H])
17
18 if test $HAVE_SEARCH_H = 1; then
19 AC_CACHE_CHECK([for type VISIT], [gl_cv_type_VISIT],
20 [AC_COMPILE_IFELSE(
21 [AC_LANG_PROGRAM(
22 [[#if HAVE_SEARCH_H
23 #include <search.h>
24 #endif
25 ]],
26 [[static VISIT x; x = postorder;]])],
27 [gl_cv_type_VISIT=yes],
28 [gl_cv_type_VISIT=no])])
29 else
30 gl_cv_type_VISIT=no
31 fi
32 if test $gl_cv_type_VISIT = yes; then
33 HAVE_TYPE_VISIT=1
34 else
35 HAVE_TYPE_VISIT=0
36 fi
37 AC_SUBST([HAVE_TYPE_VISIT])
38
39 dnl Check for declarations of anything we want to poison if the
40 dnl corresponding gnulib module is not in use.
41 gl_WARN_ON_USE_PREPARE([[#include <search.h>
42 ]], [tdelete tfind tsearch twalk])
43])
44
45AC_DEFUN([gl_SEARCH_MODULE_INDICATOR],
46[
47 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
48 AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
49 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
50 dnl Define it also as a C macro, for the benefit of the unit tests.
51 gl_MODULE_INDICATOR_FOR_TESTS([$1])
52])
53
54AC_DEFUN([gl_SEARCH_H_DEFAULTS],
55[
56 GNULIB_TSEARCH=0; AC_SUBST([GNULIB_TSEARCH])
57 dnl Assume proper GNU behavior unless another module says otherwise.
58 HAVE_TSEARCH=1; AC_SUBST([HAVE_TSEARCH])
59 REPLACE_TSEARCH=0; AC_SUBST([REPLACE_TSEARCH])
60])
diff --git a/m4/tsearch.m4 b/m4/tsearch.m4
new file mode 100644
index 00000000..24b35ce2
--- /dev/null
+++ b/m4/tsearch.m4
@@ -0,0 +1,59 @@
1# tsearch.m4 serial 6
2dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN([gl_FUNC_TSEARCH],
8[
9 AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
10 AC_CHECK_FUNCS([tsearch])
11 if test $ac_cv_func_tsearch = yes; then
12 dnl On OpenBSD 4.0, the return value of tdelete() is incorrect.
13 AC_REQUIRE([AC_PROG_CC])
14 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
15 AC_CACHE_CHECK([whether tdelete works], [gl_cv_func_tdelete_works],
16 [
17 AC_RUN_IFELSE([AC_LANG_SOURCE([[
18#include <stddef.h>
19#include <search.h>
20static int
21cmp_fn (const void *a, const void *b)
22{
23 return *(const int *) a - *(const int *) b;
24}
25int
26main ()
27{
28 int result = 0;
29 int x = 0;
30 void *root = NULL;
31 if (!(tfind (&x, &root, cmp_fn) == NULL))
32 result |= 1;
33 tsearch (&x, &root, cmp_fn);
34 if (!(tfind (&x, &root, cmp_fn) != NULL))
35 result |= 2;
36 if (!(tdelete (&x, &root, cmp_fn) != NULL))
37 result |= 4;
38 return result;
39}]])], [gl_cv_func_tdelete_works=yes], [gl_cv_func_tdelete_works=no],
40 [case "$host_os" in
41 openbsd*) gl_cv_func_tdelete_works="guessing no";;
42 *) gl_cv_func_tdelete_works="guessing yes";;
43 esac
44 ])
45 ])
46 case "$gl_cv_func_tdelete_works" in
47 *no)
48 REPLACE_TSEARCH=1
49 ;;
50 esac
51 else
52 HAVE_TSEARCH=0
53 fi
54])
55
56# Prerequisites of lib/tsearch.c.
57AC_DEFUN([gl_PREREQ_TSEARCH], [
58 :
59])