aboutsummaryrefslogtreecommitdiff
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
parentf154b0ef8894185fd6c01888d10280049bed10c6 (diff)
downloadlibmicrohttpd-82d65c48edbccca45bd6851879aa69c629a024b7.tar.gz
libmicrohttpd-82d65c48edbccca45bd6851879aa69c629a024b7.zip
replace tsearch test with code from gnulib, to hopefully address silviprog's android problems
-rw-r--r--ChangeLog3
-rw-r--r--configure.ac8
-rw-r--r--m4/search_h.m460
-rw-r--r--m4/tsearch.m459
4 files changed, 127 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 1d61f64a..7b876ad2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
1Thu Feb 16 11:20:05 CET 2017
2 Replace tsearch configure check with code from gnulib. -CG
3
1Wed Feb 15 13:35:36 CET 2017 4Wed Feb 15 13:35:36 CET 2017
2 Fixing a few very rare race conditions for thread-pool or 5 Fixing a few very rare race conditions for thread-pool or
3 thread-per-connection operations during shutdown. 6 thread-per-connection operations during shutdown.
diff --git a/configure.ac b/configure.ac
index 22a91aaf..5f26a61b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
1# This file is part of libmicrohttpd. 1# This file is part of libmicrohttpd.
2# (C) 2006-2015 Christian Grothoff (and other contributing authors) 2# (C) 2006-2017 Christian Grothoff (and other contributing authors)
3# 3#
4# libmicrohttpd is free software; you can redistribute it and/or modify 4# libmicrohttpd is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published 5# it under the terms of the GNU General Public License as published
@@ -695,12 +695,14 @@ fi
695AC_CHECK_HEADERS([fcntl.h math.h errno.h limits.h stdio.h locale.h sys/stat.h sys/types.h], [], [AC_MSG_ERROR([Compiling libmicrohttpd requires standard UNIX headers files])], [AC_INCLUDES_DEFAULT]) 695AC_CHECK_HEADERS([fcntl.h math.h errno.h limits.h stdio.h locale.h sys/stat.h sys/types.h], [], [AC_MSG_ERROR([Compiling libmicrohttpd requires standard UNIX headers files])], [AC_INCLUDES_DEFAULT])
696 696
697# Check for optional headers 697# Check for optional headers
698AC_CHECK_HEADERS([sys/types.h sys/time.h sys/msg.h time.h sys/mman.h search.h sys/ioctl.h \ 698AC_CHECK_HEADERS([sys/types.h sys/time.h sys/msg.h time.h sys/mman.h sys/ioctl.h \
699 sys/socket.h sys/select.h netdb.h netinet/in.h netinet/ip.h netinet/tcp.h arpa/inet.h \ 699 sys/socket.h sys/select.h netdb.h netinet/in.h netinet/ip.h netinet/tcp.h arpa/inet.h \
700 endian.h machine/endian.h sys/endian.h sys/param.h sys/machine.h sys/byteorder.h machine/param.h sys/isa_defs.h \ 700 endian.h machine/endian.h sys/endian.h sys/param.h sys/machine.h sys/byteorder.h machine/param.h sys/isa_defs.h \
701 inttypes.h stddef.h unistd.h \ 701 inttypes.h stddef.h unistd.h \
702 sockLib.h inetLib.h net/if.h], [], [], [AC_INCLUDES_DEFAULT]) 702 sockLib.h inetLib.h net/if.h], [], [], [AC_INCLUDES_DEFAULT])
703AM_CONDITIONAL([HAVE_TSEARCH], [test "x$ac_cv_header_search_h" = "xyes"]) 703
704gl_FUNC_TSEARCH
705AM_CONDITIONAL([HAVE_TSEARCH], [test "x$HAVE_TSEARCH" = "x1"])
704 706
705# Check for generic functions 707# Check for generic functions
706AC_CHECK_FUNCS([rand random]) 708AC_CHECK_FUNCS([rand random])
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])