@@ -20,6 +20,9 @@ PHP_ARG_ENABLE(memcached-json, whether to enable memcached json serializer suppo
2020PHP_ARG_ENABLE(memcached-sasl, whether to disable memcached sasl support,
2121[ --disable-memcached-sasl Disable memcached sasl support] , yes, no)
2222
23+ PHP_ARG_ENABLE(memcached-protocol, whether to enable memcached protocol support,
24+ [ --enable-memcached-protocol Enable memcached protocoll support] , no, no)
25+
2326if test -z "$PHP_ZLIB_DIR"; then
2427PHP_ARG_WITH(zlib-dir, for ZLIB,
2528[ --with-zlib-dir[ =DIR] Set the path to ZLIB install prefix.] , no)
@@ -337,15 +340,75 @@ if test "$PHP_MEMCACHED" != "no"; then
337340 AC_DEFINE ( HAVE_LIBMEMCACHED_TOUCH , [ 1] , [ Whether memcached_touch is defined] )
338341 fi
339342
340- PHP_SUBST(MEMCACHED_SHARED_LIBADD)
341-
342343 PHP_MEMCACHED_FILES="php_memcached.c php_libmemcached_compat.c fastlz/fastlz.c g_fmt.c"
343344
344345 if test "$PHP_MEMCACHED_SESSION" != "no"; then
345346 PHP_MEMCACHED_FILES="${PHP_MEMCACHED_FILES} php_memcached_session.c"
346347 fi
347348
348- PHP_NEW_EXTENSION(memcached, $PHP_MEMCACHED_FILES, $ext_shared,,$SESSION_INCLUDES $IGBINARY_INCLUDES)
349+ LIBEVENT_INCLUDES=""
350+ AC_MSG_CHECKING ( [ for memcached protocol support] )
351+ if test "$PHP_MEMCACHED_PROTOCOL" != "no"; then
352+ AC_MSG_RESULT ( [ enabled] )
353+
354+ AC_MSG_CHECKING ( [ for libmemcachedprotocol] )
355+ if test "$PHP_LIBMEMCACHED_DIR" != "no" && test "$PHP_LIBMEMCACHED_DIR" != "yes"; then
356+ if ! test -r "$PHP_LIBMEMCACHED_DIR/include/libmemcachedprotocol-0.0/handler.h"; then
357+ AC_MSG_ERROR ( [ Can't find libmemcachedprotocol headers under "$PHP_LIBMEMCACHED_DIR"] )
358+ fi
359+ fi
360+ AC_MSG_RESULT ( [ found] )
361+
362+ ORIG_CFLAGS="$CFLAGS"
363+ CFLAGS="$CFLAGS -I$PHP_LIBMEMCACHED_INCDIR"
364+
365+ AC_CACHE_CHECK ( [ whether libmemcachedprotocol is usable] , ac_cv_have_libmemcachedprotocol , [
366+ AC_TRY_COMPILE (
367+ [ #include <libmemcachedprotocol-0.0/handler.h> ] ,
368+ [ memcached_binary_protocol_callback_st s_test_impl;
369+ s_test_impl.interface.v1.delete_object = 0;
370+ ] ,
371+ [ ac_cv_have_libmemcachedprotocol="yes" ] ,
372+ [ ac_cv_have_libmemcachedprotocol="no" ]
373+ )
374+ ] )
375+ CFLAGS="$ORIG_CFLAGS"
376+
377+ if test "$ac_cv_have_libmemcachedprotocol" != "yes"; then
378+ AC_MSG_ERROR ( [ Cannot enable libmemcached protocol] )
379+ fi
380+
381+ PHP_ADD_LIBRARY_WITH_PATH(memcachedprotocol, $PHP_LIBMEMCACHED_DIR/$PHP_LIBDIR, MEMCACHED_SHARED_LIBADD)
382+
383+ AC_PATH_PROG ( PKG_CONFIG , pkg-config , no )
384+ if test "x$PKG_CONFIG" = "xno"; then
385+ AC_MSG_RESULT ( [ pkg-config not found] )
386+ AC_MSG_ERROR ( [ Please reinstall the pkg-config distribution] )
387+ fi
388+
389+ AC_MSG_CHECKING ( [ for libevent] )
390+ if $PKG_CONFIG --exists libevent; then
391+ PHP_MEMCACHED_LIBEVENT_VERSION=`$PKG_CONFIG libevent --modversion`
392+ PHP_MEMCACHED_LIBEVENT_PREFIX=`$PKG_CONFIG libevent --variable=prefix`
393+
394+ AC_MSG_RESULT ( [ found version $PHP_MEMCACHED_LIBEVENT_VERSION, under $PHP_MEMCACHED_LIBEVENT_PREFIX] )
395+ LIBEVENT_LIBS=`$PKG_CONFIG libevent --libs`
396+ LIBEVENT_INCLUDES=`$PKG_CONFIG libevent --cflags`
397+
398+ PHP_EVAL_LIBLINE($LIBEVENT_LIBS, MEMCACHED_SHARED_LIBADD)
399+ PHP_EVAL_INCLINE($LIBEVENT_INCLUDES)
400+ else
401+ AC_MSG_ERROR ( Unable to find libevent installation )
402+ fi
403+ PHP_MEMCACHED_FILES="${PHP_MEMCACHED_FILES} php_memcached_server.c"
404+ AC_DEFINE ( HAVE_MEMCACHED_PROTOCOL ,1 ,[ Whether memcached protocol is enabled] )
405+ else
406+ AC_MSG_RESULT ( [ disabled] )
407+ fi
408+
409+ PHP_SUBST(MEMCACHED_SHARED_LIBADD)
410+
411+ PHP_NEW_EXTENSION(memcached, $PHP_MEMCACHED_FILES, $ext_shared,,$SESSION_INCLUDES $IGBINARY_INCLUDES $LIBEVENT_INCLUDES)
349412 PHP_ADD_BUILD_DIR($ext_builddir/fastlz, 1)
350413
351414 ifdef ( [ PHP_ADD_EXTENSION_DEP] ,
0 commit comments