c++: fix C++11 compatibility
[awesomized/libmemcached] / m4 / ax_cxx_gcc_abi_demangle.m4
index 2da0057e78f44b49370b0d2de74444e5e396473f..072d5db882e10971f8376d78915171418fa6250c 100644 (file)
@@ -16,6 +16,7 @@
 #
 # LICENSE
 #
+#   Copyright (c) 2012 Brian Aker <brian@tangent.org>
 #   Copyright (c) 2008 Neil Ferguson <nferguso@eso.org>
 #
 #   Copying and distribution of this file, with or without modification, are
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 9
+#serial 10
 
-  AC_DEFUN([AX_CXX_GCC_ABI_DEMANGLE], 
-      [AC_CACHE_CHECK([whether the compiler supports GCC C++ ABI name demangling],
-        [ax_cv_cxx_gcc_abi_demangle],
-        [AC_LANG_PUSH([C++])
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM(
-            [
-#include <typeinfo>
+AC_DEFUN([AX_CXX_GCC_ABI_DEMANGLE],
+    [AC_PREREQ([2.63])dnl
+    AC_CACHE_CHECK([whether the compiler supports GCC C++ ABI name demangling],
+      [ax_cv_cxx_gcc_abi_demangle],
+      [AC_LANG_PUSH([C++])
+      AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <typeinfo>
 #include <cxxabi.h>
 #include <cstdlib>
 #include <string>
+          template<typename TYPE>
+          class A {};]],
+          [[A<int> instance;
+#if defined(_WIN32) 
+          return EXIT_FAILURE; 
+#endif
+          int status = 0;
+          char* c_name = abi::__cxa_demangle(typeid(instance).name(), 0, 0, &status);
 
-template<typename TYPE> class A {};
-            ],[
-A<int> instance;
-int status = 0;
-char* c_name = 0;
+          std::string name(c_name);
+          ::free(c_name);
 
-c_name = abi::__cxa_demangle(typeid(instance).name(), 0, 0, &status);
-std::string name(c_name);
-::free(c_name);
-return name == "A<int>";
-            ])],
-          [ax_cv_cxx_gcc_abi_demangle=yes],
-          [ax_cv_cxx_gcc_abi_demangle=no])
-        AC_LANG_POP()
-        ])
-
-        if test "$ax_cv_cxx_gcc_abi_demangle" = yes; then
-          AC_DEFINE(HAVE_GCC_ABI_DEMANGLE, [1], [define if the compiler supports GCC C++ ABI name demangling])
-        fi
-      ])
+          if (name.compare("A<int>") != 0)
+          { 
+          return EXIT_FAILURE;
+          }]])],
+        [ax_cv_cxx_gcc_abi_demangle=yes],
+        [ax_cv_cxx_gcc_abi_demangle=no],
+        [ax_cv_cxx_gcc_abi_demangle=no])
+      AC_LANG_POP])
+      AC_MSG_CHECKING([checking for cxx_gcc_abi_demangle])
+  AC_MSG_RESULT(["$ax_cv_cxx_gcc_abi_demangle"])
+  AS_IF([test "x$ax_cv_cxx_gcc_abi_demangle" = xyes],
+      [AC_DEFINE([HAVE_GCC_ABI_DEMANGLE],[1],[define if the compiler supports GCC C++ ABI name demangling])])
+  ])