Store up errno in a couple of spots.
[m6w6/libmemcached] / m4 / pandora_have_libmemcached.m4
index 25c056131ea9789721df2dcb8d302db9a224181a..a281306b91a17178075977fceb0bdd64d36a8131 100644 (file)
@@ -1,5 +1,5 @@
-dnl  Copyright (C) 2009 Sun Microsystems
-dnl This file is free software; Sun Microsystems
+dnl  Copyright (C) 2009 Sun Microsystems, Inc.
+dnl This file is free software; Sun Microsystems, Inc.
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
@@ -24,6 +24,11 @@ AC_DEFUN([_PANDORA_SEARCH_LIBMEMCACHED],[
       memcached_dump_func *df;
       memcached_lib_version();
     ])
+  ],[
+    ac_cv_libmemcached="no"
+  ])
+
+  AS_IF([test "x$ac_enable_libmemcached" = "xyes"],[
     AC_LIB_HAVE_LINKFLAGS(memcachedprotocol,,[
       #include <libmemcached/protocol_handler.h>
     ],[
@@ -31,7 +36,7 @@ AC_DEFUN([_PANDORA_SEARCH_LIBMEMCACHED],[
       protocol_handle= memcached_protocol_create_instance();
     ])
   ],[
-    ac_cv_libmemcached="no"
+    ac_cv_libmemcachedprotocol="no"
   ])
   
   AC_CACHE_CHECK([if libmemcached has memcached_server_fn],
@@ -42,21 +47,60 @@ memcached_server_fn callbacks[1];
     ]])],
     [pandora_cv_libmemcached_server_fn=yes],
     [pandora_cv_libmemcached_server_fn=no])])
+
   AS_IF([test "x$pandora_cv_libmemcached_server_fn" = "xyes"],[
     AC_DEFINE([HAVE_MEMCACHED_SERVER_FN],[1],[If we have the new memcached_server_fn typedef])
   ])
+])
 
-  AM_CONDITIONAL(HAVE_LIBMEMCACHED, [test "x${ac_cv_libmemcached}" = "xyes"])
+AC_DEFUN([_PANDORA_RECENT_LIBMEMCACHED],[
+
+  AC_CACHE_CHECK([if libmemcached is recent enough],
+    [pandora_cv_recent_libmemcached],[
+    AS_IF([test "x${ac_cv_libmemcached}" = "xno"],[
+      pandora_cv_recent_libmemcached=no
+    ],[
+      AS_IF([test "x$1" != "x"],[
+        pandora_need_libmemcached_version=`echo "$1" | perl -nle '/(\d+)\.(\d+)/; printf "%d%0.3d000", $[]1, $[]2 ;'`
+        AS_IF([test "x${pandora_need_libmemcached_version}" = "x0000000"],[
+          pandora_cv_recent_libmemcached=yes
+        ],[
+          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <libmemcached/configure.h>
+
+#if !defined(LIBMEMCACHED_VERSION_HEX) || LIBMEMCACHED_VERSION_HEX < 0x]]${pandora_need_libmemcached_version}[[
+# error libmemcached too old!
+#endif
+            ]],[[]])
+          ],[
+            pandora_cv_recent_libmemcached=yes
+          ],[
+            pandora_cv_recent_libmemcached=no
+          ])
+        ])
+      ],[
+        pandora_cv_recent_libmemcached=yes
+      ])
+    ])
+  ])
+
+  AM_CONDITIONAL(HAVE_LIBMEMCACHED,[test "x${ac_cv_libmemcached}" = "xyes" -a "x${pandora_cv_recent_libmemcached}" = "xyes"])
   
 ])
 
 AC_DEFUN([PANDORA_HAVE_LIBMEMCACHED],[
   AC_REQUIRE([_PANDORA_SEARCH_LIBMEMCACHED])
+  _PANDORA_RECENT_LIBMEMCACHED($1)
 ])
 
 AC_DEFUN([PANDORA_REQUIRE_LIBMEMCACHED],[
-  AC_REQUIRE([PANDORA_HAVE_LIBMEMCACHED])
-  AS_IF([test x$ac_cv_libmemcached = xno],
+  PANDORA_HAVE_LIBMEMCACHED($1)
+  AS_IF([test "x{$pandora_cv_recent_libmemcached}" = "xno"],
       AC_MSG_ERROR([libmemcached is required for ${PACKAGE}]))
 ])
 
+AC_DEFUN([PANDORA_REQUIRE_LIBMEMCACHEDPROTOCOL],[
+  PANDORA_HAVE_LIBMEMCACHED($1)
+  AS_IF([test x$ac_cv_libmemcachedprotocol = xno],
+      AC_MSG_ERROR([libmemcachedprotocol is required for ${PACKAGE}]))
+])