~drizzle-trunk/drizzle/development

1429.3.1 by Monty Taylor
Use unordered_map from the upcoming c++0x standard instead of a homemade
1
# We check two things: where the include file is for unordered_map, and
2
# what namespace unordered_map lives in within that include file.  We
942.1.1 by Monty Taylor
Started transitioning from AC_TRY_COMPILE to AC_COMPILE_IFELSE
3
# include AC_COMPILE_IFELSE for all the combinations we've seen in the
1429.3.1 by Monty Taylor
Use unordered_map from the upcoming c++0x standard instead of a homemade
4
# wild.  We define HAVE_UNORDERED_MAP and HAVE_UNORDERED_SET if we have
5
# them, UNORDERED_MAP_H and UNORDERED_SET_H to their location and
6
# UNORDERED_NAMESPACE to be the namespace unordered_map is defined in.
7
8
AC_DEFUN([PANDORA_CXX_STL_UNORDERED],[
9
  save_CXXFLAGS="${CXXFLAGS}"
10
  CXXFLAGS="${AM_CXXFLAGS} ${CXXFLAGS}"
11
  AC_LANG_PUSH(C++)
12
  AC_CACHE_CHECK([for STL unordered_map],
13
    [pandora_cv_stl_unordered],[
14
      AC_COMPILE_IFELSE(
15
        [AC_LANG_PROGRAM([[#include <unordered_map>]],
16
                         [[std::unordered_map<int, int> t]])],
17
        [pandora_cv_stl_unordered="yes"],
18
        [pandora_cv_stl_unordered="no"])])
19
20
  AS_IF([test "x${pandora_cv_stl_unordered}" != "xyes"],[
21
    AC_CACHE_CHECK([for tr1 unordered_map],
22
      [pandora_cv_tr1_unordered],[
23
        AC_COMPILE_IFELSE(
24
          [AC_LANG_PROGRAM([[
25
/* We put in this define because of a YACC symbol clash in Drizzle.
26
   Seriously... I cannot believe the GCC guys defined a piece of the internals
27
   of this named IF - and I can't believe that YACC generates a token define
28
   called IF. Really?
29
*/
30
#define IF 21;
31
#include <tr1/unordered_map>
32
            ]],[[
33
std::tr1::unordered_map<int, int> t
34
          ]])],
35
          [pandora_cv_tr1_unordered="yes"],
36
          [pandora_cv_tr1_unordered="no"])])
37
  ])
38
39
  AS_IF([test "x${pandora_cv_stl_unordered}" != "xyes" -a "x${pandora_cv_tr1_unordered}" != "xyes"],[
40
    AC_CACHE_CHECK([for boost unordered_map],
41
      [pandora_cv_boost_unordered],[
42
        AC_COMPILE_IFELSE(
43
          [AC_LANG_PROGRAM([[#include <boost/unordered_map.hpp>]],
44
                           [[boost::unordered_map<int, int> t]])],
45
          [pandora_cv_boost_unordered="yes"],
46
          [pandora_cv_boost_unordered="no"])])
47
  ])
48
49
  CXXFLAGS="${save_CXXFLAGS}"
50
  AC_LANG_POP()
51
52
  AS_IF([test "x${pandora_cv_stl_unordered}" = "xyes"],[
53
    AC_DEFINE(HAVE_STD_UNORDERED_MAP, 1,
54
              [if the compiler has std::unordered_map])
55
    AC_DEFINE(HAVE_STD_UNORDERED_SET, 1,
56
              [if the compiler has std::unordered_set])
57
    pandora_has_unordered=yes
58
  ])
59
  AS_IF([test "x${pandora_cv_tr1_unordered}" = "xyes"],[
60
    AC_DEFINE(HAVE_TR1_UNORDERED_MAP, 1,
61
              [if the compiler has std::tr1::unordered_map])
62
    AC_DEFINE(HAVE_TR1_UNORDERED_SET, 1,
63
              [if the compiler has std::tr1::unordered_set])
64
    pandora_has_unordered=yes
65
  ])
66
  AS_IF([test "x${pandora_cv_boost_unordered}" = "xyes"],[
67
    AC_DEFINE(HAVE_BOOST_UNORDERED_MAP, 1,
68
              [if the compiler has boost::unordered_map])
69
    AC_DEFINE(HAVE_BOOST_UNORDERED_SET, 1,
70
              [if the compiler has boost::unordered_set])
71
    pandora_has_unordered=yes
72
  ])
73
    
74
  AS_IF([test "x${pandora_has_unordered}" != "xyes"],[
75
    AC_MSG_WARN([could not find an STL unordered_map])
76
  ])
77
])
78
79
AC_DEFUN([PANDORA_HAVE_CXX_UNORDERED],[
80
  AC_REQUIRE([PANDORA_CXX_STL_UNORDERED])
81
])
82
83
AC_DEFUN([PANDORA_REQUIRE_CXX_UNORDERED],[
84
  AC_REQUIRE([PANDORA_HAVE_CXX_UNORDERED])
85
  AS_IF([test "x${pandora_has_unordered}" != "xyes"],[
86
    AC_MSG_ERROR([An STL compliant unordered_map is required for ${PACKAGE}.
87
    Implementations can be found in Recent versions of gcc and in boost])
88
  ])
481.1.9 by Monty Taylor
Added autoconf tests for location of cstdint and cinttypes. Use those in C++ programs now, so that we don't have to define _STDC_LIMIT_MACROS, etc by hand. Stop, in fact, defining those by hand.
89
])