Merged trunk.
[awesomized/libmemcached] / m4 / pandora_stl_hash.m4
1 # Copyright (C) 2008 Sun Microsystems, Inc.
2 # This file is free software; Sun Microsystems, Inc.
3 # gives unlimited permission to copy and/or distribute it,
4 # with or without modifications, as long as this notice is preserved.
5
6 # We check two things: where the include file is for unordered_map, and
7 # what namespace unordered_map lives in within that include file. We
8 # include AC_COMPILE_IFELSE for all the combinations we've seen in the
9 # wild. We define HAVE_UNORDERED_MAP and HAVE_UNORDERED_SET if we have
10 # them, UNORDERED_MAP_H and UNORDERED_SET_H to their location and
11 # UNORDERED_NAMESPACE to be the namespace unordered_map is defined in.
12
13 AC_DEFUN([PANDORA_CXX_STL_UNORDERED],[
14 save_CXXFLAGS="${CXXFLAGS}"
15 CXXFLAGS="${AM_CXXFLAGS} ${CXXFLAGS}"
16 AC_LANG_PUSH(C++)
17 AC_CACHE_CHECK([for STL unordered_map],
18 [pandora_cv_stl_unordered],[
19 AC_COMPILE_IFELSE(
20 [AC_LANG_PROGRAM([[#include <unordered_map>]],
21 [[std::unordered_map<int, int> t]])],
22 [pandora_cv_stl_unordered="yes"],
23 [pandora_cv_stl_unordered="no"])])
24
25 AS_IF([test "x${pandora_cv_stl_unordered}" != "xyes"],[
26 AC_CACHE_CHECK([for tr1 unordered_map],
27 [pandora_cv_tr1_unordered],[
28 AC_COMPILE_IFELSE(
29 [AC_LANG_PROGRAM([[
30 /* We put in this define because of a YACC symbol clash in Drizzle.
31 Seriously... I cannot believe the GCC guys defined a piece of the internals
32 of this named IF - and I can't believe that YACC generates a token define
33 called IF. Really?
34 */
35 #define IF 21;
36 #include <tr1/unordered_map>
37 ]],[[
38 std::tr1::unordered_map<int, int> t
39 ]])],
40 [pandora_cv_tr1_unordered="yes"],
41 [pandora_cv_tr1_unordered="no"])])
42 ])
43
44 AS_IF([test "x${pandora_cv_stl_unordered}" != "xyes" -a "x${pandora_cv_tr1_unordered}" != "xyes"],[
45 AC_CACHE_CHECK([for boost unordered_map],
46 [pandora_cv_boost_unordered],[
47 AC_COMPILE_IFELSE(
48 [AC_LANG_PROGRAM([[#include <boost/unordered_map.hpp>]],
49 [[boost::unordered_map<int, int> t]])],
50 [pandora_cv_boost_unordered="yes"],
51 [pandora_cv_boost_unordered="no"])])
52 ])
53
54 CXXFLAGS="${save_CXXFLAGS}"
55 AC_LANG_POP()
56
57 AS_IF([test "x${pandora_cv_stl_unordered}" = "xyes"],[
58 AC_DEFINE(HAVE_STD_UNORDERED_MAP, 1,
59 [if the compiler has std::unordered_map])
60 AC_DEFINE(HAVE_STD_UNORDERED_SET, 1,
61 [if the compiler has std::unordered_set])
62 pandora_has_unordered=yes
63 ])
64 AS_IF([test "x${pandora_cv_tr1_unordered}" = "xyes"],[
65 AC_DEFINE(HAVE_TR1_UNORDERED_MAP, 1,
66 [if the compiler has std::tr1::unordered_map])
67 AC_DEFINE(HAVE_TR1_UNORDERED_SET, 1,
68 [if the compiler has std::tr1::unordered_set])
69 pandora_has_unordered=yes
70 ])
71 AS_IF([test "x${pandora_cv_boost_unordered}" = "xyes"],[
72 AC_DEFINE(HAVE_BOOST_UNORDERED_MAP, 1,
73 [if the compiler has boost::unordered_map])
74 AC_DEFINE(HAVE_BOOST_UNORDERED_SET, 1,
75 [if the compiler has boost::unordered_set])
76 pandora_has_unordered=yes
77 ])
78
79 AS_IF([test "x${pandora_has_unordered}" != "xyes"],[
80 AC_MSG_WARN([could not find an STL unordered_map])
81 ])
82 ])
83
84 AC_DEFUN([PANDORA_HAVE_CXX_UNORDERED],[
85 AC_REQUIRE([PANDORA_CXX_STL_UNORDERED])
86 ])
87
88 AC_DEFUN([PANDORA_REQUIRE_CXX_UNORDERED],[
89 AC_REQUIRE([PANDORA_HAVE_CXX_UNORDERED])
90 AS_IF([test "x${pandora_has_unordered}" != "xyes"],[
91 AC_MSG_ERROR([An STL compliant unordered_map is required for ${PACKAGE}.
92 Implementations can be found in Recent versions of gcc and in boost])
93 ])
94 ])